diff --git a/.circleci/config.yml b/.circleci/config.yml index 62f8aa66a0a..be32a5c3f25 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -20,6 +20,50 @@ executors: docker: - image: "cimg/base:stable" +commands: + resolve_release_ref: + description: Resolve RELEASE_REF from PR base branch, fallback to closest base branch script. + steps: + - run: + name: Resolve RELEASE_REF + command: | + PR_BASE_REF="" + + if [ -n "${CIRCLE_PULL_REQUEST:-}" ]; then + PR_NUMBER="${CIRCLE_PULL_REQUEST##*/}" + API_URL="https://api.github.com/repos/${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}/pulls/${PR_NUMBER}" + + if [ -n "${GITHUB_TOKEN:-}" ]; then + PR_BASE_REF="$(curl --silent --show-error --fail \ + -H "Accept: application/vnd.github+json" \ + -H "Authorization: Bearer ${GITHUB_TOKEN}" \ + "${API_URL}" \ + | python3 -c 'import json,sys; print((json.load(sys.stdin).get("base") or {}).get("ref",""))')" || PR_BASE_REF="" + else + PR_BASE_REF="$(curl --silent --show-error --fail \ + -H "Accept: application/vnd.github+json" \ + "${API_URL}" \ + | python3 -c 'import json,sys; print((json.load(sys.stdin).get("base") or {}).get("ref",""))')" || PR_BASE_REF="" + fi + fi + + if [ -n "${PR_BASE_REF:-}" ]; then + case "${PR_BASE_REF}" in + master|release/6.9.x|lts/*) + RESOLVED_RELEASE_REF="${PR_BASE_REF}" + echo "Using PR base branch for RELEASE_REF: ${RESOLVED_RELEASE_REF}" + ;; + *) + RESOLVED_RELEASE_REF="$(bash ./shared/tools/ci/detect-base-branch.sh origin)" + echo "PR base '${PR_BASE_REF}' is outside allowed refs, using fallback RELEASE_REF: ${RESOLVED_RELEASE_REF}" + ;; + esac + else + RESOLVED_RELEASE_REF="$(bash ./shared/tools/ci/detect-base-branch.sh origin)" + echo "Using detected fallback RELEASE_REF: ${RESOLVED_RELEASE_REF}" + fi + echo "export RELEASE_REF=${RESOLVED_RELEASE_REF}" >> "$BASH_ENV" + echo "RELEASE_REF=${RESOLVED_RELEASE_REF}" >> "$BASH_ENV" jobs: ensure_formatting: @@ -74,8 +118,15 @@ jobs: docker: - image: cimg/python:3.12 working_directory: ~/repo + parameters: + ci_executor: + type: executor + description: Executor to use for this job. + default: ci_environment + executor: << parameters.ci_executor >> steps: - checkout + - resolve_release_ref - run: name: Build Connectors Schemas for XTM composer and Update Config Documentation command: | @@ -87,7 +138,7 @@ jobs: - run: name: Commit Manifest if changed command: | - if [ "$CIRCLE_BRANCH" = "master" ]; then + if [ "$CIRCLE_BRANCH" = "$RELEASE_REF" ]; then echo "$GITHUB_GPG_SECRET_KEY" | base64 -d > /tmp/private.key gpg --import /tmp/private.key rm /tmp/private.key @@ -106,13 +157,24 @@ jobs: # Add custom flag to avoid triggering workflows git commit -m "[Automation] Build and update manifest [ci build-manifest]" # Push quietly to prevent showing the token in log - git push -q https://${GITHUB_TOKEN}@github.com/OpenCTI-Platform/connectors.git ${CIRCLE_BRANCH} + if git push -q https://${GITHUB_TOKEN}@github.com/OpenCTI-Platform/connectors.git ${CIRCLE_BRANCH}; then + echo "Manifest changes pushed successfully." + exit 0 + else + echo "Push rejected, ${CIRCLE_BRANCH} probably moved. Trying rebase..." + if ! git pull --rebase origin ${CIRCLE_BRANCH}; then + echo "Rebase failed, aborting." + git rebase --abort + exit 1 + fi + git push -q https://${GITHUB_TOKEN}@github.com/OpenCTI-Platform/connectors.git ${CIRCLE_BRANCH} + fi else echo "Manifest not changed. Skipping commit." exit 0 fi else - echo "Skipping, not master" + echo "Skipping, not $RELEASE_REF branch." fi - run: name: Skip steps if flag detected @@ -126,8 +188,15 @@ jobs: - image: cimg/python:3.11 working_directory: ~/repo parallelism: 4 + parameters: + ci_executor: + type: executor + description: Executor to use for this job. + default: ci_environment + executor: << parameters.ci_executor >> steps: - checkout + - resolve_release_ref - run: | sudo apt-get update -qq sudo apt install -y \ @@ -145,7 +214,7 @@ jobs: | circleci tests run \ --split-by=timings \ --command="xargs bash run_test.sh" - # Save JUnit so CircleCI can show pass/fail per connector and build timings history + # Save JUnit so CircleCI can show pass/fail per connector and build timings history - store_test_results: path: test_outputs @@ -161,6 +230,7 @@ jobs: executor: << parameters.ci_executor >> steps: - checkout + - resolve_release_ref - run: name: Install dependencies command: pip install -r .circleci/scripts/requirements.txt @@ -224,7 +294,7 @@ workflows: - test filters: tags: - only: /[0-9]+(\.[0-9]+)+(\.[0-9]+)*/ + only: /[0-9]+(\.[0-9]+)+(\.[0-9]+)*(-lts\.[0-9]*)?/ branches: ignore: /.*/ - build: @@ -281,4 +351,4 @@ workflows: - build_prerelease filters: tags: - only: /.*/ \ No newline at end of file + only: /.*/ diff --git a/.circleci/scripts/generate_ci.py b/.circleci/scripts/generate_ci.py index 3c6564d086b..4361eb55259 100644 --- a/.circleci/scripts/generate_ci.py +++ b/.circleci/scripts/generate_ci.py @@ -119,6 +119,7 @@ def main(): pycti=get_pycti(), tags=get_tags(), repo=REPOSITORY, + release_ref=os.getenv("RELEASE_REF", ""), ) write_config(config) diff --git a/.circleci/scripts/requirements.txt b/.circleci/scripts/requirements.txt index f6b4bc5ccac..7b6a88234f6 100644 --- a/.circleci/scripts/requirements.txt +++ b/.circleci/scripts/requirements.txt @@ -1,3 +1,3 @@ Jinja2==3.1.6 PyYAML==6.0.3 -requests==2.32.5 \ No newline at end of file +requests==2.33.0 \ No newline at end of file diff --git a/.circleci/templates/dynamic.yml.j2 b/.circleci/templates/dynamic.yml.j2 index 9ab05cb7101..fd2f2c172b2 100644 --- a/.circleci/templates/dynamic.yml.j2 +++ b/.circleci/templates/dynamic.yml.j2 @@ -6,6 +6,8 @@ jobs: build_{{top_dir}}_{{sub_dir}}: docker: - image: cimg/base:current-24.04 + environment: + RELEASE_REF: "{{ release_ref }}" steps: - checkout - setup_remote_docker @@ -39,17 +41,17 @@ jobs: {% if pycti.replace -%} {% if "prerelease" in tags %} - git+https://github.com/OpenCTI-Platform/opencti.git@master#subdirectory=client-python + git+https://github.com/OpenCTI-Platform/opencti.git@$RELEASE_REF#subdirectory=client-python find . -name requirements.txt -exec sed "s|^pycti==.*$|pycti @ git+https://github.com/OpenCTI-Platform/opencti.git@$CIRCLE_BRANCH#subdirectory=client-python|" -i {} \; find . -name pyproject.toml -exec sed "s|pycti==.*$|pycti @ git+https://github.com/OpenCTI-Platform/opencti.git@$CIRCLE_BRANCH#subdirectory=client-python\",|" -i {} \; find . -name requirements.txt -exec sed "s|^connectors-sdk.*$|connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@$CIRCLE_BRANCH#subdirectory=connectors-sdk|" -i {} \; find . -name pyproject.toml -exec sed "s|connectors-sdk.*$|connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@$CIRCLE_BRANCH#subdirectory=connectors-sdk\",|" -i {} \; {% elif "rolling" in tags %} - find . -name requirements.txt -exec sed "s|^pycti==.*$|pycti @ git+https://github.com/OpenCTI-Platform/opencti.git@master#subdirectory=client-python|" -i {} \; - find . -name pyproject.toml -exec sed "s|pycti==.*$|pycti @ git+https://github.com/OpenCTI-Platform/opencti.git@master#subdirectory=client-python\",|" -i {} \; - find . -name requirements.txt -exec sed "s|^connectors-sdk.*$|connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk|" -i {} \; - find . -name pyproject.toml -exec sed "s|connectors-sdk.*$|connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk\",|" -i {} \; + find . -name requirements.txt -exec sed "s|^pycti==.*$|pycti @ git+https://github.com/OpenCTI-Platform/opencti.git@$RELEASE_REF#subdirectory=client-python|" -i {} \; + find . -name pyproject.toml -exec sed "s|pycti==.*$|pycti @ git+https://github.com/OpenCTI-Platform/opencti.git@$RELEASE_REF#subdirectory=client-python\",|" -i {} \; + find . -name requirements.txt -exec sed "s|^connectors-sdk.*$|connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@$RELEASE_REF#subdirectory=connectors-sdk|" -i {} \; + find . -name pyproject.toml -exec sed "s|connectors-sdk.*$|connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@$RELEASE_REF#subdirectory=connectors-sdk\",|" -i {} \; {% endif %} {% endif -%} docker buildx build . \ diff --git a/.github/scripts/build_test_matrix.py b/.github/scripts/build_test_matrix.py new file mode 100644 index 00000000000..2ee152090f7 --- /dev/null +++ b/.github/scripts/build_test_matrix.py @@ -0,0 +1,221 @@ +#!/usr/bin/env python3 +""" +Generate the GitHub Actions test matrix for connector tests. + +Applies the same filtering logic as run_test.sh to decide which connectors +need testing, then builds a matrix respecting the GitHub Actions job limit. + +Filtering rules (mirrors run_test.sh): + 1. On master branch → include all connectors + 2. Changes outside connector dirs → include all connectors + 3. connectors-sdk changed + connector depends on it → include that connector + 4. Connector itself changed → include that connector + 5. Otherwise → skip + +Batching rules: + - Below 256 jobs → one job per connector (maximum granularity) + - At or above 256 jobs → batch by connector type to stay under the limit +""" + +import json +import math +import os +import subprocess +from pathlib import Path + +GITHUB_ACTIONS_JOB_LIMIT = 256 + +CONNECTOR_DIRS = [ + "connectors-sdk", + "external-import", + "internal-enrichment", + "internal-export-file", + "internal-import-file", + "stream", +] + + +# --------------------------------------------------------------------------- +# Git helpers +# --------------------------------------------------------------------------- + + +def git(*args: str) -> str: + return subprocess.run( + ["git"] + list(args), capture_output=True, text=True + ).stdout.strip() + + +def get_base_commit() -> str | None: + release_ref = os.environ.get("RELEASE_REF", "master") + commit = git("merge-base", f"origin/{release_ref}", "HEAD") + return commit or None + + +def has_changes(base_commit: str, *pathspecs: str) -> bool: + result = subprocess.run( + ["git", "diff", "--name-only", base_commit, "HEAD", "--"] + list(pathspecs), + capture_output=True, + text=True, + ) + return bool(result.stdout.strip()) + + +def has_sdk_dependency(connector_dir: Path) -> bool: + result = subprocess.run( + ["grep", "-rl", "connectors-sdk", str(connector_dir)], + capture_output=True, + text=True, + ) + return bool(result.stdout.strip()) + + +# --------------------------------------------------------------------------- +# Per-connector helpers +# --------------------------------------------------------------------------- + + +def connector_dir(req_path: str) -> Path: + """ + Directory that owns the connector — mirrors `$project/..` from run_test.sh, + where $project is dirname(req_path). + + Examples: + external-import/my-connector/tests/test-requirements.txt → external-import/my-connector + connectors-sdk/tests/test-requirements.txt → connectors-sdk + stream/sekoia-intel/src/test-requirements.txt → stream/sekoia-intel + """ + return Path(req_path).parent.parent + + +def connector_type(req_path: str) -> str: + """Top-level directory, e.g. 'external-import'.""" + return Path(req_path).parts[0] + + +def connector_name(req_path: str) -> str: + """Second path segment, e.g. 'my-connector'.""" + parts = Path(req_path).parts + return parts[1] if len(parts) >= 2 else req_path + + +# --------------------------------------------------------------------------- +# Filtering +# --------------------------------------------------------------------------- + + +def should_run( + req_path: str, + base_commit: str | None, + is_master: bool, + changes_outside_scope: bool, + sdk_changed: bool, +) -> bool: + if is_master or changes_outside_scope: + return True + if base_commit is None: + return True # no git history, run everything + + cdir = connector_dir(req_path) + if has_changes(base_commit, str(cdir)): + return True + if sdk_changed and has_sdk_dependency(cdir): + return True + return False + + +# --------------------------------------------------------------------------- +# Matrix building +# --------------------------------------------------------------------------- + + +def make_entry(req_paths: list[str]) -> dict: + names = [connector_name(p) for p in req_paths] + if len(names) == 1: + name = f"{connector_type(req_paths[0])}/{names[0]}" + else: + name = ", ".join(names) + return {"name": name, "test_requirements": "\n".join(req_paths)} + + +def build_matrix(paths: list[str]) -> list[dict]: + if len(paths) <= GITHUB_ACTIONS_JOB_LIMIT: + return [make_entry([p]) for p in paths] + + # Batch by connector type to stay under the job limit + groups: dict[str, list[str]] = {} + for p in paths: + groups.setdefault(connector_type(p), []).append(p) + + batch_size = math.ceil(len(paths) / GITHUB_ACTIONS_JOB_LIMIT) + entries = [] + for _, cpaths in sorted(groups.items()): + for i in range(0, len(cpaths), batch_size): + entries.append(make_entry(cpaths[i : i + batch_size])) + return entries + + +# --------------------------------------------------------------------------- +# Entry point +# --------------------------------------------------------------------------- + + +def write_output(key: str, value: str) -> None: + """Write a key=value pair to $GITHUB_OUTPUT (or stdout if not set).""" + output_file = os.environ.get("GITHUB_OUTPUT") + line = f"{key}={value}\n" + if output_file: + with Path(output_file).open("a") as f: + f.write(line) + else: + print(line, end="") + + +def main() -> None: + release_ref = os.environ.get("RELEASE_REF", "master") + is_master = os.environ.get("GITHUB_REF_NAME") == release_ref + base_commit = get_base_commit() + + changes_outside_scope = False + sdk_changed = False + if base_commit and not is_master: + changes_outside_scope = has_changes( + base_commit, + *[f":!{d}/**" for d in CONNECTOR_DIRS], + ) + sdk_changed = has_changes(base_commit, "connectors-sdk") + + all_paths = [ + str(Path(p)) + for p in subprocess.run( + ["find", ".", "-name", "test-requirements.txt", "-type", "f"], + capture_output=True, + text=True, + ).stdout.splitlines() + if p.strip() + ] + all_paths.sort() + + filtered = [ + p + for p in all_paths + if should_run(p, base_commit, is_master, changes_outside_scope, sdk_changed) + ] + + print(f"Total connectors with tests: {len(all_paths)}") + print(f"Connectors selected for this run: {len(filtered)}") + + if not filtered: + print("No connectors to test, skipping.") + write_output("has_tests", "false") + write_output("matrix", json.dumps({"include": []}, separators=(",", ":"))) + return + + entries = build_matrix(filtered) + print(f"Matrix jobs: {len(entries)}") + write_output("has_tests", "true") + write_output("matrix", json.dumps({"include": entries}, separators=(",", ":"))) + + +if __name__ == "__main__": + main() diff --git a/.github/scripts/coverage_inject_unexecuted_files.py b/.github/scripts/coverage_inject_unexecuted_files.py new file mode 100644 index 00000000000..10a4128455d --- /dev/null +++ b/.github/scripts/coverage_inject_unexecuted_files.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python3 +""" +Inject all connector .py files into the .coverage database as unexecuted (0%). + +Coverage's `source` option discovers files via Python's import system, so it only +finds connectors that are importable packages (i.e. have __init__.py at their root). +This script works around that by walking the source directories with os.walk() and +registering every .py file directly in the .coverage SQLite database via the +CoverageData API. Coverage then re-parses each file's AST at report time to count +executable lines and emits them at 0% in the XML output. + +Run AFTER `coverage run noop.py` and BEFORE `coverage xml`. +""" + +import fnmatch +import os + +from coverage.data import CoverageData + +SOURCE_DIRS = [ + "external-import", + "internal-enrichment", + "internal-export-file", + "internal-import-file", + "stream", +] + +OMIT_PATTERNS = ["*/tests/*", "*/test/*", "*/conftest.py"] + +SKIP_DIRS = {"__pycache__", ".git", ".venv", "node_modules", ".pytest_cache"} + + +def should_omit(path: str) -> bool: + norm = path.replace("\\", "/") + return any(fnmatch.fnmatch(norm, p) for p in OMIT_PATTERNS) + + +def main() -> None: + data = CoverageData(basename=".coverage") + data.read() + already_measured: set[str] = set(data.measured_files()) + + new_files: dict[str, set] = {} + for src_dir in SOURCE_DIRS: + if not os.path.isdir(src_dir): + print(f"WARNING: source dir not found: {src_dir!r}") + continue + for dirpath, dirnames, filenames in os.walk(src_dir, topdown=True): + dirnames[:] = [ + d for d in dirnames if d not in SKIP_DIRS and not d.startswith(".") + ] + for filename in filenames: + if not filename.endswith(".py"): + continue + rel = os.path.join(dirpath, filename) + if should_omit(rel): + continue + abs_path = os.path.abspath(rel) + if abs_path not in already_measured: + new_files[abs_path] = set() + + data.add_lines(new_files) + data.write() + print(f"Injected {len(new_files):,} unexecuted files into .coverage") + + +if __name__ == "__main__": + main() diff --git a/.github/workflows/auto-label-issues.yml b/.github/workflows/auto-label-issues.yml new file mode 100644 index 00000000000..22c91dca9ee --- /dev/null +++ b/.github/workflows/auto-label-issues.yml @@ -0,0 +1,19 @@ +name: Auto-label new issues +on: + issues: + types: [opened, reopened] +jobs: + add-needs-triage: + runs-on: ubuntu-latest + permissions: + issues: write + steps: + - uses: actions/github-script@v8 + with: + script: | + await github.rest.issues.addLabels({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number, + labels: ['needs triage'] + }); diff --git a/.github/workflows/auto-set-labels.yml b/.github/workflows/auto-set-labels.yml deleted file mode 100644 index 609452d2ab6..00000000000 --- a/.github/workflows/auto-set-labels.yml +++ /dev/null @@ -1,14 +0,0 @@ -name: Assign labels on PR from an organization -on: pull_request -jobs: - build: - runs-on: ubuntu-latest - permissions: - contents: read - pull-requests: write - steps: - - uses: actions/checkout@v5 - - name: Setting labels - uses: FiligranHQ/auto-label@1.0.0 - with: - labels_by_organization: "{\"FiligranHQ\":[\"filigran team\"]}" \ No newline at end of file diff --git a/.github/workflows/check-verified-commit.yml b/.github/workflows/check-verified-commit.yml deleted file mode 100644 index 786103eb9f0..00000000000 --- a/.github/workflows/check-verified-commit.yml +++ /dev/null @@ -1,19 +0,0 @@ -name: Check signed commits in PR -on: [pull_request,pull_request_target] -jobs: - check-signed-commits: - name: Check signed commits in PR - runs-on: ubuntu-latest - permissions: - contents: read - pull-requests: write - steps: - - name: Information about how to sign commits see https://docs.github.com/en/authentication/managing-commit-signature-verification/signing-commits - # "with comment" below does not work for forks. - run: | - echo "If you need to sign commits, Please see https://docs.github.com/en/authentication/managing-commit-signature-verification/signing-commits" - - name: Check signed commits in PR on fail see above information. - uses: 1Password/check-signed-commits-action@v1 - with: - comment: | - Thank you for your contribution, but we need you to sign your commits. Please see https://docs.github.com/en/authentication/managing-commit-signature-verification/signing-commits diff --git a/.github/workflows/do-not-merge-label.yml b/.github/workflows/do-not-merge-label.yml new file mode 100644 index 00000000000..59ea1f93893 --- /dev/null +++ b/.github/workflows/do-not-merge-label.yml @@ -0,0 +1,16 @@ +name: Do Not Merge label check + +on: + pull_request: + types: [opened, reopened, labeled, unlabeled, synchronize] + +jobs: + do-not-merge: + name: Block merge if "do not merge" label is present + runs-on: ubuntu-latest + steps: + - name: Check for "do not merge" label + if: contains(github.event.pull_request.labels.*.name, 'do not merge') + run: | + echo "::error::This PR has the 'do not merge' label. Remove it before merging." + exit 1 diff --git a/.github/workflows/integrations-add-to-project.yml b/.github/workflows/integrations-add-to-project.yml index 70453b875a2..9b64d4e6130 100644 --- a/.github/workflows/integrations-add-to-project.yml +++ b/.github/workflows/integrations-add-to-project.yml @@ -13,6 +13,8 @@ jobs: add-to-project: name: Add issue to project runs-on: ubuntu-latest + env: + FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true steps: - uses: actions/add-to-project@v1.0.2 with: diff --git a/.github/workflows/pr-check-conventions.yml b/.github/workflows/pr-check-conventions.yml new file mode 100644 index 00000000000..2f63f51df9a --- /dev/null +++ b/.github/workflows/pr-check-conventions.yml @@ -0,0 +1,69 @@ +name: PR conventions checks +on: + pull_request: + types: [opened, edited, reopened, ready_for_review, synchronize] +jobs: + check-organization: + name: Check if label can be setup based on organization + runs-on: ubuntu-latest + permissions: + contents: read + pull-requests: write + steps: + - uses: actions/checkout@v6 + - name: Setting labels + uses: FiligranHQ/auto-label@1.0.0 + with: + labels_by_organization: "{\"FiligranHQ\":[\"filigran team\"]}" + check-signed-commits: + name: Check signed commits in PR + runs-on: ubuntu-latest + permissions: + contents: read + pull-requests: write + steps: + - name: Information about how to sign commits see https://docs.github.com/en/authentication/managing-commit-signature-verification/signing-commits + # "with comment" below does not work for forks. + run: | + echo "If you need to sign commits, Please see https://docs.github.com/en/authentication/managing-commit-signature-verification/signing-commits" + - name: Check signed commits in PR on fail see above information. + uses: 1Password/check-signed-commits-action@v1 + with: + comment: | + Thank you for your contribution, but we need you to sign your commits. Please see https://docs.github.com/en/authentication/managing-commit-signature-verification/signing-commits + check-pr-issue: + name: Check Pull Request is linked to an issue + if: ${{ !contains(github.event.pull_request.labels.*.name, 'dependencies') }} + runs-on: ubuntu-latest + permissions: + contents: read + pull-requests: write + steps: + - name: Check for linked issues + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PR_NUMBER: ${{ github.event.pull_request.number }} + REPO: ${{ github.repository }} + run: | + # Get PR details including linked issues + LINKED_ISSUES=$(gh pr view $PR_NUMBER --repo $REPO --json closingIssuesReferences --jq '.closingIssuesReferences | length') + + if [ "$LINKED_ISSUES" -eq 0 ]; then + echo "::error::No linked issues found. Please link at least one issue to this Pull Request." + echo "You can link an issue by using keywords like 'Fixes #123', 'Closes #123', or 'Resolves #123' in the PR description." + exit 1 + else + echo "✓ Found $LINKED_ISSUES linked issue(s)" + fi + check-pr-title-convention: + name: Check that PR title follows convention + if: ${{ github.event.pull_request.user.login != 'renovate[bot]' }} + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - uses: Slashgear/action-check-pr-title@76166c63ec0b25cdbe693e5e972e83ca186313fb + with: + regexp: '^\[\w+.+\].+$' + flags: "gm" + helpMessage: "Format: '[Connector Name] Message' for example '[MISP] updating a doc page'. see https://github.com/OpenCTI-Platform/connectors/blob/master/CONTRIBUTING.md#contributing" \ No newline at end of file diff --git a/.github/workflows/tests-connectors.yml b/.github/workflows/tests-connectors.yml new file mode 100644 index 00000000000..acba519744f --- /dev/null +++ b/.github/workflows/tests-connectors.yml @@ -0,0 +1,176 @@ +name: Tests Connectors + +on: + push: + branches: + - master + - 'release/6.9.x' + - 'lts/*' # Match any branch starting with 'lts/' + paths: + - 'connectors-sdk/**' + - 'external-import/**' + - 'internal-enrichment/**' + - 'internal-export-file/**' + - 'internal-import-file/**' + - 'stream/**' + - 'shared/**' + - 'templates/**' + - 'run_test.sh' + - '.github/workflows/tests-connectors.yml' + - '.github/scripts/**' + pull_request: + paths: + - 'connectors-sdk/**' + - 'external-import/**' + - 'internal-enrichment/**' + - 'internal-export-file/**' + - 'internal-import-file/**' + - 'stream/**' + - 'shared/**' + - 'templates/**' + - 'run_test.sh' + - '.github/workflows/tests-connectors.yml' + - '.github/scripts/**' + +concurrency: + group: tests-${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +permissions: + contents: read + +jobs: + detect-test-files: + name: Detect test files + runs-on: ubuntu-latest + outputs: + matrix: ${{ steps.set-matrix.outputs.matrix }} + has_tests: ${{ steps.set-matrix.outputs.has_tests }} + steps: + - uses: actions/checkout@v6 + with: + fetch-depth: 0 # needed for git merge-base in build_test_matrix.py + + - name: Resolve RELEASE_REF + run: | + PR_BASE_REF="${{ github.base_ref }}" + + if [ -n "${PR_BASE_REF:-}" ]; then + case "${PR_BASE_REF}" in + master|release/6.9.x|lts/*) + RESOLVED_RELEASE_REF="${PR_BASE_REF}" + echo "Using PR base branch for RELEASE_REF: ${RESOLVED_RELEASE_REF}" + ;; + *) + RESOLVED_RELEASE_REF="$(bash ./shared/tools/ci/detect-base-branch.sh origin)" + echo "PR base '${PR_BASE_REF}' is outside allowed refs, using fallback RELEASE_REF: ${RESOLVED_RELEASE_REF}" + ;; + esac + else + RESOLVED_RELEASE_REF="$(bash ./shared/tools/ci/detect-base-branch.sh origin)" + echo "Using detected fallback RELEASE_REF: ${RESOLVED_RELEASE_REF}" + fi + echo "RELEASE_REF=${RESOLVED_RELEASE_REF}" >> "$GITHUB_ENV" + + - id: set-matrix + name: Build test matrix from test-requirements.txt files + run: python .github/scripts/build_test_matrix.py + + test: + name: Test ${{ matrix.name }} + needs: + - detect-test-files + if: needs.detect-test-files.outputs.has_tests == 'true' + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: ${{ fromJson(needs.detect-test-files.outputs.matrix) }} + + steps: + - uses: actions/checkout@v6 + with: + fetch-depth: 0 + + - name: Resolve RELEASE_REF + run: | + PR_BASE_REF="${{ github.base_ref }}" + + if [ -n "${PR_BASE_REF:-}" ]; then + case "${PR_BASE_REF}" in + master|release/6.9.x|lts/*) + RESOLVED_RELEASE_REF="${PR_BASE_REF}" + echo "Using PR base branch for RELEASE_REF: ${RESOLVED_RELEASE_REF}" + ;; + *) + RESOLVED_RELEASE_REF="$(bash ./shared/tools/ci/detect-base-branch.sh origin)" + echo "PR base '${PR_BASE_REF}' is outside allowed refs, using fallback RELEASE_REF: ${RESOLVED_RELEASE_REF}" + ;; + esac + else + RESOLVED_RELEASE_REF="$(bash ./shared/tools/ci/detect-base-branch.sh origin)" + echo "Using detected fallback RELEASE_REF: ${RESOLVED_RELEASE_REF}" + fi + echo "RELEASE_REF=${RESOLVED_RELEASE_REF}" >> "$GITHUB_ENV" + + - name: Setup uv + uses: astral-sh/setup-uv@v8.0.0 + with: + enable-cache: false + python-version: "3.12" + + - name: Run tests via run_test.sh + env: + CIRCLE_BRANCH: ${{ github.ref_name }} + run: | + while IFS= read -r req_file; do + [ -z "$req_file" ] && continue + bash run_test.sh "$req_file" + done <<< "${{ matrix.test_requirements }}" + + - name: Upload coverage to Codecov + if: ${{ !cancelled() && hashFiles('coverage.xml') != '' }} + uses: codecov/codecov-action@v5 + with: + token: ${{ secrets.CODECOV_TOKEN }} + files: ./coverage.xml + flags: connectors + fail_ci_if_error: false + verbose: true + + - name: Upload test results to Codecov + if: ${{ !cancelled() }} + uses: codecov/codecov-action@v5 + with: + token: ${{ secrets.CODECOV_TOKEN }} + report_type: test_results + + baseline-coverage: + name: Baseline coverage (untested connectors) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + + + - name: Setup uv + uses: astral-sh/setup-uv@v7 + with: + enable-cache: false + python-version: "3.12" + - name: Generate 0% coverage for all connector source files + run: | + pip install coverage + coverage erase + echo "pass" > /tmp/noop.py + coverage run --rcfile=.coveragerc /tmp/noop.py + python .github/scripts/coverage_inject_unexecuted_files.py + coverage xml --rcfile=.coveragerc -o base-coverage.xml --ignore-errors + echo "Total source files in report:" + grep -c ' [m.title, m.number]) + ); + + for (const issue of issues) { + core.info(`Adding "solved" label to issue #${issue.number}`); + await github.rest.issues.addLabels({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: issue.number, + labels: ["solved"], + }); + + // Fetch issue details to check labels + const { data: issueData } = await github.rest.issues.get({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: issue.number, + }); + const labelNames = issueData.labels.map((l) => l.name); + + let milestoneName = null; + if (labelNames.includes("bug")) { + milestoneName = "Bugs backlog"; + } else if (labelNames.includes("feature")) { + milestoneName = "1. Now"; + } + + if (milestoneName && milestonesMap[milestoneName]) { + core.info(`Setting milestone "${milestoneName}" on issue #${issue.number}`); + await github.rest.issues.update({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: issue.number, + milestone: milestonesMap[milestoneName], + }); + } else if (milestoneName) { + core.warning(`Milestone "${milestoneName}" not found in repo`); + } + } diff --git a/.gitignore b/.gitignore index 9afd2c76bee..58d392cb4ca 100644 --- a/.gitignore +++ b/.gitignore @@ -19,4 +19,7 @@ black .env .pytest_cache external-import/loaderinsightagency -.cursor \ No newline at end of file +.cursor +.coverage +**/*coverage.xml +**/junit.xml \ No newline at end of file diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 8be638e3780..ddf2ec0fabb 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,6 +1,6 @@ repos: - repo: https://github.com/psf/black-pre-commit-mirror - rev: 25.9.0 + rev: 26.3.1 hooks: - id: black - repo: https://github.com/PyCQA/flake8 diff --git a/Dockerfile_ubi9 b/Dockerfile_ubi9 new file mode 100644 index 00000000000..d9201bfca96 --- /dev/null +++ b/Dockerfile_ubi9 @@ -0,0 +1,31 @@ +FROM registry.access.redhat.com/ubi9/ubi-minimal + +ARG EXTRA_PACKAGES="" + +RUN set -eux; \ + microdnf -y --setopt=install_weak_deps=0 install python3.12 ${EXTRA_PACKAGES}; \ + microdnf clean all; + +ENV PYTHONDONTWRITEBYTECODE=1 + +ARG CONNECTOR_TYPE +ENV CONNECTOR_TYPE=${CONNECTOR_TYPE} + +ARG CONNECTOR_CMD="main.py" +ARG CONNECTOR_WORKDIR="/opt/connector/src" +ARG POST_INSTALL="" + +ENV CONNECTOR_CMD=${CONNECTOR_CMD} + +COPY src /opt/connector/src + +RUN set -eux; \ + microdnf -y --setopt=install_weak_deps=0 install python3.12-pip git-core; \ + pip3.12 install --no-cache-dir -r /opt/connector/src/requirements.txt; \ + if [ -n "${POST_INSTALL}" ]; then ${POST_INSTALL}; fi; \ + microdnf -y remove python3.12-pip git-core ; \ + microdnf clean all; + +WORKDIR ${CONNECTOR_WORKDIR} + +CMD python3.12 ${CONNECTOR_CMD} diff --git a/build_all_ubi9.sh b/build_all_ubi9.sh new file mode 100755 index 00000000000..265bae9cca8 --- /dev/null +++ b/build_all_ubi9.sh @@ -0,0 +1,79 @@ +#!/bin/sh +set -e + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" + +PUSH=false +while [ $# -gt 0 ]; do + case "$1" in + --push) PUSH=true; shift ;; + -*) echo "Unknown option: $1" >&2; echo "Usage: $0 [--push] " >&2; exit 1 ;; + *) break ;; + esac +done + +VERSION="${1:?Usage: $0 [--push] }" + +BUILD_ARGS="" +if [ "${PUSH}" = true ]; then + BUILD_ARGS="--push" +fi + +CONNECTORS=" + external-import/alienvault + external-import/cisa-known-exploited-vulnerabilities + external-import/crowdstrike + external-import/cve + external-import/group-ib + external-import/mitre + external-import/opencti + external-import/recorded-future + external-import/servicenow + internal-enrichment/first-epss + internal-enrichment/google-dns + internal-enrichment/import-external-reference + internal-enrichment/ipinfo + internal-enrichment/tagger + internal-enrichment/virustotal + internal-export-file/export-file-csv + internal-export-file/export-file-stix + internal-export-file/export-file-txt + internal-export-file/export-file-yara + internal-export-file/export-report-pdf + internal-export-file/export-ttps-file-navigator + internal-import-file/import-document + internal-import-file/import-document-ai + internal-import-file/import-file-misp + internal-import-file/import-file-stix + internal-import-file/import-file-yara + internal-import-file/import-ttps-file-navigator + stream/crowdstrike-endpoint-security + stream/taxii-post +" + +FAILED="" +for connector in ${CONNECTORS}; do + echo "==========================================" + echo "Building ${connector}..." + echo "==========================================" + if "${SCRIPT_DIR}/build_ubi9.sh" ${BUILD_ARGS} "${connector}" "${VERSION}"; then + echo "OK: ${connector}" + else + echo "FAILED: ${connector}" + FAILED="${FAILED} ${connector}" + fi + echo "" +done + +if [ -n "${FAILED}" ]; then + echo "==========================================" + echo "The following builds failed:" + for f in ${FAILED}; do + echo " - ${f}" + done + echo "==========================================" + exit 1 +fi + +echo "All UBI9 builds succeeded." + diff --git a/build_ubi9.sh b/build_ubi9.sh new file mode 100755 index 00000000000..d61a1c1ee01 --- /dev/null +++ b/build_ubi9.sh @@ -0,0 +1,63 @@ +#!/bin/sh +set -e + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" + +usage() { + echo "Usage: $0 [--push] " >&2 + echo " --push Push the image after building" >&2 + echo " connector-dir Path to the connector (e.g. external-import/crowdstrike)" >&2 + echo " version Image version tag" >&2 + exit 1 +} + +PUSH=false +if [ "$1" = "--push" ]; then + PUSH=true + shift +fi + +CONNECTOR_DIR="${1:?$(usage)}" +VERSION="${2:?$(usage)}" + +# Resolve and validate +CONNECTOR_DIR="${CONNECTOR_DIR%/}" +if [ ! -d "${CONNECTOR_DIR}" ]; then + echo "Error: connector directory '${CONNECTOR_DIR}' does not exist." >&2 + exit 1 +fi + +# Infer CONNECTOR_TYPE from the top-level directory name +# e.g. external-import -> EXTERNAL_IMPORT +TOP_DIR="$(echo "${CONNECTOR_DIR}" | cut -d/ -f1)" +CONNECTOR_TYPE="$(echo "${TOP_DIR}" | tr '[:lower:]-' '[:upper:]_')" + +CONNECTOR_NAME="$(basename "${CONNECTOR_DIR}")" +IMAGE="opencti/connector-${CONNECTOR_NAME}:${VERSION}-ubi9" +ENV_FILE="${CONNECTOR_DIR}/.build.env" + + +# Build argument list +set -- -f "${SCRIPT_DIR}/Dockerfile_ubi9" +set -- "$@" --build-arg "CONNECTOR_TYPE=${CONNECTOR_TYPE}" + +# Append connector-specific overrides from env file as --build-arg flags +if [ -f "${ENV_FILE}" ]; then + eval set -- '"$@"' $(sed '/^$/d; /^#/d; s/^/--build-arg /' "${ENV_FILE}") +fi + +set -- "$@" -t "${IMAGE}" +set -- "$@" "${CONNECTOR_DIR}" + +if command -v podman >/dev/null 2>&1; then + RUNTIME=podman +else + RUNTIME=docker +fi + +${RUNTIME} build "$@" + +if [ "${PUSH}" = true ]; then + echo "Pushing ${IMAGE}..." + ${RUNTIME} push "${IMAGE}" +fi diff --git a/ci-requirements.txt b/ci-requirements.txt index a1a2e6f74f7..68d0617c0bc 100644 --- a/ci-requirements.txt +++ b/ci-requirements.txt @@ -1,3 +1,4 @@ isort ==7.0.0 -black ==26.1.0 -pytest ==8.4.2 \ No newline at end of file +black ==26.3.1 +pytest ==9.0.3 +uv diff --git a/codecov.yml b/codecov.yml new file mode 100644 index 00000000000..6617a728b08 --- /dev/null +++ b/codecov.yml @@ -0,0 +1,17 @@ +comment: + layout: "diff, files, condensed_footer" + hide_project_coverage: true # set to true + require_changes: "coverage_drop AND uncovered_patch" + +ignore: + # Ignore any folder whose name starts with "test" anywhere in the tree + - "**/test*/**" +coverage: + status: + project: + default: + target: auto + informational: true + patch: + default: + target: 80% \ No newline at end of file diff --git a/connectors-sdk/TDRs/2026-02-27-Deprecating_configuration_variables _with_BaseConnectorSettings.md b/connectors-sdk/TDRs/2026-02-27-Deprecating_configuration_variables _with_BaseConnectorSettings.md index 93fa372e515..6782c7d65a8 100644 --- a/connectors-sdk/TDRs/2026-02-27-Deprecating_configuration_variables _with_BaseConnectorSettings.md +++ b/connectors-sdk/TDRs/2026-02-27-Deprecating_configuration_variables _with_BaseConnectorSettings.md @@ -78,7 +78,7 @@ This validator: The SDK introduces `DeprecatedField`, a helper built on top of `pydantic.Field`, allowing deprecation metadata to be declared directly on fields. Supported metadata includes: -- `deprecated`: deprecation flag or message (already present on pydanctic.Field) +- `deprecated`: deprecation flag or message (already present on pydantic.Field) - `new_namespace`: destination namespace - `new_namespaced_var`: destination variable name - `new_value_factory`: optional value transformation function @@ -108,9 +108,14 @@ Variable migration supports: ### Deprecated variable inside a configuration model +Preferred: using `DeprecatedField`: + ```python +from pydantic import Field +from connectors_sdk import BaseConfigModel, DeprecatedField + class MyConfig(BaseConfigModel): - old_var: SkipValidation[int] = DeprecatedField( + old_var: int = DeprecatedField( deprecated="Use new_var instead", new_namespaced_var="new_var", new_value_factory=lambda x: x * 60, # Optional transformation @@ -119,11 +124,33 @@ class MyConfig(BaseConfigModel): new_var: int = Field(description="New variable") ``` +Alternative: using `Deprecate` annotation metadata: + +```python +from typing import Annotated +from pydantic import Field +from connectors_sdk import BaseConfigModel, Deprecate + +class MyConfig(BaseConfigModel): + old_var: Annotated[ + int, + Deprecate( + new_namespaced_var="new_var", + new_value_factory=lambda x: x * 60, # Optional transformation + removal_date="2026-12-31", # Optional informative removal deadline + ), + ] + new_var: int = Field(description="New variable") +``` + ### Deprecated namespace at connector settings level ```python +from pydantic import Field +from connectors_sdk import BaseConnectorSettings, DeprecatedField + class ConnectorSettings(BaseConnectorSettings): - old_namespace: SkipValidation[MyConfig] = DeprecatedField( + old_namespace: MyConfig = DeprecatedField( deprecated="Use new_namespace instead", new_namespace="new_namespace", removal_date="2026-12-31", # Optional informative removal deadline @@ -166,3 +193,16 @@ If both old and new settings are present, new settings take precedence This change introduces a declarative, centralized framework for configuration deprecation in connectors. By moving migration logic into the SDK and driving it through field metadata, it eliminates duplicated code, enforces a single validated configuration schema, and provides a clear and explicit deprecation path for users. + +--- + +## Update (2026-03-13) + +This TDR is amended to clarify the recommended public API for field deprecation declarations. + +- `DeprecatedField` is the preferred and documented way to mark configuration fields as deprecated. +- `Deprecate` exists as a lower-level annotation and is available for direct `Annotated[...]` usage if preferred. +- `DeprecatedField` uses `Deprecate` metadata under the hood in `BaseConnectorSettings`, so both declaration syntaxes behave the same. +- `pydantic.SkipValidation` remains supported for backward compatibility, but it is no longer required when using `DeprecatedField`/`Deprecate`. + +This update is a documentation clarification only (code examples have been updated). It does not change migration behavior. \ No newline at end of file diff --git a/connectors-sdk/TDRs/2026-04-14-Typing_and_validation_of_connector_state_with_pydantic.md b/connectors-sdk/TDRs/2026-04-14-Typing_and_validation_of_connector_state_with_pydantic.md new file mode 100644 index 00000000000..bed3ea9fcbf --- /dev/null +++ b/connectors-sdk/TDRs/2026-04-14-Typing_and_validation_of_connector_state_with_pydantic.md @@ -0,0 +1,205 @@ +# TDR: Typing and validation of connector's state with Pydantic + +
+ +## Overview + +This document describes the introduction of `BaseConnectorState` (and its subclasses), a Pydantic-based class added to the `connectors-sdk` under the `states` module. +It provides a standardized, typed, and validated interface for loading and saving a connector's state to and from the OpenCTI platform, replacing the ad-hoc, per-connector state management patterns that currently exist across the repository. + +This work is a first step in building the `BaseConnector` module suite — a set of standardized SDK components designed to reduce the boilerplate each connector developer has to write and maintain. + +
+ +## Motivation + +### The current state of state management + +Today, every connector in the repository manages its own state independently. The typical pattern looks like this: + +```python +class Connector: + def run(self): + # At run's start: + state = self.helper.get_state() or {} + last_run = state.get("last_run") + if last_run is not None: + last_run = datetime.fromisoformat(last_run) + + # Execute any business logic specific to the connector... + + # At the end of the run: + self.helper.set_state({"last_run": datetime.now(tz=timezone.utc).isoformat()}) + self.helper.force_ping() +``` + +While simple in isolation, this pattern is repeated — with variations — across 200+ connectors. The consequences are: + +1. **Massive code duplication**. Every connector reimplements the same load/save cycle, often with subtle differences in key names, serialization format (timestamps vs. ISO strings), or error handling. + +2. **No typing or validation**. State is a raw `dict`. There is no guarantee that a value is present, that it has the correct type, or that it is valid before being used. Bugs surface at runtime, often silently (e.g. `None` passed to a function expecting a `datetime`). + +3. **Inconsistent serialization**. Some connectors store datetimes as Unix timestamps, others as ISO strings, others as formatted strings. There is no enforced contract, making cross-connector reasoning and debugging unnecessarily difficult. + +4. **No shared baseline**. There is no common field that all connectors are guaranteed to track (e.g. `last_run`), even though virtually every connector needs it. + +
+ +## Proposed Solution + +### The `BaseConnectorState` class + +`BaseConnectorState` is a base Pydantic `BaseModel` that wraps the `OpenCTIConnectorHelper` state API. +It is used by public, concrete state classes specific to connector types. These concrete classes can be used directly or subclassed to define connector-specific state fields. + +```python +# connectors_sdk/states/_base_state.py + +class BaseConnectorState(BaseModel, ABC): + model_config = ConfigDict( + extra="allow", + validate_assignment=True, + ) + + def load(self) -> None: + """Overwrite instance's fields with the connector's state stored on OpenCTI.""" + + def save(self) -> None: + """Save instance's fields as connector's state on OpenCTI.""" + + +# connectors_sdk/states/states.py + +class ExternalImportConnectorState(BaseConnectorState): + last_run: datetime | None = Field(default=None) + +``` + +
+ +### Key design decisions + +| Decision | Rationale | +| --- | --- | +| Inherits from `pydantic.BaseModel` | Consistent with `BaseConnectorSettings`; provides typing, validation, and JSON serialization for free. | +| `extra="allow"` | Allows connectors to load additional fields (i.e. not declared in the state model) from OpenCTI, without breaking the model. | +| `validate_assignment=True` | Ensures that any field update (via `setattr`) is validated immediately, not only at construction time. | +| `last_run: datetime \| None` | Provides a common baseline field that virtually every connector needs, pre-typed as `datetime`. | +| `load()` | Dynamically populates declared fields from the raw `dict` returned by OpenCTI, with Pydantic validation applied on assignment. | +| `save()` uses `model_dump(mode="json")` | Serializes all fields to JSON-safe types automatically, removing the need for manual type conversions (e.g. converting a `datetime` to a string). | +| Not abstract | Provide public classes to use as-is in simple connectors; or subclassed in connectors with richer state needs. | + +
+ +### Usage examples + +#### Simple usage (no subclassing needed): + +```python +state = ExternalImportConnectorState() +state.attach_opencti_connector_helper(helper) # establish the connection with OpenCTI +state.load() + +if state.last_run: + self.helper.connector_logger.info("Last run:", {"last_run": state.last_run}) + +state.last_run = datetime.now(tz=timezone.utc) +state.save() +``` + +#### Subclassed with connector-specific fields: + +```python +class CustomConnectorState(ExternalImportConnectorState): + last_cursor: str | None = Field(default=None) + last_page: int = Field(default=0) + +state = CustomConnectorState() +state.attach_opencti_connector_helper(helper) # establish the connection with OpenCTI +state.load() +state.last_run = datetime.now(tz=timezone.utc) +state.last_cursor = "abc123" +state.last_page = 5 +state.save() +``` + +
+ +### Module location + +Consistent with the SDK folder structure agreed in the architecture decisions, the module lives at: + +```plaintext +connectors-sdk/ +└── connectors_sdk/ + └── states/ + ├── __init__.py + ├── _base_state.py + └── states.py +``` + +The `states` module has no dependency on other SDK modules (`settings`, `models`, etc) and can therefore be adopted by any connector, independently of the broader `BaseConnector` usage. + +
+ +## Advantages + +- **Typed state with early validation**. Fields are declared with Python type annotations. Pydantic validates values at assignment time (`validate_assignment=True`), surfacing type errors before they can corrupt state on OpenCTI. + +- **Consistent JSON serialization**. `model_dump(mode="json")` ensures that all field types (including `datetime`) are serialized to JSON-safe representations, eliminating the inconsistency between types and/or formats across connectors. + +- **Common baseline field**. `last_run: datetime | None` is provided out of the box, with the correct type, for all connectors. + +- **Easy to extend**. Adding connector-specific state fields is a single-line declaration in a subclass. No changes to the loading or saving logic are required. + +- **Consistent with existing SDK patterns**. Reuses Pydantic, the same library already used for `BaseConnectorSettings` or OCTI models, keeping the SDK's dependency surface minimal and the developer experience uniform. + +- **Independent of other SDK modules**. Can be adopted incrementally, by any connector type, without waiting for the full `BaseExternalImportConnector` to be available. + +
+ +## Disadvantages + +- **Pydantic dependency**. `BaseConnectorState` inherits Pydantic's lifecycle and upgrade constraints. This is an accepted trade-off, consistent with the rest of the SDK. + +- **`extra="allow"` may mask errors**. Undeclared fields are silently accepted. A typo in a field name when subclassing would not raise an error — the value would be stored as an extra field rather than populating the intended declared field. This is mitigated by `validate_assignment=True` on declared fields and is a deliberate flexibility trade-off for backward compatibility. + +- **`save()` persists both declared and extra fields**. Extra fields (those not explicitly declared in the model) are persisted as-is. This is intentional to avoid data loss of unknown state fields, but typos or unintended extra attributes may also be persisted unless explicitly cleaned. + +- **Learning curve**. Developers unfamiliar with Pydantic will need to understand the model declaration pattern. This is the same trade-off already accepted for `BaseConnectorSettings` or OCTI models. + +
+ +## Alternatives Considered + +1. **Keep the current ad-hoc pattern (do nothing)** + + Each connector continues to call `helper.get_state()` / `helper.set_state()` directly, with its own serialization logic. + + **Rejected**. This is the root cause of the inconsistency, duplication, and bugs described in the "Motivation" section. The longer this is deferred, the more expensive any future cross-cutting change becomes. + +2. **A plain `dataclass` or `TypedDict`** + + Use a `dataclass` or `TypedDict` to type the state, with manual serialization. + + **Rejected**. Provides typing but no runtime validation, no automatic JSON serialization, and no `validate_assignment` semantics. It would also diverge from the Pydantic-first approach already established in the SDK. + +3. **A generic `StateManager[T]` with a separate `BaseState` model** + + Define a generic container class `StateManager[T: BaseModel]` that wraps a separate state model `T`, with `load() -> T` and `save(state: T) -> None` as its interface. + + **Considered**. This was one of the designs explored for this feature. It was ultimately set aside in favour of a simpler approach: having the manager _be_ the state (by inheriting from `BaseModel` directly) reduces the number of objects a connector developer must instantiate and reason about, and avoids the ergonomic overhead of passing a state object in and out of the manager on every call. The simpler design is easier to use correctly. + +4. **Abstract classes** + + Make `BaseConnectorState`'s subclasses abstract, forcing subclassing them for every use. + + **Rejected**. Many connectors only need common fields (e.g. `last_run` for external-import connectors). Forcing them to subclass adds friction with no benefit. The non-abstract design follows the principle of opinionated defaults, override hooks where needed. + +
+ +## References + +- Related TDR: [Typing and validation of configurations with Pydantic Settings](https://github.com/OpenCTI-Platform/connectors/blob/master/connectors-sdk/TDRs/2025-10-01-Typing_and_validation_of_configurations_with_Pydantic_Settings.md) +- [Pydantic BaseModel documentation](https://docs.pydantic.dev/latest/concepts/models/) +- [Pydantic serialization (JSON mode)](https://docs.pydantic.dev/latest/concepts/serialization/#json-mode) diff --git a/connectors-sdk/connectors_sdk/__init__.py b/connectors-sdk/connectors_sdk/__init__.py index fdd56483404..33236ee371e 100644 --- a/connectors-sdk/connectors_sdk/__init__.py +++ b/connectors-sdk/connectors_sdk/__init__.py @@ -16,12 +16,14 @@ BaseStreamConnectorConfig, ) from connectors_sdk.settings.deprecations import ( + Deprecate, DeprecatedField, ) from connectors_sdk.settings.exceptions import ( ConfigError, ConfigValidationError, ) +from connectors_sdk.states.states import ExternalImportConnectorState __all__ = [ # Base Settings @@ -40,5 +42,8 @@ "DatetimeFromIsoString", "ListFromString", # Deprecations + "Deprecate", "DeprecatedField", + # Connector States + "ExternalImportConnectorState", ] diff --git a/connectors-sdk/connectors_sdk/models/__init__.py b/connectors-sdk/connectors_sdk/models/__init__.py index 22957bbc276..3e309475db9 100644 --- a/connectors-sdk/connectors_sdk/models/__init__.py +++ b/connectors-sdk/connectors_sdk/models/__init__.py @@ -9,19 +9,26 @@ from connectors_sdk.models.base_identified_object import BaseIdentifiedObject from connectors_sdk.models.base_object import BaseObject from connectors_sdk.models.base_observable_entity import BaseObservableEntity +from connectors_sdk.models.campaign import Campaign +from connectors_sdk.models.channel import Channel from connectors_sdk.models.city import City from connectors_sdk.models.country import Country from connectors_sdk.models.domain_name import DomainName +from connectors_sdk.models.email_address import EmailAddress from connectors_sdk.models.external_reference import ExternalReference from connectors_sdk.models.file import File from connectors_sdk.models.hostname import Hostname +from connectors_sdk.models.incident import Incident from connectors_sdk.models.indicator import Indicator from connectors_sdk.models.individual import Individual +from connectors_sdk.models.infrastructure import Infrastructure from connectors_sdk.models.intrusion_set import IntrusionSet from connectors_sdk.models.ipv4_address import IPV4Address from connectors_sdk.models.ipv6_address import IPV6Address from connectors_sdk.models.kill_chain_phase import KillChainPhase +from connectors_sdk.models.mac_address import MACAddress from connectors_sdk.models.malware import Malware +from connectors_sdk.models.media_content import MediaContent from connectors_sdk.models.note import Note from connectors_sdk.models.observed_data import ObservedData from connectors_sdk.models.organization import Organization @@ -31,10 +38,13 @@ from connectors_sdk.models.relationship import Relationship from connectors_sdk.models.report import Report from connectors_sdk.models.sector import Sector +from connectors_sdk.models.sighting import Sighting from connectors_sdk.models.software import Software +from connectors_sdk.models.text import Text from connectors_sdk.models.threat_actor_group import ThreatActorGroup from connectors_sdk.models.tlp_marking import TLPMarking from connectors_sdk.models.url import URL +from connectors_sdk.models.user_account import UserAccount from connectors_sdk.models.vulnerability import Vulnerability from connectors_sdk.models.x509_certificate import X509Certificate @@ -50,19 +60,26 @@ "AssociatedFile", "AttackPattern", "AutonomousSystem", + "Campaign", + "Channel", "City", "Country", "DomainName", + "EmailAddress", "ExternalReference", "File", "Hostname", + "Incident", "Indicator", "Individual", + "Infrastructure", "IntrusionSet", "IPV4Address", "IPV6Address", "KillChainPhase", + "MACAddress", "Malware", + "MediaContent", "Note", "ObservedData", "Organization", @@ -72,10 +89,13 @@ "Relationship", "Report", "Sector", + "Sighting", "Software", + "Text", "ThreatActorGroup", "TLPMarking", "URL", + "UserAccount", "Vulnerability", "X509Certificate", ] diff --git a/connectors-sdk/connectors_sdk/models/base_identified_entity.py b/connectors-sdk/connectors_sdk/models/base_identified_entity.py index 17c4dd1ac8f..a58bc1aff88 100644 --- a/connectors-sdk/connectors_sdk/models/base_identified_entity.py +++ b/connectors-sdk/connectors_sdk/models/base_identified_entity.py @@ -10,17 +10,12 @@ from connectors_sdk.models.external_reference import ExternalReference from connectors_sdk.models.reference import Reference from connectors_sdk.models.tlp_marking import TLPMarking -from pydantic import ( - Field, - PrivateAttr, -) +from pydantic import Field class BaseIdentifiedEntity(BaseIdentifiedObject, ABC): """Base class that can be identified thanks to a stix-like id.""" - _stix2_id: str | None = PrivateAttr(default=None) - author: BaseAuthorEntity | Reference | None = Field( default=None, description="The Author reporting this Observable.", diff --git a/connectors-sdk/connectors_sdk/models/base_identified_object.py b/connectors-sdk/connectors_sdk/models/base_identified_object.py index 7ae3bcfa791..16d24820f45 100644 --- a/connectors-sdk/connectors_sdk/models/base_identified_object.py +++ b/connectors-sdk/connectors_sdk/models/base_identified_object.py @@ -1,11 +1,9 @@ """BaseIdentifiedObject.""" -from __future__ import annotations - import warnings from abc import ABC -from typing import Any +import stix2 from connectors_sdk.models.base_object import BaseObject from pydantic import ( PrivateAttr, @@ -19,37 +17,34 @@ class BaseIdentifiedObject(BaseObject, ABC): _stix2_id: str | None = PrivateAttr(default=None) - def model_post_init(self, context__: Any) -> None: - """Define the post initialization method, automatically called after __init__ in a pydantic model initialization. + @computed_field # type: ignore[prop-decorator] + # Typing known issue : see https://docs.pydantic.dev/2.3/usage/computed_fields/ (consulted on 2025-06-06) + @property + def id(self) -> str: + """Return the unique identifier of the entity. + The value is computed from the STIX2 object representation of the entity, and then cached for future use. Notes: - This allows a last modification of the pydantic Model before it is validated. - - Args: - context__(Any): The pydantic context used by pydantic framework. - - References: - https://docs.pydantic.dev/latest/api/base_model/#pydantic.BaseModel.model_parametrized_name [consulted on - October 4th, 2024] - + The decorator `@computed_field` is used to indicate that this property + must be considered as a field by pydantic, and then included in the model **serialization** processes. + This field is **not** validated by pydantic, neither during the model initialization, nor during the model update. """ - _ = context__ # Unused parameter, but required by pydantic if self._stix2_id is None: - self._stix2_id = self.id + stix_object: stix2.v21._STIXBase21 = self.to_stix2_object() + stix_id = stix_object.get("id") - @computed_field # type: ignore[prop-decorator] - # known issue : see https://docs.pydantic.dev/2.3/usage/computed_fields/ (consulted on 2025-06-06) - @property - def id(self) -> str: - """Return the unique identifier of the entity.""" - stix_id: str = self.to_stix2_object().get("id", "") - self._stix2_id = stix_id - return stix_id + # The 'id' property is required and must be a non-empty string for model validation + if not (isinstance(stix_id, str) and stix_id.strip()): + raise ValueError("The 'id' property can't be set.") + + self._stix2_id = stix_id + + return self._stix2_id # https://github.com/pydantic/pydantic/discussions/10098 @model_validator(mode="after") - def _check_id(self) -> BaseIdentifiedObject: - """Ensure the id is correctly set and alert if it has changed. + def _compute_stix_id(self) -> "BaseIdentifiedObject": + """Compute STIX ID on validation (instance creation or re-assignments). Raises: ValueError: If the id is not set. @@ -73,19 +68,23 @@ def _check_id(self) -> BaseIdentifiedObject: 'identity--011fe1ae-7b92-4779-9eb5-7be2aeffb9e1' """ - if self._stix2_id is None or self._stix2_id == "": - raise ValueError("The 'id' property must be set.") - - if self._stix2_id != self.id: - # define message before the warning to avoid self._stix2_id has already changed in the main thread - message = ( - f"The 'id' property has changed from to {self.id}. " - "This may lead to unexpected behavior in the OpenCTI platform." - ) + previous_stix2_id = self._stix2_id + self._stix2_id = None # Reset cached id + current_stix2_id = self.id # Compute and cache the new id + + if previous_stix2_id is None: + # If the previous id was not set, just set it without warning + return self + + if previous_stix2_id != current_stix2_id: + # Warn on `_stix2_id` change after fields re-assignment warnings.warn( - message=message, + message=( + f"The 'id' property has changed from {previous_stix2_id} to {current_stix2_id}. " + "This may lead to unexpected behavior in the connector or the OpenCTI platform." + ), category=UserWarning, stacklevel=2, ) - self._stix2_id = self.id # Update the internal id to the current one + return self diff --git a/connectors-sdk/connectors_sdk/models/campaign.py b/connectors-sdk/connectors_sdk/models/campaign.py new file mode 100644 index 00000000000..bf7c829e34f --- /dev/null +++ b/connectors-sdk/connectors_sdk/models/campaign.py @@ -0,0 +1,48 @@ +"""Campaign.""" + +from connectors_sdk.models.base_identified_entity import BaseIdentifiedEntity +from pycti import Campaign as PyctiCampaign +from pydantic import AwareDatetime, Field +from stix2.v21 import Campaign as Stix2Campaign + + +class Campaign(BaseIdentifiedEntity): + """Define a Campaign on OpenCTI.""" + + name: str = Field( + description="A name used to identify this Campaign.", + min_length=1, + ) + description: str | None = Field( + default=None, + description="A description that provides more details and context about the Campaign.", + ) + aliases: list[str] | None = Field( + default=None, + description="Alternative names used to identify this Campaign.", + ) + first_seen: AwareDatetime | None = Field( + default=None, + description="The time that this Campaign was first seen.", + ) + last_seen: AwareDatetime | None = Field( + default=None, + description="The time that this Campaign was last seen.", + ) + objective: str | None = Field( + default=None, + description="The objective of this Campaign.", + ) + + def to_stix2_object(self) -> Stix2Campaign: + """Make stix object.""" + return Stix2Campaign( + id=PyctiCampaign.generate_id(name=self.name), + name=self.name, + description=self.description, + aliases=self.aliases, + first_seen=self.first_seen, + last_seen=self.last_seen, + objective=self.objective, + **self._common_stix2_properties() + ) diff --git a/connectors-sdk/connectors_sdk/models/channel.py b/connectors-sdk/connectors_sdk/models/channel.py new file mode 100644 index 00000000000..8a3c5bce06b --- /dev/null +++ b/connectors-sdk/connectors_sdk/models/channel.py @@ -0,0 +1,39 @@ +"""Channel.""" + +from connectors_sdk.models.base_identified_entity import BaseIdentifiedEntity +from connectors_sdk.models.enums import ChannelType +from pycti import Channel as PyctiChannel +from pycti import CustomObjectChannel +from pydantic import Field + + +class Channel(BaseIdentifiedEntity): + """Define a Channel on OpenCTI.""" + + name: str = Field( + description="A name used to identify this Channel.", + min_length=1, + ) + description: str | None = Field( + default=None, + description="A description that provides more details and context about the Channel.", + ) + aliases: list[str] | None = Field( + default=None, + description="Alternative names used to identify this Channel.", + ) + channel_types: list[ChannelType] | None = Field( + default=None, + description="A set of terms used to describe this Channel.", + ) + + def to_stix2_object(self) -> CustomObjectChannel: + """Make stix object.""" + return CustomObjectChannel( + id=PyctiChannel.generate_id(name=self.name), + name=self.name, + description=self.description, + aliases=self.aliases, + channel_types=self.channel_types, + **self._common_stix2_properties(), + ) diff --git a/connectors-sdk/connectors_sdk/models/domain_name.py b/connectors-sdk/connectors_sdk/models/domain_name.py index 8f2beb26aab..f2745b8807a 100644 --- a/connectors-sdk/connectors_sdk/models/domain_name.py +++ b/connectors-sdk/connectors_sdk/models/domain_name.py @@ -1,27 +1,45 @@ """DomainName.""" from connectors_sdk.models.base_observable_entity import BaseObservableEntity +from connectors_sdk.models.ipv4_address import ( # pylint: disable=unused-import # actually used during model_rebuild + IPV4Address, +) +from connectors_sdk.models.ipv6_address import ( # pylint: disable=unused-import # actually used during model_rebuild + IPV6Address, +) +from connectors_sdk.models.reference import ( # pylint: disable=unused-import # actually used during model_rebuild + Reference, +) from pydantic import Field from stix2.v21 import DomainName as Stix2DomainName class DomainName(BaseObservableEntity): - """Define a domain name observable on OpenCTI. - - Notes: - - The `resolves_to_refs` (from STIX2.1 spec) field is not implemented on OpenCTI. - It must be replaced by explicit `resolves-to` relationships. - - """ + """Define a domain name observable on OpenCTI.""" value: str = Field( description="Specifies the value of the domain name.", min_length=1, ) + resolves_to: "list[IPV4Address | IPV6Address | DomainName | Reference] | None" = ( + Field( + description="List of IP addresses or domain names that this domain name resolves to.", + default=None, + ) + ) def to_stix2_object(self) -> Stix2DomainName: """Make stix object.""" return Stix2DomainName( value=self.value, + resolves_to_refs=( + [obj.id for obj in self.resolves_to] if self.resolves_to else None + ), **self._common_stix2_properties(), ) + + +# Rebuilding the model is required to resolve forward reference to DomainName used in `resolves_to`. +# Without this, isolated executions (e.g. a single test module) can fail due to +# "DomainName is not fully defined" error before any instance validation/conversion. +DomainName.model_rebuild() diff --git a/connectors-sdk/connectors_sdk/models/email_address.py b/connectors-sdk/connectors_sdk/models/email_address.py new file mode 100644 index 00000000000..82378fb5418 --- /dev/null +++ b/connectors-sdk/connectors_sdk/models/email_address.py @@ -0,0 +1,33 @@ +"""EmailAddress.""" + +from connectors_sdk.models.base_observable_entity import BaseObservableEntity +from connectors_sdk.models.reference import Reference +from connectors_sdk.models.user_account import UserAccount +from pydantic import Field +from stix2.v21 import EmailAddress as Stix2EmailAddress + + +class EmailAddress(BaseObservableEntity): + """Represent an email address observable on OpenCTI.""" + + value: str = Field( + description="The email address value.", + min_length=1, + ) + display_name: str | None = Field( + description="The display name of the email address.", + default=None, + ) + belongs_to: UserAccount | Reference | None = Field( + description="The user account associated with the email address.", + default=None, + ) + + def to_stix2_object(self) -> Stix2EmailAddress: + """Make stix object.""" + return Stix2EmailAddress( + value=self.value, + display_name=self.display_name, + belongs_to_ref=self.belongs_to.id if self.belongs_to else None, + **self._common_stix2_properties(), + ) diff --git a/connectors-sdk/connectors_sdk/models/enums.py b/connectors-sdk/connectors_sdk/models/enums.py index 074e911e8d6..8473b3036ce 100644 --- a/connectors-sdk/connectors_sdk/models/enums.py +++ b/connectors-sdk/connectors_sdk/models/enums.py @@ -6,11 +6,16 @@ from enum import StrEnum __all__ = [ + "AccountType", "AttackMotivation", "AttackResourceLevel", + "ChannelType", "CvssSeverity", "HashAlgorithm", "ImplementationLanguage", + "IncidentSeverity", + "IncidentType", + "InfrastructureType", "IndustrySector", "LocationType", "MalwareCapability", @@ -47,6 +52,25 @@ def _missing_(cls: type[_PermissiveEnum], value: object) -> _PermissiveEnum: return obj +class AccountType(_PermissiveEnum): + """Account Type Open Vocabulary. + + See https://docs.oasis-open.org/cti/stix/v2.1/os/stix-v2.1-os.html#_k2b7lkt45f0i + """ + + FACEBOOK = "facebook" + LDAP = "ldap" + NIS = "nis" + OPENID = "openid" + RADIUS = "radius" + SKYPE = "skype" + TACACS = "tacacs" + TWITTER = "twitter" + UNIX = "unix" + WINDOWS_LOCAL = "windows-local" + WINDOWS_DOMAIN = "windows-domain" + + class AttackMotivation(_PermissiveEnum): """Attack Motivation Open Vocabulary. @@ -92,6 +116,16 @@ class CvssSeverity(StrEnum): UNKNOWN = "Unknown" +class ChannelType(_PermissiveEnum): + """Channel Type Open Vocabulary. + + See https://github.com/OpenCTI-Platform/opencti/blob/master/opencti-platform/opencti-graphql/src/modules/vocabulary/vocabulary-utils.ts#L129 + """ + + TWITTER = "Twitter" + FACEBOOK = "Facebook" + + class HashAlgorithm(_PermissiveEnum): """Hash Algorithm Open Vocabulary. @@ -185,6 +219,58 @@ class IndustrySector(_PermissiveEnum): UTILITIES = "utilities" +class InfrastructureType(_PermissiveEnum): + """Infrastructure Type Open Vocabulary. + + See https://docs.oasis-open.org/cti/stix/v2.1/os/stix-v2.1-os.html#_67vrmztjft3h + """ + + AMPLIFICATION = "amplification" + ANONYMIZATION = "anonymization" + BOTNET = "botnet" + COMMAND_AND_CONTROL = "command-and-control" + CONTROL_SYSTEM = "control-system" + EXFILTRATION = "exfiltration" + FIREWALL = "firewall" + HOSTING_MALWARE = "hosting-malware" + HOSTING_TARGET_LISTS = "hosting-target-lists" + PHISHING = "phishing" + RECONNAISSANCE = "reconnaissance" + ROUTERS_SWITCHES = "routers-switches" + STAGING = "staging" + WORKSTATION = "workstation" + UNKNOWN = "unknown" + + +class IncidentSeverity(_PermissiveEnum): + """Incident Severity Open Vocabulary. + + See https://github.com/OpenCTI-Platform/opencti/blob/master/opencti-platform/opencti-graphql/src/modules/vocabulary/vocabulary-utils.ts#L316 + """ + + LOW = "low" + MEDIUM = "medium" + HIGH = "high" + CRITICAL = "critical" + + +class IncidentType(_PermissiveEnum): + """Incident Type Open Vocabulary. + + See https://github.com/OpenCTI-Platform/opencti/blob/master/opencti-platform/opencti-graphql/src/modules/vocabulary/vocabulary-utils.ts#L278 + """ + + ALERT = "alert" + COMPROMISE = "compromise" + INFORMATION_SYSTEM_DISRUPTION = "information-system-disruption" + RANSOMWARE = "ransomware" + REPUTATION_DAMAGE = "reputation-damage" + DATA_LEAK = "data-leak" + TYPOSQUATTING = "typosquatting" + PHISHING = "phishing" + CYBERCRIME = "cybercrime" + + class LocationType(StrEnum): """Location Type Enum. @@ -341,17 +427,70 @@ class RelationshipType(_PermissiveEnum): """Relationship Type Open Vocabulary. See https://docs.oasis-open.org/cti/stix/v2.1/os/stix-v2.1-os.html#_e2e1szrqfoan + and https://github.com/OpenCTI-Platform/opencti/blob/master/opencti-platform/opencti-graphql/src/schema/stixCoreRelationship.ts """ - RELATED_TO = "related-to" + # Standard STIX 2.1 + ANALYSIS_OF = "analysis-of" + ATTRIBUTED_TO = "attributed-to" + AUTHORED_BY = "authored-by" BASED_ON = "based-on" + BEACONS_TO = "beacons-to" + BELONGS_TO = "belongs-to" + CHARACTERIZES = "characterizes" + COMMUNICATES_WITH = "communicates-with" + COMPROMISES = "compromises" + CONSISTS_OF = "consists-of" + CONTROLS = "controls" + DELIVERS = "delivers" + DEMONSTRATES = "demonstrates" DERIVED_FROM = "derived-from" + DOWNLOADS = "downloads" + DROPS = "drops" + DUPLICATE_OF = "duplicate-of" + DYNAMIC_ANALYSIS_OF = "dynamic-analysis-of" + EXFILTRATES_TO = "exfiltrates-to" + EXPLOITS = "exploits" + HAS = "has" + HOSTS = "hosts" + IMPERSONATES = "impersonates" INDICATES = "indicates" - TARGETS = "targets" + INVESTIGATES = "investigates" LOCATED_AT = "located-at" - HAS = "has" - BELONGS_TO = "belongs-to" + MITIGATES = "mitigates" + ORIGINATES_FROM = "originates-from" + OWNS = "owns" + RELATED_TO = "related-to" + REMEDIATES = "remediates" RESOLVES_TO = "resolves-to" + STATIC_ANALYSIS_OF = "static-analysis-of" + TARGETS = "targets" + TECHNOLOGY = "technology" + TECHNOLOGY_FROM = "technology-from" + TECHNOLOGY_TO = "technology-to" + TRANSFERRED_TO = "transferred-to" + USES = "uses" + VARIANT_OF = "variant-of" + # OpenCTI Extensions + AMPLIFIES = "amplifies" + CITIZEN_OF = "citizen-of" + COOPERATES_WITH = "cooperates-with" + EMPLOYED_BY = "employed-by" + HAS_COVERED = "has-covered" + KNOWN_AS = "known-as" + NATIONAL_OF = "national-of" + PART_OF = "part-of" + PARTICIPATES_IN = "participates-in" + PUBLISHES = "publishes" + REPORTS_TO = "reports-to" + RESIDES_IN = "resides-in" + SHOULD_COVER = "should-cover" + SUBNARRATIVE_OF = "subnarrative-of" + SUPPORTS = "supports" + # MITRE Extensions + DETECTS = "detects" + REVOKED_BY = "revoked-by" + SUBTECHNIQUE_OF = "subtechnique-of" class Reliability(_PermissiveEnum): diff --git a/connectors-sdk/connectors_sdk/models/incident.py b/connectors-sdk/connectors_sdk/models/incident.py new file mode 100644 index 00000000000..de83d57c1a1 --- /dev/null +++ b/connectors-sdk/connectors_sdk/models/incident.py @@ -0,0 +1,72 @@ +"""Incident.""" + +from connectors_sdk.models.base_identified_entity import BaseIdentifiedEntity +from connectors_sdk.models.enums import IncidentSeverity, IncidentType +from pycti import Incident as PyctiIncident +from pydantic import AwareDatetime, Field +from stix2.v21 import Incident as Stix2Incident + + +class Incident(BaseIdentifiedEntity): + """Define an Incident on OpenCTI.""" + + name: str = Field( + description="A name used to identify this Incident.", + min_length=1, + ) + created: AwareDatetime = Field( + description="The date and time at which the Incident was created, used for deterministic ID generation.", + ) + description: str | None = Field( + default=None, + description="A description that provides more details and context about the Incident.", + ) + incident_type: IncidentType | None = Field( + default=None, + description="The type of the Incident.", + ) + severity: IncidentSeverity | None = Field( + default=None, + description="The severity of the Incident.", + ) + source: str | None = Field( + default=None, + description="The source of the Incident.", + ) + first_seen: AwareDatetime | None = Field( + default=None, + description="The time that this Incident was first seen.", + ) + last_seen: AwareDatetime | None = Field( + default=None, + description="The time that this Incident was last seen.", + ) + labels: list[str] | None = Field( + default=None, + description="Labels of the Incident.", + ) + objective: str | None = Field( + default=None, + description="The objective of this Incident.", + ) + + def to_stix2_object(self) -> Stix2Incident: + """Make stix object.""" + return Stix2Incident( + id=PyctiIncident.generate_id( + name=self.name, + created=self.created, + ), + name=self.name, + description=self.description, + created=self.created, + labels=self.labels, + allow_custom=True, + source=self.source, + severity=self.severity, + incident_type=self.incident_type, + first_seen=self.first_seen, + last_seen=self.last_seen, + objective=self.objective, + **self._common_stix2_properties(), + ) diff --git a/connectors-sdk/connectors_sdk/models/indicator.py b/connectors-sdk/connectors_sdk/models/indicator.py index 7a46475315a..8f403c53bb0 100644 --- a/connectors-sdk/connectors_sdk/models/indicator.py +++ b/connectors-sdk/connectors_sdk/models/indicator.py @@ -87,6 +87,10 @@ class Indicator(BaseIdentifiedEntity): default=None, description="Description of the indicator.", ) + labels: list[str] | None = Field( + default=None, + description="Labels of the indicator.", + ) indicator_types: list[str] | None = Field( default=None, description="Indicator types. The default OpenCTI types are: " @@ -137,6 +141,7 @@ def to_stix2_object(self) -> Stix2Indicator: indicator_types=self.indicator_types, pattern_type=self.pattern_type, pattern=self.pattern, + labels=self.labels, valid_from=self.valid_from, valid_until=self.valid_until, kill_chain_phases=[ diff --git a/connectors-sdk/connectors_sdk/models/infrastructure.py b/connectors-sdk/connectors_sdk/models/infrastructure.py new file mode 100644 index 00000000000..14029c7290b --- /dev/null +++ b/connectors-sdk/connectors_sdk/models/infrastructure.py @@ -0,0 +1,58 @@ +"""Infrastructure.""" + +from connectors_sdk.models.base_identified_entity import BaseIdentifiedEntity +from connectors_sdk.models.enums import InfrastructureType +from connectors_sdk.models.kill_chain_phase import KillChainPhase +from pycti import Infrastructure as PyctiInfrastructure +from pydantic import AwareDatetime, Field +from stix2.v21 import Infrastructure as Stix2Infrastructure + + +class Infrastructure(BaseIdentifiedEntity): + """Define an Infrastructure on OpenCTI.""" + + name: str = Field( + description="A name used to identify this Infrastructure.", + min_length=1, + ) + description: str | None = Field( + default=None, + description="A description that provides more details and context about the Infrastructure.", + ) + aliases: list[str] | None = Field( + default=None, + description="Alternative names used to identify this Infrastructure.", + ) + infrastructure_types: list[InfrastructureType] | None = Field( + default=None, + description="A set of terms used to describe this Infrastructure.", + ) + first_seen: AwareDatetime | None = Field( + default=None, + description="The time that this Infrastructure was first seen.", + ) + last_seen: AwareDatetime | None = Field( + default=None, + description="The time that this Infrastructure was last seen.", + ) + kill_chain_phases: list[KillChainPhase] | None = Field( + default=None, + description="Kill chain phases associated with this Infrastructure.", + ) + + def to_stix2_object(self) -> Stix2Infrastructure: + """Make stix object.""" + return Stix2Infrastructure( + id=PyctiInfrastructure.generate_id(name=self.name), + name=self.name, + description=self.description, + aliases=self.aliases, + infrastructure_types=self.infrastructure_types, + first_seen=self.first_seen, + last_seen=self.last_seen, + kill_chain_phases=[ + kill_chain_phase.to_stix2_object() + for kill_chain_phase in self.kill_chain_phases or [] + ], + **self._common_stix2_properties(), + ) diff --git a/connectors-sdk/connectors_sdk/models/ipv4_address.py b/connectors-sdk/connectors_sdk/models/ipv4_address.py index 654919d01d3..dac673c9fd9 100644 --- a/connectors-sdk/connectors_sdk/models/ipv4_address.py +++ b/connectors-sdk/connectors_sdk/models/ipv4_address.py @@ -2,7 +2,10 @@ import ipaddress +from connectors_sdk.models.autonomous_system import AutonomousSystem from connectors_sdk.models.base_observable_entity import BaseObservableEntity +from connectors_sdk.models.mac_address import MACAddress +from connectors_sdk.models.reference import Reference from pydantic import Field, field_validator from stix2.v21 import IPv4Address as Stix2IPv4Address @@ -16,18 +19,20 @@ class IPV4Address(BaseObservableEntity): ... create_indicator=True, ... ) >>> entity = ip.to_stix2_object() - - Notes: - - The `resolves_to_refs` (from STIX2.1 spec) field is not implemented on OpenCTI. - It must be replaced by explicit `resolves-to` relationships. - - The `belongs_to_refs` (from STIX2.1 spec) field is not implemented on OpenCTI. - It must be replaced by explicit `belongs-to` relationships. """ value: str = Field( description="The IP address value. CIDR is allowed.", min_length=1, ) + resolves_to: list[MACAddress | Reference] | None = Field( + description="List of MAC addresses that this IP V4 address resolves to.", + default=None, + ) + belongs_to: list[AutonomousSystem | Reference] | None = Field( + description="List of autonomous systems (AS objects) that this IP V4 address belongs to.", + default=None, + ) @field_validator("value", mode="before") @classmethod @@ -45,5 +50,11 @@ def to_stix2_object(self) -> Stix2IPv4Address: """Make stix object.""" return Stix2IPv4Address( value=self.value, + resolves_to_refs=( + [obj.id for obj in self.resolves_to] if self.resolves_to else None + ), + belongs_to_refs=( + [obj.id for obj in self.belongs_to] if self.belongs_to else None + ), **self._common_stix2_properties(), ) diff --git a/connectors-sdk/connectors_sdk/models/ipv6_address.py b/connectors-sdk/connectors_sdk/models/ipv6_address.py index fb768588f4b..cd372d39fad 100644 --- a/connectors-sdk/connectors_sdk/models/ipv6_address.py +++ b/connectors-sdk/connectors_sdk/models/ipv6_address.py @@ -2,7 +2,10 @@ import ipaddress +from connectors_sdk.models.autonomous_system import AutonomousSystem from connectors_sdk.models.base_observable_entity import BaseObservableEntity +from connectors_sdk.models.mac_address import MACAddress +from connectors_sdk.models.reference import Reference from pydantic import Field, field_validator from stix2.v21 import IPv6Address as Stix2IPv6Address @@ -16,18 +19,20 @@ class IPV6Address(BaseObservableEntity): ... create_indicator=True, ... ) >>> entity = ip.to_stix2_object() - - Notes: - - The `resolves_to_refs` (from STIX2.1 spec) field is not implemented on OpenCTI. - It must be replaced by explicit `resolves-to` relationships. - - The `belongs_to_refs` (from STIX2.1 spec) field is not implemented on OpenCTI. - It must be replaced by explicit `belongs-to` relationships. """ value: str = Field( description="The IP address value. CIDR is allowed.", min_length=1, ) + resolves_to: list[MACAddress | Reference] | None = Field( + description="List of MAC addresses that this IP V6 address resolves to.", + default=None, + ) + belongs_to: list[AutonomousSystem | Reference] | None = Field( + description="List of autonomous systems that this IP V6 address belongs to.", + default=None, + ) @field_validator("value", mode="before") @classmethod @@ -45,5 +50,11 @@ def to_stix2_object(self) -> Stix2IPv6Address: """Make stix object.""" return Stix2IPv6Address( value=self.value, + resolves_to_refs=( + [obj.id for obj in self.resolves_to] if self.resolves_to else None + ), + belongs_to_refs=( + [obj.id for obj in self.belongs_to] if self.belongs_to else None + ), **self._common_stix2_properties(), ) diff --git a/connectors-sdk/connectors_sdk/models/mac_address.py b/connectors-sdk/connectors_sdk/models/mac_address.py new file mode 100644 index 00000000000..787940b0b4b --- /dev/null +++ b/connectors-sdk/connectors_sdk/models/mac_address.py @@ -0,0 +1,21 @@ +"""MACAddress.""" + +from connectors_sdk.models.base_observable_entity import BaseObservableEntity +from pydantic import Field +from stix2.v21 import MACAddress as Stix2MACAddress + + +class MACAddress(BaseObservableEntity): + """Represent a MAC address observable on OpenCTI.""" + + value: str = Field( + description="The MAC address value.", + min_length=1, + ) + + def to_stix2_object(self) -> Stix2MACAddress: + """Make stix object.""" + return Stix2MACAddress( + value=self.value, + **self._common_stix2_properties(), + ) diff --git a/connectors-sdk/connectors_sdk/models/media_content.py b/connectors-sdk/connectors_sdk/models/media_content.py new file mode 100644 index 00000000000..84a32a72c0a --- /dev/null +++ b/connectors-sdk/connectors_sdk/models/media_content.py @@ -0,0 +1,43 @@ +"""MediaContent.""" + +from connectors_sdk.models.base_observable_entity import BaseObservableEntity +from pycti import CustomObservableMediaContent +from pydantic import AwareDatetime, Field + + +class MediaContent(BaseObservableEntity): + """Represent a Media Content observable.""" + + url: str = Field( + description="The URL of the media content.", + min_length=1, + ) + title: str | None = Field( + default=None, + description="The title of the media content.", + ) + content: str | None = Field( + default=None, + description="The content body of the media content.", + ) + media_category: str | None = Field( + default=None, + description="Category of the media content.", + ) + publication_date: AwareDatetime | None = Field( + default=None, + description="Publication date of the media content.", + ) + + def to_stix2_object(self) -> CustomObservableMediaContent: + """Make custom STIX object. + STIX ID is generated by pycti based on the 'url' attribute. + """ + return CustomObservableMediaContent( + url=self.url, + title=self.title, + content=self.content, + media_category=self.media_category, + publication_date=self.publication_date, + **self._common_stix2_properties(), + ) diff --git a/connectors-sdk/connectors_sdk/models/note.py b/connectors-sdk/connectors_sdk/models/note.py index ff2a6d5f4f5..7294e984928 100644 --- a/connectors-sdk/connectors_sdk/models/note.py +++ b/connectors-sdk/connectors_sdk/models/note.py @@ -62,6 +62,7 @@ def to_stix2_object(self) -> Stix2Note: id=PyctiNote.generate_id( content=self.content, created=self.publication_date, + abstract=self.abstract, ), abstract=self.abstract, content=self.content, diff --git a/connectors-sdk/connectors_sdk/models/sighting.py b/connectors-sdk/connectors_sdk/models/sighting.py new file mode 100644 index 00000000000..2131dced373 --- /dev/null +++ b/connectors-sdk/connectors_sdk/models/sighting.py @@ -0,0 +1,96 @@ +"""Sighting.""" + +from typing import TypeAlias + +from connectors_sdk.models.administrative_area import AdministrativeArea +from connectors_sdk.models.base_identified_entity import BaseIdentifiedEntity +from connectors_sdk.models.city import City +from connectors_sdk.models.country import Country +from connectors_sdk.models.individual import Individual +from connectors_sdk.models.observed_data import ObservedData +from connectors_sdk.models.organization import Organization +from connectors_sdk.models.reference import Reference +from connectors_sdk.models.region import Region +from pycti import StixSightingRelationship as PyctiStixSightingRelationship +from pydantic import AwareDatetime, Field +from stix2.v21 import Sighting as Stix2Sighting + +IdentityOrLocation: TypeAlias = ( + Individual | Organization | AdministrativeArea | City | Country | Region +) + + +class Sighting(BaseIdentifiedEntity): + """Represent a STIX Sighting relationship. + + Examples: + >>> sighting = Sighting( + ... sighting_of=indicator, + ... where_sighted=[organization], + ... first_seen=datetime(2026, 1, 1, tzinfo=timezone.utc), + ... last_seen=datetime(2026, 1, 1, tzinfo=timezone.utc), + ... ) + >>> entity = sighting.to_stix2_object() + """ + + # TODO: This property MUST reference only an SDO or a Custom Object. We should create a parent class for SDO. + sighting_of: BaseIdentifiedEntity | Reference = Field( + description="The entity being sighted (e.g. an Indicator). MUST reference an SDO or Custom Object.", + ) + where_sighted: list[IdentityOrLocation | Reference] = Field( + description="The entities where the sighting occurred. MUST reference Identity or Location SDOs.", + min_length=1, + ) + observed_data: list[ObservedData | Reference] | None = Field( + default=None, + description="The observed data associated with this sighting.", + ) + first_seen: AwareDatetime | None = Field( + default=None, + description="The beginning of the time window during which the sighting occurred.", + ) + last_seen: AwareDatetime | None = Field( + default=None, + description="The end of the time window during which the sighting occurred.", + ) + count: int | None = Field( + default=None, + description="Number of times the sighting was observed.", + ge=0, + ) + description: str | None = Field( + default=None, + description="Description of the sighting.", + ) + qualification: bool | None = Field( + default=None, + description="Qualification of the sighting (false positive).", + ) + + def to_stix2_object(self) -> Stix2Sighting: + """Make stix object.""" + where_sighted_ids = [ref.id for ref in self.where_sighted] + observed_data_ids = ( + [ref.id for ref in self.observed_data] + if self.observed_data is not None + else None + ) + + return Stix2Sighting( + id=PyctiStixSightingRelationship.generate_id( + sighting_of_ref=self.sighting_of.id, + where_sighted_refs=where_sighted_ids, + first_seen=self.first_seen, + last_seen=self.last_seen, + ), + sighting_of_ref=self.sighting_of.id, + where_sighted_refs=where_sighted_ids, + observed_data_refs=observed_data_ids, + first_seen=self.first_seen, + last_seen=self.last_seen, + count=self.count, + description=self.description, + x_opencti_negative=self.qualification, + **self._common_stix2_properties(), + allow_custom=True, + ) diff --git a/connectors-sdk/connectors_sdk/models/text.py b/connectors-sdk/connectors_sdk/models/text.py new file mode 100644 index 00000000000..f5c40967ceb --- /dev/null +++ b/connectors-sdk/connectors_sdk/models/text.py @@ -0,0 +1,26 @@ +"""Text.""" + +from connectors_sdk.models.base_observable_entity import BaseObservableEntity +from pycti import CustomObservableText +from pydantic import Field + + +class Text(BaseObservableEntity): + """Represent a Text observable on OpenCTI. + + Examples: + >>> text = Text(value="some extracted config value") + >>> entity = text.to_stix2_object() + """ + + value: str = Field( + description="The text value.", + min_length=1, + ) + + def to_stix2_object(self) -> CustomObservableText: + """Make stix object.""" + return CustomObservableText( + value=self.value, + **self._common_stix2_properties(), + ) diff --git a/connectors-sdk/connectors_sdk/models/user_account.py b/connectors-sdk/connectors_sdk/models/user_account.py new file mode 100644 index 00000000000..897d4657088 --- /dev/null +++ b/connectors-sdk/connectors_sdk/models/user_account.py @@ -0,0 +1,88 @@ +"""UserAccount model.""" + +from datetime import datetime + +from connectors_sdk.models.base_observable_entity import BaseObservableEntity +from connectors_sdk.models.enums import AccountType +from pydantic import Field +from stix2.v21 import UserAccount as Stix2UserAccount + + +class UserAccount(BaseObservableEntity): + """Represent a user account observable on OpenCTI.""" + + user_id: str | None = Field( + description="Identifier of the account in the system (for example UID, GUID, account name, or email address).", + default=None, + ) + credential: str | None = Field( + description="Cleartext credential for the account (intended for malware-analysis metadata, not for sharing PII).", + default=None, + ) + account_login: str | None = Field( + description="Account login used by the user to sign in when different from user_id.", + default=None, + ) + account_type: AccountType | None = Field( + description="Type of account (for example unix, windows-local, windows-domain, twitter).", + default=None, + ) + display_name: str | None = Field( + description="Display name of the account shown in user interfaces.", + default=None, + ) + is_service_account: bool | None = Field( + description="Whether the account is associated with a service or system process rather than an individual.", + default=None, + ) + is_privileged: bool | None = Field( + description="Whether the account has elevated privileges.", + default=None, + ) + can_escalate_privs: bool | None = Field( + description="Whether the account can escalate privileges.", + default=None, + ) + is_disabled: bool | None = Field( + description="Whether the account is disabled.", + default=None, + ) + account_created: datetime | None = Field( + description="When the account was created.", + default=None, + ) + account_expires: datetime | None = Field( + description="When the account expires.", + default=None, + ) + credential_last_changed: datetime | None = Field( + description="When the account credential was last changed.", + default=None, + ) + account_first_login: datetime | None = Field( + description="When the account was first accessed.", + default=None, + ) + account_last_login: datetime | None = Field( + description="When the account was last accessed.", + default=None, + ) + + def to_stix2_object(self) -> Stix2UserAccount: + """Make stix object.""" + return Stix2UserAccount( + user_id=self.user_id, + account_login=self.account_login, + account_type=self.account_type.value if self.account_type else None, + display_name=self.display_name, + is_service_account=self.is_service_account, + is_privileged=self.is_privileged, + can_escalate_privs=self.can_escalate_privs, + is_disabled=self.is_disabled, + account_created=self.account_created, + account_expires=self.account_expires, + credential_last_changed=self.credential_last_changed, + account_first_login=self.account_first_login, + account_last_login=self.account_last_login, + **self._common_stix2_properties(), + ) diff --git a/connectors-sdk/connectors_sdk/settings/base_settings.py b/connectors-sdk/connectors_sdk/settings/base_settings.py index bad4b7b8d66..961c3c2e2af 100644 --- a/connectors-sdk/connectors_sdk/settings/base_settings.py +++ b/connectors-sdk/connectors_sdk/settings/base_settings.py @@ -11,17 +11,17 @@ from copy import deepcopy from datetime import timedelta from pathlib import Path -from typing import Any, Literal, Self +from typing import Any, ClassVar, Literal, Self from connectors_sdk.settings.annotated_types import ListFromString from connectors_sdk.settings.deprecations import ( + Deprecate, migrate_deprecated_namespace, migrate_deprecated_variable, ) from connectors_sdk.settings.exceptions import ConfigValidationError from connectors_sdk.settings.json_schema_generator import ( ConnectorConfigJsonSchemaGenerator, - SanitizedJsonSchemaGenerator, ) from pydantic import ( BaseModel, @@ -33,6 +33,7 @@ create_model, model_validator, ) +from pydantic.fields import FieldInfo from pydantic_settings import ( BaseSettings, DotEnvSettingsSource, @@ -49,6 +50,41 @@ class BaseConfigModel(BaseModel, ABC): model_config = ConfigDict(extra="allow", frozen=True, validate_default=True) + _model_deprecated_fields: ClassVar[dict[str, FieldInfo]] = {} + + @classmethod + def __pydantic_init_subclass__(cls, **kwargs: Any) -> None: + """Initialize the `BaseConfigModel` subclass and rebuild model with deprecated fields.""" + super().__pydantic_init_subclass__(**kwargs) + + cls._model_deprecated_fields = {} + + for name, field in cls.model_fields.items(): + for meta in field.metadata: + if isinstance(meta, Deprecate): + # Change validation behavior + if not field.deprecated: + field.deprecated = True + field.default = None + field.default_factory = None + field.validate_default = False + + # Add deprecation info to JSON schema + if not field.json_schema_extra: + field.json_schema_extra = {} + field.json_schema_extra.update( # type: ignore[union-attr] + { + "new_namespace": meta.new_namespace, + "new_namespaced_var": meta.new_namespaced_var, + "removal_date": meta.removal_date, + } + ) + + cls._model_deprecated_fields[name] = field + + if cls._model_deprecated_fields: + cls.model_rebuild(force=True) + class _OpenCTIConfig(BaseConfigModel): url: HttpUrl = Field( @@ -159,18 +195,16 @@ def settings_customise_sources( """ config_yml_file_path = cls._get_config_yml_file_path() if config_yml_file_path: - settings_cls.model_config["yaml_file"] = config_yml_file_path return ( env_settings, - YamlConfigSettingsSource(settings_cls), + YamlConfigSettingsSource(settings_cls, yaml_file=config_yml_file_path), ) dot_env_file_path = cls._get_dot_env_file_path() if dot_env_file_path: - settings_cls.model_config["env_file"] = dot_env_file_path return ( env_settings, - DotEnvSettingsSource(settings_cls), + DotEnvSettingsSource(settings_cls, env_file=dot_env_file_path), ) return (env_settings,) @@ -269,19 +303,13 @@ def __init__(self) -> None: except ValidationError as e: raise ConfigValidationError("Error validating configuration.") from e - @classmethod - def model_json_schema(cls, **kwargs: Any) -> dict[str, Any]: # type: ignore[override] - """Use a custom JSON schema generator to sanitize the schema and remove function references.""" - kwargs.setdefault("schema_generator", SanitizedJsonSchemaGenerator) - return super().model_json_schema(**kwargs) - @classmethod def config_json_schema( cls, *, connector_name: str, by_alias: bool = False, - mode: str = "validation", + mode: Literal["validation", "serialization"] = "validation", ) -> dict[str, Any]: """Generate the connector-specific environment variable JSON schema used for metadata contracts.""" @@ -300,38 +328,27 @@ def make_schema_generator( mode=mode, ) - @model_validator(mode="wrap") @classmethod - def migrate_deprecation( - cls, - data: dict[str, Any], - handler: ModelWrapValidatorHandler[Self], - ) -> Self: - """Migrate deprecated variables and namespaces in the configuration data. + def _migrate_deprecated_namespaces(cls, data: dict[str, Any]) -> dict[str, Any]: + """Migrate deprecated namespaces in the configuration data. Args: data: Raw configuration data. - handler: Pydantic validation handler. Returns: - Validated and migrated configuration data. + Migrated configuration data. """ - for field_name, field in cls.model_fields.items(): - json_schema_extra = field.json_schema_extra - if not isinstance(json_schema_extra, dict): - json_schema_extra = {} - deprecated = field.deprecated - new_namespace = json_schema_extra.get("new_namespace") - new_namespaced_var = json_schema_extra.get("new_namespaced_var") - removal_date = ( - str(json_schema_extra.get("removal_date")) - if json_schema_extra.get("removal_date") - else None - ) + for field_name, field in cls._model_deprecated_fields.items(): annotation = field.annotation is_namespace = isinstance(annotation, type) and issubclass( annotation, BaseConfigModel ) + deprecate_metadata = next( + m for m in field.metadata if isinstance(m, Deprecate) + ) + new_namespace = deprecate_metadata.new_namespace + new_namespaced_var = deprecate_metadata.new_namespaced_var + removal_date = deprecate_metadata.removal_date if is_namespace and new_namespaced_var: raise ValueError( @@ -339,11 +356,12 @@ def migrate_deprecation( "Use only `new_namespace`." ) - if deprecated and new_namespace and is_namespace: + if is_namespace and new_namespace: if not isinstance(new_namespace, str): raise ValueError( - f"`new_namespace` for namespace {field_name} must be a string." + f"`new_namespace` for field {field_name} must be a string." ) + migrate_deprecated_namespace( data, old_namespace=field_name, @@ -351,32 +369,75 @@ def migrate_deprecation( removal_date=removal_date, ) + return data + + @classmethod + def _migrate_deprecated_variables(cls, data: dict[str, Any]) -> dict[str, Any]: + """Migrate deprecated variables in the configuration data. + + Args: + data: Raw configuration data. + + Returns: + Migrated configuration data. + """ + for field_name, field in cls.model_fields.items(): + annotation = field.annotation + is_namespace = isinstance(annotation, type) and issubclass( + annotation, BaseConfigModel + ) if is_namespace: - for sub_field_name, sub_field in annotation.model_fields.items(): # type: ignore[union-attr] - sub_json_schema_extra = sub_field.json_schema_extra - if not isinstance(sub_json_schema_extra, dict): - sub_json_schema_extra = {} - sub_deprecated = sub_field.deprecated - sub_new_namespace = sub_json_schema_extra.get("new_namespace") - sub_new_namespaced_var = sub_json_schema_extra.get( - "new_namespaced_var" + for ( + sub_field_name, + sub_field, + ) in annotation._model_deprecated_fields.items(): # type: ignore[union-attr] + deprecate_metadata = next( + m for m in sub_field.metadata if isinstance(m, Deprecate) ) - sub_new_value_factory = sub_json_schema_extra.get( - "new_value_factory" - ) - sub_removal_date = sub_json_schema_extra.get("removal_date") + new_namespace = deprecate_metadata.new_namespace + new_namespaced_var = deprecate_metadata.new_namespaced_var + new_value_factory = deprecate_metadata.new_value_factory + removal_date = deprecate_metadata.removal_date + + if new_namespaced_var: + if not isinstance(new_namespaced_var, str): + raise ValueError( + f"`new_namespaced_var` for field {sub_field_name} must be a string." + ) - if sub_deprecated and sub_new_namespaced_var: migrate_deprecated_variable( data, old_name=sub_field_name, - new_name=sub_new_namespaced_var, + new_name=new_namespaced_var, current_namespace=field_name, - new_namespace=sub_new_namespace, - new_value_factory=sub_new_value_factory, - removal_date=sub_removal_date, + new_namespace=new_namespace, + new_value_factory=new_value_factory, + removal_date=removal_date, ) + return data + + @model_validator(mode="wrap") + @classmethod + def _migrate_deprecation( + cls, data: dict[str, Any], handler: ModelWrapValidatorHandler[Self] + ) -> Self: + """Migrate deprecated namespaces and variables in the configuration data. + + Args: + data: Raw configuration data. + handler: Pydantic validation handler. + + Returns: + Validated and migrated configuration data. + + Notes: + - This is the second validator to be executed at runtime, after `_load_config_dict`. + """ + # First migrate deprecated namespaces, then deprecated variables to ensure all deprecations are handled. + data = cls._migrate_deprecated_namespaces(data) + data = cls._migrate_deprecated_variables(data) + return handler(data) @model_validator(mode="wrap") @@ -394,6 +455,7 @@ def _load_config_dict( - This method is a `model_validator`, i.e. it's internally executed by pydantic during model validation - The mode (`"wrap"`) guarantees that this validator is always executed _before_ the validators defined in child class - See `_SettingsLoader.build_loader_from_model` for further details about env/config vars parsing implementation + - This is the first validator to be executed at runtime, before `_migrate_deprecated_namespaces` and `_migrate_deprecated_variables` References: https://github.com/pydantic/pydantic/issues/8277 [consulted on 2025-11-19] @@ -410,7 +472,7 @@ def to_helper_config(self) -> dict[str, Any]: return self.model_dump( mode="json", context={"mode": "pycti"}, - # Deprecated fields can be set to `None` despite their type (due to `SkipValidation` annotation). + # Deprecated fields can be set to `None` despite their type (due to `Deprecate` annotation). # To avoid `PydanticSerializationError`, we exclude all fields set to `None` during serialization. # OpenCTIConnectorHelper handles missing fields with default values or internal logic. exclude_none=True, diff --git a/connectors-sdk/connectors_sdk/settings/deprecations.py b/connectors-sdk/connectors_sdk/settings/deprecations.py index 0d3906aa0a2..a31e64cba79 100644 --- a/connectors-sdk/connectors_sdk/settings/deprecations.py +++ b/connectors-sdk/connectors_sdk/settings/deprecations.py @@ -2,7 +2,7 @@ import warnings from datetime import date -from typing import Any, Callable +from typing import Any, Callable, Literal from pydantic import Field from pydantic.fields import FieldInfo @@ -121,48 +121,88 @@ def migrate_deprecated_variable( data[destination_namespace] = new_config -class DeprecatedField: - """Define a deprecated field with migration information. - - The migration information is used in the BaseConnectorSettings to automatically - migrate deprecated fields to their new names or namespaces. +class Deprecate: + """A metadata class that indicates that a field is deprecated and may be migrated + to a new variable during `BaseConnectorSettings` validation. Args: - deprecated (str | bool): `True` to mark the field as deprecated, or a deprecation message to be displayed in warnings and JSON schemas. new_namespace (str | None): The new namespace to migrate to. new_namespaced_var (str | None): The new variable name when migrating a variable. new_value_factory (Callable | None): A function to change the value when migrating. removal_date (date | str | None): Date when the deprecated setting will be removed. - Returns: - FieldInfo: A Pydantic FieldInfo object with deprecation metadata. + Notes: + - If this is applied as an annotation (e.g., via `x: Annotated[int, Deprecate(removal_date="2027-01-01")]`), + the field will be marked as deprecated and its default value (always `None`) will not be validated. + However, user-provided values remain subject to normal validation. + - Because this sets the field as optional (i.e., sets its default to `None`), + subsequent annotation-applied transformations may be impacted. + Additionally, IDE and static type checkers may ignore that the field can be set to `None`, + which can lead to issues if the field is accessed without checking for `None` first. """ - def __new__( # type: ignore[misc] - cls, - *, - deprecated: str | bool = True, + def __init__( + self, new_namespace: str | None = None, new_namespaced_var: str | None = None, new_value_factory: Callable[[Any], Any] | None = None, removal_date: date | str | None = None, - ) -> FieldInfo: - """Create a Pydantic Field with deprecation metadata.""" - if not deprecated: - raise ValueError( - "DeprecatedField must have a deprecation reason or be set to True." - ) + ): + """Instantiate a `Deprecate` metadata.""" + self.new_namespace = new_namespace + self.new_namespaced_var = new_namespaced_var + self.new_value_factory = new_value_factory if isinstance(removal_date, str): removal_date = date.fromisoformat(removal_date) - if removal_date: - removal_date = removal_date.strftime("%Y-%m-%d") - return Field( - default=None, - deprecated=deprecated, - json_schema_extra={ - "new_namespace": new_namespace, - "new_namespaced_var": new_namespaced_var, - "new_value_factory": new_value_factory, # type: ignore[dict-item] - "removal_date": removal_date, # type: ignore[dict-item] - }, - ) # type: ignore[return-value] + self.removal_date = removal_date.strftime("%Y-%m-%d") if removal_date else None + + +def DeprecatedField( # noqa: N802 (using pydantic.Field naming convention) + *, + deprecated: str | Literal[True] = True, + new_namespace: str | None = None, + new_namespaced_var: str | None = None, + new_value_factory: Callable[[Any], Any] | None = None, + removal_date: date | str | None = None, + **kwargs: Any, +) -> Any: + """Define a deprecated field with migration information. + + The migration information is used in the `BaseConnectorSettings` to automatically + migrate deprecated fields to their new names or namespaces. + + Args: + deprecated (str | Literal[True]): `True` to mark the field as deprecated, or + a deprecation message to be displayed in warnings and JSON schemas. + new_namespace (str | None): The new namespace to migrate to. + new_namespaced_var (str | None): The new variable name when migrating a variable. + new_value_factory (Callable | None): A function to change the value when migrating. + removal_date (date | str | None): Date when the deprecated setting will be removed. + **kwargs: Additional keyword arguments to be passed to the underlying `Field` definition. + + Returns: + FieldInfo: A Pydantic FieldInfo object with deprecation metadata. + + Notes: + - The return annotation is `Any` so `DeprecatedField` can be used on any type-annotated + fields without causing a type error (same as `Field` from Pydantic). + - See `pydantic.Field` (https://docs.pydantic.dev/latest/api/fields/) for more information + on the available parameters to define a field, as they can be used in conjunction with the deprecation parameters. + """ + if not deprecated: + raise ValueError( + "DeprecatedField must have a deprecation reason or be set to True." + ) + + field_info: FieldInfo = Field(deprecated=deprecated, **kwargs) + # Add Deprecate metadata so it can be used for migration in BaseConnectorSettings + field_info.metadata.append( + Deprecate( + new_namespace=new_namespace, + new_namespaced_var=new_namespaced_var, + new_value_factory=new_value_factory, + removal_date=removal_date, + ) + ) + + return field_info diff --git a/connectors-sdk/connectors_sdk/settings/json_schema_generator.py b/connectors-sdk/connectors_sdk/settings/json_schema_generator.py index f35dc34dd37..296456ca5ee 100644 --- a/connectors-sdk/connectors_sdk/settings/json_schema_generator.py +++ b/connectors-sdk/connectors_sdk/settings/json_schema_generator.py @@ -3,43 +3,10 @@ from copy import deepcopy from typing import Any -from pydantic.json_schema import ( - GenerateJsonSchema, - JsonSchemaValue, -) +from pydantic.json_schema import GenerateJsonSchema, JsonSchemaValue -class SanitizedJsonSchemaGenerator(GenerateJsonSchema): - """A JsonSchema generator that removes function references from schemas.""" - - def generate_inner(self, schema: Any) -> JsonSchemaValue: - """Generate inner schema, removing function references from metadata. - - Args: - schema: The schema to process. - - Returns: - The processed JSON schema value. - """ - if ( - not isinstance(schema, dict) - or not isinstance(meta := schema.get("metadata"), dict) - or not isinstance(js_extra := meta.get("pydantic_js_extra"), dict) - or "new_value_factory" not in js_extra - ): - return super().generate_inner(schema) - - schema = schema.copy() - meta = meta.copy() - js_extra = js_extra.copy() - js_extra.pop("new_value_factory", None) - meta["pydantic_js_extra"] = js_extra - schema["metadata"] = meta - - return super().generate_inner(schema) - - -class ConnectorConfigJsonSchemaGenerator(SanitizedJsonSchemaGenerator): +class ConnectorConfigJsonSchemaGenerator(GenerateJsonSchema): """Generate JSON schemas for connector configurations with resolved references and deprecation handling.""" connector_name: str diff --git a/connectors-sdk/connectors_sdk/states/__init__.py b/connectors-sdk/connectors_sdk/states/__init__.py new file mode 100644 index 00000000000..d507f3f31ea --- /dev/null +++ b/connectors-sdk/connectors_sdk/states/__init__.py @@ -0,0 +1 @@ +"""Module containing base class for connector's state management.""" diff --git a/connectors-sdk/connectors_sdk/states/_base_state.py b/connectors-sdk/connectors_sdk/states/_base_state.py new file mode 100644 index 00000000000..61b71f3d160 --- /dev/null +++ b/connectors-sdk/connectors_sdk/states/_base_state.py @@ -0,0 +1,166 @@ +"""State base classes for connectors. + +This module is responsible for loading and saving a connector's state to OpenCTI. +It provides a simple interface to manage the state and ensures that it's properly cached and updated. +All connectors should use `BaseConnectorState` to ensure consistency and reliability in state management. + +This module is private and should not be imported directly inside connectors. +The public subclasses should be used instead (e.g. `ExternalImportConnectorState` for external import connectors). + +Architecture: +- _StateClient: Communicate with OpenCTI platform (read/write state) +- BaseConnectorState: Load, validate and save connector's state +""" + +from __future__ import annotations + +import warnings +from abc import ABC +from datetime import datetime +from typing import TYPE_CHECKING, Any + +from pydantic import BaseModel, ConfigDict, PrivateAttr, field_serializer + +if TYPE_CHECKING: + from pycti import OpenCTIConnectorHelper + + +class _StateClient: + """State client for managing states on OpenCTI. + It is used internally by `BaseConnectorState` to handle the actual communication with OpenCTI. + Connector developers should not interact with this class directly. + """ + + _helper: OpenCTIConnectorHelper + + def __init__(self, helper: OpenCTIConnectorHelper) -> None: + """Initialize the state client with the connector helper. + On initialization, the state's fields are not populated. + The `load` method must be called to populate the state's fields with the state stored on OpenCTI. + + Arguments: + helper: The `OpenCTIConnectorHelper` instance to communicate with the OpenCTI platform. + """ + self._helper = helper + + def load_state(self) -> dict[str, Any]: + """Get connector's state stored on OpenCTI.""" + return self._helper.get_state() or {} + + def save_state(self, state: BaseConnectorState) -> None: + """Save state's fields as connector's state on OpenCTI.""" + declared_fields = set(type(state).model_fields) + + state_dump = state.model_dump(mode="json", include=declared_fields) + # Send both declared _and_ extra fields to not delete any connector state's attributes on OpenCTI + if state.model_extra: + state_dump.update(state.model_extra) + + self._helper.set_state(state_dump) + # Ensure the state is updated immediately on OpenCTI (instead of waiting for the next ping) + self._helper.force_ping() + + +class BaseConnectorState(BaseModel, ABC): + """Base class for connectors states. + It must be subclassed per connectors types. + All fields defined in this model MUST be JSON serializable as they will be stored as JSON + in OpenCTI (see https://docs.pydantic.dev/latest/concepts/serialization/#json-mode). + """ + + model_config = ConfigDict( + # Allow extra fields that could be stored on OpenCTI but not declared in the model + # (e.g. if the connector's state has evolved since the last time it was loaded) + extra="allow", + # Ensure that the model is revalidated when setting properties, + # to keep the state consistent and avoid saving invalid data on OpenCTI + validate_assignment=True, + ) + + _client: _StateClient | None = PrivateAttr(default=None) + _can_be_loaded: bool = PrivateAttr(default=False) + + @field_serializer("*", mode="wrap", when_used="json") + def _serialize_datetimes(self, value: Any, handler: Any) -> Any: + """Replace the default JSON serializer, in order to use +00:00 offset instead of Z prefix. + This is convenient so `assert self.model_dump(mode="json")["last_run"] == self.last_run.isoformat()` + is `True` across both codebase and tests (using the same serializer). + Consistent with `DatetimeFromIsoString` in `connectors_sdk.settings.annotated_types` module too. + + Arguments: + value: The value to serialize. + handler: The default JSON serializer to use for non-datetime values. + + Returns: + The serialized value. + """ + if isinstance(value, datetime): + return value.isoformat() # Override default JSON serializer + return handler(value) + + def model_post_init(self, context: Any) -> None: + """Enable loading the state from OpenCTI after the model is initialized. + + On initialization, the state's fields are not populated. + The `load` method must be called to populate the state's fields with the state stored on OpenCTI. + """ + _ = context # Unused argument (required by pydantic) + self._can_be_loaded = True + + def attach_opencti_connector_helper(self, helper: OpenCTIConnectorHelper) -> None: + """Attach an instance of `OpenCTIConnectorHelper` to the state. + This is used to link the state instance to the corresponding `pycti` state API, + so that it can be loaded from / saved to OpenCTI. + + Arguments: + helper: The `OpenCTIConnectorHelper` instance to link to this state. + """ + # Wrap the helper to prepare state API calls properly + self._client = _StateClient(helper) + + def load(self, force: bool = False) -> None: + """Load the state from OpenCTI. + This will overwrite the instance's fields with the connector's state stored on OpenCTI. + If the state instance has potential unsaved changes, a warning will be raised and + the state will NOT be loaded, to prevent unintentional data loss. + + Arguments: + force: If `True`, load the state from OpenCTI even if there are potential + unsaved changes in the state instance. + """ + if not self._client: + raise RuntimeError( + "State client is not initialized. Call `attach_opencti_connector_helper` method first." + ) + + if not self._can_be_loaded and not force: + warnings.warn( + "Loading connector's state from OpenCTI would overwrite potential unsaved changes in the state instance. " + "Save current changes by calling `save()` or use `force=True` to load the state anyway.", + UserWarning, + stacklevel=2, + ) + return + + raw_state = self._client.load_state() + for key, value in raw_state.items(): + # Prevent potential conflicts with private attributes + # (not likely but possible) + if key in ("_client", "_can_be_loaded"): + continue + + setattr(self, key, value) + + # Prevent loading the state again before `save` is called + # (to avoid overwriting potential unsaved changes) + self._can_be_loaded = False + + def save(self) -> None: + """Save the state to OpenCTI.""" + if not self._client: + raise RuntimeError( + "State client is not initialized. Call `attach_opencti_connector_helper` method first." + ) + + self._client.save_state(self) + self._can_be_loaded = True diff --git a/connectors-sdk/connectors_sdk/states/states.py b/connectors-sdk/connectors_sdk/states/states.py new file mode 100644 index 00000000000..a54db4a0ebe --- /dev/null +++ b/connectors-sdk/connectors_sdk/states/states.py @@ -0,0 +1,22 @@ +"""State models for connectors. + +This module is responsible for defining the state model of each connector type. +Every connector should use its corresponding state model to ensure consistency and reliability in state management. +Each class can be used as-is (they're not abstract classes) or subclassed to fit specific needs. +""" + +from datetime import datetime + +from connectors_sdk.states._base_state import BaseConnectorState +from pydantic import Field + + +class ExternalImportConnectorState(BaseConnectorState): + """State model for connectors of type `EXTERNAL_IMPORT`. + This class inherits from `pydantic.BaseModel`. + It can be used as-is or subclassed with custom fields to fit specific connector needs. + All fields defined in this model MUST be JSON serializable as they will be stored as JSON + in OpenCTI (see https://docs.pydantic.dev/latest/concepts/serialization/#json-mode). + """ + + last_run: datetime | None = Field(default=None) diff --git a/connectors-sdk/pyproject.toml b/connectors-sdk/pyproject.toml index 359412a85c4..93272ebf9b5 100644 --- a/connectors-sdk/pyproject.toml +++ b/connectors-sdk/pyproject.toml @@ -9,20 +9,20 @@ description = "Connectors SDK for Octi Connectors." requires-python = ">=3.11, <3.13" dependencies = [ - "pycti==7.260309.0", + "pycti==7.260515.0", "pydantic>=2.8.2,<3", # ISO pycti https://github.com/OpenCTI-Platform/client-python/blob/master/requirements.txt#L8 "pydantic_settings>= 2.9.1,<3", # Actual minimal version used in the connectors ] [project.optional-dependencies] dev = [ - "black==26.1.0", # Aligned with ci-requirements + "black==26.3.1", # Aligned with ci-requirements "isort==7.0.0", # Aligned with ci-requirements ] test = [ "freezegun>=1.5.5,<2", "pip-audit==2.10.0", - "pytest>=8.3.5,<9", + "pytest>=9.0.3,<10", "pytest-cov>=7,<8", "pydocstyle>=6.3.0,<7", "mypy>=1.15.0,<2", diff --git a/connectors-sdk/tests/test_api.py b/connectors-sdk/tests/test_api.py index 6c5d2f88c29..3757a9935e4 100644 --- a/connectors-sdk/tests/test_api.py +++ b/connectors-sdk/tests/test_api.py @@ -19,8 +19,10 @@ def test_root_public_api_is_valid(): "ConfigError", "ConfigValidationError", "DatetimeFromIsoString", - "ListFromString", + "Deprecate", "DeprecatedField", + "ExternalImportConnectorState", + "ListFromString", } missing = imports - set(root_api.__all__) extra = set(root_api.__all__) - imports diff --git a/connectors-sdk/tests/test_models/test_api.py b/connectors-sdk/tests/test_models/test_api.py index 5b58b7d69cb..6d6141f058c 100644 --- a/connectors-sdk/tests/test_models/test_api.py +++ b/connectors-sdk/tests/test_models/test_api.py @@ -1,54 +1,58 @@ # pragma: no cover # Do not compute coverage on test files """Offer tests for OpenCTI Models public API.""" +import warnings + import connectors_sdk.models as models -import connectors_sdk.models.octi as octi def test_deprecated_imports() -> None: """Test that features are not removed by mistake.""" - # Given the feature name - # Then it should all be present - deprecated_models_octi_import = { # Deprecated import from models.octi - "AssociatedFile", - "AttackPattern", - "BaseEntity", - "BaseIdentifiedEntity", - "City", - "Country", - "DomainName", - "ExternalReference", - "File", - "Individual", - "Indicator", - "IntrusionSet", - "IPV4Address", - "IPV6Address", - "KillChainPhase", - "Malware", - "Note", - "Organization", - "OrganizationAuthor", - "Relationship", - "Report", - "Sector", - "Software", - "ThreatActorGroup", - "TLPMarking", - "URL", - "Vulnerability", - "related_to", - "based_on", - "derived_from", - "indicates", - "targets", - "located_at", - "has", - } - missing = deprecated_models_octi_import - set(octi.__all__) - extra = set(octi.__all__) - deprecated_models_octi_import - assert not missing, f"Missing features in models model public api: {missing}" - assert not extra, f"Unexpected features in models model public api: {extra}" + with warnings.catch_warnings(record=True): + import connectors_sdk.models.octi as octi + + # Given the feature name + # Then it should all be present + deprecated_models_octi_import = { # Deprecated import from models.octi + "AssociatedFile", + "AttackPattern", + "BaseEntity", + "BaseIdentifiedEntity", + "City", + "Country", + "DomainName", + "ExternalReference", + "File", + "Individual", + "Indicator", + "IntrusionSet", + "IPV4Address", + "IPV6Address", + "KillChainPhase", + "Malware", + "Note", + "Organization", + "OrganizationAuthor", + "Relationship", + "Report", + "Sector", + "Software", + "ThreatActorGroup", + "TLPMarking", + "URL", + "Vulnerability", + "related_to", + "based_on", + "derived_from", + "indicates", + "targets", + "located_at", + "has", + } + missing = deprecated_models_octi_import - set(octi.__all__) + extra = set(octi.__all__) - deprecated_models_octi_import + assert not missing, f"Missing features in models model public api: {missing}" + assert not extra, f"Unexpected features in models model public api: {extra}" def test_public_models_are_present(): @@ -65,19 +69,26 @@ def test_public_models_are_present(): "BaseIdentifiedEntity", "BaseIdentifiedObject", "BaseObservableEntity", + "Campaign", + "Channel", "City", "Country", "DomainName", + "EmailAddress", "ExternalReference", "File", "Hostname", + "Incident", "Individual", "Indicator", + "Infrastructure", "IntrusionSet", "IPV4Address", "IPV6Address", "KillChainPhase", + "MACAddress", "Malware", + "MediaContent", "Note", "ObservedData", "Organization", @@ -87,10 +98,13 @@ def test_public_models_are_present(): "Relationship", "Report", "Sector", + "Sighting", "Software", + "Text", "ThreatActorGroup", "TLPMarking", "URL", + "UserAccount", "Vulnerability", "X509Certificate", } diff --git a/connectors-sdk/tests/test_models/test_campaign.py b/connectors-sdk/tests/test_models/test_campaign.py new file mode 100644 index 00000000000..acbd93e2c3b --- /dev/null +++ b/connectors-sdk/tests/test_models/test_campaign.py @@ -0,0 +1,59 @@ +import pytest +from connectors_sdk.models.base_identified_entity import BaseIdentifiedEntity +from connectors_sdk.models.campaign import Campaign +from pycti import Campaign as PyctiCampaign +from pydantic import ValidationError +from stix2.v21 import Campaign as Stix2Campaign + + +def test_campaign_is_a_base_identified_entity(): + """Test that Campaign is a BaseIdentifiedEntity.""" + assert issubclass(Campaign, BaseIdentifiedEntity) + + +def test_campaign_class_should_not_accept_invalid_input(): + """Test that Campaign class should not accept invalid input.""" + input_data = { + "name": "Test campaign", + "invalid_key": "invalid_value", + } + with pytest.raises(ValidationError): + Campaign.model_validate(input_data) + + +def test_campaign_to_stix2_object_returns_valid_stix_object( + fake_valid_organization_author, + fake_valid_external_references, + fake_valid_tlp_markings, +): + """Test that Campaign to_stix2_object method returns a valid STIX2.1 Campaign.""" + campaign = Campaign( + name="Test campaign", + description="Test description", + aliases=["Test alias"], + first_seen="2023-01-01T00:00:00Z", + last_seen="2024-01-01T00:00:00Z", + objective="Test objective", + author=fake_valid_organization_author, + markings=fake_valid_tlp_markings, + external_references=fake_valid_external_references, + ) + stix2_obj = campaign.to_stix2_object() + + assert stix2_obj == Stix2Campaign( + id=PyctiCampaign.generate_id(name="Test campaign"), + name="Test campaign", + description="Test description", + aliases=["Test alias"], + first_seen="2023-01-01T00:00:00Z", + last_seen="2024-01-01T00:00:00Z", + objective="Test objective", + created_by_ref=fake_valid_organization_author.id, + object_marking_refs=[marking.id for marking in fake_valid_tlp_markings], + external_references=[ + external_ref.to_stix2_object() + for external_ref in fake_valid_external_references + ], + created=stix2_obj.created, + modified=stix2_obj.modified, + ) diff --git a/connectors-sdk/tests/test_models/test_channel.py b/connectors-sdk/tests/test_models/test_channel.py new file mode 100644 index 00000000000..a82910a980a --- /dev/null +++ b/connectors-sdk/tests/test_models/test_channel.py @@ -0,0 +1,55 @@ +import pytest +from connectors_sdk.models.base_identified_entity import BaseIdentifiedEntity +from connectors_sdk.models.channel import Channel +from pycti import Channel as PyctiChannel +from pycti import CustomObjectChannel +from pydantic import ValidationError + + +def test_channel_is_a_base_identified_entity(): + """Test that Channel is a BaseIdentifiedEntity.""" + assert issubclass(Channel, BaseIdentifiedEntity) + + +def test_channel_class_should_not_accept_invalid_input(): + """Test that Channel class should not accept invalid input.""" + input_data = { + "name": "Test channel", + "invalid_key": "invalid_value", + } + with pytest.raises(ValidationError): + Channel.model_validate(input_data) + + +def test_channel_to_stix2_object_returns_valid_stix_object( + fake_valid_organization_author, + fake_valid_external_references, + fake_valid_tlp_markings, +): + """Test that Channel to_stix2_object method returns a valid STIX-like object.""" + channel = Channel( + name="Test channel", + description="Test description", + aliases=["Test alias"], + channel_types=["test_channel_type"], + author=fake_valid_organization_author, + markings=fake_valid_tlp_markings, + external_references=fake_valid_external_references, + ) + stix2_obj = channel.to_stix2_object() + + assert stix2_obj == CustomObjectChannel( + id=PyctiChannel.generate_id(name="Test channel"), + name="Test channel", + description="Test description", + aliases=["Test alias"], + channel_types=["test_channel_type"], + created_by_ref=fake_valid_organization_author.id, + object_marking_refs=[marking.id for marking in fake_valid_tlp_markings], + external_references=[ + external_ref.to_stix2_object() + for external_ref in fake_valid_external_references + ], + created=stix2_obj.created, + modified=stix2_obj.modified, + ) diff --git a/connectors-sdk/tests/test_models/test_domain_name.py b/connectors-sdk/tests/test_models/test_domain_name.py index 3df47461250..7c9fdb013bc 100644 --- a/connectors-sdk/tests/test_models/test_domain_name.py +++ b/connectors-sdk/tests/test_models/test_domain_name.py @@ -1,5 +1,6 @@ import pytest from connectors_sdk.models.domain_name import DomainName +from connectors_sdk.models.ipv4_address import IPV4Address from pydantic import ValidationError from stix2.v21 import DomainName as Stix2DomainName @@ -20,12 +21,18 @@ def test_domain_name_class_should_not_accept_invalid_input(): def test_domain_name_to_stix2_object_returns_valid_stix_object(): """Test that DomainName to_stix2_object method returns a valid STIX2.1 DomainName.""" - # Given: A valid DomainName instance - domain_name = DomainName(value="test.com") + # Given: A valid DomainName instance with resolves_to refs + ipv4_address = IPV4Address(value="1.1.1.1") + second_domain = DomainName(value="cdn.test.com") + domain_name = DomainName( + value="test.com", + resolves_to=[ipv4_address, second_domain], + ) # When: calling to_stix2_object method stix2_obj = domain_name.to_stix2_object() # Then: A valid STIX2.1 DomainName is returned assert isinstance(stix2_obj, Stix2DomainName) + assert stix2_obj.resolves_to_refs == [ipv4_address.id, second_domain.id] def test_domain_name_to_stix2_object( diff --git a/connectors-sdk/tests/test_models/test_email_address.py b/connectors-sdk/tests/test_models/test_email_address.py new file mode 100644 index 00000000000..31e10510fa0 --- /dev/null +++ b/connectors-sdk/tests/test_models/test_email_address.py @@ -0,0 +1,76 @@ +import pytest +from connectors_sdk.models.base_identified_entity import BaseIdentifiedEntity +from connectors_sdk.models.email_address import EmailAddress +from connectors_sdk.models.user_account import UserAccount +from pydantic import ValidationError +from stix2.v21 import EmailAddress as Stix2EmailAddress + + +def test_email_address_is_a_base_identified_entity() -> None: + """Test that EmailAddress is a BaseIdentifiedEntity.""" + assert issubclass(EmailAddress, BaseIdentifiedEntity) + + +def test_email_address_class_should_not_accept_invalid_input(): + """Test that EmailAddress class should not accept invalid input.""" + input_data = { + "value": "user@example.com", + "invalid_key": "invalid_value", + } + with pytest.raises(ValidationError) as error: + EmailAddress.model_validate(input_data) + assert error.value.errors()[0]["loc"] == ("invalid_key",) + + +def test_email_address_to_stix2_object_returns_valid_stix_object(): + """Test that EmailAddress to_stix2_object method returns a valid STIX2.1 object.""" + email_address = EmailAddress(value="user@example.com") + stix2_obj = email_address.to_stix2_object() + assert isinstance(stix2_obj, Stix2EmailAddress) + + +def test_email_address_to_stix2_object( + fake_valid_organization_author, + fake_valid_tlp_markings, + fake_valid_external_references, + fake_valid_associated_files, +) -> None: + user_account = UserAccount( + user_id="john.doe@example.com", + account_login="john.doe", + display_name="John Doe", + ) + + email_address = EmailAddress( + value="john.doe@example.com", + display_name="John Doe", + belongs_to=user_account, + score=80, + description="Suspicious phishing sender", + labels=["phishing", "email"], + associated_files=fake_valid_associated_files, + create_indicator=True, + author=fake_valid_organization_author, + markings=fake_valid_tlp_markings, + external_references=fake_valid_external_references, + ).to_stix2_object() + + assert email_address == Stix2EmailAddress( + value="john.doe@example.com", + display_name="John Doe", + belongs_to_ref=user_account.id, + allow_custom=True, + object_marking_refs=[marking.id for marking in fake_valid_tlp_markings], + x_opencti_score=80, + x_opencti_description="Suspicious phishing sender", + x_opencti_labels=["phishing", "email"], + x_opencti_external_references=[ + external_ref.to_stix2_object() + for external_ref in fake_valid_external_references + ], + x_opencti_created_by_ref=fake_valid_organization_author.id, + x_opencti_files=[ + file.to_stix2_object() for file in fake_valid_associated_files + ], + x_opencti_create_indicator=True, + ) diff --git a/connectors-sdk/tests/test_models/test_enums.py b/connectors-sdk/tests/test_models/test_enums.py index 8e6a3c470e8..c775cf0694b 100644 --- a/connectors-sdk/tests/test_models/test_enums.py +++ b/connectors-sdk/tests/test_models/test_enums.py @@ -26,7 +26,12 @@ } ENUMS = OCTI_ENUMS | { + "AccountType", + "ChannelType", + "IncidentSeverity", + "IncidentType", "RelationshipType", + "InfrastructureType", } diff --git a/connectors-sdk/tests/test_models/test_incident.py b/connectors-sdk/tests/test_models/test_incident.py new file mode 100644 index 00000000000..04453483d9f --- /dev/null +++ b/connectors-sdk/tests/test_models/test_incident.py @@ -0,0 +1,87 @@ +import pytest +from connectors_sdk.models.base_identified_entity import BaseIdentifiedEntity +from connectors_sdk.models.incident import Incident +from pycti import Incident as PyctiIncident +from pydantic import ValidationError +from stix2.v21 import Incident as Stix2Incident + + +def test_incident_is_a_base_identified_entity(): + """Test that Incident is a BaseIdentifiedEntity.""" + assert issubclass(Incident, BaseIdentifiedEntity) + + +def test_incident_class_should_not_accept_invalid_input(): + """Test that Incident class should not accept invalid input.""" + input_data = { + "name": "Test incident", + "created": "2024-01-01T00:00:00Z", + "invalid_key": "invalid_value", + } + with pytest.raises(ValidationError): + Incident.model_validate(input_data) + + +def test_incident_class_should_require_name_and_created(): + """Test that Incident class requires name and created fields.""" + with pytest.raises(ValidationError): + Incident.model_validate({"name": "Test incident"}) + with pytest.raises(ValidationError): + Incident.model_validate({"created": "2024-01-01T00:00:00Z"}) + + +def test_incident_to_stix2_object_returns_valid_stix_object( + fake_valid_organization_author, + fake_valid_external_references, + fake_valid_tlp_markings, +): + """Test that Incident to_stix2_object method returns a valid STIX2.1 Incident.""" + incident = Incident( + name="Test incident", + created="2024-01-01T00:00:00Z", + description="Test description", + incident_type="alert", + severity="high", + source="Test source", + first_seen="2023-12-01T00:00:00Z", + last_seen="2024-01-01T00:00:00Z", + labels=["test-label"], + objective="Test objective", + author=fake_valid_organization_author, + markings=fake_valid_tlp_markings, + external_references=fake_valid_external_references, + ) + stix2_obj = incident.to_stix2_object() + + assert isinstance(stix2_obj, Stix2Incident) + assert stix2_obj.id == PyctiIncident.generate_id( + name="Test incident", created=incident.created + ) + assert stix2_obj.name == "Test incident" + assert stix2_obj.description == "Test description" + assert stix2_obj.labels == ["test-label"] + assert stix2_obj.objective == "Test objective" + assert stix2_obj.source == "Test source" + assert stix2_obj.severity == incident.severity + assert stix2_obj.incident_type == incident.incident_type + assert stix2_obj.first_seen == incident.first_seen + assert stix2_obj.last_seen == incident.last_seen + assert stix2_obj.created_by_ref == fake_valid_organization_author.id + assert stix2_obj.object_marking_refs == [ + marking.id for marking in fake_valid_tlp_markings + ] + + +def test_incident_to_stix2_object_with_minimal_fields(): + """Test that Incident to_stix2_object works with only required fields.""" + incident = Incident( + name="Minimal incident", + created="2024-06-15T10:00:00Z", + ) + stix2_obj = incident.to_stix2_object() + + assert isinstance(stix2_obj, Stix2Incident) + assert stix2_obj.name == "Minimal incident" + assert stix2_obj.id == PyctiIncident.generate_id( + name="Minimal incident", created=incident.created + ) diff --git a/connectors-sdk/tests/test_models/test_infrastructure.py b/connectors-sdk/tests/test_models/test_infrastructure.py new file mode 100644 index 00000000000..11c31572c4b --- /dev/null +++ b/connectors-sdk/tests/test_models/test_infrastructure.py @@ -0,0 +1,72 @@ +import pytest +from connectors_sdk.models.base_identified_entity import BaseIdentifiedEntity +from connectors_sdk.models.infrastructure import Infrastructure +from pycti import Infrastructure as PyctiInfrastructure +from pydantic import ValidationError +from stix2.v21 import Infrastructure as Stix2Infrastructure +from stix2.v21 import KillChainPhase + + +def test_infrastructure_is_a_base_identified_entity(): + """Test that Infrastructure is a BaseIdentifiedEntity.""" + assert issubclass(Infrastructure, BaseIdentifiedEntity) + + +def test_infrastructure_class_should_not_accept_invalid_input(): + """Test that Infrastructure class should not accept invalid input.""" + input_data = { + "name": "Test infrastructure", + "invalid_key": "invalid_value", + } + with pytest.raises(ValidationError): + Infrastructure.model_validate(input_data) + + +def test_infrastructure_to_stix2_object_returns_valid_stix_object( + fake_valid_organization_author, + fake_valid_external_references, + fake_valid_tlp_markings, +): + """Test that Infrastructure to_stix2_object method returns a valid STIX2.1 Infrastructure.""" + infrastructure = Infrastructure( + name="Test infrastructure", + description="Test description", + aliases=["Test alias"], + infrastructure_types=["command-and-control"], + first_seen="2023-01-01T00:00:00Z", + last_seen="2024-01-01T00:00:00Z", + kill_chain_phases=[ + { + "chain_name": "lockheed-martin-cyber-kill-chain", + "phase_name": "actions-on-objectives", + } + ], + author=fake_valid_organization_author, + markings=fake_valid_tlp_markings, + external_references=fake_valid_external_references, + ) + stix2_obj = infrastructure.to_stix2_object() + + assert stix2_obj == Stix2Infrastructure( + id=PyctiInfrastructure.generate_id(name="Test infrastructure"), + name="Test infrastructure", + description="Test description", + aliases=["Test alias"], + infrastructure_types=["command-and-control"], + first_seen="2023-01-01T00:00:00Z", + last_seen="2024-01-01T00:00:00Z", + kill_chain_phases=[ + KillChainPhase( + kill_chain_name="lockheed-martin-cyber-kill-chain", + phase_name="actions-on-objectives", + ) + ], + created_by_ref=fake_valid_organization_author.id, + object_marking_refs=[marking.id for marking in fake_valid_tlp_markings], + external_references=[ + external_ref.to_stix2_object() + for external_ref in fake_valid_external_references + ], + created=stix2_obj.created, + modified=stix2_obj.modified, + ) diff --git a/connectors-sdk/tests/test_models/test_ipv4_address.py b/connectors-sdk/tests/test_models/test_ipv4_address.py index f4c320b2e08..c2a722dd3f7 100644 --- a/connectors-sdk/tests/test_models/test_ipv4_address.py +++ b/connectors-sdk/tests/test_models/test_ipv4_address.py @@ -1,5 +1,7 @@ import pytest +from connectors_sdk.models.autonomous_system import AutonomousSystem from connectors_sdk.models.ipv4_address import IPV4Address +from connectors_sdk.models.mac_address import MACAddress from pydantic import ValidationError from stix2.v21 import IPv4Address as Stix2IPv4Address @@ -20,9 +22,17 @@ def test_ip_v4_class_should_not_accept_invalid_input(): def test_ip_v4_address_to_stix2_object_returns_valid_stix_object(): """Test that IPV4Address to_stix2_object method returns a valid STIX2.1 IPV4Address.""" - # Given: A valid IPV4Address instance - ipv4_address = IPV4Address(value="0.0.0.0/24") # explict test with CIDR notation + # Given: A valid IPV4Address instance with resolves_to and belongs_to refs + mac_address = MACAddress(value="00:11:22:33:44:55") + autonomous_system = AutonomousSystem(number=64512) + ipv4_address = IPV4Address( + value="0.0.0.0/24", # explict test with CIDR notation + resolves_to=[mac_address], + belongs_to=[autonomous_system], + ) # When: calling to_stix2_object method stix2_obj = ipv4_address.to_stix2_object() # Then: A valid STIX2.1 IPV4Address is returned assert isinstance(stix2_obj, Stix2IPv4Address) + assert stix2_obj.resolves_to_refs == [mac_address.id] + assert stix2_obj.belongs_to_refs == [autonomous_system.id] diff --git a/connectors-sdk/tests/test_models/test_ipv6_address.py b/connectors-sdk/tests/test_models/test_ipv6_address.py index 45d3f5f122e..60d0fd9ec7d 100644 --- a/connectors-sdk/tests/test_models/test_ipv6_address.py +++ b/connectors-sdk/tests/test_models/test_ipv6_address.py @@ -1,5 +1,7 @@ import pytest +from connectors_sdk.models.autonomous_system import AutonomousSystem from connectors_sdk.models.ipv6_address import IPV6Address +from connectors_sdk.models.mac_address import MACAddress from pydantic import ValidationError from stix2.v21 import IPv6Address as Stix2IPv6Address @@ -20,9 +22,17 @@ def test_ip_v6_class_should_not_accept_invalid_input(): def test_ip_v6_address_to_stix2_object_returns_valid_stix_object(): """Test that IPV6Address to_stix2_object method returns a valid STIX2.1 IPV6Address.""" - # Given: A valid IPV6Address instance - ipv6_address = IPV6Address(value="b357:5b10:0f48:d182:0140:494c:8fe9:6eda") + # Given: A valid IPV6Address instance with resolves_to and belongs_to refs + mac_address = MACAddress(value="AA-BB-CC-DD-EE-FF") + autonomous_system = AutonomousSystem(number=64513) + ipv6_address = IPV6Address( + value="b357:5b10:0f48:d182:0140:494c:8fe9:6eda", + resolves_to=[mac_address], + belongs_to=[autonomous_system], + ) # When: calling to_stix2_object method stix2_obj = ipv6_address.to_stix2_object() # Then: A valid STIX2.1 IPV6Address is returned assert isinstance(stix2_obj, Stix2IPv6Address) + assert stix2_obj.resolves_to_refs == [mac_address.id] + assert stix2_obj.belongs_to_refs == [autonomous_system.id] diff --git a/connectors-sdk/tests/test_models/test_mac_address.py b/connectors-sdk/tests/test_models/test_mac_address.py new file mode 100644 index 00000000000..5dc09688c04 --- /dev/null +++ b/connectors-sdk/tests/test_models/test_mac_address.py @@ -0,0 +1,69 @@ +import pytest +from connectors_sdk.models.base_identified_entity import BaseIdentifiedEntity +from connectors_sdk.models.mac_address import MACAddress +from pydantic import ValidationError +from stix2.v21 import MACAddress as Stix2MACAddress + + +def test_mac_address_is_a_base_identified_entity() -> None: + """Test that MACAddress is a BaseIdentifiedEntity.""" + assert issubclass(MACAddress, BaseIdentifiedEntity) + + +def test_mac_address_class_should_not_accept_invalid_input() -> None: + """Test that MACAddress class should not accept invalid input.""" + input_data = { + "value": "00:11:22:33:44:55", + "invalid_key": "invalid_value", + } + with pytest.raises(ValidationError) as error: + MACAddress.model_validate(input_data) + + assert error.value.errors()[0]["loc"] == ("invalid_key",) + + +def test_mac_address_to_stix2_object_returns_valid_stix_object() -> None: + """Test that MACAddress to_stix2_object method returns a valid STIX2.1 object.""" + mac_address = MACAddress(value="00:11:22:33:44:55") + stix2_obj = mac_address.to_stix2_object() + + assert isinstance(stix2_obj, Stix2MACAddress) + + +def test_mac_address_to_stix2_object( + fake_valid_organization_author, + fake_valid_tlp_markings, + fake_valid_external_references, + fake_valid_associated_files, +) -> None: + """Test that MACAddress to_stix2_object method returns correct STIX2.1 object.""" + mac_address = MACAddress( + value="AA-BB-CC-DD-EE-FF", + score=65, + description="Observed suspicious endpoint identifier", + labels=["network", "endpoint"], + associated_files=fake_valid_associated_files, + create_indicator=True, + author=fake_valid_organization_author, + markings=fake_valid_tlp_markings, + external_references=fake_valid_external_references, + ) + stix_object = mac_address.to_stix2_object() + + assert stix_object == Stix2MACAddress( + value="AA-BB-CC-DD-EE-FF", + allow_custom=True, + object_marking_refs=[marking.id for marking in fake_valid_tlp_markings], + x_opencti_score=65, + x_opencti_description="Observed suspicious endpoint identifier", + x_opencti_labels=["network", "endpoint"], + x_opencti_external_references=[ + external_ref.to_stix2_object() + for external_ref in fake_valid_external_references + ], + x_opencti_created_by_ref=fake_valid_organization_author.id, + x_opencti_files=[ + file.to_stix2_object() for file in fake_valid_associated_files + ], + x_opencti_create_indicator=True, + ) diff --git a/connectors-sdk/tests/test_models/test_media_content.py b/connectors-sdk/tests/test_models/test_media_content.py new file mode 100644 index 00000000000..f42281468c1 --- /dev/null +++ b/connectors-sdk/tests/test_models/test_media_content.py @@ -0,0 +1,63 @@ +import pytest +from connectors_sdk.models.base_observable_entity import BaseObservableEntity +from connectors_sdk.models.media_content import MediaContent +from pycti import CustomObservableMediaContent +from pydantic import ValidationError + + +def test_media_content_is_a_base_observable_entity(): + """Test that MediaContent is a BaseObservableEntity.""" + assert issubclass(MediaContent, BaseObservableEntity) + + +def test_media_content_class_should_not_accept_invalid_input(): + """Test that MediaContent class should not accept invalid input.""" + input_data = { + "url": "https://example.com/post", + "invalid_key": "invalid_value", + } + with pytest.raises(ValidationError): + MediaContent.model_validate(input_data) + + +def test_media_content_to_stix2_object_returns_valid_stix_object( + fake_valid_organization_author, + fake_valid_external_references, + fake_valid_tlp_markings, +): + """Test that MediaContent to_stix2_object method returns a valid custom STIX object.""" + media_content = MediaContent( + title="Test title", + description="Test description", + content="Test body", + media_category="article", + url="https://example.com/post", + publication_date="2024-01-01T00:00:00Z", + author=fake_valid_organization_author, + markings=fake_valid_tlp_markings, + external_references=fake_valid_external_references, + score=80, + labels=["news"], + create_indicator=True, + ) + stix2_obj = media_content.to_stix2_object() + + assert stix2_obj == CustomObservableMediaContent( + url="https://example.com/post", + title="Test title", + content="Test body", + media_category="article", + publication_date="2024-01-01T00:00:00Z", + allow_custom=True, + object_marking_refs=[marking.id for marking in fake_valid_tlp_markings], + x_opencti_score=80, + x_opencti_description="Test description", + x_opencti_labels=["news"], + x_opencti_external_references=[ + external_ref.to_stix2_object() + for external_ref in fake_valid_external_references + ], + x_opencti_created_by_ref=fake_valid_organization_author.id, + x_opencti_files=[], + x_opencti_create_indicator=True, + ) diff --git a/connectors-sdk/tests/test_models/test_sighting.py b/connectors-sdk/tests/test_models/test_sighting.py new file mode 100644 index 00000000000..9b291ed49e5 --- /dev/null +++ b/connectors-sdk/tests/test_models/test_sighting.py @@ -0,0 +1,231 @@ +from datetime import datetime, timezone + +import pytest +from connectors_sdk.models import ( + ExternalReference, + Indicator, + Organization, + OrganizationAuthor, + Reference, + TLPMarking, +) +from connectors_sdk.models.base_identified_entity import BaseIdentifiedEntity +from connectors_sdk.models.sighting import Sighting +from pydantic import ValidationError +from stix2.v21 import Sighting as Stix2Sighting + + +def test_sighting_is_a_base_identified_entity() -> None: + """Test that Sighting is a BaseIdentifiedEntity.""" + # Given the Sighting class + # When checking its type + # Then it should be a subclass of BaseIdentifiedEntity + assert issubclass(Sighting, BaseIdentifiedEntity) + + +def test_sighting_class_should_not_accept_invalid_input( + fake_valid_organization_author: OrganizationAuthor, +) -> None: + """Test that Sighting class should not accept invalid input.""" + # Given: An invalid input data for Sighting + input_data = { + "sighting_of": fake_valid_organization_author, + "where_sighted": [fake_valid_organization_author], + "invalid_key": "invalid_value", + } + # When validating the sighting + # Then: It should raise a ValidationError with the expected error field + with pytest.raises(ValidationError) as error: + Sighting.model_validate(input_data) + assert error.value.errors()[0]["loc"] == ("invalid_key",) + + +def test_sighting_class_should_not_accept_empty_where_sighted( + fake_valid_organization_author: OrganizationAuthor, +) -> None: + """Test that Sighting should not accept an empty where_sighted list.""" + # Given: A Sighting with an empty where_sighted + # When validating + # Then: It should raise a ValidationError (min_length=1) + with pytest.raises(ValidationError): + Sighting( + sighting_of=fake_valid_organization_author, + where_sighted=[], + ) + + +def test_sighting_class_should_not_accept_negative_count( + fake_valid_organization_author: OrganizationAuthor, +) -> None: + """Test that Sighting should not accept a negative count.""" + # Given: A Sighting with count=-1 + # When validating + # Then: It should raise a ValidationError (ge=0) + with pytest.raises(ValidationError): + Sighting( + sighting_of=fake_valid_organization_author, + where_sighted=[fake_valid_organization_author], + count=-1, + ) + + +def test_sighting_to_stix2_object_returns_valid_stix_object( + fake_valid_organization_author: OrganizationAuthor, + fake_valid_external_references: list[ExternalReference], + fake_valid_tlp_markings: list[TLPMarking], +) -> None: + """Test that Sighting to_stix2_object method returns a valid STIX2.1 Sighting.""" + # Given: A valid Sighting instance with all optional fields + indicator = Indicator( + name="Test Indicator", + pattern="[ipv4-addr:value = '1.2.3.4']", + pattern_type="stix", + valid_from="2026-01-01T00:00:00Z", + ) + sighting = Sighting( + sighting_of=indicator, + where_sighted=[fake_valid_organization_author], + first_seen=datetime(2026, 1, 1, tzinfo=timezone.utc), + last_seen=datetime(2026, 3, 1, tzinfo=timezone.utc), + count=5, + description="Sighted 5 times in Q1 2026.", + author=fake_valid_organization_author, + markings=fake_valid_tlp_markings, + external_references=fake_valid_external_references, + ) + # When: calling to_stix2_object method + stix2_obj = sighting.to_stix2_object() + # Then: A valid STIX2.1 Sighting is returned with correct fields + assert isinstance(stix2_obj, Stix2Sighting) + assert stix2_obj.sighting_of_ref == indicator.id + assert stix2_obj.where_sighted_refs == [fake_valid_organization_author.id] + assert stix2_obj.count == 5 + assert stix2_obj.description == "Sighted 5 times in Q1 2026." + assert str(stix2_obj.first_seen) == "2026-01-01 00:00:00+00:00" + assert str(stix2_obj.last_seen) == "2026-03-01 00:00:00+00:00" + + +def test_sighting_to_stix2_object_minimal( + fake_valid_organization_author: OrganizationAuthor, +) -> None: + """Test that Sighting works with minimal required fields only.""" + # Given: A Sighting with only required fields + sighting = Sighting( + sighting_of=fake_valid_organization_author, + where_sighted=[fake_valid_organization_author], + ) + # When: calling to_stix2_object method + stix2_obj = sighting.to_stix2_object() + # Then: A valid STIX2.1 Sighting is returned + assert isinstance(stix2_obj, Stix2Sighting) + assert stix2_obj.sighting_of_ref == fake_valid_organization_author.id + + +def test_sighting_to_stix2_object_has_deterministic_id( + fake_valid_organization_author: OrganizationAuthor, +) -> None: + """Test that Sighting produces a deterministic STIX ID.""" + # Given: Two identical Sighting instances + kwargs = dict( + sighting_of=fake_valid_organization_author, + where_sighted=[fake_valid_organization_author], + first_seen=datetime(2026, 1, 1, tzinfo=timezone.utc), + last_seen=datetime(2026, 3, 1, tzinfo=timezone.utc), + ) + sighting_a = Sighting(**kwargs) + sighting_b = Sighting(**kwargs) + # When: converting both to STIX objects + stix_a = sighting_a.to_stix2_object() + stix_b = sighting_b.to_stix2_object() + # Then: They should have the same deterministic ID + assert stix_a.id == stix_b.id + assert stix_a.id.startswith("sighting--") + + +def test_sighting_to_stix2_object_with_reference_objects() -> None: + """Test that Sighting works with Reference objects for sighting_of and where_sighted.""" + # Given: Reference objects instead of concrete entities + indicator_ref = Reference(id="indicator--fe6ebd9d-1a4a-4c2b-8ae9-dac8918f52a9") + identity_ref = Reference(id="identity--ae6ebd9d-1a4a-4c2b-8ae9-dac8918f52a9") + # When: creating a Sighting with References + sighting = Sighting( + sighting_of=indicator_ref, + where_sighted=[identity_ref], + ) + stix2_obj = sighting.to_stix2_object() + # Then: The ref fields should resolve to the Reference IDs + assert isinstance(stix2_obj, Stix2Sighting) + assert stix2_obj.sighting_of_ref == indicator_ref.id + assert stix2_obj.where_sighted_refs == [identity_ref.id] + + +def test_sighting_to_stix2_object_with_multiple_where_sighted( + fake_valid_organization_author: OrganizationAuthor, +) -> None: + """Test that Sighting supports multiple where_sighted.""" + # Given: A Sighting with multiple where_sighted + org_a = Organization(name="Org A") + org_b = Organization(name="Org B") + sighting = Sighting( + sighting_of=fake_valid_organization_author, + where_sighted=[org_a, org_b], + ) + # When: calling to_stix2_object method + stix2_obj = sighting.to_stix2_object() + # Then: where_sighted_refs should contain both IDs + assert isinstance(stix2_obj, Stix2Sighting) + assert len(stix2_obj.where_sighted_refs) == 2 + assert stix2_obj.where_sighted_refs == [org_a.id, org_b.id] + + +def test_sighting_count_zero_is_valid( + fake_valid_organization_author: OrganizationAuthor, +) -> None: + """Test that count=0 is accepted (ge=0).""" + # Given: A Sighting with count=0 + sighting = Sighting( + sighting_of=fake_valid_organization_author, + where_sighted=[fake_valid_organization_author], + count=0, + ) + # When: calling to_stix2_object method + stix2_obj = sighting.to_stix2_object() + # Then: count should be 0 + assert stix2_obj.count == 0 + + +def test_sighting_with_observed_data( + fake_valid_organization_author: OrganizationAuthor, +) -> None: + """Test that Sighting supports observed_data field.""" + # Given: A Sighting with observed_data references + observed_data_ref = Reference( + id="observed-data--ae6ebd9d-1a4a-4c2b-8ae9-dac8918f52a9" + ) + sighting = Sighting( + sighting_of=fake_valid_organization_author, + where_sighted=[fake_valid_organization_author], + observed_data=[observed_data_ref], + ) + # When: calling to_stix2_object method + stix2_obj = sighting.to_stix2_object() + # Then: observed_data_refs should be set + assert isinstance(stix2_obj, Stix2Sighting) + assert stix2_obj.observed_data_refs == [observed_data_ref.id] + + +def test_sighting_with_qualification( + fake_valid_organization_author: OrganizationAuthor, +) -> None: + """Test that Sighting supports qualification field (false positive).""" + # Given: A Sighting marked as false positive + sighting = Sighting( + sighting_of=fake_valid_organization_author, + where_sighted=[fake_valid_organization_author], + qualification=True, + ) + # When: calling to_stix2_object method + stix2_obj = sighting.to_stix2_object() + # Then: x_opencti_negative should be True + assert isinstance(stix2_obj, Stix2Sighting) + assert stix2_obj.x_opencti_negative is True diff --git a/connectors-sdk/tests/test_models/test_text.py b/connectors-sdk/tests/test_models/test_text.py new file mode 100644 index 00000000000..3651e42b03d --- /dev/null +++ b/connectors-sdk/tests/test_models/test_text.py @@ -0,0 +1,113 @@ +import pytest +from connectors_sdk.models import ExternalReference, OrganizationAuthor, TLPMarking +from connectors_sdk.models.base_identified_entity import BaseIdentifiedEntity +from connectors_sdk.models.base_observable_entity import BaseObservableEntity +from connectors_sdk.models.text import Text +from pycti import CustomObservableText +from pydantic import ValidationError + + +def test_text_is_a_base_observable_entity() -> None: + """Test that Text is a BaseObservableEntity.""" + # Given the Text class + # When checking its type + # Then it should be a subclass of BaseObservableEntity + assert issubclass(Text, BaseObservableEntity) + + +def test_text_is_a_base_identified_entity() -> None: + """Test that Text is a BaseIdentifiedEntity.""" + # Given the Text class + # When checking its type + # Then it should be a subclass of BaseIdentifiedEntity + assert issubclass(Text, BaseIdentifiedEntity) + + +def test_text_class_should_not_accept_invalid_input() -> None: + """Test that Text class should not accept invalid input.""" + # Given: An invalid input data for Text + input_data = { + "value": "some text", + "invalid_key": "invalid_value", + } + # When validating the text + # Then: It should raise a ValidationError with the expected error field + with pytest.raises(ValidationError) as error: + Text.model_validate(input_data) + assert error.value.errors()[0]["loc"] == ("invalid_key",) + + +def test_text_class_should_not_accept_empty_value() -> None: + """Test that Text class should not accept an empty value.""" + # Given: An input with an empty string value + input_data = {"value": ""} + # When validating the text + # Then: It should raise a ValidationError (min_length=1) + with pytest.raises(ValidationError): + Text.model_validate(input_data) + + +def test_text_to_stix2_object_returns_valid_stix_object() -> None: + """Test that Text to_stix2_object method returns a valid CustomObservableText.""" + # Given: A valid Text instance + text = Text(value="some extracted config value") + # When: calling to_stix2_object method + stix2_obj = text.to_stix2_object() + # Then: A valid CustomObservableText is returned + assert isinstance(stix2_obj, CustomObservableText) + assert stix2_obj.value == "some extracted config value" + + +def test_text_to_stix2_object_has_deterministic_id() -> None: + """Test that Text produces a deterministic STIX ID based on value.""" + # Given: Two Text instances with the same value + text_a = Text(value="deterministic test") + text_b = Text(value="deterministic test") + # When: converting both to STIX objects + stix_a = text_a.to_stix2_object() + stix_b = text_b.to_stix2_object() + # Then: They should have the same ID + assert stix_a.id == stix_b.id + assert stix_a.id.startswith("text--") + + +def test_text_to_stix2_object_with_different_values_have_different_ids() -> None: + """Test that Text instances with different values produce different IDs.""" + # Given: Two Text instances with different values + text_a = Text(value="value one") + text_b = Text(value="value two") + # When: converting both to STIX objects + stix_a = text_a.to_stix2_object() + stix_b = text_b.to_stix2_object() + # Then: They should have different IDs + assert stix_a.id != stix_b.id + + +def test_text_to_stix2_object_with_author_and_markings( + fake_valid_organization_author: OrganizationAuthor, + fake_valid_tlp_markings: list[TLPMarking], + fake_valid_external_references: list[ExternalReference], +) -> None: + """Test that Text to_stix2_object method includes author, markings, and external references.""" + # Given: A Text instance with author, markings, and external references + text = Text( + value="config value with metadata", + author=fake_valid_organization_author, + markings=fake_valid_tlp_markings, + external_references=fake_valid_external_references, + ) + # When: calling to_stix2_object method + stix2_obj = text.to_stix2_object() + # Then: The STIX object should match with all custom properties + assert stix2_obj == CustomObservableText( + value="config value with metadata", + allow_custom=True, + object_marking_refs=[ + marking.to_stix2_object().id for marking in fake_valid_tlp_markings + ], + x_opencti_created_by_ref=fake_valid_organization_author.id, + x_opencti_external_references=[ + external_ref.to_stix2_object() + for external_ref in fake_valid_external_references + ], + ) diff --git a/connectors-sdk/tests/test_models/test_user_account.py b/connectors-sdk/tests/test_models/test_user_account.py new file mode 100644 index 00000000000..1d305676fc2 --- /dev/null +++ b/connectors-sdk/tests/test_models/test_user_account.py @@ -0,0 +1,99 @@ +from datetime import datetime, timezone + +import pytest +from connectors_sdk.models.base_identified_entity import BaseIdentifiedEntity +from connectors_sdk.models.enums import AccountType +from connectors_sdk.models.user_account import UserAccount +from pydantic import ValidationError +from stix2.v21 import UserAccount as Stix2UserAccount + + +def test_user_account_is_a_base_identified_entity() -> None: + """Test that UserAccount is a BaseIdentifiedEntity.""" + assert issubclass(UserAccount, BaseIdentifiedEntity) + + +def test_user_account_class_should_not_accept_invalid_input() -> None: + """Test that UserAccount class should not accept invalid input.""" + input_data = { + "user_id": "john.doe", + "invalid_key": "invalid_value", + } + with pytest.raises(ValidationError) as error: + UserAccount.model_validate(input_data) + assert error.value.errors()[0]["loc"] == ("invalid_key",) + + +def test_user_account_to_stix2_object_returns_valid_stix_object() -> None: + """Test that UserAccount to_stix2_object method returns a valid STIX2.1 object.""" + user_account = UserAccount(user_id="john.doe") + stix2_obj = user_account.to_stix2_object() + assert isinstance(stix2_obj, Stix2UserAccount) + + +def test_user_account_to_stix2_object( + fake_valid_organization_author, + fake_valid_tlp_markings, + fake_valid_external_references, + fake_valid_associated_files, +) -> None: + """Test that UserAccount to_stix2_object method returns correct STIX2.1 object.""" + account_created = datetime(2025, 1, 1, 8, 30, 0, tzinfo=timezone.utc) + account_expires = datetime(2026, 1, 1, 8, 30, 0, tzinfo=timezone.utc) + credential_last_changed = datetime(2025, 2, 1, 9, 0, 0, tzinfo=timezone.utc) + account_first_login = datetime(2025, 2, 2, 10, 0, 0, tzinfo=timezone.utc) + account_last_login = datetime(2025, 3, 1, 11, 0, 0, tzinfo=timezone.utc) + + user_account = UserAccount( + user_id="john.doe@example.com", + account_login="john.doe", + account_type=AccountType.WINDOWS_DOMAIN, + display_name="John Doe", + is_service_account=False, + is_privileged=True, + can_escalate_privs=True, + is_disabled=False, + account_created=account_created, + account_expires=account_expires, + credential_last_changed=credential_last_changed, + account_first_login=account_first_login, + account_last_login=account_last_login, + score=90, + description="Compromised domain account", + labels=["credential-access", "active-directory"], + associated_files=fake_valid_associated_files, + create_indicator=True, + author=fake_valid_organization_author, + markings=fake_valid_tlp_markings, + external_references=fake_valid_external_references, + ).to_stix2_object() + + assert user_account == Stix2UserAccount( + user_id="john.doe@example.com", + account_login="john.doe", + account_type="windows-domain", + display_name="John Doe", + is_service_account=False, + is_privileged=True, + can_escalate_privs=True, + is_disabled=False, + account_created=account_created, + account_expires=account_expires, + credential_last_changed=credential_last_changed, + account_first_login=account_first_login, + account_last_login=account_last_login, + allow_custom=True, + object_marking_refs=[marking.id for marking in fake_valid_tlp_markings], + x_opencti_score=90, + x_opencti_description="Compromised domain account", + x_opencti_labels=["credential-access", "active-directory"], + x_opencti_external_references=[ + external_ref.to_stix2_object() + for external_ref in fake_valid_external_references + ], + x_opencti_created_by_ref=fake_valid_organization_author.id, + x_opencti_files=[ + file.to_stix2_object() for file in fake_valid_associated_files + ], + x_opencti_create_indicator=True, + ) diff --git a/connectors-sdk/tests/test_settings/test_base_settings.py b/connectors-sdk/tests/test_settings/test_base_settings.py index f16e366a568..2d8f3f9db9c 100644 --- a/connectors-sdk/tests/test_settings/test_base_settings.py +++ b/connectors-sdk/tests/test_settings/test_base_settings.py @@ -1,11 +1,104 @@ import sys from pathlib import Path +from typing import Annotated from unittest.mock import patch import pytest -from connectors_sdk.settings.base_settings import BaseConnectorSettings, _SettingsLoader +from connectors_sdk.settings.base_settings import ( + BaseConfigModel, + BaseConnectorSettings, + _SettingsLoader, +) +from connectors_sdk.settings.deprecations import Deprecate, DeprecatedField from connectors_sdk.settings.exceptions import ConfigValidationError -from pydantic import HttpUrl +from pydantic import Field, HttpUrl + + +def test_base_config_model_should_retrieve_deprecated_fields(): + """Test that `BaseConfigModel` subclasses can retrieve deprecated fields metadata.""" + + # Given: A BaseConfigModel subclass declaring one DeprecatedField + class TestConfig(BaseConfigModel): + test_field: str = Field(default="test") + old_field: str = DeprecatedField(removal_date="2026-12-31") + + # When: The model is built + # Then: The deprecated field is tracked in model's deprecated fields + assert len(TestConfig.model_fields) == 2 + assert "old_field" in TestConfig.model_fields + assert len(TestConfig._model_deprecated_fields) == 1 + assert "old_field" in TestConfig._model_deprecated_fields + + +def test_base_config_model_should_retrieve_fields_with_deprecate_annotation(): + """Test that `BaseConfigModel` subclasses can retrieve fields with `Deprecate` metadata.""" + + # Given: A BaseConfigModel subclass with a field using Deprecate annotation + class TestConfig(BaseConfigModel): + test_field: str = Field(default="test") + old_field: Annotated[ + str, Field(description="Test field"), Deprecate(removal_date="2026-12-31") + ] + + # When: The model is built + # Then: The annotated field is tracked in model's deprecated fields + assert len(TestConfig.model_fields) == 2 + assert "old_field" in TestConfig.model_fields + assert len(TestConfig._model_deprecated_fields) == 1 + assert "old_field" in TestConfig._model_deprecated_fields + + +def test_base_config_model_should_set_default_to_none_for_deprecated_fields(): + """Test that `BaseConfigModel` subclasses set `default` to `None` for deprecated fields.""" + + # Given: A deprecated field explicitly defines a non-None default + class TestConfig(BaseConfigModel): + test_field: str = Field(default="test") + old_field: str = DeprecatedField( + default="deprecated default" # should be overwritten to None + ) + + # When: The model field definitions are built + # Then: Deprecated field defaults are normalized to None + assert TestConfig.model_fields["old_field"].default is None + assert TestConfig._model_deprecated_fields["old_field"].default is None + + +def test_base_config_model_should_disable_validate_default_for_deprecated_fields(): + """Test that `BaseConfigModel` subclasses set `validate_default` to `False` for deprecated fields.""" + + # Given: A deprecated field that would normally validate its default + class TestConfig(BaseConfigModel): + test_field: str = Field(default="test") + old_field: str = DeprecatedField( + default="deprecated default" # should be overwritten to None + ) + + # When: A model instance is created + config = TestConfig() + + # Then: Deprecated defaults do not trigger validation and resolve to None + assert config.old_field is None + + +def test_base_config_model_should_set_json_schema_extra_on_deprecated_fields(): + """Test that `BaseConfigModel` subclasses set `json_schema_extra` with deprecation info for deprecated fields.""" + + # Given: A deprecated field with replacement metadata + class TestConfig(BaseConfigModel): + test_field: str = Field(default="test") + old_field: str = DeprecatedField( + new_namespaced_var="test_field", + removal_date="2026-12-31", + ) + + # When: The model is built + # Then: Deprecation information is exposed in field's json_schema_extra + assert TestConfig.model_fields["old_field"].json_schema_extra == { + "new_namespace": None, + "new_namespaced_var": "test_field", + "removal_date": "2026-12-31", + } def test_settings_loader_should_get_connector_main_path(mock_main_path): @@ -14,8 +107,11 @@ def test_settings_loader_should_get_connector_main_path(mock_main_path): For testing purpose, a fake path is assigned to `sys.modules[__main__].__file__`. """ + # Given: The connector main module path is available + # When: The main path resolver is executed main_path = _SettingsLoader._get_connector_main_path() + # Then: The resolved main.py path matches the expected connector location assert main_path == Path("/app/src/main.py").resolve() @@ -27,8 +123,11 @@ def test_settings_loader_should_raise_when_main_module_misses_file_attribute( For testing purpose, `sys.modules[__main__].__file__` is set to `None`. """ + # Given: The __main__.__file__ attribute is missing sys.modules["__main__"].__file__ = None + # When: The main path resolver is executed + # Then: A runtime error is raised to signal invalid execution context with pytest.raises(RuntimeError): _SettingsLoader._get_connector_main_path() @@ -44,9 +143,12 @@ def test_settings_loader_should_get_legacy_config_yml_file_path( def is_file(self: Path) -> bool: return self.name == "config.yml" + # Given: Legacy config file (/src/config.yml) is present with patch("pathlib.Path.is_file", is_file): + # When: The config.yml path resolver is executed config_yml_file_path = _SettingsLoader._get_config_yml_file_path() + # Then: The legacy config.yml path is returned assert config_yml_file_path == Path("/app/src/config.yml").resolve() @@ -59,9 +161,12 @@ def test_settings_loader_should_get_config_yml_file_path(mock_main_path): def is_file(self: Path) -> bool: return self.name == "config.yml" and self.parent.name != "src" + # Given: Root config file (/config.yml) is present with patch("pathlib.Path.is_file", is_file): + # When: The config.yml path resolver is executed config_yml_file_path = _SettingsLoader._get_config_yml_file_path() + # Then: The new config.yml path is returned assert config_yml_file_path == Path("/app/config.yml").resolve() @@ -74,9 +179,12 @@ def test_settings_loader_should_get_dot_env_file_path(mock_main_path): def is_file(self: Path) -> bool: return self.name == ".env" + # Given: Root env file (/.env) is present with patch("pathlib.Path.is_file", is_file): + # When: The .env path resolver is executed dot_env_file_path = _SettingsLoader._get_dot_env_file_path() + # Then: The .env file path is returned assert dot_env_file_path == Path("/app/.env").resolve() @@ -85,9 +193,12 @@ def test_settings_loader_should_parse_config_yml_file(mock_config_yml_file_prese Test that `_SettingsLoader()` parses config vars in `config.yml`. For testing purpose, the path of `config.yml` file is `tests/test_settings/data/config.test.yml`. """ + # Given: A valid config.yml + # When: The settings loader is instantiated and dumped settings_loader = _SettingsLoader() settings_dict = settings_loader.model_dump() + # Then: Parsed nested settings match expected config.yml values assert settings_dict == { "opencti": { "url": "http://localhost:8080", @@ -109,9 +220,12 @@ def test_settings_loader_should_parse_dot_env_file(mock_dot_env_file_presence): For testing purpose, the path of `.env` file is `tests/test_settings/data/.env.test`. """ + # Given: A valid .env file + # When: The settings loader is instantiated and dumped settings_loader = _SettingsLoader() settings_dict = settings_loader.model_dump() + # Then: Parsed flat settings match expected environment variables assert settings_dict == { "opencti_url": "http://localhost:8080", "opencti_token": "changeme", @@ -123,15 +237,18 @@ def test_settings_loader_should_parse_dot_env_file(mock_dot_env_file_presence): } -def test_settings_loader_should_parse_os_environ(mock_environment): +def test_settings_loader_should_not_parse_os_environ(mock_environment): """ - Test that `_SettingsLoader()` parses env vars from `os.environ`. + Test that `_SettingsLoader()` does not parse env vars from `os.environ` (for security purposes). For testing purpose, `os.environ` is patched. """ + # Given: Valid environment variables + # When: The settings loader is instantiated and dumped settings_loader = _SettingsLoader() settings_dict = settings_loader.model_dump() + # Then: No implicit values are parsed assert settings_dict == {} @@ -144,9 +261,12 @@ def test_settings_loader_should_parse_config_yml_from_model( For testing purpose, the path of `config.yml` file is `tests/test_settings/data/config.test.yml`. """ + # Given: A model-aware loader is built for BaseConnectorSettings with config.yml fixture + # When: The loader instance parses and dumps values settings_loader = _SettingsLoader.build_loader_from_model(BaseConnectorSettings) settings_dict = settings_loader().model_dump() + # Then: Parsed nested settings expose expected OpenCTI and connector values assert settings_dict["opencti"]["url"] == "http://localhost:8080" assert settings_dict["opencti"]["token"] == "changeme" assert settings_dict["connector"]["id"] == "connector-poc--uid" @@ -162,9 +282,12 @@ def test_settings_loader_should_parse_dot_env_from_model(mock_dot_env_file_prese For testing purpose, the path of `.env` file is `tests/test_settings/data/.env.test`. """ + # Given: A model-aware loader is built for BaseConnectorSettings with .env fixture + # When: The loader instance parses and dumps values settings_loader = _SettingsLoader.build_loader_from_model(BaseConnectorSettings) settings_dict = settings_loader().model_dump() + # Then: Parsed nested settings expose expected OpenCTI and connector values assert settings_dict["opencti"]["url"] == "http://localhost:8080" assert settings_dict["opencti"]["token"] == "changeme" assert settings_dict["connector"]["id"] == "connector-poc--uid" @@ -180,9 +303,12 @@ def test_settings_loader_should_parse_os_environ_from_model(mock_environment): For testing purpose, `os.environ` is patched. """ + # Given: A model-aware loader is built for BaseConnectorSettings with patched os.environ + # When: The loader instance parses and dumps values settings_loader = _SettingsLoader.build_loader_from_model(BaseConnectorSettings) settings_dict = settings_loader().model_dump() + # Then: Parsed nested settings expose expected OpenCTI and connector values assert settings_dict["opencti"]["url"] == "http://localhost:8080" assert settings_dict["opencti"]["token"] == "changeme" assert settings_dict["connector"]["id"] == "connector-poc--uid" @@ -199,8 +325,11 @@ def test_base_connector_settings_should_validate_settings_from_config_yaml_file( For testing purpose, the path of `config.yml` file is `tests/test_settings/data/config.test.yml`. """ + # Given: Valid connector settings are provided through config.yml fixture + # When: BaseConnectorSettings is instantiated settings = BaseConnectorSettings() + # Then: Values are validated and cast to expected runtime types assert settings.opencti.url == HttpUrl("http://localhost:8080/") assert settings.opencti.token == "changeme" assert settings.connector.id == "connector-poc--uid" @@ -217,8 +346,11 @@ def test_base_connector_settings_should_validate_settings_from_dot_env_file( For testing purpose, the path of `.env` file is `tests/test_settings/data/.env.test`. """ + # Given: Valid connector settings are provided through .env fixture + # When: BaseConnectorSettings is instantiated settings = BaseConnectorSettings() + # Then: Values are validated and cast to expected runtime types assert settings.opencti.url == HttpUrl("http://localhost:8080/") assert settings.opencti.token == "changeme" assert settings.connector.id == "connector-poc--uid" @@ -235,8 +367,11 @@ def test_base_connector_settings_should_validate_settings_from_os_environ( For testing purpose, `os.environ` is patched. """ + # Given: Valid connector settings are provided through patched os.environ + # When: BaseConnectorSettings is instantiated settings = BaseConnectorSettings() + # Then: Values are validated and cast to expected runtime types assert settings.opencti.url == HttpUrl("http://localhost:8080/") assert settings.opencti.token == "changeme" assert settings.connector.id == "connector-poc--uid" @@ -247,6 +382,9 @@ def test_base_connector_settings_should_validate_settings_from_os_environ( def test_base_connector_settings_should_raise_when_missing_mandatory_env_vars(): """Test that `BaseConnectorSettings` raises a `ValidationError` when no value is provided for required fields.""" + # Given: Mandatory connector settings are absent from env vars + # When: BaseConnectorSettings is instantiated + # Then: A ConfigValidationError is raised with pytest.raises(ConfigValidationError): BaseConnectorSettings() @@ -257,9 +395,12 @@ def test_base_connector_settings_should_provide_helper_config(mock_environment): For testing purpose, `os.environ` is patched. """ + # Given: A valid BaseConnectorSettings instance built from patched environment + # When: OpenCTIConnectorHelper config dict is generated settings = BaseConnectorSettings() opencti_dict = settings.to_helper_config() + # Then: The resulting helper config dict matches expected structure and values assert opencti_dict == { "connector": { "duration_period": "PT5M", @@ -275,31 +416,35 @@ def test_base_connector_settings_should_provide_helper_config(mock_environment): } -def test_base_connector_settings_model_json_schema_uses_sanitizing_schema(): - """Test that model_json_schema uses SanitizingJsonSchema by default.""" +def test_base_connector_settings_model_json_schema_generates_the_default_json_schema(): + """Test that model_json_schema generates the default JSON schema.""" + # Given: BaseConnectorSettings uses default JSON schema generation + # When: model_json_schema is called schema = BaseConnectorSettings.model_json_schema() - # Should generate valid schema + # Then: The resulting schema contains top-level connector and opencti properties assert "$defs" in schema or "properties" in schema assert "opencti" in schema["properties"] assert "connector" in schema["properties"] -def test_base_connector_settings_flattened_json_schema(): - """Test flattened_json_schema generation.""" +def test_base_connector_settings_config_json_schema(): + """Test config_json_schema generation.""" + # Given: A connector name for config JSON schema generation + # When: config_json_schema is called schema = BaseConnectorSettings.config_json_schema(connector_name="test-connector") - # Should have flattened structure + # Then: The config JSON schema contains standard schema metadata and properties assert "$schema" in schema assert "$id" in schema assert "test-connector" in schema["$id"] assert "properties" in schema - # Should have uppercased environment variable names + # Then: Property names are uppercased assert "OPENCTI_URL" in schema["properties"] assert "OPENCTI_TOKEN" in schema["properties"] assert "CONNECTOR_NAME" in schema["properties"] - # CONNECTOR_ID should be filtered out + # Then: CONNECTOR_ID is intentionally excluded from generated properties assert "CONNECTOR_ID" not in schema["properties"] diff --git a/connectors-sdk/tests/test_settings/test_deprecation_migration.py b/connectors-sdk/tests/test_settings/test_deprecation_migration.py index 4a9ccbd07e5..1a28a51149e 100644 --- a/connectors-sdk/tests/test_settings/test_deprecation_migration.py +++ b/connectors-sdk/tests/test_settings/test_deprecation_migration.py @@ -9,7 +9,7 @@ ) from connectors_sdk.settings.deprecations import DeprecatedField from connectors_sdk.settings.exceptions import ConfigValidationError -from pydantic import Field, SkipValidation +from pydantic import Field class TestMigrateDeprecation: @@ -18,6 +18,7 @@ class TestMigrateDeprecation: def test_migrate_deprecated_variable_in_settings(self, monkeypatch): """Test variable migration during settings initialization.""" + # Given: A settings model with a deprecated field mapped to a new field class CustomConnectorConfig(BaseExternalImportConnectorConfig): old_field: str | None = DeprecatedField( deprecated="Use new_field instead", @@ -39,23 +40,56 @@ class TestSettings(BaseConnectorSettings): monkeypatch.setenv("CONNECTOR_DURATION_PERIOD", "PT5M") monkeypatch.setenv("CONNECTOR_OLD_FIELD", "old_value") + # When: TestSettings is instantiated with warnings.catch_warnings(record=True) as w: warnings.simplefilter("always") settings = TestSettings() - # Should have warnings about variable migration + # Then: A warning indicates the deprecated field migration warning_messages = [str(warning.message) for warning in w] assert any("old_field" in msg.lower() for msg in warning_messages) - # Should have migrated value + # And the deprecated value is copied into the replacement field assert settings.connector.new_field == "old_value" + def test_migrate_deprecated_variable_with_non_string_value(self, monkeypatch): + """Test that variable migration raises ValueError for non-string new_namespaced_var.""" + + # Given: A deprecated field configured with wrongly typed argument + class CustomConnectorConfig(BaseExternalImportConnectorConfig): + old_field: str | None = DeprecatedField( + deprecated="Use new_field instead", + new_namespaced_var=123, # type: ignore + ) + new_field: str = Field(default="default") + + class TestSettings(BaseConnectorSettings): + connector: CustomConnectorConfig = Field( + default_factory=CustomConnectorConfig + ) + + # Setup mandatory environment variables only + monkeypatch.setenv("OPENCTI_URL", "http://localhost:8080") + monkeypatch.setenv("OPENCTI_TOKEN", "test-token") + monkeypatch.setenv("CONNECTOR_ID", "test-id") + monkeypatch.setenv("CONNECTOR_NAME", "Test") + monkeypatch.setenv("CONNECTOR_SCOPE", "test") + monkeypatch.setenv("CONNECTOR_DURATION_PERIOD", "PT5M") + + # When: Settings initialization evaluates migration metadata + # Then: A ConfigValidationError is raised for invalid migration metadata + with pytest.raises( + ConfigValidationError, match="Error validating configuration" + ): + TestSettings() + def test_migrate_deprecated_variable_with_value_transformation(self, monkeypatch): """Test variable migration with value transformation.""" def double_value(val): return int(val) * 2 + # Given: A TestSettings model that migrates and transforms old_value into new_value class CustomConnectorConfig(BaseExternalImportConnectorConfig): old_value: str | None = DeprecatedField( deprecated="Use new_value instead", @@ -69,7 +103,7 @@ class TestSettings(BaseConnectorSettings): default_factory=CustomConnectorConfig ) - # Setup environment + # Setup environment variables with a deprecated value monkeypatch.setenv("OPENCTI_URL", "http://localhost:8080") monkeypatch.setenv("OPENCTI_TOKEN", "test-token") monkeypatch.setenv("CONNECTOR_ID", "test-id") @@ -78,26 +112,29 @@ class TestSettings(BaseConnectorSettings): monkeypatch.setenv("CONNECTOR_DURATION_PERIOD", "PT5M") monkeypatch.setenv("CONNECTOR_OLD_VALUE", "5") + # When: TestSettings is instantiated with warnings.catch_warnings(record=True): warnings.simplefilter("always") settings = TestSettings() + # Then: The migrated value is transformed by the factory assert settings.connector.new_value == 10 def test_migrate_deprecated_namespace_with_non_string_value(self, monkeypatch): """Test that namespace migration raises ValueError for non-string new_namespace.""" + # Given: A deprecated namespace configured with wrongly typed argument class CustomConnectorConfig(BaseExternalImportConnectorConfig): pass class TestSettings(BaseConnectorSettings): - connector: CustomConnectorConfig = Field( + connector: CustomConnectorConfig = DeprecatedField( default_factory=CustomConnectorConfig, deprecated=True, - json_schema_extra={"new_namespace": 123}, # Non-string value + new_namespace=123, # type: ignore ) - # Setup environment + # Setup mandatory environment variables only monkeypatch.setenv("OPENCTI_URL", "http://localhost:8080") monkeypatch.setenv("OPENCTI_TOKEN", "test-token") monkeypatch.setenv("CONNECTOR_ID", "test-id") @@ -105,31 +142,31 @@ class TestSettings(BaseConnectorSettings): monkeypatch.setenv("CONNECTOR_SCOPE", "test") monkeypatch.setenv("CONNECTOR_DURATION_PERIOD", "PT5M") - # Should raise a ConfigValidationError due to non-string new_namespace + # When: TestSettings initialization evaluates namespace migration metadata + # Then: A ConfigValidationError is raised for invalid migration metadata with pytest.raises( ConfigValidationError, match="Error validating configuration" ): TestSettings() - def test_error_when_namespace_has_new_namespaced_var_in_legacy_field( + def test_error_when_namespace_has_new_namespaced_var_in_deprecated_field( self, monkeypatch ): """Test that ValueError is raised when a deprecated namespace has new_namespaced_var.""" + # Given: A deprecated namespace incorrectly defining new_namespaced_var class DeprecatedConfig(BaseExternalImportConnectorConfig): pass class TestSettings(BaseConnectorSettings): - old_connector: DeprecatedConfig = Field( + old_connector: DeprecatedConfig = DeprecatedField( default_factory=DeprecatedConfig, deprecated="Use new_connector", - json_schema_extra={ - "new_namespace": "new_connector", - "new_namespaced_var": "renamed", # This should trigger ValueError - }, + new_namespace="new_connector", + new_namespaced_var="renamed", # This should trigger ValueError ) - # Setup environment + # Setup environment variables for the deprecated namespace monkeypatch.setenv("OPENCTI_URL", "http://localhost:8080") monkeypatch.setenv("OPENCTI_TOKEN", "test-token") monkeypatch.setenv("OLD_CONNECTOR_ID", "test-id") @@ -137,7 +174,8 @@ class TestSettings(BaseConnectorSettings): monkeypatch.setenv("OLD_CONNECTOR_SCOPE", "test") monkeypatch.setenv("OLD_CONNECTOR_DURATION_PERIOD", "PT5M") - # This should raise during initialization wrapped in ConfigValidationError + # When: TestSettings initialization validates deprecated namespace migration + # Then: A ConfigValidationError is raised for incompatible metadata combination with pytest.raises( ConfigValidationError, match="Error validating configuration" ): @@ -146,6 +184,7 @@ class TestSettings(BaseConnectorSettings): def test_migrate_with_nested_field_metadata(self, monkeypatch): """Test migration with nested field-level new_namespace metadata.""" + # Given: A deprecated field configured to migrate into another namespace class CustomConnectorConfig(BaseExternalImportConnectorConfig): special_field: str | None = DeprecatedField( deprecated="Moved to other_namespace", @@ -159,7 +198,7 @@ class TestSettings(BaseConnectorSettings): ) other_namespace: dict = Field(default_factory=dict) - # Setup environment + # Setup environment variables with the deprecated field in connector namespace monkeypatch.setenv("OPENCTI_URL", "http://localhost:8080") monkeypatch.setenv("OPENCTI_TOKEN", "test-token") monkeypatch.setenv("CONNECTOR_ID", "test-id") @@ -168,17 +207,19 @@ class TestSettings(BaseConnectorSettings): monkeypatch.setenv("CONNECTOR_DURATION_PERIOD", "PT5M") monkeypatch.setenv("CONNECTOR_SPECIAL_FIELD", "special_value") + # When: TestSettings is instantiated with warnings.catch_warnings(record=True) as w: warnings.simplefilter("always") TestSettings() - # Should have warnings about cross-namespace migration + # Then: A warning indicates cross-namespace field migration warning_messages = [str(warning.message) for warning in w] assert any("special_field" in msg.lower() for msg in warning_messages) def test_sub_field_migration_within_namespace(self, monkeypatch): """Test that sub-field migration works correctly within a namespace.""" + # Given: A connector config with a deprecated field class CustomConnectorConfig(BaseExternalImportConnectorConfig): old_field: str | None = DeprecatedField( deprecated="Use new_field", @@ -191,7 +232,7 @@ class TestSettings(BaseConnectorSettings): default_factory=CustomConnectorConfig ) - # Setup environment + # Setup environment variables with only the deprecated field monkeypatch.setenv("OPENCTI_URL", "http://localhost:8080") monkeypatch.setenv("OPENCTI_TOKEN", "test-token") monkeypatch.setenv("CONNECTOR_ID", "test-id") @@ -200,26 +241,28 @@ class TestSettings(BaseConnectorSettings): monkeypatch.setenv("CONNECTOR_DURATION_PERIOD", "PT5M") monkeypatch.setenv("CONNECTOR_OLD_FIELD", "migrated_value") + # When: TestSettings is instantiated with warning capture enabled with warnings.catch_warnings(record=True) as w: warnings.simplefilter("always") settings = TestSettings() - # Should have warnings about field migration + # Then: A warning indicates in-namespace field migration warning_messages = [str(warning.message) for warning in w] assert any("old_field" in msg.lower() for msg in warning_messages) - # Value should be migrated + # And the deprecated field value is assigned to the new field assert settings.connector.new_field == "migrated_value" def test_migrate_entire_namespace(self, monkeypatch): """Test that an entire namespace with all its fields is migrated.""" + # Given: A deprecated namespace configured to migrate into connector namespace class CustomConnectorConfig(BaseExternalImportConnectorConfig): custom_field: str = Field(default="default") api_key: str = Field(default="key") class TestSettings(BaseConnectorSettings): - old_connector: SkipValidation[CustomConnectorConfig] = DeprecatedField( + old_connector: CustomConnectorConfig = DeprecatedField( deprecated="Use connector namespace instead", new_namespace="connector", ) @@ -227,7 +270,7 @@ class TestSettings(BaseConnectorSettings): default_factory=CustomConnectorConfig ) - # Setup environment with only old_connector variables + # Setup environment variables with both old namespace values and new namespace values monkeypatch.setenv("OPENCTI_URL", "http://localhost:8080") monkeypatch.setenv("OPENCTI_TOKEN", "test-token") monkeypatch.setenv("OLD_CONNECTOR_ID", "old-id") @@ -236,24 +279,66 @@ class TestSettings(BaseConnectorSettings): monkeypatch.setenv("OLD_CONNECTOR_DURATION_PERIOD", "PT10M") monkeypatch.setenv("OLD_CONNECTOR_CUSTOM_FIELD", "migrated_custom") monkeypatch.setenv("OLD_CONNECTOR_API_KEY", "migrated_key") - # Provide required but different fields for connector - old values should be used monkeypatch.setenv("CONNECTOR_ID", "new-id") monkeypatch.setenv("CONNECTOR_NAME", "New Name") monkeypatch.setenv("CONNECTOR_SCOPE", "new-scope") + # When: TestSettings is instantiated with warnings.catch_warnings(record=True) as w: warnings.simplefilter("always") settings = TestSettings() - # Should have warnings about namespace migration + # Then: A warning indicates namespace-level migration warning_messages = [str(warning.message) for warning in w] assert any("old_connector" in msg.lower() for msg in warning_messages) - # Fields from new namespace take precedence when both exist - # (migration warns but doesn't override) + # Then: Existing new-namespace values take precedence over migrated duplicates assert settings.connector.id == "new-id" assert settings.connector.name == "New Name" assert settings.connector.scope == ["new-scope"] # scope is a list - # But fields that don't exist in new namespace are migrated + # Then: Missing new-namespace fields are filled from migrated old namespace values assert settings.connector.custom_field == "migrated_custom" assert settings.connector.api_key == "migrated_key" + + def test_migrate_both_namespace_and_field(self, monkeypatch): + """Test that both namespace and field-level migration can occur together.""" + + # Given: A config supporting both namespace-level and field-level deprecation migration + class CustomConnectorConfig(BaseExternalImportConnectorConfig): + new_field: str = Field(default="default") + old_field: str | None = DeprecatedField( + deprecated="Use new_field instead", + new_namespace="connector", + new_namespaced_var="new_field", + ) + + class TestSettings(BaseConnectorSettings): + connector: CustomConnectorConfig = Field( + default_factory=CustomConnectorConfig + ) + old_connector: CustomConnectorConfig = DeprecatedField( + deprecated="Use connector namespace instead", + new_namespace="connector", + ) + + # Setup environment variables with only deprecated namespace and field values + monkeypatch.setenv("OPENCTI_URL", "http://localhost:8080") + monkeypatch.setenv("OPENCTI_TOKEN", "test-token") + monkeypatch.setenv("OLD_CONNECTOR_ID", "old-id") + monkeypatch.setenv("OLD_CONNECTOR_NAME", "Old Name") + monkeypatch.setenv("OLD_CONNECTOR_SCOPE", "old-scope") + monkeypatch.setenv("OLD_CONNECTOR_DURATION_PERIOD", "PT10M") + monkeypatch.setenv("OLD_CONNECTOR_OLD_FIELD", "migrated_value") + + # When: TestSettings is instantiated + with warnings.catch_warnings(record=True) as w: + warnings.simplefilter("always") + settings = TestSettings() + + # Then: Warnings indicate both namespace and field-level migrations + warning_messages = [str(warning.message) for warning in w] + assert any("old_connector" in msg.lower() for msg in warning_messages) + assert any("old_field" in msg.lower() for msg in warning_messages) + + # And the deprecated field value is migrated to connector.new_field + assert settings.connector.new_field == "migrated_value" diff --git a/connectors-sdk/tests/test_settings/test_deprecations.py b/connectors-sdk/tests/test_settings/test_deprecations.py index f47b347c285..b41c4a0d698 100644 --- a/connectors-sdk/tests/test_settings/test_deprecations.py +++ b/connectors-sdk/tests/test_settings/test_deprecations.py @@ -4,6 +4,7 @@ import pytest from connectors_sdk.settings.deprecations import ( + Deprecate, DeprecatedField, migrate_deprecated_namespace, migrate_deprecated_variable, @@ -16,106 +17,126 @@ class TestMigrateDeprecatedNamespace: def test_migrate_with_empty_data(self): """Test migration with empty data dict.""" + # Given: An empty settings payload data: dict = {} + + # When: A deprecated namespace migration is requested migrate_deprecated_namespace(data, "old_ns", "new_ns") + + # Then: The payload remains unchanged assert data == {} def test_migrate_with_none_data(self): """Test migration with None data.""" + # Given: A missing settings payload data = None + + # When: A deprecated namespace migration is requested migrate_deprecated_namespace(data, "old_ns", "new_ns") # type: ignore + + # Then: The payload remains None assert data is None def test_migrate_basic_namespace(self): """Test basic namespace migration.""" + # Given: Old namespace values and an empty target namespace data = { "old_namespace": {"key1": "value1", "key2": "value2"}, "new_namespace": {}, } + # When: The old namespace is migrated to the new namespace with warnings.catch_warnings(record=True) as w: warnings.simplefilter("always") migrate_deprecated_namespace(data, "old_namespace", "new_namespace") - # Check warnings + # Then: A warning is emitted for each migrated key assert len(w) == 2 assert "Deprecated setting 'old_namespace.key1'" in str(w[0].message) assert "Migrating to 'new_namespace.key1'" in str(w[0].message) assert "Deprecated setting 'old_namespace.key2'" in str(w[1].message) - # Check migration + # Then: Old namespace is removed and values are present in the new namespace assert "old_namespace" not in data assert data["new_namespace"] == {"key1": "value1", "key2": "value2"} def test_migrate_with_existing_keys_in_new_namespace(self): """Test migration when keys already exist in new namespace.""" + # Given: Both old and new namespaces define the same key data = { "old_namespace": {"key1": "old_value"}, "new_namespace": {"key1": "new_value"}, } + # When: Namespace migration is performed with warnings.catch_warnings(record=True) as w: warnings.simplefilter("always") migrate_deprecated_namespace(data, "old_namespace", "new_namespace") - # Should warn about using only new value + # Then: A warning indicates that the new namespace value is kept assert len(w) == 1 assert "Using only 'new_namespace.key1'" in str(w[0].message) - # New value should be preserved + # And existing new namespace values are preserved assert data["new_namespace"]["key1"] == "new_value" assert "old_namespace" not in data def test_migrate_when_new_namespace_extends_old(self): """Test migration when new namespace extends old (e.g., 'settings' -> 'settings_good').""" + # Given: An old namespace containing one key that belongs to the new namespace prefix data = { "settings": {"good_api_key": "secret1", "other_key": "value1"}, "settings_good": {}, } + # When: Namespace migration is performed with warnings.catch_warnings(record=True) as w: warnings.simplefilter("always") migrate_deprecated_namespace(data, "settings", "settings_good") - # Should not migrate 'good_api_key' as it belongs to new namespace + # Then: Only eligible keys are warned and migrated assert len(w) == 1 assert "other_key" in str(w[0].message) - # Only other_key should be migrated + # And only non-overlapping keys are migrated into the new namespace assert data["settings_good"] == {"other_key": "value1"} assert "settings" not in data def test_migrate_when_old_namespace_extends_new(self): """Test migration when old namespace extends new (e.g., 'settings_bad' -> 'settings').""" + # Given: Old namespace keys and new namespace keys with old prefix artifacts data = { "settings_bad": {"api_key": "secret1", "bad_other_key": "value1"}, "settings": {"bad_api_key": "secret2"}, } + # When: Namespace migration is performed with warnings.catch_warnings(record=True) as w: warnings.simplefilter("always") migrate_deprecated_namespace(data, "settings_bad", "settings") - # Should migrate and cleanup wrong prefixed keys + # Then: Migration emits at least one warning assert len(w) >= 1 - # Check migration and cleanup + # And deprecated namespace is removed and bad prefixed keys are cleaned up assert "settings_bad" not in data assert data["settings"]["api_key"] == "secret1" assert "bad_api_key" not in data["settings"] def test_migrate_with_missing_old_namespace(self): """Test migration when old namespace doesn't exist.""" + # Given: Data without the deprecated namespace data = {"new_namespace": {"existing": "value"}} + # When: Namespace migration is requested with warnings.catch_warnings(record=True) as w: warnings.simplefilter("always") migrate_deprecated_namespace(data, "old_namespace", "new_namespace") - # Should not warn + # Then: No warning is emitted assert len(w) == 0 - # Should not change data + # And data remains unchanged assert data == {"new_namespace": {"existing": "value"}} @@ -124,164 +145,216 @@ class TestMigrateDeprecatedVariable: def test_migrate_with_empty_data(self): """Test migration with empty data dict.""" + # Given: An empty settings payload data: dict = {} + + # When: A deprecated variable migration is requested migrate_deprecated_variable( data, "old_var", "new_var", "current_namespace", "new_namespace" ) + + # Then: The payload remains unchanged assert data == {} def test_migrate_with_none_data(self): """Test migration with None data.""" + # Given: A missing settings payload data = None + + # When: A deprecated variable migration is requested migrate_deprecated_variable( data, "old_var", "new_var", "current_namespace", "new_namespace" # type: ignore ) + + # Then: The payload remains None assert data is None def test_migrate_basic_variable(self): """Test basic variable migration within same namespace.""" + # Given: A namespace containing only a deprecated variable data = { "connector": {"old_var": "old_value"}, } + # When: The deprecated variable is migrated to its replacement with warnings.catch_warnings(record=True) as w: warnings.simplefilter("always") migrate_deprecated_variable(data, "old_var", "new_var", "connector", None) - # Check warnings + # Then: A migration warning is emitted assert len(w) == 1 assert "Deprecated setting 'connector.old_var'" in str(w[0].message) assert "Migrating to 'connector.new_var'" in str(w[0].message) - # Check migration + # And the old variable is removed and the new variable receives the value assert "old_var" not in data["connector"] assert data["connector"]["new_var"] == "old_value" def test_migrate_variable_to_different_namespace(self): """Test variable migration to different namespace.""" + # Given: A deprecated variable in one namespace and an empty target namespace data = {"old_namespace": {"old_var": "value"}, "new_namespace": {}} + # When: The variable is migrated across namespaces with warnings.catch_warnings(record=True) as w: warnings.simplefilter("always") migrate_deprecated_variable( data, "old_var", "new_var", "old_namespace", "new_namespace" ) - # Check warnings + # Then: Warning message includes old and new fully-qualified variable names assert len(w) == 1 assert "old_namespace.old_var" in str(w[0].message) assert "new_namespace.new_var" in str(w[0].message) - # Check migration + # And value is removed from old namespace and added to new namespace assert "old_var" not in data["old_namespace"] assert data["new_namespace"]["new_var"] == "value" def test_migrate_with_existing_new_variable(self): """Test migration when new variable already exists.""" + # Given: Both deprecated and replacement variables already exist data = { "connector": {"old_var": "old_value", "new_var": "new_value"}, } + # When: Variable migration is performed with warnings.catch_warnings(record=True) as w: warnings.simplefilter("always") migrate_deprecated_variable(data, "old_var", "new_var", "connector", None) - # Should warn about using only new value + # Then: Warning indicates only the replacement variable is used assert len(w) == 1 assert "Using only 'connector.new_var'" in str(w[0].message) - # New value should be preserved + # And existing replacement value is preserved and deprecated variable removed assert data["connector"]["new_var"] == "new_value" assert "old_var" not in data["connector"] def test_migrate_with_value_transformation(self): """Test migration with value transformation function.""" + # Given: A deprecated string variable and a transformation function data = {"connector": {"old_var": "5"}} def new_value_factory(val): return int(val) * 2 + # When: Migration is performed with new_value_factory with warnings.catch_warnings(record=True): warnings.simplefilter("always") migrate_deprecated_variable( data, "old_var", "new_var", "connector", None, new_value_factory ) - # Check value transformation + # Then: The replacement variable contains the transformed value assert data["connector"]["new_var"] == 10 def test_migrate_with_missing_old_variable(self): """Test migration when old variable doesn't exist.""" + # Given: A namespace that does not contain the deprecated variable data = {"connector": {"other_var": "value"}} + # When: Variable migration is requested with warnings.catch_warnings(record=True) as w: warnings.simplefilter("always") migrate_deprecated_variable(data, "old_var", "new_var", "connector", None) - # Should not warn + # Then: No warning is emitted assert len(w) == 0 - # Should not change data + # And data remains unchanged assert data == {"connector": {"other_var": "value"}} def test_migrate_with_missing_namespace(self): """Test migration when namespace doesn't exist in data.""" + # Given: An empty payload with no target namespace data: dict = {} + # When: Variable migration is requested with warnings.catch_warnings(record=True) as w: warnings.simplefilter("always") migrate_deprecated_variable(data, "old_var", "new_var", "connector", None) - # Should not warn + # Then: No warning is emitted assert len(w) == 0 - # Should not add namespace + # And no namespace is created assert data == {} class TestDeprecatedField: """Test DeprecatedField factory function.""" + def get_field_deprecate_annotation(self, field: FieldInfo) -> Deprecate | None: + """Helper method to get Deprecate annotation from FieldInfo.""" + return next( + (meta for meta in field.metadata if isinstance(meta, Deprecate)), None + ) + def test_deprecated_field_with_deprecation(self): """Test DeprecatedField creates FieldInfo with deprecation.""" + # Given: A deprecation message for a deprecated field + # When: The deprecated field is created with the deprecation message field = DeprecatedField(deprecated="Use new_field instead") + # Then: Field metadata includes deprecation information assert isinstance(field, FieldInfo) assert field.deprecated == "Use new_field instead" - assert field.default is None + # And a Deprecate annotation is present in the field metadata + assert self.get_field_deprecate_annotation(field) is not None def test_deprecated_field_with_boolean_deprecation(self): """Test DeprecatedField with boolean deprecation flag.""" + # Given: A deprecetation boolean flag for a deprecated field + # When: The deprecated field is created with the boolean flag field = DeprecatedField(deprecated=True) + # Then: Field metadata includes deprecation flag assert isinstance(field, FieldInfo) assert field.deprecated is True + # And a Deprecate annotation is present in the field metadata + assert self.get_field_deprecate_annotation(field) is not None def test_deprecated_field_with_new_namespace(self): """Test DeprecatedField with new_namespace metadata.""" + # Given: A new namespace for a deprecated field + # When: The deprecated field is created with the new_namespace argument field = DeprecatedField( deprecated="Moved to new_namespace", new_namespace="new_namespace" ) - assert field.json_schema_extra["new_namespace"] == "new_namespace" # type: ignore + # Then: Deprecate annotation exposes new_namespace value + deprecate_annotation = self.get_field_deprecate_annotation(field) + assert deprecate_annotation is not None + assert deprecate_annotation.new_namespace == "new_namespace" def test_deprecated_field_with_new_namespaced_var(self): """Test DeprecatedField with new_namespaced_var metadata.""" + # Given: A new namespaced variable name for a deprecated field + # When: The deprecated field is created with the new_namespaced_var argument field = DeprecatedField( deprecated="Renamed to new_var", new_namespaced_var="new_var" ) - assert field.json_schema_extra["new_namespaced_var"] == "new_var" # type: ignore + # Then: Deprecate annotation exposes new_namespaced_var value + deprecate_annotation = self.get_field_deprecate_annotation(field) + assert deprecate_annotation is not None + assert deprecate_annotation.new_namespaced_var == "new_var" def test_deprecated_field_with_new_value_factory(self): """Test DeprecatedField with new_value_factory function.""" + # Given: A function to transform the deprecated value for a deprecated field def transformer(val): return val * 2 + # When: The deprecated field is created with the new_value_factory argument field = DeprecatedField(deprecated=True, new_value_factory=transformer) - assert field.json_schema_extra["new_value_factory"] == transformer # type: ignore + # Then: Deprecate annotation exposes the provided factory function + deprecate_annotation = self.get_field_deprecate_annotation(field) + assert deprecate_annotation is not None + assert deprecate_annotation.new_value_factory == transformer def test_deprecated_field_with_all_parameters(self): """Test DeprecatedField with all parameters.""" @@ -289,6 +362,8 @@ def test_deprecated_field_with_all_parameters(self): def transformer(val): return val.upper() + # Given: All migration metadata for a deprecated field + # When: The deprecated field is created with all metadata arguments field = DeprecatedField( deprecated="Complete migration", new_namespace="new_ns", @@ -296,47 +371,54 @@ def transformer(val): new_value_factory=transformer, ) + # Then: Field and Deprecate annotation contain all provided metadata assert field.deprecated == "Complete migration" - assert field.json_schema_extra["new_namespace"] == "new_ns" # type: ignore - assert field.json_schema_extra["new_namespaced_var"] == "new_var" # type: ignore - assert field.json_schema_extra["new_value_factory"] == transformer # type: ignore - - def test_deprecated_field_default_none(self): - """Test DeprecatedField always sets default to None.""" - field = DeprecatedField(deprecated=True) - - assert field.default is None + deprecate_annotation = self.get_field_deprecate_annotation(field) + assert deprecate_annotation is not None + assert deprecate_annotation.new_namespace == "new_ns" + assert deprecate_annotation.new_namespaced_var == "new_var" + assert deprecate_annotation.new_value_factory == transformer def test_deprecated_field_raises_when_deprecated_is_false(self): """Test DeprecatedField raises ValueError when deprecated is False.""" + # Given: An invalid DeprecatedField declaration with deprecated=False + # When: DeprecatedField is created + # Then: A ValueError is raised with pytest.raises(ValueError, match="DeprecatedField must have"): - DeprecatedField(deprecated=False) + DeprecatedField(deprecated=False) # type: ignore def test_deprecated_field_with_removal_date(self): """Test DeprecatedField with removal_date.""" + # Given: A removal date for a deprecated field + # When: The deprecated field is created with the removal_date argument field = DeprecatedField( deprecated="This field is deprecated", new_namespaced_var="new_field", removal_date="2026-12-31", ) - assert field.json_schema_extra["removal_date"] == "2026-12-31" # type: ignore - assert field.json_schema_extra["new_namespaced_var"] == "new_field" # type: ignore + # Then: Deprecate annotation includes removal date metadata + deprecate_annotation = self.get_field_deprecate_annotation(field) + assert deprecate_annotation is not None + assert deprecate_annotation.removal_date == "2026-12-31" + assert deprecate_annotation.new_namespaced_var == "new_field" def test_migrate_namespace_with_removal_date(self): """Test migrate_deprecated_namespace includes removal_date in warning.""" + # Given: A settings payload with deprecated namespace data = { "old_settings": {"key1": "value1", "key2": "value2"}, "new_settings": {}, } + # When: Namespace migration is performed with removal_date argument with warnings.catch_warnings(record=True) as w: warnings.simplefilter("always") migrate_deprecated_namespace( data, "old_settings", "new_settings", removal_date="2026-12-31" ) - # Should have warnings with removal date + # Then: Warning messages include the removal date and migrated keys assert len(w) == 2 warning_messages = [str(warning.message) for warning in w] assert any("2026-12-31" in msg for msg in warning_messages) @@ -344,10 +426,12 @@ def test_migrate_namespace_with_removal_date(self): def test_migrate_variable_with_removal_date(self): """Test migrate_deprecated_variable includes removal_date in warning.""" + # Given: A settings payload with a deprecated namespaced variable data = { "settings": {"old_var": "value", "other": "data"}, } + # When: Variable migration is performed with removal_date argument with warnings.catch_warnings(record=True) as w: warnings.simplefilter("always") migrate_deprecated_variable( @@ -358,7 +442,7 @@ def test_migrate_variable_with_removal_date(self): removal_date="2026-06-30", ) - # Should have warning with removal date + # Then: The warning message includes removal date and migration details assert len(w) == 1 warning_msg = str(w[0].message) assert "2026-06-30" in warning_msg diff --git a/connectors-sdk/tests/test_settings/test_json_schema.py b/connectors-sdk/tests/test_settings/test_json_schema.py index d44ac2e6d21..97829d14cd4 100644 --- a/connectors-sdk/tests/test_settings/test_json_schema.py +++ b/connectors-sdk/tests/test_settings/test_json_schema.py @@ -3,112 +3,10 @@ import pytest from connectors_sdk.settings.json_schema_generator import ( ConnectorConfigJsonSchemaGenerator, - SanitizedJsonSchemaGenerator, ) from pydantic import BaseModel, Field -class TestSanitizingJsonSchema: - """Test SanitizingJsonSchema class.""" - - def test_removes_new_value_factory_from_metadata(self): - """Test that new_value_factory function is removed from schema metadata.""" - - class TestModel(BaseModel): - field: str = Field( - default="test", - json_schema_extra={"new_value_factory": lambda x: x.upper()}, - ) - - schema = TestModel.model_json_schema( - schema_generator=SanitizedJsonSchemaGenerator - ) - - # Check that new_value_factory is not in the generated schema - properties = schema["properties"] - assert "new_value_factory" not in str(properties) - - def test_preserves_other_metadata(self): - """Test that other metadata is preserved.""" - - class TestModel(BaseModel): - field: str = Field( - default="test", - json_schema_extra={ - "new_namespace": "ns", - "new_namespaced_var": "var", - "new_value_factory": lambda x: x, - }, - ) - - schema = TestModel.model_json_schema( - schema_generator=SanitizedJsonSchemaGenerator - ) - - # Other metadata should be preserved - assert "new_namespace" in str(schema) - assert "new_namespaced_var" in str(schema) - - def test_handles_schema_without_metadata(self): - """Test handling schemas without metadata.""" - - class TestModel(BaseModel): - field: str = "test" - - schema = TestModel.model_json_schema( - schema_generator=SanitizedJsonSchemaGenerator - ) - - assert "properties" in schema - assert "field" in schema["properties"] - - def test_handles_nested_models(self): - """Test handling nested models.""" - - class NestedModel(BaseModel): - nested_field: str = Field( - default="test", json_schema_extra={"new_value_factory": lambda x: x} - ) - - class TestModel(BaseModel): - nested: NestedModel = Field(default_factory=NestedModel) - - schema = TestModel.model_json_schema( - schema_generator=SanitizedJsonSchemaGenerator - ) - - # Should not contain new_value_factory function - assert "new_value_factory" not in str(schema) - - def test_generate_inner_with_function_in_metadata(self): - """Test that generate_inner properly sanitizes metadata with functions.""" - - class TestModel(BaseModel): - field: str = Field( - default="test", - deprecated="Use new_field", - json_schema_extra={ - "new_namespaced_var": "new_field", - "new_value_factory": lambda x: x.upper(), - }, - ) - - schema = TestModel.model_json_schema( - schema_generator=SanitizedJsonSchemaGenerator - ) - - # Check that schema is generated - assert "properties" in schema - assert "field" in schema["properties"] - - # new_value_factory should not appear in the string representation - schema_str = str(schema) - assert "new_value_factory" not in schema_str - - # But other metadata should be preserved - assert "new_namespaced_var" in schema_str or "deprecated" in schema_str - - class TestConnectorConfigJsonSchemaGenerator: """Test ConnectorConfigJsonSchemaGenerator class.""" diff --git a/connectors-sdk/tests/tests_states/conftest.py b/connectors-sdk/tests/tests_states/conftest.py new file mode 100644 index 00000000000..01f16b5e879 --- /dev/null +++ b/connectors-sdk/tests/tests_states/conftest.py @@ -0,0 +1,25 @@ +from unittest.mock import MagicMock + +import pytest +from pycti import OpenCTIConnectorHelper + + +@pytest.fixture +def mock_opencti_connector_helper() -> MagicMock: + """Mock all heavy dependencies of OpenCTIConnectorHelper, typically API calls to OpenCTI.""" + + mock_helper = MagicMock(spec=OpenCTIConnectorHelper) + mock_helper.killProgramHook = MagicMock() + mock_helper.sched = MagicMock() + mock_helper.ConnectorInfo = MagicMock() + mock_helper.OpenCTIApiClient = MagicMock() + mock_helper.OpenCTIConnector = MagicMock() + mock_helper.OpenCTIMetricHandler = MagicMock() + mock_helper.PingAlive = MagicMock() + + # Mock config vars + mock_helper.connect_name = "Test Connector" + mock_helper.connect_id = "test_connector_id" + mock_helper.log_level = "debug" + + return mock_helper diff --git a/connectors-sdk/tests/tests_states/test_base_state.py b/connectors-sdk/tests/tests_states/test_base_state.py new file mode 100644 index 00000000000..1198d83959d --- /dev/null +++ b/connectors-sdk/tests/tests_states/test_base_state.py @@ -0,0 +1,182 @@ +"""Unit tests for `BaseConnectorState` shared behavior.""" + +from datetime import datetime, timezone + +import pytest +from connectors_sdk.states._base_state import BaseConnectorState +from pydantic import BaseModel, ValidationError + + +class DummyConnectorState(BaseConnectorState): + """Concrete test model used to validate base state behaviors.""" + + last_run: datetime | None = None + test_field: str | None = None + + +@pytest.fixture +def dummy_state(mock_opencti_connector_helper) -> DummyConnectorState: + """Provide a `BaseConnectorState` subclass attached to a mocked helper.""" + state = DummyConnectorState() + state.attach_opencti_connector_helper(mock_opencti_connector_helper) + return state + + +def test_base_connector_state_is_pydantic_model() -> None: + """Test that `BaseConnectorState` is a Pydantic model.""" + assert issubclass(BaseConnectorState, BaseModel) + + +def test_base_connector_state_attach_opencti_connector_helper_initializes_client( + dummy_state: DummyConnectorState, +) -> None: + """Test that attaching helper initializes the private state client.""" + assert dummy_state._client is not None + + +def test_base_connector_state_load_requires_helper() -> None: + """Test that loading without attached helper raises runtime error.""" + state = DummyConnectorState() + with pytest.raises(RuntimeError, match="attach_opencti_connector_helper"): + state.load() + + +def test_base_connector_state_save_requires_helper() -> None: + """Test that saving without attached helper raises runtime error.""" + state = DummyConnectorState() + with pytest.raises(RuntimeError, match="attach_opencti_connector_helper"): + state.save() + + +def test_base_connector_state_accepts_valid_assignment( + dummy_state: DummyConnectorState, +) -> None: + """Test that assignment uses model casting and validation.""" + dummy_state.last_run = "2024-01-01T00:00:00+00:00" # type: ignore[assignment] + assert dummy_state.last_run == datetime(2024, 1, 1, tzinfo=timezone.utc) + + +def test_base_connector_state_rejects_invalid_assignment( + dummy_state: DummyConnectorState, +) -> None: + """Test that invalid assignment is rejected by Pydantic.""" + with pytest.raises(ValidationError): + dummy_state.last_run = "not a datetime" # type: ignore[assignment] + + +def test_base_connector_state_loads_state( + dummy_state: DummyConnectorState, + mock_opencti_connector_helper, +) -> None: + """Test that state values are loaded from OpenCTI.""" + mock_opencti_connector_helper.get_state.return_value = { + "last_run": "2024-01-01T00:00:00+00:00", + "test_field": "test", + } + + dummy_state.load() + + mock_opencti_connector_helper.get_state.assert_called_once() + assert dummy_state.last_run == datetime(2024, 1, 1, tzinfo=timezone.utc) + assert dummy_state.test_field == "test" + + +def test_base_connector_state_load_with_force_overwrites_local_changes( + dummy_state: DummyConnectorState, + mock_opencti_connector_helper, +) -> None: + """Test that force-loading bypasses unsaved changes protection.""" + mock_opencti_connector_helper.get_state.return_value = { + "last_run": "2024-01-01T00:00:00+00:00", + "test_field": "test", + } + + dummy_state.load() + dummy_state.last_run = datetime(2024, 1, 2, tzinfo=timezone.utc) + dummy_state.test_field = "test2" + mock_opencti_connector_helper.get_state.reset_mock() + + dummy_state.load(force=True) + + mock_opencti_connector_helper.get_state.assert_called_once() + assert dummy_state.last_run == datetime(2024, 1, 1, tzinfo=timezone.utc) + assert dummy_state.test_field == "test" + + +def test_base_connector_state_load_warns_on_potential_unsaved_changes( + dummy_state: DummyConnectorState, + mock_opencti_connector_helper, +) -> None: + """Test that non-forced second load emits warning and does not reload state.""" + mock_opencti_connector_helper.get_state.return_value = { + "last_run": "2024-01-01T00:00:00+00:00", + "test_field": "test", + } + + dummy_state.load() + dummy_state.last_run = datetime(2024, 1, 2, tzinfo=timezone.utc) + dummy_state.test_field = "test2" + mock_opencti_connector_helper.get_state.reset_mock() + + with pytest.warns(UserWarning): + dummy_state.load() + + mock_opencti_connector_helper.get_state.assert_not_called() + assert dummy_state.last_run == datetime(2024, 1, 2, tzinfo=timezone.utc) + assert dummy_state.test_field == "test2" + + +def test_base_connector_state_load_ignores_private_client_key( + dummy_state: DummyConnectorState, + mock_opencti_connector_helper, +) -> None: + """Test that incoming `_client` key does not override private client attr.""" + mock_opencti_connector_helper.get_state.return_value = {"_client": "invalid"} + + original_client = dummy_state._client + dummy_state.load(force=True) + + mock_opencti_connector_helper.get_state.assert_called_once() + assert dummy_state._client is original_client + assert dummy_state.last_run is None + assert dummy_state.test_field is None + + +def test_base_connector_state_save_writes_state_and_forces_ping( + dummy_state: DummyConnectorState, + mock_opencti_connector_helper, +) -> None: + """Test that save writes JSON-serialized state and pings immediately.""" + dummy_state.last_run = datetime(2024, 1, 1, tzinfo=timezone.utc) + dummy_state.test_field = "test" + + dummy_state.save() + + mock_opencti_connector_helper.set_state.assert_called_once_with( + { + "last_run": "2024-01-01T00:00:00+00:00", + "test_field": "test", + } + ) + mock_opencti_connector_helper.force_ping.assert_called_once() + + +def test_base_connector_state_save_includes_extra_fields( + dummy_state: DummyConnectorState, + mock_opencti_connector_helper, +) -> None: + """Test that save preserves undeclared extra fields from state model.""" + dummy_state.last_run = datetime(2024, 1, 1, tzinfo=timezone.utc) + dummy_state.test_field = "test" + dummy_state.extra_field = "any value" # type: ignore[assignment] + + dummy_state.save() + + mock_opencti_connector_helper.set_state.assert_called_once_with( + { + "last_run": "2024-01-01T00:00:00+00:00", + "test_field": "test", + "extra_field": "any value", + } + ) + mock_opencti_connector_helper.force_ping.assert_called_once() diff --git a/connectors-sdk/tests/tests_states/test_states.py b/connectors-sdk/tests/tests_states/test_states.py new file mode 100644 index 00000000000..a45a061c452 --- /dev/null +++ b/connectors-sdk/tests/tests_states/test_states.py @@ -0,0 +1,44 @@ +"""Unit tests for concrete state subclasses.""" + +from datetime import datetime, timezone + +import pytest +from connectors_sdk.states._base_state import BaseConnectorState +from connectors_sdk.states.states import ExternalImportConnectorState +from pydantic import ValidationError + + +@pytest.fixture +def external_import_state(mock_opencti_connector_helper): + """An attached `ExternalImportConnectorState` instance for tests.""" + state = ExternalImportConnectorState() + state.attach_opencti_connector_helper(mock_opencti_connector_helper) + return state + + +def test_external_import_connector_state_inherits_from_base() -> None: + """Test that `ExternalImportConnectorState` is a `BaseConnectorState` subclass.""" + assert issubclass(ExternalImportConnectorState, BaseConnectorState) + + +def test_external_import_connector_state_has_default_values( + external_import_state: ExternalImportConnectorState, +) -> None: + """Test that subclass fields are initialized with expected defaults.""" + assert external_import_state.last_run is None + + +def test_external_import_connector_state_accepts_valid_last_run_assignment( + external_import_state: ExternalImportConnectorState, +) -> None: + """Test that a valid ISO datetime is parsed on assignment.""" + external_import_state.last_run = "2024-01-01T00:00:00+00:00" # type: ignore[assignment] + assert external_import_state.last_run == datetime(2024, 1, 1, tzinfo=timezone.utc) + + +def test_external_import_connector_state_rejects_invalid_last_run_assignment( + external_import_state: ExternalImportConnectorState, +) -> None: + """Test that invalid datetime values are rejected on assignment.""" + with pytest.raises(ValidationError): + external_import_state.last_run = "not a datetime" # type: ignore[assignment] diff --git a/external-import/abuse-ssl/src/requirements.txt b/external-import/abuse-ssl/src/requirements.txt index 1e3a78e7e53..5cbcbb27914 100644 --- a/external-import/abuse-ssl/src/requirements.txt +++ b/external-import/abuse-ssl/src/requirements.txt @@ -1,2 +1,2 @@ beautifulsoup4==4.14.2 -pycti==7.260309.0 \ No newline at end of file +pycti==7.260515.0 \ No newline at end of file diff --git a/external-import/abuseipdb-ipblacklist/src/requirements.txt b/external-import/abuseipdb-ipblacklist/src/requirements.txt index f9f806d4b0b..76ec015044b 100644 --- a/external-import/abuseipdb-ipblacklist/src/requirements.txt +++ b/external-import/abuseipdb-ipblacklist/src/requirements.txt @@ -1,6 +1,6 @@ validators==0.33.0 -requests==2.32.5 -pycti==7.260309.0 -urllib3==2.6.3 +requests==2.33.0 +pycti==7.260515.0 +urllib3==2.7.0 pydantic >=2.8.2, <3 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk diff --git a/external-import/accenture-acti/docker-compose.yml b/external-import/accenture-acti/docker-compose.yml index 22991b9e3c9..78a72b9e709 100644 --- a/external-import/accenture-acti/docker-compose.yml +++ b/external-import/accenture-acti/docker-compose.yml @@ -24,4 +24,5 @@ services: - ACCENTURE_ACTI_S3_BUCKET_SECRET_KEY=ChangeMe - ACCENTURE_ACTI_CLIENT_TLP_LEVEL=amber # available values are: clear, white, green, amber, amber+strict, red - Default: 'clear' - ACCENTURE_ACTI_RELATIVE_IMPORT_START_DATE=P30D + - ACCENTURE_ACTI_THREAT_ACTOR_AS_INTRUSION_SET=true # Convert threat actors to intrusion sets - Default: true restart: always diff --git a/external-import/accenture-acti/src/accenture_connector/config_loader.py b/external-import/accenture-acti/src/accenture_connector/config_loader.py index 4c0931a6474..73e73efd36e 100644 --- a/external-import/accenture-acti/src/accenture_connector/config_loader.py +++ b/external-import/accenture-acti/src/accenture_connector/config_loader.py @@ -116,3 +116,9 @@ def _initialize_configurations(self) -> None: self.relative_import_start_date = isodate.parse_duration( self.relative_import_start_date ) + self.threat_actor_as_intrusion_set = get_config_variable( + "ACCENTURE_ACTI_THREAT_ACTOR_AS_INTRUSION_SET", + ["accenture_acti", "threat_actor_as_intrusion_set"], + self.load, + default=True, + ) diff --git a/external-import/accenture-acti/src/accenture_connector/connector.py b/external-import/accenture-acti/src/accenture_connector/connector.py index 4dbd75609b2..f2748f5a935 100644 --- a/external-import/accenture-acti/src/accenture_connector/connector.py +++ b/external-import/accenture-acti/src/accenture_connector/connector.py @@ -238,6 +238,52 @@ def replace_src(match): ) return modified_description, results + @staticmethod + def _convert_threat_actors_to_intrusion_sets( + stix_objects: List[Dict[str, Any]], + ) -> None: + """Convert all threat-actor objects to intrusion-set in-place. + + Handles type/id replacement, relationship ref updates, report object_refs, + and removes properties that are valid on threat-actor but not on intrusion-set + per STIX 2.1 specification. + """ + ta_only_properties = { + "threat_actor_types", + "roles", + "sophistication", + "personal_motivations", + } + + for obj in stix_objects: + obj_type = obj.get("type") + + if obj_type == "threat-actor": + obj["type"] = "intrusion-set" + obj["id"] = obj["id"].replace("threat-actor", "intrusion-set") + for prop in ta_only_properties: + obj.pop(prop, None) + + elif obj_type == "relationship": + obj["source_ref"] = obj["source_ref"].replace( + "threat-actor", "intrusion-set" + ) + obj["target_ref"] = obj["target_ref"].replace( + "threat-actor", "intrusion-set" + ) + if ( + obj.get("relationship_type") == "located-at" + and obj["source_ref"].startswith("intrusion-set") + and obj["target_ref"].startswith("location") + ): + obj["relationship_type"] = "originates-from" + + elif obj_type == "report": + obj["object_refs"] = [ + ref.replace("threat-actor", "intrusion-set") + for ref in obj.get("object_refs", []) + ] + def _process_bundle(self, stix_bundle: Dict[str, Any]) -> Dict[str, Any]: # stix bundle rework to align with openCTI stix_objects = stix_bundle.get("objects") @@ -326,6 +372,13 @@ def _process_bundle(self, stix_bundle: Dict[str, Any]) -> Dict[str, Any]: for item in items_to_remove: stix_objects.remove(item) stix_objects.extend(new_entities_for_bundle) + + if self.config.threat_actor_as_intrusion_set: + self.helper.connector_logger.info( + "[PROCESS] Converting threat-actor objects to intrusion-set" + ) + self._convert_threat_actors_to_intrusion_sets(stix_objects) + return stix_bundle def _send_bundle( diff --git a/external-import/accenture-acti/src/config.yml.sample b/external-import/accenture-acti/src/config.yml.sample index e865f0a8695..f14e3585641 100644 --- a/external-import/accenture-acti/src/config.yml.sample +++ b/external-import/accenture-acti/src/config.yml.sample @@ -29,4 +29,5 @@ accenture_acti: s3_bucket_access_key: '' s3_bucket_secret_key: '' tlp_level: 'ChangeMe' # available values are: clear, white, green, amber, amber+strict, red - Default: 'amber+strict' - relative_import_start_date: 'P30D' \ No newline at end of file + relative_import_start_date: 'P30D' + threat_actor_as_intrusion_set: true # Convert threat actors to intrusion sets - Default: true \ No newline at end of file diff --git a/external-import/accenture-acti/src/requirements.txt b/external-import/accenture-acti/src/requirements.txt index ec04549bed0..4281961784b 100644 --- a/external-import/accenture-acti/src/requirements.txt +++ b/external-import/accenture-acti/src/requirements.txt @@ -1,8 +1,8 @@ -pycti==7.260309.0 +pycti==7.260515.0 pyyaml~=6.0.2 -requests~=2.32.3 +requests~=2.33.0 validators==0.35.0 -html-to-markdown +html-to-markdown~=2.0 pycognito isodate boto3 \ No newline at end of file diff --git a/external-import/alienvault/.build.env b/external-import/alienvault/.build.env new file mode 100644 index 00000000000..8b375f64ad2 --- /dev/null +++ b/external-import/alienvault/.build.env @@ -0,0 +1 @@ +CONNECTOR_CMD="__main__.py" diff --git a/external-import/alienvault/Dockerfile b/external-import/alienvault/Dockerfile index 78c915c6cc4..5187754bd1a 100644 --- a/external-import/alienvault/Dockerfile +++ b/external-import/alienvault/Dockerfile @@ -1,7 +1,8 @@ FROM python:3.12-alpine ENV CONNECTOR_TYPE=EXTERNAL_IMPORT -COPY requirements.txt /opt/opencti-connector-alienvault/ +# Copy the connector +COPY src /opt/opencti-connector-alienvault RUN apk update && apk upgrade && \ apk --no-cache add git build-base libmagic libffi-dev && \ @@ -10,8 +11,6 @@ RUN apk update && apk upgrade && \ apk del git build-base && \ rm -rf /var/cache/apk/* -# Copy the connector -COPY src /opt/opencti-connector-alienvault # Expose and entrypoint COPY entrypoint.sh / diff --git a/external-import/alienvault/README.md b/external-import/alienvault/README.md index f7e7cb9736b..89b8e97ed6a 100644 --- a/external-import/alienvault/README.md +++ b/external-import/alienvault/README.md @@ -140,7 +140,7 @@ docker compose up -d 2. Install dependencies: ```bash -pip3 install -r requirements.txt +pip3 install -r src/requirements.txt ``` 3. Start the connector from the `src` directory: diff --git a/external-import/alienvault/requirements.txt b/external-import/alienvault/src/requirements.txt similarity index 88% rename from external-import/alienvault/requirements.txt rename to external-import/alienvault/src/requirements.txt index 3af0c83ede5..f47847b274c 100644 --- a/external-import/alienvault/requirements.txt +++ b/external-import/alienvault/src/requirements.txt @@ -1,4 +1,4 @@ -pycti==7.260309.0 +pycti==7.260515.0 pydantic>=2.8.2,<3.0.0 OTXv2==1.5.12 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk diff --git a/external-import/alienvault/tests/test-requirements.txt b/external-import/alienvault/tests/test-requirements.txt index 24b529c78d0..d405632324b 100644 --- a/external-import/alienvault/tests/test-requirements.txt +++ b/external-import/alienvault/tests/test-requirements.txt @@ -1,2 +1,2 @@ --r ../requirements.txt -pytest==8.4.2 +-r ../src/requirements.txt +pytest==9.0.3 diff --git a/external-import/anyrun-feed/README.md b/external-import/anyrun-feed/README.md index b42ab0cfc8f..2450bf42f7d 100644 --- a/external-import/anyrun-feed/README.md +++ b/external-import/anyrun-feed/README.md @@ -1,10 +1,18 @@ +

+ + ANY.RUN logo + +

+ +______________________________________________________________________ + # OpenCTI ANY.RUN Feed Connector -| Status | Date | Comment | -|--------|------|---------| -| Community | - | - | +| Status | Date | Comment | +|------------------|------|---------| +| Partner Verified | - | - | -The ANY.RUN connector imports threat intelligence feed data from the ANY.RUN Interactive Online Malware Sandbox into OpenCTI. +ANY.RUN’s TI Feeds is a continuously updated source of fresh network-based Indicators of Compromise (IOCs): IPs, domains, and URLs. ## Table of Contents @@ -13,10 +21,11 @@ The ANY.RUN connector imports threat intelligence feed data from the ANY.RUN Int - [Introduction](#introduction) - [Installation](#installation) - [Requirements](#requirements) + - [Generate API-KEY](#generate-api-key) - [Configuration variables](#configuration-variables) - [OpenCTI environment variables](#opencti-environment-variables) - [Base connector environment variables](#base-connector-environment-variables) - - [Connector extra parameters environment variables](#connector-extra-parameters-environment-variables) + - [Base ANY.RUN environment variables](#base-anyrun-environment-variables) - [Deployment](#deployment) - [Docker Deployment](#docker-deployment) - [Manual Deployment](#manual-deployment) @@ -24,47 +33,74 @@ The ANY.RUN connector imports threat intelligence feed data from the ANY.RUN Int - [Behavior](#behavior) - [Debugging](#debugging) - [Additional information](#additional-information) + - [Support](#support) ## Introduction -ANY.RUN is an interactive online malware sandbox that provides real-time analysis of suspicious files and URLs. Their threat intelligence feed provides STIX-formatted threat data extracted from malware analysis. +ANY.RUN’s [Threat Intelligence Feeds](https://any.run/threat-intelligence-feeds/?utm_source=anyrungithub&utm_medium=documentation&utm_campaign=opencti_feeds&utm_content=linktofeedslanding) (TI Feeds) is a continuously updated source of fresh network-based Indicators of Compromise (IOCs): IPs, domains, and URLs. +The IOCs are extracted from real-time analyses done by experts from 15,000 companies in ANY.RUN’s Interactive Sandbox. + +The connector for Threat Intelligence Feeds provides OpenCTI users with simple, automated access to uniquely sourced and accurate indicators of compromise. -This connector fetches the STIX JSON feed from ANY.RUN API and imports the threat intelligence objects directly into OpenCTI. +* Enrich OpenCTI artifacts with context from threat investigations +* Get access to pre-processed IOCs with minimum false positives +* Detect threats early and prevent attacks using high-quality indicators + +Integrate TI Feeds with OpenCTI for an easy access to all the benefits it brings: + +* Expanded Coverage: ANY.RUN’s exclusive IOCs come from Memory Dumps, Suricata IDS, in-browser data, and internal threat categorization systems, increasing the chance of detection of the most evasive threats. +* Reduced Workload: The indicators are pre-processed to avoid false positives and ready to be used for malware analysis or incident investigation. +* Informed Response: Rich metadata provided for IOCs gives you the context for in-depth threat investigations and faster response. ## Installation -### Requirements +To use the integration, ensure you have an active [ANY.RUN TI Feeds subscription](https://intelligence.any.run/plans/?utm_source=anyrungithub&utm_medium=documentation&utm_campaign=opencti_feeds&utm_content=linktotiplans ). +ANY.RUN TI Feeds connector for OpenCTI is a standalone Python service that requires access to both the OpenCTI platform and RabbitMQ. +RabbitMQ credentials and connection parameters are provided automatically by the OpenCTI API, based on the platform’s configuration. -- OpenCTI Platform >= 5.12.32 -- ANY.RUN TI Feed subscription +You can enable the connector in one of the following ways: -## Configuration variables +* Run as a Python process: simply configure the config.yml file with the appropriate values and launch the connector directly. +* Run in Docker: use the OpenCTI docker image opencti/connector-anyrun-feed -There are a number of configuration options, which are set either in `docker-compose.yml` (for Docker) or in `config.yml` (for manual deployment). +### Requirements -### OpenCTI environment variables +- OpenCTI Platform >= 6.0.0 +- Available on ANY.RUN plans with API access, including trial -| Parameter | config.yml | Docker environment variable | Mandatory | Description | -|---------------|------------|-----------------------------|-----------|-----------------------------------------------------------------------------------| -| OpenCTI URL | url | `OPENCTI_URL` | Yes | The URL of the OpenCTI platform. Note: final `/` should be avoided. | -| OpenCTI Token | token | `OPENCTI_TOKEN` | Yes | The default admin token set in the OpenCTI platform. | +### Generate API-KEY -### Base connector environment variables +Please use ANY.RUN’s API key without a prefix. Prefixed API keys and Basic Authentication for TI Feeds won’t be supported in future releases. +For assistance or access to ANY.RUN’s services, please reach out to our [sales team](https://any.run/enterprise/?utm_source=anyrungithub&utm_medium=documentation&utm_campaign=opencti_feeds&utm_content=linktoenterprise#contact-sales). -| Parameter | config.yml | Docker environment variable | Default | Mandatory | Description | -|------------------|------------|-----------------------------|---------|-----------|--------------------------------------------------------------------------------------------------------------------| -| Connector ID | id | `CONNECTOR_ID` | | Yes | A unique `UUIDv4` identifier for this connector instance. | -| Connector Name | name | `CONNECTOR_NAME` | | Yes | Name of the connector to be shown in OpenCTI. | -| Connector Scope | scope | `CONNECTOR_SCOPE` | stix2 | Yes | Supported scope (e.g., `text/html`, `stix2`). | -| Log Level | log_level | `CONNECTOR_LOG_LEVEL` | info | No | Determines the verbosity of logs: `debug`, `info`, `warn`, or `error`. | -| Run Every | - | `CONNECTOR_RUN_EVERY` | | Yes | Interval format: `7d`, `12h`, `10m`, `30s` (d=days, h=hours, m=minutes, s=seconds). | +## Configuration variables -### Connector extra parameters environment variables +There are a number of configuration options, which are set either in `docker-compose.yml` (for Docker) or in `config.yml` (for manual deployment). -| Parameter | config.yml | Docker environment variable | Default | Mandatory | Description | -|---------------|------------|-----------------------------|-----------------------------------------|-----------|----------------------------------------------------------------------------------------------------------| -| TI Token | token | `ANYRUN_TI_TOKEN` | | Yes | ANY.RUN TI Feed credentials (API-Key for demo-feed, Basic for full - type selected automatically). | -| TI URL | url | `ANYRUN_TI_URL` | https://api.any.run/v1/feeds/stix.json | No | ANY.RUN TI Feed URL. | +#### OpenCTI environment variables +| Parameter | Docker envvar | Mandatory | Description | +|------------------------------|----------------------------------|-----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `opencti_url` | `OPENCTI_URL` | Yes | The URL of the OpenCTI platform. Note that final `/` should be avoided. Example value: `http://opencti:8080` | +| `opencti_token` | `OPENCTI_TOKEN` | Yes | The default admin token configured in the OpenCTI platform parameters file. We recommend setting up a separate ``OPENCTI_TOKEN`` named **ANY.RUN** to identify the work of our integrations. | + +#### Base connector environment variables +| Parameter | Docker envvar | Mandatory | Description | +|------------------------------|----------------------------------|-----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `connector_id` | `CONNECTOR_ID` | Yes | A valid arbitrary `UUIDv4` that must be unique for this connector. | +| `connector_type` | `CONNECTOR_TYPE` | Yes | A connector type. | +| `connector_name` | `CONNECTOR_NAME` | Yes | A connector name to be shown in OpenCTI. | +| `connector_scope` | `CONNECTOR_SCOPE` | Yes | Supported scope. E. g., `text/html`. | +| `connector_auto` | `CONNECTOR_AUTO` | Yes | Enable/disable auto-enrichment of observables. | +| `connector_confidence_level` | `CONNECTOR_CONFIDENCE_LEVEL` | Yes | The default confidence level for created sightings (a number between 0 and 100, where 0 = Unknown and 100 = Fully trusted). | +| `connector_log_level` | `CONNECTOR_LOG_LEVEL` | Yes | The log level for this connector, could be `debug`, `info`, `warn` or `error` (less verbose). | + + +#### Base ANY.RUN environment variables +| Parameter | Docker env_var | Mandatory | Description | +|------------------------------|----------------------------------|-----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `token` | `ANYRUN_API_KEY` | Yes | ANY.RUN Lookup API-KEY. See "Generate API KEY" section in the README file. | +| `anyrun_feed_fetch_interval` | `ANYRUN_FEED_FETCH_INTERVAL` | No | Specify feed fetch interval in minutes. | +| `anyrun_feed_fetch_depth` | `ANYRUN_FEED_FETCH_DEPTH` | No | Specify feed fetch depth in days. | ## Deployment @@ -79,18 +115,26 @@ docker build -t opencti/connector-anyrun-feed:latest . Configure the connector in `docker-compose.yml`: ```yaml - connector-anyrun-feed: - image: opencti/connector-anyrun-feed:latest - environment: - - OPENCTI_URL=http://localhost - - OPENCTI_TOKEN=ChangeMe - - CONNECTOR_ID=ChangeMe - - CONNECTOR_NAME=ANY.RUN feed - - CONNECTOR_SCOPE=stix2 - - CONNECTOR_LOG_LEVEL=info - - CONNECTOR_RUN_EVERY=1d - - ANYRUN_TI_TOKEN=ChangeMe - restart: always +connector-anyrun-feed: + image: opencti-connector-anyrun-feed:latest + environment: + # OpenCTI settings. + - OPENCTI_URL=http://localhost # The URL of the OpenCTI platform. Note that final `/` should be avoided. Example value: `http://opencti:8080` + - OPENCTI_TOKEN=ChangeMe # The default admin token configured in the OpenCTI platform parameters file. + + # Connector settings. + - CONNECTOR_ID=ChangeMe # A valid arbitrary `UUIDv4` that must be unique for this connector. + - CONNECTOR_TYPE=EXTERNAL_IMPORT # A connector type. + - CONNECTOR_NAME=ANY.RUN TI Feed # A connector name to be shown in OpenCTI. + - CONNECTOR_SCOPE=stix2 # Supported scope. E. g., `text/html`. + - CONNECTOR_LOG_LEVEL=info # The log level for this connector, could be `debug`, `info`, `warn` or `error` (less verbose). + - CONNECTOR_UPDATE_EXISTING_DATA=false # Update data already ingested into the platform. + + # ANY.RUN base settings. + - ANYRUN_API_KEY=ChangeMe # ANY.RUN TI Feeds API key. See "Generate your API key" section in the README file. + - ANYRUN_FEED_FETCH_INTERVAL=120 # Specify feed fetch interval in minutes. + - ANYRUN_FEED_FETCH_DEPTH=90 # Specify feed fetch depth in days. + restart: always ``` Start the connector: @@ -101,7 +145,7 @@ docker compose up -d ### Manual Deployment -1. Create `config.yml` based on `config.yml.sample`. +1. Copy and configure `config.yml` from the provided `config.yml.sample`. 2. Install dependencies: @@ -109,7 +153,7 @@ docker compose up -d pip3 install -r requirements.txt ``` -3. Start the connector: +3. Start the connector from the `src` directory: ```bash python3 anyrun_feed.py @@ -117,15 +161,15 @@ python3 anyrun_feed.py ## Usage -The connector runs automatically at the interval set by `CONNECTOR_RUN_EVERY`. To force an immediate run: +The connector runs automatically at the interval set by `ANYRUN_FEED_FETCH_INTERVAL`. To force an immediate run: -**Data Management → Ingestion → Connectors** +Data Management → Ingestion → Connectors Find the connector and click the refresh button to reset the state and trigger a new data fetch. ## Behavior -The connector fetches the STIX JSON feed from ANY.RUN API and imports the objects directly into OpenCTI. +The connector fetches the STIX JSON feed from ANY.RUN TAXII API and imports the objects directly into OpenCTI. ### Data Flow @@ -150,16 +194,12 @@ The connector imports native STIX 2.1 objects from ANY.RUN feed. Common entity t | ANY.RUN Data | OpenCTI Entity | Description | |----------------------|---------------------|--------------------------------------------------| -| Malware samples | File | File hashes and metadata from analysis | | Network indicators | Domain/IP/URL | Network observables extracted from samples | -| Malware families | Malware | Identified malware family information | -| Attack patterns | Attack Pattern | TTPs observed during analysis | ### Processing Details -1. **API Authentication**: Supports both API-Key (demo) and Basic (full) authentication - automatically detected -2. **Native STIX Import**: Data is already in STIX format, directly imported to OpenCTI -3. **State Management**: Tracks last run to avoid duplicate processing +1. **Native STIX Import**: Data is already in STIX format, directly imported to OpenCTI +2. **State Management**: Tracks last run to avoid duplicate processing ## Debugging @@ -176,9 +216,11 @@ Log output includes: ## Additional information -- **Authentication Types**: - - API-Key: For demo feed access - - Basic: For full feed access - - The connector automatically detects the correct authentication method - **Feed Format**: Native STIX 2.1 JSON format -- **Interval Format**: Use `1d` for daily, `12h` for twice daily, etc. +- **Interval Format**: Specify feed fetch interval in minutes. For example 120 - once per two hours +- **Import format**: Specify feed fetch depth in days. For example 90 - IOCs for the last 90 days +- **API Access Required**: Available on ANY.RUN plans with API access, including trial + +## Support +This is an ANY.RUN’s supported connector. You can write to us for help with integration via [techsupport@any.run](mailto:techsupport@any.run) . +Contact us for a quote or demo via [this form](https://app.any.run/contact-us/?utm_source=anyrungithub&utm_medium=documentation&utm_campaign=opencti_feeds&utm_content=linktocontactus). diff --git a/external-import/anyrun-feed/__metadata__/CONNECTOR_CONFIG_DOC.md b/external-import/anyrun-feed/__metadata__/CONNECTOR_CONFIG_DOC.md new file mode 100644 index 00000000000..b93dfe85705 --- /dev/null +++ b/external-import/anyrun-feed/__metadata__/CONNECTOR_CONFIG_DOC.md @@ -0,0 +1,18 @@ +# Connector Configurations + +Below is an exhaustive enumeration of all configurable parameters available, each accompanied by detailed explanations of their purposes, default behaviors, and usage guidelines to help you understand and utilize them effectively. + +### Type: `object` + +| Property | Type | Required | Possible values | Default | Description | +| -------- | ---- | -------- | --------------- | ------- | ----------- | +| OPENCTI_URL | `string` | ✅ | Format: [`uri`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | The base URL of the OpenCTI instance. | +| OPENCTI_TOKEN | `string` | ✅ | string | | The API token to connect to OpenCTI. | +| CONNECTOR_NAME | `string` | | string | `"ANY.RUN TI Feed"` | The name of the connector. | +| CONNECTOR_SCOPE | `array` | | string | `["stix2"]` | The scope of the connector. | +| CONNECTOR_LOG_LEVEL | `string` | | `debug` `info` `warn` `warning` `error` | `"info"` | The minimum level of logs to display. | +| CONNECTOR_TYPE | `const` | | `EXTERNAL_IMPORT` | `"EXTERNAL_IMPORT"` | | +| CONNECTOR_UPDATE_EXISTING_DATA | `boolean` | | boolean | `false` | Whether to update data already ingested into the platform. | +| ANYRUN_API_KEY | `string` | ✅ | Format: [`password`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | ANY.RUN TI Feeds API key. See 'Generate your API key' section in the README file. | +| ANYRUN_FEED_FETCH_INTERVAL | `integer` | | integer | `120` | Specify feed fetch interval in minutes. | +| ANYRUN_FEED_FETCH_DEPTH | `integer` | | integer | `90` | Specify feed fetch depth in days. | diff --git a/external-import/anyrun-feed/__metadata__/connector_config_schema.json b/external-import/anyrun-feed/__metadata__/connector_config_schema.json new file mode 100644 index 00000000000..d08186c1cbe --- /dev/null +++ b/external-import/anyrun-feed/__metadata__/connector_config_schema.json @@ -0,0 +1,77 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://www.filigran.io/connectors/anyrun-feed_config.schema.json", + "type": "object", + "properties": { + "OPENCTI_URL": { + "description": "The base URL of the OpenCTI instance.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "OPENCTI_TOKEN": { + "description": "The API token to connect to OpenCTI.", + "type": "string" + }, + "CONNECTOR_NAME": { + "default": "ANY.RUN TI Feed", + "description": "The name of the connector.", + "type": "string" + }, + "CONNECTOR_SCOPE": { + "default": [ + "stix2" + ], + "description": "The scope of the connector.", + "items": { + "type": "string" + }, + "type": "array" + }, + "CONNECTOR_LOG_LEVEL": { + "default": "info", + "description": "The minimum level of logs to display.", + "enum": [ + "debug", + "info", + "warn", + "warning", + "error" + ], + "type": "string" + }, + "CONNECTOR_TYPE": { + "const": "EXTERNAL_IMPORT", + "default": "EXTERNAL_IMPORT", + "type": "string" + }, + "CONNECTOR_UPDATE_EXISTING_DATA": { + "default": false, + "description": "Whether to update data already ingested into the platform.", + "type": "boolean" + }, + "ANYRUN_API_KEY": { + "description": "ANY.RUN TI Feeds API key. See 'Generate your API key' section in the README file.", + "format": "password", + "type": "string", + "writeOnly": true + }, + "ANYRUN_FEED_FETCH_INTERVAL": { + "default": 120, + "type": "integer", + "description": "Specify feed fetch interval in minutes." + }, + "ANYRUN_FEED_FETCH_DEPTH": { + "default": 90, + "type": "integer", + "description": "Specify feed fetch depth in days." + } + }, + "required": [ + "OPENCTI_URL", + "OPENCTI_TOKEN", + "ANYRUN_API_KEY" + ], + "additionalProperties": true +} diff --git a/external-import/anyrun-feed/__metadata__/connector_manifest.json b/external-import/anyrun-feed/__metadata__/connector_manifest.json index 2ede2968538..fcd4b9c7f06 100644 --- a/external-import/anyrun-feed/__metadata__/connector_manifest.json +++ b/external-import/anyrun-feed/__metadata__/connector_manifest.json @@ -1,12 +1,12 @@ { "title": "ANY.RUN Feed", "slug": "anyrun-feed", - "description": "Import TI feed from ANY.RUN Interactive Online Malware Sandbox", - "short_description": "Import TI feed from ANY.RUN Interactive Online Malware Sandbox", + "description": "ANY.RUN’s TI Feeds is a continuously updated source of fresh network-based Indicators of Compromise (IOCs): IPs, domains, and URLs.", + "short_description": "The connector for Threat Intelligence Feeds provides OpenCTI users with simple, automated access to uniquely sourced and accurate indicators of compromise.", "logo": "external-import/anyrun-feed/__metadata__/logo.png", "use_cases": [ "Threat Intelligence", - "Sandbox" + "Commercial Threat Intel" ], "verified": true, "last_verified_date": null, diff --git a/external-import/anyrun-feed/docker-compose.yml b/external-import/anyrun-feed/docker-compose.yml index bffd335b690..2892360119a 100644 --- a/external-import/anyrun-feed/docker-compose.yml +++ b/external-import/anyrun-feed/docker-compose.yml @@ -3,12 +3,20 @@ services: connector-anyrun-feed: image: opencti/connector-anyrun-feed:latest environment: - - OPENCTI_URL=http://localhost - - OPENCTI_TOKEN=ChangeMe - - CONNECTOR_ID=ChangeMe - - CONNECTOR_NAME=ANY.RUN feed - - CONNECTOR_SCOPE=stix2 - - CONNECTOR_LOG_LEVEL=info - - CONNECTOR_RUN_EVERY=1d - - ANYRUN_TI_TOKEN=ChangeMe # Required + # OpenCTI settings. + - OPENCTI_URL=http://localhost # The URL of the OpenCTI platform. Note that final `/` should be avoided. Example value: `http://opencti:8080` + - OPENCTI_TOKEN=ChangeMe # The default admin token configured in the OpenCTI platform parameters file. + + # Connector settings. + - CONNECTOR_ID=ChangeMe # A valid arbitrary `UUIDv4` that must be unique for this connector. + - CONNECTOR_TYPE=EXTERNAL_IMPORT # A connector type. + - CONNECTOR_NAME=ANY.RUN TI Feed # A connector name to be shown in OpenCTI. + - CONNECTOR_SCOPE=stix2 # Supported scope. E. g., `text/html`. + - CONNECTOR_LOG_LEVEL=info # The log level for this connector, could be `debug`, `info`, `warn` or `error` (less verbose). + - CONNECTOR_UPDATE_EXISTING_DATA=false # Update data already ingested into the platform. + + # ANY.RUN base settings. + - ANYRUN_API_KEY=ChangeMe # ANY.RUN TI Feeds API key. See "Generate your API key" section in the README file. + - ANYRUN_FEED_FETCH_INTERVAL=120 # Specify feed fetch interval in minutes. + - ANYRUN_FEED_FETCH_DEPTH=90 # Specify feed fetch depth in days. restart: always diff --git a/external-import/anyrun-feed/src/anyrun_feed.py b/external-import/anyrun-feed/src/anyrun_feed.py index 902f6b199f5..60e8667517f 100644 --- a/external-import/anyrun-feed/src/anyrun_feed.py +++ b/external-import/anyrun-feed/src/anyrun_feed.py @@ -1,56 +1,214 @@ -import json -import os import sys import time +from datetime import datetime, timedelta -import requests -from lib.external_import import ExternalImportConnector +import stix2 +from anyrun.connectors import FeedsConnector +from anyrun.iterators import FeedsIterator +from config import Config, config +from pycti import Identity, Indicator, OpenCTIConnectorHelper -class AnyrunFeed(ExternalImportConnector): - def __init__(self): - super().__init__() - self.token = os.environ.get("ANYRUN_TI_TOKEN", "") - self.ti_url = os.environ.get( - "ANYRUN_TI_URL", "https://api.any.run/v1/feeds/stix.json" - ) +class AnyrunFeed: + def __init__(self, config_obj: Config): + self._config = config_obj + self._helper = OpenCTIConnectorHelper(config) - def get_feed(self): - response = requests.get( - self.ti_url, headers={"Authorization": "API-Key {}".format(self.token)} + self._identity = stix2.Identity( + id=Identity.generate_id("ANY.RUN", "organization"), + name="ANY.RUN", + identity_class="organization", + description=( + "Empowers SOC teams with a Sandbox for real-time malware analysis, " + "Threat Intelligence Lookup, and high-quality feeds to enhance " + "detection and threat coverage." + ), + contact_information="techsupport@any.run", ) - if response.status_code == 401: - response = requests.get( - self.ti_url, headers={"Authorization": "Basic {}".format(self.token)} + + self._iocs_types_mapping = { + "domain-name": "Domain-Name", + "url": "Url", + "ipv4-addr": "IPv4-Addr", + } + + def mainloop(self) -> None: + self._helper.log_info(f"Starting {self._helper.connect_name} connector.") + + with FeedsConnector( + self._config.anyrun_api_key, + enable_requests=True, + integration=self._config.VERSION, + ) as connector: + connector.check_authorization() + + self._run_once(connector, is_delta=False) + + if self._helper.connect_run_and_terminate: + self._helper.log_info(f"{self._helper.connect_name} connector ended") + sys.exit(0) + + while True: + time.sleep(self._config.fetch_interval * 60) + self._run_once(connector, is_delta=True) + + if self._helper.connect_run_and_terminate: + self._helper.log_info( + f"{self._helper.connect_name} connector ended" + ) + sys.exit(0) + + def _run_once(self, connector: FeedsConnector, is_delta: bool) -> None: + """ + Initiates a single work, fetches one batch of feeds and marks the work + as processed once everything has been sent. + + :param connector: ANY.RUN connector instance + :param is_delta: Collect new indicators over a period of time + """ + self._helper.log_info(f"{self._helper.connect_name} will run!") + work_id = self._initiate_work() + + try: + self._helper.send_stix2_bundle( + self._helper.stix2_create_bundle([self._identity]), + update=self._config.update_existing_data, + work_id=work_id, ) - if response.status_code != 200: - raise ValueError( - "Any.RUN api code {}. text: {}".format( - response.status_code, response.text - ) + + total_sent = self._fetch_feeds(connector, work_id, is_delta=is_delta) + self._helper.log_info( + f"{self._helper.connect_name} successfully sent {total_sent} feeds" + ) + self._helper.api.work.to_processed( + work_id, + f"{self._helper.connect_name} run! Sent {total_sent} indicators", + ) + except Exception as exc: + self._helper.log_error(str(exc)) + self._helper.api.work.to_processed( + work_id, + f"{self._helper.connect_name} run failed: {exc}", + in_error=True, ) - return json.loads(response.text) - def _collect_intelligence(self) -> list: - self.helper.log_debug( - f"{self.helper.connect_name} connector is starting the collection of objects..." - ) + def _fetch_feeds( + self, + connector: FeedsConnector, + work_id: str, + is_delta: bool = False, + ) -> int: + """ + Process feeds for the current run, sending all indicators under a single + work_id. - feed = self.get_feed() + :param connector: ANY.RUN connector instance + :param work_id: OpenCTI work_id to reuse for every bundle in this run + :param is_delta: Collect new indicators over a period of time + :return: Total number of indicators sent during the run + """ + total_sent = 0 + for raw_feeds in FeedsIterator.taxii_stix( + connector, + chunk_size=self._config.FEEDS_CHUNK_LIMIT, + limit=self._config.FEEDS_CHUNK_LIMIT, + match_version="all", + match_type="indicator", + modified_after=self._get_interval(), + get_delta=is_delta, + ): + indicators = [] + for feed in raw_feeds: + feed_type, feed_value = self.extract_feed_data(feed) + pattern = f"[{feed_type}:value = '{feed_value}']" + indicators.append( + stix2.Indicator( + id=Indicator.generate_id(pattern), + created_by_ref=self._identity.get("id"), + name=feed_value, + description="Detected by ANY.RUN TI Feeds", + pattern_type="stix", + pattern=pattern, + valid_from=feed.get("valid_from"), + labels=feed.get("labels"), + external_references=self._create_external_references( + feed.get("external_references") + ), + custom_properties={ + "x_opencti_score": feed.get("confidence"), + "x_opencti_main_observable_type": self._iocs_types_mapping.get( + feed_type + ), + }, + ) + ) - stix_objects = feed["data"]["objects"] + if indicators: + self._helper.send_stix2_bundle( + self._helper.stix2_create_bundle(indicators), + update=self._config.update_existing_data, + work_id=work_id, + ) + total_sent += len(indicators) + return total_sent + + def _initiate_work(self) -> str: + """ + :return: OpenCTI work ID for the current run + """ + friendly_name = f"{self._helper.connect_name} run @ " + datetime.now().strftime( + self._config.DATE_TIME_FORMAT + ) + return self._helper.api.work.initiate_work( + self._helper.connect_id, friendly_name + ) - self.helper.log_info( - f"{len(stix_objects)} STIX2 objects have been compiled by {self.helper.connect_name} connector. " + def _get_interval(self) -> str: + """ + :return: feed fetch interval + """ + return datetime.strftime( + datetime.now() - timedelta(days=self._config.fetch_depth), + self._config.DATE_TIME_FORMAT, ) - return stix_objects + + @staticmethod + def extract_feed_data(feed: dict) -> tuple[str, str]: + """ + Extracts feed type, value using raw indicator + + :param feed: Raw ANY.RUN feed + :return: ANY.RUN feed type, ANY.RUN feed value + """ + pattern = feed.get("pattern") + feed_type = pattern.split(":")[0][1:] + feed_value = pattern.split(" = '")[1][:-2] + + return feed_type, feed_value + + @staticmethod + def _create_external_references( + refs: list[dict[str, str]] | None, + ) -> list[stix2.ExternalReference] | None: + """ + Adds external references to the indicator + + :param refs: List of the external references + :return: List of the external references + """ + if not refs: + return None + + return [ + stix2.ExternalReference( + source_name=ref_info.get("source_name"), + url=ref_info.get("url"), + description="ANY.RUN related analysis URL", + ) + for ref_info in refs[:15] + ] if __name__ == "__main__": - try: - connector = AnyrunFeed() - connector.run() - except Exception as e: - ExternalImportConnector.log_error(str(e)) - time.sleep(10) - sys.exit(1) + anyrun_connector = AnyrunFeed(Config()) + anyrun_connector.mainloop() diff --git a/external-import/anyrun-feed/src/config.py b/external-import/anyrun-feed/src/config.py new file mode 100644 index 00000000000..df6e42e9133 --- /dev/null +++ b/external-import/anyrun-feed/src/config.py @@ -0,0 +1,55 @@ +import os + +import yaml +from pycti import get_config_variable + +config_file_path: str = os.path.join( + os.path.dirname(os.path.abspath(__file__)), "config.yml" +) + +config: dict = ( + yaml.safe_load(open(config_file_path, encoding="utf-8")) + if os.path.isfile(config_file_path) + else {} +) + + +class Config: + """Base configuration class.""" + + VERSION = "OpenCTI:7.260422.0" + DATE_TIME_FORMAT = "%Y-%m-%d %H:%M:%S" + FEEDS_CHUNK_LIMIT = 5000 + + def __init__(self) -> None: + self._create_base_config() + self.anyrun_api_key = get_config_variable( + "ANYRUN_API_KEY", ["anyrun", "api_key"], config + ) + + def _create_base_config(self) -> None: + """ + Updates connector parameters using content of docker-compose.yml or config.yml file + """ + self.fetch_interval = get_config_variable( + "ANYRUN_FEED_FETCH_INTERVAL", + ["anyrun", "feed_fetch_interval"], + config, + isNumber=True, + default=120, + ) + + self.fetch_depth = get_config_variable( + "ANYRUN_FEED_FETCH_DEPTH", + ["anyrun", "feed_fetch_depth"], + config, + isNumber=True, + default=90, + ) + + self.update_existing_data = get_config_variable( + "CONNECTOR_UPDATE_EXISTING_DATA", + ["connector", "update_existing_data"], + config, + default=False, + ) diff --git a/external-import/anyrun-feed/src/config.yml.sample b/external-import/anyrun-feed/src/config.yml.sample new file mode 100644 index 00000000000..6ef7aaa490b --- /dev/null +++ b/external-import/anyrun-feed/src/config.yml.sample @@ -0,0 +1,16 @@ +opencti: + url: 'http://localhost:8080' # The URL of the OpenCTI platform. Note that final `/` should be avoided. Example value: `http://opencti:8080` + token: 'ChangeMe' # The default admin token configured in the OpenCTI platform parameters file. + +connector: + id: 'ChangeMe' # A valid arbitrary `UUIDv4` that must be unique for this connector. + name: 'ANY.RUN TI Feed' # A connector name to be shown in OpenCTI. + scope: 'stix2' # Supported scope. E. g., `text/html`. + log_level: 'info' # The log level for this connector, could be `debug`, `info`, `warn` or `error` (less verbose). + type: 'EXTERNAL_IMPORT' # A connector type. + update_existing_data: false # Update data already ingested into the platform. + +anyrun: + api_key: 'ChangeMe' # ANY.RUN TI Feeds API key. See "Generate your API key" section in the README file. Example: WmNfqnpo...2Sjon7mtvm8e + feed_fetch_interval: 120 # Specify feed fetch interval in minutes. + feed_fetch_depth: 90 # Specify feed fetch depth in days. \ No newline at end of file diff --git a/external-import/anyrun-feed/src/lib/external_import.py b/external-import/anyrun-feed/src/lib/external_import.py deleted file mode 100644 index 60b0f0e84a2..00000000000 --- a/external-import/anyrun-feed/src/lib/external_import.py +++ /dev/null @@ -1,184 +0,0 @@ -import os -import sys -import time -from datetime import datetime, timezone - -import stix2 -from pycti import OpenCTIConnectorHelper - - -class ExternalImportConnector: - """Specific external-import connector - - This class encapsulates the main actions, expected to be run by the - any external-import connector. Note that the attributes defined below - will be complemented per each connector type. - - Attributes: - helper (OpenCTIConnectorHelper): The helper to use. - interval (str): The interval to use. It SHOULD be a string in the format '7d', '12h', '10m', '30s' where the final letter SHOULD be one of 'd', 'h', 'm', 's' standing for day, hour, minute, second respectively. - update_existing_data (str): Whether to update existing data or not in OpenCTI. - """ - - def __init__(self): - self.helper = OpenCTIConnectorHelper({}) - - # Specific connector attributes for external import connectors - try: - self.interval = os.environ.get("CONNECTOR_RUN_EVERY", None).lower() - self.helper.log_info( - f"Verifying integrity of the CONNECTOR_RUN_EVERY value: '{self.interval}'" - ) - unit = self.interval[-1] - if unit not in ["d", "h", "m", "s"]: - raise TypeError - int(self.interval[:-1]) - except TypeError as _: - msg = f"Error ({_}) when grabbing CONNECTOR_RUN_EVERY environment variable: '{self.interval}'. It SHOULD be a string in the format '7d', '12h', '10m', '30s' where the final letter SHOULD be one of 'd', 'h', 'm', 's' standing for day, hour, minute, second respectively. " - self.helper.log_error(msg) - raise ValueError(msg) - - update_existing_data = os.environ.get("CONNECTOR_UPDATE_EXISTING_DATA", "false") - if isinstance(update_existing_data, str) and update_existing_data.lower() in [ - "true", - "false", - ]: - self.update_existing_data = ( - True if update_existing_data.lower() == "true" else False - ) - elif isinstance(update_existing_data, bool) and update_existing_data in [ - True, - False, - ]: - self.update_existing_data = update_existing_data - else: - msg = f"Error when grabbing CONNECTOR_UPDATE_EXISTING_DATA environment variable: '{update_existing_data}'. It SHOULD be either `true` or `false`. `false` is assumed. " - self.helper.log_warning(msg) - self.update_existing_data = "false" - - def _collect_intelligence(self) -> list: - """Collect intelligence from the source""" - raise NotImplementedError - - def _get_interval(self) -> int: - """Returns the interval to use for the connector - - This SHOULD return always the interval in seconds. If the connector is expecting that the parameter is received as hours, uncomment as necessary. - """ - unit = self.interval[-1:] - value = self.interval[:-1] - - try: - if unit == "d": - # In days: - return int(value) * 60 * 60 * 24 - elif unit == "h": - # In hours: - return int(value) * 60 * 60 - elif unit == "m": - # In minutes: - return int(value) * 60 - elif unit == "s": - # In seconds: - return int(value) - except Exception as e: - self.helper.log_error( - f"Error when converting CONNECTOR_RUN_EVERY environment variable: '{self.interval}'. {str(e)}" - ) - raise ValueError( - f"Error when converting CONNECTOR_RUN_EVERY environment variable: '{self.interval}'. {str(e)}" - ) - - def run(self) -> None: - # Main procedure - self.helper.log_info(f"Starting {self.helper.connect_name} connector...") - while True: - try: - # Get the current timestamp and check - timestamp = int(time.time()) - current_state = self.helper.get_state() - if current_state is not None and "last_run" in current_state: - last_run = current_state["last_run"] - self.helper.log_info( - f"{self.helper.connect_name} connector last run: " - + datetime.fromtimestamp(last_run, tz=timezone.utc).strftime( - "%Y-%m-%d %H:%M:%S" - ) - ) - else: - last_run = None - self.helper.log_info( - f"{self.helper.connect_name} connector has never run" - ) - - # If the last_run is more than interval-1 day - if last_run is None or ((timestamp - last_run) >= self._get_interval()): - self.helper.log_info(f"{self.helper.connect_name} will run!") - now = datetime.fromtimestamp(timestamp, tz=timezone.utc) - friendly_name = f"{self.helper.connect_name} run @ " + now.strftime( - "%Y-%m-%d %H:%M:%S" - ) - work_id = self.helper.api.work.initiate_work( - self.helper.connect_id, friendly_name - ) - - try: - # Performing the collection of intelligence - bundle_objects = self._collect_intelligence() - bundle = stix2.Bundle( - objects=bundle_objects, allow_custom=True - ).serialize() - - self.helper.log_info( - f"Sending {len(bundle_objects)} STIX objects to OpenCTI..." - ) - self.helper.send_stix2_bundle( - bundle, - update=self.update_existing_data, - work_id=work_id, - ) - except Exception as e: - self.helper.log_error(str(e)) - - # Store the current timestamp as a last run - message = ( - f"{self.helper.connect_name} connector successfully run, storing last_run as " - + str(timestamp) - ) - self.helper.log_info(message) - - self.helper.log_debug( - f"Grabbing current state and update it with last_run: {timestamp}" - ) - current_state = self.helper.get_state() - if current_state: - current_state["last_run"] = timestamp - else: - current_state = {"last_run": timestamp} - self.helper.set_state(current_state) - - self.helper.api.work.to_processed(work_id, message) - self.helper.log_info( - "Last_run stored, next run in: " - + str(round(self._get_interval() / 60 / 60, 2)) - + " hours" - ) - else: - new_interval = self._get_interval() - (timestamp - last_run) - self.helper.log_info( - f"{self.helper.connect_name} connector will not run, next run in: " - + str(round(new_interval / 60 / 60, 2)) - + " hours" - ) - - except (KeyboardInterrupt, SystemExit): - self.helper.log_info(f"{self.helper.connect_name} connector stopped") - sys.exit(0) - except Exception as e: - self.helper.log_error(str(e)) - - if self.helper.connect_run_and_terminate: - self.helper.log_info(f"{self.helper.connect_name} connector ended") - sys.exit(0) - - time.sleep(60) diff --git a/external-import/anyrun-feed/src/requirements.txt b/external-import/anyrun-feed/src/requirements.txt index e9684a32073..e0c312981eb 100644 --- a/external-import/anyrun-feed/src/requirements.txt +++ b/external-import/anyrun-feed/src/requirements.txt @@ -1 +1,3 @@ -pycti==7.260309.0 \ No newline at end of file +pycti==7.260515.0 +requests==2.33.0 +anyrun-sdk==1.14.12 \ No newline at end of file diff --git a/external-import/bambenek/src/requirements.txt b/external-import/bambenek/src/requirements.txt index e9684a32073..f5b8181a0c7 100644 --- a/external-import/bambenek/src/requirements.txt +++ b/external-import/bambenek/src/requirements.txt @@ -1 +1 @@ -pycti==7.260309.0 \ No newline at end of file +pycti==7.260515.0 \ No newline at end of file diff --git a/external-import/cape/src/requirements.txt b/external-import/cape/src/requirements.txt index b93d0bbaac3..b6884036146 100644 --- a/external-import/cape/src/requirements.txt +++ b/external-import/cape/src/requirements.txt @@ -2,11 +2,11 @@ antlr4-python3-runtime chardet==5.2.0 datefinder==0.7.3 idna==3.11 -pycti==7.260309.0 +pycti==7.260515.0 python-dateutil==2.9.0.post0 pytz==2025.2 regex==2024.11.6 simplejson==3.20.2 six==1.17.0 stix2-patterns==2.0.0 -urllib3==2.6.3 +urllib3==2.7.0 diff --git a/external-import/catalyst/requirements.txt b/external-import/catalyst/requirements.txt index 12c92b36312..bd26845a5c7 100644 --- a/external-import/catalyst/requirements.txt +++ b/external-import/catalyst/requirements.txt @@ -1,6 +1,6 @@ -pycti==7.260309.0 +pycti==7.260515.0 PyYAML==6.0.3 python-dateutil==2.9.0 -requests +requests<=2.33.0 validators==0.35.0 python-catalyst \ No newline at end of file diff --git a/external-import/catalyst/tests/test-requirements.txt b/external-import/catalyst/tests/test-requirements.txt index 80a0985cb7d..6f308c1608f 100644 --- a/external-import/catalyst/tests/test-requirements.txt +++ b/external-import/catalyst/tests/test-requirements.txt @@ -1,5 +1,5 @@ # Test dependencies pytest>=7.0.0 pytest-mock>=3.10.0 -pycti==7.260309.0 +pycti==7.260515.0 python-catalyst \ No newline at end of file diff --git a/external-import/chapsvision/src/chapsvision.py b/external-import/chapsvision/src/chapsvision.py index d6b7bf8aca7..1539fe0be1b 100644 --- a/external-import/chapsvision/src/chapsvision.py +++ b/external-import/chapsvision/src/chapsvision.py @@ -3,7 +3,6 @@ import os import sys import time -import uuid from datetime import datetime, timedelta import pytz @@ -11,7 +10,11 @@ import stix2 import yaml from dateutil.parser import parse -from pycti import OpenCTIConnectorHelper, get_config_variable +from pycti import ( + CustomObservableMediaContent, + OpenCTIConnectorHelper, + get_config_variable, +) class Chapsvision: @@ -90,6 +93,16 @@ def send_bundle(self, work_id: str, serialized_bundle: str) -> None: except Exception as e: self.helper.log_error(f"Error while sending bundle: {e}") + def _generate_id_for_media_content(self, url: str) -> str: + """Generate deterministic STIX ID for a Media Content object + + :param url: the URL of the Media Content + :type url: str + :return: STIX ID for the Media Content + :rtype: str + """ + return CustomObservableMediaContent(url=url).id + def generate_micro_blogging(self, doc): objects = [] channel = None @@ -114,7 +127,7 @@ def generate_micro_blogging(self, doc): for hashtag in doc["hashtag"]: labels.append(hashtag.replace("#", "")) media_content = { - "id": "media-content--" + str(uuid.uuid4()), + "id": self._generate_id_for_media_content(doc["link"]), "type": "media-content", "media_category": doc["broadcaster_category"], "url": doc["link"], @@ -158,7 +171,7 @@ def generate_website(self, doc): for hashtag in doc["hashtag"]: labels.append(hashtag.replace("#", "")) media_content = { - "id": "media-content--" + str(uuid.uuid4()), + "id": self._generate_id_for_media_content(doc["link"]), "type": "media-content", "media_category": doc["broadcaster_category"], "url": doc["link"], @@ -202,7 +215,7 @@ def generate_messaging(self, doc): for hashtag in doc["hashtag"]: labels.append(hashtag.replace("#", "")) media_content = { - "id": "media-content--" + str(uuid.uuid4()), + "id": self._generate_id_for_media_content(doc["link"]), "type": "media-content", "media_category": doc["broadcaster_category"], "url": doc["link"], diff --git a/external-import/chapsvision/src/requirements.txt b/external-import/chapsvision/src/requirements.txt index e1e0bd9718c..e3a19393203 100644 --- a/external-import/chapsvision/src/requirements.txt +++ b/external-import/chapsvision/src/requirements.txt @@ -1 +1 @@ -pycti==7.260309.0 +pycti==7.260515.0 diff --git a/external-import/chapsvision/src/tests/test_chapvision.py b/external-import/chapsvision/src/tests/test_chapvision.py new file mode 100644 index 00000000000..918d7f53e8c --- /dev/null +++ b/external-import/chapsvision/src/tests/test_chapvision.py @@ -0,0 +1,195 @@ +import unittest +from unittest.mock import MagicMock, mock_open, patch, sentinel + +import chapsvision as module + + +@patch.object(module, "base64") +@patch.object(module, "OpenCTIConnectorHelper") +@patch.object(module, "os") +class ChapsvisionTest(unittest.TestCase): + def test_generate_id_for_media_content_determinism(self, m_os, m_helper, m_base64): + """testing duplicate content provide identical ID for media-content""" + _url = "https://foo.bar" + _other_url = "https://foo.bar/error" + + m_os.path.isfile.return_value = False + with patch("builtins.open", mock_open()) as _: + _connector = module.Chapsvision() + + first_id = _connector._generate_id_for_media_content(_url) + second_id = _connector._generate_id_for_media_content(_url) + other_id = _connector._generate_id_for_media_content(_other_url) + + self.assertEqual(first_id, second_id) + self.assertNotEqual(first_id, other_id) + + @patch.object(module.Chapsvision, "_generate_id_for_media_content") + def test_generate_micro_blogging_link_only_single( + self, m_gen_id, m_os, m_helper, m_base64 + ): + """testing serialization by generate_micro_blogging for link only data (single)""" + _link = sentinel.link + _broadcaster_category = sentinel.broadcaster_category + _doc = { + "link": _link, + "broadcaster": MagicMock(), + "broadcaster_category": _broadcaster_category, + } + + m_os.path.isfile.return_value = False + with patch("builtins.open", mock_open()) as _: + _connector = module.Chapsvision() + + objects = _connector.generate_micro_blogging(_doc) + + m_gen_id.assert_called_once_with(sentinel.link) + self.assertEqual(len(objects), 1) + self.assertEqual(objects[0]["media_category"], sentinel.broadcaster_category) + self.assertEqual(objects[0]["url"], sentinel.link) + + @patch.object(module.Chapsvision, "_generate_id_for_media_content") + def test_generate_micro_blogging_link_only_duplicate( + self, m_gen_id, m_os, m_helper, m_base64 + ): + """testing serialization by generate_micro_blogging for link only data (duplicate)""" + _link = sentinel.link + _broadcaster_category = sentinel.broadcaster_category + _doc = { + "link": _link, + "broadcaster": MagicMock(), + "broadcaster_category": _broadcaster_category, + } + + m_os.path.isfile.return_value = False + with patch("builtins.open", mock_open()) as _: + _connector = module.Chapsvision() + + objects_first_run = _connector.generate_micro_blogging(_doc) + objects_second_run = _connector.generate_micro_blogging(_doc) + + self.assertEqual(m_gen_id._mock_call_count, 2) + self.assertEqual(len(objects_first_run), 1) + self.assertEqual(len(objects_second_run), 1) + self.assertEqual( + objects_first_run[0]["media_category"], sentinel.broadcaster_category + ) + self.assertEqual( + objects_first_run[0]["media_category"], + objects_second_run[0]["media_category"], + ) + self.assertEqual(objects_first_run[0]["url"], sentinel.link) + self.assertEqual(objects_first_run[0]["url"], objects_second_run[0]["url"]) + self.assertEqual(objects_first_run[0]["id"], objects_second_run[0]["id"]) + + @patch.object(module.Chapsvision, "_generate_id_for_media_content") + def test_generate_website_single(self, m_gen_id, m_os, m_helper, m_base64): + """testing serialization by generate_website (single)""" + _link = sentinel.link + _broadcaster_category = sentinel.broadcaster_category + _doc = { + "link": _link, + "content_provider": MagicMock(), + "broadcaster_category": _broadcaster_category, + } + + m_os.path.isfile.return_value = False + with patch("builtins.open", mock_open()) as _: + _connector = module.Chapsvision() + + objects = _connector.generate_website(_doc) + + m_gen_id.assert_called_once_with(sentinel.link) + self.assertEqual(len(objects), 1) + self.assertEqual(objects[0]["media_category"], sentinel.broadcaster_category) + self.assertEqual(objects[0]["url"], sentinel.link) + + @patch.object(module.Chapsvision, "_generate_id_for_media_content") + def test_generate_website_duplicate(self, m_gen_id, m_os, m_helper, m_base64): + """testing serialization by generate_website (duplicate)""" + _link = sentinel.link + _broadcaster_category = sentinel.broadcaster_category + _doc = { + "link": _link, + "content_provider": MagicMock(), + "broadcaster_category": _broadcaster_category, + } + + m_os.path.isfile.return_value = False + with patch("builtins.open", mock_open()) as _: + _connector = module.Chapsvision() + + objects_first_run = _connector.generate_website(_doc) + objects_second_run = _connector.generate_website(_doc) + + self.assertEqual(m_gen_id._mock_call_count, 2) + self.assertEqual(len(objects_first_run), 1) + self.assertEqual(len(objects_second_run), 1) + self.assertEqual( + objects_first_run[0]["media_category"], sentinel.broadcaster_category + ) + self.assertEqual( + objects_first_run[0]["media_category"], + objects_second_run[0]["media_category"], + ) + self.assertEqual(objects_first_run[0]["url"], sentinel.link) + self.assertEqual(objects_first_run[0]["url"], objects_second_run[0]["url"]) + self.assertEqual(objects_first_run[0]["id"], objects_second_run[0]["id"]) + + @patch.object(module.Chapsvision, "_generate_id_for_media_content") + def test_generate_messaging_link_only_single( + self, m_gen_id, m_os, m_helper, m_base64 + ): + """testing serialization by generate_messaging_link for link only data (single)""" + _link = sentinel.link + _broadcaster_category = sentinel.broadcaster_category + _doc = { + "link": _link, + "broadcaster": MagicMock(), + "broadcaster_category": _broadcaster_category, + } + + m_os.path.isfile.return_value = False + with patch("builtins.open", mock_open()) as _: + _connector = module.Chapsvision() + + objects = _connector.generate_messaging(_doc) + + m_gen_id.assert_called_once_with(sentinel.link) + self.assertEqual(len(objects), 1) + self.assertEqual(objects[0]["media_category"], sentinel.broadcaster_category) + self.assertEqual(objects[0]["url"], sentinel.link) + + @patch.object(module.Chapsvision, "_generate_id_for_media_content") + def test_generate_messaging_link_only_duplicate( + self, m_gen_id, m_os, m_helper, m_base64 + ): + """testing serialization by generate_messaging_link for link only data (duplicate)""" + _link = sentinel.link + _broadcaster_category = sentinel.broadcaster_category + _doc = { + "link": _link, + "broadcaster": MagicMock(), + "broadcaster_category": _broadcaster_category, + } + + m_os.path.isfile.return_value = False + with patch("builtins.open", mock_open()) as _: + _connector = module.Chapsvision() + + objects_first_run = _connector.generate_messaging(_doc) + objects_second_run = _connector.generate_messaging(_doc) + + self.assertEqual(m_gen_id._mock_call_count, 2) + self.assertEqual(len(objects_first_run), 1) + self.assertEqual(len(objects_second_run), 1) + self.assertEqual( + objects_first_run[0]["media_category"], sentinel.broadcaster_category + ) + self.assertEqual( + objects_first_run[0]["media_category"], + objects_second_run[0]["media_category"], + ) + self.assertEqual(objects_first_run[0]["url"], sentinel.link) + self.assertEqual(objects_first_run[0]["url"], objects_second_run[0]["url"]) + self.assertEqual(objects_first_run[0]["id"], objects_second_run[0]["id"]) diff --git a/external-import/checkfirst-import-connector/README.md b/external-import/checkfirst-import-connector/README.md index 7cd652f79ce..7530ca0a8fc 100644 --- a/external-import/checkfirst-import-connector/README.md +++ b/external-import/checkfirst-import-connector/README.md @@ -1,16 +1,59 @@ # OpenCTI Connector: Checkfirst Import -Ingest Checkfirst articles from the Checkfirst API into OpenCTI as STIX 2.1 bundles. +Ingest Checkfirst articles from the Checkfirst API into OpenCTI as STIX 2.1 bundles, tracking the Pravda Network (Portal-Kombat) Russian influence operation. This is an `EXTERNAL_IMPORT` connector that: +- On first run, sends a one-off bundle of known Pravda network infrastructure (36 `pravda-XX.com` domains, 60+ `news-pravda.com` subdomains, shared hosting IP `178.21.15.85`) attributed to the Pravda Network intrusion set per SGDSN/VIGINUM reports (Feb + Apr 2024) - Fetches articles from a paginated REST API (`Api-Key` header auth) -- Maps each article to OpenCTI STIX objects: `Channel`, `Media-Content`, `URL`, and relationships -- Channels sourced from `https://t.me/` are typed as `Telegram`; all others as `website` -- Sends bundles via `helper.send_stix2_bundle` +- Maps each article to STIX 2.1 objects and sends them in batches - Persists page-based progress in OpenCTI connector state so reruns resume where they left off - Records a `last_run` unix timestamp in state for operational visibility +## STIX object model + +### First-run infrastructure bundle + +Sent once when `start_page == 1` (first ever run, or `CHECKFIRST_FORCE_REPROCESS=true`): + +``` +IntrusionSet (Pravda Network) [aliases: Portal-Kombat, Pravda Network IMS] + ← attributed-to ← Campaign 2023 [Pravda Network Campaigns 2023] + +Campaign 2023 + → uses → Infrastructure (pravda-XX.com) [per domain, start_time = first_observed] + → consists-of → DomainName (pravda-XX.com) + → consists-of → IPv4Address (178.21.15.85, stop_time = 2024-12-31) + Subdomain (news-pravda.com subdomain) + → related-to → Infrastructure (pravda-XX.com) +``` + +### Per-article ingestion + +For each article row fetched from the API: + +``` +Campaign YYYY [Pravda Network Campaigns YYYY, first_seen = YYYY-01-01, special-cased 2023-09-01] + → attributed-to → IntrusionSet (Pravda Network) + → uses → Infrastructure (article domain) + → consists-of → DomainName (article domain) + → uses → Channel/website (article domain) [start_time = publication date] + → related-to → Infrastructure (article domain) + → publishes → Media-Content (article) + → related-to → Channel/source (Telegram or website origin) + DomainName (article domain) + → related-to → Channel/website (article domain) + Media-Content (article) + → related-to → Channel/source + → related-to → URL (alternate URLs, if any) + Channel/website (article domain) + → related-to → DomainName (pravda-XX.com parent, if subdomain of news-pravda.com) + Channel/source (Telegram or website origin) + → related-to → Channel/max.ru (path after max.ru/, if source URL is on max.ru) +``` + +All STIX IDs are deterministic — reruns produce no duplicates. + ## Requirements - A running OpenCTI stack (platform + worker) at a version matching `pycti` in `src/requirements.txt` @@ -19,31 +62,13 @@ This is an `EXTERNAL_IMPORT` connector that: ## Configuration -All settings can be provided as environment variables or via `config.yml` (see `config.yml.sample`). - -### OpenCTI / connector +Configuration parameters can be provided in either **`config.yml`** file, **`.env`** file or directly as **environment variables** (e.g. from **`docker-compose.yml`** for Docker deployments). -| Variable | Description | Default | -|---|---|---| -| `OPENCTI_URL` | OpenCTI platform URL | — | -| `OPENCTI_TOKEN` | OpenCTI API token | — | -| `CONNECTOR_ID` | Stable UUID for this connector instance | — | -| `CONNECTOR_NAME` | Display name | `Checkfirst Import Connector` | -| `CONNECTOR_SCOPE` | Connector scope metadata | `checkfirst` | -| `CONNECTOR_LOG_LEVEL` | Log verbosity (`debug`, `info`, `warn`, `error`) | `info` | -| `CONNECTOR_DURATION_PERIOD` | ISO 8601 duration between runs | `P7D` | +Priority: **YAML > .env > environment > defaults**. -### Checkfirst-specific +### Configuration variables -| Variable | Description | Default | -|---|---|---| -| `CHECKFIRST_API_URL` | Base URL of the Checkfirst API | — | -| `CHECKFIRST_API_KEY` | API key (sent as `Api-Key` request header) | — | -| `CHECKFIRST_API_ENDPOINT` | Endpoint path | `/v1/articles` | -| `CHECKFIRST_SINCE` | Only ingest articles published on or after this date. Accepts ISO 8601 absolute dates (`2024-01-01T00:00:00Z`) or durations relative to now (`P365D`, `P1Y`, `P6M`, `P4W`) | `P365D` | -| `CHECKFIRST_TLP_LEVEL` | TLP marking applied to all created objects (`clear`, `green`, `amber`, `amber+strict`, `red`) | `clear` | -| `CHECKFIRST_FORCE_REPROCESS` | Ignore saved state and restart from page 1 | `false` | -| `CHECKFIRST_MAX_ROW_BYTES` | Skip API rows exceeding this approximate byte size | unset | +Find all the configuration variables available here: [Connector Configurations](./__metadata__/CONNECTOR_CONFIG_DOC.md) See `.env.sample` for a ready-to-use local template. @@ -83,15 +108,23 @@ See `.env.sample` for a ready-to-use local template. - **Data > Connectors** — confirm the connector registers and shows as active - **Data > Ingestion** — confirm a new work item is created and completes -- Search for ingested objects: - - `Media-Content` entities with `publication_date` +- After first run, search for: + - 36 `Domain-Name` observables for `pravda-XX.com` domains + - 36 `Infrastructure` objects wrapping those domains + - 1 `IPv4-Addr` observable `178.21.15.85` + - 60+ `Domain-Name` observables for `news-pravda.com` subdomains + - `Campaign` objects per year (`Pravda Network Campaigns 2023`, `Pravda Network Campaigns 2024`, …) + - `IntrusionSet` — Pravda Network (aliases: Portal-Kombat, Pravda Network IMS) +- Per article: + - `Media-Content` with `publication_date` - `Channel` entities (type `Telegram` or `website`) - - `URL` observables - - Relationships: `publishes`, `related-to`, `attributed-to` + - `Infrastructure` wrapping the publishing domain + - Relationships: `uses`, `consists-of`, `publishes`, `related-to`, `attributed-to` ## Notes - STIX IDs are deterministic — reruns do not create duplicate entities. +- The infrastructure bundle is sent only when `start_page == 1`. Set `CHECKFIRST_FORCE_REPROCESS=true` to resend it. - The connector saves the last successfully processed API page in OpenCTI state; on restart it resumes from the next page. - The `since` filter is resolved to an absolute UTC datetime at connector startup; duration strings like `P365D` are supported for convenience. -- API requests use a 300-second timeout per page. The CheckFirst infrastructure can be slow to respond on large result pages, so a generous timeout is used to avoid spurious network errors. +- API requests use a 300-second timeout per page. The Checkfirst infrastructure can be slow to respond on large result pages. diff --git a/external-import/checkfirst-import-connector/__metadata__/CONNECTOR_CONFIG_DOC.md b/external-import/checkfirst-import-connector/__metadata__/CONNECTOR_CONFIG_DOC.md new file mode 100644 index 00000000000..66d8b4025cb --- /dev/null +++ b/external-import/checkfirst-import-connector/__metadata__/CONNECTOR_CONFIG_DOC.md @@ -0,0 +1,22 @@ +# Connector Configurations + +Below is an exhaustive enumeration of all configurable parameters available, each accompanied by detailed explanations of their purposes, default behaviors, and usage guidelines to help you understand and utilize them effectively. + +### Type: `object` + +| Property | Type | Required | Possible values | Default | Description | +| -------- | ---- | -------- | --------------- | ------- | ----------- | +| OPENCTI_URL | `string` | ✅ | Format: [`uri`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | The base URL of the OpenCTI instance. | +| OPENCTI_TOKEN | `string` | ✅ | string | | The API token to connect to OpenCTI. | +| CHECKFIRST_API_URL | `string` | ✅ | Format: [`uri`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | Base URL for the API endpoint (e.g., https://api.example.com). | +| CHECKFIRST_API_KEY | `string` | ✅ | Format: [`password`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | API key for authentication (sent in Api-Key header). | +| CONNECTOR_NAME | `string` | | string | `"Checkfirst Import Connector"` | The name of the connector. | +| CONNECTOR_SCOPE | `array` | | string | `["checkfirst"]` | The scope of the connector. | +| CONNECTOR_LOG_LEVEL | `string` | | `debug` `info` `warn` `warning` `error` | `"error"` | The minimum level of logs to display. | +| CONNECTOR_TYPE | `const` | | `EXTERNAL_IMPORT` | `"EXTERNAL_IMPORT"` | | +| CONNECTOR_DURATION_PERIOD | `string` | | Format: [`duration`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | `"P7D"` | The period of time to await between two runs of the connector. | +| CHECKFIRST_API_ENDPOINT | `string` | | string | `"/v1/articles"` | API endpoint path (e.g., /v1/articles). | +| CHECKFIRST_SINCE | `string` | | Format: [`date-time`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | `"P1Y"` | Only ingest articles published on or after this date. Accepts ISO 8601 absolute dates (e.g., 2024-01-01T00:00:00Z) or durations relative to now (e.g., P365D, P1Y, P6M, P4W). Defaults to 1 year ago. | +| CHECKFIRST_FORCE_REPROCESS | `boolean` | | boolean | `false` | If true, ignore any saved connector state and start from page 1. Useful for debugging or re-importing all data. | +| CHECKFIRST_TLP_LEVEL | `string` | | `clear` `white` `green` `amber` `amber+strict` `red` | `"clear"` | TLP marking level applied to created STIX entities. | +| CHECKFIRST_MAX_ROW_BYTES | `integer` | | integer | `null` | Skip any API row larger than this approximate number of bytes. | diff --git a/external-import/checkfirst-import-connector/__metadata__/connector_config_schema.json b/external-import/checkfirst-import-connector/__metadata__/connector_config_schema.json new file mode 100644 index 00000000000..0bfa5e5ecc2 --- /dev/null +++ b/external-import/checkfirst-import-connector/__metadata__/connector_config_schema.json @@ -0,0 +1,110 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://www.filigran.io/connectors/checkfirst-import-connector_config.schema.json", + "type": "object", + "properties": { + "OPENCTI_URL": { + "description": "The base URL of the OpenCTI instance.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "OPENCTI_TOKEN": { + "description": "The API token to connect to OpenCTI.", + "type": "string" + }, + "CONNECTOR_NAME": { + "default": "Checkfirst Import Connector", + "description": "The name of the connector.", + "type": "string" + }, + "CONNECTOR_SCOPE": { + "default": [ + "checkfirst" + ], + "description": "The scope of the connector.", + "items": { + "type": "string" + }, + "type": "array" + }, + "CONNECTOR_LOG_LEVEL": { + "default": "error", + "description": "The minimum level of logs to display.", + "enum": [ + "debug", + "info", + "warn", + "warning", + "error" + ], + "type": "string" + }, + "CONNECTOR_TYPE": { + "const": "EXTERNAL_IMPORT", + "default": "EXTERNAL_IMPORT", + "type": "string" + }, + "CONNECTOR_DURATION_PERIOD": { + "default": "P7D", + "description": "The period of time to await between two runs of the connector.", + "format": "duration", + "type": "string" + }, + "CHECKFIRST_API_URL": { + "description": "Base URL for the API endpoint (e.g., https://api.example.com).", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "CHECKFIRST_API_ENDPOINT": { + "default": "/v1/articles", + "description": "API endpoint path (e.g., /v1/articles).", + "type": "string" + }, + "CHECKFIRST_API_KEY": { + "description": "API key for authentication (sent in Api-Key header).", + "format": "password", + "type": "string", + "writeOnly": true + }, + "CHECKFIRST_SINCE": { + "default": "P1Y", + "description": "Only ingest articles published on or after this date. Accepts ISO 8601 absolute dates (e.g., 2024-01-01T00:00:00Z) or durations relative to now (e.g., P365D, P1Y, P6M, P4W). Defaults to 1 year ago.", + "format": "date-time", + "type": "string" + }, + "CHECKFIRST_FORCE_REPROCESS": { + "default": false, + "description": "If true, ignore any saved connector state and start from page 1. Useful for debugging or re-importing all data.", + "type": "boolean" + }, + "CHECKFIRST_TLP_LEVEL": { + "description": "TLP marking level applied to created STIX entities.", + "enum": [ + "clear", + "white", + "green", + "amber", + "amber+strict", + "red" + ], + "type": "string", + "default": "clear" + }, + "CHECKFIRST_MAX_ROW_BYTES": { + "default": null, + "description": "Skip any API row larger than this approximate number of bytes.", + "type": "integer" + } + }, + "required": [ + "OPENCTI_URL", + "OPENCTI_TOKEN", + "CHECKFIRST_API_URL", + "CHECKFIRST_API_KEY" + ], + "additionalProperties": true +} \ No newline at end of file diff --git a/external-import/checkfirst-import-connector/__metadata__/connector_manifest.json b/external-import/checkfirst-import-connector/__metadata__/connector_manifest.json index ebc4beccf40..5cdb35f6724 100644 --- a/external-import/checkfirst-import-connector/__metadata__/connector_manifest.json +++ b/external-import/checkfirst-import-connector/__metadata__/connector_manifest.json @@ -5,15 +5,15 @@ "short_description": "Import Checkfirst articles into OpenCTI.", "logo": null, "use_cases": [], - "verified": false, - "last_verified_date": null, + "verified": true, + "last_verified_date": "2026-03-20", "playbook_supported": false, "max_confidence_level": 50, "support_version": ">= 6.3.0", "subscription_link": "", "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/external-import/checkfirst-import-connector", - "manager_supported": false, + "manager_supported": true, "container_version": "rolling", "container_image": "opencti/connector-checkfirst-import-connector", "container_type": "EXTERNAL_IMPORT" -} +} \ No newline at end of file diff --git a/external-import/checkfirst-import-connector/docker-compose.yml b/external-import/checkfirst-import-connector/docker-compose.yml index 432e14ebe85..50a2f8d1cfb 100644 --- a/external-import/checkfirst-import-connector/docker-compose.yml +++ b/external-import/checkfirst-import-connector/docker-compose.yml @@ -1,6 +1,6 @@ services: connector-checkfirst-import-connector: - build: . + image: opencti/connector-checkfirst-import-connector:latest environment: - OPENCTI_URL=http://localhost - OPENCTI_TOKEN=ChangeMe @@ -12,13 +12,5 @@ services: - CHECKFIRST_API_URL=${CHECKFIRST_API_URL} - CHECKFIRST_API_KEY=${CHECKFIRST_API_KEY} - CHECKFIRST_API_ENDPOINT=${CHECKFIRST_API_ENDPOINT} - - CHECKFIRST_SINCE=${CHECKFIRST_SINCE:-P365D} + - CHECKFIRST_SINCE=${CHECKFIRST_SINCE} - CHECKFIRST_TLP_LEVEL=${CHECKFIRST_TLP_LEVEL} - networks: - - default - restart: unless-stopped - -networks: - default: - external: true - name: docker_default diff --git a/external-import/checkfirst-import-connector/src/checkfirst_client/__init__.py b/external-import/checkfirst-import-connector/src/checkfirst_client/__init__.py new file mode 100644 index 00000000000..35101894490 --- /dev/null +++ b/external-import/checkfirst-import-connector/src/checkfirst_client/__init__.py @@ -0,0 +1,5 @@ +"""API Client for CheckFirst.""" + +from checkfirst_client.api_client import CheckfirstClient + +__all__ = ["CheckfirstClient"] diff --git a/external-import/checkfirst-import-connector/src/checkfirst_client/api_client.py b/external-import/checkfirst-import-connector/src/checkfirst_client/api_client.py new file mode 100644 index 00000000000..d45900e5b5b --- /dev/null +++ b/external-import/checkfirst-import-connector/src/checkfirst_client/api_client.py @@ -0,0 +1,190 @@ +from datetime import datetime +from json import JSONDecodeError +from typing import Any, Generator + +import requests +from checkfirst_client.api_models import Article +from pycti import OpenCTIConnectorHelper +from pydantic import HttpUrl, ValidationError +from requests.adapters import HTTPAdapter, Retry +from utils.run_reporter import SkipReason, run_reporter + +# Timeout of 5 minutes: the CheckFirst infrastructure can be slow to respond +# on large pages, so a generous timeout avoids spurious errors. +TIMEOUT_SECONDS = 300 +RETRY_BACKOFF_SECONDS = 5 +MAX_RETRIES = 3 + + +class CheckfirstAPIError(Exception): + """Raised when Checkfirst API requests fail.""" + + +def get_skip_reason_from_validation_error(err: ValidationError) -> SkipReason | None: + """Determine the appropriate SkipReason based on the ValidationError details.""" + for error in err.errors(): + if error.get("type") == "missing": + return SkipReason.ROW_MISSING_REQUIRED_FIELDS + elif error.get("loc"): + loc = error["loc"] + field_name = loc[0] if isinstance(loc, tuple) else loc + if field_name == "published_date": + return SkipReason.ROW_INVALID_PUBLICATION_DATE + return None + + +class CheckfirstClient: + def __init__( + self, + helper: OpenCTIConnectorHelper, + base_url: HttpUrl, + api_key: str, + ): + """ + Initialize the client with necessary configuration. + For log purpose, the connector's helper CAN be injected. + Other arguments CAN be added (e.g. `api_key`) if necessary. + + Args: + helper (OpenCTIConnectorHelper): The helper of the connector. Used for logs. + base_url (str): The external API base URL. + api_key (str): The API key to authenticate the connector to the external API. + """ + self.helper = helper + self.logger = self.helper.connector_logger + + self.base_url = base_url + self.api_key = api_key + + def fetch_paginated_data( + self, + api_endpoint: str, + start_page: int = 1, + since: datetime | None = None, + ) -> Generator[dict[str, Any], None, None]: + """Fetch paginated data from the API endpoint. + + Args: + api_endpoint: Endpoint path (e.g., "/v1/articles") + start_page: Starting page number for pagination (default: 1) + since: Only fetch articles published on or after this ISO 8601 date + + Yields: + Dictionary objects representing each row/article from the API + + Raises: + CheckfirstAPIError: If the API request fails or returns invalid data + """ + base_url = str(self.base_url).rstrip("/") + endpoint = api_endpoint if api_endpoint.startswith("/") else f"/{api_endpoint}" + endpoint_url = f"{base_url}{endpoint}" + + retry_strategy = Retry( + allowed_methods=["GET"], + status_forcelist=[429, 500, 502, 503, 504], + total=MAX_RETRIES, + backoff_factor=RETRY_BACKOFF_SECONDS, + respect_retry_after_header=True, + ) + http_adapter = HTTPAdapter(max_retries=retry_strategy) + + session = requests.Session() + session.mount(endpoint_url, http_adapter) + session.headers.update({"Api-Key": self.api_key, "Accept": "application/json"}) + + current_page = start_page + has_more = True + while has_more: + params = {"page": current_page} + if since: + params["since"] = since.isoformat(timespec="seconds").replace( + "+00:00", "Z" + ) + + try: + self.logger.debug( + f"[API] Fetching {endpoint_url}", + {"params": {"page": current_page, "since": since}}, + ) + + response = session.get( + endpoint_url, + params=params, + timeout=TIMEOUT_SECONDS, + ) + response.raise_for_status() + + data = response.json() + + if "data" not in data: + raise CheckfirstAPIError( + f"Unrecognized API response format: {list(data.keys())}" + ) + + items = data["data"] + if not items: + has_more = False + + yield from items # one page contains 1_000 items + + has_more = data.get("pagination", {}).get("has_next", False) + current_page += 1 + except requests.HTTPError as err: + raise CheckfirstAPIError( + f"HTTP error {err.response.status_code} when fetching page " + f"{current_page}: {err.response.reason}" + ) from err + except JSONDecodeError as err: + raise CheckfirstAPIError( + f"Invalid JSON response from API on page {current_page}" + ) from err + except requests.RequestException as err: # fallback + raise CheckfirstAPIError( + f"Error when fetching page {current_page}: {err}" + ) from err + + def iter_api_rows( + self, + api_endpoint: str, + start_page: int = 1, + since: datetime | None = None, + max_row_bytes: int | None = None, + ) -> Generator[Article, None, None]: + """Iterate over validated rows from the API endpoint. + + Args: + api_endpoint: API endpoint path + start_page: Starting page number for pagination + since: Only fetch articles published on or after this ISO 8601 date + max_row_bytes: Skip any API row larger than this approximate number of bytes + + Yields: + Article objects with validated data + """ + row_number = 0 + + for item in self.fetch_paginated_data( + api_endpoint=api_endpoint, + start_page=start_page, + since=since, + ): + row_number += 1 + + # Basic row-size guard (approximate) + if max_row_bytes is not None: + approx = sum(len(str(v or "")) for v in item.values()) + if approx > max_row_bytes: + run_reporter.skip(SkipReason.ROW_TOO_LARGE) + continue + + try: + yield Article(**item, row_number=row_number) + except ValidationError as err: + skip_reason = get_skip_reason_from_validation_error(err) + if skip_reason: + run_reporter.skip(skip_reason) + continue + else: + raise CheckfirstAPIError( + f"Data validation error for row {row_number}: {err}" + ) from err diff --git a/external-import/checkfirst-import-connector/src/checkfirst_client/api_models.py b/external-import/checkfirst-import-connector/src/checkfirst_client/api_models.py new file mode 100644 index 00000000000..afc44dfb3c5 --- /dev/null +++ b/external-import/checkfirst-import-connector/src/checkfirst_client/api_models.py @@ -0,0 +1,63 @@ +"""Data row model for data returned by Checkfirst API.""" + +from datetime import datetime, timezone + +from pydantic import ( + BaseModel, + ConfigDict, + Field, + field_validator, + model_validator, +) + + +class AlternateURL(BaseModel): + """Represents an alternate URL for an article.""" + + model_config = ConfigDict(frozen=True) + + url: str | None = Field(default=None) + language: str | None = Field(default=None) + + +class Article(BaseModel): + """Represents an article as returned by the Checkfirst API.""" + + model_config = ConfigDict(frozen=True) + + # For debug purpose only (not part of the API response) + row_number: int = Field() + # Required fields for Checkfirst client (if not present, the article will be skipped) + url: str = Field() + source_title: str = Field() + source_url: str = Field() + published_date: datetime = Field() + # Optional fields + id: str = Field(validation_alias="_id") + alternates_urls: list[AlternateURL] = Field(default=[]) + canonical_url: str | None = Field(default=None) + description: str | None = Field(default=None) + domain: str | None = Field(default=None) + keywords: list[str] = Field(default=[]) + language: str | None = Field(default=None) + og_description: str | None = Field(default=None) + og_image: str | None = Field(default=None) + scraped_date: datetime | None = Field(default=None) + title: str | None = Field(default=None) + + @model_validator(mode="before") + @classmethod + def remove_empty_strings(cls, data: dict) -> dict: + """Convert empty strings to None for optional fields.""" + for key in list(data.keys()): + if data[key] == "": + del data[key] + return data + + @field_validator("published_date", mode="after") + @classmethod + def set_published_date_to_utc(cls, value: datetime) -> datetime: + """Ensure published_date is in UTC.""" + if value.tzinfo is None: + return value.replace(tzinfo=timezone.utc) + return value.astimezone(timezone.utc) diff --git a/external-import/checkfirst-import-connector/src/checkfirst_dataset/__init__.py b/external-import/checkfirst-import-connector/src/checkfirst_dataset/__init__.py deleted file mode 100644 index f881aa5c703..00000000000 --- a/external-import/checkfirst-import-connector/src/checkfirst_dataset/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""Checkfirst OpenCTI connector package.""" diff --git a/external-import/checkfirst-import-connector/src/checkfirst_dataset/alternates.py b/external-import/checkfirst-import-connector/src/checkfirst_dataset/alternates.py deleted file mode 100644 index 4312b897bf8..00000000000 --- a/external-import/checkfirst-import-connector/src/checkfirst_dataset/alternates.py +++ /dev/null @@ -1,59 +0,0 @@ -"""Helpers for parsing the "Alternates" field. - -API rows may include an "Alternates" field containing additional -URLs (often separated by ';' and sometimes embedded in surrounding text). -We keep parsing permissive: extract http(s) URLs, trim common trailing -punctuation, and preserve order while de-duplicating. -""" - -import re -from typing import Iterable - -_URL_RE = re.compile(r"https?://\S+", re.IGNORECASE) - - -def parse_alternates(raw: str | None) -> list[str]: - """Extract a list of unique alternate URLs from a raw column value.""" - if raw is None: - return [] - - text = raw.strip() - if not text: - return [] - - urls: list[str] = [] - for token in re.split(r"[;,]", text): - token = token.strip() - if not token: - continue - - match = _URL_RE.search(token) - if not match: - continue - - url = match.group(0).rstrip(")],.;") - if url: - urls.append(url) - - # preserve order but remove duplicates - seen: set[str] = set() - out: list[str] = [] - for url in urls: - if url in seen: - continue - seen.add(url) - out.append(url) - - return out - - -def iter_unique(values: Iterable[str]) -> list[str]: - """Return unique values while preserving original order.""" - seen: set[str] = set() - out: list[str] = [] - for v in values: - if v in seen: - continue - seen.add(v) - out.append(v) - return out diff --git a/external-import/checkfirst-import-connector/src/checkfirst_dataset/api_client.py b/external-import/checkfirst-import-connector/src/checkfirst_dataset/api_client.py deleted file mode 100644 index 875dc15e51d..00000000000 --- a/external-import/checkfirst-import-connector/src/checkfirst_dataset/api_client.py +++ /dev/null @@ -1,104 +0,0 @@ -"""API client for fetching Checkfirst data from remote endpoints.""" - -import time -from typing import Any, Iterator - -import requests - -MAX_RETRIES = 3 -RETRY_BACKOFF_SECONDS = 5 - - -class APIError(Exception): - """Raised when API requests fail.""" - - pass - - -def fetch_paginated_data( - *, - api_url: str, - api_key: str, - api_endpoint: str, - start_page: int = 1, - since: str | None = None, -) -> Iterator[dict[str, Any]]: - """Fetch paginated data from the API endpoint. - - Args: - api_url: Base URL of the API (e.g., "https://api.example.com") - api_key: API key for authentication - api_endpoint: Endpoint path (e.g., "/v1/articles") - start_page: Starting page number for pagination (default: 1) - since: Only fetch articles published on or after this ISO 8601 date - - Yields: - Dictionary objects representing each row/article from the API - - Raises: - APIError: If the API request fails or returns invalid data - """ - base_url = api_url.rstrip("/") - endpoint = api_endpoint if api_endpoint.startswith("/") else f"/{api_endpoint}" - headers = {"Api-Key": api_key, "Accept": "application/json"} - - current_page = start_page - has_more = True - - session = requests.Session() - - while has_more: - params: dict[str, str] = {"page": str(current_page)} - if since: - params["since"] = since - url = f"{base_url}{endpoint}" - - last_exc: Exception | None = None - for attempt in range(1, MAX_RETRIES + 1): - try: - # 300 s: the CheckFirst infrastructure can be slow to respond - # on large pages, so a generous timeout avoids spurious errors. - response = session.get(url, headers=headers, params=params, timeout=300) - response.raise_for_status() - - data = response.json() - - if "data" not in data: - raise APIError( - f"Unrecognized API response format: {list(data.keys())}" - ) - - items = data["data"] - has_more = data.get("pagination", {}).get("has_next", False) - - if not items: - has_more = False - break - - yield from items - current_page += 1 - break # success — exit retry loop - - except requests.HTTPError as exc: - last_exc = APIError( - f"HTTP error {exc.response.status_code} when fetching page " - f"{current_page}: {exc.response.reason}" - ) - last_exc.__cause__ = exc - except ValueError as exc: - last_exc = APIError( - f"Invalid JSON response from API on page {current_page}" - ) - last_exc.__cause__ = exc - except requests.RequestException as exc: - last_exc = APIError( - f"Network error when fetching page {current_page}: {exc}" - ) - last_exc.__cause__ = exc - except APIError: - raise - - if attempt < MAX_RETRIES: - time.sleep(RETRY_BACKOFF_SECONDS * attempt) - else: - raise last_exc # type: ignore[misc] diff --git a/external-import/checkfirst-import-connector/src/checkfirst_dataset/api_reader.py b/external-import/checkfirst-import-connector/src/checkfirst_dataset/api_reader.py deleted file mode 100644 index 6d12b1ed5e0..00000000000 --- a/external-import/checkfirst-import-connector/src/checkfirst_dataset/api_reader.py +++ /dev/null @@ -1,124 +0,0 @@ -"""API data reader. - -This module reads Checkfirst data from a remote API endpoint -and yields validated rows as `DatasetRow` objects. -""" - -from typing import Iterator - -from checkfirst_dataset.api_client import fetch_paginated_data -from checkfirst_dataset.dataset_reader import DatasetRow -from checkfirst_dataset.reporting import RunReport, SkipReason -from checkfirst_dataset.types import CheckfirstConfigLike - - -def iter_api_rows( - *, - config: CheckfirstConfigLike, - api_url: str, - api_key: str, - api_endpoint: str, - start_page: int = 1, - since: str | None = None, - report: RunReport | None = None, -) -> Iterator[DatasetRow]: - """Iterate over validated rows from the API endpoint. - - Args: - config: Connector configuration - api_url: Base URL of the API - api_key: API key for authentication - api_endpoint: API endpoint path - start_page: Starting page number for pagination - since: Only fetch articles published on or after this ISO 8601 date - report: Optional RunReport for tracking skipped rows - - Yields: - DatasetRow objects with validated data - """ - row_number = 0 - - try: - for item in fetch_paginated_data( - api_url=api_url, - api_key=api_key, - api_endpoint=api_endpoint, - start_page=start_page, - since=since, - ): - row_number += 1 - - # Basic row-size guard (approximate) - if config.max_row_bytes is not None: - approx = sum(len(str(v or "")) for v in item.values()) - if approx > config.max_row_bytes: - if report is not None: - report.skip(SkipReason.ROW_TOO_LARGE) - continue - - # Extract fields directly from API response - # API returns lowercase/snake_case field names - url = str(item.get("url", "")).strip() if item.get("url") else "" - source_title = ( - str(item.get("source_title", "")).strip() - if item.get("source_title") - else "" - ) - source_url = ( - str(item.get("source_url", "")).strip() - if item.get("source_url") - else "" - ) - publication_date = ( - str(item.get("published_date", "")).strip() - if item.get("published_date") - else "" - ) - - # Validate required fields - if not url or not source_title or not source_url or not publication_date: - if report is not None: - report.skip(SkipReason.ROW_MISSING_REQUIRED_FIELDS) - continue - - # Extract optional fields - canonical = ( - str(item.get("canonical_url", "")).strip() - if item.get("canonical_url") - else None - ) - og_title = str(item.get("title", "")).strip() if item.get("title") else None - og_description = ( - str(item.get("og_description", "")).strip() - if item.get("og_description") - else None - ) - - # Handle alternates_urls array - convert to comma-separated string - alternates = None - if item.get("alternates_urls") and isinstance( - item["alternates_urls"], list - ): - alt_urls = [ - alt.get("url", "") - for alt in item["alternates_urls"] - if alt.get("url") - ] - if alt_urls: - alternates = ",".join(alt_urls) - - yield DatasetRow( - source_file="api", - row_number=row_number, - url=url, - source_title=source_title, - source_url=source_url, - canonical=canonical, - og_title=og_title, - og_description=og_description, - alternates=alternates, - publication_date=publication_date, - ) - - except Exception as exc: - raise RuntimeError(f"Error fetching data from API: {exc}") from exc diff --git a/external-import/checkfirst-import-connector/src/checkfirst_dataset/dataset_reader.py b/external-import/checkfirst-import-connector/src/checkfirst_dataset/dataset_reader.py deleted file mode 100644 index f106d256652..00000000000 --- a/external-import/checkfirst-import-connector/src/checkfirst_dataset/dataset_reader.py +++ /dev/null @@ -1,19 +0,0 @@ -"""Data row model used by the API reader.""" - -from dataclasses import dataclass - - -@dataclass(frozen=True) -class DatasetRow: - """A normalized row extracted from the API.""" - - source_file: str - row_number: int - url: str - source_title: str - source_url: str - canonical: str | None - og_title: str | None - og_description: str | None - alternates: str | None - publication_date: str diff --git a/external-import/checkfirst-import-connector/src/checkfirst_dataset/dates.py b/external-import/checkfirst-import-connector/src/checkfirst_dataset/dates.py deleted file mode 100644 index 66ca5e38597..00000000000 --- a/external-import/checkfirst-import-connector/src/checkfirst_dataset/dates.py +++ /dev/null @@ -1,32 +0,0 @@ -"""Date parsing helpers. - -The API response includes a `Publication Date` string. We parse it using -`dateutil` and normalize the output to timezone-aware UTC datetimes. -""" - -from datetime import datetime, timezone - -from dateutil import parser as date_parser - - -class DateParseError(ValueError): - """Raised when a publication date cannot be parsed.""" - - pass - - -def parse_publication_date(value: str) -> datetime: - """Parse the publication date string into a UTC datetime.""" - raw = (value or "").strip() - if not raw: - raise DateParseError("Publication Date is missing") - - try: - parsed = date_parser.isoparse(raw) - except Exception as exc: # noqa: BLE001 - raise DateParseError(f"Unparseable Publication Date: {raw!r}") from exc - - if parsed.tzinfo is None: - # If the API provides a naive datetime, treat it as UTC. - parsed = parsed.replace(tzinfo=timezone.utc) - return parsed.astimezone(timezone.utc) diff --git a/external-import/checkfirst-import-connector/src/checkfirst_dataset/main_logic.py b/external-import/checkfirst-import-connector/src/checkfirst_dataset/main_logic.py deleted file mode 100644 index 6115c76a0dc..00000000000 --- a/external-import/checkfirst-import-connector/src/checkfirst_dataset/main_logic.py +++ /dev/null @@ -1,239 +0,0 @@ -from datetime import datetime, timezone - -from checkfirst_dataset.alternates import parse_alternates -from checkfirst_dataset.api_reader import iter_api_rows -from checkfirst_dataset.dates import DateParseError, parse_publication_date -from checkfirst_dataset.reporting import RunReport, SkipReason -from checkfirst_dataset.state import load_state_from_helper, save_state_to_helper -from connector.converter_to_stix import ConverterToStix -from connector.settings import ConnectorSettings - -BUNDLE_SIZE = 1000 - - -class BundleSendError(Exception): - pass - - -def _send_bundle( - helper, converter: ConverterToStix, objects: list, work_id: str -) -> None: - """Assemble and send a STIX bundle via the helper.""" - stix_objects = list(objects) + [ - converter.tlp_marking, - converter.author, - converter.intrusion_set, - converter.campaign, - converter.campaign_attributed_to_ims, - ] - bundle = helper.stix2_create_bundle(stix_objects) - helper.send_stix2_bundle( - bundle, - work_id=work_id, - cleanup_inconsistent_bundle=True, - ) - - -def run_once(helper, settings: ConnectorSettings) -> None: - """Run a single ingestion pass. - - - Fetches data from the API endpoint. - - Builds STIX objects and sends them in bundles of BUNDLE_SIZE rows. - - Updates state after each successfully sent bundle. - """ - - report = RunReport() - converter = ConverterToStix(helper=helper, tlp_level=settings.checkfirst.tlp_level) - - # Validate API configuration - if not settings.checkfirst.api_url: - helper.connector_logger.error( - "API URL is not configured", - {"env_var": "CHECKFIRST_API_URL"}, - ) - return - if not settings.checkfirst.api_key: - helper.connector_logger.error( - "API key is not configured", - {"env_var": "CHECKFIRST_API_KEY"}, - ) - return - - work_id: str | None = None - - try: - if settings.checkfirst.force_reprocess: - helper.connector_logger.info("Force reprocess enabled", {"start_page": 1}) - state = {"last_page": 0} - else: - state = load_state_from_helper(helper) - - start_page = state.get("last_page", 0) + 1 - if start_page > 1: - helper.connector_logger.info( - "Resuming from page", {"start_page": start_page} - ) - - now = datetime.now(tz=timezone.utc) - run_name = f"{helper.connect_name} - {now.isoformat()}" - work_id = helper.api.work.initiate_work(helper.connect_id, run_name) - - bundle_objects: list[object] = [] - rows_in_bundle = 0 - rows_yielded = 0 - current_page = start_page - has_data = False - - api_url = f"{settings.checkfirst.api_url}{settings.checkfirst.api_endpoint}" - helper.connector_logger.info("Fetching data from API", {"url": api_url}) - - for row in iter_api_rows( - config=settings.checkfirst, - api_url=settings.checkfirst.api_url, - api_key=settings.checkfirst.api_key, - api_endpoint=settings.checkfirst.api_endpoint, - start_page=start_page, - since=settings.checkfirst.since, - report=report, - ): - rows_yielded += 1 - report.rows_seen += 1 - has_data = True - - try: - published_dt = parse_publication_date(row.publication_date) - - channel = converter.create_channel( - name=row.source_title, - source_url=row.source_url, - ) - media_content = converter.create_media_content( - title=row.og_title, - description=row.og_description, - url=row.url, - publication_date=published_dt, - ) - source_url_obj = converter.create_url(value=row.source_url) - - publishes = converter.create_relationship( - source_id=channel.id, - relationship_type="publishes", - target_id=media_content.id, - start_time=published_dt, - ) - related_to_source = converter.create_relationship( - source_id=channel.id, - relationship_type="related-to", - target_id=source_url_obj.id, - ) - ims_uses_channel = converter.create_relationship( - source_id=converter.intrusion_set.id, - relationship_type="uses", - target_id=channel.id, - ) - campaign_uses_channel = converter.create_relationship( - source_id=converter.campaign.id, - relationship_type="uses", - target_id=channel.id, - ) - - bundle_objects.extend( - [ - channel, - media_content, - source_url_obj, - publishes, - related_to_source, - ims_uses_channel, - campaign_uses_channel, - ] - ) - - for alt in parse_alternates(row.alternates): - alt_url = converter.create_url(value=alt) - rel = converter.create_relationship( - source_id=media_content.id, - relationship_type="related-to", - target_id=alt_url.id, - ) - bundle_objects.extend([alt_url, rel]) - - except DateParseError as exc: - report.skip(SkipReason.ROW_INVALID_PUBLICATION_DATE) - helper.connector_logger.debug( - "Skip row (invalid publication date)", - {"row": row.row_number, "error": str(exc)}, - ) - continue - except Exception as exc: # noqa: BLE001 - report.skip(SkipReason.ROW_MAPPING_ERROR) - helper.connector_logger.error( - "Skip row (mapping error)", - {"row": row.row_number, "error": str(exc)}, - ) - continue - - report.rows_mapped += 1 - rows_in_bundle += 1 - - if rows_yielded % BUNDLE_SIZE == 0: - current_page = start_page + (rows_yielded // BUNDLE_SIZE) - - if rows_in_bundle >= BUNDLE_SIZE: - try: - helper.connector_logger.info( - "Sending bundle", - {"rows": rows_in_bundle, "page": current_page}, - ) - _send_bundle(helper, converter, bundle_objects, work_id) - report.bundles_sent += 1 - except Exception as exc: # noqa: BLE001 - report.error(SkipReason.BUNDLE_SEND_ERROR) - helper.connector_logger.error( - "Bundle send failed", {"error": str(exc)} - ) - raise BundleSendError(exc) from exc - - state["last_page"] = current_page - state["last_run"] = int(now.timestamp()) - save_state_to_helper(helper, state) - bundle_objects = [] - rows_in_bundle = 0 - - if not has_data: - helper.connector_logger.info( - "No rows fetched from API", - {"start_page": start_page}, - ) - return - - # Send remaining bundle - if rows_in_bundle > 0: - try: - helper.connector_logger.info( - "Sending final bundle", - {"rows": rows_in_bundle}, - ) - _send_bundle(helper, converter, bundle_objects, work_id) - report.bundles_sent += 1 - except Exception as exc: # noqa: BLE001 - report.error(SkipReason.BUNDLE_SEND_ERROR) - helper.connector_logger.error("Bundle send failed", {"error": str(exc)}) - raise BundleSendError(exc) from exc - - state["last_page"] = current_page - state["last_run"] = int(now.timestamp()) - save_state_to_helper(helper, state) - - except BundleSendError: - pass # already recorded and logged - except Exception as exc: # noqa: BLE001 - report.error(SkipReason.API_ERROR) - helper.connector_logger.error( - "Error fetching data from API", {"error": str(exc)} - ) - finally: - summary = report.to_summary() - helper.connector_logger.info("Run summary", {"summary": summary}) - if work_id is not None: - helper.api.work.to_processed(work_id, summary) diff --git a/external-import/checkfirst-import-connector/src/checkfirst_dataset/state.py b/external-import/checkfirst-import-connector/src/checkfirst_dataset/state.py deleted file mode 100644 index ef6c9855563..00000000000 --- a/external-import/checkfirst-import-connector/src/checkfirst_dataset/state.py +++ /dev/null @@ -1,42 +0,0 @@ -"""Connector state helpers. - -OpenCTI connectors can persist a small JSON-compatible state blob via the -connector helper. This connector stores the last successfully processed API -page number so it can resume after a restart. - -""" - -from typing import Any, Mapping - - -def normalize_state(state: Any) -> dict[str, Any]: - """Normalize arbitrary helper state into the expected dict structure. - - This is defensive: OpenCTI may return None, a non-dict, or unexpected types. - """ - if not isinstance(state, dict): - return {"last_page": 0} - - last_page = state.get("last_page", 0) - try: - last_page_int = max(0, int(last_page)) - except Exception: # noqa: BLE001 - last_page_int = 0 - - result: dict[str, Any] = {"last_page": last_page_int} - if "last_run" in state and isinstance(state.get("last_run"), (int, float)): - result["last_run"] = int(state["last_run"]) - return result - - -def load_state_from_helper(helper: Any) -> dict[str, Any]: - """Load and normalize state from an OpenCTI connector helper.""" - raw = helper.get_state() if helper is not None else None - return normalize_state(raw) - - -def save_state_to_helper(helper: Any, state: Mapping[str, Any]) -> None: - """Normalize and persist state via the OpenCTI connector helper.""" - if helper is None: - return - helper.set_state(normalize_state(state)) diff --git a/external-import/checkfirst-import-connector/src/checkfirst_dataset/types.py b/external-import/checkfirst-import-connector/src/checkfirst_dataset/types.py deleted file mode 100644 index 5faedeeec87..00000000000 --- a/external-import/checkfirst-import-connector/src/checkfirst_dataset/types.py +++ /dev/null @@ -1,7 +0,0 @@ -from typing import Protocol - - -class CheckfirstConfigLike(Protocol): - """Minimal interface required by API reading helpers.""" - - max_row_bytes: int | None diff --git a/external-import/checkfirst-import-connector/src/connector/connector.py b/external-import/checkfirst-import-connector/src/connector/connector.py index 100f4c4dd89..a54566c51fc 100644 --- a/external-import/checkfirst-import-connector/src/connector/connector.py +++ b/external-import/checkfirst-import-connector/src/connector/connector.py @@ -1,8 +1,23 @@ +"""Entry point class for the Checkfirst external-import connector.""" + import sys +from datetime import datetime, timezone -from checkfirst_dataset.main_logic import run_once +from checkfirst_client import CheckfirstClient +from checkfirst_client.api_models import Article +from connector.connector_state import ConnectorState +from connector.converter_to_stix import ConversionError, ConverterToStix from connector.settings import ConnectorSettings +from connectors_sdk.models import BaseIdentifiedEntity from pycti import OpenCTIConnectorHelper +from utils.run_reporter import SkipReason, run_reporter + +PAGE_SIZE = 1_000 +BUNDLE_SIZE = 10_000 + + +class BundleSendError(Exception): + pass class CheckfirstImportConnector: @@ -10,7 +25,7 @@ class CheckfirstImportConnector: This follows the standard external-import connector template: - `process_message()` does one ingestion pass - - `run()` schedules runs via `OpenCTIConnectorHelper.schedule_process()` + - `run()` schedules runs via `OpenCTIConnectorHelper.schedule_iso()` The actual API ingestion + STIX mapping is implemented under `checkfirst_dataset/` and reused here. @@ -19,23 +34,326 @@ class CheckfirstImportConnector: def __init__(self, config: ConnectorSettings, helper: OpenCTIConnectorHelper): self.config = config self.helper = helper + self.logger = self.helper.connector_logger + + self.state = ConnectorState(helper) + self.api_client = CheckfirstClient( + helper=helper, + base_url=self.config.checkfirst.api_url, + api_key=self.config.checkfirst.api_key.get_secret_value(), + ) + self.converter = ConverterToStix( + helper=helper, + tlp_level=self.config.checkfirst.tlp_level.value, + ) + + def _create_pravda_infrastructure_entities(self) -> list[BaseIdentifiedEntity]: + """Create entities for known Pravda network infrastructure. + Called only when starting from page 1 (first run or force_reprocess). + """ + self.logger.info( + "[CONNECTOR] Creating Pravda network infrastructure (first run)" + ) + + campaign, attributed_to = self.converter.get_campaign_for_year(year=2023) + pravda_network_entities = self.converter.convert_pravda_network_infrastructure( + campaign + ) + + return [campaign, attributed_to] + pravda_network_entities + + def _send_infrastructure_bundle(self) -> None: + """Send a one-off bundle of known Pravda network infrastructure objects. + Exectued only when starting from page 1 (first run or force_reprocess). + """ + self.logger.info("[CONNECTOR] Force reprocess enabled", {"start_page": 1}) + octi_objects = self._create_pravda_infrastructure_entities() + self._send_bundle(octi_objects) + + self.logger.info( + "[CONNECTOR] Pravda network infrastructure sent to OpenCTI", + ) + + def _create_row_entities(self, row: Article) -> list[BaseIdentifiedEntity]: + self.logger.debug( + "[CONNECTOR] Converting row to OpenCTI objects", + {"row_number": row.row_number, "row_id": row.id}, + ) + + campaign, attributed_to = self.converter.get_campaign_for_year( + year=row.published_date.year + ) + article_entities = self.converter.convert_article(row, campaign) + + return [campaign, attributed_to] + article_entities + + def _prepare_rows_bundle( + self, octi_objects: set[BaseIdentifiedEntity] + ) -> list[BaseIdentifiedEntity]: + """Prepare the list of OCTI objects to be sent in a bundle. + This includes deduplication of Channel objects by merging their external references. + """ + self.logger.debug( + "[CONNECTOR] Deduplicating OpenCTI objects for bundle", + {"octi_objects_count": len(octi_objects)}, + ) + + bundle_objects: list[BaseIdentifiedEntity] = [] + + channels_ids = set() + for octi_object in octi_objects: + if octi_object.id in channels_ids: + channel = next( + (obj for obj in bundle_objects if obj.id == octi_object.id), None + ) + if ( + channel + and channel.external_references + and octi_object.external_references + ): + channel.external_references.extend(octi_object.external_references) + elif octi_object.id.startswith("channel--"): + channels_ids.add(octi_object.id) + bundle_objects.append(octi_object) + else: + bundle_objects.append(octi_object) + + self.logger.debug( + "[CONNECTOR] Bundle ready to be sent", + {"bundle_objects_count": len(bundle_objects)}, + ) + + return bundle_objects + + def _send_rows_bundles(self, start_page: int) -> None: + self.logger.info( + "[CONNECTOR] Fetching data from API", + {"api_endpoint": self.config.checkfirst.api_endpoint}, + ) + + # Set of _unique_ OCTI objects to be sent + # (uniqueness is determined by comparing objects' whole content, not just their IDs) + octi_objects: set[BaseIdentifiedEntity] = set() + + rows_yielded = 0 + rows_in_bundle = 0 + current_page = start_page + + for row in self.api_client.iter_api_rows( + api_endpoint=self.config.checkfirst.api_endpoint, + start_page=start_page, + since=self.config.checkfirst.since, + max_row_bytes=self.config.checkfirst.max_row_bytes, + ): + self.logger.debug( + "[CONNECTOR] Processing row from API", + {"row_number": row.row_number, "row_id": row.id}, + ) + + rows_yielded += 1 + run_reporter.rows_seen += 1 + + try: + row_octi_objects = self._create_row_entities(row) + + # Rows share many same entities, so only original objects are added to the set + # (OCTI models are hashable and comparable for this very purpose) + for row_octi_object in row_octi_objects: + if row_octi_object not in octi_objects: + octi_objects.add(row_octi_object) + + except ConversionError as err: # noqa: BLE001 + run_reporter.skip(SkipReason.ROW_MAPPING_ERROR) + self.logger.warning( + "Skipping row due to conversion error", + { + "row_number": row.row_number, + "row_id": row.id, + "error": str(err), + }, + ) + continue + + run_reporter.rows_mapped += 1 + rows_in_bundle += 1 + + # Increment page every 1_000 rows + if rows_yielded % PAGE_SIZE == 0: + current_page += 1 + + # Send bundles of ~10_000 entities + if len(octi_objects) >= BUNDLE_SIZE: + try: + self.logger.info( + "Sending bundle", + { + "octi_objects_count": len(octi_objects), + "rows_count": rows_in_bundle, + "page": current_page, + }, + ) + + bundle_objects = self._prepare_rows_bundle(octi_objects) + self._send_bundle(bundle_objects) + + self.state.last_page = current_page + self.state.save() + except BundleSendError: + self.logger.warning( + "Bundle send failed. Skipping it and try the next bundle", + { + "octi_objects_count": len(octi_objects), + "rows_count": rows_in_bundle, + "page": current_page, + }, + ) + finally: + # Reset for next bundle + octi_objects = set() + rows_in_bundle = 0 + + if not rows_yielded: + # Log and let the connector end the run + self.logger.info("No rows fetched from API", {"start_page": start_page}) + elif rows_in_bundle > 0: + # Send remaining rows + self.logger.info( + "Sending final bundle", + { + "octi_objects_count": len(octi_objects), + "rows_count": rows_in_bundle, + "page": current_page, + }, + ) + bundle_objects = self._prepare_rows_bundle(octi_objects) + self._send_bundle(bundle_objects) + + self.state.last_page = current_page + self.state.save() + + def _send_bundle( + self, + octi_objects: list[BaseIdentifiedEntity], + ) -> None: + """Assemble and send a STIX bundle to OpenCTI.""" + try: + if not octi_objects: + return + + self.logger.debug( + "[CONNECTOR] Converting OpenCTI objects into STIX2.1 objects", + { + "objects_count": len(self.converter.required_objects) + + len(octi_objects) + }, + ) + + octi_objects = self.converter.required_objects + octi_objects + stix_objects = [obj.to_stix2_object() for obj in octi_objects] + + self.logger.info( + "[CONNECTOR] Sending STIX objects to OpenCTI...", + {"objects_count": len(stix_objects)}, + ) + + now = datetime.now(tz=timezone.utc) + work_id = self.helper.api.work.initiate_work( + connector_id=self.config.connector.id, + friendly_name=f"{self.config.connector.name} - {now.isoformat()}", + ) + + bundle = self.helper.stix2_create_bundle(stix_objects) + sent_bundles = self.helper.send_stix2_bundle( + bundle=bundle, + work_id=work_id, + cleanup_inconsistent_bundle=True, + ) + run_reporter.bundles_sent += 1 + + run_current_summary = run_reporter.to_summary() + self.helper.api.work.to_processed( + work_id=work_id, + message=run_current_summary, + ) + + self.logger.info( + "[CONNECTOR] STIX bundles sent to OpenCTI...", + {"sent_bundles": len(sent_bundles)}, + ) + except Exception as err: + self.logger.error("[CONNECTOR] Bundle send failed", {"error": str(err)}) + run_reporter.error(SkipReason.BUNDLE_SEND_ERROR) + + raise BundleSendError(err) from err def process_message(self) -> None: """One connector run: fetch API data and push bundles to OpenCTI.""" + self.logger.info( + "[CONNECTOR] Running connector...", + {"connector_name": self.config.connector.name}, + ) + + # Ensure clean metrics for each run + run_reporter.reset() + try: - run_once(self.helper, self.config) + # Get the current state + current_state = self.state.load() + if current_state.last_run is not None: + self.logger.info( + "[CONNECTOR] Connector last run", + {"last_run": current_state.last_run}, + ) + else: + self.logger.info("[CONNECTOR] Connector has never run...") + + # Determine the starting page for this run + if self.config.checkfirst.force_reprocess: + start_page = 1 + elif current_state.last_page: + start_page = current_state.last_page + else: + start_page = 1 + + # On first run (or if force_reprocess is enabled), send a one-off bundle + # with known Pravda network infrastructure entities. + if start_page == 1: + self._send_infrastructure_bundle() + else: + self.logger.info( + "[CONNECTOR] Resuming from page", {"start_page": start_page} + ) + + # On each run, fetch rows from the API and send bundle of mapped STIX objects + self._send_rows_bundles(start_page) + + except BundleSendError: + # Bundle send failure is logged in `_send_bundle` and can't be recovered, + # so we just end the run here and go to `finally` statement to get run summary. + pass except (KeyboardInterrupt, SystemExit): - self.helper.connector_logger.info( + self.logger.info( "[CONNECTOR] Connector stopped...", - {"connector_name": self.helper.connect_name}, + {"connector_name": self.config.connector.name}, ) sys.exit(0) except Exception as err: - self.helper.connector_logger.error(str(err)) + self.logger.error( + "[CONNECTOR] Unexpected error. See connector's log for more details.", + {"error": str(err)}, + ) + finally: + self.state.last_run = datetime.now(timezone.utc) + self.state.save() + + run_summary = run_reporter.to_summary() + self.logger.info("Run summary", {"summary": run_summary}) + + run_reporter.reset() def run(self) -> None: """Start the connector using the standard scheduler.""" - self.helper.schedule_process( + self.helper.schedule_iso( message_callback=self.process_message, - duration_period=self.config.connector.duration_period.total_seconds(), + duration_period=self.config.connector.duration_period, # type: ignore ) diff --git a/external-import/checkfirst-import-connector/src/connector/connector_state.py b/external-import/checkfirst-import-connector/src/connector/connector_state.py new file mode 100644 index 00000000000..cfcb694134b --- /dev/null +++ b/external-import/checkfirst-import-connector/src/connector/connector_state.py @@ -0,0 +1,62 @@ +""" +The state manager is responsible for loading and saving the connector's state to OpenCTI. +It provides a simple interface to manage the state and ensures that it's properly cached and updated. + +Architecture: +- ConnectorState: Load, validate and save connector's state +- OpenCTIConnectorHelper: Communicate with OpenCTI platform (read/write state) +""" + +import json +from datetime import datetime +from typing import Any + +from pycti import OpenCTIConnectorHelper +from pydantic import BaseModel, ConfigDict, Field, PrivateAttr + + +class ConnectorState(BaseModel): + """Connector state manager. + All values defined in the state manager MUST be JSON serializable + as they will be stored as JSON in OpenCTI (see https://docs.pydantic.dev/latest/concepts/serialization/#json-mode). + """ + + model_config = ConfigDict( + extra="allow", + validate_assignment=True, # ensure model is revalidate when setting properties + ) + + _helper: OpenCTIConnectorHelper = PrivateAttr() + _cache: "ConnectorState | None" = PrivateAttr(default=None) + + last_run: datetime | None = Field(default=None) + last_page: int = Field(default=1) + + def __init__(self, helper: OpenCTIConnectorHelper, **kwargs: Any): + """Initialize the state manager with the connector helper.""" + super().__init__(**kwargs) + + self._helper = helper + self._cache: "ConnectorState | None" = None + + def load(self) -> "ConnectorState": + """Load the state from OpenCTI.""" + if self._cache is None: + state = self._helper.get_state() or {} + for key in state: + setattr(self, key, state[key]) + + self._cache = self.model_copy() + + return self._cache + + def save(self) -> None: + """Save the state to OpenCTI.""" + state_dict = self.model_dump_json(exclude_none=True) + + self._helper.set_state(json.loads(state_dict)) + self._cache = self.model_copy() + + def clear_cache(self) -> None: + """Clear the state cache.""" + self._cache = None diff --git a/external-import/checkfirst-import-connector/src/connector/converter_to_stix.py b/external-import/checkfirst-import-connector/src/connector/converter_to_stix.py index 4431ad6ac5b..9b815b4d90a 100644 --- a/external-import/checkfirst-import-connector/src/connector/converter_to_stix.py +++ b/external-import/checkfirst-import-connector/src/connector/converter_to_stix.py @@ -5,24 +5,62 @@ - `pycti.*.generate_id()` for deterministic IDs on OpenCTI custom entities """ -from datetime import datetime +import re +from datetime import datetime, timezone +from functools import lru_cache from typing import Literal +from urllib.parse import urlparse -import stix2 -from connectors_sdk.models import OrganizationAuthor, TLPMarking -from pycti import ( +from checkfirst_client.api_models import AlternateURL, Article +from connector.pravda_network import PRAVDA_DOMAINS, PRAVDA_IP, SUBDOMAIN_TO_DOMAIN +from connectors_sdk.models import ( + URL, + BaseIdentifiedEntity, Campaign, Channel, - CustomObjectChannel, - CustomObservableMediaContent, + DomainName, + ExternalReference, + Infrastructure, IntrusionSet, - OpenCTIConnectorHelper, - StixCoreRelationship, + IPV4Address, + MediaContent, + OrganizationAuthor, + Relationship, + TLPMarking, ) +from pycti import OpenCTIConnectorHelper + + +class ConversionError(Exception): + """Raised when conversion of API data to OpenCTI objects fails.""" + + +_URL_RE = re.compile(r"https?://\S+", re.IGNORECASE) + + +def parse_alternates(alternates_urls: list[AlternateURL]) -> list[str]: + """Extract a list of unique alternate URLs from a raw column value.""" + parsed_urls: list[str] = [] + for alternate_url in alternates_urls: + url = alternate_url.url.strip() if alternate_url.url else "" + + if _URL_RE.search(url): + parsed_urls.append(url) + + # preserve order but remove duplicates + seen: set[str] = set() + out: list[str] = [] + for url in parsed_urls: + if url in seen: + continue + seen.add(url) + out.append(url) + + return out class ConverterToStix: - """Convert API rows into STIX 2.1 objects + bundles.""" + """Convert API rows into OpenCTI objects (convertible to STIX 2.1 format).""" def __init__( self, @@ -38,31 +76,25 @@ def __init__( ): self.helper = helper - _author_model = OrganizationAuthor(name="CheckFirst") - self.author = _author_model.to_stix2_object() - self.author_id = self.author.id - - _tlp_model = TLPMarking(level=tlp_level.lower()) - self.tlp_marking = _tlp_model.to_stix2_object() - self.tlp_marking_id = self.tlp_marking.id - + self.author = OrganizationAuthor(name="CheckFirst") + self.tlp_marking = TLPMarking(level=tlp_level.lower()) self.intrusion_set = self._create_intrusion_set() - self.campaign = self._create_campaign() - self.campaign_attributed_to_ims = self.create_relationship( - source_id=self.campaign.id, - relationship_type="attributed-to", - target_id=self.intrusion_set.id, - ) - def _create_intrusion_set(self) -> stix2.IntrusionSet: - return stix2.IntrusionSet( - id=IntrusionSet.generate_id(name="Pravda Network"), + self.required_objects = [ + self.author, + self.tlp_marking, + self.intrusion_set, + ] + + def _create_intrusion_set(self) -> IntrusionSet: + return IntrusionSet( name="Pravda Network", description=( "Information Manipulation Set (IMS) conducting pro-Russian " "influence operations through a network of 190+ websites" ), aliases=["Portal-Kombat", "Pravda Network IMS"], + first_seen=datetime(2023, 6, 24, 0, 0, 0, tzinfo=timezone.utc), goals=[ "Undermine Western unity", "Promote Russian narratives", @@ -70,102 +102,348 @@ def _create_intrusion_set(self) -> stix2.IntrusionSet: ], resource_level="government", primary_motivation="ideology", - created_by_ref=self.author_id, - object_marking_refs=[self.tlp_marking_id], - allow_custom=True, + author=self.author, + markings=[self.tlp_marking], ) - def _create_campaign(self) -> stix2.Campaign: - return stix2.Campaign( - id=Campaign.generate_id( - name="Pravda Network Campaigns", - ), - name="Pravda Network Campaigns", + def _create_campaign(self, year: int) -> Campaign: + name = f"Pravda Network Campaigns {year}" + first_seen = ( + "2023-09-01T00:00:00Z" if year == 2023 else f"{year}-01-01T00:00:00Z" + ) + return Campaign( + name=name, description=( "Coordinated FIMI campaign spreading pro-Russian narratives " "across multiple countries and languages" ), - aliases=["Portal-Kombat Campaign", "Pravda"], - first_seen="2023-09-01T00:00:00Z", + aliases=[f"Portal-Kombat Campaign {year}", f"Pravda {year}"], + first_seen=first_seen, objective=( "Manipulate public opinion, undermine trust in Western " "institutions, justify Russian actions" ), - created_by_ref=self.author_id, - object_marking_refs=[self.tlp_marking_id], - allow_custom=True, + author=self.author, + markings=[self.tlp_marking], ) - def create_channel( - self, *, name: str, source_url: str | None = None - ) -> CustomObjectChannel: - external_refs: list[stix2.ExternalReference] = [] + def create_channel(self, name: str, source_url: str | None = None) -> Channel: + external_refs: list[ExternalReference] = [] if source_url: external_refs.append( - stix2.ExternalReference(source_name="source", url=source_url) + ExternalReference(source_name="source", url=source_url) ) is_telegram = source_url is not None and source_url.startswith("https://t.me/") - channel = CustomObjectChannel( - id=Channel.generate_id(name=name), + is_max_ru = source_url is not None and source_url.startswith("https://max.ru/") + channel = Channel( name=name, - channel_types=["Telegram"] if is_telegram else ["website"], - created_by_ref=self.author_id, - object_marking_refs=[self.tlp_marking_id], + channel_types=["channel"] if (is_telegram or is_max_ru) else ["website"], + author=self.author, + markings=[self.tlp_marking], external_references=external_refs, - allow_custom=True, ) return channel def create_media_content( self, - *, title: str | None, description: str | None, url: str, publication_date: datetime, - ) -> CustomObservableMediaContent: - media = CustomObservableMediaContent( + ) -> MediaContent: + media = MediaContent( title=title, description=description, url=url, publication_date=publication_date, - object_marking_refs=[self.tlp_marking_id], - custom_properties={ - "x_opencti_created_by_ref": self.author_id, - }, + author=self.author, + markings=[self.tlp_marking], ) return media - def create_url(self, *, value: str) -> stix2.URL: - return stix2.URL( + @lru_cache # same domain name shared by many articles + def create_domain_name(self, value: str) -> DomainName: + return DomainName( + value=value, + author=self.author, + markings=[self.tlp_marking], + ) + + def create_ipv4_address(self, value: str) -> IPV4Address: + return IPV4Address( value=value, - object_marking_refs=[self.tlp_marking_id], - custom_properties={ - "x_opencti_created_by_ref": self.author_id, - }, + author=self.author, + markings=[self.tlp_marking], + ) + + def create_infrastructure( + self, name: str, first_seen: datetime | str | None = None + ) -> Infrastructure: + return Infrastructure( + name=name, + infrastructure_types=["hosting-infrastructure"], + first_seen=first_seen, + author=self.author, + markings=[self.tlp_marking], + ) + + def create_url(self, value: str) -> URL: + return URL( + value=value, + author=self.author, + markings=[self.tlp_marking], ) def create_relationship( self, - *, - source_id: str, + source: BaseIdentifiedEntity, relationship_type: str, - target_id: str, + target: BaseIdentifiedEntity, start_time: datetime | None = None, - ) -> stix2.Relationship: - rel = stix2.Relationship( - id=StixCoreRelationship.generate_id( - relationship_type, - source_id, - target_id, - ), - relationship_type=relationship_type, - source_ref=source_id, - target_ref=target_id, - created_by_ref=self.author_id, - object_marking_refs=[self.tlp_marking_id], - allow_custom=True, + stop_time: datetime | None = None, + ) -> Relationship: + rel = Relationship( + type=relationship_type, + source=source, + target=target, + author=self.author, + markings=[self.tlp_marking], start_time=start_time, + stop_time=stop_time, ) return rel + + @lru_cache # cache campaigns by year to reuse across articles from the same year + def get_campaign_for_year(self, year: int) -> tuple[Campaign, Relationship]: + """Return (Campaign, attributed-to Relationship) for the given year, cached.""" + campaign = self._create_campaign(year=year) + attributed_to = self.create_relationship( + source=campaign, + relationship_type="attributed-to", + target=self.intrusion_set, + ) + + return campaign, attributed_to + + def convert_pravda_network_infrastructure( + self, campaign: Campaign + ) -> list[BaseIdentifiedEntity]: + """Create a list of OpenCTI objects based on known Pravda network infrastructure. + Relationships per domain: + - Campaign 2023 → attributed-to → IntrusionSet + - Campaign 2023 → uses [first_observed] → Infrastructure + - Infrastructure → consists-of → DomainName + - Infrastructure → consists-of → IPv4Address (with stop_time) + - Subdomain [first_observed] → related-to → Infrastructure + + Call this method only when starting from page 1 (first run or force_reprocess) + to create the base infrastructure objects and relationships, then rely on get_campaign_for_year() + for subsequent pages/years to reuse the same Campaign and IntrusionSet objects. + """ + try: + octi_objects = [] + + ipv4 = self.create_ipv4_address(value=PRAVDA_IP["IP"]) + octi_objects.append(ipv4) + + for entry in PRAVDA_DOMAINS: + first_observed = entry["first_observed"] + + infrastructure = self.create_infrastructure( + name=entry["domain"], + first_seen=first_observed, + ) + octi_objects.append(infrastructure) + + domain_name = self.create_domain_name(value=entry["domain"]) + octi_objects.append(domain_name) + + # Campaign → uses → Infrastructure + octi_objects.append( + self.create_relationship( + source=campaign, + relationship_type="uses", + target=infrastructure, + start_time=first_observed, + ) + ) + # Infrastructure → consists-of → DomainName + octi_objects.append( + self.create_relationship( + source=infrastructure, + relationship_type="consists-of", + target=domain_name, + start_time=first_observed, + ) + ) + # Infrastructure → consists-of → IPv4Address (with temporal bounds) + octi_objects.append( + self.create_relationship( + source=infrastructure, + relationship_type="consists-of", + target=ipv4, + start_time=first_observed, + stop_time=PRAVDA_IP["last_seen"], + ) + ) + # Subdomains → related-to → Infrastructure + for subdomain in entry.get("subdomains", []): + sub_domain_name = self.create_domain_name(value=subdomain) + octi_objects.append(sub_domain_name) + octi_objects.append( + self.create_relationship( + source=sub_domain_name, + relationship_type="related-to", + target=infrastructure, + start_time=first_observed, + ) + ) + + # To limit duplicates, do not return shared entities such as Author, IntrusionSet or Campaign + return octi_objects + except Exception as err: + raise ConversionError( + f"Error converting Pravda network infrastructure: {err}" + ) from err + + def convert_article( + self, article: Article, campaign: Campaign + ) -> list[BaseIdentifiedEntity]: + """Convert a Article representing an article into a list of OpenCTI objects.""" + + try: + octi_objects = [] + + # --- Domain observable (extracted from article URL) --- + article_domain = urlparse(article.url).netloc + domain_name = self.create_domain_name(value=article_domain) + # --- Infrastructure wrapping the publishing domain --- + # No first_seen: the connector deduplicates objects via a set (connector.py) + # using model_dump_json() as hash. Passing article.published_date as first_seen + # would produce different JSON per article for the same domain, bypassing + # set dedup and flooding OpenCTI with near-duplicate updates. + # Known domains already have correct first_seen from the infrastructure bundle. + infrastructure = self.create_infrastructure( + name=article_domain, + first_seen=article.published_date, + ) + # --- Channel as website (the publishing domain/subdomain) --- + channel = self.create_channel( + name=article_domain, + source_url=article.url, + ) + # --- Source as Channel (Telegram or website origin) --- + source_channel = self.create_channel( + name=article.source_title, + source_url=article.source_url, + ) + # --- Content (article) --- + content = self.create_media_content( + title=article.title, + description=article.og_description, + url=article.url, + publication_date=article.published_date, + ) + + # --- Relationships --- + # No start_time/stop_time on relationships shared across articles. + # Using article.published_date would produce a unique STIX ID per article, + # flooding OpenCTI's Redis stream with thousands of create/upsert events. + # Campaign → uses → Infrastructure + campaign_uses_infra = self.create_relationship( + source=campaign, + relationship_type="uses", + target=infrastructure, + ) + # Campaign → uses → Channel as website + campaign_uses_channel = self.create_relationship( + source=campaign, + relationship_type="uses", + target=channel, + ) + # Infrastructure → consists-of → DomainName + infra_consists_of_domain = self.create_relationship( + source=infrastructure, + relationship_type="consists-of", + target=domain_name, + ) + # Channel as website → related-to → Infrastructure + channel_related_to_infra = self.create_relationship( + source=channel, + relationship_type="related-to", + target=infrastructure, + ) + # DomainName → related-to → Channel as website + domain_related_to_channel = self.create_relationship( + source=domain_name, + relationship_type="related-to", + target=channel, + ) + # Channel as website → publishes → Content + publishes = self.create_relationship( + source=channel, + relationship_type="publishes", + target=content, + ) + # Channel as website → related-to → Source as Channel + channel_uses_source = self.create_relationship( + source=channel, + relationship_type="related-to", + target=source_channel, + ) + # Content → related-to → Source as Channel + content_related_to_source = self.create_relationship( + source=content, + relationship_type="related-to", + target=source_channel, + ) + + octi_objects.extend( + [ + domain_name, + infrastructure, + channel, + source_channel, + content, + campaign_uses_infra, + campaign_uses_channel, + infra_consists_of_domain, + channel_related_to_infra, + domain_related_to_channel, + publishes, + channel_uses_source, + content_related_to_source, + ] + ) + + # If the article domain is a known news-pravda.com subdomain, + # link the Channel as website to its parent pravda-XX.com domain. + parent_domain_str = SUBDOMAIN_TO_DOMAIN.get(article_domain) + if parent_domain_str: + parent_domain_name = self.create_domain_name(value=parent_domain_str) + octi_objects.append(parent_domain_name) + octi_objects.append( + self.create_relationship( + source=channel, + relationship_type="related-to", + target=parent_domain_name, + ) + ) + + # Content → related-to → alternate URLs + for alt in parse_alternates(article.alternates_urls): + alt_url = self.create_url(value=alt) + alt_rel = self.create_relationship( + source=content, + relationship_type="related-to", + target=alt_url, + ) + octi_objects.extend([alt_url, alt_rel]) + + # To limit duplicates, do not return shared entities such as Author, IntrusionSet or Campaign + return octi_objects + except Exception as err: + raise ConversionError( + f"Error converting article to OpenCTI objects: {err}" + ) from err diff --git a/external-import/checkfirst-import-connector/src/connector/pravda_network.py b/external-import/checkfirst-import-connector/src/connector/pravda_network.py new file mode 100644 index 00000000000..bce065a80df --- /dev/null +++ b/external-import/checkfirst-import-connector/src/connector/pravda_network.py @@ -0,0 +1,224 @@ +"""Static Pravda network infrastructure data. + +All 36 domains share the same hosting IP (AS49352, Russia). +""" + +PRAVDA_IP = { + "IP": "178.21.15.85", + "first_seen": "2023-09-01T00:00:00Z", + "last_seen": "2024-12-31T00:00:00Z", +} + +PRAVDA_DOMAINS = [ + { + "domain": "pravda-de.com", + "first_observed": "2023-06-24T00:00:00Z", + "subdomains": [ + "deutsch.news-pravda.com", + "germany.news-pravda.com", + "austria.news-pravda.com", + "switzerland.news-pravda.com", + ], + }, + { + "domain": "pravda-en.com", + "first_observed": "2023-06-24T00:00:00Z", + "subdomains": [ + "news-pravda.com", + "uk.news-pravda.com", + "usa.news-pravda.com", + ], + }, + { + "domain": "pravda-es.com", + "first_observed": "2023-06-24T00:00:00Z", + "subdomains": [ + "spanish.news-pravda.com", + "spain.news-pravda.com", + ], + }, + { + "domain": "pravda-fr.com", + "first_observed": "2023-08-01T00:00:00Z", + "subdomains": [ + "francais.news-pravda.com", + "france.news-pravda.com", + ], + }, + { + "domain": "pravda-pl.com", + "first_observed": "2023-06-24T00:00:00Z", + "subdomains": ["poland.news-pravda.com"], + }, + { + "domain": "pravda-nl.com", + "first_observed": "2024-03-20T00:00:00Z", + "subdomains": [ + "dutch.news-pravda.com", + "netherlands.news-pravda.com", + "belgium.news-pravda.com", + ], + }, + { + "domain": "pravda-dk.com", + "first_observed": "2024-03-20T00:00:00Z", + "subdomains": ["denmark.news-pravda.com"], + }, + { + "domain": "pravda-se.com", + "first_observed": "2024-03-20T00:00:00Z", + "subdomains": ["sweden.news-pravda.com"], + }, + { + "domain": "pravda-fi.com", + "first_observed": "2024-03-20T00:00:00Z", + "subdomains": ["finland.news-pravda.com"], + }, + { + "domain": "pravda-ee.com", + "first_observed": "2024-03-20T00:00:00Z", + "subdomains": ["estonia.news-pravda.com"], + }, + { + "domain": "pravda-lt.com", + "first_observed": "2024-03-20T00:00:00Z", + "subdomains": ["lt.news-pravda.com"], + }, + { + "domain": "pravda-lv.com", + "first_observed": "2024-03-20T00:00:00Z", + "subdomains": ["latvia.news-pravda.com"], + }, + { + "domain": "pravda-cz.com", + "first_observed": "2024-03-20T00:00:00Z", + "subdomains": ["czechia.news-pravda.com"], + }, + { + "domain": "pravda-sk.com", + "first_observed": "2024-03-20T00:00:00Z", + "subdomains": ["slovakia.news-pravda.com"], + }, + { + "domain": "pravda-si.com", + "first_observed": "2024-03-20T00:00:00Z", + "subdomains": ["slovenia.news-pravda.com"], + }, + { + "domain": "pravda-hr.com", + "first_observed": "2024-03-20T00:00:00Z", + "subdomains": ["croatia.news-pravda.com"], + }, + { + "domain": "pravda-hu.com", + "first_observed": "2024-03-20T00:00:00Z", + "subdomains": ["hungary.news-pravda.com"], + }, + { + "domain": "pravda-ro.com", + "first_observed": "2024-03-20T00:00:00Z", + "subdomains": ["romania.news-pravda.com"], + }, + { + "domain": "pravda-bg.com", + "first_observed": "2024-03-20T00:00:00Z", + "subdomains": ["bulgaria.news-pravda.com"], + }, + { + "domain": "pravda-gr.com", + "first_observed": "2024-03-20T00:00:00Z", + "subdomains": ["greece.news-pravda.com"], + }, + { + "domain": "pravda-cy.com", + "first_observed": "2024-03-20T00:00:00Z", + "subdomains": ["cyprus.news-pravda.com"], + }, + { + "domain": "pravda-it.com", + "first_observed": "2024-03-20T00:00:00Z", + "subdomains": ["italy.news-pravda.com"], + }, + { + "domain": "pravda-ie.com", + "first_observed": "2024-03-20T00:00:00Z", + "subdomains": ["ireland.news-pravda.com"], + }, + { + "domain": "pravda-pt.com", + "first_observed": "2024-03-20T00:00:00Z", + "subdomains": ["portuguese.news-pravda.com", "portugal.news-pravda.com"], + }, + { + "domain": "pravda-al.com", + "first_observed": "2024-03-26T00:00:00Z", + "subdomains": ["albania.news-pravda.com"], + }, + { + "domain": "pravda-ba.com", + "first_observed": "2024-03-26T00:00:00Z", + "subdomains": ["bosnia-herzegovina.news-pravda.com"], + }, + { + "domain": "pravda-mk.com", + "first_observed": "2024-03-26T00:00:00Z", + "subdomains": ["north-macedonia.news-pravda.com"], + }, + { + "domain": "pravda-md.com", + "first_observed": "2024-03-26T00:00:00Z", + "subdomains": ["md.news-pravda.com"], + }, + { + "domain": "pravda-rs.com", + "first_observed": "2024-03-26T00:00:00Z", + "subdomains": ["serbia.news-pravda.com"], + }, + { + "domain": "pravda-no.com", + "first_observed": "2024-03-26T00:00:00Z", + "subdomains": ["norway.news-pravda.com"], + }, + { + "domain": "pravda-cf.com", + "first_observed": "2024-03-26T00:00:00Z", + "subdomains": ["rca.news-pravda.com"], + }, + { + "domain": "pravda-bf.com", + "first_observed": "2024-03-26T00:00:00Z", + "subdomains": ["burkina-faso.news-pravda.com"], + }, + { + "domain": "pravda-ne.com", + "first_observed": "2024-03-26T00:00:00Z", + "subdomains": ["niger.news-pravda.com"], + }, + { + "domain": "pravda-jp.com", + "first_observed": "2024-03-26T00:00:00Z", + "subdomains": ["japan.news-pravda.com"], + }, + { + "domain": "pravda-tw.com", + "first_observed": "2024-03-26T00:00:00Z", + "subdomains": ["taiwan.news-pravda.com"], + }, + { + "domain": "pravda-ko.com", + "first_observed": "2024-03-26T00:00:00Z", + "subdomains": [ + "korea.news-pravda.com", + "south-korea.news-pravda.com", + "dprk.news-pravda.com", + ], + }, +] + +# Reverse lookup: news-pravda.com subdomain → parent pravda-XX.com domain +SUBDOMAIN_TO_DOMAIN: dict[str, str] = { + sub: entry["domain"] for entry in PRAVDA_DOMAINS for sub in entry["subdomains"] +} + +# Set of all known pravda-XX.com domain values +PRAVDA_DOMAIN_VALUES: set[str] = {entry["domain"] for entry in PRAVDA_DOMAINS} diff --git a/external-import/checkfirst-import-connector/src/connector/settings.py b/external-import/checkfirst-import-connector/src/connector/settings.py index 4980de10f5a..59b9037b7c3 100644 --- a/external-import/checkfirst-import-connector/src/connector/settings.py +++ b/external-import/checkfirst-import-connector/src/connector/settings.py @@ -1,25 +1,33 @@ -import re -from datetime import datetime, timedelta, timezone -from typing import Literal +from datetime import timedelta from connectors_sdk import ( BaseConfigModel, BaseConnectorSettings, BaseExternalImportConnectorConfig, + DatetimeFromIsoString, + ListFromString, ) -from pydantic import Field, field_validator +from connectors_sdk.models.enums import TLPLevel +from pydantic import Field, HttpUrl, SecretStr, TypeAdapter class ExternalImportConnectorConfig(BaseExternalImportConnectorConfig): - """Common configuration for connectors of type `EXTERNAL_IMPORT`.""" - + """ + Override the `BaseExternalImportConnectorConfig` to add parameters and/or defaults + to the configuration for connectors of type `EXTERNAL_IMPORT`. + """ + + id: str = Field( + description="A UUID v4 to identify the connector in OpenCTI.", + default="04e5ba20-0e6f-4265-a723-4803502fd6db", + ) name: str = Field( description="The name of the connector.", default="Checkfirst Import Connector", ) - log_level: Literal["debug", "info", "warn", "warning", "error"] = Field( - description="The minimum level of logs to display.", - default="info", + scope: ListFromString = Field( + description="The scope of the connector.", + default=["checkfirst"], ) duration_period: timedelta = Field( description="The period of time to await between two runs of the connector.", @@ -27,33 +35,34 @@ class ExternalImportConnectorConfig(BaseExternalImportConnectorConfig): ) -class CheckfirstConfig(BaseConfigModel): - """Connector-specific configuration.""" - - api_url: str = Field( - description="Base URL for the API endpoint (e.g., https://api.example.com).", - ) - - @field_validator("api_url") - @classmethod - def _strip_trailing_slash(cls, v: str) -> str: - return v.rstrip("/") +class CheckfirstImportConnectorConfig(BaseConfigModel): + """ + Define parameters and/or defaults for the configuration specific to the `CheckfirstImportConnector`. + """ - api_key: str = Field( - description="API key for authentication (sent in Api-Key header).", + api_url: HttpUrl = Field( + description="Base URL for the API endpoint (e.g., https://api.example.com)." ) api_endpoint: str = Field( description="API endpoint path (e.g., /v1/articles).", default="/v1/articles", ) - - since: str = Field( + api_key: SecretStr = Field( + description="API key for authentication (sent in Api-Key header)." + ) + since: DatetimeFromIsoString = Field( description=( "Only ingest articles published on or after this date. " "Accepts ISO 8601 absolute dates (e.g., 2024-01-01T00:00:00Z) " - "or durations relative to now (e.g., P365D, P1Y, P6M, P4W)." + "or durations relative to now (e.g., P365D, P1Y, P6M, P4W). " + "Defaults to 1 year ago." + ), + # `default_factory` is used to set a dynamic default value (datetime) at runtime + default_factory=lambda: TypeAdapter(DatetimeFromIsoString).validate_python( + "P1Y" ), - default="P365D", + # but a fixed default value (ISO string) must be used in the schema for documentation purposes + json_schema_extra={"default": "P1Y"}, ) force_reprocess: bool = Field( description=( @@ -62,47 +71,24 @@ def _strip_trailing_slash(cls, v: str) -> str: ), default=False, ) - - tlp_level: Literal[ - "clear", - "white", - "green", - "amber", - "amber+strict", - "red", - ] = Field( + tlp_level: TLPLevel = Field( description="TLP marking level applied to created STIX entities.", - default="clear", + default=TLPLevel.CLEAR, ) - max_row_bytes: int | None = Field( description="Skip any API row larger than this approximate number of bytes.", default=None, ) - @field_validator("since") - @classmethod - def _resolve_since(cls, v: str) -> str: - """Resolve ISO 8601 duration strings to absolute UTC datetime strings.""" - match = re.fullmatch(r"P(\d+)(Y|M|W|D)", v.strip(), re.IGNORECASE) - if match: - amount = int(match.group(1)) - unit = match.group(2).upper() - delta_map = { - "D": timedelta(days=amount), - "W": timedelta(weeks=amount), - "Y": timedelta(days=amount * 365), - "M": timedelta(days=amount * 30), - } - resolved = datetime.now(tz=timezone.utc) - delta_map[unit] - return resolved.strftime("%Y-%m-%dT%H:%M:%SZ") - return v - class ConnectorSettings(BaseConnectorSettings): - """Settings model loaded from env vars / config.yml.""" + """ + Override `BaseConnectorSettings` to include `ExternalImportConnectorConfig` and `CheckfirstImportConnectorConfig`. + """ connector: ExternalImportConnectorConfig = Field( default_factory=ExternalImportConnectorConfig ) - checkfirst: CheckfirstConfig = Field(default_factory=CheckfirstConfig) + checkfirst: CheckfirstImportConnectorConfig = Field( + default_factory=CheckfirstImportConnectorConfig + ) diff --git a/external-import/checkfirst-import-connector/src/main.py b/external-import/checkfirst-import-connector/src/main.py index 2dbf3bd6f32..bcbe000ff1e 100644 --- a/external-import/checkfirst-import-connector/src/main.py +++ b/external-import/checkfirst-import-connector/src/main.py @@ -1,13 +1,22 @@ import traceback -from connector.connector import CheckfirstImportConnector -from connector.settings import ConnectorSettings +from connector import CheckfirstImportConnector, ConnectorSettings from pycti import OpenCTIConnectorHelper if __name__ == "__main__": + """ + Entry point of the script + + - traceback.print_exc(): This function prints the traceback of the exception to the standard error (stderr). + The traceback includes information about the point in the program where the exception occurred, + which is very useful for debugging purposes. + - exit(1): effective way to terminate a Python program when an error is encountered. + It signals to the operating system and any calling processes that the program did not complete successfully. + """ try: settings = ConnectorSettings() helper = OpenCTIConnectorHelper(config=settings.to_helper_config()) + connector = CheckfirstImportConnector(config=settings, helper=helper) connector.run() except Exception: diff --git a/external-import/checkfirst-import-connector/src/requirements.txt b/external-import/checkfirst-import-connector/src/requirements.txt index a1532585904..5a9a3619d5f 100644 --- a/external-import/checkfirst-import-connector/src/requirements.txt +++ b/external-import/checkfirst-import-connector/src/requirements.txt @@ -1,7 +1,5 @@ -pycti==7.260309.0 +pycti==7.260515.0 stix2>=3.0.1 python-dateutil>=2.9.0.post0 -pyyaml>=6.0.1 - -# OpenCTI connectors SDK (typed settings, deterministic models helpers) -connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@6.9.17#subdirectory=connectors-sdk +pydantic>=2.12.5,<3 +connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk diff --git a/external-import/checkfirst-import-connector/src/checkfirst_dataset/reporting.py b/external-import/checkfirst-import-connector/src/utils/run_reporter.py similarity index 75% rename from external-import/checkfirst-import-connector/src/checkfirst_dataset/reporting.py rename to external-import/checkfirst-import-connector/src/utils/run_reporter.py index dc4098e320d..2f9d01f64f3 100644 --- a/external-import/checkfirst-import-connector/src/checkfirst_dataset/reporting.py +++ b/external-import/checkfirst-import-connector/src/utils/run_reporter.py @@ -17,13 +17,12 @@ class SkipReason(str, Enum): ROW_MISSING_REQUIRED_FIELDS = "row_missing_required_fields" ROW_INVALID_PUBLICATION_DATE = "row_invalid_publication_date" ROW_MAPPING_ERROR = "row_mapping_error" - API_ERROR = "api_error" BUNDLE_SEND_ERROR = "bundle_send_error" @dataclass -class RunReport: +class RunReporter: """Accumulates basic counters for a connector run.""" pages_fetched: int = 0 @@ -34,6 +33,12 @@ class RunReport: skipped: Counter[str] = field(default_factory=Counter) errors: Counter[str] = field(default_factory=Counter) + def __new__(cls, *args, **kwargs): + """Implement singleton pattern to ensure only one reporter instance exists.""" + if not hasattr(cls, "_instance"): + cls._instance = super().__new__(cls) + return cls._instance + def skip(self, reason: SkipReason, *, count: int = 1) -> None: """Record that we skipped processing for a known reason.""" self.skipped[reason.value] += count @@ -55,3 +60,15 @@ def to_summary(self) -> str: if self.errors: parts.append(f"errors={dict(self.errors)}") return f"Checkfirst run: {', '.join(parts)}" + + def reset(self) -> None: + """Reset reporter to initial state.""" + self.pages_fetched = 0 + self.rows_seen = 0 + self.rows_mapped = 0 + self.bundles_sent = 0 + self.skipped.clear() + self.errors.clear() + + +run_reporter = RunReporter() # singleton instance to be used across the connector diff --git a/internal-enrichment/anyrun-task/tests/conftest.py b/external-import/checkfirst-import-connector/tests/conftest.py similarity index 100% rename from internal-enrichment/anyrun-task/tests/conftest.py rename to external-import/checkfirst-import-connector/tests/conftest.py diff --git a/external-import/checkfirst-import-connector/tests/test-requirements.txt b/external-import/checkfirst-import-connector/tests/test-requirements.txt new file mode 100644 index 00000000000..d405632324b --- /dev/null +++ b/external-import/checkfirst-import-connector/tests/test-requirements.txt @@ -0,0 +1,2 @@ +-r ../src/requirements.txt +pytest==9.0.3 diff --git a/external-import/checkfirst-import-connector/tests/test_main.py b/external-import/checkfirst-import-connector/tests/test_main.py new file mode 100644 index 00000000000..7673ab145d7 --- /dev/null +++ b/external-import/checkfirst-import-connector/tests/test_main.py @@ -0,0 +1,103 @@ +from typing import Any +from unittest.mock import MagicMock + +import pytest +from connector import CheckfirstImportConnector, ConnectorSettings +from pycti import OpenCTIConnectorHelper + + +@pytest.fixture +def mock_opencti_connector_helper(monkeypatch): + """Mock all heavy dependencies of OpenCTIConnectorHelper, typically API calls to OpenCTI.""" + + module_import_path = "pycti.connector.opencti_connector_helper" + monkeypatch.setattr(f"{module_import_path}.killProgramHook", MagicMock()) + monkeypatch.setattr(f"{module_import_path}.sched.scheduler", MagicMock()) + monkeypatch.setattr(f"{module_import_path}.ConnectorInfo", MagicMock()) + monkeypatch.setattr(f"{module_import_path}.OpenCTIApiClient", MagicMock()) + monkeypatch.setattr(f"{module_import_path}.OpenCTIConnector", MagicMock()) + monkeypatch.setattr(f"{module_import_path}.OpenCTIMetricHandler", MagicMock()) + monkeypatch.setattr(f"{module_import_path}.PingAlive", MagicMock()) + + +class StubConnectorSettings(ConnectorSettings): + """ + Subclass of `ConnectorSettings` (implementation of `BaseConnectorSettings`) for testing purpose. + It overrides `BaseConnectorSettings._load_config_dict` to return a fake but valid config dict. + """ + + @classmethod + def _load_config_dict(cls, _, handler) -> dict[str, Any]: + return handler( + { + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + "connector": { + "id": "connector-id", + "name": "Test Connector", + "scope": "test, connector", + "log_level": "error", + "duration_period": "PT5M", + }, + "checkfirst": { + "api_url": "https://api.checkfirst.example", + "api_key": "test-api-key", + "api_endpoint": "/v1/articles", + "since": "2025-01-01T00:00:00Z", + "force_reprocess": False, + "tlp_level": "clear", + "max_row_bytes": 1048576, + }, + } + ) + + +def test_connector_settings_is_instantiated(): + """ + Test that the implementation of `BaseConnectorSettings` (from `connectors-sdk`) can be instantiated successfully: + - the implemented class MUST have a method `to_helper_config` (inherited from `BaseConnectorSettings`) + - the method `to_helper_config` MUST return a dict (as in base class) + """ + settings = StubConnectorSettings() + + assert isinstance(settings, ConnectorSettings) + assert isinstance(settings.to_helper_config(), dict) + + +def test_opencti_connector_helper_is_instantiated(mock_opencti_connector_helper): + """ + Test that `OpenCTIConnectorHelper` (from `pycti`) can be instantiated successfully: + - the value of `settings.to_helper_config` MUST be the expected dict for `OpenCTIConnectorHelper` + - the helper MUST be able to get its instance's attributes from the config dict + + :param mock_opencti_connector_helper: `OpenCTIConnectorHelper` is mocked during this test to avoid any external calls to OpenCTI API + """ + settings = StubConnectorSettings() + helper = OpenCTIConnectorHelper(config=settings.to_helper_config()) + + assert helper.opencti_url == "http://localhost:8080/" + assert helper.opencti_token == "test-token" + assert helper.connect_id == "connector-id" + assert helper.connect_name == "Test Connector" + assert helper.connect_scope == "test,connector" + assert helper.log_level == "ERROR" + assert helper.connect_duration_period == "PT5M" + + +def test_connector_is_instantiated(mock_opencti_connector_helper): + """ + Test that the connector's main class can be instantiated successfully: + - the connector's main class MUST be able to access env/config vars through `self.config` + - the connector's main class MUST be able to access `pycti` API through `self.helper` + + :param mock_opencti_connector_helper: `OpenCTIConnectorHelper` is mocked during this test to avoid any external calls to OpenCTI API + """ + settings = StubConnectorSettings() + helper = OpenCTIConnectorHelper(config=settings.to_helper_config()) + + connector = CheckfirstImportConnector(config=settings, helper=helper) + + assert connector.config == settings + assert connector.helper == helper diff --git a/external-import/checkfirst-import-connector/tests/tests_connector/test_converter_to_stix.py b/external-import/checkfirst-import-connector/tests/tests_connector/test_converter_to_stix.py new file mode 100644 index 00000000000..692381c407c --- /dev/null +++ b/external-import/checkfirst-import-connector/tests/tests_connector/test_converter_to_stix.py @@ -0,0 +1,185 @@ +"""Tests for ConverterToStix — validates that structural relationships +produce stable STIX IDs across articles and that Infrastructure objects are cached.""" + +from datetime import datetime, timezone +from unittest.mock import MagicMock + +import pytest +from checkfirst_client.api_models import Article +from connector.converter_to_stix import ConverterToStix + + +@pytest.fixture +def converter(): + helper = MagicMock() + helper.connector_logger = MagicMock() + return ConverterToStix(helper=helper, tlp_level="clear") + + +def _make_article( + url: str = "https://france.news-pravda.com/article-1", + source_title: str = "Telegram Source", + source_url: str = "https://t.me/source", + published_date: datetime | None = None, + row_number: int = 1, + article_id: str = "abc123", +) -> Article: + return Article( + _id=article_id, + row_number=row_number, + url=url, + source_title=source_title, + source_url=source_url, + published_date=published_date or datetime(2025, 3, 15, tzinfo=timezone.utc), + title="Test Article", + ) + + +class TestConverterCache: + """DomainName, Infrastructure and Campaign should be cached for performance issues + (many objects are shared across different articles).""" + + def test_same_domain_returns_same_domain_name_object(self, converter): + """create_domain_name() with same value should return the same cached object.""" + domain_1 = converter.create_domain_name(value="example.com") + domain_2 = converter.create_domain_name(value="example.com") + + assert ( + domain_1 is domain_2 + ), "create_domain_name should return cached instance for same domain" + + def test_same_year_returns_same_campaign_object(self, converter): + """get_campaign_for_year() with same year should return the same cached object.""" + campaign_1, _ = converter.get_campaign_for_year(2025) + campaign_2, _ = converter.get_campaign_for_year(2025) + + assert ( + campaign_1 is campaign_2 + ), "get_campaign_for_year should return cached instance for same year" + + +class TestPravdaInfrastructure: + """Test Infrastructure objects created for the Pravda bundle (created on connector's first run).""" + + def test_infrastructure_bundle_contains_first_seen(self, converter): + """Infrastructure objects created for the Pravda bundle should contain first_seen attribute.""" + campaign, _ = converter.get_campaign_for_year(2023) + objects = converter.convert_pravda_network_infrastructure(campaign) + + infra_objects = [o for o in objects if o.id.startswith("infrastructure--")] + assert len(infra_objects) > 0 + for infra in infra_objects: + assert ( + infra.first_seen is not None + ), f"Pravda infrastructure {infra.name} should have first_seen" + + +class TestArticleConversion: + """Articles conversion should produce a structural subset of STIX objects that is identical for same-domain articles, + while allowing per-article objects (MediaContent and its relationships) to differ. + """ + + def test_article_shared_objects_are_identical(self, converter): + """Two same-domain articles should have an identical structural subset.""" + campaign, attributed_to = converter.get_campaign_for_year(2025) + + article_1 = _make_article( + url="https://france.news-pravda.com/article-1", + published_date=datetime(2025, 1, 10, tzinfo=timezone.utc), + article_id="a1", + ) + article_2 = _make_article( + url="https://france.news-pravda.com/article-2", + published_date=datetime(2025, 6, 20, tzinfo=timezone.utc), + article_id="a2", + ) + + objects_1 = converter.convert_article(article_1, campaign) + objects_2 = converter.convert_article(article_2, campaign) + + all_ids_1 = {obj.id for obj in [campaign, attributed_to] + objects_1} + all_ids_2 = {obj.id for obj in [campaign, attributed_to] + objects_2} + + def _is_per_article_object(obj) -> bool: + # Only MediaContent and its relationships should be considered per-article objects. + if obj.id.startswith("media-content--"): + return True + if obj.id.startswith("relationship--") and ( + obj.source.id.startswith("media-content--") + or obj.target.id.startswith("media-content--") + ): + return True + + return False + + per_article_ids_1 = { + obj.id + for obj in [campaign, attributed_to] + objects_1 + if _is_per_article_object(obj) + } + per_article_ids_2 = { + obj.id + for obj in [campaign, attributed_to] + objects_2 + if _is_per_article_object(obj) + } + + structural_ids_1 = all_ids_1 - per_article_ids_1 + structural_ids_2 = all_ids_2 - per_article_ids_2 + + # Structural subset should be identical for same-domain articles. + assert len(structural_ids_1) > 0 + assert structural_ids_1 == structural_ids_2 + + def test_per_article_objects_remain_unique(self, converter): + """MediaContent and its relationships should remain unique per article.""" + campaign, _ = converter.get_campaign_for_year(2025) + + article_1 = _make_article( + url="https://france.news-pravda.com/article-1", + published_date=datetime(2025, 1, 10, tzinfo=timezone.utc), + article_id="a1", + ) + article_2 = _make_article( + url="https://france.news-pravda.com/article-2", + published_date=datetime(2025, 6, 20, tzinfo=timezone.utc), + article_id="a2", + ) + + objects_1 = converter.convert_article(article_1, campaign) + objects_2 = converter.convert_article(article_2, campaign) + + content_1 = [o for o in objects_1 if o.id.startswith("media-content--")] + content_2 = [o for o in objects_2 if o.id.startswith("media-content--")] + + assert len(content_1) == 1 + assert len(content_2) == 1 + assert ( + content_1[0].id != content_2[0].id + ), "Different articles should produce different MediaContent STIX IDs" + + def test_structural_relationships_have_no_start_time(self, converter): + """Structural relationships should not carry article-specific start_time.""" + campaign, _ = converter.get_campaign_for_year(2025) + article = _make_article() + + objects = converter.convert_article(article, campaign) + + for obj in objects: + if not obj.id.startswith("relationship--"): + continue + + is_campaign_source = obj.source.id.startswith("campaign--") + is_content_involved = obj.source.id.startswith( + "media-content--" + ) or obj.target.id.startswith("media-content--") + + # Per-article relationships (involving MediaContent) may have start_time + if is_content_involved: + continue + + # Structural relationships should NOT have start_time + if is_campaign_source or obj.type in ("consists-of",): + assert obj.start_time is None, ( + f"Structural relationship {obj.type} from {obj.source.id[:20]}... " + f"should not have start_time, got {obj.start_time}" + ) diff --git a/internal-enrichment/anyrun-task/tests/tests_connector/test_settings.py b/external-import/checkfirst-import-connector/tests/tests_connector/test_settings.py similarity index 57% rename from internal-enrichment/anyrun-task/tests/tests_connector/test_settings.py rename to external-import/checkfirst-import-connector/tests/tests_connector/test_settings.py index b0c07e6e65d..cb4cf350ddb 100644 --- a/internal-enrichment/anyrun-task/tests/tests_connector/test_settings.py +++ b/external-import/checkfirst-import-connector/tests/tests_connector/test_settings.py @@ -1,7 +1,7 @@ from typing import Any import pytest -from anyrun_task import ConnectorSettings +from connector import ConnectorSettings from connectors_sdk import BaseConfigModel, ConfigValidationError @@ -10,48 +10,39 @@ [ pytest.param( { - "opencti": {"url": "http://localhost:8080", "token": "test-token"}, + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, "connector": { "id": "connector-id", "name": "Test Connector", "scope": "test, connector", "log_level": "error", - "auto": True, + "duration_period": "PT5M", }, - "anyrun": { - "token": "SecretStr", - "max_tlp": "TLP:AMBER", - "url": "https://api.any.run", - "timer": 42, - "os": "windows", - "privacy": "bylink", - "automated_interactivity": True, - "ioc": True, - "mitre": True, - "processes": True, - "task_timer": 60, - "os_bitness": "64", - "os_version": "10", - "os_locale": "en-US", - "os_browser": "Google Chrome", + "checkfirst": { + "api_url": "https://api.checkfirst.example", + "api_key": "test-api-key", + "api_endpoint": "/v1/articles", + "since": "2025-01-01T00:00:00Z", + "force_reprocess": True, + "tlp_level": "clear", + "max_row_bytes": 8192, }, }, id="full_valid_settings_dict", ), pytest.param( { - "opencti": {"url": "http://localhost:8080", "token": "test-token"}, - "anyrun": { - "token": "SecretStr", - "max_tlp": "TLP:AMBER", - "url": "https://api.any.run", - "timer": 42, - "os": "windows", - "privacy": "bylink", - "automated_interactivity": True, - "ioc": True, - "mitre": True, - "processes": True, + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + "connector": {}, + "checkfirst": { + "api_url": "https://api.checkfirst.example", + "api_key": "test-api-key", }, }, id="minimal_valid_settings_dict", @@ -80,7 +71,7 @@ def _load_config_dict(cls, _, handler) -> dict[str, Any]: settings = FakeConnectorSettings() assert isinstance(settings.opencti, BaseConfigModel) is True assert isinstance(settings.connector, BaseConfigModel) is True - assert isinstance(settings.anyrun, BaseConfigModel) is True + assert isinstance(settings.checkfirst, BaseConfigModel) is True @pytest.mark.parametrize( @@ -95,23 +86,11 @@ def _load_config_dict(cls, _, handler) -> dict[str, Any]: "name": "Test Connector", "scope": "test, connector", "log_level": "error", + "duration_period": "PT5M", }, - "anyrun": { - "token": "SecretStr", - "max_tlp": "TLP:AMBER", - "url": "https://api.any.run", - "timer": 42, - "os": "windows", - "privacy": "bylink", - "automated_interactivity": True, - "ioc": True, - "mitre": True, - "processes": True, - "task_timer": 60, - "os_bitness": "64", - "os_version": "10", - "os_locale": "en-US", - "os_browser": "Google Chrome", + "checkfirst": { + "api_url": "https://api.checkfirst.example", + "api_key": "test-api-key", }, }, "opencti.token", @@ -119,29 +98,20 @@ def _load_config_dict(cls, _, handler) -> dict[str, Any]: ), pytest.param( { - "opencti": {"url": "http://localhost:8080", "token": "test-token"}, + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, "connector": { "id": 123456, "name": "Test Connector", "scope": "test, connector", "log_level": "error", + "duration_period": "PT5M", }, - "anyrun": { - "token": "SecretStr", - "max_tlp": "TLP:AMBER", - "url": "https://api.any.run", - "timer": 42, - "os": "windows", - "privacy": "bylink", - "automated_interactivity": True, - "ioc": True, - "mitre": True, - "processes": True, - "task_timer": 60, - "os_bitness": "64", - "os_version": "10", - "os_locale": "en-US", - "os_browser": "Google Chrome", + "checkfirst": { + "api_url": "https://api.checkfirst.example", + "api_key": "test-api-key", }, }, "connector.id", @@ -170,4 +140,5 @@ def _load_config_dict(cls, _, handler) -> dict[str, Any]: with pytest.raises(ConfigValidationError) as err: FakeConnectorSettings() + assert str("Error validating configuration") in str(err) diff --git a/external-import/cisa-known-exploited-vulnerabilities/.env.sample b/external-import/cisa-known-exploited-vulnerabilities/.env.sample index 775b9fd9922..92f0d3c27b9 100644 --- a/external-import/cisa-known-exploited-vulnerabilities/.env.sample +++ b/external-import/cisa-known-exploited-vulnerabilities/.env.sample @@ -1,3 +1,6 @@ # OpenCTI configuration OPENCTI_URL=http://localhost:PORT -OPENCTI_TOKEN=ChangeMe \ No newline at end of file +OPENCTI_TOKEN=ChangeMe + +# CISA KEV connector specific +#CISA_KEV_FLAG_ONLY=false diff --git a/external-import/cisa-known-exploited-vulnerabilities/README.md b/external-import/cisa-known-exploited-vulnerabilities/README.md index 4e7476dfb46..425ee2e360a 100644 --- a/external-import/cisa-known-exploited-vulnerabilities/README.md +++ b/external-import/cisa-known-exploited-vulnerabilities/README.md @@ -22,6 +22,7 @@ The CISA KEV connector imports the Known Exploited Vulnerabilities Catalog from - [Manual Deployment](#manual-deployment) - [Usage](#usage) - [Behavior](#behavior) + - [KEV Flag Only Mode](#kev-flag-only-mode) - [Debugging](#debugging) - [Additional information](#additional-information) @@ -65,6 +66,7 @@ There are a number of configuration options, which are set either in `docker-com |-------------------------|----------------------------|---------------------------------|-------------------------------------------------------------------------------|-----------|------------------------------------------------------------------------| | Catalog URL | cisa.catalog_url | `CISA_CATALOG_URL` | https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json | No | URL of the CISA KEV catalog JSON feed. | | Create Infrastructures | cisa.create_infrastructures| `CISA_CREATE_INFRASTRUCTURES` | true | No | Create Infrastructure entities for affected products. | +| KEV Flag Only | cisa.kev_flag_only | `CISA_KEV_FLAG_ONLY` | false | No | When enabled, the connector only sets the `x_opencti_cisa_kev` flag on Vulnerability objects without modifying any other attribute (description, dates, markings) and without creating additional entities or relationships. See [KEV Flag Only Mode](#kev-flag-only-mode). | | TLP | cisa.tlp | `CISA_TLP` | TLP:CLEAR | No | TLP marking for imported data (`TLP:CLEAR`, `TLP:GREEN`, `TLP:AMBER`, `TLP:AMBER+STRICT`, `TLP:RED`). | | Interval (deprecated) | cisa.interval | `CISA_INTERVAL` | 7 | No | **[DEPRECATED]** Interval in days between runs. Use `CONNECTOR_DURATION_PERIOD` instead. | @@ -93,6 +95,7 @@ Configure the connector in `docker-compose.yml`: - CONNECTOR_DURATION_PERIOD=P1D - CISA_CATALOG_URL=https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json - CISA_CREATE_INFRASTRUCTURES=true + - CISA_KEV_FLAG_ONLY=false - CISA_TLP=TLP:CLEAR restart: always ``` @@ -183,8 +186,26 @@ graph LR 1. **Catalog Version Check**: Only processes if catalog `dateReleased` has changed since last run 2. **Custom Property**: All vulnerabilities marked with `x_opencti_cisa_kev: true` for easy filtering -3. **Vendor Tracking**: Creates Identity entities for each unique vendor -4. **Optional Infrastructure**: Can optionally create Infrastructure entities for affected products +3. **Vendor Tracking**: Creates Identity entities for each unique vendor (disabled in KEV Flag Only mode) +4. **Optional Infrastructure**: Can optionally create Infrastructure entities for affected products (disabled in KEV Flag Only mode) + +### KEV Flag Only Mode + +When `CISA_KEV_FLAG_ONLY` is set to `true`, the connector operates in a minimal mode where it **only** sets the `x_opencti_cisa_kev: true` custom property on Vulnerability objects. In this mode: + +- **No attribute is modified** on the Vulnerability besides `x_opencti_cisa_kev` (no description, creation date, or TLP marking is set) +- **No additional entities** are created (no CISA Identity, vendor Identity, Software, or Infrastructure) +- **No relationships** are created + +This is useful when you already have Vulnerability data from other sources (e.g., a CVE connector) and you only want to tag which ones appear in the CISA KEV catalog, without overwriting any existing attributes. + +**Example configuration:** + +```yaml +- CISA_KEV_FLAG_ONLY=true +``` + +> **Note:** When `CISA_KEV_FLAG_ONLY` is enabled, the `CISA_CREATE_INFRASTRUCTURES` and `CISA_TLP` options have no effect. ### Filtering KEV Vulnerabilities diff --git a/external-import/cisa-known-exploited-vulnerabilities/__metadata__/CONNECTOR_CONFIG_DOC.md b/external-import/cisa-known-exploited-vulnerabilities/__metadata__/CONNECTOR_CONFIG_DOC.md index f7772d127ec..84a66d70e31 100644 --- a/external-import/cisa-known-exploited-vulnerabilities/__metadata__/CONNECTOR_CONFIG_DOC.md +++ b/external-import/cisa-known-exploited-vulnerabilities/__metadata__/CONNECTOR_CONFIG_DOC.md @@ -15,5 +15,6 @@ Below is an exhaustive enumeration of all configurable parameters available, eac | CONNECTOR_DURATION_PERIOD | `string` | | Format: [`duration`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | `"P2D"` | Duration between two scheduled runs of the connector (ISO 8601 format). | | CISA_CATALOG_URL | `string` | | string | | `"https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json"` | The URL that hosts the KEV Catalog https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json. | | CISA_CREATE_INFRASTRUCTURES | `boolean` | | boolean | | `true` | Allows you to create or not create an infrastructure in OpenCTI. | +| CISA_KEV_FLAG_ONLY | `boolean` | | boolean | | `false` | When enabled, the connector only sets the x_opencti_cisa_kev flag on Vulnerability objects without creating additional entities (vendors, software, infrastructures) or relationships. | | CISA_TLP | `string` | | `TLP:WHITE` `TLP:CLEAR` `TLP:GREEN` `TLP:AMBER` `TLP:AMBER+STRICT` `TLP:RED` | | `"TLP:CLEAR"` | Traffic Light Protocol (TLP) level to apply on objects imported into OpenCTI. Possible values: TLP:CLEAR, TLP:GREEN, TLP:AMBER, TLP:AMBER+STRICT, TLP:RED. | | CISA_INTERVAL | `integer` | | integer | ⛔️ | `7` | [DEPRECATED] Interval in days between two scheduled runs of the connector. | diff --git a/external-import/cisa-known-exploited-vulnerabilities/__metadata__/connector_config_schema.json b/external-import/cisa-known-exploited-vulnerabilities/__metadata__/connector_config_schema.json index bce458d27db..b08abbc355f 100644 --- a/external-import/cisa-known-exploited-vulnerabilities/__metadata__/connector_config_schema.json +++ b/external-import/cisa-known-exploited-vulnerabilities/__metadata__/connector_config_schema.json @@ -62,6 +62,11 @@ "description": "Allows you to create or not create an infrastructure in OpenCTI.", "type": "boolean" }, + "CISA_KEV_FLAG_ONLY": { + "default": false, + "description": "When enabled, the connector only sets the x_opencti_cisa_kev flag on Vulnerability objects without creating additional entities (vendors, software, infrastructures) or relationships.", + "type": "boolean" + }, "CISA_TLP": { "default": "TLP:CLEAR", "description": "Traffic Light Protocol (TLP) level to apply on objects imported into OpenCTI. Possible values: TLP:CLEAR, TLP:GREEN, TLP:AMBER, TLP:AMBER+STRICT, TLP:RED.", diff --git a/external-import/cisa-known-exploited-vulnerabilities/src/main.py b/external-import/cisa-known-exploited-vulnerabilities/src/main.py index 213630e0bd6..6cbda2795d7 100644 --- a/external-import/cisa-known-exploited-vulnerabilities/src/main.py +++ b/external-import/cisa-known-exploited-vulnerabilities/src/main.py @@ -30,6 +30,7 @@ def __init__(self): # Extra config self.cisa_catalog_url = self.config.cisa.catalog_url self.cisa_create_infrastructures = self.config.cisa.create_infrastructures + self.cisa_kev_flag_only = self.config.cisa.kev_flag_only self.tlp = self.config.cisa.tlp self.cisa_interval = self.config.cisa.interval @@ -111,8 +112,24 @@ def set_tlp_marking(self, tlp_mark): def build_bundle(self, data): self.helper.log_info("Building CISA Bundle") vuln = data - stix_objects = [self.created_by_stix] vuln_cve = vuln["cveID"] + + # In kev_flag_only mode, only emit a minimal Vulnerability carrying + # the x_opencti_cisa_kev flag — no description, dates, markings, + # vendors, software, infrastructures or relationships are touched. + if self.cisa_kev_flag_only: + stix_vuln = stix2.Vulnerability( + id=Vulnerability.generate_id(vuln_cve), + name=vuln_cve, + custom_properties={ + "x_opencti_cisa_kev": True, + }, + ) + bundle = self.helper.stix2_create_bundle([stix_vuln]) + self.helper.log_info("CISA Bundle Complete (KEV flag only mode)") + return bundle + + stix_objects = [self.created_by_stix] vendor_name = vuln["vendorProject"] product = vuln["product"] description = vuln["shortDescription"] @@ -134,6 +151,7 @@ def build_bundle(self, data): }, ) stix_objects.append(stix_vuln) + vuln_id = stix_vuln["id"] # Software vendor diff --git a/external-import/cisa-known-exploited-vulnerabilities/src/models/configs/cisakev_configs.py b/external-import/cisa-known-exploited-vulnerabilities/src/models/configs/cisakev_configs.py index 5871b7da71c..41356714d82 100644 --- a/external-import/cisa-known-exploited-vulnerabilities/src/models/configs/cisakev_configs.py +++ b/external-import/cisa-known-exploited-vulnerabilities/src/models/configs/cisakev_configs.py @@ -31,6 +31,10 @@ class _ConfigLoaderCISAKEV(ConfigBaseSettings): default=True, description="Allows you to create or not create an infrastructure in OpenCTI.", ) + kev_flag_only: bool = Field( + default=False, + description="When enabled, the connector only sets the x_opencti_cisa_kev flag on Vulnerability objects without creating additional entities (vendors, software, infrastructures) or relationships.", + ) tlp: TLPToLower = Field( default="TLP:CLEAR", description="Traffic Light Protocol (TLP) level to apply on objects imported into OpenCTI. Possible values: TLP:CLEAR, TLP:GREEN, TLP:AMBER, TLP:AMBER+STRICT, TLP:RED.", diff --git a/external-import/cisa-known-exploited-vulnerabilities/src/requirements.txt b/external-import/cisa-known-exploited-vulnerabilities/src/requirements.txt index b0e2c0b26a2..f107d2c99dc 100644 --- a/external-import/cisa-known-exploited-vulnerabilities/src/requirements.txt +++ b/external-import/cisa-known-exploited-vulnerabilities/src/requirements.txt @@ -1,5 +1,5 @@ -pycti==7.260309.0 -urllib3==2.6.3 +pycti==7.260515.0 +urllib3==2.7.0 pydantic>=2.10, <3 pydantic-settings==2.9.1 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk \ No newline at end of file diff --git a/external-import/cisco-sma/src/requirements.txt b/external-import/cisco-sma/src/requirements.txt index 243b9332514..11befb70321 100644 --- a/external-import/cisco-sma/src/requirements.txt +++ b/external-import/cisco-sma/src/requirements.txt @@ -1,4 +1,4 @@ stix2==3.0.1 -requests==2.32.5 +requests==2.33.0 PyYAML==6.0.3 -pycti==7.260309.0 \ No newline at end of file +pycti==7.260515.0 \ No newline at end of file diff --git a/external-import/citalid/README.md b/external-import/citalid/README.md index bcc885fd2e6..c680d4e1cce 100644 --- a/external-import/citalid/README.md +++ b/external-import/citalid/README.md @@ -37,7 +37,7 @@ This connector retrieves STIX bundles from the Citalid API and imports them into ### Requirements -- OpenCTI Platform >= 7.260309.0 +- OpenCTI Platform >= 7.260515.0 - Citalid API access (customer subdomain, username, and password) ## Configuration variables diff --git a/external-import/citalid/src/requirements.txt b/external-import/citalid/src/requirements.txt index e9684a32073..f5b8181a0c7 100644 --- a/external-import/citalid/src/requirements.txt +++ b/external-import/citalid/src/requirements.txt @@ -1 +1 @@ -pycti==7.260309.0 \ No newline at end of file +pycti==7.260515.0 \ No newline at end of file diff --git a/external-import/cluster25/requirements.txt b/external-import/cluster25/requirements.txt index e1e0bd9718c..e3a19393203 100644 --- a/external-import/cluster25/requirements.txt +++ b/external-import/cluster25/requirements.txt @@ -1 +1 @@ -pycti==7.260309.0 +pycti==7.260515.0 diff --git a/external-import/cofense-threathq/src/requirements.txt b/external-import/cofense-threathq/src/requirements.txt index d0fcf8da4b9..1e7c758ef1d 100644 --- a/external-import/cofense-threathq/src/requirements.txt +++ b/external-import/cofense-threathq/src/requirements.txt @@ -1,7 +1,7 @@ -pycti==7.260309.0 +pycti==7.260515.0 validators==0.35.0 pydantic>=2.10, <3 -requests~=2.32.3 +requests~=2.33.0 stix2~=3.0.1 PyYAML==6.0.3 aiohttp~=3.13.2 diff --git a/external-import/cofense/src/requirements.txt b/external-import/cofense/src/requirements.txt index e20ecc24e4a..b7479bf64af 100644 --- a/external-import/cofense/src/requirements.txt +++ b/external-import/cofense/src/requirements.txt @@ -1,2 +1,2 @@ -pycti==7.260309.0 +pycti==7.260515.0 cofense-intelligence==5.2.0 diff --git a/external-import/comlaude/README.md b/external-import/comlaude/README.md index dbfa5af88cc..7da4cb40c3d 100644 --- a/external-import/comlaude/README.md +++ b/external-import/comlaude/README.md @@ -41,7 +41,7 @@ By integrating Comlaude's domain information with OpenCTI, the connector aids in ### Requirements -- OpenCTI Platform >= 7.260309.0 +- OpenCTI Platform >= 7.260515.0 - Comlaude API credentials (Username, Password, and API Key) ## Configuration variables diff --git a/external-import/comlaude/src/requirements.txt b/external-import/comlaude/src/requirements.txt index 374f8064963..1c7e7c0fe7e 100644 --- a/external-import/comlaude/src/requirements.txt +++ b/external-import/comlaude/src/requirements.txt @@ -1,3 +1,3 @@ -pycti==7.260309.0 +pycti==7.260515.0 pyjwt -requests +requests<=2.33.0 diff --git a/external-import/cpe/requirements.txt b/external-import/cpe/requirements.txt index 61eae523866..3db7ea79792 100644 --- a/external-import/cpe/requirements.txt +++ b/external-import/cpe/requirements.txt @@ -1,4 +1,4 @@ -pycti==7.260309.0 +pycti==7.260515.0 langcodes pydantic >=2.8.2, <3 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk diff --git a/external-import/cpe/src/cpe/connector.py b/external-import/cpe/src/cpe/connector.py index e26fd3a9d95..d50a5ee03f5 100644 --- a/external-import/cpe/src/cpe/connector.py +++ b/external-import/cpe/src/cpe/connector.py @@ -2,7 +2,6 @@ import sys import time from datetime import datetime, timezone -from uuid import uuid4 import langcodes import requests @@ -111,18 +110,6 @@ def _get_date_iso(self, timestamp: int) -> str: """ return datetime.fromtimestamp(timestamp, tz=timezone.utc).isoformat() - def _get_id(self, type: str) -> str: - """ - Generates a unique ID for a STIX2 object - - Args: - type (str): The type of the object to generate an ID for - - Returns: - str: A unique ID for the STIX object - """ - return f"{type}--{str(uuid4())}" - def _get_api_url(self, start_index, start_date, end_date) -> str: """ Returns the API URL to use for the connector @@ -197,22 +184,18 @@ def _json_to_stix(self, json_objects: list) -> list: nb_results = json_objects["resultsPerPage"] stix_objects = [] for i in range(nb_results): - cpe_infos = self._get_cpe_infos( - json_objects["products"][i]["cpe"]["cpeName"] - ) + cpename = json_objects["products"][i]["cpe"]["cpeName"] + cpe_infos = self._get_cpe_infos(cpename) if ( json_objects["products"][i]["cpe"]["deprecated"] is False and cpe_infos["is_hardware"] is False ): - self.helper.log_debug( - f"Creating a software for the CPE: {json_objects['products'][i]['cpe']['cpeName']}" - ) + self.helper.log_debug(f"Creating a software for the CPE: {cpename}") software = stix2.Software( type="software", spec_version="2.1", - id=self._get_id("software"), name=self._get_cpe_title(json_objects["products"][i]["cpe"]), - cpe=json_objects["products"][i]["cpe"]["cpeName"], + cpe=cpename, languages=cpe_infos["language"], vendor=cpe_infos["vendor"], version=cpe_infos["version"], diff --git a/external-import/cpe/tests/test-requirements.txt b/external-import/cpe/tests/test-requirements.txt index 24b529c78d0..e2c1b76505f 100644 --- a/external-import/cpe/tests/test-requirements.txt +++ b/external-import/cpe/tests/test-requirements.txt @@ -1,2 +1,2 @@ -r ../requirements.txt -pytest==8.4.2 +pytest==9.0.3 diff --git a/external-import/cpe/tests/test_main.py b/external-import/cpe/tests/test_main.py index 0f82e8661a1..0d778e52d84 100644 --- a/external-import/cpe/tests/test_main.py +++ b/external-import/cpe/tests/test_main.py @@ -97,3 +97,56 @@ def test_connector_is_instantiated(mock_opencti_connector_helper): assert connector.config == settings assert connector.helper == helper + + +def test_deterministic_id(mock_opencti_connector_helper): + """ + testing that two identical CPE provide the same STIX object, + while two different CPE do not provide the same STIX object + + :param mock_opencti_connector_helper: `OpenCTIConnectorHelper` is mocked during this test to avoid any external calls to OpenCTI API + """ + settings = StubConnectorSettings() + helper = OpenCTIConnectorHelper(config=settings.to_helper_config()) + + _json_object = { + "cpe": { + "cpeName": "cpe:2.3:a:adobe:flash_player:18.0:*:*:*:*:internet_explorer_10:*:*", + "deprecated": False, + "titles": [ + { + "title": "Adobe Flash Player 18.0 for Internet Explorer 10", + "lang": "en", + } + ], + } + } + _other_json_object = { + "cpe": { + "cpeName": "cpe:2.3:a:microsoft:internet_explorer:5.5:sp2:*:*:*:*:*:*", + "deprecated": False, + "titles": [ + { + "title": "Microsoft Internet Explorer 5.5 Service Pack 2", + "lang": "en", + } + ], + } + } + json_objects = { + "resultsPerPage": 3, + "products": [ + _json_object, + _json_object, + _other_json_object, + ], + } + connector = CPEConnector(config=settings, helper=helper) + + stix_objects = connector._json_to_stix(json_objects) + + assert len(stix_objects) == 3 + assert stix_objects[0] == stix_objects[1] + assert stix_objects[0].id == stix_objects[1].id + assert stix_objects[0] != stix_objects[2] + assert stix_objects[0].id != stix_objects[2].id diff --git a/external-import/criminalip-c2-daily-feed/src/requirements.txt b/external-import/criminalip-c2-daily-feed/src/requirements.txt index d2659512513..ed60d0fb630 100644 --- a/external-import/criminalip-c2-daily-feed/src/requirements.txt +++ b/external-import/criminalip-c2-daily-feed/src/requirements.txt @@ -1,3 +1,3 @@ -pycti==7.260309.0 -requests==2.32.5 +pycti==7.260515.0 +requests==2.33.0 pycountry==24.6.1 diff --git a/external-import/crits/src/requirements.txt b/external-import/crits/src/requirements.txt index e0a5dd9642d..c1e7e4c2b4f 100644 --- a/external-import/crits/src/requirements.txt +++ b/external-import/crits/src/requirements.txt @@ -1,3 +1,3 @@ -pycti==7.260309.0 +pycti==7.260515.0 python-dateutil validators diff --git a/external-import/crowdsec-import/src/requirements.txt b/external-import/crowdsec-import/src/requirements.txt index bbf852c4532..982fc987c02 100644 --- a/external-import/crowdsec-import/src/requirements.txt +++ b/external-import/crowdsec-import/src/requirements.txt @@ -1,4 +1,4 @@ -pycti==7.260309.0 +pycti==7.260515.0 pycountry==24.6.1 stix2==3.0.1 PyYAML==6.0.3 diff --git a/external-import/crowdstrike/.build.env b/external-import/crowdstrike/.build.env new file mode 100644 index 00000000000..e34a7661363 --- /dev/null +++ b/external-import/crowdstrike/.build.env @@ -0,0 +1 @@ +EXTRA_PACKAGES="libxslt libxml2" diff --git a/external-import/crowdstrike/README.md b/external-import/crowdstrike/README.md index baf0e981d7e..c76c4298ddb 100644 --- a/external-import/crowdstrike/README.md +++ b/external-import/crowdstrike/README.md @@ -85,6 +85,7 @@ There are a number of configuration options, which are set either in `docker-com | MITRE ATT&CK Enterprise URL | crowdstrike.attack_enterprise_url | `CROWDSTRIKE_ATTACK_ENTERPRISE_URL` | | No | Optional override URL for the MITRE ATT&CK Enterprise STIX dataset. If set, this URL is used instead of constructing one from the ATT&CK version (useful for air-gapped or mirrored environments). | | Actor Start Timestamp | crowdstrike.actor_start_timestamp | `CROWDSTRIKE_ACTOR_START_TIMESTAMP` | (30 days ago) | No | Unix timestamp. Empty = 30 days ago. 0 = ALL actors. | | Vulnerability Start Timestamp | crowdstrike.vulnerability_start_timestamp | `CROWDSTRIKE_VULNERABILITY_START_TIMESTAMP` | 30 days ago | No | `0` | The Vulnerabilities updated after this timestamp will be imported. Timestamp in UNIX Epoch time, UTC. Default is 30 days ago. | +| Vulnerability Import Affected Products | crowdstrike.vulnerability_import_affected_products | `CROWDSTRIKE_VULNERABILITY_IMPORT_AFFECTED_PRODUCTS` | false | No | When `true`, creates a `Software` observable for each entry in the vulnerability's `affected_products` array, and links it to the parent vulnerability via a `has` relationship. Disabled by default — existing deployments are unaffected until opt-in. | | Malware Start Timestamp | crowdstrike.malware_start_timestamp | `CROWDSTRIKE_MALWARE_START_TIMESTAMP` | (30 days ago) | No | Unix timestamp. Empty = 30 days ago. 0 = ALL malware. | | Report Start Timestamp | crowdstrike.report_start_timestamp | `CROWDSTRIKE_REPORT_START_TIMESTAMP` | (30 days ago) | No | Unix timestamp. Empty = 30 days ago. 0 = ALL reports. | | Report Status | crowdstrike.report_status | `CROWDSTRIKE_REPORT_STATUS` | New | No | Status for imported reports. | @@ -93,6 +94,7 @@ There are a number of configuration options, which are set either in `docker-com | Report Target Industries | crowdstrike.report_target_industries | `CROWDSTRIKE_REPORT_TARGET_INDUSTRIES` | | No | Filter reports by target industry. | | Report Guess Malware | crowdstrike.report_guess_malware | `CROWDSTRIKE_REPORT_GUESS_MALWARE` | false | No | Use report tags to guess malware. | | Report Guess Relations | crowdstrike.report_guess_relations | `CROWDSTRIKE_REPORT_GUESS_RELATIONS` | false | No | Auto-create relationships between entities. | +| Report Extract IOCs | crowdstrike.report_extract_iocs | `CROWDSTRIKE_REPORT_EXTRACT_IOCS` | | No | Comma-separated list of IOC types to extract from report text as Observables. Supported: `ipv4`, `ipv6`, `domain`, `url`, `md5`, `sha1`, `sha256`. Empty to disable. | | Indicator Start Timestamp | crowdstrike.indicator_start_timestamp | `CROWDSTRIKE_INDICATOR_START_TIMESTAMP` | (30 days ago) | No | Unix timestamp. Empty = 30 days ago. 0 = ALL indicators. | | Indicator Exclude Types | crowdstrike.indicator_exclude_types | `CROWDSTRIKE_INDICATOR_EXCLUDE_TYPES` | hash_ion,hash_md5,hash_sha1,password,username | No | Comma-separated indicator types to exclude. | | Default Score | crowdstrike.default_x_opencti_score | `CROWDSTRIKE_DEFAULT_X_OPENCTI_SCORE` | 50 | No | Default x_opencti_score for indicators. | @@ -103,6 +105,11 @@ There are a number of configuration options, which are set either in `docker-com | High Score | crowdstrike.indicator_high_score | `CROWDSTRIKE_INDICATOR_HIGH_SCORE` | 80 | No | Score for high confidence indicators. | | High Score Labels | crowdstrike.indicator_high_score_labels | `CROWDSTRIKE_INDICATOR_HIGH_SCORE_LABELS` | MaliciousConfidence/High | No | Labels that trigger high score. | | Unwanted Labels | crowdstrike.indicator_unwanted_labels | `CROWDSTRIKE_INDICATOR_UNWANTED_LABELS` | | No | Filter out indicators with these labels. | +| Indicator IP Max Age | crowdstrike.indicator_ip_max_age | `CROWDSTRIKE_INDICATOR_IP_MAX_AGE` | | No | ISO8601 Duration format. Covers both IPv4 and IPv6. (e.g., `P90D`) | +| Indicator Domain Max Age | crowdstrike.indicator_domain_max_age | `CROWDSTRIKE_INDICATOR_DOMAIN_MAX_AGE` | | No | ISO8601 Duration format. (e.g., `P365D`) | +| Indicator URL Max Age | crowdstrike.indicator_url_max_age | `CROWDSTRIKE_INDICATOR_URL_MAX_AGE` | | No | ISO8601 Duration format. (e.g., `P60D`) | +| Indicator Hash Max Age | crowdstrike.indicator_hash_max_age | `CROWDSTRIKE_INDICATOR_HASH_MAX_AGE` | | No | ISO8601 Duration format. Covers MD5, SHA1, and SHA256. (e.g., `P730D`) | +| Indicator Default Max Age | crowdstrike.indicator_default_max_age | `CROWDSTRIKE_INDICATOR_DEFAULT_MAX_AGE` | | No | ISO8601 Duration format. Default threshold for any other type. (e.g., `P30D`) | | No File Trigger Import | crowdstrike.no_file_trigger_import | `CROWDSTRIKE_NO_FILE_TRIGGER_IMPORT` | true | No | Import indicator updates without file triggers. | **Note**: It is not recommended to use the default value `0` for configuration parameters `report_start_timestamp`, `indicator_start_timestamp`, and `malware_start_timestamp` because of the large data volumes. @@ -145,6 +152,11 @@ Configure the connector in `docker-compose.yml`: - CROWDSTRIKE_REPORT_INCLUDE_TYPES=notice,tipper,intelligence report,periodic report - CROWDSTRIKE_REPORT_TYPE=threat-report - CROWDSTRIKE_INDICATOR_EXCLUDE_TYPES=hash_ion,hash_md5,hash_sha1,password,username + - CROWDSTRIKE_INDICATOR_IP_MAX_AGE=P90D + - CROWDSTRIKE_INDICATOR_DOMAIN_MAX_AGE=P365D + - CROWDSTRIKE_INDICATOR_URL_MAX_AGE=P60D + - CROWDSTRIKE_INDICATOR_HASH_MAX_AGE=P730D + - CROWDSTRIKE_INDICATOR_DEFAULT_MAX_AGE=P30D - CROWDSTRIKE_DEFAULT_X_OPENCTI_SCORE=50 restart: always ``` @@ -194,6 +206,49 @@ When ATT&CK lookup is enabled, the connector: If ATT&CK labels are present but a technique cannot be resolved, the connector will skip Attack Pattern creation to avoid creating duplicate or non-canonical objects. +### IOC Extraction from Report Text + +> **⚠️ Warning — false positives** +> IOCs are extracted from unstructured report text using pattern matching; there is no way to verify their maliciousness at extraction time. +> For this reason, **this feature only creates Observables, not Indicators**. +> Extracted Observables are intended to be reviewed by an analyst before being promoted to Indicators, or enriched via external sources (e.g. VirusTotal, AbuseIPDB) to trigger automatic promotion. + +The connector can automatically extract IOCs from report text content and create STIX Observables linked to the report. This is useful for capturing indicators mentioned in report narratives that CrowdStrike does not always expose as structured indicators via their API. + +**Configuration:** + +```yaml +crowdstrike: + report_extract_iocs: 'ipv4,ipv6,domain,md5,sha1,sha256' +``` + +Set `report_extract_iocs` to a comma-separated list of IOC types to extract. Leave empty to disable. + +> **💡 Note — URL extraction** +> Including `url` can lead to a high volume of false positives, as report contents frequently contain links to public articles and external references. +> Consider using `ipv4,ipv6,domain,md5,sha1,sha256` instead. + +**Supported IOC types:** + +| Type | Observable Created | Example | +|--------|--------------------|------------------------------------| +| ipv4 | IPv4-Addr | `45.33.32.156` | +| ipv6 | IPv6-Addr | `2607:f8b0:4004:800::200e` | +| domain | Domain-Name | `evil-c2.example.com` | +| url | URL | `https://malware.example.org/path` | +| md5 | File (MD5) | `d41d8cd98f00b204e9800998ecf8427e` | +| sha1 | File (SHA-1) | `da39a3ee5e6b4b0d3255bfef95601890afd80709` | +| sha256 | File (SHA-256) | `e3b0c44298fc1c149afbf4c8...` | + +**Behavior:** + +- Uses the [ioc-finder](https://pypi.org/project/ioc-finder/) library for extraction +- Automatically handles defanged indicators (`hxxp`, `[.]`) +- Filters out private/reserved IP addresses (only globally routable IPs are kept) +- Deduplicates: a domain found inside an extracted URL is not created separately +- **Only Observables are created** — no Indicators are generated with this option +- Observables are created with `score=0` and label `extracted-from-report` to distinguish them from CrowdStrike's structured indicators + ### Data Flow ```mermaid @@ -204,6 +259,7 @@ graph LR Reports[Reports] Indicators[Indicators] YARA[YARA Rules] + Vulnerabilities[Vulnerabilities] end subgraph OpenCTI @@ -215,6 +271,8 @@ graph LR YARAInd[YARA Indicator] Malware[Malware] AttackPattern[Attack Pattern] + Vuln[Vulnerability] + Software[Software] end Actors --> IntrusionSet @@ -224,6 +282,8 @@ graph LR Indicators --> Indicator Indicators --> Observable YARA --> YARAInd + Vulnerabilities --> Vuln + Vulnerabilities -.->|opt-in| Software ``` ### Supported Scopes @@ -233,6 +293,7 @@ graph LR | actor | Threat actors as Intrusion Sets with TTPs | | report | Intelligence reports with related entities | | indicator | IOCs (IPs, domains, hashes, URLs, etc.) | +| vulnerability | CVEs with CVSS scores and optional affected products | | yara_master | YARA detection rules | | snort_master | Snort/Suricata network detection rules | @@ -246,6 +307,8 @@ graph LR | Indicator (Domain) | Domain-Name | Domain observables | | Indicator (Hash) | File | File hash observables | | Indicator (URL) | URL | URL observables | +| Vulnerability | Vulnerability | CVE with CVSS scores and descriptions | +| Affected Product | Software | Vendor/product observable linked to its CVE via `has` (opt-in) | | YARA Rule | Indicator (YARA) | YARA pattern indicators | | Snort Rule | Indicator (Snort) | Snort/Suricata pattern indicators | diff --git a/external-import/crowdstrike/__metadata__/CONNECTOR_CONFIG_DOC.md b/external-import/crowdstrike/__metadata__/CONNECTOR_CONFIG_DOC.md index f58c06ecf82..f9a5ce20554 100644 --- a/external-import/crowdstrike/__metadata__/CONNECTOR_CONFIG_DOC.md +++ b/external-import/crowdstrike/__metadata__/CONNECTOR_CONFIG_DOC.md @@ -31,8 +31,14 @@ Below is an exhaustive enumeration of all configurable parameters available, eac | CROWDSTRIKE_REPORT_TARGET_INDUSTRIES | `array` | | string | | `[]` | Comma-separated list of target industries to filter reports. | | CROWDSTRIKE_REPORT_GUESS_MALWARE | `boolean` | | boolean | | `false` | Whether to use report tags to guess related malware. | | CROWDSTRIKE_REPORT_GUESS_RELATIONS | `boolean` | | boolean | | `false` | Whether to automatically guess and create relationships in reports. | +| CROWDSTRIKE_REPORT_EXTRACT_IOCS | `array` | | string | | `[]` | Comma-separated list of IOC types to extract from report text content via regex. Extracted IOCs are created as Observables (not Indicators) and linked to the report. Supported types: ipv4, ipv6, domain, url, md5, sha1, sha256. Leave empty to disable. | | CROWDSTRIKE_INDICATOR_START_TIMESTAMP | `integer` | | integer | | | Unix timestamp from which to start importing indicators. Default is 30 days ago. BEWARE: 0 means ALL indicators! | | CROWDSTRIKE_INDICATOR_EXCLUDE_TYPES | `array` | | string | | `["hash_ion", "hash_md5", "hash_sha1", "password", "username"]` | Comma-separated list of indicator types to exclude from import. | +| CROWDSTRIKE_INDICATOR_IP_MAX_AGE | `string` | | Format: [`duration`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | `null` | ISO8601 Duration format starting with 'P' for Period (e.g., 'P90D' for 90 days). Covers both IPv4 and IPv6. | +| CROWDSTRIKE_INDICATOR_DOMAIN_MAX_AGE | `string` | | Format: [`duration`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | `null` | ISO8601 Duration format starting with 'P' for Period (e.g., 'P365D' for 365 days). | +| CROWDSTRIKE_INDICATOR_URL_MAX_AGE | `string` | | Format: [`duration`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | `null` | ISO8601 Duration format starting with 'P' for Period (e.g., 'P60D' for 60 days). | +| CROWDSTRIKE_INDICATOR_HASH_MAX_AGE | `string` | | Format: [`duration`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | `null` | ISO8601 Duration format starting with 'P' for Period (e.g., 'P730D' for 730 days). Covers MD5, SHA1, and SHA256 hashes. | +| CROWDSTRIKE_INDICATOR_DEFAULT_MAX_AGE | `string` | | Format: [`duration`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | `null` | ISO8601 Duration format starting with 'P' for Period (e.g., 'P30D' for 30 days). Default threshold for any other indicator type. | | CROWDSTRIKE_DEFAULT_X_OPENCTI_SCORE | `integer` | | `0 < x ` | | `50` | Default confidence score for entities without explicit score. | | CROWDSTRIKE_INDICATOR_LOW_SCORE | `integer` | | `0 < x ` | | `40` | Score assigned to indicators with low confidence labels. | | CROWDSTRIKE_INDICATOR_LOW_SCORE_LABELS | `array` | | string | | `["MaliciousConfidence/Low"]` | Comma-separated list of labels indicating low confidence. | @@ -41,6 +47,8 @@ Below is an exhaustive enumeration of all configurable parameters available, eac | CROWDSTRIKE_INDICATOR_HIGH_SCORE | `integer` | | `0 < x ` | | `80` | Score assigned to indicators with high confidence labels. | | CROWDSTRIKE_INDICATOR_HIGH_SCORE_LABELS | `array` | | string | | `["MaliciousConfidence/High"]` | Comma-separated list of labels indicating high confidence. | | CROWDSTRIKE_INDICATOR_UNWANTED_LABELS | `array` | | string | | `[]` | Comma-separated list of unwanted labels to filter out indicators. Can be used to filter low confidence indicators: 'MaliciousConfidence/Low,MaliciousConfidence/Medium'. | +| CROWDSTRIKE_INDICATOR_MAX_RECORDS_PER_RUN | `integer` | | integer | | `20000` | Maximum number of indicators ingested in a single run of the connector. CrowdStrike can return up to ~1.5M IoCs for the last 30 days, which would overwhelm the OpenCTI ingestion pipeline; pagination stops when this cap is reached. Set to 0 (or a negative number) to disable the cap and fetch every available indicator. | | CROWDSTRIKE_NO_FILE_TRIGGER_IMPORT | `boolean` | | boolean | | `true` | Whether to trigger import without file dependencies. | | CROWDSTRIKE_VULNERABILITY_START_TIMESTAMP | `integer` | | integer | | | Unix timestamp from which to start importing vulnerabilities. Default is 30 days ago. BEWARE: 0 means ALL vulnerabilities! | +| CROWDSTRIKE_VULNERABILITY_IMPORT_AFFECTED_PRODUCTS | `boolean` | | boolean | | `false` | Whether to import affected products from vulnerability data. When enabled, creates STIX Software observables and 'has' relationships linking each product to its parent vulnerability. | | CROWDSTRIKE_INTERVAL_SEC | `integer` | | `0 < x ` | ⛔️ | `null` | Use CONNECTOR_DURATION_PERIOD instead. | diff --git a/external-import/crowdstrike/__metadata__/connector_config_schema.json b/external-import/crowdstrike/__metadata__/connector_config_schema.json index b52b0451910..a4ea9891c4b 100644 --- a/external-import/crowdstrike/__metadata__/connector_config_schema.json +++ b/external-import/crowdstrike/__metadata__/connector_config_schema.json @@ -182,6 +182,14 @@ "description": "Whether to automatically guess and create relationships in reports.", "type": "boolean" }, + "CROWDSTRIKE_REPORT_EXTRACT_IOCS": { + "default": [], + "description": "Comma-separated list of IOC types to extract from report text content via regex. Extracted IOCs are created as Observables (not Indicators) and linked to the report. Supported types: ipv4, ipv6, domain, url, md5, sha1, sha256. Leave empty to disable.", + "items": { + "type": "string" + }, + "type": "array" + }, "CROWDSTRIKE_INDICATOR_START_TIMESTAMP": { "description": "Unix timestamp from which to start importing indicators. Default is 30 days ago. BEWARE: 0 means ALL indicators!", "type": "integer" @@ -200,6 +208,36 @@ }, "type": "array" }, + "CROWDSTRIKE_INDICATOR_IP_MAX_AGE": { + "default": null, + "description": "ISO8601 Duration format starting with 'P' for Period (e.g., 'P90D' for 90 days). Covers both IPv4 and IPv6.", + "format": "duration", + "type": "string" + }, + "CROWDSTRIKE_INDICATOR_DOMAIN_MAX_AGE": { + "default": null, + "description": "ISO8601 Duration format starting with 'P' for Period (e.g., 'P365D' for 365 days).", + "format": "duration", + "type": "string" + }, + "CROWDSTRIKE_INDICATOR_URL_MAX_AGE": { + "default": null, + "description": "ISO8601 Duration format starting with 'P' for Period (e.g., 'P60D' for 60 days).", + "format": "duration", + "type": "string" + }, + "CROWDSTRIKE_INDICATOR_HASH_MAX_AGE": { + "default": null, + "description": "ISO8601 Duration format starting with 'P' for Period (e.g., 'P730D' for 730 days). Covers MD5, SHA1, and SHA256 hashes.", + "format": "duration", + "type": "string" + }, + "CROWDSTRIKE_INDICATOR_DEFAULT_MAX_AGE": { + "default": null, + "description": "ISO8601 Duration format starting with 'P' for Period (e.g., 'P30D' for 30 days). Default threshold for any other indicator type.", + "format": "duration", + "type": "string" + }, "CROWDSTRIKE_DEFAULT_X_OPENCTI_SCORE": { "default": 50, "description": "Default confidence score for entities without explicit score.", @@ -262,6 +300,11 @@ }, "type": "array" }, + "CROWDSTRIKE_INDICATOR_MAX_RECORDS_PER_RUN": { + "default": 20000, + "description": "Maximum number of indicators ingested in a single run of the connector. CrowdStrike can return up to ~1.5M IoCs for the last 30 days, which would overwhelm the OpenCTI ingestion pipeline; pagination stops when this cap is reached. Set to 0 (or a negative number) to disable the cap and fetch every available indicator.", + "type": "integer" + }, "CROWDSTRIKE_NO_FILE_TRIGGER_IMPORT": { "default": true, "description": "Whether to trigger import without file dependencies.", @@ -271,6 +314,11 @@ "description": "Unix timestamp from which to start importing vulnerabilities. Default is 30 days ago. BEWARE: 0 means ALL vulnerabilities!", "type": "integer" }, + "CROWDSTRIKE_VULNERABILITY_IMPORT_AFFECTED_PRODUCTS": { + "default": false, + "description": "Whether to import affected products from vulnerability data. When enabled, creates STIX Software observables and 'has' relationships linking each product to its parent vulnerability.", + "type": "boolean" + }, "CROWDSTRIKE_INTERVAL_SEC": { "default": null, "deprecated": true, diff --git a/external-import/crowdstrike/docker-compose.yml b/external-import/crowdstrike/docker-compose.yml index 5b770d4dec5..4a47e95669f 100644 --- a/external-import/crowdstrike/docker-compose.yml +++ b/external-import/crowdstrike/docker-compose.yml @@ -1,4 +1,4 @@ -version: '3' +version: "3" services: connector-crowdstrike: image: opencti/connector-crowdstrike:latest @@ -25,8 +25,15 @@ services: - CROWDSTRIKE_REPORT_TARGET_INDUSTRIES= # Can be used to retrieve only reports related to a sector - CROWDSTRIKE_REPORT_GUESS_MALWARE=false # Use report tags to guess malware - CROWDSTRIKE_REPORT_GUESS_RELATIONS=false # Automatically guess and create relationships between entities in reports + - CROWDSTRIKE_VULNERABILITY_START_TIMESTAMP= # Unix timestamp. Leave empty for default (30 days ago). BEWARE! 0 means ALL vulnerabilities! + - CROWDSTRIKE_VULNERABILITY_IMPORT_AFFECTED_PRODUCTS=false - CROWDSTRIKE_INDICATOR_START_TIMESTAMP= # Unix timestamp. Leave empty for default (30 days ago). BEWARE! 0 means ALL indicators! - CROWDSTRIKE_INDICATOR_EXCLUDE_TYPES=hash_ion,hash_md5,hash_sha1,password,username + - CROWDSTRIKE_INDICATOR_IP_MAX_AGE=P90D # ISO8601 Duration format. Covers both IPv4 and IPv6. + - CROWDSTRIKE_INDICATOR_DOMAIN_MAX_AGE=P365D # ISO8601 Duration format. + - CROWDSTRIKE_INDICATOR_URL_MAX_AGE=P60D # ISO8601 Duration format. + - CROWDSTRIKE_INDICATOR_HASH_MAX_AGE=P730D # ISO8601 Duration format. Covers MD5, SHA1, and SHA256. + - CROWDSTRIKE_INDICATOR_DEFAULT_MAX_AGE=P30D # ISO8601 Duration format. Default threshold for any other type. - CROWDSTRIKE_DEFAULT_X_OPENCTI_SCORE=50 - CROWDSTRIKE_INDICATOR_LOW_SCORE=40 - CROWDSTRIKE_INDICATOR_LOW_SCORE_LABELS=MaliciousConfidence/Low diff --git a/external-import/crowdstrike/src/config.yml.sample b/external-import/crowdstrike/src/config.yml.sample index fa62174c14a..df5ecb1ff5c 100644 --- a/external-import/crowdstrike/src/config.yml.sample +++ b/external-import/crowdstrike/src/config.yml.sample @@ -22,14 +22,21 @@ crowdstrike: malware_start_timestamp: # Unix timestamp. Leave empty for default (30 days ago). 0 means ALL malware! report_start_timestamp: # Unix timestamp. Leave empty for default (30 days ago). BEWARE! 0 means ALL reports! vulnerability_start_timestamp: # Unix timestamp. Leave empty for default (30 days ago). 0 means ALL vulnerabilities! + vulnerability_import_affected_products: false report_status: 'New' report_include_types: 'notice,tipper,intelligence report,periodic report' report_type: 'threat-report' report_target_industries: '' report_guess_malware: false # Use report tags to guess malware report_guess_relations: false # Automatically guess and create relationships between entities in reports + report_extract_iocs: '' # Comma-separated list of IOC types to extract from report text as observables. Supported: ipv4,ipv6,domain,url,md5,sha1,sha256. Leave empty to disable. indicator_start_timestamp: # Unix timestamp. Leave empty for default (30 days ago). BEWARE! 0 means ALL indicators! indicator_exclude_types: 'hash_ion,hash_md5,hash_sha1,password,username' + indicator_ip_max_age: 'P90D' # ISO8601 Duration format. Covers both IPv4 and IPv6. + indicator_domain_max_age: 'P365D' # ISO8601 Duration format. + indicator_url_max_age: 'P60D' # ISO8601 Duration format. + indicator_hash_max_age: 'P730D' # ISO8601 Duration format. Covers MD5, SHA1, and SHA256. + indicator_default_max_age: 'P30D' # ISO8601 Duration format. Default threshold for any other type. default_x_opencti_score: 50 indicator_low_score: 40 indicator_low_score_labels: 'MaliciousConfidence/Low' @@ -38,5 +45,6 @@ crowdstrike: indicator_high_score: 80 indicator_high_score_labels: 'MaliciousConfidence/High' indicator_unwanted_labels: '' # Can be used to filter low confidence indicators: "MaliciousConfidence/Low", "MaliciousConfidence/Medium" + indicator_max_records_per_run: 20000 # Max indicators ingested per run (CrowdStrike can return up to ~1.5M IoCs over 30 days). Set to 0 (or any negative number) to disable the cap. no_file_trigger_import: true attack_version: "17.1" diff --git a/external-import/crowdstrike/src/crowdstrike_feeds_connector/connector.py b/external-import/crowdstrike/src/crowdstrike_feeds_connector/connector.py index 6f0d4d8ae49..c63a924df43 100644 --- a/external-import/crowdstrike/src/crowdstrike_feeds_connector/connector.py +++ b/external-import/crowdstrike/src/crowdstrike_feeds_connector/connector.py @@ -84,6 +84,7 @@ def __init__( report_target_industries = self.config.crowdstrike.report_target_industries report_guess_malware = self.config.crowdstrike.report_guess_malware report_guess_relations = self.config.crowdstrike.report_guess_relations + report_extract_iocs = self.config.crowdstrike.report_extract_iocs vulnerability_start_timestamp = ( self.config.crowdstrike.vulnerability_start_timestamp @@ -104,6 +105,13 @@ def __init__( self.config.crowdstrike.indicator_high_score_labels ) indicator_unwanted_labels = self.config.crowdstrike.indicator_unwanted_labels + indicator_max_age_by_type = { + "ip": self.config.crowdstrike.indicator_ip_max_age, + "domain": self.config.crowdstrike.indicator_domain_max_age, + "url": self.config.crowdstrike.indicator_url_max_age, + "hash": self.config.crowdstrike.indicator_hash_max_age, + "default": self.config.crowdstrike.indicator_default_max_age, + } no_file_trigger_import = self.config.crowdstrike.no_file_trigger_import @@ -181,6 +189,7 @@ def __init__( indicator_config, no_file_trigger_import, scopes=set(scopes), + report_extract_iocs=report_extract_iocs, ) importers.append(report_importer) @@ -205,9 +214,11 @@ def __init__( indicator_high_score=indicator_high_score, indicator_high_score_labels=set(indicator_high_score_labels), indicator_unwanted_labels=set(indicator_unwanted_labels), + indicator_max_age_by_type=indicator_max_age_by_type, no_file_trigger_import=no_file_trigger_import, scopes=set(scopes), attack_lookup=self.attack_lookup, + max_records_per_run=self.config.crowdstrike.indicator_max_records_per_run, ) indicator_importer = IndicatorImporter(indicator_importer_config) diff --git a/external-import/crowdstrike/src/crowdstrike_feeds_connector/indicator/importer.py b/external-import/crowdstrike/src/crowdstrike_feeds_connector/indicator/importer.py index 0419ed4f53d..b4c6ffd5fdb 100644 --- a/external-import/crowdstrike/src/crowdstrike_feeds_connector/indicator/importer.py +++ b/external-import/crowdstrike/src/crowdstrike_feeds_connector/indicator/importer.py @@ -1,6 +1,6 @@ """OpenCTI CrowdStrike indicator importer module.""" -from datetime import datetime +from datetime import datetime, timedelta, timezone from typing import TYPE_CHECKING, Any, Dict, List, NamedTuple, Optional, Set from crowdstrike_feeds_connector.related_actors.importer import RelatedActorImporter @@ -43,9 +43,11 @@ class IndicatorImporterConfig(NamedTuple): indicator_high_score: int indicator_high_score_labels: Set[str] indicator_unwanted_labels: Set[str] + indicator_max_age_by_type: Dict[str, Optional[timedelta]] no_file_trigger_import: bool scopes: set[str] attack_lookup: Optional[AttackTechniqueLookup] + max_records_per_run: Optional[int] = None class IndicatorImporter(BaseImporter): @@ -84,11 +86,16 @@ def __init__(self, config: IndicatorImporterConfig) -> None: self.indicator_high_score = config.indicator_high_score self.indicator_high_score_labels = config.indicator_high_score_labels self.indicator_unwanted_labels = config.indicator_unwanted_labels - self.next_page: Optional[str] = None + self.indicator_max_age_by_type = config.indicator_max_age_by_type self.no_file_trigger_import = config.no_file_trigger_import self.scopes = config.scopes # Preloaded at connector startup; used to resolve MITRE technique IDs for ATT&CK labels. self.attack_lookup = config.attack_lookup + self.max_records_per_run = ( + config.max_records_per_run + if config.max_records_per_run and config.max_records_per_run > 0 + else None + ) if not (self.create_observables or self.create_indicators): msg = "'create_observables' and 'create_indicators' false at the same time" raise ValueError(msg) @@ -136,7 +143,15 @@ def run(self, state: Dict[str, Any]) -> Dict[str, Any]: def _clear_report_fetcher_cache(self) -> None: self.report_fetcher.clear_cache() - def _fetch_indicators(self, fetch_timestamp: int) -> List[dict] | None: + def _fetch_indicators(self, fetch_timestamp: int) -> List[dict]: + """Fetch all indicators updated since ``fetch_timestamp``. + + Walks every page exposed by the CrowdStrike API (``Next-Page`` HTTP + header) up to the configured ``max_records_per_run`` cap (when set). + Returns the full list of resources in a single batch so the downstream + ``_process_indicators`` step can compute the latest ``last_updated`` + timestamp across the whole run. + """ limit = 1000 sort = "last_updated|asc" fql_filter = f"last_updated:>{fetch_timestamp}" @@ -144,46 +159,102 @@ def _fetch_indicators(self, fetch_timestamp: int) -> List[dict] | None: if self.exclude_types: fql_filter = f"{fql_filter}+type:!{self.exclude_types}" - return self._query_indicators(limit, sort, fql_filter) + return self._paginated_query_indicators(limit, sort, fql_filter) + + def _paginated_query_indicators( + self, limit: int, sort: str, fql_filter: str + ) -> List[dict]: + """Walk every page of the indicator API and return the aggregated list. + + The continuation token is the ``next_page`` string returned by the + upstream API and forwarded as-is by :class:`IndicatorsAPI`. When + ``max_records_per_run`` is set, pagination stops as soon as that many + indicators have been collected; the cap is enforced at the resource + level by slicing the *last* page to exactly the remaining quota, so + the aggregated batch contains at most ``max_records_per_run`` records + and we never yield a record beyond the cap. + """ + resources: List[dict] = [] + next_page_token: Optional[str] = None + meta_total: Optional[int] = None + + while True: + response = self.indicators_api_cs.get_combined_indicator_entities( + limit=limit, + sort=sort, + fql_filter=fql_filter, + deep_pagination=True, + next_page=next_page_token, + ) - def _query_indicators(self, limit: int, sort: str, fql_filter: str) -> List[dict]: - _limit = limit - _sort = sort - _fql_filter = fql_filter + page_resources = response.get("resources") or [] + if not page_resources: + break - response = self.indicators_api_cs.get_combined_indicator_entities( - limit=_limit, sort=_sort, fql_filter=_fql_filter, deep_pagination=True - ) + # ``meta.pagination`` can legitimately be missing or null - guard + # against both so we don't AttributeError on the .get() below. + meta = response.get("meta") or {} + pagination = meta.get("pagination") or {} + page_total = pagination.get("total") + if page_total is not None: + meta_total = page_total - # Add info to know how much data needs to be retrieved until now - meta = response["meta"] - _meta_total = None + remaining_cap = self._remaining_cap(len(resources)) + if remaining_cap is not None and remaining_cap <= 0: + self._log_run_cap_reached(len(resources)) + break - if meta["pagination"] is not None: - pagination = meta["pagination"] + if remaining_cap is not None and len(page_resources) > remaining_cap: + page_resources = page_resources[:remaining_cap] - _meta_total = pagination["total"] + resources.extend(page_resources) self.helper.connector_logger.info( - "Indicator total resources to query until now", {"total": _meta_total} + "Fetched indicator batch", + { + "batch_size": len(page_resources), + "total_fetched": len(resources), + "total_available": meta_total, + "remaining": ( + max(0, meta_total - len(resources)) + if meta_total is not None + else None + ), + "max_records_per_run": self.max_records_per_run, + }, ) - resources = response["resources"] - resources_count = len(resources) - remaining_resources = None - if _meta_total is not None: - remaining_resources = _meta_total - resources_count + if ( + self.max_records_per_run is not None + and len(resources) >= self.max_records_per_run + ): + self._log_run_cap_reached(len(resources)) + break + + # ``next_page`` is a single continuation token (string) returned by + # ``IndicatorsAPI.get_combined_indicator_entities``. An empty / None + # value marks the end of the iteration. + next_page_token = response.get("next_page") + if not next_page_token: + break + + return resources + def _remaining_cap(self, already_fetched: int) -> Optional[int]: + """Return how many more records can still be fetched in this run.""" + if self.max_records_per_run is None: + return None + return self.max_records_per_run - already_fetched + + def _log_run_cap_reached(self, total_fetched: int) -> None: self.helper.connector_logger.info( - "Indicators fetched to be processed (Crowdstrike max limit = 10000)", + "Reached per-run indicator cap, stopping pagination for this run", { - "resources_count": resources_count, - "remaining_resources": remaining_resources, + "total_fetched": total_fetched, + "max_records_per_run": self.max_records_per_run, }, ) - return resources - def _process_indicators(self, indicators: List[dict]) -> datetime | None: indicator_count = len(indicators) self._info("Processing {0} indicators...", indicator_count) @@ -219,6 +290,9 @@ def _process_indicators(self, indicators: List[dict]) -> datetime | None: def _process_indicator(self, indicator: dict) -> bool: self._info("Processing indicator {0}...", indicator["id"]) + if self._is_indicator_too_old(indicator): + return True + indicator_bundle = self._create_indicator_bundle(indicator) if indicator_bundle is None: self._warning("Discarding indicator {0} bundle", indicator["id"]) @@ -231,6 +305,45 @@ def _process_indicator(self, indicator: dict) -> bool: return True + def _is_indicator_too_old(self, indicator: dict) -> bool: + indicator_type = indicator.get("type", "") + published_date_timestamp = indicator.get("published_date") + + if published_date_timestamp is None: + return False + + published_date = timestamp_to_datetime(published_date_timestamp) + now = datetime.now(timezone.utc) + + threshold_key = "default" + if indicator_type in ["ip_address", "ip_address_block"]: + threshold_key = "ip" + elif indicator_type == "domain": + threshold_key = "domain" + elif indicator_type == "url": + threshold_key = "url" + elif indicator_type in ["hash_md5", "hash_sha1", "hash_sha256"]: + threshold_key = "hash" + + threshold = self.indicator_max_age_by_type.get(threshold_key) + + # Fallback to default if type-specific threshold is not defined + if threshold is None and threshold_key != "default": + threshold = self.indicator_max_age_by_type.get("default") + + if threshold is not None: + if published_date < (now - threshold): + self._info( + "Indicator {0} (type: {1}, published: {2}) is older than the threshold ({3}), skipping...", + indicator["id"], + indicator_type, + published_date, + threshold, + ) + return True + + return False + def _get_reports_by_code(self, codes: List[str]) -> List[FetchedReport]: return self.report_fetcher.get_by_codes(codes) diff --git a/external-import/crowdstrike/src/crowdstrike_feeds_connector/report/builder.py b/external-import/crowdstrike/src/crowdstrike_feeds_connector/report/builder.py index 33ee89e0bc3..0ea47a364e4 100644 --- a/external-import/crowdstrike/src/crowdstrike_feeds_connector/report/builder.py +++ b/external-import/crowdstrike/src/crowdstrike_feeds_connector/report/builder.py @@ -29,7 +29,7 @@ Relationship, ) from stix2 import Report as STIXReport -from stix2.v21 import _DomainObject, _RelationshipObject +from stix2.v21 import _DomainObject, _Observable, _RelationshipObject logger = logging.getLogger(__name__) @@ -53,6 +53,7 @@ def __init__( report_guess_relations: bool = False, malwares_from_field: list[dict] | None = None, scopes: set[str] | None = None, + extracted_observables: list[_Observable] | None = None, ) -> None: """Initialize report bundle builder.""" self.report = report @@ -68,6 +69,7 @@ def __init__( self.malwares_from_field = malwares_from_field or [] self.related_actor_builder_cls = RelatedActorBundleBuilder self.scopes = scopes + self.extracted_observables = extracted_observables or [] # Use report dates for start time and stop time. start_time = timestamp_to_datetime(self.report["created_date"]) @@ -337,6 +339,9 @@ def build(self) -> Bundle: indicators_linked = self.related_indicators or [] bundle_objects.extend(indicators_linked) + # Add extracted IOC observables to bundle + bundle_objects.extend(self.extracted_observables) + # Create object references for the report. # Always include entities in object refs object_refs = create_object_refs( @@ -371,6 +376,9 @@ def build(self) -> Bundle: # Add related indicator to object refs for report object_refs.extend(indicators_linked) + # Add extracted observables to object refs for report + object_refs.extend(self.extracted_observables) + object_refs = self._normalize_report_object_refs(object_refs) report = self._create_report(object_refs) bundle_objects.append(report) diff --git a/external-import/crowdstrike/src/crowdstrike_feeds_connector/report/importer.py b/external-import/crowdstrike/src/crowdstrike_feeds_connector/report/importer.py index 4fbe69a9b70..e4c7bc646f8 100644 --- a/external-import/crowdstrike/src/crowdstrike_feeds_connector/report/importer.py +++ b/external-import/crowdstrike/src/crowdstrike_feeds_connector/report/importer.py @@ -13,8 +13,18 @@ paginate, timestamp_to_datetime, ) +from crowdstrike_feeds_services.utils.ioc_extractor import extract_iocs +from crowdstrike_feeds_services.utils.observables import ( + ObservableProperties, + create_observable_domain_name, + create_observable_file_md5, + create_observable_file_sha1, + create_observable_file_sha256, + create_observable_ip_address, + create_observable_url, +) from stix2 import Bundle, Identity, MarkingDefinition -from stix2.v21 import _DomainObject +from stix2.v21 import _DomainObject, _Observable from ..importer import BaseImporter from ..indicator.builder import IndicatorBundleBuilder @@ -52,6 +62,7 @@ def __init__( indicator_config: dict, no_file_trigger_import: bool, scopes: set[str], + report_extract_iocs: list[str] | None = None, ) -> None: """Initialize CrowdStrike report importer.""" super().__init__(config, helper, author, tlp_marking) @@ -68,6 +79,7 @@ def __init__( self.indicator_config = indicator_config self.no_file_trigger_import = no_file_trigger_import self.scopes = scopes + self.report_extract_iocs = report_extract_iocs or [] self.malware_guess_cache: dict[str, str] = {} def run(self, state: dict[str, Any]) -> dict[str, Any]: @@ -121,6 +133,10 @@ def _fetch_reports(self, start_timestamp: int) -> Generator[List, None, None]: fql_filter = f"last_modified_date:>{start_timestamp}" + # Also filter by created_date to avoid importing very old reports + # that were recently modified (e.g., tag updates by CrowdStrike). + fql_filter = f"{fql_filter}+created_date:>{self.default_latest_timestamp}" + if self.include_types: fql_filter = f"{fql_filter}+type:{self.include_types}" @@ -371,6 +387,9 @@ def _create_report_bundle( ) malwares_from_field = report.get("malware", []) + # Extract IOCs from report text content + extracted_observables = self._extract_iocs_from_report(report) + bundle_builder = ReportBundleBuilder( report, author, @@ -384,9 +403,68 @@ def _create_report_bundle( self.report_guess_relations, malwares_from_field=malwares_from_field, scopes=self.scopes, + extracted_observables=extracted_observables, ) return bundle_builder.build() + # Map IOC type -> observable factory function + _IOC_OBSERVABLE_FACTORIES = { + "ipv4": create_observable_ip_address, + "ipv6": create_observable_ip_address, + "domain": create_observable_domain_name, + "url": create_observable_url, + "md5": create_observable_file_md5, + "sha1": create_observable_file_sha1, + "sha256": create_observable_file_sha256, + } + + def _extract_iocs_from_report(self, report) -> list[_Observable]: + """Extract IOCs from report text content and create STIX observables.""" + if not self.report_extract_iocs: + return [] + + text = self._get_report_text_content(report) + if not text: + return [] + + iocs = extract_iocs(text, self.report_extract_iocs) + if not iocs: + return [] + + self._info( + "Extracted {0} IOCs from report {1}", + len(iocs), + report.get("name", "unknown"), + ) + + observables: list[_Observable] = [] + for ioc in iocs: + factory = self._IOC_OBSERVABLE_FACTORIES.get(ioc.type) + if factory is None: + continue + try: + props = ObservableProperties( + value=ioc.value, + created_by=self.author, + labels=["extracted-from-report"], + score=0, + object_markings=[self.tlp_marking], + ) + observables.append(factory(props)) + except Exception as err: + self._error( + "Failed to create observable for {0} ({1}): {2}", + ioc.type, + ioc.value, + err, + ) + return observables + + @staticmethod + def _get_report_text_content(report: dict) -> str: + """Extract plain text content from the report for IOC extraction.""" + return report.get("description") or report.get("short_description") or "" + # MVP2 def _guess_malwares_from_tags(self, tags: List) -> dict[str, str]: if not self.guess_malware: diff --git a/external-import/crowdstrike/src/crowdstrike_feeds_connector/settings.py b/external-import/crowdstrike/src/crowdstrike_feeds_connector/settings.py index c94646cb1e0..90e51d1f06a 100644 --- a/external-import/crowdstrike/src/crowdstrike_feeds_connector/settings.py +++ b/external-import/crowdstrike/src/crowdstrike_feeds_connector/settings.py @@ -163,6 +163,27 @@ class CrowdstrikeConfig(BaseConfigModel): default=False, description="Whether to automatically guess and create relationships in reports.", ) + report_extract_iocs: ListFromString = Field( + default=[], + description=( + "Comma-separated list of IOC types to extract from report text content via regex. " + "Extracted IOCs are created as Observables (not Indicators) and linked to the report. " + "Supported types: ipv4, ipv6, domain, url, md5, sha1, sha256. " + "Leave empty to disable." + ), + ) + + @field_validator("report_extract_iocs", mode="after") + @classmethod + def validate_ioc_types(cls, v: list[str]) -> list[str]: + valid = {"ipv4", "ipv6", "domain", "url", "md5", "sha1", "sha256"} + for item in v: + if item not in valid: + raise ValueError( + f"Invalid IOC type '{item}'. " + f"Supported types: {', '.join(sorted(valid))}" + ) + return v # Indicator configuration indicator_start_timestamp: int = Field( @@ -179,6 +200,35 @@ class CrowdstrikeConfig(BaseConfigModel): ], description="Comma-separated list of indicator types to exclude from import.", ) + indicator_ip_max_age: timedelta | None = Field( + default=None, + description=( + "ISO8601 Duration format starting with 'P' for Period (e.g., 'P90D' for 90 days). " + "Covers both IPv4 and IPv6." + ), + ) + indicator_domain_max_age: timedelta | None = Field( + default=None, + description="ISO8601 Duration format starting with 'P' for Period (e.g., 'P365D' for 365 days).", + ) + indicator_url_max_age: timedelta | None = Field( + default=None, + description="ISO8601 Duration format starting with 'P' for Period (e.g., 'P60D' for 60 days).", + ) + indicator_hash_max_age: timedelta | None = Field( + default=None, + description=( + "ISO8601 Duration format starting with 'P' for Period (e.g., 'P730D' for 730 days). " + "Covers MD5, SHA1, and SHA256 hashes." + ), + ) + indicator_default_max_age: timedelta | None = Field( + default=None, + description=( + "ISO8601 Duration format starting with 'P' for Period (e.g., 'P30D' for 30 days). " + "Default threshold for any other indicator type." + ), + ) default_x_opencti_score: PositiveInt = Field( default=50, description="Default confidence score for entities without explicit score.", @@ -214,6 +264,17 @@ class CrowdstrikeConfig(BaseConfigModel): "Can be used to filter low confidence indicators: 'MaliciousConfidence/Low,MaliciousConfidence/Medium'." ), ) + indicator_max_records_per_run: int = Field( + default=20000, + description=( + "Maximum number of indicators ingested in a single run of the " + "connector. CrowdStrike can return up to ~1.5M IoCs for the last " + "30 days, which would overwhelm the OpenCTI ingestion pipeline; " + "pagination stops when this cap is reached. Set to 0 (or a " + "negative number) to disable the cap and fetch every available " + "indicator." + ), + ) # Trigger import configuration no_file_trigger_import: bool = Field( @@ -226,6 +287,14 @@ class CrowdstrikeConfig(BaseConfigModel): default_factory=_get_default_timestamp_30_days_ago, description="Unix timestamp from which to start importing vulnerabilities. Default is 30 days ago. BEWARE: 0 means ALL vulnerabilities!", ) + vulnerability_import_affected_products: bool = Field( + default=False, + description=( + "Whether to import affected products from vulnerability data. " + "When enabled, creates STIX Software observables and 'has' relationships " + "linking each product to its parent vulnerability." + ), + ) # [DEPRECATED] Interval configuration interval_sec: SkipValidation[PositiveInt] = DeprecatedField( diff --git a/external-import/crowdstrike/src/crowdstrike_feeds_connector/vulnerability/builder.py b/external-import/crowdstrike/src/crowdstrike_feeds_connector/vulnerability/builder.py index bfbf375a290..0064976998e 100644 --- a/external-import/crowdstrike/src/crowdstrike_feeds_connector/vulnerability/builder.py +++ b/external-import/crowdstrike/src/crowdstrike_feeds_connector/vulnerability/builder.py @@ -1,8 +1,9 @@ """OpenCTI CrowdStrike vulnerability builder module.""" -from typing import Any, List, Optional +from typing import Any, List, Optional, Set from crowdstrike_feeds_services.utils import ( + create_relationship, create_vulnerability, flexible_timestamp_to_datetime, remove_html_tags, @@ -11,6 +12,7 @@ from stix2 import ( Bundle, MarkingDefinition, + Software, Vulnerability, ) @@ -25,6 +27,7 @@ def __init__( source_name: str, object_markings: List[MarkingDefinition], confidence_level: int, + import_affected_products: bool = False, ) -> None: """Initialize vulnerability bundle builder.""" self.vulnerability = vulnerability @@ -32,6 +35,7 @@ def __init__( self.source_name = source_name self.object_markings = object_markings self.confidence_level = confidence_level + self.import_affected_products = import_affected_products publish_date = self.vulnerability.get("publish_date") self.created_timestamp = ( @@ -159,12 +163,48 @@ def _create_vulnerability(self) -> Vulnerability: def _get_description(self) -> Optional[str]: """Get vulnerability description, cleaning HTML if necessary.""" description = self.vulnerability.get("description") - - if description: - cleaned_description = remove_html_tags(description) - return cleaned_description - - return None + return remove_html_tags(description) if description else None + + def _create_software_and_relationships( + self, vulnerability_entity: Vulnerability + ) -> List[Any]: + """Create Software observables and has-relationships for affected products.""" + objects: List[Any] = [] + seen_ids: Set[str] = set() + + for product in self.vulnerability.get("affected_products", []): + product_name = product.get("product") + vendor_name = product.get("vendor") + + if not product_name: + continue + + software = Software( + name=product_name, + vendor=vendor_name, + object_marking_refs=self.object_markings, + created_by_ref=self.author.id, + allow_custom=True, + x_opencti_product=product_name, + ) + + if software.id in seen_ids: + continue + seen_ids.add(software.id) + + relationship = create_relationship( + relationship_type="has", + created_by=self.author, + source=software, + target=vulnerability_entity, + confidence=self.confidence_level, + object_markings=self.object_markings, + ) + + objects.append(software) + objects.append(relationship) + + return objects def build(self) -> Bundle: """Build vulnerability bundle.""" @@ -175,4 +215,9 @@ def build(self) -> Bundle: vulnerability_entity = self._create_vulnerability() bundle_objects.append(vulnerability_entity) + if self.import_affected_products: + bundle_objects.extend( + self._create_software_and_relationships(vulnerability_entity) + ) + return Bundle(objects=bundle_objects, allow_custom=True) diff --git a/external-import/crowdstrike/src/crowdstrike_feeds_connector/vulnerability/importer.py b/external-import/crowdstrike/src/crowdstrike_feeds_connector/vulnerability/importer.py index 837f269ed69..b937151895d 100644 --- a/external-import/crowdstrike/src/crowdstrike_feeds_connector/vulnerability/importer.py +++ b/external-import/crowdstrike/src/crowdstrike_feeds_connector/vulnerability/importer.py @@ -224,5 +224,6 @@ def _create_vulnerability_bundle(self, vulnerability) -> Bundle: source_name, object_marking_refs, confidence_level, + import_affected_products=self.config.crowdstrike.vulnerability_import_affected_products, ) return bundle_builder.build() diff --git a/external-import/crowdstrike/src/crowdstrike_feeds_services/client/indicators.py b/external-import/crowdstrike/src/crowdstrike_feeds_services/client/indicators.py index 0ae4cf28c98..bf49bf50821 100644 --- a/external-import/crowdstrike/src/crowdstrike_feeds_services/client/indicators.py +++ b/external-import/crowdstrike/src/crowdstrike_feeds_services/client/indicators.py @@ -1,4 +1,4 @@ -from typing import TYPE_CHECKING +from typing import TYPE_CHECKING, Optional from urllib.parse import parse_qs, urlparse from .base_api import BaseCrowdstrikeClient @@ -14,46 +14,63 @@ def __init__(self, config: "ConnectorSettings", helper: "OpenCTIConnectorHelper" super().__init__(config, helper) def get_combined_indicator_entities( - self, limit: int, sort: str, fql_filter: str, deep_pagination: bool + self, + limit: int, + sort: str, + fql_filter: str, + deep_pagination: bool, + next_page: Optional[str] = None, ) -> dict: - """ - Get info about indicators that match provided FQL filters. - :param limit: Maximum number of records to return (Max: 5000) in integer - :param sort: The property to sort by. (Ex: created_date|desc) in str - :param fql_filter: FQL query expression that should be used to limit the results in str - :param deep_pagination: Boolean - :return: Dict object containing API response - """ - response = self.cs_intel.query_indicator_entities( - limit=limit, sort=sort, filter=fql_filter, deep_pagination=deep_pagination - ) - - response_body = response["body"] - response_body["next_page_details"] = None + """Get info about indicators that match provided FQL filters. - next_page_details = self.get_next_page(response) + :param limit: Maximum number of records to return (max: 5000). + :param sort: The property to sort by (e.g. ``created_date|desc``). + :param fql_filter: FQL query expression used to filter the results. + :param deep_pagination: Whether to enable CrowdStrike's deep pagination. + :param next_page: Continuation token returned by a previous call as + ``response_body["next_page"]``. Pass ``None`` for the first page. + :return: Parsed response body, augmented with a ``next_page`` key whose + value is either the next-page token (string) or ``None`` when the + iteration is complete. + """ + kwargs = { + "limit": limit, + "sort": sort, + "filter": fql_filter, + "deep_pagination": deep_pagination, + } + if next_page: + kwargs["next_page"] = next_page - if next_page_details is not None: - response_body["next_page_details"] = next_page_details + response = self.cs_intel.query_indicator_entities(**kwargs) self.handle_api_error(response) self.helper.connector_logger.info("Getting combined indicator entities...") + response_body = response["body"] + response_body["next_page"] = self.get_next_page(response) + return response_body @staticmethod - def get_next_page(response: dict) -> dict | None: - """ - Get the next page of indicators if the total number is higher than the limit chosen - :param response: dict of the response - :return: A dictionary if there is more indicators than limit set or None - """ - next_page = response.get("headers").get("Next-Page") + def get_next_page(response: dict) -> Optional[str]: + """Extract the next-page continuation token from a response. - if next_page is not None: - enc_payload = urlparse(next_page).query - next_page_parsed = parse_qs(enc_payload) + CrowdStrike exposes pagination through a ``Next-Page`` HTTP header that + contains a URL whose query string carries the ``next_page`` parameter. + We extract that value and return it as-is so it can be passed back to + :meth:`get_combined_indicator_entities`. Returns ``None`` when there + is no next page. + """ + headers = response.get("headers") or {} + next_page_url = headers.get("Next-Page") + if not next_page_url: + return None - return next_page_parsed - else: + parsed_query = parse_qs(urlparse(next_page_url).query) + token_values = parsed_query.get("next_page") or [] + if not token_values: return None + + token = token_values[0] + return token or None diff --git a/external-import/crowdstrike/src/crowdstrike_feeds_services/utils/ioc_extractor.py b/external-import/crowdstrike/src/crowdstrike_feeds_services/utils/ioc_extractor.py new file mode 100644 index 00000000000..8da57a9fd76 --- /dev/null +++ b/external-import/crowdstrike/src/crowdstrike_feeds_services/utils/ioc_extractor.py @@ -0,0 +1,76 @@ +"""IOC extraction from text content using ioc-finder.""" + +import ipaddress +from typing import NamedTuple + +from ioc_finder import find_iocs as _find_iocs + +# Mapping from ioc-finder dict keys to our IOC type names. +_IOC_FINDER_KEY_MAP = { + "ipv4s": "ipv4", + "ipv6s": "ipv6", + "domains": "domain", + "urls": "url", + "md5s": "md5", + "sha1s": "sha1", + "sha256s": "sha256", +} + +VALID_IOC_TYPES = frozenset(_IOC_FINDER_KEY_MAP.values()) + + +class ExtractedIOC(NamedTuple): + """Represents an extracted IOC.""" + + type: str # ipv4, ipv6, domain, url, md5, sha1, sha256 + value: str + + +def _is_valid_public_ip(value: str) -> bool: + """Return True if *value* is a globally routable IP address.""" + try: + return ipaddress.ip_address(value).is_global + except ValueError: + return False + + +def extract_iocs(text: str, ioc_types: list[str]) -> list[ExtractedIOC]: + """Extract IOCs of the requested types from text. + + Args: + text: The text content to parse. + ioc_types: Which IOC types to extract (e.g. ["ipv4", "domain", "sha256"]). + + Returns: + Deduplicated list of ExtractedIOC instances. + """ + if not text or not ioc_types: + return [] + + raw = _find_iocs( + text=text, + parse_domain_from_url=False, + parse_from_url_path=False, + parse_domain_from_email_address=False, + parse_address_from_cidr=False, + parse_domain_name_from_xmpp_address=False, + parse_urls_without_scheme=True, + ) + + results: dict[tuple[str, str], ExtractedIOC] = {} + + for finder_key, ioc_type in _IOC_FINDER_KEY_MAP.items(): + if ioc_type not in ioc_types: + continue + + for value in raw.get(finder_key, []): + # Filter non-public IPs. + if ioc_type in ("ipv4", "ipv6") and not _is_valid_public_ip(value): + continue + + # Deduplicate (case-insensitive except for URLs). + key = (ioc_type, value.lower() if ioc_type != "url" else value) + if key not in results: + results[key] = ExtractedIOC(type=ioc_type, value=value) + + return list(results.values()) diff --git a/external-import/crowdstrike/src/requirements.txt b/external-import/crowdstrike/src/requirements.txt index 85aa0689f92..14076fc2884 100644 --- a/external-import/crowdstrike/src/requirements.txt +++ b/external-import/crowdstrike/src/requirements.txt @@ -1,6 +1,7 @@ -pycti==7.260309.0 -lxml==5.4.0 +pycti==7.260515.0 +lxml==6.1.0 crowdstrike-falconpy==1.6.0 pydantic>=2.10,<3 pydantic-settings>=2.0 +ioc-finder>=9.0.0 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk diff --git a/external-import/proofpoint-tap/proofpoint_tap/adapters/__init__.py b/external-import/crowdstrike/tests/ioc_extraction/__init__.py similarity index 100% rename from external-import/proofpoint-tap/proofpoint_tap/adapters/__init__.py rename to external-import/crowdstrike/tests/ioc_extraction/__init__.py diff --git a/external-import/crowdstrike/tests/ioc_extraction/test_ioc_extractor.py b/external-import/crowdstrike/tests/ioc_extraction/test_ioc_extractor.py new file mode 100644 index 00000000000..c606ed73972 --- /dev/null +++ b/external-import/crowdstrike/tests/ioc_extraction/test_ioc_extractor.py @@ -0,0 +1,166 @@ +"""Tests for the IOC extractor module.""" + +import pytest +from crowdstrike_feeds_services.utils.ioc_extractor import ( + VALID_IOC_TYPES, + ExtractedIOC, + _is_valid_public_ip, + extract_iocs, +) + +ALL_TYPES = list(VALID_IOC_TYPES) + +# --------------------------------------------------------------------------- +# _is_valid_public_ip +# --------------------------------------------------------------------------- + + +class TestIsValidPublicIp: + """Tests for IP validation helper.""" + + @pytest.mark.parametrize( + "ip", + [ + "8.8.8.8", + "1.1.1.1", + "45.33.32.156", + "2607:f8b0:4004:800::200e", + ], + ) + def test_valid_public_ips(self, ip): + assert _is_valid_public_ip(ip) is True + + @pytest.mark.parametrize( + "ip", + [ + "192.168.1.1", # private + "10.0.0.1", # private + "172.16.0.1", # private + "127.0.0.1", # loopback + "0.0.0.0", # unspecified + "255.255.255.255", # broadcast/reserved + "169.254.1.1", # link-local + "::1", # ipv6 loopback + "fe80::1", # ipv6 link-local + "2001:db8::1", # ipv6 documentation + "not-an-ip", + "", + ], + ) + def test_rejects_non_public_ips(self, ip): + assert _is_valid_public_ip(ip) is False + + +# --------------------------------------------------------------------------- +# extract_iocs +# --------------------------------------------------------------------------- + + +class TestExtractIocs: + """Tests for the main extract_iocs function.""" + + def test_empty_text_returns_empty(self): + assert extract_iocs("", ALL_TYPES) == [] + + def test_empty_types_returns_empty(self): + assert extract_iocs("IP: 8.8.8.8", []) == [] + + def test_no_iocs_returns_empty(self): + assert ( + extract_iocs("This text has no indicators of compromise.", ALL_TYPES) == [] + ) + + def test_extracts_public_ipv4(self): + result = extract_iocs( + "Observed connections to 45.33.32.156 from host.", ALL_TYPES + ) + assert ExtractedIOC("ipv4", "45.33.32.156") in result + + def test_ignores_private_ipv4(self): + result = extract_iocs("Internal host 192.168.1.1 and 10.0.0.1", ALL_TYPES) + ipv4s = [r for r in result if r.type == "ipv4"] + assert len(ipv4s) == 0 + + def test_extracts_domain(self): + result = extract_iocs("C2 callback to evil-c2.example.com observed.", ALL_TYPES) + assert ExtractedIOC("domain", "evil-c2.example.com") in result + + def test_extracts_url(self): + result = extract_iocs( + "Downloaded from https://malware.example.org/payload", ALL_TYPES + ) + urls = [r for r in result if r.type == "url"] + assert len(urls) == 1 + assert urls[0].value == "https://malware.example.org/payload" + + def test_extracts_md5(self): + result = extract_iocs("MD5: d41d8cd98f00b204e9800998ecf8427e", ALL_TYPES) + assert ExtractedIOC("md5", "d41d8cd98f00b204e9800998ecf8427e") in result + + def test_extracts_sha1(self): + result = extract_iocs( + "SHA1: da39a3ee5e6b4b0d3255bfef95601890afd80709", ALL_TYPES + ) + assert ( + ExtractedIOC("sha1", "da39a3ee5e6b4b0d3255bfef95601890afd80709") in result + ) + + def test_extracts_sha256(self): + hash_val = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + result = extract_iocs(f"SHA256: {hash_val}", ALL_TYPES) + assert ExtractedIOC("sha256", hash_val) in result + + def test_sha256_not_matched_as_shorter_hashes(self): + """A SHA-256 should not also produce spurious MD5 or SHA-1 matches.""" + hash_val = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + result = extract_iocs(f"Hash: {hash_val}", ALL_TYPES) + types = {r.type for r in result} + assert "sha256" in types + assert "md5" not in types + assert "sha1" not in types + + def test_deduplicates_same_ioc(self): + result = extract_iocs("IP 8.8.8.8 and again 8.8.8.8", ALL_TYPES) + ipv4_results = [r for r in result if r.value == "8.8.8.8"] + assert len(ipv4_results) == 1 + + def test_defanged_domain(self): + result = extract_iocs("C2: evil[.]example[.]com", ALL_TYPES) + assert ExtractedIOC("domain", "evil.example.com") in result + + def test_defanged_url(self): + result = extract_iocs("URL: hxxps://evil[.]org/malware", ALL_TYPES) + urls = [r for r in result if r.type == "url"] + assert len(urls) == 1 + assert urls[0].value == "https://evil.org/malware" + + def test_domain_inside_url_not_duplicated(self): + """When a URL is extracted, its domain should not appear separately.""" + result = extract_iocs("Visit https://evil.example.com/path", ALL_TYPES) + types = [r.type for r in result] + assert "url" in types + assert "domain" not in types + + def test_mixed_iocs(self): + """Extract multiple IOC types from a single text block.""" + text = ( + "The actor used 45.33.32.156 as C2. " + "Domain evil.example.com resolved to that IP. " + "Payload hash: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + ) + result = extract_iocs(text, ALL_TYPES) + types = {r.type for r in result} + assert {"ipv4", "domain", "sha256"}.issubset(types) + + def test_selective_types_only_extracts_requested(self): + """Only requested IOC types should be returned.""" + text = "IP 8.8.8.8 domain evil.com hash d41d8cd98f00b204e9800998ecf8427e" + result = extract_iocs(text, ["ipv4"]) + types = {r.type for r in result} + assert types == {"ipv4"} + + def test_domain_extracted_alone_without_url_dedup(self): + """When only domain is requested (not url), standalone domains are still extracted.""" + result = extract_iocs("Domain evil.example.com observed", ["domain"]) + assert len(result) == 1 + assert result[0].type == "domain" diff --git a/external-import/crowdstrike/tests/ioc_extraction/test_report_ioc_extraction.py b/external-import/crowdstrike/tests/ioc_extraction/test_report_ioc_extraction.py new file mode 100644 index 00000000000..a4c7c469449 --- /dev/null +++ b/external-import/crowdstrike/tests/ioc_extraction/test_report_ioc_extraction.py @@ -0,0 +1,201 @@ +"""Tests for IOC extraction integration in report building.""" + +import json +from pathlib import Path +from uuid import uuid4 + +import pytest +from crowdstrike_feeds_connector.report.builder import ReportBundleBuilder +from crowdstrike_feeds_connector.report.importer import ReportImporter +from stix2 import TLP_AMBER, Bundle, Identity, MarkingDefinition + +# ===================== +# Fixtures +# ===================== + + +@pytest.fixture +def fake_report_data() -> dict: + faker_dir = Path(__file__).parent.parent / "faker" + with open(faker_dir / "api_report.json", "r") as f: + return json.load(f) + + +@pytest.fixture +def author_identity() -> Identity: + return Identity( # pylint: disable=W9101 + name="CrowdStrike", + identity_class="organization", + ) + + +@pytest.fixture +def tlp_marking() -> MarkingDefinition: + return TLP_AMBER + + +@pytest.fixture +def crowdstrike_config() -> dict[str, str]: + return { + "OPENCTI_URL": "http://localhost:8080", + "OPENCTI_TOKEN": f"{uuid4()}", + "CONNECTOR_ID": f"{uuid4()}", + "CONNECTOR_NAME": "CrowdStrike Test", + "CONNECTOR_SCOPE": "crowdstrike", + "CROWDSTRIKE_BASE_URL": "https://api.crowdstrike.com", + "CROWDSTRIKE_CLIENT_ID": f"{uuid4()}", + "CROWDSTRIKE_CLIENT_SECRET": f"{uuid4()}", + } + + +# ===================== +# Builder tests +# ===================== + + +def _build_report_bundle( + report_data: dict, + author: Identity, + tlp_marking: MarkingDefinition, + extracted_observables=None, +) -> Bundle: + builder = ReportBundleBuilder( + report=report_data, + author=author, + source_name="CrowdStrike", + object_markings=[tlp_marking], + report_status=0, + report_type="threat-report", + confidence_level=80, + extracted_observables=extracted_observables, + ) + return builder.build() + + +def test_builder_includes_extracted_observables_in_bundle( + fake_report_data, author_identity, tlp_marking +): + """Extracted observables should appear in the bundle objects.""" + from stix2 import IPv4Address + + obs = IPv4Address(value="45.33.32.156") # pylint: disable=W9101 + bundle = _build_report_bundle( + fake_report_data, author_identity, tlp_marking, extracted_observables=[obs] + ) + + bundle_types = [getattr(o, "type", None) for o in bundle.objects] + assert "ipv4-addr" in bundle_types + + +def test_builder_includes_extracted_observables_in_report_object_refs( + fake_report_data, author_identity, tlp_marking +): + """Extracted observables should be referenced in the report's object_refs.""" + from stix2 import IPv4Address + + obs = IPv4Address(value="45.33.32.156") # pylint: disable=W9101 + bundle = _build_report_bundle( + fake_report_data, author_identity, tlp_marking, extracted_observables=[obs] + ) + + report_obj = next(o for o in bundle.objects if getattr(o, "type", None) == "report") + assert obs.id in report_obj.object_refs + + +def test_builder_without_extracted_observables( + fake_report_data, author_identity, tlp_marking +): + """Bundle should still build correctly when no observables are extracted.""" + bundle = _build_report_bundle( + fake_report_data, author_identity, tlp_marking, extracted_observables=None + ) + + report_obj = next(o for o in bundle.objects if getattr(o, "type", None) == "report") + assert report_obj is not None + + +# ===================== +# Importer helper tests +# ===================== + + +def test_get_report_text_content_returns_description(fake_report_data): + """Should return the description field.""" + text = ReportImporter._get_report_text_content(fake_report_data) + assert len(text) > 0 + + +def test_get_report_text_content_falls_back_to_description(): + """Should fall back to description when rich_text_description is missing.""" + report = {"description": "plain text description"} + text = ReportImporter._get_report_text_content(report) + assert text == "plain text description" + + +def test_get_report_text_content_falls_back_to_short_description(): + """Should fall back to short_description as last resort.""" + report = {"short_description": "short desc"} + text = ReportImporter._get_report_text_content(report) + assert text == "short desc" + + +def test_get_report_text_content_returns_empty_when_no_content(): + """Should return empty string when no text fields are present.""" + text = ReportImporter._get_report_text_content({}) + assert text == "" + + +# ===================== +# Report with IOCs in description +# ===================== + + +def test_report_with_iocs_in_description_produces_observables( + fake_report_data, author_identity, tlp_marking +): + """When report description contains IOCs and extract_iocs is on, + the bundle should contain the corresponding observables.""" + from crowdstrike_feeds_services.utils.ioc_extractor import ( + VALID_IOC_TYPES, + extract_iocs, + ) + from crowdstrike_feeds_services.utils.observables import ObservableProperties + + # Inject IOCs into the report description + fake_report_data["rich_text_description"] = None + fake_report_data["description"] = ( + "The actor used 45.33.32.156 as C2. " + "Domain evil.example.com was also observed. " + "Hash: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + ) + + text = ReportImporter._get_report_text_content(fake_report_data) + iocs = extract_iocs(text, list(VALID_IOC_TYPES)) + + # Build observables the same way the importer does + observables = [] + for ioc in iocs: + factory = ReportImporter._IOC_OBSERVABLE_FACTORIES.get(ioc.type) + if factory: + props = ObservableProperties( + value=ioc.value, + created_by=author_identity, + labels=["extracted-from-report"], + score=0, + object_markings=[tlp_marking], + ) + observables.append(factory(props)) + + assert len(observables) >= 3 # at least ipv4, domain, sha256 + + bundle = _build_report_bundle( + fake_report_data, + author_identity, + tlp_marking, + extracted_observables=observables, + ) + + bundle_types = {getattr(o, "type", None) for o in bundle.objects} + assert "ipv4-addr" in bundle_types + assert "domain-name" in bundle_types + assert "file" in bundle_types # SHA-256 creates a File observable diff --git a/external-import/crowdstrike/tests/test-requirements.txt b/external-import/crowdstrike/tests/test-requirements.txt index 539711a50f0..88865ffadf1 100644 --- a/external-import/crowdstrike/tests/test-requirements.txt +++ b/external-import/crowdstrike/tests/test-requirements.txt @@ -1,4 +1,4 @@ # Main dependencies needs to be installed -r ../src/requirements.txt -pytest~=8.4.2 +pytest~=9.0.3 pytest-order~=1.3.0 diff --git a/external-import/crowdstrike/tests/test_indicator_age_filtering.py b/external-import/crowdstrike/tests/test_indicator_age_filtering.py new file mode 100644 index 00000000000..d503bf8dcce --- /dev/null +++ b/external-import/crowdstrike/tests/test_indicator_age_filtering.py @@ -0,0 +1,277 @@ +from datetime import datetime, timedelta, timezone +from unittest.mock import MagicMock, patch + +from crowdstrike_feeds_connector.indicator.importer import ( + IndicatorImporter, + IndicatorImporterConfig, +) + + +def test_is_indicator_too_old(): + mock_config = MagicMock() + mock_helper = MagicMock() + + age_config = { + "ip": timedelta(days=90), + "domain": timedelta(days=365), + "url": timedelta(days=60), + "hash": timedelta(days=730), + "default": timedelta(days=30), + } + + config = IndicatorImporterConfig( + config=mock_config, + helper=mock_helper, + author=MagicMock(), + default_latest_timestamp=0, + tlp_marking=MagicMock(), + create_observables=True, + create_indicators=True, + exclude_types=[], + report_status=0, + report_type="threat-report", + default_x_opencti_score=50, + indicator_low_score=40, + indicator_low_score_labels=set(), + indicator_medium_score=60, + indicator_medium_score_labels=set(), + indicator_high_score=80, + indicator_high_score_labels=set(), + indicator_unwanted_labels=set(), + indicator_max_age_by_type=age_config, + no_file_trigger_import=True, + scopes=set(["indicator"]), + attack_lookup=None, + ) + + importer = IndicatorImporter(config) + + now_ts = int(datetime.now(timezone.utc).timestamp()) + + test_cases = [ + ("ip_address", 10, False), + ("ip_address", 100, True), + ("ip_address_block", 89, False), + ("ip_address_block", 91, True), + ("domain", 100, False), + ("domain", 400, True), + ("url", 10, False), + ("url", 70, True), + ("hash_md5", 100, False), + ("hash_md5", 800, True), + ("hash_sha1", 100, False), + ("hash_sha1", 800, True), + ("hash_sha256", 100, False), + ("hash_sha256", 800, True), + ("registry", 10, False), + ("registry", 40, True), + ("mutex_name", 10, False), + ("mutex_name", 40, True), + ] + + for status_type, days_ago, expected in test_cases: + published_date = now_ts - (days_ago * 24 * 60 * 60) + indicator = { + "id": f"indicator-{status_type}-{days_ago}", + "type": status_type, + "published_date": published_date, + } + assert ( + importer._is_indicator_too_old(indicator) == expected + ), f"Failed for {status_type} published {days_ago} days ago" + + +def test_is_indicator_too_old_missing_published_date(): + age_config = { + "ip": timedelta(days=90), + "default": timedelta(days=30), + } + + config = IndicatorImporterConfig( + config=MagicMock(), + helper=MagicMock(), + author=MagicMock(), + default_latest_timestamp=0, + tlp_marking=MagicMock(), + create_observables=True, + create_indicators=True, + exclude_types=[], + report_status=0, + report_type="threat-report", + default_x_opencti_score=50, + indicator_low_score=40, + indicator_low_score_labels=set(), + indicator_medium_score=60, + indicator_medium_score_labels=set(), + indicator_high_score=80, + indicator_high_score_labels=set(), + indicator_unwanted_labels=set(), + indicator_max_age_by_type=age_config, + no_file_trigger_import=True, + scopes=set(["indicator"]), + attack_lookup=None, + ) + + importer = IndicatorImporter(config) + + indicator = { + "id": "no-date-indicator", + "type": "ip_address", + } + assert not importer._is_indicator_too_old(indicator) + + +def test_is_indicator_too_old_no_config(): + config = IndicatorImporterConfig( + config=MagicMock(), + helper=MagicMock(), + author=MagicMock(), + default_latest_timestamp=0, + tlp_marking=MagicMock(), + create_observables=True, + create_indicators=True, + exclude_types=[], + report_status=0, + report_type="threat-report", + default_x_opencti_score=50, + indicator_low_score=40, + indicator_low_score_labels=set(), + indicator_medium_score=60, + indicator_medium_score_labels=set(), + indicator_high_score=80, + indicator_high_score_labels=set(), + indicator_unwanted_labels=set(), + indicator_max_age_by_type={ + "ip": None, + "domain": None, + "url": None, + "hash": None, + "default": None, + }, + no_file_trigger_import=True, + scopes=set(["indicator"]), + attack_lookup=None, + ) + + importer = IndicatorImporter(config) + now_ts = int(datetime.now(timezone.utc).timestamp()) + + indicator = { + "id": "old-ip", + "type": "ip_address", + "published_date": now_ts - (1000 * 24 * 60 * 60), + } + assert not importer._is_indicator_too_old(indicator) + + +def test_is_indicator_too_old_fallback_to_default(): + age_config = {"default": timedelta(days=30)} + + config = IndicatorImporterConfig( + config=MagicMock(), + helper=MagicMock(), + author=MagicMock(), + default_latest_timestamp=0, + tlp_marking=MagicMock(), + create_observables=True, + create_indicators=True, + exclude_types=[], + report_status=0, + report_type="threat-report", + default_x_opencti_score=50, + indicator_low_score=40, + indicator_low_score_labels=set(), + indicator_medium_score=60, + indicator_medium_score_labels=set(), + indicator_high_score=80, + indicator_high_score_labels=set(), + indicator_unwanted_labels=set(), + indicator_max_age_by_type=age_config, + no_file_trigger_import=True, + scopes=set(["indicator"]), + attack_lookup=None, + ) + + importer = IndicatorImporter(config) + now_ts = int(datetime.now(timezone.utc).timestamp()) + + indicator_recent = { + "id": "recent-ip", + "type": "ip_address", + "published_date": now_ts - (10 * 24 * 60 * 60), + } + indicator_old = { + "id": "old-ip", + "type": "ip_address", + "published_date": now_ts - (40 * 24 * 60 * 60), + } + + assert not importer._is_indicator_too_old(indicator_recent) + assert importer._is_indicator_too_old(indicator_old) + + +def test_is_indicator_too_old_exact_boundary(): + """Test that an indicator published exactly at the threshold is NOT filtered. + + The comparison uses strict '<', so published_date == (now - threshold) is not too old. + Uses mocked time to avoid flakiness from clock drift between test and method. + """ + fixed_now = datetime(2026, 1, 15, 12, 0, 0, tzinfo=timezone.utc) + + age_config = { + "ip": timedelta(days=90), + "default": timedelta(days=30), + } + + config = IndicatorImporterConfig( + config=MagicMock(), + helper=MagicMock(), + author=MagicMock(), + default_latest_timestamp=0, + tlp_marking=MagicMock(), + create_observables=True, + create_indicators=True, + exclude_types=[], + report_status=0, + report_type="threat-report", + default_x_opencti_score=50, + indicator_low_score=40, + indicator_low_score_labels=set(), + indicator_medium_score=60, + indicator_medium_score_labels=set(), + indicator_high_score=80, + indicator_high_score_labels=set(), + indicator_unwanted_labels=set(), + indicator_max_age_by_type=age_config, + no_file_trigger_import=True, + scopes=set(["indicator"]), + attack_lookup=None, + ) + + importer = IndicatorImporter(config) + + exactly_at_threshold = fixed_now - timedelta(days=90) + exactly_at_threshold_ts = int(exactly_at_threshold.timestamp()) + + one_second_past = fixed_now - timedelta(days=90, seconds=1) + one_second_past_ts = int(one_second_past.timestamp()) + + with patch( + "crowdstrike_feeds_connector.indicator.importer.datetime" + ) as mock_datetime: + mock_datetime.now.return_value = fixed_now + mock_datetime.side_effect = lambda *args, **kw: datetime(*args, **kw) + + indicator_at_boundary = { + "id": "boundary-ip", + "type": "ip_address", + "published_date": exactly_at_threshold_ts, + } + assert not importer._is_indicator_too_old(indicator_at_boundary) + + indicator_past_boundary = { + "id": "past-boundary-ip", + "type": "ip_address", + "published_date": one_second_past_ts, + } + assert importer._is_indicator_too_old(indicator_past_boundary) diff --git a/external-import/crowdstrike/tests/test_indicator_pagination.py b/external-import/crowdstrike/tests/test_indicator_pagination.py new file mode 100644 index 00000000000..5843632b777 --- /dev/null +++ b/external-import/crowdstrike/tests/test_indicator_pagination.py @@ -0,0 +1,257 @@ +"""Tests for the CrowdStrike indicator paginated fetch logic. + +These tests cover the pagination contract between +:class:`crowdstrike_feeds_services.client.indicators.IndicatorsAPI` and +:class:`crowdstrike_feeds_connector.indicator.importer.IndicatorImporter`: + +* The client returns ``next_page`` as a single string token (or ``None``). +* The importer walks every page until either the upstream API runs out of + pages or the configured ``max_records_per_run`` cap is reached. +* Pagination is robust to ``meta.pagination`` being missing or ``None``. +""" + +from typing import Any +from unittest.mock import MagicMock, patch + +import pytest + +# CrowdStrike's pydantic settings are constructed when +# ``crowdstrike_feeds_*`` modules are imported, so the env vars MUST be +# in place before any of them is loaded. The previous module-level +# ``os.environ.setdefault`` was problematic for two reasons: +# +# * ``setdefault`` does NOT override potentially-invalid values +# inherited from the test runner environment; +# * the changes were never reverted, so they leaked into the other +# CrowdStrike test modules (most of which use ``mock_env_vars(...)`` +# from ``conftest.py`` to patch and restore env). +# +# We now drive the env through a function-scoped ``autouse`` fixture +# (``monkeypatch.setenv`` always overrides and pytest restores the +# original env at teardown), and the connector modules are imported +# lazily inside ``_build_importer`` / the three +# ``test_get_next_page_*`` cases so the env fixture has applied by the +# time pydantic-settings runs. +_REQUIRED_ENV: dict[str, str] = { + "OPENCTI_URL": "http://localhost:8080", + "OPENCTI_TOKEN": "token", + "CONNECTOR_ID": "ChangeMe", + "CONNECTOR_TYPE": "EXTERNAL_IMPORT", + "CONNECTOR_NAME": "CrowdStrike", + "CONNECTOR_SCOPE": "crowdstrike", + "CONNECTOR_LOG_LEVEL": "info", + "CONNECTOR_DURATION_PERIOD": "PT30M", + "CROWDSTRIKE_CLIENT_ID": "ChangeMe", + "CROWDSTRIKE_CLIENT_SECRET": "ChangeMe", +} + + +@pytest.fixture(autouse=True) +def _crowdstrike_env(monkeypatch: pytest.MonkeyPatch) -> None: + """Pin (and restore) the env vars CrowdStrike's settings expect. + + ``monkeypatch.setenv`` overrides any existing runner-provided + value (whereas ``os.environ.setdefault`` left potentially-invalid + values in place) and pytest restores the original env when the + fixture tears down — so these settings cannot leak into the other + CrowdStrike test modules. + """ + for key, value in _REQUIRED_ENV.items(): + monkeypatch.setenv(key, value) + + +def _build_importer(*, max_records_per_run=None): + """Build an ``IndicatorImporter`` whose API client is a ``MagicMock``. + + The :class:`IndicatorsAPI` / :class:`RelatedActorImporter` / + :class:`ReportFetcher` classes are patched out because their + constructors instantiate the CrowdStrike settings / falconpy + client / pycti API, which would require real credentials at + construction time. The connector modules are imported lazily so + the ``_crowdstrike_env`` autouse fixture has applied (and + overrides any invalid runner-provided value) before the + pydantic settings are constructed at module import time. + """ + from crowdstrike_feeds_connector.indicator.importer import ( + IndicatorImporter, + IndicatorImporterConfig, + ) + from crowdstrike_feeds_services.client.indicators import IndicatorsAPI + + helper = MagicMock() + helper.connector_logger = MagicMock() + helper.connect_id = "connector-id" + + author = MagicMock() + tlp_marking = MagicMock() + settings = MagicMock() + + cfg = IndicatorImporterConfig( + config=settings, + helper=helper, + author=author, + default_latest_timestamp=0, + tlp_marking=tlp_marking, + create_observables=True, + create_indicators=True, + exclude_types=[], + report_status=0, + report_type="threat-report", + default_x_opencti_score=50, + indicator_low_score=40, + indicator_low_score_labels=set(), + indicator_medium_score=60, + indicator_medium_score_labels=set(), + indicator_high_score=80, + indicator_high_score_labels=set(), + indicator_unwanted_labels=set(), + indicator_max_age_by_type={}, + no_file_trigger_import=True, + scopes={"indicator"}, + attack_lookup=None, + max_records_per_run=max_records_per_run, + ) + + with patch( + "crowdstrike_feeds_connector.indicator.importer.IndicatorsAPI", + autospec=True, + ), patch( + "crowdstrike_feeds_connector.indicator.importer.RelatedActorImporter", + autospec=True, + ), patch( + "crowdstrike_feeds_connector.indicator.importer.ReportFetcher", + autospec=True, + ): + importer = IndicatorImporter(cfg) + + importer.indicators_api_cs = MagicMock(spec=IndicatorsAPI) + return importer + + +def _make_page( + resources, *, next_page=None, total=None, with_pagination=True +) -> dict[str, Any]: + page: dict[str, Any] = {"resources": resources, "next_page": next_page} + if with_pagination: + page["meta"] = {"pagination": {"total": total if total is not None else 0}} + else: + # Cover the ``meta.pagination`` is ``None`` case. + page["meta"] = {"pagination": None} + return page + + +def _fake_indicator(idx: int) -> dict[str, Any]: + return {"id": f"ioc-{idx}", "last_updated": 1_700_000_000 + idx, "type": "domain"} + + +def test_pagination_walks_every_page_until_next_page_is_none(): + importer = _build_importer() + indicators = [_fake_indicator(i) for i in range(5)] + importer.indicators_api_cs.get_combined_indicator_entities.side_effect = [ + _make_page(indicators[:2], next_page="token-1", total=5), + _make_page(indicators[2:4], next_page="token-2", total=5), + _make_page(indicators[4:], next_page=None, total=5), + ] + + fetched = importer._paginated_query_indicators(limit=1000, sort="x", fql_filter="y") + + assert fetched == indicators + assert importer.indicators_api_cs.get_combined_indicator_entities.call_count == 3 + call_args_list = ( + importer.indicators_api_cs.get_combined_indicator_entities.call_args_list + ) + assert call_args_list[0].kwargs["next_page"] is None + assert call_args_list[1].kwargs["next_page"] == "token-1" + assert call_args_list[2].kwargs["next_page"] == "token-2" + + +def test_pagination_stops_when_resources_are_empty(): + importer = _build_importer() + importer.indicators_api_cs.get_combined_indicator_entities.side_effect = [ + _make_page([], next_page="token-1"), + ] + + fetched = importer._paginated_query_indicators(limit=1000, sort="x", fql_filter="y") + + assert fetched == [] + assert importer.indicators_api_cs.get_combined_indicator_entities.call_count == 1 + + +def test_pagination_handles_missing_pagination_metadata(): + importer = _build_importer() + indicators = [_fake_indicator(i) for i in range(2)] + importer.indicators_api_cs.get_combined_indicator_entities.side_effect = [ + _make_page(indicators, next_page=None, with_pagination=False), + ] + + fetched = importer._paginated_query_indicators(limit=1000, sort="x", fql_filter="y") + + assert fetched == indicators + + +def test_pagination_caps_total_records_per_run_within_first_page(): + importer = _build_importer(max_records_per_run=3) + indicators = [_fake_indicator(i) for i in range(10)] + importer.indicators_api_cs.get_combined_indicator_entities.side_effect = [ + _make_page(indicators, next_page="token-1", total=10), + ] + + fetched = importer._paginated_query_indicators(limit=1000, sort="x", fql_filter="y") + + # Only 3 indicators fetched, and no follow-up page was requested. + assert fetched == indicators[:3] + assert importer.indicators_api_cs.get_combined_indicator_entities.call_count == 1 + + +def test_pagination_caps_total_records_per_run_across_pages(): + importer = _build_importer(max_records_per_run=3) + indicators = [_fake_indicator(i) for i in range(6)] + importer.indicators_api_cs.get_combined_indicator_entities.side_effect = [ + _make_page(indicators[:2], next_page="token-1", total=6), + _make_page(indicators[2:4], next_page="token-2", total=6), + _make_page(indicators[4:], next_page=None, total=6), + ] + + fetched = importer._paginated_query_indicators(limit=1000, sort="x", fql_filter="y") + + assert fetched == indicators[:3] + # Should have stopped after the 2nd page (2 from page 1, 1 from page 2). + assert importer.indicators_api_cs.get_combined_indicator_entities.call_count == 2 + + +@pytest.mark.parametrize("disabled_value", [None, 0, -1]) +def test_pagination_cap_can_be_disabled(disabled_value): + importer = _build_importer(max_records_per_run=disabled_value) + indicators = [_fake_indicator(i) for i in range(5)] + importer.indicators_api_cs.get_combined_indicator_entities.side_effect = [ + _make_page(indicators[:2], next_page="token-1", total=5), + _make_page(indicators[2:], next_page=None, total=5), + ] + + fetched = importer._paginated_query_indicators(limit=1000, sort="x", fql_filter="y") + + assert fetched == indicators + + +def test_get_next_page_extracts_token_from_url(): + from crowdstrike_feeds_services.client.indicators import IndicatorsAPI + + response = { + "headers": { + "Next-Page": "/intel/combined/indicators/v1?limit=1000&next_page=abc123" + } + } + assert IndicatorsAPI.get_next_page(response) == "abc123" + + +def test_get_next_page_returns_none_when_header_missing(): + from crowdstrike_feeds_services.client.indicators import IndicatorsAPI + + assert IndicatorsAPI.get_next_page({"headers": {}}) is None + + +def test_get_next_page_returns_none_when_token_missing(): + from crowdstrike_feeds_services.client.indicators import IndicatorsAPI + + response = {"headers": {"Next-Page": "/intel/combined/indicators/v1?limit=1000"}} + assert IndicatorsAPI.get_next_page(response) is None diff --git a/external-import/crowdstrike/tests/test_report_created_date_filter.py b/external-import/crowdstrike/tests/test_report_created_date_filter.py new file mode 100644 index 00000000000..2c55b421ed3 --- /dev/null +++ b/external-import/crowdstrike/tests/test_report_created_date_filter.py @@ -0,0 +1,126 @@ +"""Tests for report importer created_date FQL filter.""" + +from datetime import datetime, timezone +from unittest.mock import MagicMock, patch + +import pytest +from crowdstrike_feeds_connector.report.importer import ReportImporter + + +@pytest.fixture +def report_importer(): + """Create a ReportImporter with mocked dependencies.""" + mock_config = MagicMock() + mock_helper = MagicMock() + mock_author = MagicMock() + mock_tlp = MagicMock() + + # Set a known default_latest_timestamp (e.g., 2025-01-01 00:00:00 UTC) + default_ts = int(datetime(2025, 1, 1, tzinfo=timezone.utc).timestamp()) + + with patch("crowdstrike_feeds_connector.report.importer.ReportsAPI"), patch( + "crowdstrike_feeds_connector.report.importer.IndicatorsAPI" + ): + importer = ReportImporter( + config=mock_config, + helper=mock_helper, + author=mock_author, + default_latest_timestamp=default_ts, + tlp_marking=mock_tlp, + include_types=[], + target_industries=[], + report_status=0, + report_type="threat-report", + guess_malware=False, + report_guess_relations=False, + indicator_config={}, + no_file_trigger_import=True, + scopes=set(), + ) + return importer + + +def test_fetch_reports_includes_created_date_filter(report_importer): + """The FQL filter must include created_date to exclude old reports.""" + start_timestamp = int(datetime(2025, 4, 1, tzinfo=timezone.utc).timestamp()) + + with patch("crowdstrike_feeds_connector.report.importer.paginate") as mock_paginate: + mock_paginated_fn = MagicMock(return_value=iter([])) + mock_paginate.return_value = mock_paginated_fn + + # Exhaust the generator + list(report_importer._fetch_reports(start_timestamp)) + + mock_paginated_fn.assert_called_once() + call_kwargs = mock_paginated_fn.call_args[1] + fql_filter = call_kwargs["fql_filter"] + + # Must filter by last_modified_date (pagination cursor) + assert f"last_modified_date:>{start_timestamp}" in fql_filter + # Must also filter by created_date using the configured start timestamp + assert f"created_date:>{report_importer.default_latest_timestamp}" in fql_filter + + +def test_fetch_reports_created_date_filter_uses_configured_timestamp(report_importer): + """created_date filter should use default_latest_timestamp, not the advancing cursor.""" + # Simulate the cursor having advanced well past the configured timestamp + advancing_cursor = int(datetime(2025, 5, 1, tzinfo=timezone.utc).timestamp()) + + with patch("crowdstrike_feeds_connector.report.importer.paginate") as mock_paginate: + mock_paginated_fn = MagicMock(return_value=iter([])) + mock_paginate.return_value = mock_paginated_fn + + list(report_importer._fetch_reports(advancing_cursor)) + + call_kwargs = mock_paginated_fn.call_args[1] + fql_filter = call_kwargs["fql_filter"] + + # The created_date filter must use the original configured timestamp, + # not the advancing pagination cursor. + assert f"created_date:>{report_importer.default_latest_timestamp}" in fql_filter + # The last_modified_date filter uses the advancing cursor + assert f"last_modified_date:>{advancing_cursor}" in fql_filter + + +def test_fetch_reports_includes_type_and_industry_filters(): + """FQL filter should combine created_date with type and target_industries.""" + mock_config = MagicMock() + mock_helper = MagicMock() + + default_ts = int(datetime(2025, 1, 1, tzinfo=timezone.utc).timestamp()) + + with patch("crowdstrike_feeds_connector.report.importer.ReportsAPI"), patch( + "crowdstrike_feeds_connector.report.importer.IndicatorsAPI" + ): + importer = ReportImporter( + config=mock_config, + helper=mock_helper, + author=MagicMock(), + default_latest_timestamp=default_ts, + tlp_marking=MagicMock(), + include_types=["notice", "tipper"], + target_industries=["technology"], + report_status=0, + report_type="threat-report", + guess_malware=False, + report_guess_relations=False, + indicator_config={}, + no_file_trigger_import=True, + scopes=set(), + ) + + start_ts = int(datetime(2025, 3, 1, tzinfo=timezone.utc).timestamp()) + + with patch("crowdstrike_feeds_connector.report.importer.paginate") as mock_paginate: + mock_paginated_fn = MagicMock(return_value=iter([])) + mock_paginate.return_value = mock_paginated_fn + + list(importer._fetch_reports(start_ts)) + + call_kwargs = mock_paginated_fn.call_args[1] + fql_filter = call_kwargs["fql_filter"] + + assert f"last_modified_date:>{start_ts}" in fql_filter + assert f"created_date:>{default_ts}" in fql_filter + assert "type:['notice', 'tipper']" in fql_filter + assert "target_industries:['technology']" in fql_filter diff --git a/external-import/crowdstrike/tests/test_settings.py b/external-import/crowdstrike/tests/test_settings.py index e5dccbfd2ec..ed35bc6a5d1 100644 --- a/external-import/crowdstrike/tests/test_settings.py +++ b/external-import/crowdstrike/tests/test_settings.py @@ -72,6 +72,11 @@ "indicator_high_score_labels": ["MaliciousConfidence/High"], "indicator_unwanted_labels": [], "no_file_trigger_import": True, + "indicator_ip_max_age": "P90D", + "indicator_domain_max_age": "P365D", + "indicator_url_max_age": "P60D", + "indicator_hash_max_age": "P730D", + "indicator_default_max_age": "P30D", "vulnerability_start_timestamp": NOW_TIMESTAMP, }, }, @@ -262,6 +267,21 @@ def _load_config_dict(cls, _, handler) -> dict[str, Any]: "crowdstrike.client_id", id="missing_crowdstrike_client_id", ), + pytest.param( + { + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + "crowdstrike": { + "client_id": "test-client-id", + "client_secret": "test-client-secret", + "indicator_ip_max_age": "90", # Invalid ISO 8601 duration + }, + }, + "crowdstrike.indicator_ip_max_age", + id="invalid_duration_format", + ), ], ) def test_settings_should_raise_when_invalid_input(settings_dict, field_name): diff --git a/external-import/proofpoint-tap/proofpoint_tap/client_api/__init__.py b/external-import/crowdstrike/tests/vulnerability_affected_products_import/__init__.py similarity index 100% rename from external-import/proofpoint-tap/proofpoint_tap/client_api/__init__.py rename to external-import/crowdstrike/tests/vulnerability_affected_products_import/__init__.py diff --git a/external-import/crowdstrike/tests/vulnerability_affected_products_import/test_vulnerability_affected_products_import.py b/external-import/crowdstrike/tests/vulnerability_affected_products_import/test_vulnerability_affected_products_import.py new file mode 100644 index 00000000000..856a83651ce --- /dev/null +++ b/external-import/crowdstrike/tests/vulnerability_affected_products_import/test_vulnerability_affected_products_import.py @@ -0,0 +1,650 @@ +"""Tests for Vulnerability Affected Products Import feature. + +# Feature: Vulnerability Affected Products Import +# As a CrowdStrike connector operator +# I want to optionally import affected software products from vulnerability data +# So that each vulnerability is linked to its affected software observables in OpenCTI +""" + +import json +from os import environ as os_environ +from uuid import uuid4 + +import pytest +from conftest import mock_env_vars +from crowdstrike_feeds_connector.vulnerability.builder import VulnerabilityBundleBuilder +from crowdstrike_feeds_services.utils import create_organization +from crowdstrike_feeds_services.utils.constants import DEFAULT_TLP_MARKING_DEFINITION + +# --------------------------------------------------------------------------- +# Fixtures +# --------------------------------------------------------------------------- + + +@pytest.fixture +def fake_vulnerability_data(): + """Real vulnerability data structure from CrowdStrike API.""" + import os + + faker_path = os.path.join( + os.path.dirname(__file__), "..", "faker", "api_vulnerability.json" + ) + with open(faker_path, "r") as f: + data = json.load(f) + return data["resources"][0] + + +@pytest.fixture +def author_identity(): + """Create author identity.""" + return create_organization("CrowdStrike") + + +@pytest.fixture +def tlp_marking(): + """Create TLP marking.""" + return DEFAULT_TLP_MARKING_DEFINITION + + +@pytest.fixture +def crowdstrike_config_with_affected_products() -> dict[str, str]: + """Fixture for CrowdStrike configuration with affected products enabled.""" + return { + "OPENCTI_URL": "http://localhost:8080", + "OPENCTI_TOKEN": f"{uuid4()}", + "CONNECTOR_ID": f"{uuid4()}", + "CONNECTOR_NAME": "CrowdStrike Test", + "CONNECTOR_SCOPE": "crowdstrike", + "CROWDSTRIKE_BASE_URL": "https://api.crowdstrike.com", + "CROWDSTRIKE_CLIENT_ID": f"{uuid4()}", + "CROWDSTRIKE_CLIENT_SECRET": f"{uuid4()}", + "CROWDSTRIKE_VULNERABILITY_IMPORT_AFFECTED_PRODUCTS": "true", + } + + +# --------------------------------------------------------------------------- +# Helper: filter bundle objects by STIX type +# --------------------------------------------------------------------------- + + +def _software_entries(bundle): + """Return all software objects from a STIX bundle.""" + return [obj for obj in bundle.objects if obj.type == "software"] + + +def _has_relationships(bundle): + """Return all 'has' relationship objects from a STIX bundle.""" + return [ + obj + for obj in bundle.objects + if obj.type == "relationship" and obj.relationship_type == "has" + ] + + +# --------------------------------------------------------------------------- +# Given helpers +# --------------------------------------------------------------------------- + + +def _given_vulnerability_with_one_affected_product(config_data, base_vulnerability): + """ + # Background: the CrowdStrike connector is configured with valid credentials + # Given a vulnerability with one affected product + """ + mock_env = mock_env_vars(os_environ, config_data) + vulnerability = { + **base_vulnerability, + "affected_products": [ + {"product": "lorem_system", "vendor": "ipsum_corp"}, + ], + } + return mock_env, vulnerability + + +def _given_vulnerability_with_n_affected_products(config_data, base_vulnerability, n): + """ + # Given a vulnerability with N affected products + """ + mock_env = mock_env_vars(os_environ, config_data) + products = [{"product": f"product_{i}", "vendor": f"vendor_{i}"} for i in range(n)] + vulnerability = {**base_vulnerability, "affected_products": products} + return mock_env, vulnerability + + +def _given_vulnerability_with_empty_affected_products(config_data, base_vulnerability): + """ + # Given a vulnerability with an empty affected products list + """ + mock_env = mock_env_vars(os_environ, config_data) + vulnerability = {**base_vulnerability, "affected_products": []} + return mock_env, vulnerability + + +def _given_vulnerability_with_no_affected_products_key(config_data, base_vulnerability): + """ + # Given a vulnerability with no affected products key + """ + mock_env = mock_env_vars(os_environ, config_data) + vulnerability = { + k: v for k, v in base_vulnerability.items() if k != "affected_products" + } + return mock_env, vulnerability + + +def _given_vulnerability_with_specific_product( + config_data, base_vulnerability, vendor, product +): + """ + # Given a vulnerability with an affected product having vendor and product + """ + mock_env = mock_env_vars(os_environ, config_data) + vulnerability = { + **base_vulnerability, + "affected_products": [ + {"product": product, "vendor": vendor}, + ], + } + return mock_env, vulnerability + + +def _given_vulnerability_with_missing_product_name(config_data, base_vulnerability): + """ + # Given a vulnerability with an affected product that has no product name + """ + mock_env = mock_env_vars(os_environ, config_data) + vulnerability = { + **base_vulnerability, + "affected_products": [ + {"vendor": "some_vendor"}, + ], + } + return mock_env, vulnerability + + +def _given_vulnerability_with_duplicate_affected_products( + config_data, base_vulnerability +): + """ + # Given a vulnerability with 2 identical affected products + """ + mock_env = mock_env_vars(os_environ, config_data) + vulnerability = { + **base_vulnerability, + "affected_products": [ + {"product": "lorem_system", "vendor": "ipsum_corp"}, + {"product": "lorem_system", "vendor": "ipsum_corp"}, + ], + } + return mock_env, vulnerability + + +def _given_vulnerability_with_empty_product_name( + config_data, base_vulnerability, vendor, product +): + """ + # Given a vulnerability with an affected product having vendor and empty product name + """ + mock_env = mock_env_vars(os_environ, config_data) + vulnerability = { + **base_vulnerability, + "affected_products": [ + {"product": product, "vendor": vendor}, + ], + } + return mock_env, vulnerability + + +# --------------------------------------------------------------------------- +# When helpers +# --------------------------------------------------------------------------- + + +def _when_vulnerability_bundle_is_built( + vulnerability, author, tlp_marking, import_affected_products +): + """ + # When the vulnerability bundle is built + """ + builder = VulnerabilityBundleBuilder( + vulnerability, + author, + "CrowdStrike", + [tlp_marking], + 75, + import_affected_products=import_affected_products, + ) + return builder.build() + + +# --------------------------------------------------------------------------- +# Then helpers +# --------------------------------------------------------------------------- + + +def _then_bundle_should_not_contain_any_software_entries(bundle): + """ + # Then the bundle should not contain any software entries + """ + entries = _software_entries(bundle) + assert len(entries) == 0 # noqa: S101 + + +def _then_bundle_should_not_contain_any_has_relationships(bundle): + """ + # Then the bundle should not contain any "has" relationships + """ + rels = _has_relationships(bundle) + assert len(rels) == 0 # noqa: S101 + + +def _then_bundle_should_contain_exactly_n_software_entries(bundle, n): + """ + # Then the bundle should contain exactly N software entries + """ + entries = _software_entries(bundle) + assert len(entries) == n # noqa: S101 + + +def _then_bundle_should_contain_exactly_n_has_relationships(bundle, n): + """ + # Then the bundle should contain exactly N "has" relationships + """ + rels = _has_relationships(bundle) + assert len(rels) == n # noqa: S101 + + +def _then_software_entry_has_vendor(bundle, vendor): + """ + # Then the software entry should have vendor + """ + entries = _software_entries(bundle) + assert len(entries) == 1 # noqa: S101 + assert ( + entries[0].vendor == vendor + ), f"Expected vendor '{vendor}', got '{entries[0].vendor}'" # noqa: S101 + + +def _then_software_entry_has_name(bundle, name): + """ + # Then the software entry should have name + """ + entries = _software_entries(bundle) + assert len(entries) == 1 # noqa: S101 + assert entries[0].name == name # noqa: S101 + + +def _then_software_entry_has_product_label(bundle, product): + """ + # Then the software entry should have product label + """ + entries = _software_entries(bundle) + assert len(entries) == 1 # noqa: S101 + assert ( + entries[0].x_opencti_product == product + ), ( # noqa: S101 + f"Expected x_opencti_product '{product}', got '{entries[0].x_opencti_product}'" + ) + + +def _then_each_has_relationship_links_software_to_vulnerability(bundle, cve_id): + """ + # Then each "has" relationship should have a software entry as source + # and vulnerability as target + """ + rels = _has_relationships(bundle) + software_ids = {obj.id for obj in _software_entries(bundle)} + vuln_entities = [obj for obj in bundle.objects if obj.type == "vulnerability"] + assert ( + len(vuln_entities) == 1 + ), f"Expected 1 vulnerability, got {len(vuln_entities)}" # noqa: S101 + vuln_id = vuln_entities[0].id + + for rel in rels: + assert ( + rel.source_ref in software_ids + ), f"Relationship source_ref {rel.source_ref} not in software IDs" # noqa: S101 + assert ( + rel.target_ref == vuln_id + ), ( # noqa: S101 + f"Relationship target_ref {rel.target_ref} != vulnerability ID {vuln_id}" + ) + + +# =========================================================================== +# Test functions +# =========================================================================== + + +def test_affected_products_disabled_by_default( + crowdstrike_config_with_affected_products, + fake_vulnerability_data, + author_identity, + tlp_marking, +): + """ + # Scenario: Affected products import is disabled by default + # Given a vulnerability with one affected product + # And the affected products import option is disabled + # When the vulnerability bundle is built + # Then the bundle should not contain any software entries + # And the bundle should not contain any "has" relationships + """ + # Given + mock_env, vulnerability = _given_vulnerability_with_one_affected_product( + crowdstrike_config_with_affected_products, fake_vulnerability_data + ) + + try: + # When — import_affected_products=False (the default) + bundle = _when_vulnerability_bundle_is_built( + vulnerability, author_identity, tlp_marking, import_affected_products=False + ) + + # Then + _then_bundle_should_not_contain_any_software_entries(bundle) + _then_bundle_should_not_contain_any_has_relationships(bundle) + finally: + mock_env.stop() + + +def test_single_affected_product_creates_one_software_and_one_relationship( + crowdstrike_config_with_affected_products, + fake_vulnerability_data, + author_identity, + tlp_marking, +): + """ + # Scenario: Single affected product creates one software entry and one relationship + # Given a vulnerability "CVE-2023-12345" with one affected product + # And the affected products import option is enabled + # When the vulnerability bundle is built + # Then the bundle should contain exactly 1 software entry + # And the bundle should contain exactly 1 "has" relationship + """ + # Given + mock_env, vulnerability = _given_vulnerability_with_one_affected_product( + crowdstrike_config_with_affected_products, fake_vulnerability_data + ) + + try: + # When + bundle = _when_vulnerability_bundle_is_built( + vulnerability, author_identity, tlp_marking, import_affected_products=True + ) + + # Then + _then_bundle_should_contain_exactly_n_software_entries(bundle, 1) + _then_bundle_should_contain_exactly_n_has_relationships(bundle, 1) + finally: + mock_env.stop() + + +def test_multiple_affected_products_create_entries_per_product( + crowdstrike_config_with_affected_products, + fake_vulnerability_data, + author_identity, + tlp_marking, +): + """ + # Scenario: Multiple affected products create one software entry and one relationship per product + # Given a vulnerability "CVE-2023-12345" with 3 affected products + # And the affected products import option is enabled + # When the vulnerability bundle is built + # Then the bundle should contain exactly 3 software entries + # And the bundle should contain exactly 3 "has" relationships + """ + # Given + mock_env, vulnerability = _given_vulnerability_with_n_affected_products( + crowdstrike_config_with_affected_products, fake_vulnerability_data, 3 + ) + + try: + # When + bundle = _when_vulnerability_bundle_is_built( + vulnerability, author_identity, tlp_marking, import_affected_products=True + ) + + # Then + _then_bundle_should_contain_exactly_n_software_entries(bundle, 3) + _then_bundle_should_contain_exactly_n_has_relationships(bundle, 3) + finally: + mock_env.stop() + + +def test_empty_affected_products_produces_no_software_entries( + crowdstrike_config_with_affected_products, + fake_vulnerability_data, + author_identity, + tlp_marking, +): + """ + # Scenario: Empty affected products list produces no software entries + # Given a vulnerability with an empty affected products list + # And the affected products import option is enabled + # When the vulnerability bundle is built + # Then the bundle should not contain any software entries + # And the bundle should not contain any "has" relationships + """ + # Given + mock_env, vulnerability = _given_vulnerability_with_empty_affected_products( + crowdstrike_config_with_affected_products, fake_vulnerability_data + ) + + try: + # When + bundle = _when_vulnerability_bundle_is_built( + vulnerability, author_identity, tlp_marking, import_affected_products=True + ) + + # Then + _then_bundle_should_not_contain_any_software_entries(bundle) + _then_bundle_should_not_contain_any_has_relationships(bundle) + finally: + mock_env.stop() + + +def test_missing_affected_products_key_handled_gracefully( + crowdstrike_config_with_affected_products, + fake_vulnerability_data, + author_identity, + tlp_marking, +): + """ + # Scenario: Missing affected products key is handled gracefully + # Given a vulnerability with no affected products key + # And the affected products import option is enabled + # When the vulnerability bundle is built + # Then the bundle should not contain any software entries + # And the bundle should not contain any "has" relationships + """ + # Given + mock_env, vulnerability = _given_vulnerability_with_no_affected_products_key( + crowdstrike_config_with_affected_products, fake_vulnerability_data + ) + + try: + # When + bundle = _when_vulnerability_bundle_is_built( + vulnerability, author_identity, tlp_marking, import_affected_products=True + ) + + # Then + _then_bundle_should_not_contain_any_software_entries(bundle) + _then_bundle_should_not_contain_any_has_relationships(bundle) + finally: + mock_env.stop() + + +@pytest.mark.parametrize( + "vendor,product", + [ + ("langflow", "langflow"), + ("acme_inc", "widget_pro"), + ], +) +def test_software_entry_fields_mapped_correctly( + crowdstrike_config_with_affected_products, + fake_vulnerability_data, + author_identity, + tlp_marking, + vendor, + product, +): + """ + # Scenario Outline: Software entry fields are mapped correctly from the affected product + # Given a vulnerability with an affected product having vendor "" and product "" + # And the affected products import option is enabled + # When the vulnerability bundle is built + # Then the software entry should have vendor "" + # And the software entry should have name "" + # And the software entry should have product label "" + """ + # Given + mock_env, vulnerability = _given_vulnerability_with_specific_product( + crowdstrike_config_with_affected_products, + fake_vulnerability_data, + vendor, + product, + ) + + try: + # When + bundle = _when_vulnerability_bundle_is_built( + vulnerability, author_identity, tlp_marking, import_affected_products=True + ) + + # Then + _then_software_entry_has_vendor(bundle, vendor) + _then_software_entry_has_name(bundle, product) + _then_software_entry_has_product_label(bundle, product) + finally: + mock_env.stop() + + +def test_each_relationship_links_software_to_parent_vulnerability( + crowdstrike_config_with_affected_products, + fake_vulnerability_data, + author_identity, + tlp_marking, +): + """ + # Scenario: Each relationship links the software to its parent vulnerability + # Given a vulnerability "CVE-2023-12345" with 2 affected products + # And the affected products import option is enabled + # When the vulnerability bundle is built + # Then each "has" relationship should have a software entry as source + # and vulnerability "CVE-2023-12345" as target + """ + # Given + mock_env, vulnerability = _given_vulnerability_with_n_affected_products( + crowdstrike_config_with_affected_products, fake_vulnerability_data, 2 + ) + + try: + # When + bundle = _when_vulnerability_bundle_is_built( + vulnerability, author_identity, tlp_marking, import_affected_products=True + ) + + # Then + _then_each_has_relationship_links_software_to_vulnerability( + bundle, "CVE-2023-12345" + ) + finally: + mock_env.stop() + + +def test_affected_product_with_missing_product_name_is_skipped( + crowdstrike_config_with_affected_products, + fake_vulnerability_data, + author_identity, + tlp_marking, +): + """ + # Scenario: Affected product with missing product name is skipped gracefully + # Given a vulnerability with an affected product that has no product name + # And the affected products import option is enabled + # When the vulnerability bundle is built + # Then the bundle should not contain any software entries + # And the bundle should not contain any "has" relationships + """ + # Given + mock_env, vulnerability = _given_vulnerability_with_missing_product_name( + crowdstrike_config_with_affected_products, fake_vulnerability_data + ) + + try: + # When + bundle = _when_vulnerability_bundle_is_built( + vulnerability, author_identity, tlp_marking, import_affected_products=True + ) + + # Then + _then_bundle_should_not_contain_any_software_entries(bundle) + _then_bundle_should_not_contain_any_has_relationships(bundle) + finally: + mock_env.stop() + + +def test_duplicate_affected_products_are_deduplicated( + crowdstrike_config_with_affected_products, + fake_vulnerability_data, + author_identity, + tlp_marking, +): + """ + # Scenario: Duplicate affected products are deduplicated in the bundle + # Given a vulnerability with 2 identical affected products + # And the affected products import option is enabled + # When the vulnerability bundle is built + # Then the bundle should contain exactly 1 software entry + # And the bundle should contain exactly 1 "has" relationship + """ + # Given + mock_env, vulnerability = _given_vulnerability_with_duplicate_affected_products( + crowdstrike_config_with_affected_products, fake_vulnerability_data + ) + + try: + # When + bundle = _when_vulnerability_bundle_is_built( + vulnerability, author_identity, tlp_marking, import_affected_products=True + ) + + # Then + _then_bundle_should_contain_exactly_n_software_entries(bundle, 1) + _then_bundle_should_contain_exactly_n_has_relationships(bundle, 1) + finally: + mock_env.stop() + + +def test_affected_product_with_empty_product_name_is_skipped( + crowdstrike_config_with_affected_products, + fake_vulnerability_data, + author_identity, + tlp_marking, +): + """ + # Scenario: Affected product with empty product name is skipped + # Given a vulnerability with an affected product having vendor "acme" and product "" + # And the affected products import option is enabled + # When the vulnerability bundle is built + # Then the bundle should not contain any software entries + # And the bundle should not contain any "has" relationships + """ + # Given + mock_env, vulnerability = _given_vulnerability_with_empty_product_name( + crowdstrike_config_with_affected_products, fake_vulnerability_data, "acme", "" + ) + + try: + # When + bundle = _when_vulnerability_bundle_is_built( + vulnerability, author_identity, tlp_marking, import_affected_products=True + ) + + # Then + _then_bundle_should_not_contain_any_software_entries(bundle) + _then_bundle_should_not_contain_any_has_relationships(bundle) + finally: + mock_env.stop() diff --git a/external-import/crtsh/src/requirements.txt b/external-import/crtsh/src/requirements.txt index a70385de4d6..3fbfc4158b0 100644 --- a/external-import/crtsh/src/requirements.txt +++ b/external-import/crtsh/src/requirements.txt @@ -1,2 +1,2 @@ -pycti==7.260309.0 +pycti==7.260515.0 validators \ No newline at end of file diff --git a/external-import/cuckoo/src/requirements.txt b/external-import/cuckoo/src/requirements.txt index b93d0bbaac3..b6884036146 100644 --- a/external-import/cuckoo/src/requirements.txt +++ b/external-import/cuckoo/src/requirements.txt @@ -2,11 +2,11 @@ antlr4-python3-runtime chardet==5.2.0 datefinder==0.7.3 idna==3.11 -pycti==7.260309.0 +pycti==7.260515.0 python-dateutil==2.9.0.post0 pytz==2025.2 regex==2024.11.6 simplejson==3.20.2 six==1.17.0 stix2-patterns==2.0.0 -urllib3==2.6.3 +urllib3==2.7.0 diff --git a/external-import/cve/.build.env b/external-import/cve/.build.env new file mode 100644 index 00000000000..90e99f7106a --- /dev/null +++ b/external-import/cve/.build.env @@ -0,0 +1,2 @@ +CONNECTOR_CMD="-m src" +CONNECTOR_WORKDIR="/opt/connector" diff --git a/external-import/cve/.gitignore b/external-import/cve/.gitignore new file mode 100644 index 00000000000..07549fb3895 --- /dev/null +++ b/external-import/cve/.gitignore @@ -0,0 +1 @@ +uv.lock \ No newline at end of file diff --git a/external-import/cve/README.md b/external-import/cve/README.md index 445c680ab0d..62182f64660 100644 --- a/external-import/cve/README.md +++ b/external-import/cve/README.md @@ -29,7 +29,12 @@ The CVE connector imports Common Vulnerabilities and Exposures (CVE) data from t The National Vulnerability Database (NVD) is the U.S. government repository of standards-based vulnerability management data. This connector retrieves CVE (Common Vulnerabilities and Exposures) data from the NVD API and imports it into OpenCTI as Vulnerability entities. -The connector supports both incremental updates (maintaining data since last run) and historical import (pulling all CVEs from a specified year). +The connector supports both incremental updates (maintaining data since last run) and historical import (pulling all CVEs from a specified year). It can also optionally resolve CPEs (Common Platform Enumerations) associated with each CVE via the [NVD CPE Match API](https://nvd.nist.gov/developers/products) and import them as Software entities linked to Vulnerabilities. + +> [!WARNING] +> **`import_software` option — High data volume risk** +> +> Enabling the `CVE_IMPORT_SOFTWARE` option can lead to the ingestion of a **very significant volume of data** into the platform. Each CVE may resolve to dozens (or even hundreds) of CPE matches, resulting in massive amounts of Software entities and `has` relationships being created. This dramatically increases storage usage, ingestion time, and API calls to the NVD. **Enable this option only if you fully understand the impact and have sized your platform accordingly.** ## Installation @@ -69,6 +74,9 @@ There are a number of configuration options, which are set either in `docker-com | Maintain Data | cve.maintain_data | `CVE_MAINTAIN_DATA` | true | No | Import CVEs from last run to current time (incremental updates). | | Pull History | cve.pull_history | `CVE_PULL_HISTORY` | false | No | Import all CVEs from `history_start_year`. Requires `history_start_year`. | | History Start Year | cve.history_start_year | `CVE_HISTORY_START_YEAR` | 2019 | No | Required if `pull_history=true`. Minimum 2019 (CVSS v3.1 release). | +| Import Software | cve.import_software | `CVE_IMPORT_SOFTWARE` | false | No | If `true`, resolve CPEs for each CVE via the NVD CPE Match API and import them as Software objects with `has` relationships to Vulnerabilities. **⚠️ WARNING: Enabling this option can lead to the ingestion of a VERY SIGNIFICANT volume of data into the platform. Each CVE may resolve to dozens of CPE matches, resulting in massive amounts of Software entities and relationships. Use with caution and ensure your platform is sized accordingly.** | +| CPE Max Concurrency | cve.cpe_max_concurrency | `CVE_CPE_MAX_CONCURRENCY` | 10 | No | Maximum number of concurrent CPE resolution tasks when `import_software=true`. | +| CVE Max Concurrency | cve.cve_max_concurrency | `CVE_CVE_MAX_CONCURRENCY` | 50 | No | Maximum number of concurrent CVE processing workers. This bounds pending tasks and bundle sends during large imports. | ## Deployment @@ -99,6 +107,9 @@ Configure the connector in `docker-compose.yml`: # - CVE_MAINTAIN_DATA=true # - CVE_PULL_HISTORY=false # - CVE_HISTORY_START_YEAR=2019 + # - CVE_IMPORT_SOFTWARE=false # Enable to import Software (CPE) objects + # - CVE_CPE_MAX_CONCURRENCY=10 # Bound concurrent CPE resolution tasks (used when CVE_IMPORT_SOFTWARE=true) + # - CVE_CVE_MAX_CONCURRENCY=50 # Bound concurrent CVE processing workers (overall pipeline concurrency) restart: always ``` @@ -134,7 +145,7 @@ Find the connector and click the refresh button to reset the state and trigger a ## Behavior -The connector fetches CVE data from the NVD API and converts it to STIX Vulnerability objects. +The connector fetches CVE data from the NVD API and converts it to STIX Vulnerability objects. When `import_software` is enabled, it also calls the [NVD CPE Match API](https://nvd.nist.gov/developers/products) to resolve CPEs associated with each CVE and creates STIX Software objects with `has` relationships to the corresponding Vulnerability. ### Data Flow @@ -143,16 +154,22 @@ graph LR subgraph NVD API direction TB CVE[CVE Data] + CPEMatch[CPE Match API] end subgraph OpenCTI direction LR Vulnerability[Vulnerability] + Software[Software] ExternalRef[External Reference] + HasRel["has (Relationship)"] end CVE --> Vulnerability CVE --> ExternalRef + CPEMatch -->|import_software=true| Software + Software --> HasRel + HasRel --> Vulnerability ``` ### Entity Mapping @@ -196,6 +213,23 @@ graph LR | CWE IDs | Labels | Weakness classifications | | References | External References | Links to advisories and patches | +#### Software Entity Mapping (when `import_software=true`) + +When the `import_software` option is enabled, the connector resolves CPEs (Common Platform Enumerations) for each CVE using the [NVD CPE Match API](https://nvd.nist.gov/developers/products) and creates STIX Software objects: + +| CPE Data | OpenCTI Entity/Property | Description | +|----------------------|-------------------------|--------------------------------------------------| +| CPE Name | Software.cpe | Full CPE 2.3 URI (e.g., `cpe:2.3:a:nodejs:node.js:16.0.0:*:*:*:*:*:*:*`) | +| Vendor | Software.vendor | Vendor name extracted from CPE URI | +| Vendor + Product (+ Version) | Software.name | Human-readable software name | +| Version | Software.version | Software version (omitted if wildcard `*`) | + +#### Relationship Mapping (when `import_software=true`) + +| Source Entity | Relationship Type | Target Entity | Description | +|---------------|-------------------|-----------------|--------------------------------------------| +| Software | `has` | Vulnerability | Indicates the software is affected by the vulnerability | + ### Operating Modes 1. **Incremental Updates** (`maintain_data=true`): @@ -208,12 +242,20 @@ graph LR - Useful for initial population - Requires `history_start_year` (minimum 2019) +3. **Software Import** (`import_software=true`): + - Resolves CPEs for each CVE via the NVD CPE Match API + - Creates Software entities with vendor, product, version, and CPE URI + - Links each Software to its Vulnerability with a `has` relationship + - Can be combined with any operating mode (incremental or historical) + - **⚠️ WARNING: Enabling this option can lead to the ingestion of a VERY SIGNIFICANT volume of data into the platform.** Each CVE may resolve to dozens (or even hundreds) of CPE matches, resulting in massive amounts of Software entities and relationships. This also generates one additional NVD API call per CVE, significantly impacting rate limits and ingestion time. **Ensure your platform is sized accordingly before enabling this option.** + ### Processing Details - **CVSS Support**: Connector supports CVSS v2, v3.1, and v4.0 - **Rate Limiting**: NVD API has rate limits; connector handles pagination - **Date Range**: Maximum 120-day range per API query - **API Key Required**: Unauthenticated requests are heavily rate-limited +- **CPE Match API**: When `import_software=true`, an additional API call per CVE is made to the [NVD CPE Match API](https://nvd.nist.gov/developers/products). These requests use the same NVD API key and are throttled by the connector's shared sliding-window `AsyncRateLimiter`, rather than a fixed 6-second sleep between requests. ## Debugging @@ -235,4 +277,4 @@ Log output includes: - **CVSS v3.1**: Minimum start year is 2019 (CVSS v3.1 release date) - **Large Dataset**: NVD contains 200,000+ CVEs; historical import takes significant time - **Polling Interval**: NIST recommends minimum 2-hour intervals -- **Reference**: [NVD API Documentation](https://nvd.nist.gov/developers/vulnerabilities) \ No newline at end of file +- **Reference**: [NVD API Documentation](https://nvd.nist.gov/developers/vulnerabilities) diff --git a/external-import/cve/__metadata__/CONNECTOR_CONFIG_DOC.md b/external-import/cve/__metadata__/CONNECTOR_CONFIG_DOC.md index cdd8cdf6628..27c723aaebf 100644 --- a/external-import/cve/__metadata__/CONNECTOR_CONFIG_DOC.md +++ b/external-import/cve/__metadata__/CONNECTOR_CONFIG_DOC.md @@ -19,3 +19,7 @@ Below is an exhaustive enumeration of all configurable parameters available, eac | CVE_MAINTAIN_DATA | `boolean` | | boolean | `true` | If set to `True`, import CVEs from the last run of the connector to the current time. Takes 2 values: `True` or `False`. | | CVE_PULL_HISTORY | `boolean` | | boolean | `false` | If set to `True`, import all CVEs from start year define in history start year configuration and history start year is required. Takes 2 values: `True` or `False`. | | CVE_HISTORY_START_YEAR | `integer` | | `0 < x ` | `2019` | Year in number. Required when pull_history is set to `True`. Minimum 2019 as CVSS V3.1 was released in June 2019, thus most CVE published before 2019 do not include the cvssMetricV31 object. | +| CVE_IMPORT_SOFTWARE | `boolean` | | boolean | `false` | ⚠️ WARNING: Enabling this option can lead to the ingestion of a VERY SIGNIFICANT volume of data into the platform. Each CVE may resolve to dozens of CPE matches, resulting in massive amounts of Software entities and relationships. Use with caution. If set to `True`, resolve CPEs associated with each CVE via the NVD CPE Match API and import them as Software objects with 'has' relationships to vulnerabilities. | +| CVE_CPE_HISTORY_INTERVAL | `string` | | Format: [`duration`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | `"P120D"` | When import_software is enabled, The interval specifies how far back in time to search for CPEs that were modified within that period. This helps limit the number of CPEs resolved and imported. Maximum interval is 120 days. ⚠️ WARNING: Null value will disable the time filter and may result in importing a very large number of CPEs. Use with caution. | +| CVE_CPE_MAX_CONCURRENCY | `integer` | | `0 < x ` | `10` | Maximum number of concurrent CPE resolution tasks when import_software is enabled. | +| CVE_CVE_MAX_CONCURRENCY | `integer` | | `0 < x ` | `50` | Maximum number of concurrent CVE processing workers (bounds queued tasks and bundle sends). | diff --git a/external-import/cve/__metadata__/connector_config_schema.json b/external-import/cve/__metadata__/connector_config_schema.json index d6cba39f0ac..455bcb8317b 100644 --- a/external-import/cve/__metadata__/connector_config_schema.json +++ b/external-import/cve/__metadata__/connector_config_schema.json @@ -84,6 +84,29 @@ "description": "Year in number. Required when pull_history is set to `True`. Minimum 2019 as CVSS V3.1 was released in June 2019, thus most CVE published before 2019 do not include the cvssMetricV31 object.", "exclusiveMinimum": 0, "type": "integer" + }, + "CVE_IMPORT_SOFTWARE": { + "default": false, + "description": "\u26a0\ufe0f WARNING: Enabling this option can lead to the ingestion of a VERY SIGNIFICANT volume of data into the platform. Each CVE may resolve to dozens of CPE matches, resulting in massive amounts of Software entities and relationships. Use with caution. If set to `True`, resolve CPEs associated with each CVE via the NVD CPE Match API and import them as Software objects with 'has' relationships to vulnerabilities.", + "type": "boolean" + }, + "CVE_CPE_HISTORY_INTERVAL": { + "default": "P120D", + "description": "When import_software is enabled, The interval specifies how far back in time to search for CPEs that were modified within that period. This helps limit the number of CPEs resolved and imported. Maximum interval is 120 days. \u26a0\ufe0f WARNING: Null value will disable the time filter and may result in importing a very large number of CPEs. Use with caution.", + "format": "duration", + "type": "string" + }, + "CVE_CPE_MAX_CONCURRENCY": { + "default": 10, + "description": "Maximum number of concurrent CPE resolution tasks when import_software is enabled.", + "exclusiveMinimum": 0, + "type": "integer" + }, + "CVE_CVE_MAX_CONCURRENCY": { + "default": 50, + "description": "Maximum number of concurrent CVE processing workers (bounds queued tasks and bundle sends).", + "exclusiveMinimum": 0, + "type": "integer" } }, "required": [ diff --git a/external-import/cve/docker-compose.yml b/external-import/cve/docker-compose.yml index 4ab616b82f4..49f348de388 100644 --- a/external-import/cve/docker-compose.yml +++ b/external-import/cve/docker-compose.yml @@ -16,4 +16,8 @@ services: # - CVE_MAINTAIN_DATA=true # Optional, retrieve only updated data # - CVE_PULL_HISTORY=false # Optional, if true CVE_HISTORY_START_YEAR is required # - CVE_HISTORY_START_YEAR=2019 # Required if pull_history is True, min 2019 + # - CVE_IMPORT_SOFTWARE=false # if true, resolve CPEs and import as Software objects (generates large volume of data) + # - CVE_CPE_HISTORY_INTERVAL=P120D # Optional, interval to look back for CPE modifications (ISO 8601 duration format) + # - CVE_CVE_MAX_CONCURRENCY=50 # Maximum number of concurrent CVE processing workers (bounds queued tasks and bundle sends) + # - CVE_CPE_MAX_CONCURRENCY=10 # Maximum number of concurrent CPE resolution tasks restart: always diff --git a/external-import/cve/pyproject.toml b/external-import/cve/pyproject.toml new file mode 100644 index 00000000000..12e2c36823a --- /dev/null +++ b/external-import/cve/pyproject.toml @@ -0,0 +1,9 @@ + +[project] +name = "cve" +version = "0.1.0" +description = "" +requires-python = "~=3.12.0" + +[tool.pytest] +asyncio_mode = "auto" \ No newline at end of file diff --git a/external-import/cve/src/config.yml.sample b/external-import/cve/src/config.yml.sample index 7e4b6181b15..1773a19de18 100644 --- a/external-import/cve/src/config.yml.sample +++ b/external-import/cve/src/config.yml.sample @@ -14,4 +14,7 @@ cve: # maintain_data: True # Optional, retrieve only updated data # pull_history: False # Optional, If True, history_start_year is required # history_start_year: 2019 # Required if pull_history is True, min 2019 (see documentation CVE and CVSS base score V3.1) - +# import_software: False # Optional, if True, resolve CPEs and import as Software objects (generates large volume of data) +# cpe_history_interval: P120D # The interval specifies how far back in time to search for CPEs that were modified within that period. +# cpe_max_concurrency: 10 # max number of concurrent CPE resolution tasks when import_software is True +# cve_max_concurrency: 50 # max number of concurrent CVE processing workers diff --git a/external-import/cve/src/connector/cve_connector.py b/external-import/cve/src/connector/cve_connector.py index 75b8083adf1..422f64fa3a7 100644 --- a/external-import/cve/src/connector/cve_connector.py +++ b/external-import/cve/src/connector/cve_connector.py @@ -1,11 +1,12 @@ +import asyncio import sys import time from datetime import datetime, timedelta, timezone -from pycti import OpenCTIConnectorHelper # type: ignore +from pycti import OpenCTIConnectorHelper from src import ConfigLoader -from src.services import CVEConverter # type: ignore -from src.services.utils import ( # type: ignore +from src.services import CVEConverter +from src.services.utils import ( MAX_AUTHORIZED, convert_hours_to_seconds, ) @@ -16,7 +17,6 @@ def __init__(self): """ Initialize the CVEConnector with necessary configurations """ - # Load configuration file and connection helper # Instantiate the connector helper from config self.config = ConfigLoader() @@ -39,56 +39,51 @@ def run(self) -> None: self.process_data() time.sleep(60) - def _initiate_work(self, timestamp: int) -> str: - """ - Initialize a work - :param timestamp: Timestamp in integer - :return: Work id in string - """ - now = datetime.fromtimestamp(timestamp, tz=timezone.utc) - friendly_name = f"{self.helper.connect_name} run @ " + now.strftime( - "%Y-%m-%d %H:%M:%S" - ) - work_id = self.helper.api.work.initiate_work( - self.helper.connect_id, friendly_name - ) - - info_msg = f"[CONNECTOR] New work '{work_id}' initiated..." - self.helper.connector_logger.info(info_msg) - - return work_id - - def update_connector_state(self, current_time: int, work_id: str) -> None: + def update_connector_state(self, current_time: int) -> None: """ Update the connector state :param current_time: Time in int - :param work_id: Work id in string """ + last_run_dt = datetime.fromtimestamp(current_time, tz=timezone.utc).strftime( + "%Y-%m-%d %H:%M:%S" + ) msg = ( - f"[CONNECTOR] Connector successfully run, storing last_run as " - f"{datetime.fromtimestamp(current_time, tz=timezone.utc).strftime('%Y-%m-%d %H:%M:%S')}" + f"[CONNECTOR] Connector successfully run, storing last_run as {last_run_dt}" ) self.helper.connector_logger.info(msg) - self.helper.api.work.to_processed(work_id, msg) + if self.converter.work_id is not None: + self.helper.api.work.to_processed(self.converter.work_id, msg) self.helper.set_state({"last_run": current_time}) interval_in_hours = round(self.interval / 60 / 60, 2) self.helper.connector_logger.info( - "[CONNECTOR] Last_run stored, next run in: " - + str(interval_in_hours) - + " hours" + f"[CONNECTOR] Last_run stored, next run in: {interval_in_hours} hours" ) - def _import_recent(self, now: datetime, work_id: str) -> None: + async def _async_ingest(self, cve_params: dict) -> None: + """Run the streaming async ingestion pipeline. + + CVE bundles are sent as pages arrive from the NVD API. + CPE resolution starts immediately and runs concurrently + with further CVE fetching (bounded by cpe_max_concurrency). + """ + # Reset rate limiter state to avoid stale asyncio.Lock across runs + self.converter._rate_limiter.reset() + try: + self.helper.connector_logger.info( + "[CONNECTOR] Starting CVE+CPE streaming pipeline" + ) + await self.converter.ingest(cve_params) + finally: + await self.converter.close() + + def _import_recent(self, now: datetime) -> None: """ Import the most recent CVEs depending on date range chosen :param now: Current date in datetime - :param work_id: Work id in string """ if self.config.cve.max_date_range > MAX_AUTHORIZED: - error_msg = "The max_date_range cannot exceed {} days".format( - MAX_AUTHORIZED - ) + error_msg = f"The max_date_range cannot exceed {MAX_AUTHORIZED} days" raise Exception(error_msg) date_range = timedelta(days=self.config.cve.max_date_range) @@ -96,23 +91,20 @@ def _import_recent(self, now: datetime, work_id: str) -> None: cve_params = self._update_cve_params(start_date, now) - self.converter.send_bundle(cve_params, work_id) + asyncio.run(self._async_ingest(cve_params)) - def _import_history( - self, start_date: datetime, end_date: datetime, work_id: str - ) -> None: + def _import_history(self, start_date: datetime, end_date: datetime) -> None: """ Import CVEs history if pull_history config is True :param start_date: Start date in datetime :param end_date: End date in datetime - :param work_id: Work id in string """ years = range(start_date.year, end_date.year + 1) start, end = start_date, end_date + timedelta(1) for year in years: - year_start = datetime(year, 1, 1, 0, 0) - year_end = datetime(year + 1, 1, 1, 0, 0) + year_start = datetime(year, 1, 1, 0, 0, tzinfo=timezone.utc) + year_end = datetime(year + 1, 1, 1, 0, 0, tzinfo=timezone.utc) date_range = min(end, year_end) - max(start, year_start) days_in_year = date_range.days @@ -142,12 +134,11 @@ def _import_history( end_date_current_year = start_date_current_year + timedelta( days=days_in_year ) - # Update date range cve_params = self._update_cve_params( start_date_current_year, end_date_current_year ) - self.converter.send_bundle(cve_params, work_id) + asyncio.run(self._async_ingest(cve_params)) days_in_year = 0 """ @@ -155,34 +146,31 @@ def _import_history( 1 year % 120 days => 5 or 6 (depends if it is a leap year or not) """ if days_in_year > 6: - # Update date range cve_params = self._update_cve_params( start_date_current_year, end_date_current_year ) - self.converter.send_bundle(cve_params, work_id) + asyncio.run(self._async_ingest(cve_params)) start_date_current_year += timedelta(days=MAX_AUTHORIZED) days_in_year -= MAX_AUTHORIZED else: end_date_current_year = start_date_current_year + timedelta( days=days_in_year ) - # Update date range cve_params = self._update_cve_params( start_date_current_year, end_date_current_year ) - self.converter.send_bundle(cve_params, work_id) + asyncio.run(self._async_ingest(cve_params)) days_in_year = 0 info_msg = f"[CONNECTOR] Importing CVE history for year {year} finished" self.helper.connector_logger.info(info_msg) - def _maintain_data(self, now: datetime, last_run: float, work_id: str) -> None: + def _maintain_data(self, now: datetime, last_run: float) -> None: """ Maintain data updated if maintain_data config is True :param now: Current date in datetime :param last_run: Last run date in float - :param work_id: Work id in str """ self.helper.connector_logger.info( "[CONNECTOR] Getting the last CVEs since the last run..." @@ -190,9 +178,8 @@ def _maintain_data(self, now: datetime, last_run: float, work_id: str) -> None: last_run_ts = datetime.fromtimestamp(last_run, tz=timezone.utc) - # Update date range cve_params = self._update_cve_params(last_run_ts, now) - self.converter.send_bundle(cve_params, work_id) + asyncio.run(self._async_ingest(cve_params)) @staticmethod def _update_cve_params(start_date: datetime, end_date: datetime) -> dict: @@ -212,16 +199,17 @@ def process_data(self) -> None: """ Get the current state and check if connector already runs """ - now = datetime.now() + now = datetime.now(tz=timezone.utc) current_time = int(datetime.timestamp(now)) current_state = self.helper.get_state() if current_state is not None and "last_run" in current_state: last_run = current_state["last_run"] - msg = "[CONNECTOR] Connector last run: " + datetime.fromtimestamp( + last_run_dt = datetime.fromtimestamp( last_run, tz=timezone.utc ).strftime("%Y-%m-%d %H:%M:%S") + msg = f"[CONNECTOR] Connector last run: {last_run_dt}" self.helper.connector_logger.info(msg) else: last_run = None @@ -241,21 +229,21 @@ def process_data(self) -> None: ================================================================ """ if last_run is None: - # Initiate work_id to track the job - work_id = self._initiate_work(current_time) """ ================================================================= If the connector never runs and user wants to pull CVE history ================================================================= """ if self.config.cve.pull_history: - start_date = datetime(self.config.cve.history_start_year, 1, 1) + start_date = datetime( + self.config.cve.history_start_year, 1, 1, tzinfo=timezone.utc + ) end_date = now - self._import_history(start_date, end_date, work_id) + self._import_history(start_date, end_date) else: - self._import_recent(now, work_id) + self._import_recent(now) - self.update_connector_state(current_time, work_id) + self.update_connector_state(current_time) """ =================================================================== @@ -268,18 +256,15 @@ def process_data(self) -> None: and self.config.cve.maintain_data and (current_time - last_run) >= int(self.interval) ): - # Initiate work_id to track the job - work_id = self._initiate_work(current_time) - self._maintain_data(now, last_run, work_id) - self.update_connector_state(current_time, work_id) + self._maintain_data(now, last_run) + self.update_connector_state(current_time) else: new_interval = self.interval - (current_time - last_run) new_interval_in_hours = round(new_interval / 60 / 60, 2) self.helper.connector_logger.info( - "[CONNECTOR] Connector will not run, next run in: " - + str(new_interval_in_hours) - + " hours" + f"[CONNECTOR] Connector will not run, next run in: " + f"{new_interval_in_hours} hours" ) time.sleep(5) @@ -289,5 +274,5 @@ def process_data(self) -> None: self.helper.connector_logger.info(msg) sys.exit(0) except Exception as e: - error_msg = f"[CONNECTOR] Error while processing data: {str(e)}" + error_msg = f"[CONNECTOR] Error while processing data: {e}" self.helper.connector_logger.error(error_msg, meta={"error": str(e)}) diff --git a/external-import/cve/src/models/configs/cve_configs.py b/external-import/cve/src/models/configs/cve_configs.py index 4086fa40758..d8808c02c87 100644 --- a/external-import/cve/src/models/configs/cve_configs.py +++ b/external-import/cve/src/models/configs/cve_configs.py @@ -1,7 +1,10 @@ +from datetime import timedelta + from pydantic import ( Field, PositiveInt, SecretStr, + field_validator, ) from src.models.configs import ConfigBaseSettings @@ -37,3 +40,40 @@ class _ConfigLoaderCVE(ConfigBaseSettings): default=2019, description="Year in number. Required when pull_history is set to `True`. Minimum 2019 as CVSS V3.1 was released in June 2019, thus most CVE published before 2019 do not include the cvssMetricV31 object.", ) + import_software: bool = Field( + default=False, + description="⚠️ WARNING: Enabling this option can lead to the ingestion " + "of a VERY SIGNIFICANT volume of data into the platform. Each CVE may resolve " + "to dozens of CPE matches, resulting in massive amounts of Software entities " + "and relationships. Use with caution. If set to `True`, resolve CPEs " + "associated with each CVE via the NVD CPE Match API and import them " + "as Software objects with 'has' relationships to vulnerabilities.", + ) + cpe_history_interval: timedelta | None = Field( + default=timedelta(days=120), + description="When import_software is enabled, The interval specifies how far " + "back in time to search for CPEs that were modified within that period. " + "This helps limit the number of CPEs resolved and imported. " + "Maximum interval is 120 days. " + "⚠️ WARNING: Null value will disable the time filter and may result in " + "importing a very large number of CPEs. Use with caution.", + ) + cpe_max_concurrency: PositiveInt = Field( + default=10, + description="Maximum number of concurrent CPE resolution tasks when import_software is enabled.", + ) + + cve_max_concurrency: PositiveInt = Field( + default=50, + description="Maximum number of concurrent CVE processing workers (bounds queued tasks and bundle sends).", + ) + + @field_validator("cpe_history_interval") + @classmethod + def validate_cpe_history_interval(cls, value: timedelta | None) -> timedelta | None: + if value is None: + return value + max_interval = timedelta(days=120) + if value > max_interval: + raise ValueError(f"cpe_history_interval cannot exceed {max_interval}.") + return value diff --git a/external-import/cve/src/requirements.txt b/external-import/cve/src/requirements.txt index edcce6112b4..22257db3f05 100644 --- a/external-import/cve/src/requirements.txt +++ b/external-import/cve/src/requirements.txt @@ -1,5 +1,6 @@ -pycti==7.260309.0 -urllib3==2.6.3 +pycti==7.260515.0 +urllib3==2.7.0 pydantic>=2.10, <3 pydantic-settings==2.10.1 +aiohttp>=3.9, <4 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk diff --git a/external-import/cve/src/services/client/__init__.py b/external-import/cve/src/services/client/__init__.py index 885a610c489..889e80157c3 100644 --- a/external-import/cve/src/services/client/__init__.py +++ b/external-import/cve/src/services/client/__init__.py @@ -1,4 +1,5 @@ from src.services.client.api import CVEClient +from src.services.client.cpe_match import CPEMatchClient from src.services.client.vulnerability import CVEVulnerability -__all__ = ["CVEClient", "CVEVulnerability"] +__all__ = ["CVEClient", "CPEMatchClient", "CVEVulnerability"] diff --git a/external-import/cve/src/services/client/api.py b/external-import/cve/src/services/client/api.py index 6e5e8028843..68a29631cb9 100644 --- a/external-import/cve/src/services/client/api.py +++ b/external-import/cve/src/services/client/api.py @@ -1,91 +1,178 @@ -import time +import asyncio +import json +import random -import requests -from requests.adapters import HTTPAdapter -from src.services.client.endpoints import BASE_URL -from urllib3.util import Retry +import aiohttp +from src.services.utils.rate_limiter import AsyncRateLimiter class CVEClient: - """ - Working with CVE API - """ - - def __init__(self, api_key, helper, header): - """ - Initialize CVE API with necessary configurations - :param api_key: API key in string - :param helper: OCTI helper - :param header: - """ - headers = {"apiKey": api_key, "User-Agent": header} + """Async HTTP client for the NVD API (CVE & CPE Match).""" + + def __init__( + self, + api_key: str, + helper, + header: str, + rate_limiter: AsyncRateLimiter, + ): self.token = api_key self.helper = helper - self.session = requests.Session() - self.session.headers.update(headers) + self._rate_limiter = rate_limiter + self._headers = {"apiKey": api_key, "User-Agent": header} + self._session: aiohttp.ClientSession | None = None + + async def _get_session(self) -> aiohttp.ClientSession: + if self._session is None or self._session.closed: + # Use explicit read/connect phases and a larger budget than sync mode + # to reduce false positives on slow NVD responses. + timeout = aiohttp.ClientTimeout( + total=180, + connect=30, + sock_connect=30, + sock_read=120, + ) + self._session = aiohttp.ClientSession( + headers=self._headers, + timeout=timeout, + ) + return self._session + + async def close(self) -> None: + if self._session and not self._session.closed: + await self._session.close() + + async def _reset_session(self) -> None: + """Drop current session so next retry gets a fresh TCP connection.""" + if self._session and not self._session.closed: + await self._session.close() + self._session = None + + @staticmethod + def _compute_retry_wait(attempt: int, backoff_factor: int) -> float: + # Exponential backoff + jitter to avoid synchronized retry bursts. + base_wait = backoff_factor * (2**attempt) + return base_wait + random.uniform(0.0, 1.0) @staticmethod - def _request_data(self, api_url: str, params=None): - """ - Internal method to handle API requests - :return: Response in JSON format - """ + async def _extract_error_message(response: aiohttp.ClientResponse) -> str | None: + """Extract a meaningful API error message from JSON or text body.""" try: - response = self.request(api_url, params) + body = await response.json(content_type=None) + if isinstance(body, dict): + for key in ("message", "error", "detail", "reason"): + value = body.get(key) + if isinstance(value, str) and value.strip(): + return value.strip() + elif isinstance(body, str) and body.strip(): + return body.strip() + except ( + aiohttp.ContentTypeError, + json.JSONDecodeError, + TypeError, + ValueError, + ): + pass - info_msg = f"[API] HTTP Get Request to endpoint for path ({api_url})" - self.helper.connector_logger.info(info_msg) + try: + body_text = await response.text() + if body_text.strip(): + return body_text.strip() + except UnicodeDecodeError: + return None - response.raise_for_status() - return response + return None - except requests.RequestException as err: - error_msg = f"[API] Error while fetching data from {api_url}: {str(err)}" - self.helper.connector_logger.error(error_msg, meta={"error": str(err)}) - return None + async def request(self, api_url: str, params: dict | None = None): + """Make a rate-limited GET request with retry logic.""" + max_retries = 4 + backoff_factor = 6 + retryable_statuses = {429, 500, 502, 503, 504} + + for attempt in range(max_retries + 1): + await self._rate_limiter.acquire() + session = await self._get_session() + + try: + async with session.get(api_url, params=params) as response: + if response.status == 200: + return await response.json() + + if response.status in {401, 403}: + message = await self._extract_error_message(response) + base_message = ( + "[API] Invalid API Key provided. " + "Please check your configuration." + ) + if message: + raise Exception( + f"{base_message} NVD API response: {message}" + ) + raise Exception(base_message) + + if response.status == 404: + message = await self._extract_error_message(response) + if message: + raise Exception(f"[API] Error: {message}") + raise Exception( + f"[API] Request to {api_url} failed with status 404" + ) + + if response.status in retryable_statuses and attempt < max_retries: + retry_after = response.headers.get("Retry-After") + wait = self._compute_retry_wait(attempt, backoff_factor) + if retry_after: + try: + wait = max(wait, float(retry_after)) + except ValueError: + pass + self.helper.connector_logger.warning( + f"[API] Retryable status {response.status}, " + f"waiting {wait:.2f}s (attempt {attempt + 1}/{max_retries})" + ) + await self._reset_session() + await asyncio.sleep(wait) + continue + + message = await self._extract_error_message(response) + if message: + raise Exception( + f"[API] Request to {api_url} failed with status " + f"{response.status}: {message}" + ) + + raise Exception( + f"[API] Request to {api_url} failed with status " + f"{response.status}" + ) + except (aiohttp.ClientError, TimeoutError) as err: + # TimeoutError (asyncio.TimeoutError) is not a subclass of + # aiohttp.ClientError, so it must be caught separately. + if attempt < max_retries: + wait = self._compute_retry_wait(attempt, backoff_factor) + self.helper.connector_logger.warning( + f"[API] Transient error, waiting {wait}s " + f"(attempt {attempt + 1}/{max_retries}); " + f"{type(err).__name__}: {repr(err)}" + ) + await self._reset_session() + await asyncio.sleep(wait) + continue + raise - def request(self, api_url, params): - # Define the retry strategy - retry_strategy = Retry( - total=4, # Maximum number of retries - backoff_factor=6, # Exponential backoff factor (e.g., 2 means 1, 2, 4, 8 seconds, ...) - status_forcelist=[429, 500, 502, 503, 504], # HTTP status codes to retry on - ) - # Create an HTTP adapter with the retry strategy and mount it to session - adapter = HTTPAdapter(max_retries=retry_strategy) - - self.session.mount("http://", adapter) - self.session.mount("https://", adapter) - - response = self.session.get(api_url, params=params) - - if response.status_code == 200: - # It is recommended that users "sleep" their scripts for six seconds between requests (NIST) - time.sleep(6) - return response - elif response.status_code == 404: - error_data = response.headers - if error_data.get("message") == "Invalid apiKey.": - raise Exception( - "[API] Invalid API Key provided. Please check your configuration." - ) - else: - raise Exception(f"[API] Error: {error_data.get('message')}") raise Exception( "[API] Attempting to retrieve data failed. Wait for connector to re-run..." ) - def get_complete_collection(self, cve_params=None): - """ - If params is None, retrieve all CVEs in National Vulnerability Database - :param cve_params: Params to filter what list to return - :return: A list of dicts of the complete collection of CVE from NVD - """ + async def get_complete_collection(self, api_url: str, params: dict | None = None): + """Fetch a JSON collection from the given NVD API endpoint.""" try: - response = self._request_data(self, BASE_URL, params=cve_params) + info_msg = f"[API] HTTP Get Request to endpoint for path ({api_url})" + self.helper.connector_logger.debug(info_msg) - cve_collection = response.json() - return cve_collection + data = await self.request(api_url, params) + return data except Exception as err: - self.helper.connector_logger.error(err, meta={"error": str(err)}) + self.helper.connector_logger.error(str(err), meta={"error": str(err)}) + return None diff --git a/external-import/cve/src/services/client/cpe_match.py b/external-import/cve/src/services/client/cpe_match.py new file mode 100644 index 00000000000..c9ffc139608 --- /dev/null +++ b/external-import/cve/src/services/client/cpe_match.py @@ -0,0 +1,116 @@ +from src.services.client.api import CVEClient + +CPE_MATCH_BASE_URL = "https://services.nvd.nist.gov/rest/json/cpematch/2.0" + + +class CPEMatchClient(CVEClient): + """Async client for the NVD CPE Match API. + + Resolves CPE names associated with a given CVE ID. + API documentation: https://nvd.nist.gov/developers/products + """ + + async def get_cpes_for_cve( + self, cve_id: str, request_params: dict | None = None + ) -> list[str]: + """Retrieve all unique CPE names associated with a CVE. + + Calls the NVD CPE Match API with the given CVE ID, handles pagination, + and returns a deduplicated list of CPE Name strings. + + Args: + cve_id: The CVE identifier (e.g. "CVE-2022-32223"). + + Returns: + A deduplicated list of CPE Name strings (format cpe:2.3:...). + """ + cpe_names: set[str] = set() + params: dict = {"cveId": cve_id, **(request_params or {})} + + debug_msg = f"[CPE MATCH API] Fetching CPE matches for {cve_id}" + self.helper.connector_logger.debug(debug_msg) + + try: + data = await self.get_complete_collection(CPE_MATCH_BASE_URL, params) + if data is None: + warn_msg = ( + f"[CPE MATCH API] No response for {cve_id}, " + f"skipping CPE resolution." + ) + self.helper.connector_logger.warning(warn_msg) + return [] + + self._extract_cpe_names(data, cpe_names) + + # Handle pagination + total_results = data.get("totalResults", 0) + results_per_page = data.get("resultsPerPage", 0) + + if not isinstance(results_per_page, int) or results_per_page <= 0: + if total_results: + self.helper.connector_logger.warning( + f"[CPE MATCH API] Unexpected resultsPerPage={results_per_page} " + f"for {cve_id}; stopping pagination to avoid infinite loop." + ) + return list(cpe_names) + + start_index = results_per_page + + while start_index < total_results: + paginated_params = { + **params, + "startIndex": start_index, + "resultsPerPage": results_per_page, + } + page_data = await self.get_complete_collection( + CPE_MATCH_BASE_URL, paginated_params + ) + if page_data is None: + break + self._extract_cpe_names(page_data, cpe_names) + results_per_page = page_data.get("resultsPerPage", 0) + if not isinstance(results_per_page, int) or results_per_page <= 0: + self.helper.connector_logger.warning( + f"[CPE MATCH API] Unexpected page resultsPerPage={results_per_page} " + f"for {cve_id}; stopping pagination to avoid infinite loop." + ) + break + start_index += results_per_page + + debug_msg = ( + f"[CPE MATCH API] Found {len(cpe_names)} unique CPEs for {cve_id}" + ) + self.helper.connector_logger.debug(debug_msg) + + except Exception as err: + warn_msg = ( + f"[CPE MATCH API] Error fetching CPEs for {cve_id}: {str(err)}. " + f"Continuing without CPE data." + ) + self.helper.connector_logger.warning(warn_msg) + return [] + + return list(cpe_names) + + @staticmethod + def _extract_cpe_names(data: dict, cpe_names: set[str]) -> None: + """Extract CPE names from a CPE Match API response. + + The response contains a list of matchStrings, each containing a match + criteria pattern and a list of concrete CPE matches with cpeName fields. + We only extract the concrete cpeName values from matches, not the + criteria pattern itself (which may contain wildcards or version ranges). + + Args: + data: The JSON response from the CPE Match API. + cpe_names: A set to collect unique CPE name strings into. + """ + + def add_cpe_name(candidate: object) -> None: + if isinstance(candidate, str) and candidate.strip(): + cpe_names.add(candidate) + + for match_string in data.get("matchStrings", []): + match_criteria = match_string.get("matchString", {}) + for match in match_criteria.get("matches", []): + add_cpe_name(match.get("cpeName")) diff --git a/external-import/cve/src/services/client/endpoints.py b/external-import/cve/src/services/client/endpoints.py deleted file mode 100644 index f5cae80e8ec..00000000000 --- a/external-import/cve/src/services/client/endpoints.py +++ /dev/null @@ -1,11 +0,0 @@ -""" -API URL VARIABLES -""" - -from src import ConfigLoader - -# Base -config = ConfigLoader() # To fix -API_URL = config.cve.base_url -API_VERSION = "/2.0" -BASE_URL = API_URL + API_VERSION diff --git a/external-import/cve/src/services/client/vulnerability.py b/external-import/cve/src/services/client/vulnerability.py index e1b5a79b7b3..1e59f8aa80d 100644 --- a/external-import/cve/src/services/client/vulnerability.py +++ b/external-import/cve/src/services/client/vulnerability.py @@ -1,50 +1,66 @@ -from typing import Generator +from typing import AsyncGenerator from src.services.client.api import CVEClient +API_VERSION = "/2.0" + class CVEVulnerability(CVEClient): - def get_vulnerabilities(self, cve_params=None) -> Generator[list, None, None]: + def __init__(self, *args, base_url: str, **kwargs): + super().__init__(*args, **kwargs) + self._base_url = base_url + API_VERSION + + async def get_vulnerabilities( + self, cve_params: dict | None = None + ) -> AsyncGenerator[list, None]: """ - Get and filter CVE with scoring system V3 - :param cve_params: Dict of params - :return: A generator for lists of dicts of CVE + Async generator that yields pages of filtered CVE vulnerabilities. + :param cve_params: Dict of query params for the NVD CVE API + :yields: Lists of vulnerability dicts (filtered by supported CVSS) """ - cve_collection = self.get_complete_collection(cve_params) + cve_collection = await self.get_complete_collection(self._base_url, cve_params) if cve_collection is None: raise Exception( - "Attempting to retrieve data failed. " "Wait for connector to re-run..." + "Attempting to retrieve data failed. Wait for connector to re-run..." ) page_size = cve_collection["resultsPerPage"] - cve_vulnerabilities_total = cve_collection["vulnerabilities"] total_items = cve_collection["totalResults"] filtered_vulnerabilities = self._filter_cvss(cve_collection["vulnerabilities"]) if page_size == 0: - msg = "[API] No Vulnerabilities to retrieve..." - self.helper.connector_logger.info(msg) + self.helper.connector_logger.info("[API] No Vulnerabilities to retrieve...") yield filtered_vulnerabilities elif page_size >= total_items: msg = f"[API] Received all {page_size} items. Pagination not required." self.helper.connector_logger.info(msg) yield filtered_vulnerabilities else: - msg = f"[API] Received first {page_size} items of {total_items} total items, start pagination..." + msg = ( + f"[API] Received first {page_size} items of {total_items} " + f"total items, start pagination..." + ) self.helper.connector_logger.info(msg) + # Yield the first page + yield filtered_vulnerabilities + start_index = page_size while start_index < total_items: - cve_params.update( - {"startIndex": start_index, "resultsPerPage": page_size} + paginated_params = { + **(cve_params or {}), + "startIndex": start_index, + "resultsPerPage": page_size, + } + + cve_collection = await self.get_complete_collection( + self._base_url, paginated_params ) - cve_collection = self.get_complete_collection(cve_params) - if cve_collection is None: raise Exception( "Attempting to retrieve data failed. " @@ -55,33 +71,35 @@ def get_vulnerabilities(self, cve_params=None) -> Generator[list, None, None]: total_items = cve_collection["totalResults"] start_index += page_size - msg = f"[API] Received next {page_size} items, currently received {start_index} items of {total_items} total items." - self.helper.connector_logger.info(msg) + msg = ( + f"[API] Received next {page_size} items, currently received " + f"{start_index} items of {total_items} total items." + ) + self.helper.connector_logger.debug(msg) filtered_vulnerabilities = self._filter_cvss( cve_collection["vulnerabilities"] ) yield filtered_vulnerabilities - info_msg = ( - f"[API] All CVEs are retrieved. " - f"Got {len(cve_vulnerabilities_total)} vulnerabilities in total" + self.helper.connector_logger.info( + f"[API] All CVEs are retrieved. Got {total_items} vulnerabilities in total" ) - self.helper.connector_logger.info(info_msg) - def _filter_cvss(self, cve_vulnerabilities) -> list: + def _filter_cvss(self, cve_vulnerabilities: list) -> list: cve_vulnerabilities_filtered = [] + supported_cvss_keys = {"cvssMetricV31", "cvssMetricV40", "cvssMetricV2"} for cve_vulnerability in cve_vulnerabilities: metric_exist = cve_vulnerability["cve"]["metrics"] if metric_exist: - for key, value in metric_exist.items(): - # Filter on CVSS 2, 3.1, and 4.0. Don't include 3.0 - if ( - key == "cvssMetricV31" - or key == "cvssMetricV40" - or key == "cvssMetricV2" - ): - cve_vulnerabilities_filtered.append(cve_vulnerability) + # Check if at least one supported CVSS metric exists. + # A CVE can have multiple CVSS types (V2 + V3.1 + V4.0), + # but should only be added once. + has_supported_cvss = any( + key in supported_cvss_keys for key in metric_exist + ) + if has_supported_cvss: + cve_vulnerabilities_filtered.append(cve_vulnerability) info_msg = ( f"[API] Filter for only CVSS 2, 3.1, or 4.0 CVEs. " diff --git a/external-import/cve/src/services/converter/const.py b/external-import/cve/src/services/converter/const.py new file mode 100644 index 00000000000..dd0f97162a4 --- /dev/null +++ b/external-import/cve/src/services/converter/const.py @@ -0,0 +1,38 @@ +CVSS31_MAPPING = { + "x_opencti_base_score": "baseScore", + "x_opencti_base_severity": "baseSeverity", + "x_opencti_attack_vector": "attackVector", + "x_opencti_cvss_attack_complexity": "attackComplexity", + "x_opencti_cvss_privileges_required": "privilegesRequired", + "x_opencti_cvss_user_interaction": "userInteraction", + "x_opencti_cvss_scope": "scope", + "x_opencti_confidentiality_impact": "confidentialityImpact", + "x_opencti_integrity_impact": "integrityImpact", + "x_opencti_availability_impact": "availabilityImpact", +} + +CVSS2_MAPPING = { + "x_opencti_cvss_v2_base_score": "baseScore", + "x_opencti_cvss_v2_access_vector": "accessVector", + "x_opencti_cvss_v2_access_complexity": "accessComplexity", + "x_opencti_cvss_v2_authentication": "authentication", + "x_opencti_cvss_v2_confidentiality_impact": "confidentialityImpact", + "x_opencti_cvss_v2_integrity_impact": "integrityImpact", + "x_opencti_cvss_v2_availability_impact": "availabilityImpact", +} + +CVSS40_MAPPING = { + "x_opencti_cvss_v4_base_score": "baseScore", + "x_opencti_cvss_v4_base_severity": "baseSeverity", + "x_opencti_cvss_v4_attack_vector": "attackVector", + "x_opencti_cvss_v4_attack_complexity": "attackComplexity", + "x_opencti_cvss_v4_attack_requirements": "attackRequirements", + "x_opencti_cvss_v4_privileges_required": "privilegesRequired", + "x_opencti_cvss_v4_user_interaction": "userInteraction", + "x_opencti_cvss_v4_confidentiality_impact_v": "vulnConfidentialityImpact", + "x_opencti_cvss_v4_confidentiality_impact_s": "subConfidentialityImpact", + "x_opencti_cvss_v4_integrity_impact_v": "vulnIntegrityImpact", + "x_opencti_cvss_v4_integrity_impact_s": "subIntegrityImpact", + "x_opencti_cvss_v4_availability_impact_v": "vulnAvailabilityImpact", + "x_opencti_cvss_v4_availability_impact_s": "subAvailabilityImpact", +} diff --git a/external-import/cve/src/services/converter/vulnerability_to_stix2.py b/external-import/cve/src/services/converter/vulnerability_to_stix2.py index 0695b56bf76..d345f2eee0b 100644 --- a/external-import/cve/src/services/converter/vulnerability_to_stix2.py +++ b/external-import/cve/src/services/converter/vulnerability_to_stix2.py @@ -1,79 +1,177 @@ -import datetime -from typing import Generator +import asyncio +from datetime import datetime, timezone import stix2 -from pycti import ( # type: ignore +from pycti import ( Identity, OpenCTIConnectorHelper, StixCoreRelationship, Vulnerability, ) from src import ConfigLoader -from src.services.client import CVEVulnerability # type: ignore -from src.services.utils import APP_VERSION # type: ignore +from src.services.client import CPEMatchClient, CVEVulnerability +from src.services.converter.const import CVSS2_MAPPING, CVSS31_MAPPING, CVSS40_MAPPING +from src.services.utils import ( + APP_VERSION, + AsyncRateLimiter, + parse_cpe_uri, +) class CVEConverter: def __init__(self, helper: OpenCTIConnectorHelper, config: ConfigLoader): - self.config = config self.helper = helper + self.import_software = config.cve.import_software + self.cpe_max_concurrency = config.cve.cpe_max_concurrency + self.cpe_history_interval = config.cve.cpe_history_interval + self.cve_max_concurrency = config.cve.cve_max_concurrency + + self.work_id = None + + api_key = config.cve.api_key.get_secret_value() + self._rate_limiter = AsyncRateLimiter() + self.client_api = CVEVulnerability( - api_key=self.config.cve.api_key.get_secret_value(), + api_key=api_key, + helper=self.helper, + header=f"OpenCTI-cve/{APP_VERSION}", + rate_limiter=self._rate_limiter, + base_url=config.cve.base_url, + ) + self.cpe_match_client = CPEMatchClient( + api_key=api_key, helper=self.helper, header=f"OpenCTI-cve/{APP_VERSION}", + rate_limiter=self._rate_limiter, ) self.author = self._create_author() - def send_bundle(self, cve_params: dict, work_id: str) -> None: + def _initiate_work(self, timestamp: int) -> None: """ - Send bundle to API - :param cve_params: Dict of params - :param work_id: work id in string - :return: + Initialize a work + :param timestamp: Timestamp in integer """ - vulnerability_object_generator = self.vulnerabilities_to_stix2(cve_params) - for vulnerabilities_objects in vulnerability_object_generator: - if len(vulnerabilities_objects) != 0: - vulnerabilities_objects.append(self.author) - vulnerabilities_bundle = self._to_stix_bundle(vulnerabilities_objects) - vulnerabilities_to_json = self._to_json_bundle(vulnerabilities_bundle) - - # Retrieve the author object for the info message - info_msg = ( - f"[CONVERTER] Sending bundle to server with {len(vulnerabilities_bundle)} objects, " - f"concerning {len(vulnerabilities_objects) - 1} vulnerabilities" - ) - self.helper.connector_logger.info(info_msg) + now = datetime.fromtimestamp(timestamp, tz=timezone.utc) + friendly_name = ( + f"{self.helper.connect_name} run @ {now.strftime('%Y-%m-%d %H:%M:%S')}" + ) + self.work_id = self.helper.api.work.initiate_work( + self.helper.connect_id, friendly_name + ) - self.helper.send_stix2_bundle( - vulnerabilities_to_json, - work_id=work_id, - ) + info_msg = f"[CONNECTOR] New work '{self.work_id}' initiated..." + self.helper.connector_logger.info(info_msg) + + # ------------------------------------------------------------------ + # Streaming pipeline: one self-contained bundle per CVE + # ------------------------------------------------------------------ + + async def ingest(self, cve_params: dict) -> None: + """Streaming ingestion pipeline. + + For each page of CVEs returned by the NVD API, vulnerabilities are pushed + into a bounded queue consumed by a fixed-size worker pool. Each worker: + 1. Converts the CVE to a STIX Vulnerability. + 2. Resolves associated CPEs (if import_software is enabled). + 3. Sends a single self-contained bundle with the Vulnerability, + its Software objects, and their Relationships. - def vulnerabilities_to_stix2(self, cve_params: dict) -> Generator[list, None, None]: + This ensures every bundle is consistent while bounding memory usage and + overall in-flight processing. """ - Retrieve all CVEs from NVD to convert into STIX2 format - :param cve_params: Dict of params - :return: Generator of lists of data converted into STIX2 + cpe_semaphore = asyncio.Semaphore(self.cpe_max_concurrency) + vulnerability_queue: asyncio.Queue[dict | None] = asyncio.Queue( + maxsize=self.cve_max_concurrency * 2 + ) + total_sent = 0 + + async def worker() -> None: + while True: + vulnerability = await vulnerability_queue.get() + try: + if vulnerability is None: + return + await self._process_and_send_cve(cpe_semaphore, vulnerability) + finally: + vulnerability_queue.task_done() + + async with asyncio.TaskGroup() as tg: + for _ in range(self.cve_max_concurrency): + tg.create_task(worker()) + + async for vulnerabilities in self.client_api.get_vulnerabilities( + cve_params + ): + for vulnerability in vulnerabilities: + await vulnerability_queue.put(vulnerability) + total_sent += 1 + + for _ in range(self.cve_max_concurrency): + # Stopping workers by sending None as value + await vulnerability_queue.put(None) + await vulnerability_queue.join() + + if total_sent: + self.helper.connector_logger.info( + f"[CONVERTER] Ingestion complete — " + f"processed {total_sent} vulnerabilities" + ) + + async def _process_and_send_cve( + self, + semaphore: asyncio.Semaphore, + vulnerability: dict, + ) -> None: + """Build and send a self-contained bundle for one CVE. + + The semaphore bounds concurrent CPE API calls. Overall CVE processing + concurrency is bounded by the ingest worker pool. """ - vulnerabilities_generator = self.client_api.get_vulnerabilities(cve_params) + vuln_stix = self._vulnerability_to_stix2(vulnerability) + stix_objects: list = [self.author, vuln_stix] + + if self.import_software: + async with semaphore: + cpe_objects = await self._resolve_cpes_for_vulnerability( + vulnerability, vuln_stix + ) + stix_objects.extend(cpe_objects) + + bundle = self._to_stix_bundle(stix_objects) + bundle_json = self._to_json_bundle(bundle) + + cve_id = vulnerability["cve"]["id"] + info_msg = ( + f"[CONVERTER] Sending bundle for {cve_id} with {len(stix_objects)} objects" + ) + self.helper.connector_logger.debug(info_msg) - for vulnerabilities in vulnerabilities_generator: - vulnerabilities_stix2 = [ - self._vulnerability_to_stix2(vulnerability) - for vulnerability in vulnerabilities - ] - yield vulnerabilities_stix2 + if self.work_id is None: + now = datetime.now(tz=timezone.utc) + current_time = int(datetime.timestamp(now)) + self._initiate_work(current_time) + + # send_stix2_bundle is blocking; run in thread to avoid blocking event loop. + await asyncio.to_thread( + self.helper.send_stix2_bundle, + bundle_json, + work_id=self.work_id, + ) + + # ------------------------------------------------------------------ + # STIX conversion helpers (sync — pure CPU, no I/O) + # ------------------------------------------------------------------ def _vulnerability_to_stix2(self, vulnerability) -> stix2.Vulnerability: # Getting different fields - name = vulnerability["cve"]["id"] - description = vulnerability["cve"]["descriptions"][0]["value"] - created_date = datetime.datetime.strptime( - vulnerability["cve"]["published"], "%Y-%m-%dT%H:%M:%S.%f" + vulnerability_cve = vulnerability["cve"] + name = vulnerability_cve["id"] + description = vulnerability_cve["descriptions"][0]["value"] + created_date = datetime.strptime( + vulnerability_cve["published"], "%Y-%m-%dT%H:%M:%S.%f" ) - modified_date = datetime.datetime.strptime( - vulnerability["cve"]["lastModified"], "%Y-%m-%dT%H:%M:%S.%f" + modified_date = datetime.strptime( + vulnerability_cve["lastModified"], "%Y-%m-%dT%H:%M:%S.%f" ) # Create external references @@ -82,8 +180,8 @@ def _vulnerability_to_stix2(self, vulnerability) -> stix2.Vulnerability: ) external_references = [external_reference] - if "references" in vulnerability["cve"]: - for reference in vulnerability["cve"]["references"]: + if references := vulnerability_cve.get("references"): + for reference in references: external_reference = stix2.ExternalReference( source_name=reference["source"], url=reference["url"] ) @@ -91,10 +189,10 @@ def _vulnerability_to_stix2(self, vulnerability) -> stix2.Vulnerability: cvss_properties = {} + cve_metrics = vulnerability_cve.get("metrics", {}) # Getting CVSS 3.1 metrics - if "cvssMetricV31" in vulnerability["cve"]["metrics"]: + if cvss31_entries := cve_metrics.get("cvssMetricV31"): selected_cvss_entry = None - cvss31_entries = vulnerability["cve"]["metrics"]["cvssMetricV31"] # Some CVEs have Primary (from NVD) and Secondary (vendor) scores. # Try to find the Primary CVSS rating from NVD, otherwise default to a Secondary one. @@ -102,90 +200,52 @@ def _vulnerability_to_stix2(self, vulnerability) -> stix2.Vulnerability: for index, value in enumerate(cvss31_entries): if value["type"] == "Primary": selected_cvss_entry = index - elif value["type"] == "Secondary" and selected_cvss_entry == None: + elif value["type"] == "Secondary" and selected_cvss_entry is None: # Only set the index if a primary source hasn't already been found selected_cvss_entry = index # Default to first score if no primary or secondary scores were found - if selected_cvss_entry == None: + if selected_cvss_entry is None: selected_cvss_entry = 0 cvss31_metrics = cvss31_entries[selected_cvss_entry]["cvssData"] - cvss31_mapping = { - "x_opencti_base_score": "baseScore", - "x_opencti_base_severity": "baseSeverity", - "x_opencti_attack_vector": "attackVector", - "x_opencti_cvss_attack_complexity": "attackComplexity", - "x_opencti_cvss_privileges_required": "privilegesRequired", - "x_opencti_cvss_user_interaction": "userInteraction", - "x_opencti_cvss_scope": "scope", - "x_opencti_confidentiality_impact": "confidentialityImpact", - "x_opencti_integrity_impact": "integrityImpact", - "x_opencti_availability_impact": "availabilityImpact", - } cvss_properties.update( { opencti_key: cvss31_metrics[metric] - for opencti_key, metric in cvss31_mapping.items() + for opencti_key, metric in CVSS31_MAPPING.items() if metric in cvss31_metrics } ) # Get CVSS v2 metrics - if "cvssMetricV2" in vulnerability["cve"]["metrics"]: - cvss2_entries = vulnerability["cve"]["metrics"]["cvssMetricV2"] + if cvss2_entries := cve_metrics.get("cvssMetricV2"): cvss2_metrics = cvss2_entries[0]["cvssData"] - cvss2_mapping = { - "x_opencti_cvss_v2_base_score": "baseScore", - "x_opencti_cvss_v2_access_vector": "accessVector", - "x_opencti_cvss_v2_access_complexity": "accessComplexity", - "x_opencti_cvss_v2_authentication": "authentication", - "x_opencti_cvss_v2_confidentiality_impact": "confidentialityImpact", - "x_opencti_cvss_v2_integrity_impact": "integrityImpact", - "x_opencti_cvss_v2_availability_impact": "availabilityImpact", - } cvss_properties.update( { opencti_key: cvss2_metrics[metric] - for opencti_key, metric in cvss2_mapping.items() + for opencti_key, metric in CVSS2_MAPPING.items() if metric in cvss2_metrics } ) # Get CVSS v4.0 metrics - if "cvssMetricV40" in vulnerability["cve"]["metrics"]: - cvss40_entries = vulnerability["cve"]["metrics"]["cvssMetricV40"] + if cvss40_entries := cve_metrics.get("cvssMetricV40"): cvss40_metrics = cvss40_entries[0]["cvssData"] - cvss40_mapping = { - "x_opencti_cvss_v4_base_score": "baseScore", - "x_opencti_cvss_v4_base_severity": "baseSeverity", - "x_opencti_cvss_v4_attack_vector": "attackVector", - "x_opencti_cvss_v4_attack_complexity": "attackComplexity", - "x_opencti_cvss_v4_attack_requirements": "attackRequirements", - "x_opencti_cvss_v4_privileges_required": "privilegesRequired", - "x_opencti_cvss_v4_user_interaction": "userInteraction", - "x_opencti_cvss_v4_confidentiality_impact_v": "vulnConfidentialityImpact", - "x_opencti_cvss_v4_confidentiality_impact_s": "subConfidentialityImpact", - "x_opencti_cvss_v4_integrity_impact_v": "vulnIntegrityImpact", - "x_opencti_cvss_v4_integrity_impact_s": "subIntegrityImpact", - "x_opencti_cvss_v4_availability_impact_v": "vulnAvailabilityImpact", - "x_opencti_cvss_v4_availability_impact_s": "subAvailabilityImpact", - } cvss_properties.update( { opencti_key: cvss40_metrics[metric] - for opencti_key, metric in cvss40_mapping.items() + for opencti_key, metric in CVSS40_MAPPING.items() if metric in cvss40_metrics } ) # Add CWEs if included cwes = [] - if "weaknesses" in vulnerability["cve"]: - for weakness in vulnerability["cve"]["weaknesses"]: + if cve_weakness := vulnerability_cve.get("weaknesses"): + for weakness in cve_weakness: cwe_value = weakness["description"][0]["value"] if cwe_value.startswith("CWE"): cwes.append(cwe_value) @@ -210,6 +270,96 @@ def _vulnerability_to_stix2(self, vulnerability) -> stix2.Vulnerability: return vulnerability_to_stix2 + async def _resolve_cpes_for_vulnerability( + self, vulnerability: dict, vuln_stix: stix2.Vulnerability + ) -> list: + """Resolve CPEs for a given vulnerability and create Software objects + with 'has' relationships. + + This is called from `_process_and_send_cve` as part of the `ingest` + workflow and may be executed concurrently for multiple CVEs. + """ + cve_id = vulnerability["cve"]["id"] + stix_objects = [] + seen_cpes = set() + + cpe_request_params = {} + if self.cpe_history_interval is not None: + now = datetime.now(timezone.utc) + start_date = now - self.cpe_history_interval + cpe_request_params = { + "lastModStartDate": start_date.strftime("%Y-%m-%dT%H:%M:%S.000"), + "lastModEndDate": now.strftime("%Y-%m-%dT%H:%M:%S.000"), + } + + if cpe_request_params: + cpe_names = await self.cpe_match_client.get_cpes_for_cve( + cve_id, cpe_request_params + ) + else: + cpe_names = await self.cpe_match_client.get_cpes_for_cve(cve_id) + + for cpe_name in cpe_names: + if cpe_name in seen_cpes: + continue + seen_cpes.add(cpe_name) + + try: + software = self._create_software(cpe_name) + relationship = self._create_relationship( + from_id=software.id, + to_id=vuln_stix.id, + relation="has", + ) + stix_objects.append(software) + stix_objects.append(relationship) + except (ValueError, NotImplementedError) as err: + warn_msg = ( + f"[CONVERTER] Skipping CPE '{cpe_name}' for {cve_id}: {str(err)}" + ) + self.helper.connector_logger.warning(warn_msg) + continue + + if stix_objects: + info_msg = ( + f"[CONVERTER] Created {len(seen_cpes)} Software objects for {cve_id}" + ) + self.helper.connector_logger.debug(info_msg) + + return stix_objects + + def _create_software(self, cpe_name: str) -> stix2.Software: + """ + Create a STIX2 Software object from a CPE name string. + The stix2 library generates a deterministic ID for Software SCOs + based on contributing properties (name, cpe, vendor, version). + :param cpe_name: CPE name string (e.g. "cpe:2.3:a:vendor:product:1.0:*:*:*:*:*:*:*") + :return: STIX2 Software object + """ + cpe_dict = parse_cpe_uri(cpe_name) + vendor = cpe_dict["vendor"] + product = cpe_dict["product"] + version = cpe_dict["version"] + + software_name = f"{vendor} {product}" + if version and version != "*": + software_name = f"{vendor} {product} {version}" + + software_kwargs = { + "name": software_name, + "cpe": cpe_name, + "vendor": vendor, + "custom_properties": { + "x_opencti_created_by_ref": self.author.id, + "x_opencti_product": product, + }, + } + + if version and version != "*": + software_kwargs["version"] = version + + return stix2.Software(**software_kwargs) + def _create_relationship(self, from_id: str, to_id: str, relation): """ :param from_id: From id in string @@ -231,8 +381,8 @@ def _create_author(): :return: CVEs' default author """ return stix2.Identity( - id=Identity.generate_id("The MITRE Corporation", "organization"), - name="The MITRE Corporation", + id=Identity.generate_id("NIST NVD", "organization"), + name="NIST NVD", identity_class="organization", ) @@ -249,3 +399,8 @@ def _to_json_bundle(stix_bundle): :return: STIX bundle as JSON format """ return stix_bundle.serialize() + + async def close(self) -> None: + """Clean up aiohttp sessions.""" + await self.client_api.close() + await self.cpe_match_client.close() diff --git a/external-import/cve/src/services/utils/__init__.py b/external-import/cve/src/services/utils/__init__.py index d850ca3e40b..76d3b90eedd 100644 --- a/external-import/cve/src/services/utils/__init__.py +++ b/external-import/cve/src/services/utils/__init__.py @@ -1,5 +1,13 @@ from src.services.utils.common import convert_hours_to_seconds from src.services.utils.constants import MAX_AUTHORIZED # noqa: F401 +from src.services.utils.cpe_parser import parse_cpe_uri # noqa: F401 +from src.services.utils.rate_limiter import AsyncRateLimiter # noqa: F401 from src.services.utils.version import __version__ as APP_VERSION # noqa: F401 -__all__ = ["MAX_AUTHORIZED", "convert_hours_to_seconds", "APP_VERSION"] +__all__ = [ + "MAX_AUTHORIZED", + "convert_hours_to_seconds", + "APP_VERSION", + "parse_cpe_uri", + "AsyncRateLimiter", +] diff --git a/external-import/cve/src/services/utils/cpe_parser.py b/external-import/cve/src/services/utils/cpe_parser.py new file mode 100644 index 00000000000..12ac2f88940 --- /dev/null +++ b/external-import/cve/src/services/utils/cpe_parser.py @@ -0,0 +1,47 @@ +import re + +CPE_PATTERNS = { + "cpe:/": ( + r"^cpe:/(?P[a-z]):" + r"(?P[a-zA-Z0-9_\-]+):" + r"(?P[a-zA-Z0-9_\-]+):" + r"(?P[a-zA-Z0-9_\-]+)" + ), + "cpe:2.3": ( + r"^cpe:2\.3:(?P[a-z]+):" + r"(?P[^:]+):" + r"(?P[^:]+):" + r"(?P[^:]+)" + ), +} + + +def parse_cpe_uri(cpe_str: str) -> dict[str, str]: + """Parse a CPE URI (format 1 or 2.3) and extract vendor, product, and version. + + Args: + cpe_str: The CPE URI string (e.g. "cpe:2.3:a:vendor:product:1.0:*:*:*:*:*:*:*") + + Returns: + A dict with keys: part, vendor, product, version. + + Raises: + ValueError: If the CPE URI is missing mandatory information. + NotImplementedError: If the CPE URI format is unknown. + """ + + for key, supported_pattern in CPE_PATTERNS.items(): + if not cpe_str.startswith(key): + continue + + if (match := re.match(pattern=supported_pattern, string=cpe_str)) is None: + raise ValueError(f"CPE URI is missing mandatory information: {cpe_str}") + + return { + "part": match["part"], + "vendor": match["vendor"], + "product": match["product"], + "version": match["version"], + } + + raise NotImplementedError(f"Unknown CPE URI format: {cpe_str}") diff --git a/external-import/cve/src/services/utils/rate_limiter.py b/external-import/cve/src/services/utils/rate_limiter.py new file mode 100644 index 00000000000..72202706c62 --- /dev/null +++ b/external-import/cve/src/services/utils/rate_limiter.py @@ -0,0 +1,54 @@ +import asyncio +import time +from collections import deque + +# NVD rate limit with API key: 50 requests per rolling 30-second window. +# See https://nvd.nist.gov/developers/start-here#rate-limits +NVD_MAX_REQUESTS = 50 +NVD_INTERVAL_SECONDS = 30.0 + + +class AsyncRateLimiter: + """Sliding-window rate limiter for asyncio. + + Tracks the timestamps of recent requests and ensures no more than + ``NVD_MAX_REQUESTS`` requests are made within any rolling + ``NVD_INTERVAL_SECONDS`` window. Uses ``time.monotonic()`` so the + state safely survives across multiple ``asyncio.run()`` calls. + """ + + def __init__(self) -> None: + self._timestamps: deque[float] = deque() + self._lock: asyncio.Lock | None = None + + def _get_lock(self) -> asyncio.Lock: + if self._lock is None: + self._lock = asyncio.Lock() + return self._lock + + async def acquire(self) -> None: + """Block until a request slot is available.""" + lock = self._get_lock() + while True: + async with lock: + now = time.monotonic() + # Purge timestamps outside the sliding window + while ( + self._timestamps + and now - self._timestamps[0] >= NVD_INTERVAL_SECONDS + ): + self._timestamps.popleft() + + if len(self._timestamps) < NVD_MAX_REQUESTS: + self._timestamps.append(now) + return + + # Calculate wait until oldest timestamp expires + wait_time = NVD_INTERVAL_SECONDS - (now - self._timestamps[0]) + 0.05 + + await asyncio.sleep(wait_time) + + def reset(self) -> None: + """Reset the limiter state (e.g. between asyncio.run() calls).""" + self._timestamps.clear() + self._lock = None diff --git a/external-import/proofpoint-tap/proofpoint_tap/domain/__init__.py b/external-import/cve/tests/__init__.py similarity index 100% rename from external-import/proofpoint-tap/proofpoint_tap/domain/__init__.py rename to external-import/cve/tests/__init__.py diff --git a/external-import/cve/tests/conftest.py b/external-import/cve/tests/conftest.py new file mode 100644 index 00000000000..33054a04b4a --- /dev/null +++ b/external-import/cve/tests/conftest.py @@ -0,0 +1,52 @@ +import sys +from pathlib import Path + +# Add connector src/ to sys.path so `src.*` imports resolve. +_src_root = Path(__file__).resolve().parent.parent / "src" +if str(_src_root) not in sys.path: + sys.path.insert(0, str(_src_root.parent)) + + +# --------------------------------------------------------------------------- +# Shared test data factories +# --------------------------------------------------------------------------- + + +def make_vulnerability(cve_id: str, *, with_cpe: bool = True) -> dict: + """Return a minimal NVD-style vulnerability dict.""" + vuln = { + "cve": { + "id": cve_id, + "descriptions": [{"value": f"Description of {cve_id}"}], + "published": "2024-01-15T10:00:00.000", + "lastModified": "2024-02-01T12:00:00.000", + "references": [], + "metrics": { + "cvssMetricV31": [ + { + "type": "Primary", + "cvssData": { + "baseScore": 7.5, + "baseSeverity": "HIGH", + "attackVector": "NETWORK", + "attackComplexity": "LOW", + "privilegesRequired": "NONE", + "userInteraction": "NONE", + "scope": "UNCHANGED", + "confidentialityImpact": "HIGH", + "integrityImpact": "NONE", + "availabilityImpact": "NONE", + }, + } + ] + }, + "weaknesses": [], + } + } + return vuln + + +def make_cpe_name( + vendor: str = "vendor", product: str = "product", version: str = "1.0" +) -> str: + return f"cpe:2.3:a:{vendor}:{product}:{version}:*:*:*:*:*:*:*" diff --git a/external-import/cve/tests/test-requirements.txt b/external-import/cve/tests/test-requirements.txt new file mode 100644 index 00000000000..94db4cfddf1 --- /dev/null +++ b/external-import/cve/tests/test-requirements.txt @@ -0,0 +1,3 @@ +-r ../src/requirements.txt +pytest-asyncio +pytest-mock diff --git a/external-import/proofpoint-tap/proofpoint_tap/domain/models/__init__.py b/external-import/cve/tests/tests_connector/__init__.py similarity index 100% rename from external-import/proofpoint-tap/proofpoint_tap/domain/models/__init__.py rename to external-import/cve/tests/tests_connector/__init__.py diff --git a/external-import/cve/tests/tests_connector/test_api_client.py b/external-import/cve/tests/tests_connector/test_api_client.py new file mode 100644 index 00000000000..04cbd0c68e4 --- /dev/null +++ b/external-import/cve/tests/tests_connector/test_api_client.py @@ -0,0 +1,66 @@ +from unittest.mock import AsyncMock, MagicMock, patch + +import pytest +from src.services.client.api import CVEClient +from src.services.utils.rate_limiter import AsyncRateLimiter + + +def _build_client() -> CVEClient: + helper = MagicMock() + helper.connector_logger = MagicMock() + return CVEClient( + api_key="fake-key", + helper=helper, + header="test/1.0", + rate_limiter=AsyncRateLimiter(), + ) + + +def _build_context_manager_response( + *, + status: int, + json_body=None, + text_body: str = "", +): + response = MagicMock() + response.status = status + response.headers = {} + response.json = AsyncMock(return_value=json_body) + response.text = AsyncMock(return_value=text_body) + + context_manager = MagicMock() + context_manager.__aenter__ = AsyncMock(return_value=response) + context_manager.__aexit__ = AsyncMock(return_value=False) + return context_manager + + +async def test_request_raises_invalid_key_on_403(): + client = _build_client() + mock_session = MagicMock() + mock_session.closed = False + mock_session.get = MagicMock( + return_value=_build_context_manager_response( + status=403, json_body={"message": "Invalid apiKey."} + ) + ) + + with patch.object(client, "_get_session", AsyncMock(return_value=mock_session)): + with pytest.raises(Exception, match="Invalid API Key provided"): + await client.request("https://fake.url") + + +async def test_request_404_uses_error_message_from_body(): + client = _build_client() + mock_session = MagicMock() + mock_session.closed = False + mock_session.get = MagicMock( + return_value=_build_context_manager_response( + status=404, + json_body={"message": "CVE not found"}, + text_body="CVE not found", + ) + ) + + with patch.object(client, "_get_session", AsyncMock(return_value=mock_session)): + with pytest.raises(Exception, match="CVE not found"): + await client.request("https://fake.url") diff --git a/external-import/cve/tests/tests_connector/test_cpe_match_client.py b/external-import/cve/tests/tests_connector/test_cpe_match_client.py new file mode 100644 index 00000000000..f0440e65834 --- /dev/null +++ b/external-import/cve/tests/tests_connector/test_cpe_match_client.py @@ -0,0 +1,90 @@ +from unittest.mock import AsyncMock, MagicMock + +from src.services.client.cpe_match import CPEMatchClient + + +def test_extract_cpe_names_ignores_criteria_patterns(): + data = { + "matchStrings": [ + { + "matchString": { + "criteria": "cpe:2.3:a:vendor:product:*:*:*:*:*:*:*:*", + "matches": [], + } + } + ] + } + cpe_names: set[str] = set() + + CPEMatchClient._extract_cpe_names(data, cpe_names) + + assert cpe_names == set() + + +def test_extract_cpe_names_filters_invalid_values(): + valid_cpe = "cpe:2.3:a:vendor:product:1.0:*:*:*:*:*:*:*" + data = { + "matchStrings": [ + { + "matchString": { + "matches": [ + {"cpeName": None}, + {"cpeName": ""}, + {"cpeName": " "}, + {"cpeName": 123}, + {}, + {"cpeName": valid_cpe}, + ] + } + } + ] + } + cpe_names: set[str] = set() + + CPEMatchClient._extract_cpe_names(data, cpe_names) + + assert cpe_names == {valid_cpe} + + +async def test_get_cpes_for_cve_stops_when_initial_results_per_page_is_zero(): + valid_cpe = "cpe:2.3:a:vendor:product:1.0:*:*:*:*:*:*:*" + first_page = { + "totalResults": 10, + "resultsPerPage": 0, + "matchStrings": [{"matchString": {"matches": [{"cpeName": valid_cpe}]}}], + } + + client = CPEMatchClient.__new__(CPEMatchClient) + client.helper = MagicMock() + client.helper.connector_logger = MagicMock() + client.get_complete_collection = AsyncMock(return_value=first_page) + + result = await client.get_cpes_for_cve("CVE-2024-0001") + + assert result == [valid_cpe] + assert client.get_complete_collection.await_count == 1 + + +async def test_get_cpes_for_cve_stops_when_paginated_results_per_page_is_zero(): + cpe1 = "cpe:2.3:a:vendor:product:1.0:*:*:*:*:*:*:*" + cpe2 = "cpe:2.3:a:vendor:product:2.0:*:*:*:*:*:*:*" + first_page = { + "totalResults": 4, + "resultsPerPage": 2, + "matchStrings": [{"matchString": {"matches": [{"cpeName": cpe1}]}}], + } + second_page = { + "totalResults": 4, + "resultsPerPage": 0, + "matchStrings": [{"matchString": {"matches": [{"cpeName": cpe2}]}}], + } + + client = CPEMatchClient.__new__(CPEMatchClient) + client.helper = MagicMock() + client.helper.connector_logger = MagicMock() + client.get_complete_collection = AsyncMock(side_effect=[first_page, second_page]) + + result = await client.get_cpes_for_cve("CVE-2024-0002") + + assert set(result) == {cpe1, cpe2} + assert client.get_complete_collection.await_count == 2 diff --git a/external-import/cve/tests/tests_connector/test_pipeline.py b/external-import/cve/tests/tests_connector/test_pipeline.py new file mode 100644 index 00000000000..bac7b0959a5 --- /dev/null +++ b/external-import/cve/tests/tests_connector/test_pipeline.py @@ -0,0 +1,513 @@ +"""Tests for the streaming CVE+CPE ingestion pipeline. + +Validates that: +- Each CVE produces one self-contained bundle (Vulnerability + Software + Relationships). +- Concurrency is bounded for both overall CVE workers and CPE resolution. +- No data is lost or duplicated under concurrent load. +- TaskGroup exceptions propagate correctly. +- import_software=False sends CVE-only bundles (no CPE work). +- Bundles are consistent: every relationship target exists in the same bundle. +""" + +import asyncio +import json +import threading +import time +from unittest.mock import AsyncMock, MagicMock, patch + +import pytest +from src.services.client.api import CVEClient +from src.services.utils.rate_limiter import AsyncRateLimiter + +from tests.conftest import make_cpe_name, make_vulnerability + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + + +def _make_converter( + *, + num_pages: int = 3, + vulns_per_page: int = 5, + cpes_per_cve: int = 2, + import_software: bool = True, + cpe_max_concurrency: int = 4, + cve_max_concurrency: int = 8, + cpe_delay: float = 0.0, + send_delay: float = 0.0, +): + """Build a CVEConverter with mocked clients and helper. + + Returns (converter, tracker) where tracker records call ordering. + """ + from src.services.converter.vulnerability_to_stix2 import CVEConverter + + # Thread-safe lock for the tracker (send_stix2_bundle runs in a thread) + tlock = threading.Lock() + + tracker = { + "bundles_sent": [], + "bundle_send_times": [], + "cpe_resolve_log": [], # (cve_id, start_time, end_time) + "concurrent_cpe_gauge": {"max": 0, "current": 0}, + "concurrent_send_gauge": {"max": 0, "current": 0}, + "async_lock": asyncio.Lock(), + } + + # -- Build pages of vulnerabilities + pages: list[list[dict]] = [] + cve_counter = 0 + for _ in range(num_pages): + page = [] + for _ in range(vulns_per_page): + cve_counter += 1 + page.append(make_vulnerability(f"CVE-2024-{cve_counter:04d}")) + pages.append(page) + + # -- Mock CVEVulnerability.get_vulnerabilities as async generator + async def fake_get_vulnerabilities(cve_params=None): + for page in pages: + yield page + + # -- Mock CPEMatchClient.get_cpes_for_cve + async def fake_get_cpes_for_cve(cve_id: str) -> list[str]: + async with tracker["async_lock"]: + tracker["concurrent_cpe_gauge"]["current"] += 1 + tracker["concurrent_cpe_gauge"]["max"] = max( + tracker["concurrent_cpe_gauge"]["max"], + tracker["concurrent_cpe_gauge"]["current"], + ) + + start = time.monotonic() + if cpe_delay > 0: + await asyncio.sleep(cpe_delay) + end = time.monotonic() + + async with tracker["async_lock"]: + tracker["concurrent_cpe_gauge"]["current"] -= 1 + tracker["cpe_resolve_log"].append((cve_id, start, end)) + + return [ + make_cpe_name(vendor=f"vendor_{cve_id}", product=f"prod_{i}") + for i in range(cpes_per_cve) + ] + + # -- Mock helper + mock_helper = MagicMock() + mock_helper.connector_logger = MagicMock() + + def fake_send_stix2_bundle(bundle_json, work_id=None): + """Sync callback — runs in a thread via asyncio.to_thread().""" + with tlock: + tracker["concurrent_send_gauge"]["current"] += 1 + tracker["concurrent_send_gauge"]["max"] = max( + tracker["concurrent_send_gauge"]["max"], + tracker["concurrent_send_gauge"]["current"], + ) + + if send_delay > 0: + time.sleep(send_delay) + + now = time.monotonic() + data = json.loads(bundle_json) + with tlock: + tracker["bundles_sent"].append(data) + tracker["bundle_send_times"].append(now) + tracker["concurrent_send_gauge"]["current"] -= 1 + + mock_helper.send_stix2_bundle = fake_send_stix2_bundle + + # -- Mock config + mock_config = MagicMock() + mock_config.cve.import_software = import_software + mock_config.cve.cpe_max_concurrency = cpe_max_concurrency + mock_config.cve.cve_max_concurrency = cve_max_concurrency + mock_config.cve.api_key.get_secret_value.return_value = "fake-api-key" + + # -- Build converter with mocked internals + with patch.object(CVEConverter, "__init__", lambda self, *a, **kw: None): + converter = CVEConverter.__new__(CVEConverter) + + converter.config = mock_config + converter.helper = mock_helper + converter.import_software = import_software + converter.cpe_max_concurrency = cpe_max_concurrency + converter.cpe_history_interval = None + converter.cve_max_concurrency = cve_max_concurrency + converter.work_id = None + converter.author = CVEConverter._create_author() + + # Mock work initiation so lazy _initiate_work succeeds + mock_helper.api.work.initiate_work.return_value = "test-work-id" + mock_helper.connect_id = "test-connector-id" + mock_helper.connect_name = "CVE Test" + + # Mock the clients + converter.client_api = MagicMock() + converter.client_api.get_vulnerabilities = fake_get_vulnerabilities + converter.client_api.close = AsyncMock() + + converter.cpe_match_client = MagicMock() + converter.cpe_match_client.get_cpes_for_cve = fake_get_cpes_for_cve + converter.cpe_match_client.close = AsyncMock() + + return converter, tracker + + +def _count_types(bundles: list[dict]) -> dict[str, int]: + """Count STIX object types across all bundles.""" + counts: dict[str, int] = {} + for bundle in bundles: + for obj in bundle.get("objects", []): + t = obj["type"] + counts[t] = counts.get(t, 0) + 1 + return counts + + +# --------------------------------------------------------------------------- +# Tests +# --------------------------------------------------------------------------- + + +async def test_one_bundle_per_cve(): + """Each CVE must produce exactly one bundle.""" + total_cves = 3 * 5 + + converter, tracker = _make_converter(num_pages=3, vulns_per_page=5) + await converter.ingest({}) + + assert len(tracker["bundles_sent"]) == total_cves + + +async def test_bundle_is_self_contained(): + """Every bundle must contain the vulnerability referenced by its + relationships, ensuring OpenCTI can resolve all refs in one bundle.""" + converter, tracker = _make_converter(num_pages=1, vulns_per_page=3, cpes_per_cve=2) + await converter.ingest({}) + + for bundle in tracker["bundles_sent"]: + objects = bundle["objects"] + obj_ids = {o["id"] for o in objects} + relationships = [o for o in objects if o["type"] == "relationship"] + + for rel in relationships: + assert ( + rel["source_ref"] in obj_ids + ), f"Relationship source_ref {rel['source_ref']} missing from bundle" + assert ( + rel["target_ref"] in obj_ids + ), f"Relationship target_ref {rel['target_ref']} missing from bundle" + + +async def test_bundle_contains_vulnerability_software_and_relationships(): + """When import_software is enabled, each bundle must contain exactly + one vulnerability, its software objects, and their relationships.""" + cpes_per_cve = 3 + + converter, tracker = _make_converter( + num_pages=1, vulns_per_page=2, cpes_per_cve=cpes_per_cve + ) + await converter.ingest({}) + + for bundle in tracker["bundles_sent"]: + objects = bundle["objects"] + vulns = [o for o in objects if o["type"] == "vulnerability"] + software = [o for o in objects if o["type"] == "software"] + rels = [o for o in objects if o["type"] == "relationship"] + identities = [o for o in objects if o["type"] == "identity"] + + assert len(vulns) == 1 + assert len(software) == cpes_per_cve + assert len(rels) == cpes_per_cve + assert len(identities) == 1 + assert identities[0]["name"] == "NIST NVD" + + +async def test_all_cpes_resolved_no_data_loss(): + """Every CVE must have its CPEs resolved — no data loss under concurrency.""" + num_pages = 3 + vulns_per_page = 4 + cpes_per_cve = 3 + total_cves = num_pages * vulns_per_page + + converter, tracker = _make_converter( + num_pages=num_pages, + vulns_per_page=vulns_per_page, + cpes_per_cve=cpes_per_cve, + ) + await converter.ingest({}) + + assert len(tracker["cpe_resolve_log"]) == total_cves + + counts = _count_types(tracker["bundles_sent"]) + expected = total_cves * cpes_per_cve + assert ( + counts.get("software", 0) == expected + ), f"Expected {expected} software objects, got {counts.get('software', 0)}" + assert counts.get("relationship", 0) == expected + + +async def test_concurrency_bounded_by_semaphore(): + """At no point should more than cpe_max_concurrency CPE resolutions + run simultaneously.""" + max_concurrency = 3 + + converter, tracker = _make_converter( + num_pages=2, + vulns_per_page=10, + cpe_delay=0.02, + cpe_max_concurrency=max_concurrency, + ) + await converter.ingest({}) + + observed_max = tracker["concurrent_cpe_gauge"]["max"] + assert observed_max <= max_concurrency, ( + f"Max concurrent CPE resolves was {observed_max}, " + f"expected at most {max_concurrency}" + ) + assert observed_max > 1, f"Expected some parallelism (>1), got {observed_max}" + + +async def test_cve_worker_concurrency_is_bounded(): + """Overall CVE processing should be capped by cve_max_concurrency.""" + max_workers = 2 + + converter, tracker = _make_converter( + num_pages=2, + vulns_per_page=10, + import_software=False, + cve_max_concurrency=max_workers, + send_delay=0.02, + ) + await converter.ingest({}) + + observed_max = tracker["concurrent_send_gauge"]["max"] + assert ( + observed_max <= max_workers + ), f"Max concurrent sends was {observed_max}, expected at most {max_workers}" + assert observed_max > 1, f"Expected some parallelism (>1), got {observed_max}" + + +async def test_no_cpe_work_when_import_software_disabled(): + """When import_software is False, bundles contain only vulnerability + author.""" + converter, tracker = _make_converter( + num_pages=2, vulns_per_page=5, import_software=False + ) + await converter.ingest({}) + + assert len(tracker["bundles_sent"]) == 2 * 5 + assert len(tracker["cpe_resolve_log"]) == 0 + + counts = _count_types(tracker["bundles_sent"]) + assert counts.get("software", 0) == 0 + assert counts.get("relationship", 0) == 0 + + +async def test_empty_page_does_not_send_bundle(): + """Pages with no vulnerabilities should not produce any bundles.""" + converter, tracker = _make_converter(num_pages=1, vulns_per_page=3) + + pages = [[], [make_vulnerability("CVE-2024-0001")]] + + async def fake_gen(cve_params=None): + for page in pages: + yield page + + converter.client_api.get_vulnerabilities = fake_gen + + await converter.ingest({}) + + assert len(tracker["bundles_sent"]) == 1 + + +async def test_cpe_resolve_error_propagates_via_exception_group(): + """If a single CPE resolution raises, the TaskGroup must propagate + the error as an ExceptionGroup.""" + converter, tracker = _make_converter(num_pages=1, vulns_per_page=5, cpe_delay=0.01) + + call_count = 0 + original_resolve = converter.cpe_match_client.get_cpes_for_cve + + async def flaky_resolve(cve_id: str) -> list[str]: + nonlocal call_count + call_count += 1 + if call_count == 3: + raise RuntimeError("Simulated API failure") + return await original_resolve(cve_id) + + converter.cpe_match_client.get_cpes_for_cve = flaky_resolve + + with pytest.raises(ExceptionGroup) as exc_info: + await converter.ingest({}) + + errors = exc_info.value.exceptions + assert any(isinstance(e, RuntimeError) for e in errors) + + +async def test_every_bundle_includes_author(): + """Every bundle must include the NIST NVD identity object.""" + converter, tracker = _make_converter(num_pages=1, vulns_per_page=3, cpes_per_cve=1) + await converter.ingest({}) + + assert len(tracker["bundles_sent"]) > 0 + for bundle in tracker["bundles_sent"]: + identities = [o for o in bundle["objects"] if o["type"] == "identity"] + assert len(identities) >= 1, "Bundle missing author identity" + assert any(o["name"] == "NIST NVD" for o in identities) + + +async def test_high_concurrency_no_data_corruption(): + """Stress test: many CVEs with high concurrency to detect + race conditions.""" + num_pages = 10 + vulns_per_page = 20 + cpes_per_cve = 3 + total_cves = num_pages * vulns_per_page + + converter, tracker = _make_converter( + num_pages=num_pages, + vulns_per_page=vulns_per_page, + cpes_per_cve=cpes_per_cve, + cpe_max_concurrency=15, + cpe_delay=0.005, + ) + await converter.ingest({}) + + assert len(tracker["cpe_resolve_log"]) == total_cves + assert len(tracker["bundles_sent"]) == total_cves + + counts = _count_types(tracker["bundles_sent"]) + expected = total_cves * cpes_per_cve + assert ( + counts["software"] == expected + ), f"Data loss: expected {expected} software, got {counts['software']}" + + +async def test_cpe_resolution_starts_before_all_pages_fetched(): + """CPE resolution for page 1 should start before page N is fetched, + proving the pipeline streams instead of buffering all pages.""" + converter, tracker = _make_converter(num_pages=5, vulns_per_page=5, cpe_delay=0.02) + + original_gen = converter.client_api.get_vulnerabilities + pages_yielded_at: list[float] = [] + + async def delayed_gen(cve_params=None): + async for page in original_gen(cve_params): + pages_yielded_at.append(time.monotonic()) + yield page + await asyncio.sleep(0.01) + + converter.client_api.get_vulnerabilities = delayed_gen + + await converter.ingest({}) + + first_cpe_start = min(start for _, start, _ in tracker["cpe_resolve_log"]) + last_page_yield = pages_yielded_at[-1] + + assert ( + first_cpe_start < last_page_yield + ), "CPE resolution should start before all pages are fetched" + + +async def test_no_software_in_bundle_when_zero_cpes(): + """If CPE resolution returns empty, bundles should only contain + vulnerability + author (no software/relationship).""" + converter, tracker = _make_converter(num_pages=2, vulns_per_page=3, cpes_per_cve=0) + await converter.ingest({}) + + assert len(tracker["bundles_sent"]) == 6 + counts = _count_types(tracker["bundles_sent"]) + assert counts.get("software", 0) == 0 + assert counts.get("relationship", 0) == 0 + + +async def test_bundles_sent_concurrently_not_sequentially(): + """With slow CPE resolution, bundles for different CVEs should + overlap in time (not wait for each other sequentially).""" + converter, tracker = _make_converter( + num_pages=1, + vulns_per_page=6, + cpe_delay=0.05, + cpe_max_concurrency=6, + ) + await converter.ingest({}) + + send_times = tracker["bundle_send_times"] + assert len(send_times) == 6 + + # If sequential, total time >= 6 * 0.05 = 0.3s. + # If concurrent, total time ~ 0.05s (+ overhead). + total_time = max(send_times) - min(send_times) + assert ( + total_time < 0.2 + ), f"Bundles appear sequential (spread={total_time:.3f}s), expected concurrent" + + +async def test_no_duplicate_stix_objects_in_bundle(): + """Each bundle should not contain duplicate STIX objects (same ID).""" + converter, tracker = _make_converter(num_pages=1, vulns_per_page=5, cpes_per_cve=3) + await converter.ingest({}) + + for i, bundle in enumerate(tracker["bundles_sent"]): + ids = [o["id"] for o in bundle["objects"]] + assert len(ids) == len( + set(ids) + ), f"Bundle {i} has duplicate STIX IDs: {[x for x in ids if ids.count(x) > 1]}" + + +async def test_timeout_error_is_retried_not_silenced(): + """TimeoutError from aiohttp must be retried by request(), not swallowed + as None by get_complete_collection() which would crash the TaskGroup. + + We mock at the aiohttp session level so the real retry loop in request() + runs and catches the TimeoutError. + """ + + mock_helper = MagicMock() + mock_helper.connector_logger = MagicMock() + + rate_limiter = AsyncRateLimiter() + client = CVEClient( + api_key="fake-key", + helper=mock_helper, + header="test/1.0", + rate_limiter=rate_limiter, + ) + + call_count = 0 + success_payload = {"vulnerabilities": [], "totalResults": 0, "resultsPerPage": 0} + + def make_response(): + """Build an async context manager that fakes aiohttp response.""" + nonlocal call_count + call_count += 1 + + if call_count < 3: + # Simulate timeout while reading response body + cm = MagicMock() + cm.__aenter__ = AsyncMock(side_effect=TimeoutError("simulated timeout")) + cm.__aexit__ = AsyncMock(return_value=False) + return cm + + # Success on 3rd attempt + mock_resp = MagicMock() + mock_resp.status = 200 + mock_resp.json = AsyncMock(return_value=success_payload) + cm = MagicMock() + cm.__aenter__ = AsyncMock(return_value=mock_resp) + cm.__aexit__ = AsyncMock(return_value=False) + return cm + + mock_session = MagicMock() + mock_session.closed = False + mock_session.get = MagicMock(side_effect=lambda *a, **kw: make_response()) + + with patch.object(client, "_get_session", AsyncMock(return_value=mock_session)): + with patch("src.services.client.api.asyncio.sleep", AsyncMock()): + result = await client.get_complete_collection("https://fake.url") + + # Should have retried and eventually succeeded — not returned None + assert result is not None, "TimeoutError should be retried, not silenced as None" + assert result == success_payload + assert call_count == 3 diff --git a/external-import/cve/tests/tests_connector/test_rate_limiter.py b/external-import/cve/tests/tests_connector/test_rate_limiter.py new file mode 100644 index 00000000000..4de4daf6ecc --- /dev/null +++ b/external-import/cve/tests/tests_connector/test_rate_limiter.py @@ -0,0 +1,152 @@ +"""Tests for AsyncRateLimiter concurrency correctness. + +Validates that: +- The sliding-window algorithm enforces the request cap. +- Concurrent callers are properly serialised by the internal lock. +- ``reset()`` clears state for cross-asyncio.run() safety. +""" + +import asyncio +import time + +import src.services.utils.rate_limiter as rl_module +from src.services.utils.rate_limiter import ( + NVD_MAX_REQUESTS, + AsyncRateLimiter, +) + + +async def test_acquire_within_limit_does_not_block(): + """Acquiring fewer slots than the max should return instantly.""" + limiter = AsyncRateLimiter() + t0 = time.monotonic() + + for _ in range(NVD_MAX_REQUESTS): + await limiter.acquire() + + elapsed = time.monotonic() - t0 + assert elapsed < 1.0, f"Expected no blocking, took {elapsed:.2f}s" + + +async def test_acquire_over_limit_blocks(): + """The (max+1)-th acquire must block until the window slides.""" + limiter = AsyncRateLimiter() + + for _ in range(NVD_MAX_REQUESTS): + await limiter.acquire() + + # Next acquire should block; verify it doesn't complete within 0.1s. + acquired = asyncio.Event() + + async def try_acquire(): + await limiter.acquire() + acquired.set() + + task = asyncio.create_task(try_acquire()) + + await asyncio.sleep(0.15) + assert not acquired.is_set(), "Should have blocked but did not" + + task.cancel() + try: + await task + except asyncio.CancelledError: + pass + + +async def test_concurrent_acquires_respect_limit(): + """Launch many concurrent acquire() calls; verify at most + NVD_MAX_REQUESTS succeed within the window.""" + limiter = AsyncRateLimiter() + acquired_times: list[float] = [] + lock = asyncio.Lock() + + async def worker(): + await limiter.acquire() + async with lock: + acquired_times.append(time.monotonic()) + + num_workers = NVD_MAX_REQUESTS + 10 + tasks = [asyncio.create_task(worker()) for _ in range(num_workers)] + + # Give enough time for the first batch to complete but not the overflow + await asyncio.sleep(0.3) + + immediate = [t for t in acquired_times if t - acquired_times[0] < 0.5] + assert ( + len(immediate) == NVD_MAX_REQUESTS + ), f"Expected {NVD_MAX_REQUESTS} immediate acquires, got {len(immediate)}" + + for task in tasks: + task.cancel() + try: + await task + except asyncio.CancelledError: + pass + + +async def test_reset_clears_state(): + """After reset(), the full budget should be available again.""" + limiter = AsyncRateLimiter() + + for _ in range(NVD_MAX_REQUESTS): + await limiter.acquire() + + limiter.reset() + + t0 = time.monotonic() + for _ in range(NVD_MAX_REQUESTS): + await limiter.acquire() + elapsed = time.monotonic() - t0 + + assert ( + elapsed < 1.0 + ), f"After reset, acquires should be instant, took {elapsed:.2f}s" + + +async def test_reset_invalidates_lock(): + """reset() must set _lock to None so a fresh Lock is created + in the next event loop (cross-asyncio.run safety).""" + limiter = AsyncRateLimiter() + await limiter.acquire() + + old_lock = limiter._lock + limiter.reset() + + assert limiter._lock is None + assert len(limiter._timestamps) == 0 + + # A new acquire should create a new lock + await limiter.acquire() + assert limiter._lock is not old_lock + + +async def test_sliding_window_releases_slots(): + """Slots should free up after the window interval passes.""" + # Use a patched short interval for speed + + original_interval = rl_module.NVD_INTERVAL_SECONDS + original_max = rl_module.NVD_MAX_REQUESTS + rl_module.NVD_INTERVAL_SECONDS = 0.3 + rl_module.NVD_MAX_REQUESTS = 3 + + try: + limiter = AsyncRateLimiter() + + # Fill the window + for _ in range(3): + await limiter.acquire() + + # Wait for window to slide + await asyncio.sleep(0.4) + + # Should be able to acquire again without blocking + t0 = time.monotonic() + await limiter.acquire() + elapsed = time.monotonic() - t0 + assert ( + elapsed < 0.2 + ), f"Expected slot freed after window slide, took {elapsed:.2f}s" + finally: + rl_module.NVD_INTERVAL_SECONDS = original_interval + rl_module.NVD_MAX_REQUESTS = original_max diff --git a/external-import/orange-cyberdefense/.dockerignore b/external-import/cvelistv5/.dockerignore similarity index 100% rename from external-import/orange-cyberdefense/.dockerignore rename to external-import/cvelistv5/.dockerignore diff --git a/external-import/cvelistv5/Dockerfile b/external-import/cvelistv5/Dockerfile new file mode 100644 index 00000000000..84bee3c97dd --- /dev/null +++ b/external-import/cvelistv5/Dockerfile @@ -0,0 +1,19 @@ +FROM python:3.12-alpine +ENV CONNECTOR_TYPE=EXTERNAL_IMPORT + +# Copy the connector +COPY src /opt/opencti-connector-cvelistv5 +WORKDIR /opt/opencti-connector-cvelistv5 + +# Install Python modules +# hadolint ignore=DL3003 +RUN apk --no-cache add git build-base libmagic libffi-dev && \ + pip3 install --no-cache-dir -r requirements.txt && \ + apk del build-base + +# GitPython relies on `uname` being on $PATH (see GitPython issue 1979). +RUN ln -sv "$(which uname)" /usr/bin/uname + +COPY entrypoint.sh / +RUN chmod +x /entrypoint.sh +ENTRYPOINT ["/entrypoint.sh"] diff --git a/external-import/cvelistv5/README.md b/external-import/cvelistv5/README.md new file mode 100644 index 00000000000..27765bc6b22 --- /dev/null +++ b/external-import/cvelistv5/README.md @@ -0,0 +1,161 @@ +# CVEProject cvelistV5 connector + +An alternative CVE connector that fetches updates straight from the +[CVEProject/cvelistV5](https://github.com/CVEProject/cvelistV5) GitHub +repository instead of querying the NVD REST API. The connector clones the +repository locally and uses `git log` to discover the records that were +added or modified between two runs. + +## Summary + +- [Introduction](#introduction) +- [Requirements](#requirements) +- [Configuration variables](#configuration-variables) +- [Deployment](#deployment) + - [Docker deployment](#docker-deployment) + - [Manual deployment](#manual-deployment) +- [Behavior](#behavior) + - [Initial population](#initial-population) + - [Pull CVE updates](#pull-cve-updates) + - [Errors](#errors) +- [Usage](#usage) +- [Sources](#sources) + +--- + +### Introduction + +CVE records are fetched from the [CVEProject/cvelistV5](https://github.com/CVEProject/cvelistV5) +repository. Each record follows the [CVE v5.1 schema](https://github.com/CVEProject/cve-schema/tree/main) +and is transformed into a STIX 2.1 `Vulnerability` object. Information that +cannot be expressed natively in STIX 2.1 is attached as STIX `Note` objects +linked to the vulnerability. + +Extra information that the connector exposes as notes includes: + +- **Workarounds** +- **Solutions** +- **Configurations** that make the vulnerability more severe +- **Exploits** that are publicly documented + +When the affected products of a CVE expose `cpes` or `versions` entries, the +connector also creates `Software` and `Identity` (vendor) objects, plus the +relationships between them (`software has vulnerability`, +`software related-to vendor`). This makes it possible to display the +organizations exposed to a given vulnerability by relying on existing +`Software` observables. + +### Requirements + +- OpenCTI Platform version 6.6 or higher +- Outbound HTTPS access to `github.com` so the connector can clone and pull + the upstream repository +- A persistent volume for the clone (a few GB) when running in Docker + +### Configuration variables + +Below are the parameters you need to set for OpenCTI connectivity: + +| Parameter | config.yml | Docker environment variable | Mandatory | Description | +|---------------|------------|-----------------------------|-----------|------------------------------------------------------| +| OpenCTI URL | `url` | `OPENCTI_URL` | Yes | The URL of the OpenCTI platform. | +| OpenCTI Token | `token` | `OPENCTI_TOKEN` | Yes | The default admin token set in the OpenCTI platform. | + +Below are the generic connector parameters: + +| Parameter | config.yml | Docker environment variable | Default | Mandatory | Description | +|-------------------------|---------------------|--------------------------------|--------------------------------------|-----------|---------------------------------------------------------------------------------------------------| +| Connector ID | `id` | `CONNECTOR_ID` | / | Yes | A unique `UUIDv4` identifier for this connector instance. | +| Connector Name | `name` | `CONNECTOR_NAME` | `CVEProject cvelistV5` | No | Name of the connector as displayed in the OpenCTI UI. | +| Connector Scope | `scope` | `CONNECTOR_SCOPE` | `identity,vulnerability,software` | No | The scope of data produced by the connector. | +| Log Level | `log_level` | `CONNECTOR_LOG_LEVEL` | `info` | No | Verbosity of the logs: `debug`, `info`, `warn`, or `error`. | +| Duration Period | `duration_period` | `CONNECTOR_DURATION_PERIOD` | `PT1H` | No | ISO 8601 duration between two runs (e.g. `PT1H` for hourly, `P1D` for daily). | + +Below are the connector specific parameters: + +| Parameter | config.yml | Docker environment variable | Default | Mandatory | Description | +|----------------------|----------------------|--------------------------------|--------------------------------------------------|-----------|--------------------------------------------------------------------------------------------------------------------------| +| Repository URL | `repo_url` | `CVELISTV5_REPO_URL` | `https://github.com/CVEProject/cvelistV5.git` | No | URL of the upstream git repository. Override only if you maintain a private mirror. | +| Repository branch | `repo_branch` | `CVELISTV5_REPO_BRANCH` | `main` | No | Branch to track in the upstream repository. | +| Local clone path | `local_path` | `CVELISTV5_LOCAL_PATH` | `/opt/cvelistV5` | No | Local path where the clone is kept. Should map to a persistent volume in production. | +| History start year | `history_start_year` | `CVELISTV5_HISTORY_START_YEAR` | `2024` | No | Oldest year of CVE records to import on the **initial** run. Minimum recommended value is `2019` for CVSS v3.1 coverage. | + +### Deployment + +#### Docker deployment + +Build a docker image using the provided `Dockerfile`: + +```shell +docker build . -t opencti/connector-cvelistv5:latest +``` + +Update the environment variables in `docker-compose.yml` with the appropriate +values for your environment, then start the container: + +```shell +docker compose up -d +``` + +In production, mount a named volume on `/opt/cvelistV5` so the clone survives +container restarts (a sample volume declaration is provided in +`docker-compose.yml`). + +#### Manual deployment + +Create `config.yml` from `config.yml.sample` and adjust the configuration +variables (especially `ChangeMe` placeholders). + +Install the Python dependencies, preferably in a virtual environment: + +```shell +pip3 install -r src/requirements.txt +``` + +Then start the connector from the `src` directory: + +```shell +python3 main.py +``` + +### Behavior + +#### Initial population + +For the first run, the connector clones `CVEProject/cvelistV5`. Depending on +network throughput this can take a few minutes. Once the clone is complete, +the connector walks the `cves//` folders starting from +`history_start_year` and converts every CVE record into a STIX bundle which +is sent to OpenCTI. + +#### Pull CVE updates + +After the initial run, the connector waits for the duration defined by +`CONNECTOR_DURATION_PERIOD`. On every subsequent run it fetches the latest +commits, lists the JSON files that changed since the previous run, and +re-imports them. The state stores the ISO 8601 timestamp of the previous run +under the key `last_run`. + +#### Errors + +Per-record failures are logged with the offending CVE identifier and the +connector keeps processing the remaining files. Runs that fail before any +record is processed (typically network errors during the `git fetch`) are +reported as failed work in the OpenCTI UI. + +### Usage + +After installation, the connector requires no manual interaction. It will +run periodically according to the configured duration. To force a run, open +*Data* → *Connectors* in OpenCTI, find the connector and click the refresh +icon. + +The Software objects created by the connector can be linked to your +organizations via the standard OpenCTI relationship editor, in order to +visualize the vulnerabilities affecting your fleet. + +### Sources + +- [The CVE Project repository](https://github.com/CVEProject/cvelistV5) +- [Default CVE connector](https://github.com/OpenCTI-Platform/connectors/tree/master/external-import/cve) +- [CISA KEV connector](https://github.com/OpenCTI-Platform/connectors/tree/master/external-import/cisa-known-exploited-vulnerabilities) diff --git a/external-import/cvelistv5/__metadata__/connector_manifest.json b/external-import/cvelistv5/__metadata__/connector_manifest.json new file mode 100644 index 00000000000..761e6d28884 --- /dev/null +++ b/external-import/cvelistv5/__metadata__/connector_manifest.json @@ -0,0 +1,22 @@ +{ + "title": "CVEProject cvelistV5", + "slug": "cvelistv5", + "description": "Alternative CVE connector that fetches updates directly from the CVEProject/cvelistV5 GitHub repository instead of querying the NVD REST API. The connector keeps a local clone of the upstream repository, uses git history to detect modified records between runs, and converts each CVE v5.1 record into STIX 2.1 Vulnerability objects. Workarounds, solutions, configurations and exploits exposed by upstream are attached as STIX Note objects. When the affected products of a CVE expose CPEs or version ranges, Software and Identity (vendor) objects are also created so analysts can model the exposure of their fleet.", + "short_description": "Fetch CVE records straight from the CVEProject/cvelistV5 GitHub repository and import them as STIX 2.1 Vulnerability objects.", + "logo": null, + "use_cases": [ + "Vulnerability Management", + "Open Source Threat Intel" + ], + "verified": false, + "last_verified_date": null, + "playbook_supported": false, + "max_confidence_level": 80, + "support_version": ">=6.6.0", + "subscription_link": null, + "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/external-import/cvelistv5", + "manager_supported": false, + "container_version": "rolling", + "container_image": "opencti/connector-cvelistv5", + "container_type": "EXTERNAL_IMPORT" +} diff --git a/external-import/cvelistv5/docker-compose.yml b/external-import/cvelistv5/docker-compose.yml new file mode 100644 index 00000000000..35daaac5bee --- /dev/null +++ b/external-import/cvelistv5/docker-compose.yml @@ -0,0 +1,23 @@ +version: '3' +services: + connector-cvelistv5: + image: opencti/connector-cvelistv5:latest + environment: + - OPENCTI_URL=http://localhost + - OPENCTI_TOKEN=ChangeMe + - CONNECTOR_ID=ChangeMe + - CONNECTOR_NAME=CVEProject cvelistV5 + - CONNECTOR_SCOPE=identity,vulnerability,software + - CONNECTOR_LOG_LEVEL=info + - CONNECTOR_DURATION_PERIOD=PT1H # ISO 8601 duration period + # Optional overrides + # - CVELISTV5_REPO_URL=https://github.com/CVEProject/cvelistV5.git + # - CVELISTV5_REPO_BRANCH=main + # - CVELISTV5_LOCAL_PATH=/opt/cvelistV5 + - CVELISTV5_HISTORY_START_YEAR=2019 # Min 2019 to ensure CVSS v3.1 coverage + volumes: + - cvelistv5-clone:/opt/cvelistV5 + restart: always + +volumes: + cvelistv5-clone: diff --git a/external-import/cvelistv5/entrypoint.sh b/external-import/cvelistv5/entrypoint.sh new file mode 100644 index 00000000000..e58253e2949 --- /dev/null +++ b/external-import/cvelistv5/entrypoint.sh @@ -0,0 +1,5 @@ +#!/bin/sh +set -e + +cd /opt/opencti-connector-cvelistv5 +exec python3 main.py diff --git a/external-import/cvelistv5/src/config.yml.sample b/external-import/cvelistv5/src/config.yml.sample new file mode 100644 index 00000000000..a8a4f259fe0 --- /dev/null +++ b/external-import/cvelistv5/src/config.yml.sample @@ -0,0 +1,21 @@ +opencti: + url: 'http://localhost:8080' + token: 'ChangeMe' + +connector: + id: 'ChangeMe' + type: 'EXTERNAL_IMPORT' + name: 'CVEProject cvelistV5' + scope: 'identity,vulnerability,software' + log_level: 'info' + duration_period: 'PT1H' # ISO 8601 duration period + +cvelistv5: + # Upstream git repository. Override only if you mirror cvelistV5 internally. + repo_url: 'https://github.com/CVEProject/cvelistV5.git' + repo_branch: 'main' + # Local path where the clone is kept. Must be writable by the connector. + local_path: '/opt/cvelistV5' + # Oldest year of CVE records to import (initial run only). Most CVSS v3.1 + # metrics were back-filled from 2019 onwards. + history_start_year: 2019 diff --git a/external-import/cvelistv5/src/cve_processor.py b/external-import/cvelistv5/src/cve_processor.py new file mode 100644 index 00000000000..caace8e6e35 --- /dev/null +++ b/external-import/cvelistv5/src/cve_processor.py @@ -0,0 +1,352 @@ +"""Transform CVE 5.1 records into STIX 2.1 objects and send them to OpenCTI.""" + +from __future__ import annotations + +import json +import re +from typing import Any, Iterable + +import stix2 +from pycti import ( + Identity, + Note, + OpenCTIConnectorHelper, + StixCoreRelationship, + Vulnerability, +) + +# CVE record states that should not be ingested as live vulnerabilities. +SKIPPED_STATES = {"REJECTED", "RESERVED"} +CWE_PATTERN = re.compile(r"\bCWE-\d+\b") +SECTIONS_TO_NOTES = { + "workarounds": "workaround", + "solutions": "solution", + "exploits": "exploit", + "configurations": "configuration", +} +# CVSS extraction precedence (most recent / detailed metric first). +CVSS_VERSIONS = ("cvssV4_0", "cvssV3_1", "cvssV3_0") + + +class CVEProcessor: + """Convert CVE records to STIX bundles and push them to OpenCTI.""" + + def __init__(self, helper: OpenCTIConnectorHelper) -> None: + self.helper = helper + self.author = self._create_author() + + def process_cve_file(self, file_path: str, work_id: str) -> None: + with open(file_path, encoding="utf-8") as cve_file: + cve_data = json.load(cve_file) + + metadata = cve_data.get("cveMetadata") or {} + cve_id = metadata.get("cveId") + if not cve_id: + self.helper.connector_logger.warning( + "Skipping CVE record without an identifier.", {"file": file_path} + ) + return + + state = metadata.get("state") + if state in SKIPPED_STATES: + self.helper.connector_logger.debug( + "Skipping CVE record in non-public state.", + {"cve_id": cve_id, "state": state}, + ) + return + + stix_objects = self._cve_record_to_stix(cve_data) + if not stix_objects: + return + + bundle = self.helper.stix2_create_bundle(stix_objects) + self.helper.send_stix2_bundle(bundle, work_id=work_id, update=True) + self.helper.connector_logger.info( + "CVE record sent to OpenCTI.", {"cve_id": cve_id} + ) + + def _cve_record_to_stix(self, cve_data: dict[str, Any]) -> list[Any]: + metadata = cve_data.get("cveMetadata") or {} + containers = cve_data.get("containers") or {} + cna = containers.get("cna") or {} + adp_containers = containers.get("adp") or [] + + cve_id = metadata["cveId"] + published_date = self._normalize_date(metadata.get("datePublished")) + modified_date = self._normalize_date( + metadata.get("dateUpdated") or metadata.get("dateReserved") + ) + description = self._extract_description(cna) + if description is None: + self.helper.connector_logger.debug( + "CVE record has no English description, skipping.", + {"cve_id": cve_id}, + ) + return [] + + external_references = self._extract_external_references(cna) + labels = self._extract_labels(cna) + custom_properties = self._extract_cvss_properties(cna, adp_containers) + + vulnerability = stix2.Vulnerability( + id=Vulnerability.generate_id(cve_id), + name=cve_id, + description=description, + created=published_date, + modified=modified_date, + external_references=external_references or None, + created_by_ref=self.author["id"], + custom_properties=custom_properties, + labels=labels or None, + allow_custom=True, + ) + stix_objects: list[Any] = [self.author, vulnerability] + + for product in cna.get("affected") or []: + stix_objects.extend(self._build_affected_objects(product, vulnerability)) + + for section, label in SECTIONS_TO_NOTES.items(): + entries = cna.get(section) + if not entries: + continue + stix_objects.extend( + self._create_related_notes(label, entries, vulnerability) + ) + + return stix_objects + + def _build_affected_objects( + self, product: dict[str, Any], vulnerability: stix2.Vulnerability + ) -> list[Any]: + product_name = product.get("product") or product.get("packageName") + if not product_name: + return [] + + vendor_name = product.get("vendor") or "Unknown" + software_vendor = stix2.Identity( + id=Identity.generate_id(vendor_name, "organization"), + name=vendor_name, + identity_class="organization", + description="Software Vendor", + created_by_ref=self.author["id"], + custom_properties={"x_opencti_organization_type": "vendor"}, + allow_custom=True, + ) + + stix_objects: list[Any] = [software_vendor] + + cpes = product.get("cpes") or [] + if cpes: + for cpe in cpes: + version_value = self._extract_cpe_version(cpe) + stix_objects.extend( + self._create_affected_software( + product_name, + version_value, + software_vendor, + vulnerability, + cpe=cpe, + ) + ) + return stix_objects + + for version in product.get("versions") or []: + if version.get("status") != "affected": + continue + version_value = self._format_version(version) + stix_objects.extend( + self._create_affected_software( + f"{product_name} {version.get('version', '')}".strip(), + version_value, + software_vendor, + vulnerability, + ) + ) + return stix_objects + + def _create_affected_software( + self, + name: str, + version: str, + vendor: stix2.Identity, + vulnerability: stix2.Vulnerability, + cpe: str = "", + ) -> list[Any]: + software = stix2.Software( + name=name, + version=version or "unspecified", + vendor=vendor.name, + cpe=cpe or None, + custom_properties={"x_opencti_created_by_ref": self.author["id"]}, + allow_custom=True, + ) + + vulnerability_relationship = stix2.Relationship( + id=StixCoreRelationship.generate_id("has", software.id, vulnerability.id), + relationship_type="has", + source_ref=software.id, + target_ref=vulnerability.id, + created_by_ref=self.author["id"], + allow_custom=True, + ) + + software_vendor_relationship = stix2.Relationship( + id=StixCoreRelationship.generate_id("related-to", software.id, vendor.id), + relationship_type="related-to", + description="This software is maintained by", + source_ref=software.id, + target_ref=vendor.id, + created_by_ref=self.author["id"], + allow_custom=True, + ) + + return [software, vulnerability_relationship, software_vendor_relationship] + + def _create_related_notes( + self, + section_label: str, + entries: Iterable[dict[str, Any]], + vulnerability: stix2.Vulnerability, + ) -> list[Any]: + stix_objects: list[Any] = [] + for entry in entries: + content = entry.get("value") + if not content: + continue + note = stix2.Note( + id=Note.generate_id(created=None, content=content), + abstract=f"{vulnerability.name} - {section_label}", + content=content, + object_refs=[vulnerability.id], + labels=[section_label], + created_by_ref=self.author["id"], + allow_custom=True, + ) + stix_objects.append(note) + return stix_objects + + @staticmethod + def _normalize_date(value: str | None) -> str | None: + if not value: + return None + if value.endswith("Z"): + return value + # CVE feeds occasionally publish ``+00:00`` and bare datetimes. STIX 2.1 + # expects a ``Z`` suffix, so normalize accordingly. + if value.endswith("+00:00"): + return f"{value[:-6]}Z" + return f"{value}Z" + + @staticmethod + def _extract_description(cna: dict[str, Any]) -> str | None: + descriptions = cna.get("descriptions") or [] + for description in descriptions: + if description.get("lang", "").lower().startswith("en"): + value = description.get("value") + if value: + return value + if descriptions: + return descriptions[0].get("value") + return None + + @staticmethod + def _extract_external_references( + cna: dict[str, Any], + ) -> list[stix2.ExternalReference]: + references: list[stix2.ExternalReference] = [] + for reference in cna.get("references") or []: + url = reference.get("url") + if not url: + continue + source_name = reference.get("name") + if not source_name: + tags = reference.get("tags") or [] + source_name = tags[0] if tags else url + references.append(stix2.ExternalReference(source_name=source_name, url=url)) + return references + + @staticmethod + def _extract_labels(cna: dict[str, Any]) -> list[str]: + labels: list[str] = [] + seen: set[str] = set() + for problem_type in cna.get("problemTypes") or []: + for entry in problem_type.get("descriptions") or []: + cwe_id = entry.get("cweId") + description = entry.get("description") or "" + if not cwe_id: + match = CWE_PATTERN.search(description) + if match: + cwe_id = match.group(0) + if cwe_id and cwe_id not in seen: + seen.add(cwe_id) + labels.append(cwe_id) + if description: + clean = CWE_PATTERN.sub("", description).strip(" :-") + if clean and clean not in seen: + seen.add(clean) + labels.append(clean) + return labels + + @classmethod + def _extract_cvss_properties( + cls, + cna: dict[str, Any], + adp_containers: list[dict[str, Any]], + ) -> dict[str, Any]: + metric = cls._find_cvss_metric(cna.get("metrics") or []) + if metric is None: + for adp in adp_containers: + metric = cls._find_cvss_metric(adp.get("metrics") or []) + if metric is not None: + break + if metric is None: + return {} + + return { + "x_opencti_cvss_base_score": metric.get("baseScore", ""), + "x_opencti_cvss_base_severity": metric.get("baseSeverity", ""), + "x_opencti_cvss_attack_vector": metric.get("attackVector", ""), + "x_opencti_cvss_integrity_impact": metric.get("integrityImpact", ""), + "x_opencti_cvss_availability_impact": metric.get("availabilityImpact", ""), + "x_opencti_cvss_confidentiality_impact": metric.get( + "confidentialityImpact", "" + ), + } + + @staticmethod + def _find_cvss_metric(metrics: list[dict[str, Any]]) -> dict[str, Any] | None: + for version in CVSS_VERSIONS: + for metric in metrics: + if version in metric and isinstance(metric[version], dict): + return metric[version] + return None + + @staticmethod + def _extract_cpe_version(cpe: str) -> str: + parts = cpe.split(":") + if len(parts) >= 7: + update = parts[6] + if update not in ("-", "*", ""): + return f"{parts[5]}-{update}" + return parts[5] + if len(parts) >= 6: + return parts[5] + if len(parts) >= 5: + return parts[4] + return "" + + @staticmethod + def _format_version(version: dict[str, Any]) -> str: + if "lessThan" in version: + return f"<{version['lessThan']}" + if "lessThanOrEqual" in version: + return f"<={version['lessThanOrEqual']}" + return version.get("version", "") + + @staticmethod + def _create_author() -> stix2.Identity: + return stix2.Identity( + id=Identity.generate_id("The CVE Program", "organization"), + name="The CVE Program", + identity_class="organization", + ) diff --git a/external-import/cvelistv5/src/git_handler.py b/external-import/cvelistv5/src/git_handler.py new file mode 100644 index 00000000000..dd4a2782ba2 --- /dev/null +++ b/external-import/cvelistv5/src/git_handler.py @@ -0,0 +1,133 @@ +"""Git interactions for the cvelistV5 connector. + +The connector consumes CVE records straight from the CVEProject/cvelistV5 +GitHub repository. This module is responsible for keeping a local clone in +sync and listing the JSON files that need to be (re)processed for a given +connector run. +""" + +from __future__ import annotations + +import logging +import os +from datetime import datetime, timezone +from typing import Iterable + +import git + +CVES_DIRECTORY = "cves" +# Files that live inside the repository but should never be processed as CVE +# records. They are aggregate artifacts produced by upstream tooling. +EXCLUDED_FILE_SUFFIXES = ("delta.json", "deltaLog.json") + + +class GitHandler: + """Wrapper around :mod:`git` used to keep a local clone in sync.""" + + def __init__( + self, + repo_url: str, + local_path: str, + branch: str = "main", + logger: logging.Logger | None = None, + ) -> None: + self.repo_url = repo_url + self.local_path = local_path + self.branch = branch + self.logger = logger or logging.getLogger(__name__) + self.repo = self._init_repo() + self.last_run_time: datetime | None = None + + def _init_repo(self) -> git.Repo: + """Return a :class:`git.Repo` rooted at ``self.local_path``. + + Clones the upstream repository when the directory is empty, otherwise + opens the existing clone. + """ + if not os.path.exists(self.local_path) or not os.listdir(self.local_path): + self.logger.info( + "Cloning upstream repository.", + {"repo_url": self.repo_url, "local_path": self.local_path}, + ) + os.makedirs(self.local_path, exist_ok=True) + return git.Repo.clone_from( + self.repo_url, + self.local_path, + branch=self.branch, + single_branch=True, + ) + return git.Repo(self.local_path) + + def pull_updates(self) -> None: + """Hard-reset the clone to the latest remote branch tip. + + Using ``fetch`` + ``reset --hard`` instead of ``pull`` makes the + operation idempotent and avoids merge conflicts if the working tree + is somehow modified between runs. + """ + origin = self.repo.remotes.origin + origin.fetch(self.branch, prune=True) + remote_ref = f"origin/{self.branch}" + self.repo.git.reset("--hard", remote_ref) + + def get_updated_files(self, start_year: int) -> list[str]: + """Return the list of CVE JSON files to (re)process for this run.""" + if self.last_run_time is None: + files = self._get_all_files_from_year(start_year) + else: + files = list(self._get_files_since(self.last_run_time, start_year)) + return files + + def update_last_run_time(self, run_time: datetime | None = None) -> None: + if run_time is None: + run_time = datetime.now(timezone.utc) + elif run_time.tzinfo is None: + run_time = run_time.replace(tzinfo=timezone.utc) + self.last_run_time = run_time + + def _get_all_files_from_year(self, start_year: int) -> list[str]: + all_files: list[str] = [] + cves_path = os.path.join(self.local_path, CVES_DIRECTORY) + if not os.path.isdir(cves_path): + self.logger.warning( + "Expected CVE directory is missing in the clone.", + {"path": cves_path}, + ) + return all_files + + for folder_name in sorted(os.listdir(cves_path)): + if not folder_name.isdigit(): + continue + if int(folder_name) < start_year: + continue + folder_path = os.path.join(cves_path, folder_name) + for root, _, files in os.walk(folder_path): + for file_name in files: + if not file_name.endswith(".json"): + continue + if file_name.endswith(EXCLUDED_FILE_SUFFIXES): + continue + all_files.append(os.path.join(root, file_name)) + return all_files + + def _get_files_since(self, since: datetime, start_year: int) -> Iterable[str]: + commits = list(self.repo.iter_commits(self.branch, since=since.isoformat())) + updated_files: set[str] = set() + for commit in commits: + updated_files.update(commit.stats.files.keys()) + + prefix = f"{CVES_DIRECTORY}/" + for relative_path in updated_files: + if not relative_path.startswith(prefix): + continue + if not relative_path.endswith(".json"): + continue + if relative_path.endswith(EXCLUDED_FILE_SUFFIXES): + continue + # Records are organised under ``cves//...``. Skip records + # older than the configured horizon. + parts = relative_path.split("/") + if len(parts) >= 2 and parts[1].isdigit(): + if int(parts[1]) < start_year: + continue + yield os.path.join(self.local_path, relative_path) diff --git a/external-import/cvelistv5/src/main.py b/external-import/cvelistv5/src/main.py new file mode 100644 index 00000000000..7e7da1a0570 --- /dev/null +++ b/external-import/cvelistv5/src/main.py @@ -0,0 +1,186 @@ +"""OpenCTI cvelistV5 connector entrypoint.""" + +import os +import sys +import traceback +from datetime import datetime, timezone + +import yaml +from cve_processor import CVEProcessor +from git_handler import GitHandler +from pycti import OpenCTIConnectorHelper, get_config_variable + +DEFAULT_REPO_URL = "https://github.com/CVEProject/cvelistV5.git" +DEFAULT_REPO_BRANCH = "main" +DEFAULT_LOCAL_PATH = "/opt/cvelistV5" +DEFAULT_START_YEAR = 2024 +MIN_START_YEAR = 1999 + + +class CVEListV5Connector: + """External import connector that ingests CVEs from CVEProject/cvelistV5.""" + + def __init__(self) -> None: + config_file_path = os.path.join( + os.path.dirname(os.path.abspath(__file__)), "config.yml" + ) + if os.path.isfile(config_file_path): + with open(config_file_path, encoding="utf-8") as config_file: + config = yaml.safe_load(config_file) or {} + else: + config = {} + + self.helper = OpenCTIConnectorHelper(config) + + self.repo_url = ( + get_config_variable( + "CVELISTV5_REPO_URL", + ["cvelistv5", "repo_url"], + config, + ) + or DEFAULT_REPO_URL + ) + self.repo_branch = ( + get_config_variable( + "CVELISTV5_REPO_BRANCH", + ["cvelistv5", "repo_branch"], + config, + ) + or DEFAULT_REPO_BRANCH + ) + self.local_path = ( + get_config_variable( + "CVELISTV5_LOCAL_PATH", + ["cvelistv5", "local_path"], + config, + ) + or DEFAULT_LOCAL_PATH + ) + + start_year = get_config_variable( + "CVELISTV5_HISTORY_START_YEAR", + ["cvelistv5", "history_start_year"], + config, + isNumber=True, + default=DEFAULT_START_YEAR, + ) + try: + start_year = int(start_year) + except (TypeError, ValueError): + start_year = DEFAULT_START_YEAR + if start_year < MIN_START_YEAR: + self.helper.connector_logger.warning( + "Configured history_start_year is below the minimum supported year, " + "falling back to default.", + {"configured": start_year, "minimum": MIN_START_YEAR}, + ) + start_year = DEFAULT_START_YEAR + self.start_year = start_year + + self.duration_period = get_config_variable( + "CONNECTOR_DURATION_PERIOD", + ["connector", "duration_period"], + config, + default="PT1H", + ) + + # Lazy initialized inside _process_updates() so a missing / unreachable + # upstream repository does not prevent the connector container from booting. + self.git_handler: GitHandler | None = None + self.cve_processor = CVEProcessor(self.helper) + + def _ensure_git_handler(self) -> GitHandler: + if self.git_handler is None: + self.helper.connector_logger.info( + "Initializing local clone of cvelistV5 repository (this may take a " + "few minutes on first run)...", + {"repo_url": self.repo_url, "local_path": self.local_path}, + ) + self.git_handler = GitHandler( + repo_url=self.repo_url, + local_path=self.local_path, + branch=self.repo_branch, + logger=self.helper.connector_logger, + ) + state = self.helper.get_state() or {} + last_run_iso = state.get("last_run") + if last_run_iso: + try: + self.git_handler.last_run_time = datetime.fromisoformat( + last_run_iso + ) + except ValueError: + self.helper.connector_logger.warning( + "Could not parse last_run timestamp from state, " + "falling back to full import.", + {"last_run": last_run_iso}, + ) + self.helper.connector_logger.info("Local clone is ready.") + return self.git_handler + + def _process_updates(self) -> None: + run_started_at = datetime.now(timezone.utc) + friendly_name = ( + f"CVEListV5 run @ {run_started_at.strftime('%Y-%m-%d %H:%M:%S')} UTC" + ) + work_id = self.helper.api.work.initiate_work( + self.helper.connect_id, friendly_name + ) + try: + git_handler = self._ensure_git_handler() + git_handler.pull_updates() + files_to_process = git_handler.get_updated_files(self.start_year) + self.helper.connector_logger.info( + "Processing CVE records.", {"files": len(files_to_process)} + ) + + processed = 0 + failed = 0 + for file_path in files_to_process: + self.helper.connector_logger.debug( + "Processing CVE file.", {"file": file_path} + ) + try: + self.cve_processor.process_cve_file(file_path, work_id) + processed += 1 + except Exception as exc: # noqa: BLE001 - we want to keep going + failed += 1 + self.helper.connector_logger.error( + "Could not process CVE file.", + {"file": file_path, "error": str(exc)}, + ) + + git_handler.update_last_run_time(run_started_at) + self.helper.set_state( + { + "last_run": run_started_at.isoformat(), + "last_run_processed": processed, + "last_run_failed": failed, + } + ) + + message = ( + f"CVEListV5 connector run done: {processed} processed, " + f"{failed} failed (total candidates: {len(files_to_process)})." + ) + self.helper.connector_logger.info(message) + self.helper.api.work.to_processed(work_id, message) + except Exception as exc: # noqa: BLE001 + message = f"CVEListV5 connector run failed: {exc}" + self.helper.connector_logger.error(message) + self.helper.api.work.to_processed(work_id, message, in_error=True) + + def start(self) -> None: + self.helper.connector_logger.info("Starting CVEListV5 connector.") + self.helper.schedule_iso( + message_callback=self._process_updates, + duration_period=self.duration_period, + ) + + +if __name__ == "__main__": + try: + CVEListV5Connector().start() + except Exception: + traceback.print_exc() + sys.exit(1) diff --git a/external-import/cvelistv5/src/requirements.txt b/external-import/cvelistv5/src/requirements.txt new file mode 100644 index 00000000000..9887298c331 --- /dev/null +++ b/external-import/cvelistv5/src/requirements.txt @@ -0,0 +1,4 @@ +pycti==7.260515.0 +stix2~=3.0 +GitPython~=3.1 +PyYAML>=6.0,<7 diff --git a/external-import/cybelangel/Dockerfile b/external-import/cybelangel/Dockerfile new file mode 100644 index 00000000000..e30fe144eb5 --- /dev/null +++ b/external-import/cybelangel/Dockerfile @@ -0,0 +1,17 @@ +FROM python:3.12-alpine +ENV CONNECTOR_TYPE=EXTERNAL_IMPORT + +# Copy the connector +COPY src /opt/opencti-connector-cybelangel +WORKDIR /opt/opencti-connector-cybelangel + +# Install Python modules +# hadolint ignore=DL3003 +RUN apk --no-cache add git build-base libmagic && \ + pip3 install --no-cache-dir -r requirements.txt && \ + apk del git build-base + +# Expose and entrypoint +COPY entrypoint.sh / +RUN chmod +x /entrypoint.sh +ENTRYPOINT ["/entrypoint.sh"] diff --git a/external-import/cybelangel/README.md b/external-import/cybelangel/README.md new file mode 100644 index 00000000000..d94e86e9abd --- /dev/null +++ b/external-import/cybelangel/README.md @@ -0,0 +1,104 @@ +# CybelAngel connector + +External-import connector that ingests _claimed attacks_ from the +[CybelAngel platform](https://platform.cybelangel.com/) and maps them into +STIX 2.1 objects: intrusion sets, campaigns, victim organizations, sectors, +locations and the relationships between them. + +## Requirements + +- OpenCTI Platform >= 6.7.0 +- Python >= 3.12 (matches the container base image) +- A CybelAngel API client (`client_id` / `client_secret`). The OAuth2 access + token returned by `/oauth/token` is valid for 1 hour and the platform + allows up to 2,000 tokens per month, so the connector reuses the same + token within a run and only re-authenticates on a `401` response. + See the [official CybelAngel authentication docs](https://developers.cybelangel.com/docs/cybelangel-platform-api/b6b6c2d4906e9-authentication) + for details. + +## Configuration variables + +The connector reads its configuration from `config.yml` (manual deployment) +or from environment variables (Docker deployment). + +### OpenCTI connectivity + +| Parameter | config.yml | Docker environment variable | Mandatory | Description | +|---------------|------------|-----------------------------|-----------|------------------------------------------------------| +| OpenCTI URL | `url` | `OPENCTI_URL` | Yes | URL of the OpenCTI platform. | +| OpenCTI Token | `token` | `OPENCTI_TOKEN` | Yes | The default admin token configured in OpenCTI. | + +### Generic connector parameters + +| Parameter | config.yml | Docker environment variable | Default | Mandatory | Description | +|--------------------|---------------------|-----------------------------|---------------|-----------|----------------------------------------------------------------------------| +| Connector ID | `id` | `CONNECTOR_ID` | | Yes | A unique `UUIDv4` identifier for this connector instance. | +| Connector Type | `type` | `CONNECTOR_TYPE` | `EXTERNAL_IMPORT` | No | Must be `EXTERNAL_IMPORT`. | +| Connector Name | `name` | `CONNECTOR_NAME` | `CybelAngel` | No | Name of the connector as displayed in the OpenCTI UI. | +| Connector Scope | `scope` | `CONNECTOR_SCOPE` | `all` | No | Scope of the connector. | +| Log Level | `log_level` | `CONNECTOR_LOG_LEVEL` | `info` | No | One of `debug`, `info`, `warn`, `error`. | +| Duration Period | `duration_period` | `CONNECTOR_DURATION_PERIOD` | `PT6H` | No | ISO 8601 duration between two runs (e.g. `PT6H` for 6 hours, `P1D` daily). | + +### CybelAngel specific parameters + +| Parameter | config.yml | Docker environment variable | Default | Mandatory | Description | +|------------------|------------------|-----------------------------|-----------------------------------------------|-----------|------------------------------------------------------------------------------------------------------------------------------------------| +| Client ID | `client_id` | `CYBELANGEL_CLIENT_ID` | | Yes | OAuth2 client ID provided by CybelAngel. | +| Client Secret | `client_secret` | `CYBELANGEL_CLIENT_SECRET` | | Yes | OAuth2 client secret provided by CybelAngel. | +| API URL | `api_url` | `CYBELANGEL_API_URL` | `https://platform.cybelangel.com` | No | Base URL of the CybelAngel platform API. | +| Auth URL | `auth_url` | `CYBELANGEL_AUTH_URL` | `https://auth.cybelangel.com/oauth/token` | No | OAuth2 token endpoint. | +| Audience | `audience` | `CYBELANGEL_AUDIENCE` | _Derived from `api_url`_ | No | OAuth2 `audience` claim sent during client-credentials exchange. Defaults to the configured `api_url` (with a trailing slash). | +| Marking | `marking` | `CYBELANGEL_MARKING` | `TLP:AMBER+STRICT` | No | TLP marking attached to every imported entity. Supported: `TLP:CLEAR`, `TLP:WHITE`, `TLP:GREEN`, `TLP:AMBER`, `TLP:AMBER+STRICT`, `TLP:RED`. | +| Fetch Period | `fetch_period` | `CYBELANGEL_FETCH_PERIOD` | `7` | No | Number of days to look back on the **first** run. Use `all` to fetch every available claimed attack. | + +## Behavior + +- Authenticates with the CybelAngel API using OAuth2 client credentials. +- On every run, queries `GET {api_url}/api/v1/threat-intelligence/claimed-attacks` + for the period delimited by `start_date` / `end_date` (the previous + successful `last_run` UTC timestamp on subsequent runs, falling back to + `fetch_period` days on the first run). +- Each claimed attack is converted into a STIX 2.1 bundle containing: + - One `Intrusion Set` per threat actor. + - One `Location` per victim country and one `Identity` (class `class`) + per victim industry. + - One `Identity` (class `organization`) per victim organization. + - One `Campaign` per `(threat actor, victim)` pair (or a single generic + campaign when no victim is available). + - The corresponding `targets` / `attributed-to` relationships between + every campaign / intrusion set and the victim / location / sector + entities. +- The bundle is sent to OpenCTI through the standard ingestion queue via + `send_stix2_bundle`. The connector advances `last_run` only when the + whole run completes successfully, so a transient failure does not cause + data to be skipped on the next run. +- Scheduling is delegated to `OpenCTIConnectorHelper.schedule_iso`, which + honours the configured `CONNECTOR_DURATION_PERIOD` and applies + auto-backpressure when the OpenCTI queue is busy. + +## Deployment + +### Docker + +```shell +docker build . -t opencti/connector-cybelangel:latest +docker compose up -d +``` + +### Manual + +The connector loads its configuration from `src/config.yml` (same directory +as `cybelangel.py`). Create that file from the provided sample, install +dependencies and start the connector: + +```shell +cp src/config.yml.sample src/config.yml +# edit src/config.yml and fill in opencti.token, cybelangel.client_id, +# cybelangel.client_secret, ... +pip3 install -r src/requirements.txt +python3 src/cybelangel.py +``` + +## Sources + +- [CybelAngel platform API documentation](https://developers.cybelangel.com/docs/cybelangel-platform-api) diff --git a/external-import/cybelangel/__metadata__/connector_manifest.json b/external-import/cybelangel/__metadata__/connector_manifest.json new file mode 100644 index 00000000000..2e26fb2a010 --- /dev/null +++ b/external-import/cybelangel/__metadata__/connector_manifest.json @@ -0,0 +1,22 @@ +{ + "title": "CybelAngel", + "slug": "cybelangel", + "description": "Imports CybelAngel claimed-attack threat intelligence into OpenCTI as STIX 2.1 objects. For every claimed attack, the connector creates Intrusion Sets for the threat actors, Locations for the targeted countries, Identity objects for the victim organizations and impacted industries, a Campaign per (threat actor, victim) pair, and the corresponding `targets` / `attributed-to` relationships. Authentication uses OAuth2 client credentials against the CybelAngel platform API.", + "short_description": "Imports CybelAngel claimed-attack threat intelligence as STIX 2.1 Campaigns / Intrusion Sets / victim Identities.", + "logo": null, + "use_cases": [ + "Threat Intelligence", + "Commercial Threat Intel" + ], + "verified": true, + "last_verified_date": null, + "playbook_supported": false, + "max_confidence_level": 50, + "support_version": ">=6.7.0", + "subscription_link": "https://cybelangel.com/contact-us/", + "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/external-import/cybelangel", + "manager_supported": false, + "container_version": "rolling", + "container_image": "opencti/connector-cybelangel", + "container_type": "EXTERNAL_IMPORT" +} diff --git a/external-import/cybelangel/docker-compose.yml b/external-import/cybelangel/docker-compose.yml new file mode 100644 index 00000000000..a89d9957cb7 --- /dev/null +++ b/external-import/cybelangel/docker-compose.yml @@ -0,0 +1,22 @@ +version: '3' +services: + connector-cybelangel: + image: opencti/connector-cybelangel:rolling + environment: + - OPENCTI_URL=http://opencti:8080 + - OPENCTI_TOKEN=ChangeMe + - CONNECTOR_ID=ChangeMe + - CONNECTOR_TYPE=EXTERNAL_IMPORT + - CONNECTOR_NAME=CybelAngel + - CONNECTOR_SCOPE=all + - CONNECTOR_LOG_LEVEL=info + - CONNECTOR_DURATION_PERIOD=PT6H # ISO 8601 duration period (every 6 hours) + - CYBELANGEL_CLIENT_ID=ChangeMe # Required + - CYBELANGEL_CLIENT_SECRET=ChangeMe # Required + - CYBELANGEL_API_URL=https://platform.cybelangel.com + - CYBELANGEL_AUTH_URL=https://auth.cybelangel.com/oauth/token + # OAuth2 "audience" claim. Defaults to CYBELANGEL_API_URL with a trailing slash. + # - CYBELANGEL_AUDIENCE=https://platform.cybelangel.com/ + - CYBELANGEL_MARKING=TLP:AMBER+STRICT + - CYBELANGEL_FETCH_PERIOD=7 # Number of days to look back on the first run. Use "all" to fetch all available data. + restart: always diff --git a/external-import/cybelangel/entrypoint.sh b/external-import/cybelangel/entrypoint.sh new file mode 100644 index 00000000000..de60f46279b --- /dev/null +++ b/external-import/cybelangel/entrypoint.sh @@ -0,0 +1,9 @@ +#!/bin/sh +set -e + +# Correct working directory +cd /opt/opencti-connector-cybelangel + +# Replace the shell with the Python process so it receives SIGTERM/SIGINT +# directly and Docker can perform a graceful shutdown. +exec python3 cybelangel.py diff --git a/external-import/cybelangel/src/config.yml.sample b/external-import/cybelangel/src/config.yml.sample new file mode 100644 index 00000000000..27b6f03cf67 --- /dev/null +++ b/external-import/cybelangel/src/config.yml.sample @@ -0,0 +1,20 @@ +opencti: + url: 'http://localhost:8080' + token: 'ChangeMe' + +connector: + id: 'ChangeMe' + type: 'EXTERNAL_IMPORT' + name: 'CybelAngel' + scope: 'all' + log_level: 'info' + duration_period: 'PT6H' # ISO 8601 duration period (every 6 hours) + +cybelangel: + client_id: 'ChangeMe' # Required + client_secret: 'ChangeMe' # Required + api_url: 'https://platform.cybelangel.com' + auth_url: 'https://auth.cybelangel.com/oauth/token' + # audience: 'https://platform.cybelangel.com/' # Optional. Defaults to api_url with a trailing slash. + marking: 'TLP:AMBER+STRICT' # TLP:CLEAR, TLP:GREEN, TLP:AMBER, TLP:AMBER+STRICT, TLP:RED + fetch_period: 7 # Days to look back on the first run. Use "all" to fetch all available data. diff --git a/external-import/cybelangel/src/cybelangel.py b/external-import/cybelangel/src/cybelangel.py new file mode 100644 index 00000000000..c91c374a69c --- /dev/null +++ b/external-import/cybelangel/src/cybelangel.py @@ -0,0 +1,989 @@ +import os +import sys +import time +from datetime import datetime, timedelta, timezone + +import requests +import stix2 +import yaml +from pycti import ( + Campaign, + Identity, + IntrusionSet, + Location, + MarkingDefinition, + OpenCTIConnectorHelper, + StixCoreRelationship, + get_config_variable, +) + + +class CybelAngel: + """Main class for the CybelAngel OpenCTI connector.""" + + def __init__(self): + """ + Initialize the CybelAngel connector by loading configuration and setting up the OpenCTI helper. + + """ + + # Instantiate the connector helper from config + try: + config_file_path = os.path.join( + os.path.dirname(os.path.abspath(__file__)), "config.yml" + ) + if os.path.isfile(config_file_path): + with open(config_file_path, encoding="utf-8") as config_file: + config = yaml.safe_load(config_file) or {} + else: + config = {} + + self.helper = OpenCTIConnectorHelper(config) + + # Extra config + self.opencti_url = get_config_variable( + "OPENCTI_URL", ["opencti", "url"], config, default="http://opencti:8080" + ) + self.opencti_token = get_config_variable( + "OPENCTI_TOKEN", ["opencti", "token"], config + ) + self.connector_id = get_config_variable( + "CONNECTOR_ID", ["connector", "id"], config + ) + self.connector_type = get_config_variable( + "CONNECTOR_TYPE", + ["connector", "type"], + config, + default="EXTERNAL_IMPORT", + ) + self.connector_name = get_config_variable( + "CONNECTOR_NAME", ["connector", "name"], config, default="CybelAngel" + ) + self.connector_scope = get_config_variable( + "CONNECTOR_SCOPE", ["connector", "scope"], config, default="all" + ) + self.connector_log_level = get_config_variable( + "CONNECTOR_LOG_LEVEL", + ["connector", "log_level"], + config, + default="info", + ) + self.cybelangel_client_id = get_config_variable( + "CYBELANGEL_CLIENT_ID", ["cybelangel", "client_id"], config + ) + self.cybelangel_client_secret = get_config_variable( + "CYBELANGEL_CLIENT_SECRET", ["cybelangel", "client_secret"], config + ) + self.cybelangel_api_url = get_config_variable( + "CYBELANGEL_API_URL", + ["cybelangel", "api_url"], + config, + default="https://platform.cybelangel.com", + ) + self.cybelangel_auth_url = get_config_variable( + "CYBELANGEL_AUTH_URL", + ["cybelangel", "auth_url"], + config, + default="https://auth.cybelangel.com/oauth/token", + ) + # OAuth2 ``audience`` claim sent during client-credentials + # exchange. Defaults to the configured CybelAngel API URL so + # the audience stays consistent with the API host when a + # custom ``CYBELANGEL_API_URL`` is used (the CybelAngel + # authorization server validates audience against the API + # host). Operators can still override it explicitly when the + # audience deviates from the API base URL. + self.cybelangel_audience = get_config_variable( + "CYBELANGEL_AUDIENCE", + ["cybelangel", "audience"], + config, + default=self.cybelangel_api_url.rstrip("/") + "/", + ) + self.cybelangel_marking = get_config_variable( + "CYBELANGEL_MARKING", + ["cybelangel", "marking"], + config, + default="TLP:AMBER+STRICT", + ) + self.cybelangel_fetch_period = get_config_variable( + "CYBELANGEL_FETCH_PERIOD", + ["cybelangel", "fetch_period"], + config, + default="7", + ) + + # Scheduler / auto-backpressure (ISO 8601). Default = PT6H, i.e., 6 hours. + self.duration_period = get_config_variable( + "CONNECTOR_DURATION_PERIOD", + ["connector", "duration_period"], + config, + default="PT6H", + ) + + except Exception as e: + self.helper.connector_logger.error( + f"Error loading configuration: {e}. Please check your config.yml file." + ) + sys.exit(1) + + def load_marking_definition(self): + """ + Load or create a STIX MarkingDefinition object based on the configured TLP level. + + Supports standard TLP levels: TLP:CLEAR, TLP:GREEN, TLP:AMBER, TLP:AMBER+STRICT and TLP:RED. + TLP:CLEAR and TLP:AMBER+STRICT are handled as custom markings since they are not natively supported in STIX2. + + Returns: + None + """ + TLP_MAPPING = { + "TLP:WHITE": stix2.TLP_WHITE, + # ``TLP:CLEAR`` is OpenCTI's canonical replacement for the + # legacy ``TLP:WHITE`` and is not exported as a constant by + # the ``stix2`` library. We therefore build it as a custom + # ``MarkingDefinition`` (mirroring the ``TLP:AMBER+STRICT`` + # entry below) so the marking id / label match what OpenCTI + # ingests and the configured value is preserved as-is — + # aliasing it to ``stix2.TLP_WHITE`` would silently tag + # ingested data with the TLP:WHITE marking id. + "TLP:CLEAR": stix2.MarkingDefinition( + id=MarkingDefinition.generate_id("TLP", "TLP:CLEAR"), + definition_type="statement", + definition={"statement": "custom"}, + allow_custom=True, + x_opencti_definition_type="TLP", + x_opencti_definition="TLP:CLEAR", + ), + "TLP:GREEN": stix2.TLP_GREEN, + "TLP:AMBER": stix2.TLP_AMBER, + "TLP:AMBER+STRICT": stix2.MarkingDefinition( + id=MarkingDefinition.generate_id("TLP", "TLP:AMBER+STRICT"), + definition_type="statement", + definition={"statement": "TLP:AMBER+STRICT"}, + allow_custom=True, + x_opencti_definition_type="TLP", + x_opencti_definition="TLP:AMBER+STRICT", + ), + "TLP:RED": stix2.TLP_RED, + } + + tlp_value = self.cybelangel_marking.strip().upper() + if tlp_value in TLP_MAPPING: + self.cybelangel_marking = TLP_MAPPING[tlp_value] + else: + self.helper.connector_logger.warning( + f"Unsupported TLP marking '{tlp_value}', defaulting to TLP:AMBER+STRICT" + ) + self.cybelangel_marking = TLP_MAPPING["TLP:AMBER+STRICT"] + + def authenticate(self, max_retries=3, delay=5): + """ + Authenticate with the CybelAngel API using client credentials and retrieve an access token. + Retries on failure up to `max_retries` times with `delay` seconds between attempts. + + Args: + None + + Returns: + str: A valid OAuth2 bearer token if authentication is successful, otherwise None. + + Raises: + Exception: If the authentication request fails or the response is invalid. + :param delay: Delay in seconds between retry attempts. + :param max_retries: Maximum number of retry attempts. + """ + + auth_data = { + "client_id": self.cybelangel_client_id, + "client_secret": self.cybelangel_client_secret, + "audience": self.cybelangel_audience, + "grant_type": "client_credentials", + } + + headers = { + "Content-Type": "application/json", + "User-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) " + "Chrome/138.0.0.0 Safari/537.36 ", + } + for attempt in range(1, max_retries + 1): + self.helper.connector_logger.info( + f"Attempt {attempt} to authenticate with CybelAngel API" + ) + try: + response = requests.post( + self.cybelangel_auth_url, + json=auth_data, + headers=headers, + timeout=(10, 60), + ) + response.raise_for_status() + token_data = response.json() + if "access_token" in token_data: + self.helper.connector_logger.info("Authentication successful") + return token_data["access_token"] + else: + self.helper.connector_logger.error( + f"Authentication failed: {token_data}" + ) + return None + except requests.exceptions.RequestException as e: + self.helper.connector_logger.error( + f"Error during authentication attempt {attempt}/{max_retries}: {e}" + ) + if attempt < max_retries: + # Only announce the delay when another attempt will + # actually follow - logging "Retrying in N seconds" + # on the terminal attempt is misleading and makes + # troubleshooting harder. + self.helper.connector_logger.info( + f"Retrying in {delay} seconds... (Attempt {attempt + 1}/{max_retries})" + ) + time.sleep(delay) + else: + self.helper.connector_logger.error( + f"Authentication failed after {max_retries} attempts, giving up." + ) + + def create_cybelangel_org(self): + """ + Creates an identity object for the CybelAngel organization. + + This function generates a STIX 2.1 Identity object representing the CybelAngel organization. The identity includes details such as the name, description, confidence level, identity class, type, and object marking references. + + """ + try: + identity = stix2.Identity( + id=Identity.generate_id("CybelAngel", "organization"), + spec_version="2.1", + name="CybelAngel", + description="Cybelangel is a cybersecurity company that specializes in detecting and mitigating cyber " + "threats.", + confidence=50, + identity_class="organization", + type="identity", + object_marking_refs=( + [self.cybelangel_marking.id] if self.cybelangel_marking else None + ), + ) + self.helper.connector_logger.debug( + "CybelAngel identity object created successfully." + ) + + return identity + except Exception as e: + self.helper.connector_logger.error( + f"Error creating CybelAngel organization identity: {e}" + ) + return None + + # ---------------------- + # STIX Builder + # ---------------------- + def _create_identity( + self, name, identity_class, marking=None, created_by=None, contact_info=None + ): + if not name: + return None + if len(name) < 2: + self.helper.connector_logger.warning( + f"Identity name '{name}' is too short, adding whitespace." + ) + name += " " + return stix2.Identity( + id=Identity.generate_id(name, identity_class), + name=name, + identity_class=identity_class, + contact_information=contact_info, + object_marking_refs=marking, + created_by_ref=created_by, + ) + + def _create_relationship( + self, + rel_type, + source_id, + target_id, + claimed_at, + marking=None, + created_by=None, + ): + return stix2.Relationship( + id=StixCoreRelationship.generate_id(rel_type, source_id, target_id), + source_ref=source_id, + target_ref=target_id, + created=claimed_at, + relationship_type=rel_type, + object_marking_refs=marking, + created_by_ref=created_by, + ) + + # ---------------------- + # Fetch Data + # ---------------------- + def opencti_bundle(self, work_id, last_run=None): + """Authenticate, fetch and ingest claimed attacks. + + Returns ``True`` when the run completes without unrecoverable errors, + ``False`` otherwise. The caller uses this signal to decide whether + ``last_run`` should be advanced. + """ + token = self.authenticate() + if not token: + self.helper.connector_logger.error( + "Authentication with CybelAngel failed, aborting this run." + ) + return False + self.helper.connector_logger.debug( + "Token received, proceeding with data fetching." + ) + + cybelangel_org_identity = self.create_cybelangel_org() + if not cybelangel_org_identity: + self.helper.connector_logger.error( + "Could not create the CybelAngel identity, aborting this run." + ) + return False + + since_date, _end_date, parameters = self._build_fetch_parameters(last_run) + headers = { + "Authorization": f"Bearer {token}", + "Content-Type": "application/json", + } + + return self._fetch_and_process_pages( + headers, parameters, cybelangel_org_identity, work_id, since_date + ) + + def _build_fetch_parameters(self, last_run): + """ + Compute since_date/end_date and build the CybelAngel API parameters. + + Returns ``(since_date, end_date, parameters)``. When the configured + ``CYBELANGEL_FETCH_PERIOD`` is ``"all"`` and there is no usable + ``last_run`` cursor, ``since_date`` / ``end_date`` are ``None`` and + ``parameters`` only carries the sort (``sort_by=claimed_at&sort_order=desc``) + so the CybelAngel API returns the full history. + """ + + base_sort = "sort_by=claimed_at&sort_order=desc" + + if last_run: + try: + since_date = datetime.fromisoformat(last_run).astimezone(timezone.utc) + except ValueError: + # ``last_run`` is corrupted or in an unexpected format. + # Fall back to ``CYBELANGEL_FETCH_PERIOD`` exactly like the + # "no ``last_run``" branch below, including the ``all`` + # case which means "no date filter". + self.helper.connector_logger.warning( + "Invalid last_run format, falling back to CYBELANGEL_FETCH_PERIOD", + {"last_run": last_run}, + ) + return self._fetch_parameters_from_period(base_sort) + end_date = datetime.now(timezone.utc) + parameters = ( + f"{base_sort}" + f"&start_date={since_date.strftime('%Y-%m-%dT%H:%M:%SZ')}" + f"&end_date={end_date.strftime('%Y-%m-%dT%H:%M:%SZ')}" + ) + return since_date, end_date, parameters + + # No last_run -> we use CYBELANGEL_FETCH_PERIOD. + return self._fetch_parameters_from_period(base_sort) + + def _fetch_parameters_from_period(self, base_sort): + """Return ``(since_date, end_date, parameters)`` derived from ``CYBELANGEL_FETCH_PERIOD``. + + ``CYBELANGEL_FETCH_PERIOD`` is either a number of days (``int`` / ``str``) + or ``"all"`` to mean "no date filter". + """ + fetch_period = getattr(self, "cybelangel_fetch_period", "all") + if not fetch_period or str(fetch_period).lower() == "all": + return None, None, base_sort + + try: + days = int(fetch_period) + except (TypeError, ValueError): + self.helper.connector_logger.warning( + "Invalid CYBELANGEL_FETCH_PERIOD value, falling back to full history", + {"fetch_period": fetch_period}, + ) + return None, None, base_sort + + since_date = datetime.now(timezone.utc) - timedelta(days=days) + since_date = since_date.replace(hour=0, minute=0, second=0, microsecond=0) + end_date = datetime.now(timezone.utc) + parameters = ( + f"{base_sort}" + f"&start_date={since_date.strftime('%Y-%m-%dT%H:%M:%SZ')}" + f"&end_date={end_date.strftime('%Y-%m-%dT%H:%M:%SZ')}" + ) + return since_date, end_date, parameters + + def _fetch_and_process_pages( + self, headers, parameters, author_org, work_id, since_date + ): + """Page through ``claimed-attacks`` and process every record. + + Returns ``True`` when the iteration completes without + unrecoverable errors *and* every per-attack bundle was sent + successfully. Returns ``False`` when the connector gives up on + transient errors **or** when any ``_process_attack`` failed — + the caller uses the return value to keep ``last_run`` + un-advanced so the next run retries instead of silently + dropping data. + """ + skip = 0 + limit = 50 + attempt = 0 + # Track per-attack bundle-send failures. We keep iterating even + # after a failure (each attack is independent and re-runs are + # idempotent thanks to deterministic STIX ids), but return + # ``False`` at the end so the caller does not advance ``last_run``. + all_succeeded = True + + while True: + url = ( + f"{self.cybelangel_api_url}" + f"/api/v1/threat-intelligence/claimed-attacks" + f"?limit={limit}&skip={skip}&{parameters}" + ) + self.helper.connector_logger.debug( + f"Fetching data from CybelAngel API: {url}" + ) + + try: + response = requests.get(url, headers=headers, timeout=(10, 60)) + except requests.exceptions.RequestException as exc: + attempt += 1 + self.helper.connector_logger.error( + f"Network error while fetching CybelAngel data: {exc}. " + f"Retrying ({attempt}/3)..." + ) + if attempt >= 3: + self.helper.connector_logger.error( + "Failed to fetch data after 3 attempts, aborting this run." + ) + return False + time.sleep(5) + continue + + # The CybelAngel token expires after 1 hour. This block + # reauthenticates when the token is no longer valid. + if response.status_code == 401 and attempt < 3: + attempt += 1 + self.helper.connector_logger.info( + f"Token expired, re-authenticating. Attempt {attempt}..." + ) + token = self.authenticate() + if not token: + self.helper.connector_logger.error( + "Re-authentication failed, aborting this run." + ) + return False + headers["Authorization"] = f"Bearer {token}" + self.helper.connector_logger.info( + "Re-authentication successful, retrying data fetch." + ) + attempt = 0 # Reset attempt counter on successful response + continue + if response.status_code != 200: + self.helper.connector_logger.error( + f"Failed to fetch data from CybelAngel: {response.status_code}. " + f"Response: {response.text}. Retrying..." + ) + attempt += 1 + if attempt >= 3: + self.helper.connector_logger.error( + "Failed to fetch data after 3 attempts, aborting this run." + ) + return False + time.sleep(5) + continue + + # Reset retry counter once we got a successful response. + attempt = 0 + + attacks = response.json().get("claimed_attacks", []) + if not attacks: + self.helper.connector_logger.info( + "No more attacks found, stopping processing." + ) + return all_succeeded + + self.helper.connector_logger.info( + f"Processing {len(attacks)} attacks - skip {skip} with limit {limit}" + ) + + for attack in attacks: + # Results are sorted by ``claimed_at desc``: once we see one + # claim older than ``since_date`` every following claim + # (within this page and on subsequent pages) is older too, + # so we can stop iterating entirely instead of just skipping. + if self._is_attack_too_old(attack, since_date): + self.helper.connector_logger.info( + "Reached claims older than last_run, stopping pagination." + ) + return all_succeeded + if not self._process_attack(attack, since_date, author_org, work_id): + all_succeeded = False + + skip += limit + + @staticmethod + def _is_attack_too_old(attack: dict, since_date) -> bool: + if since_date is None: + return False + claimed_at_raw = attack.get("claimed_at") + if not claimed_at_raw: + return False + for fmt in ("%Y-%m-%dT%H:%M:%S.%fZ", "%Y-%m-%dT%H:%M:%SZ"): + try: + claimed_at = datetime.strptime(claimed_at_raw, fmt).replace( + tzinfo=timezone.utc + ) + break + except ValueError: + continue + else: + return False + return claimed_at < since_date + + # ---------------------- + # Parse & Ingest Data + # ---------------------- + def _process_attack(self, attack, since_date, author_org, work_id) -> bool: + """Process a single attack and forward the resulting STIX bundle. + + Returns ``True`` when the attack was handled successfully (or + deliberately skipped because of an unparseable timestamp / a + cursor cut-off) and ``False`` when bundle serialisation or + ``send_stix2_bundle`` failed — callers use this signal to keep + ``last_run`` un-advanced so the run is retried instead of + silently dropping data. + """ + claimed_at_raw = attack.get("claimed_at") + claimed_at = None + if claimed_at_raw: + for fmt in ("%Y-%m-%dT%H:%M:%S.%fZ", "%Y-%m-%dT%H:%M:%SZ"): + try: + claimed_at = datetime.strptime(claimed_at_raw, fmt).replace( + tzinfo=timezone.utc + ) + break + except ValueError: + continue + + # ``claimed_at`` is used as the deterministic timestamp for several + # required STIX fields (``Campaign.created``, ``first_seen``, + # ``last_seen``, relationship ``created``, ...). A missing or + # unparseable value would make the bundle invalid and crash the run, + # so we skip the record with a warning instead. + if claimed_at is None: + self.helper.connector_logger.warning( + "Skipping attack with missing or unparseable claimed_at", + {"attack_id": attack.get("id"), "claimed_at": claimed_at_raw}, + ) + return True + + # Stop early if attack is before last_run + if since_date and claimed_at < since_date: + self.helper.connector_logger.info( + f"Stopping processing as claimed_at {claimed_at.strftime('%Y-%m-%dT%H:%M:%SZ')} is before " + f"last_run value {since_date.strftime('%Y-%m-%dT%H:%M:%SZ')}" + ) + return True + + stix_objects = [author_org, self.cybelangel_marking] + author_org_id = author_org["id"] if author_org else None + marking_id = [self.cybelangel_marking.id] if self.cybelangel_marking else None + + # Attack fields + campaign_objective = attack.get("category", "Unknown") + threat_actors = attack.get("threat_actors", []) or [] + countries = attack.get("countries", []) or [] + industries_list = attack.get("industries", []) or [] + victims = attack.get("victims", []) or [] + domains = attack.get("domains", []) or [] + + # Resource level heuristic. STIX 2.1 ``IntrusionSet.resource_level`` + # is an open-vocabulary lowercase enum (e.g. ``individual``, ``team``, + # ``contest``, ``organization``), so we must use the lowercase values. + resource_level = ( + "contest" if "ddos" in campaign_objective.lower() else "organization" + ) + + # Actor label used in campaign naming + final_actor = ( + threat_actors[0] + if (threat_actors and threat_actors[0]) + else "Unknown actor" + ) + campaign_date = f" ({claimed_at.date()})" + + # --- Locations (countries) shared across campaigns for this attack + locations = [] + for country in countries: + if not country: + continue + location = stix2.Location( + id=Location.generate_id(country, "Country"), + name=country, + type="location", + country=country, + object_marking_refs=marking_id, + created_by_ref=author_org_id, + ) + locations.append(location) + stix_objects.append(location) + + # --- Sectors (industries) shared across campaigns for this attack + sector_objs = [] + for ind in industries_list: + if not ind: + continue + sector = self._create_identity(ind, "class", marking_id, author_org_id) + if sector: + sector_objs.append(sector) + stix_objects.append(sector) + + # --- Intrusion Sets shared across campaigns for this attack + intrusion_sets = [] + for actor in threat_actors: + if not actor: + continue + if len(actor) < 2: + self.helper.connector_logger.info( + f"Intrusion set name {actor} is too short, adding whitespace." + ) + actor = actor + " " + intrusion_set = stix2.IntrusionSet( + id=IntrusionSet.generate_id(actor), + name=actor, + description=f"Threat actor {actor} from CybelAngel", + resource_level=resource_level, + last_seen=claimed_at, + object_marking_refs=marking_id, + created_by_ref=author_org_id, + ) + intrusion_sets.append(intrusion_set) + stix_objects.append(intrusion_set) + + # --- Build victim-domain pairing + victim_domain_pairs = [] + if victims and domains and len(domains) == len(victims): + victim_domain_pairs = list(zip(victims, domains)) + elif victims: + victim_domain_pairs = [(v, None) for v in victims] + + # --- If no victims at all: keep a generic campaign (backward compatible) + if not victim_domain_pairs and not victims: + campaign_name = f"{campaign_objective.capitalize()} campaign by {final_actor} - {campaign_date}".rstrip( + " - " + ) + campaign_description = f"{campaign_objective.capitalize()} campaign by {final_actor} with no specific target" + campaign = stix2.Campaign( + id=Campaign.generate_id(campaign_name), + name=campaign_name, + description=campaign_description, + created=claimed_at, + first_seen=claimed_at, + last_seen=claimed_at, + objective=campaign_objective, + object_marking_refs=marking_id, + created_by_ref=author_org_id, + ) + stix_objects.append(campaign) + + # campaign -> locations + for location in locations: + stix_objects.append( + self._create_relationship( + "targets", + campaign.id, + location.id, + claimed_at, + marking_id, + author_org_id, + ) + ) + # campaign -> sectors + for sector in sector_objs: + stix_objects.append( + self._create_relationship( + "targets", + campaign.id, + sector.id, + claimed_at, + marking_id, + author_org_id, + ) + ) + # campaign -> intrusion sets + for iset in intrusion_sets: + stix_objects.append( + self._create_relationship( + "attributed-to", + campaign.id, + iset.id, + claimed_at, + marking_id, + author_org_id, + ) + ) + # intrusion sets -> locations / sectors + for iset in intrusion_sets: + for location in locations: + stix_objects.append( + self._create_relationship( + "targets", + iset.id, + location.id, + claimed_at, + marking_id, + author_org_id, + ) + ) + for sector in sector_objs: + stix_objects.append( + self._create_relationship( + "targets", + iset.id, + sector.id, + claimed_at, + marking_id, + author_org_id, + ) + ) + + # --- One campaign per victim + for victim_name, victim_domain in victim_domain_pairs: + if not victim_name: + continue + v = victim_name if len(victim_name) >= 2 else (victim_name + " ") + + # Create victim identity + identity = self._create_identity( + v, "organization", marking_id, author_org_id, victim_domain + ) + if identity: + stix_objects.append(identity) + + # Create a dedicated campaign for this victim + campaign_name = f"{final_actor} targets {v}" + campaign_description = f"{campaign_objective.capitalize()} campaign by {final_actor} targeting {v}" + campaign = stix2.Campaign( + id=Campaign.generate_id(campaign_name), + name=campaign_name, + description=campaign_description, + created=claimed_at, + first_seen=claimed_at, + last_seen=claimed_at, + objective=campaign_objective, + object_marking_refs=marking_id, + created_by_ref=author_org_id, + ) + stix_objects.append(campaign) + + # campaign -> victim + if identity: + stix_objects.append( + self._create_relationship( + "targets", + campaign.id, + identity.id, + claimed_at, + marking_id, + author_org_id, + ) + ) + # campaign -> locations + for location in locations: + stix_objects.append( + self._create_relationship( + "targets", + campaign.id, + location.id, + claimed_at, + marking_id, + author_org_id, + ) + ) + # campaign -> sectors + for sector in sector_objs: + stix_objects.append( + self._create_relationship( + "targets", + campaign.id, + sector.id, + claimed_at, + marking_id, + author_org_id, + ) + ) + # campaign -> intrusion sets + for iset in intrusion_sets: + stix_objects.append( + self._create_relationship( + "attributed-to", + campaign.id, + iset.id, + claimed_at, + marking_id, + author_org_id, + ) + ) + + # intrusion sets -> victim (per-victim, varies with ``identity.id``) + for iset in intrusion_sets: + if identity: + stix_objects.append( + self._create_relationship( + "targets", + iset.id, + identity.id, + claimed_at, + marking_id, + author_org_id, + ) + ) + + # --- intrusion sets -> locations / sectors are per-attack rather than + # per-victim. ``StixCoreRelationship.generate_id`` is deterministic + # on ``(rel_type, source, target)``, so emitting them inside the + # per-victim loop above used to produce N copies of the same + # Relationship (one per victim) with identical ids/content — which + # inflates bundles and can fail STIX validation. They are now + # emitted once per attack here. (The "no victims" branch above + # already emitted them once per attack.) + if victim_domain_pairs: + for iset in intrusion_sets: + for location in locations: + stix_objects.append( + self._create_relationship( + "targets", + iset.id, + location.id, + claimed_at, + marking_id, + author_org_id, + ) + ) + for sector in sector_objs: + stix_objects.append( + self._create_relationship( + "targets", + iset.id, + sector.id, + claimed_at, + marking_id, + author_org_id, + ) + ) + + # Send bundle to OpenCTI. Any failure here is propagated to the + # caller so the pagination loop can keep ``last_run`` un-advanced + # — otherwise a single failed bundle would silently drop data. + if stix_objects: + try: + bundle = stix2.Bundle( + objects=stix_objects, allow_custom=True + ).serialize() + # ``update=`` was deprecated in pycti; the worker now always + # applies the relevant patch semantics. + self.helper.send_stix2_bundle(bundle, work_id=work_id) + self.helper.connector_logger.info( + f"Successfully processed {len(stix_objects)} STIX objects from CybelAngel." + ) + except Exception as e: + self.helper.connector_logger.error( + "Error sending STIX bundle to OpenCTI; last_run will NOT " + f"be advanced. attack_id={attack.get('id')!r} error={e}" + ) + return False + return True + + def process_data(self): + """Main data processing method. + + Initiates a work, retrieves the previous ``last_run`` from state, + fetches the new claimed attacks and only advances ``last_run`` when + :meth:`opencti_bundle` reports a successful run. + """ + work_id = None + try: + self.helper.connector_logger.info("Synchronizing with CybelAngel APIs...") + now = datetime.now(timezone.utc) + friendly_name = f"CybelAngel run @ {now.strftime('%Y-%m-%d %H:%M:%S')} UTC" + work_id = self.helper.api.work.initiate_work( + self.helper.connect_id, friendly_name + ) + current_state = self.helper.get_state() or {} + last_run = current_state.get("last_run") + self.helper.connector_logger.info( + f"Get elements since {last_run}" + if last_run + else "No previous run found" + ) + + success = self.opencti_bundle(work_id, last_run) + + if success: + # Always store the ``last_run`` cursor in UTC ISO 8601 so the + # ``start_date`` / ``end_date`` parameters built on the next + # run are time-zone consistent. + self.helper.set_state({"last_run": now.isoformat()}) + message = "End of synchronization" + self.helper.api.work.to_processed(work_id, message) + self.helper.connector_logger.info(message) + else: + message = ( + "CybelAngel run aborted before completion; last_run not advanced" + ) + self.helper.api.work.to_processed(work_id, message, in_error=True) + self.helper.connector_logger.warning(message) + except (KeyboardInterrupt, SystemExit): + self.helper.connector_logger.info("Connector stop") + sys.exit(0) + except Exception as e: + error_message = f"Unexpected error during synchronization: {str(e)}" + self.helper.connector_logger.error(error_message) + if work_id is not None: + self.helper.api.work.report_expectation( + work_id=work_id, + error={ + "error": error_message, + "source": "CybelAngel Connector", + }, + ) + self.helper.api.work.to_processed(work_id, error_message, in_error=True) + + def run(self): + """ + Run using OpenCTI Scheduler (ISO 8601 duration + auto-backpressure). + + """ + try: + self.helper.connector_logger.info("Fetching CybelAngel data ...") + self.load_marking_definition() + + self.helper.schedule_iso( + message_callback=self.process_data, + duration_period=self.duration_period, + ) + + except Exception as e: + self.helper.connector_logger.error(f"Error in CybelAngel connector: {e}") + raise + + +if __name__ == "__main__": + try: + connector = CybelAngel() + connector.run() + except Exception as e: + # Non-zero exit so container supervisors / CI / restart policies + # do not mistake a crash for a successful run. + print(f"Error running CybelAngel connector: {e}") + time.sleep(10) + sys.exit(1) diff --git a/external-import/cybelangel/src/requirements.txt b/external-import/cybelangel/src/requirements.txt new file mode 100644 index 00000000000..3a30a026965 --- /dev/null +++ b/external-import/cybelangel/src/requirements.txt @@ -0,0 +1,4 @@ +pycti==7.260515.0 +requests~=2.32 +stix2>=3.0.1,<4 +PyYAML>=6.0,<7 diff --git a/external-import/cyber-campaign-collection/README.md b/external-import/cyber-campaign-collection/README.md index 4b34e0a4707..2515de926af 100644 --- a/external-import/cyber-campaign-collection/README.md +++ b/external-import/cyber-campaign-collection/README.md @@ -61,11 +61,13 @@ There are a number of configuration options, which are set either in `docker-com ### Connector extra parameters environment variables -| Parameter | config.yml | Docker environment variable | Default | Mandatory | Description | -|--------------|--------------------------|--------------------------------|---------|-----------|----------------------------------------------------------------| -| GitHub Token | cyber_monitor.github_token | `CYBER_MONITOR_GITHUB_TOKEN` | | No | GitHub personal access token for higher API rate limits. | -| From Year | cyber_monitor.from_year | `CYBER_MONITOR_FROM_YEAR` | | Yes | Starting year for historical import (e.g., `2020`). | -| Interval | cyber_monitor.interval | `CYBER_MONITOR_INTERVAL` | | Yes | Polling interval in days (e.g., `7`). | +| Parameter | config.yml | Docker environment variable | Default | Mandatory | Description | +|---------------|-----------------------------|--------------------------------|---------|-----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| GitHub Token | cyber_monitor.github_token | `CYBER_MONITOR_GITHUB_TOKEN` | | No | GitHub personal access token for higher API rate limits. | +| From Year | cyber_monitor.from_year | `CYBER_MONITOR_FROM_YEAR` | | Yes | Starting year for historical import (e.g., `2020`). | +| Interval | cyber_monitor.interval | `CYBER_MONITOR_INTERVAL` | | Yes | Polling interval in days (e.g., `7`). | +| Report Type | cyber_monitor.report_type | `CYBER_MONITOR_REPORT_TYPE` | | No | Optional STIX `report_types` value(s) attached to imported reports. Accepts a single string (`threat-report`), a comma-separated string (`threat-report,campaign`) or a YAML list (`['threat-report', 'campaign']`). When unset, no report type is emitted. | +| Report Status | cyber_monitor.report_status | `CYBER_MONITOR_REPORT_STATUS` | | No | Optional workflow status mapped to `x_opencti_report_status`. Accepts a default workflow name (`New`, `In Progress`, `Analyzed`, `Closed`) or an integer position. When unset, no status is emitted. | ## Deployment diff --git a/external-import/cyber-campaign-collection/docker-compose.yml b/external-import/cyber-campaign-collection/docker-compose.yml index e76578bc973..7a889cfa2c9 100644 --- a/external-import/cyber-campaign-collection/docker-compose.yml +++ b/external-import/cyber-campaign-collection/docker-compose.yml @@ -13,4 +13,6 @@ services: - CYBER_MONITOR_GITHUB_TOKEN= # If not provided, rate limit will be very low - CYBER_MONITOR_FROM_YEAR=2018 - CYBER_MONITOR_INTERVAL=4 # In days, must be strictly greater than 1 + # - CYBER_MONITOR_REPORT_TYPE=threat-report # Optional: STIX report_types value(s). Single string OR comma-separated (threat-report,campaign). + # - CYBER_MONITOR_REPORT_STATUS=New # Optional: workflow status name (New, In Progress, Analyzed, Closed) or integer position restart: always diff --git a/external-import/cyber-campaign-collection/src/config.yml.sample b/external-import/cyber-campaign-collection/src/config.yml.sample index 13cb0090f80..5a43823acb5 100644 --- a/external-import/cyber-campaign-collection/src/config.yml.sample +++ b/external-import/cyber-campaign-collection/src/config.yml.sample @@ -14,3 +14,8 @@ cyber_monitor: github_token: '' # If not provided, rate limit will be very low from_year: '2018' interval: 4 # In days, must be strictly greater than 1 + # report_type: 'threat-report' # Optional: STIX report_types value attached to imported reports. + # Accepts a single string, a comma-separated + # string ('threat-report,campaign') or a YAML + # list (['threat-report', 'campaign']). + # report_status: 'New' # Optional: workflow status name ('New', 'In Progress', 'Analyzed', 'Closed') or integer position diff --git a/external-import/cyber-campaign-collection/src/cyber_campaign_collection.py b/external-import/cyber-campaign-collection/src/cyber_campaign_collection.py index f0f7a1ac585..dd686f158d7 100644 --- a/external-import/cyber-campaign-collection/src/cyber_campaign_collection.py +++ b/external-import/cyber-campaign-collection/src/cyber_campaign_collection.py @@ -50,6 +50,42 @@ def __init__(self): self.cyber_monitor_interval = get_config_variable( "CYBER_MONITOR_INTERVAL", ["cyber_monitor", "interval"], config, True ) + report_type_raw = get_config_variable( + "CYBER_MONITOR_REPORT_TYPE", + ["cyber_monitor", "report_type"], + config, + False, + None, + ) + # Normalize the optional ``report_type`` to a flat ``list[str]`` (or + # ``None``). The config accepts three shapes: + # + # * a bare string (``report_type: 'threat-report'``); + # * a comma-separated string (``report_type: 'threat-report,campaign'``); + # * a native YAML list (``report_type: ['threat-report', 'campaign']``). + # + # ``None`` / empty / whitespace-only inputs become ``None`` so we + # never emit ``report_types=[' ']`` on the STIX ``Report``. The + # normalised value is passed straight through to + # ``stix2.Report(report_types=...)`` at the call-site (no further + # wrapping), so storing it as a flat list here matches what STIX + # expects to receive. + self.cyber_monitor_report_type = self._normalize_report_type(report_type_raw) + # ``x_opencti_report_status`` is the legacy integer workflow position. The + # configuration accepts either the integer directly (e.g. ``2``) or one of + # the well-known status names below which are translated to the matching + # default workflow position. Unknown / unset values are ignored so the + # field is not emitted on the STIX Report. + report_status_raw = get_config_variable( + "CYBER_MONITOR_REPORT_STATUS", + ["cyber_monitor", "report_status"], + config, + False, + None, + ) + self.cyber_monitor_report_status = self._normalize_report_status( + report_status_raw + ) self.update_existing_data = get_config_variable( "CONNECTOR_UPDATE_EXISTING_DATA", ["connector", "update_existing_data"], @@ -62,6 +98,68 @@ def __init__(self): description="Dummy organization which can be used in various unknown contexts.", ) + # Default OpenCTI report-workflow positions, kept here so the connector + # does not have to depend on the API to resolve status names. + _REPORT_STATUS_MAP = { + "new": 0, + "in progress": 1, + "analyzed": 2, + "closed": 3, + } + + @staticmethod + def _normalize_report_type(raw): + """Return a flat ``list[str]`` of report types or ``None``. + + Accepts three input shapes: + + * a bare string (``"threat-report"``); + * a comma-separated string (``"threat-report, campaign"``); + * a native YAML / JSON list (``["threat-report", "campaign"]``). + + ``None`` / empty / whitespace-only / fully-stripped-empty inputs + become ``None``. Non-string items in a list are coerced via + ``str(item)``, then stripped. The result is always either + ``None`` or a non-empty ``list[str]``, which is then passed + directly to ``stix2.Report(report_types=...)`` — wrapping the + value in another list (the previous behaviour) would have + produced an invalid ``[["threat-report", "campaign"]]`` STIX + Report when the config was a list. + """ + if raw is None: + return None + if isinstance(raw, str): + candidates = [piece.strip() for piece in raw.split(",")] + elif isinstance(raw, (list, tuple)): + candidates = [str(piece).strip() for piece in raw if piece is not None] + else: + candidates = [str(raw).strip()] + cleaned = [piece for piece in candidates if piece] + return cleaned or None + + @classmethod + def _normalize_report_status(cls, raw): + """Return an int report-status or ``None`` when no value is configured. + + Booleans are rejected explicitly (``isinstance(True, int)`` is ``True`` + in Python, so a misconfigured ``report_status: true`` would otherwise + leak ``True`` into ``x_opencti_report_status``). + """ + if raw is None: + return None + if isinstance(raw, bool): + return None + if isinstance(raw, int): + return raw + candidate = str(raw).strip() + if not candidate: + return None + try: + return int(candidate) + except (TypeError, ValueError): + pass + return cls._REPORT_STATUS_MAP.get(candidate.lower()) + def get_interval(self): return int(self.cyber_monitor_interval) * 60 * 60 * 24 @@ -166,6 +264,18 @@ def _import_year(self, year, work_id): "no_trigger_import": True, } ) + custom_properties = {"x_opencti_files": files} + if self.cyber_monitor_report_status is not None: + custom_properties["x_opencti_report_status"] = ( + self.cyber_monitor_report_status + ) + optional_fields = {} + if self.cyber_monitor_report_type: + # ``cyber_monitor_report_type`` is already a flat + # ``list[str]`` thanks to ``_normalize_report_type`` + # — pass it through as-is so STIX receives a clean + # ``report_types=["threat-report", ...]``. + optional_fields["report_types"] = self.cyber_monitor_report_type report = stix2.Report( id=Report.generate_id(report_name, report_date), name=report_name, @@ -173,7 +283,8 @@ def _import_year(self, year, work_id): external_references=[external_reference], object_refs=[self.dummy_organization["id"]], allow_custom=True, - custom_properties={"x_opencti_files": files}, + custom_properties=custom_properties, + **optional_fields, ) self.send_bundle( work_id, diff --git a/external-import/cyber-campaign-collection/src/requirements.txt b/external-import/cyber-campaign-collection/src/requirements.txt index 7ef7aa93eaf..59f5a686f74 100644 --- a/external-import/cyber-campaign-collection/src/requirements.txt +++ b/external-import/cyber-campaign-collection/src/requirements.txt @@ -1,3 +1,3 @@ -pycti==7.260309.0 -urllib3==2.6.3 +pycti==7.260515.0 +urllib3==2.7.0 PyGithub==2.8.1 diff --git a/external-import/cybersixgill/README.md b/external-import/cybersixgill/README.md index 71736688672..39c8026a73f 100644 --- a/external-import/cybersixgill/README.md +++ b/external-import/cybersixgill/README.md @@ -41,7 +41,7 @@ This connector imports IOCs including file hashes, IP addresses, domains, and UR ### Requirements -- OpenCTI Platform >= 7.260309.0 +- OpenCTI Platform >= 7.260515.0 - Cybersixgill Client ID and Client Secret (contact Cybersixgill for access) ## Configuration variables diff --git a/external-import/cybersixgill/src/requirements.txt b/external-import/cybersixgill/src/requirements.txt index 49aa58e4df0..f2ab7f5c0ef 100644 --- a/external-import/cybersixgill/src/requirements.txt +++ b/external-import/cybersixgill/src/requirements.txt @@ -1,2 +1,2 @@ -pycti==7.260309.0 +pycti==7.260515.0 sixgill-clients==0.2.27 diff --git a/external-import/digintlab-dep/README.md b/external-import/digintlab-dep/README.md index 6fdf42f746d..4828a7c0c4e 100644 --- a/external-import/digintlab-dep/README.md +++ b/external-import/digintlab-dep/README.md @@ -40,6 +40,9 @@ The platform tracks ransomware groups' activities, including victim announcement - Uses deterministic incident IDs (based on DEP hash) so updated announcements are merged - Validates and normalizes DEP payload fields before STIX object creation - Optionally skips records with empty/placeholder victim names (`n/a`, `none`) +- Optionally creates sector class identities and links victims to sectors +- Optionally creates intrusion sets from actor names and links them to incidents +- Optionally creates country locations and links victims to countries --- @@ -77,22 +80,25 @@ The platform tracks ransomware groups' activities, including victim announcement #### Connector Extra Parameters -| Parameter | Docker envvar | Mandatory | Default | Description | -| --------------------- | --------------------------- | --------- | --------------------------------------------------------- | ----------------------------------------------------------------- | -| Username | `DEP_USERNAME` | Yes | - | Double Extortion Platform username | -| Password | `DEP_PASSWORD` | Yes | - | Double Extortion Platform password | -| API Key | `DEP_API_KEY` | Yes | - | API key issued by the platform | -| Client ID | `DEP_CLIENT_ID` | Yes | - | AWS Cognito App Client ID | -| Login Endpoint | `DEP_LOGIN_ENDPOINT` | No | `https://cognito-idp.eu-west-1.amazonaws.com/` | Cognito login endpoint | -| API Endpoint | `DEP_API_ENDPOINT` | No | `https://api.eu-ep1.doubleextortion.com/v1/dbtr/privlist` | REST endpoint for announcements | -| Lookback Days | `DEP_LOOKBACK_DAYS` | No | `7` | Days to look back on first run | -| Overlap Hours | `DEP_OVERLAP_HOURS` | No | `72` | Hours subtracted from `last_run` to replay recent data | -| Extended Results | `DEP_EXTENDED_RESULTS` | No | `true` | Request extended leak information | -| Dataset | `DEP_DSET` | No | `ext` | Dataset to query (`ext`, `sanctions`, etc.) | -| Enable Site Indicator | `DEP_ENABLE_SITE_INDICATOR` | No | `true` | Create domain indicator per victim | -| Enable Hash Indicator | `DEP_ENABLE_HASH_INDICATOR` | No | `true` | Create hash indicator when available | -| Skip Empty Victim | `DEP_SKIP_EMPTY_VICTIM` | No | `true` | Skip records where victim is empty or placeholder (`n/a`, `none`) | -| Confidence | `DEP_CONFIDENCE` | No | `70` | Confidence level for created objects | +| Parameter | Docker envvar | Mandatory | Default | Description | +| ------------------------ | ------------------------------ | --------- | --------------------------------------------------------- | ----------------------------------------------------------------------------- | +| Username | `DEP_USERNAME` | Yes | - | Double Extortion Platform username | +| Password | `DEP_PASSWORD` | Yes | - | Double Extortion Platform password | +| API Key | `DEP_API_KEY` | Yes | - | API key issued by the platform | +| Client ID | `DEP_CLIENT_ID` | Yes | - | AWS Cognito App Client ID | +| Login Endpoint | `DEP_LOGIN_ENDPOINT` | No | `https://cognito-idp.eu-west-1.amazonaws.com/` | Cognito login endpoint | +| API Endpoint | `DEP_API_ENDPOINT` | No | `https://api.eu-ep1.doubleextortion.com/v1/dbtr/privlist` | REST endpoint for announcements | +| Lookback Days | `DEP_LOOKBACK_DAYS` | No | `7` | Days to look back on first run | +| Overlap Hours | `DEP_OVERLAP_HOURS` | No | `72` | Hours subtracted from `last_run` to replay recent data | +| Extended Results | `DEP_EXTENDED_RESULTS` | No | `true` | Request extended leak information | +| Dataset | `DEP_DSET` | No | `ext` | Dataset to query (`ext`, `sanctions`, etc.) | +| Enable Site Indicator | `DEP_ENABLE_SITE_INDICATOR` | No | `true` | Create domain indicator per victim | +| Enable Hash Indicator | `DEP_ENABLE_HASH_INDICATOR` | No | `true` | Create hash indicator when available | +| Skip Empty Victim | `DEP_SKIP_EMPTY_VICTIM` | No | `true` | Skip records where victim is empty or placeholder (`n/a`, `none`) | +| Create Sector Identities | `DEP_CREATE_SECTOR_IDENTITIES` | No | `true` | Create sector `identity_class=class` entities and link victims via `part-of` | +| Create Intrusion Sets | `DEP_CREATE_INTRUSION_SETS` | No | `true` | Create `Intrusion-Set` entities from actor names and link via `attributed-to` | +| Create Country Locations | `DEP_CREATE_COUNTRY_LOCATIONS` | No | `true` | Create country `Location` entities and link victims via `located-at` | +| Confidence | `DEP_CONFIDENCE` | No | `70` | Confidence level for created objects | --- @@ -130,6 +136,9 @@ services: - DEP_ENABLE_SITE_INDICATOR=true - DEP_ENABLE_HASH_INDICATOR=true - DEP_SKIP_EMPTY_VICTIM=true + - DEP_CREATE_SECTOR_IDENTITIES=true + - DEP_CREATE_INTRUSION_SETS=true + - DEP_CREATE_COUNTRY_LOCATIONS=true restart: always depends_on: - opencti @@ -153,15 +162,19 @@ graph TB subgraph DEP Platform API[DEP API] end + subgraph Processing Connector[DEP Connector] end - Connector -->|Fetch announcements| API + Connector -->|Fetch announcements (API key + IdToken)| API API -->|Leak records| Connector subgraph OpenCTI Connector --> Victim[Identity - Victim Org] + Connector --> Sector[Identity - Sector Class] + Connector --> Actor[Intrusion Set] + Connector --> Country[Location - Country] Connector --> Incident[Incident] Connector --> DomainInd[Indicator - Domain] Connector --> HashInd[Indicator - Hash] @@ -169,21 +182,30 @@ graph TB end Incident -- targets --> Victim + Victim -- part-of --> Sector + Incident -- attributed-to --> Actor + Victim -- located-at --> Country + Actor -- targets --> Sector + Actor -- targets --> Country + Sector -- related-to --> Country DomainInd -- indicates --> Incident HashInd -- indicates --> Incident ``` ### Entity Mapping -| DEP Data | OpenCTI Entity | Notes | -| ----------------- | ----------------------- | ----------------------------------------------------------------- | -| Announcement | Incident | Type: `cybercrime`, includes first_seen date | -| Victim Name | Identity (Organization) | Organization identity with sector/revenue description | -| Victim Domain | Indicator | STIX pattern: `[domain-name:value = '...']` | -| Hash ID | Indicator | STIX pattern based on hash type (MD5/SHA1/SHA256) | -| Announcement Link | External Reference | Link to DEP announcement page | -| Victim Site | External Reference | Link to victim's website | -| - | Relationship | `targets` (Incident → Victim), `indicates` (Indicator → Incident) | +| DEP Data | OpenCTI Entity | Notes | +| ----------------- | ----------------------- | ----------------------------------------------------------------------------------------------------------------------------- | +| Announcement | Incident | Type: `cybercrime`, includes first_seen date | +| Victim Name | Identity (Organization) | Organization identity with revenue description | +| Victim Sector | Identity (Class) | Optional; created when `create_sector_identities=true` | +| Threat Actor | Intrusion Set | Optional; created when `create_intrusion_sets=true` and actor value is not generic | +| Victim Country | Location | Optional; created when `create_country_locations=true` | +| Victim Domain | Indicator | STIX pattern: `[domain-name:value = '...']` | +| Hash ID | Indicator | STIX pattern based on hash type (MD5/SHA1/SHA256) | +| Announcement Link | External Reference | Link to DEP announcement page | +| Victim Site | External Reference | Link to victim's website | +| - | Relationship | `targets` (Incident → Victim, Intrusion-Set → Sector, Intrusion-Set → Country), `part-of`, `attributed-to`, `located-at`, `related-to`, `indicates` | ### Processing Details @@ -206,15 +228,32 @@ graph TB - Type: `cybercrime` - ID: Deterministic UUIDv5 from DEP `hashid` (stable updates across runs) - Labels: `DigIntLab` plus `dep:announcement-type:{value}` from `annDataTypes` + - Stores optional source fields as custom properties: `dep_actor`, `dep_country` - External Reference: Link to announcement 4. **Victim Identity**: - Name: Victim organization name - Identity Class: `organization` - - Description: Includes industry sector and reported revenue + - Description: Includes reported revenue + - If `create_sector_identities=false`, sector is also added to victim description - External References: Announcement and victim site links -5. **Indicator Creation**: +5. **Sector Identity Creation**: + - Enabled when `create_sector_identities=true` + - Creates `Identity` objects with `identity_class=class` + - Sector names are normalized (whitespace collapsed) before creation + +6. **Intrusion Set Creation**: + - Enabled when `create_intrusion_sets=true` + - Creates deterministic `Intrusion-Set` IDs from actor names + - Skips low-quality generic actor values (for example `unknown`, `anonymous`, `threat actor`) + +7. **Country Location Creation**: + - Enabled when `create_country_locations=true` + - Creates deterministic `Location` IDs from country names + - Location objects are created with `x_opencti_location_type=Country` + +8. **Indicator Creation**: - **Domain Indicator** (when `enable_site_indicator=true`): - Pattern: `[domain-name:value = '{victim_domain}']` - Normalizes `victimDomain` or `site` via URL parsing (lowercase hostname only) @@ -222,11 +261,17 @@ graph TB - Auto-detects hash type by length (MD5=32, SHA-1=40, SHA-256=64) - Pattern: `[file:hashes.'{type}' = '{hash}']` -6. **Relationships**: +9. **Relationships**: - `targets`: Incident → Victim Organization + - `part-of`: Victim Organization → Sector Identity (when sector identities are enabled) + - `attributed-to`: Incident → Intrusion Set (when intrusion sets are enabled) + - `located-at`: Victim Organization → Country Location (when country locations are enabled) + - `targets`: Intrusion Set → Sector Identity (when both are present) + - `targets`: Intrusion Set → Country Location (when both are present) + - `related-to`: Sector Identity → Country Location (when both are present) - `indicates`: Domain/Hash Indicator → Incident -7. **Record Filtering**: +10. **Record Filtering**: - When `skip_empty_victim=true`, records with victim value `""`, `n/a`, or `none` are ignored ### State Management @@ -251,7 +296,7 @@ Enable debug logging by setting `CONNECTOR_LOG_LEVEL=debug`. Common issues: - URL-encoded descriptions are automatically decoded - Common malformed announcement links (`https//...`) are auto-repaired to valid URLs -- Intrusion Set creation is disabled by default (not all datasets represent threat actors) +- Optional text fields (`sector`, `actor`, `country`) are normalized; placeholders like `n/a` and `none` are treated as empty - Delete connector state in OpenCTI to re-ingest older records --- diff --git a/external-import/digintlab-dep/docker-compose.yml b/external-import/digintlab-dep/docker-compose.yml index 92d7518fe85..c72f58c8d09 100644 --- a/external-import/digintlab-dep/docker-compose.yml +++ b/external-import/digintlab-dep/docker-compose.yml @@ -1,4 +1,4 @@ -version: '3' +version: "3" services: connector-digintlab-dep: image: opencti/connector-digintlab-dep:latest @@ -17,6 +17,7 @@ services: - DEP_CLIENT_ID=ChangeMe # Connector's optional execution parameters - DEP_LOOKBACK_DAYS=7 + - DEP_OVERLAP_HOURS=72 - DEP_CONFIDENCE=70 - DEP_LOGIN_ENDPOINT=https://cognito-idp.eu-west-1.amazonaws.com/ - DEP_API_ENDPOINT=https://api.eu-ep1.doubleextortion.com/v1/dbtr/privlist @@ -24,4 +25,8 @@ services: - DEP_EXTENDED_RESULTS=true - DEP_ENABLE_SITE_INDICATOR=true - DEP_ENABLE_HASH_INDICATOR=true + - DEP_SKIP_EMPTY_VICTIM=true + - DEP_CREATE_SECTOR_IDENTITIES=true + - DEP_CREATE_INTRUSION_SETS=true + - DEP_CREATE_COUNTRY_LOCATIONS=true restart: always diff --git a/external-import/digintlab-dep/src/config.yml.sample b/external-import/digintlab-dep/src/config.yml.sample index 4a723fde3ce..a8f264d5478 100644 --- a/external-import/digintlab-dep/src/config.yml.sample +++ b/external-import/digintlab-dep/src/config.yml.sample @@ -10,7 +10,7 @@ connector: log_level: info interval: 3600 # In seconds -# Connector specific configuration +# Connector-specific configuration # All values can also be provided with environment variables prefixed with # DEP_ (for example DEP_USERNAME) # and the generic connector values with CONNECTOR_ and OPENCTI_ prefixes. @@ -28,4 +28,7 @@ dep: extended_results: true enable_site_indicator: true enable_hash_indicator: true - skip_empty_victim: true \ No newline at end of file + skip_empty_victim: true + create_sector_identities: true + create_intrusion_sets: true + create_country_locations: true diff --git a/external-import/digintlab-dep/src/main.py b/external-import/digintlab-dep/src/main.py index f0885c84a22..7e6b10cf015 100644 --- a/external-import/digintlab-dep/src/main.py +++ b/external-import/digintlab-dep/src/main.py @@ -39,6 +39,8 @@ class LeakRecord: victim: str | None = None sector: str | None = None + actor: str | None = None + country: str | None = None revenue: str | None = None @@ -87,8 +89,36 @@ def indicator_domain(self) -> str | None: self.site ) + @field_validator("sector", "actor", "country") + @classmethod + def normalize_named_field(cls, v: str | None) -> str | None: + if v is None: + return None + normalized = " ".join(v.split()).strip() + if not normalized: + return None + if normalized.lower() in {"n/a", "none"}: + return None + return normalized + class DepConnector: + GENERIC_ACTOR_VALUES = frozenset( + { + "unknown", + "unk", + "anonymous", + "unattributed", + "undisclosed", + "not disclosed", + "not-disclosed", + "ransomware group", + "ransomware gang", + "threat actor", + "attacker", + } + ) + def __init__(self) -> None: config = self._load_config() self.helper = pycti.OpenCTIConnectorHelper(config) @@ -186,6 +216,24 @@ def __init__(self) -> None: config, default=True, ) + self.create_sector_identities = pycti.get_config_variable( + "DEP_CREATE_SECTOR_IDENTITIES", + ["dep", "create_sector_identities"], + config, + default=True, + ) + self.create_intrusion_sets = pycti.get_config_variable( + "DEP_CREATE_INTRUSION_SETS", + ["dep", "create_intrusion_sets"], + config, + default=True, + ) + self.create_country_locations = pycti.get_config_variable( + "DEP_CREATE_COUNTRY_LOCATIONS", + ["dep", "create_country_locations"], + config, + default=True, + ) @staticmethod def _load_config() -> dict[str, Any]: @@ -301,7 +349,7 @@ def _create_victim_identity(self, item: LeakRecord) -> stix2.Identity | None: ) description_parts = [] - if item.sector: + if item.sector and not self.create_sector_identities: description_parts.append(f"Industry sector: {item.sector}") if item.revenue: description_parts.append(f"Reported revenue: {item.revenue}") @@ -318,6 +366,44 @@ def _create_victim_identity(self, item: LeakRecord) -> stix2.Identity | None: external_references=external_references or None, ) + def _create_sector_identity(self, sector: str) -> stix2.Identity: + sector_key = sector.lower() + return stix2.Identity( + id=pycti.Identity.generate_id(sector_key, identity_class="class"), + name=sector, + identity_class="class", + created_by_ref=self.author_identity, + confidence=self.confidence, + labels=[self.label_value], + ) + + def _create_intrusion_set(self, actor: str) -> stix2.IntrusionSet: + actor_key = actor.lower() + intrusion_set_id = ( + f"intrusion-set--{uuid5(NAMESPACE_URL, f'dep-actor:{actor_key}')}" + ) + return stix2.IntrusionSet( + id=intrusion_set_id, + name=actor, + confidence=self.confidence, + labels=[self.label_value], + created_by_ref=self.author_identity, + ) + + def _create_country_location(self, country: str) -> stix2.Location: + country_key = country.lower() + location_id = f"location--{uuid5(NAMESPACE_URL, f'dep-country:{country_key}')}" + return stix2.Location( + id=location_id, + name=country, + country=country, + confidence=self.confidence, + labels=[self.label_value], + created_by_ref=self.author_identity, + custom_properties={"x_opencti_location_type": "Country"}, + allow_custom=True, + ) + def _create_incident(self, item: LeakRecord) -> stix2.Incident: victim_name = item.victim or item.victim_domain if not victim_name: @@ -339,6 +425,15 @@ def _create_incident(self, item: LeakRecord) -> stix2.Incident: external_reference["description"] = item.ann_title # incident_id must be deterministic to allow updates incident_id = f"incident--{uuid5(NAMESPACE_URL, f'dep-announcement:{item.hashid.strip().lower()}')}" + custom_properties: dict[str, Any] = { + "incident_type": "cybercrime", + "first_seen": first_seen, + } + if item.actor: + custom_properties["dep_actor"] = item.actor + if item.country: + custom_properties["dep_country"] = item.country + return stix2.Incident( id=incident_id, name=incident_name, @@ -348,10 +443,7 @@ def _create_incident(self, item: LeakRecord) -> stix2.Incident: labels=self._build_incident_labels(item), created_by_ref=self.author_identity, external_references=[external_reference], - custom_properties={ - "incident_type": "cybercrime", - "first_seen": first_seen, - }, + custom_properties=custom_properties, ) def _build_incident_labels(self, item: LeakRecord) -> list[str]: @@ -410,6 +502,10 @@ def _detect_hash_type(hash_value: str) -> str | None: length_to_type = {32: "MD5", 40: "SHA-1", 64: "SHA-256"} return length_to_type.get(len(hash_value)) + def _is_low_quality_actor(self, actor: str) -> bool: + normalized = " ".join(actor.lower().split()) + return normalized in self.GENERIC_ACTOR_VALUES + def _build_relationship( self, relationship_type: str, @@ -441,6 +537,73 @@ def _should_skip_item(self, victim: str | None) -> bool: normalized = (victim or "").strip().lower() return normalized in {"", "n/a", "none"} + def _build_indicators(self, item: LeakRecord) -> list[stix2.Indicator]: + indicators: list[stix2.Indicator] = [] + site_indicator = self._create_site_indicator(item) + if site_indicator: + indicators.append(site_indicator) + hash_indicator = self._create_hash_indicator(item) + if hash_indicator: + indicators.append(hash_indicator) + return indicators + + def _build_optional_entities( + self, + item: LeakRecord, + victim: stix2.Identity | None, + incident: stix2.Incident, + ) -> list[stix2._STIXBase21]: + objects: list[stix2._STIXBase21] = [] + sector_identity: stix2.Identity | None = None + if self.create_sector_identities and item.sector and victim: + sector_identity = self._create_sector_identity(item.sector) + if sector_identity and victim: + objects.append(sector_identity) + objects.append( + self._build_relationship("part-of", victim.id, sector_identity.id) + ) + + intrusion_set: stix2.IntrusionSet | None = None + if ( + self.create_intrusion_sets + and item.actor + and not self._is_low_quality_actor(item.actor) + ): + intrusion_set = self._create_intrusion_set(item.actor) + if intrusion_set: + objects.append(intrusion_set) + objects.append( + self._build_relationship("attributed-to", incident.id, intrusion_set.id) + ) + + country_location: stix2.Location | None = None + if self.create_country_locations and item.country and victim: + country_location = self._create_country_location(item.country) + if country_location and victim: + objects.append(country_location) + objects.append( + self._build_relationship("located-at", victim.id, country_location.id) + ) + if intrusion_set and sector_identity: + objects.append( + self._build_relationship( + "targets", intrusion_set.id, sector_identity.id + ) + ) + if intrusion_set and country_location: + objects.append( + self._build_relationship( + "targets", intrusion_set.id, country_location.id + ) + ) + if sector_identity and country_location: + objects.append( + self._build_relationship( + "related-to", sector_identity.id, country_location.id + ) + ) + return objects + def _process_item(self, item: LeakRecord) -> None: if self._should_skip_item(item.victim): self.helper.log_info( @@ -449,14 +612,7 @@ def _process_item(self, item: LeakRecord) -> None: return victim = self._create_victim_identity(item) incident = self._create_incident(item) - - indicators: list[stix2.Indicator] = [] - site_indicator = self._create_site_indicator(item) - if site_indicator: - indicators.append(site_indicator) - hash_indicator = self._create_hash_indicator(item) - if hash_indicator: - indicators.append(hash_indicator) + indicators = self._build_indicators(item) objects: list[stix2._STIXBase21] = [self.author_identity] if victim: @@ -464,6 +620,7 @@ def _process_item(self, item: LeakRecord) -> None: objects.append(incident) if victim: objects.append(self._build_relationship("targets", incident.id, victim.id)) + objects.extend(self._build_optional_entities(item, victim, incident)) for indicator in indicators: objects.append(indicator) objects.append( diff --git a/external-import/digintlab-dep/src/requirements.txt b/external-import/digintlab-dep/src/requirements.txt index 983f4b71a5c..9dc34b0f9d2 100644 --- a/external-import/digintlab-dep/src/requirements.txt +++ b/external-import/digintlab-dep/src/requirements.txt @@ -1,5 +1,5 @@ -pycti==7.260309.0 +pycti==7.260515.0 pyyaml>=6.0.3 -requests>=2.32.5 +requests>=2.32.5,<=2.33.0 stix2>=3.0.1 pydantic>=2.12.5 \ No newline at end of file diff --git a/external-import/diode-import/src/requirements.txt b/external-import/diode-import/src/requirements.txt index a4399793a9a..76ec060a3df 100644 --- a/external-import/diode-import/src/requirements.txt +++ b/external-import/diode-import/src/requirements.txt @@ -1,2 +1,2 @@ -pycti==7.260309.0 +pycti==7.260515.0 boto3 \ No newline at end of file diff --git a/external-import/disarm-framework/src/requirements.txt b/external-import/disarm-framework/src/requirements.txt index fb270d6b572..1dd5a8feec8 100644 --- a/external-import/disarm-framework/src/requirements.txt +++ b/external-import/disarm-framework/src/requirements.txt @@ -1,4 +1,4 @@ -pycti==7.260309.0 -urllib3==2.6.3 +pycti==7.260515.0 +urllib3==2.7.0 pydantic >=2.8.2, <3 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk diff --git a/external-import/disarm-framework/tests/test-requirements.txt b/external-import/disarm-framework/tests/test-requirements.txt index bdef682113c..d405632324b 100644 --- a/external-import/disarm-framework/tests/test-requirements.txt +++ b/external-import/disarm-framework/tests/test-requirements.txt @@ -1,2 +1,2 @@ -r ../src/requirements.txt -pytest==8.4.2 +pytest==9.0.3 diff --git a/external-import/disinfox/src/requirements.txt b/external-import/disinfox/src/requirements.txt index 457c08147a1..f2e0415f654 100644 --- a/external-import/disinfox/src/requirements.txt +++ b/external-import/disinfox/src/requirements.txt @@ -1,2 +1,2 @@ -pycti==7.260309.0 +pycti==7.260515.0 validators==0.35.0 \ No newline at end of file diff --git a/external-import/dogesec-ctibutler/requirements.txt b/external-import/dogesec-ctibutler/requirements.txt index a499067031e..6ae8ef349b5 100644 --- a/external-import/dogesec-ctibutler/requirements.txt +++ b/external-import/dogesec-ctibutler/requirements.txt @@ -1,3 +1,3 @@ -pycti==7.260309.0 -requests +pycti==7.260515.0 +requests<=2.33.0 schedule \ No newline at end of file diff --git a/external-import/dogesec-ctibutler/src/connector.py b/external-import/dogesec-ctibutler/src/connector.py index 7d60d0b4b49..844ea191f49 100644 --- a/external-import/dogesec-ctibutler/src/connector.py +++ b/external-import/dogesec-ctibutler/src/connector.py @@ -3,12 +3,12 @@ """ import os -import time +import traceback +from contextlib import contextmanager from datetime import UTC, datetime from urllib.parse import urljoin import requests -import schedule import yaml from pycti import OpenCTIConnectorHelper, get_config_variable @@ -30,6 +30,10 @@ def parse_bool(value: str): ] +class CTIButlerException(Exception): + pass + + def parse_knowledgebases(helper: OpenCTIConnectorHelper, value: str): if not value: return [] @@ -64,7 +68,7 @@ def __init__(self): ) self.helper = OpenCTIConnectorHelper(config) - self.base_url = self._get_param("base_url") + "/" + self.base_url = self._get_param("base_url").strip("/") + "/" self.api_key = self._get_param("api_key") self.knowledgebases = parse_knowledgebases( self.helper, self._get_param("knowledgebases") @@ -91,8 +95,8 @@ def retrieve(self, path, list_key, params: dict = None): params = params or {} params.update(page=1, page_size=200) objects: list[dict] = [] - total_results_count = -1 - while total_results_count < len(objects): + total_results_count = 1 + while total_results_count > len(objects): resp = self.session.get(urljoin(self.base_url, path), params=params) params.update(page=params["page"] + 1) data = resp.json() @@ -134,15 +138,41 @@ def get_knowledge_base_objects(self, knowledge_base): def _run_once(self): self.helper.log_info("running as scheduled") for base in self.knowledgebases: - try: - version, objects = self.get_knowledge_base_objects(base) - for obj in objects: - self.bundle_object(base, obj) - self.update_state(base, version) - except VersionAlreadyIngested as e: - self.helper.log_info(e) - except Exception: - self.helper.log_error("cannot process for knowledge base") + with self._run_in_work(f"Knowledge Base: {base}") as work_id: + try: + version, objects = self.get_knowledge_base_objects(base) + for obj in objects: + self.bundle_object(base, obj, work_id) + # manually ping the parent work to keep it alive + self.helper.api.work.ping(work_id=self.main_work_id) + self.update_state(base, version) + except VersionAlreadyIngested as e: + self.helper.log_info(str(e)) + raise + except Exception as e: + self.helper.log_error(f"cannot process knowledge base {base}: {e}") + raise CTIButlerException(f"failed to process {base}") from e + + @contextmanager + def _run_in_work(self, work_name: str): + work_id = self.helper.api.work.initiate_work(self.helper.connect_id, work_name) + message = "[CTIBUTLER] Work done" + in_error = False + try: + yield work_id + except Exception as e: + self.helper.log_error(f"work failed: {e}") + message = "[CTIBUTLER] Work failed - " + traceback.format_exc() + in_error = True + finally: + self.helper.api.work.to_processed( + work_id=work_id, message=message, in_error=in_error + ) + + def run_once(self): + with self._run_in_work("CTIButler Connector Run") as main_work_id: + self.main_work_id = main_work_id + self._run_once() @staticmethod def get_object_name(base, obj): @@ -152,44 +182,27 @@ def get_object_name(base, obj): name = name or obj["id"] return f"{base} => {name}" - def bundle_object(self, base, obj): + def bundle_object(self, base, obj, work_id): readable_name = self.get_object_name(base, obj) self.helper.log_info(f"retrieve bundle for {readable_name}") - cve_work_id = self.helper.api.work.initiate_work( - self.helper.connect_id, f"{self.helper.connect_name} @ {readable_name}" - ) try: objects = self.retrieve( f"v1/{base}/objects/{obj['id']}/bundle/", list_key="objects" ) bundle = self.helper.stix2_create_bundle(objects) - self.helper.send_stix2_bundle(bundle, work_id=cve_work_id) - self.helper.api.work.to_processed( - work_id=cve_work_id, - message=f"[{readable_name}] bundle retrieved", - ) + self.helper.send_stix2_bundle(bundle, work_id=work_id) except Exception: self.helper.log_error( - f"process {readable_name} failed", dict(work_id=cve_work_id) + f"process {readable_name} failed", dict(work_id=work_id) ) self.helper.api.work.report_expectation( - work_id=cve_work_id, + work_id=work_id, error={ - "error": f"[{readable_name}] could not process", + "error": f"[{readable_name}] could not process:\n" + + traceback.format_exc(), "source": "CONNECTOR", }, ) - self.helper.api.work.to_processed( - work_id=cve_work_id, - message=f"[{readable_name}] Retrieve bundle failed", - in_error=True, - ) - - def run_once(self): - try: - self._run_once() - except Exception: - self.helper.log_error("run failed") def _get_state(self) -> dict: state = self.helper.get_state() or dict(versions=dict()) @@ -210,11 +223,10 @@ def update_state(self, knowledge_base, version): def run(self): self.helper.log_info("Starting CTIButler") - schedule.every(self.interval_days).days.do(self.run_once) - self.run_once() - while True: - schedule.run_pending() - time.sleep(1) + self.helper.schedule_process( + message_callback=self.run_once, + duration_period=self.interval_days * 24 * 3600, + ) def chunked(lst): @@ -227,4 +239,8 @@ def chunked(lst): if __name__ == "__main__": - CTIButlerConnector().run() + try: + CTIButlerConnector().run() + except BaseException: + traceback.print_exc() + exit(1) diff --git a/external-import/dogesec-ctibutler/tests/__init__.py b/external-import/dogesec-ctibutler/tests/__init__.py new file mode 100644 index 00000000000..66173aec46f --- /dev/null +++ b/external-import/dogesec-ctibutler/tests/__init__.py @@ -0,0 +1 @@ +# Test package diff --git a/external-import/dogesec-ctibutler/tests/conftest.py b/external-import/dogesec-ctibutler/tests/conftest.py new file mode 100644 index 00000000000..5ee8fc0e226 --- /dev/null +++ b/external-import/dogesec-ctibutler/tests/conftest.py @@ -0,0 +1,4 @@ +import os +import sys + +sys.path.append(os.path.join(os.path.dirname(__file__), "..", "src")) diff --git a/external-import/dogesec-ctibutler/tests/ctibutler/__init__.py b/external-import/dogesec-ctibutler/tests/ctibutler/__init__.py new file mode 100644 index 00000000000..66173aec46f --- /dev/null +++ b/external-import/dogesec-ctibutler/tests/ctibutler/__init__.py @@ -0,0 +1 @@ +# Test package diff --git a/external-import/dogesec-ctibutler/tests/ctibutler/conftest.py b/external-import/dogesec-ctibutler/tests/ctibutler/conftest.py new file mode 100644 index 00000000000..642a98a110b --- /dev/null +++ b/external-import/dogesec-ctibutler/tests/ctibutler/conftest.py @@ -0,0 +1,56 @@ +from typing import Any +from unittest.mock import MagicMock + +import pytest +from pytest_mock import MockerFixture + + +@pytest.fixture +def config_dict() -> dict[str, Any]: + return { + "opencti": { + "url": "http://test-opencti-url/", + "token": "test-opencti-token", + }, + "connector": { + "id": "ctibutler-connector-id", + "type": "EXTERNAL_IMPORT", + "name": "CTIButler", + "scope": "ctibutler", + "log_level": "info", + }, + "ctibutler": { + "base_url": "https://test-ctibutler-url/", + "api_key": "test-api-key", + "knowledgebases": "cwe,capec", + "interval_days": "1", + }, + } + + +@pytest.fixture +def mock_config(config_dict: dict[str, Any], monkeypatch: pytest.MonkeyPatch): + for key, value in config_dict.items(): + for sub_key, sub_value in value.items(): + if sub_value is not None: + monkeypatch.setenv(f"{key.upper()}_{sub_key.upper()}", str(sub_value)) + + yield + + +@pytest.fixture +def mocked_helper(mocker: MockerFixture): + helper = MagicMock() + mocker.patch("connector.OpenCTIConnectorHelper", return_value=helper) + helper.get_state.return_value = {} + helper.api.work.initiate_work.return_value = "work-id" + helper.connect_id = "connector-id" + helper.connect_name = "CTIButler" + yield helper + + +@pytest.fixture +def mock_session(mocker: MockerFixture) -> MagicMock: + session = MagicMock() + mocker.patch("connector.requests.Session", return_value=session) + return session diff --git a/external-import/dogesec-ctibutler/tests/ctibutler/test_connector.py b/external-import/dogesec-ctibutler/tests/ctibutler/test_connector.py new file mode 100644 index 00000000000..847424e13a8 --- /dev/null +++ b/external-import/dogesec-ctibutler/tests/ctibutler/test_connector.py @@ -0,0 +1,292 @@ +from unittest.mock import MagicMock, call + +import freezegun +import pytest +from connector import ( + CTIButlerConnector, + KnowledgeBaseIsEmpty, + VersionAlreadyIngested, + parse_knowledgebases, +) +from pytest_mock import MockerFixture + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_connector_init( + mocked_helper: MagicMock, mock_session: MagicMock, mock_config +) -> None: + """Test connector initialization""" + connector = CTIButlerConnector() + + assert connector.base_url == "https://test-ctibutler-url/" + assert connector.api_key == "test-api-key" + assert connector.knowledgebases == ["cwe", "capec"] + assert connector.interval_days == 1 + assert connector.session.headers == {"API-KEY": "test-api-key"} + + +@pytest.fixture +def connector( + mocked_helper, mock_session: MagicMock, mock_config +) -> CTIButlerConnector: + """Fixture for CTIButlerConnector instance""" + return CTIButlerConnector() + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_connector_run(connector: CTIButlerConnector) -> None: + """Test connector run method""" + connector.run() + + assert connector.helper.log_info.call_count == 1 + connector.helper.log_info.assert_has_calls([call("Starting CTIButler")]) + + assert connector.helper.schedule_process.call_count == 1 + connector.helper.schedule_process.assert_called_once_with( + message_callback=connector.run_once, duration_period=86400 + ) + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_parse_knowledgebases_valid(connector: CTIButlerConnector) -> None: + """Test parse_knowledgebases with valid input""" + result = parse_knowledgebases(connector.helper, "cwe,capec,atlas") + assert result == ["cwe", "capec", "atlas"] + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_parse_knowledgebases_invalid(connector: CTIButlerConnector) -> None: + """Test parse_knowledgebases with invalid input""" + with pytest.raises(ValueError, match="Unsupported knowledge base: invalid"): + parse_knowledgebases(connector.helper, "cwe,invalid") + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_get_state_empty(connector: CTIButlerConnector) -> None: + """Test _get_state with empty state""" + connector.helper.get_state.return_value = None + + state = connector._get_state() + + assert state == {"versions": {}} + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_get_state_existing(connector: CTIButlerConnector) -> None: + """Test _get_state with existing state""" + existing_state = { + "versions": {"cwe": ["1.0"]}, + "updated": "2026-02-17T15:24:00Z", + } + connector.helper.get_state.return_value = existing_state + + state = connector._get_state() + + assert state == existing_state + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_get_knowledge_base_versions(connector: CTIButlerConnector) -> None: + """Test get_knowledge_base_versions method""" + connector.helper.get_state.return_value = {"versions": {"cwe": ["1.0"]}} + + state, versions = connector.get_knowledge_base_versions("cwe") + + assert versions == ["1.0"] + assert state["versions"]["cwe"] == ["1.0"] + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_update_state(connector: CTIButlerConnector) -> None: + """Test update_state method""" + connector.helper.get_state.return_value = {"versions": {}} + + connector.update_state("cwe", "1.0") + + expected_call = connector.helper.set_state.call_args[0][0] + assert expected_call["versions"]["cwe"] == ["1.0"] + assert "updated" in expected_call + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_retrieve(mock_session: MagicMock, connector: CTIButlerConnector) -> None: + """Test retrieve method with pagination""" + # Mock two pages of results + mock_response_1 = MagicMock() + mock_response_1.json.return_value = { + "total_results_count": 3, + "objects": [{"id": "obj-1"}, {"id": "obj-2"}], + } + + mock_response_2 = MagicMock() + mock_response_2.json.return_value = { + "total_results_count": 3, + "objects": [{"id": "obj-3"}], + } + + mock_session.get.side_effect = [mock_response_1, mock_response_2] + + objects = connector.retrieve("v1/test/", list_key="objects") + + assert len(objects) == 3 + assert objects[0]["id"] == "obj-1" + assert objects[2]["id"] == "obj-3" + assert mock_session.get.call_count == 2 + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_get_knowledge_base_objects_success( + mock_session: MagicMock, connector: CTIButlerConnector +) -> None: + """Test get_knowledge_base_objects success""" + connector.helper.get_state.return_value = {"versions": {}} + + mock_response_versions = MagicMock() + mock_response_versions.json.return_value = {"versions": ["1.0"]} + mock_response_versions.raise_for_status = MagicMock() + + mock_response_objects = MagicMock() + mock_response_objects.json.return_value = { + "total_results_count": 2, + "objects": [{"id": "obj-1"}, {"id": "obj-2"}], + } + + mock_session.get.side_effect = [mock_response_versions, mock_response_objects] + + version, objects = connector.get_knowledge_base_objects("cwe") + + assert version == "1.0" + assert len(objects) == 2 + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_get_knowledge_base_objects_empty( + mock_session: MagicMock, connector: CTIButlerConnector +) -> None: + """Test get_knowledge_base_objects with empty knowledge base""" + connector.helper.get_state.return_value = {"versions": {}} + + mock_response = MagicMock() + mock_response.json.return_value = {"versions": []} + mock_response.raise_for_status = MagicMock() + mock_session.get.return_value = mock_response + + with pytest.raises(KnowledgeBaseIsEmpty): + connector.get_knowledge_base_objects("cwe") + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_get_knowledge_base_objects_already_ingested( + mock_session: MagicMock, connector: CTIButlerConnector +) -> None: + """Test get_knowledge_base_objects with already ingested version""" + connector.helper.get_state.return_value = {"versions": {"cwe": ["1.0"]}} + + mock_response = MagicMock() + mock_response.json.return_value = {"versions": ["1.0"]} + mock_response.raise_for_status = MagicMock() + mock_session.get.return_value = mock_response + + with pytest.raises(VersionAlreadyIngested): + connector.get_knowledge_base_objects("cwe") + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_get_object_name() -> None: + """Test get_object_name static method""" + obj_with_ref = { + "id": "weakness--1", + "external_references": [{"external_id": "CWE-79"}], + } + name = CTIButlerConnector.get_object_name("cwe", obj_with_ref) + assert name == "cwe => CWE-79" + + obj_without_ref = {"id": "weakness--1"} + name = CTIButlerConnector.get_object_name("cwe", obj_without_ref) + assert name == "cwe => weakness--1" + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_bundle_object_success( + mock_session: MagicMock, connector: CTIButlerConnector +) -> None: + """Test bundle_object success""" + obj = { + "id": "weakness--1", + "external_references": [{"external_id": "CWE-79"}], + } + + mock_response = MagicMock() + mock_response.json.return_value = { + "total_results_count": 2, + "objects": [{"type": "weakness", "id": "weakness--1"}], + } + mock_session.get.return_value = mock_response + + connector.helper.stix2_create_bundle.return_value = '{"type": "bundle"}' + + connector.bundle_object("cwe", obj, "test-work-id") + + connector.helper.send_stix2_bundle.assert_called_once() + connector.helper.api.work.to_processed.assert_not_called() + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_bundle_object_failure( + mock_session: MagicMock, connector: CTIButlerConnector +) -> None: + """Test bundle_object failure""" + obj = {"id": "weakness--1", "external_references": [{"external_id": "CWE-79"}]} + + mock_session.get.side_effect = Exception("API Error") + + connector.bundle_object("cwe", obj, "test-work-id") + + connector.helper.api.work.report_expectation.assert_called_once() + assert ( + connector.helper.api.work.report_expectation.call_args[1]["work_id"] + == "test-work-id" + ) + assert ( + "API Error" + in connector.helper.api.work.report_expectation.call_args[1]["error"]["error"] + ) + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_run_once(mocker: MockerFixture, connector: CTIButlerConnector) -> None: + """Test run_once method""" + mocker.patch.object( + connector, + "get_knowledge_base_objects", + return_value=("1.0", [{"id": "obj-1"}]), + ) + mocker.patch.object(connector, "bundle_object") + mocker.patch.object(connector, "update_state") + + connector.run_once() + + connector.helper.api.work.initiate_work.assert_called() + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_run_in_work_success(connector: CTIButlerConnector) -> None: + """Test _run_in_work context manager success""" + with connector._run_in_work("Test Work") as work_id: + assert work_id == "work-id" + + connector.helper.api.work.to_processed.assert_called_once_with( + work_id="work-id", message="[CTIBUTLER] Work done", in_error=False + ) + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_run_in_work_failure(connector: CTIButlerConnector) -> None: + """Test _run_in_work context manager failure""" + with connector._run_in_work("Test Work"): + raise ValueError("Test error") + + call_kwargs = connector.helper.api.work.to_processed.call_args[1] + assert call_kwargs["in_error"] is True + assert "[CTIBUTLER] Work failed" in call_kwargs["message"] + assert "ValueError: Test error" in call_kwargs["message"] diff --git a/external-import/dogesec-ctibutler/tests/test-requirements.txt b/external-import/dogesec-ctibutler/tests/test-requirements.txt new file mode 100644 index 00000000000..03e48c0cc0d --- /dev/null +++ b/external-import/dogesec-ctibutler/tests/test-requirements.txt @@ -0,0 +1,4 @@ +-r ../requirements.txt +pytest +pytest-mock +freezegun diff --git a/external-import/dogesec-cyberthreatexchange/.dockerignore b/external-import/dogesec-cyberthreatexchange/.dockerignore new file mode 100644 index 00000000000..68df9fc4137 --- /dev/null +++ b/external-import/dogesec-cyberthreatexchange/.dockerignore @@ -0,0 +1,2 @@ +config.yml +__pycache__/ diff --git a/external-import/dogesec-cyberthreatexchange/Dockerfile b/external-import/dogesec-cyberthreatexchange/Dockerfile new file mode 100644 index 00000000000..b3781056e23 --- /dev/null +++ b/external-import/dogesec-cyberthreatexchange/Dockerfile @@ -0,0 +1,22 @@ +FROM python:3.12-alpine +ENV CONNECTOR_TYPE=EXTERNAL_IMPORT + +# Copy the connector +COPY src /opt/opencti-connector-dogesec-cyberthreatexchange + +COPY requirements.txt /opt/opencti-connector-dogesec-cyberthreatexchange/requirements.txt + +# Install Python modules +# hadolint ignore=DL3003 +RUN apk update && apk upgrade && \ + apk --no-cache add git build-base libmagic libffi-dev libxml2-dev libxslt-dev + +RUN cd /opt/opencti-connector-dogesec-cyberthreatexchange && \ + pip3 install --no-cache-dir -r requirements.txt && \ + apk del git build-base && \ + rm -rf /var/cache/apk/* + +# Expose and entrypoint +COPY entrypoint.sh / +RUN chmod +x /entrypoint.sh +ENTRYPOINT ["/entrypoint.sh"] diff --git a/external-import/dogesec-cyberthreatexchange/README.md b/external-import/dogesec-cyberthreatexchange/README.md new file mode 100644 index 00000000000..62c242526a9 --- /dev/null +++ b/external-import/dogesec-cyberthreatexchange/README.md @@ -0,0 +1,221 @@ +# OpenCTI Cyber Threat Exchange Connector + +| Status | Date | Comment | +|--------|------|---------| +| Partner | - | - | + +## Table of Contents + +- [Introduction](#introduction) + - [Screenshots](#screenshots) +- [Installation](#installation) + - [Requirements](#requirements) +- [Configuration](#configuration) + - [Configuration Variables](#configuration-variables) +- [Deployment](#deployment) + - [Docker Deployment](#docker-deployment) + - [Manual Deployment](#manual-deployment) +- [Behavior](#behavior) + - [Data Flow](#data-flow) + - [Processing Details](#processing-details) +- [Debugging](#debugging) +- [Additional Information](#additional-information) + +--- + +## Introduction + +[Cyber Threat Exchange](https://www.cyberthreatexchange.com/) is a marketplace for threat intelligence. + +The OpenCTI Cyber Threat Exchange Connector synchronizes intelligence from Feeds you are subscribed to Cyber Threat Exchange into OpenCTI. + +> **Note**: This connector only works with Cyber Threat Exchange Web ([https://www.cyberthreatexchange.com](https://www.cyberthreatexchange.com)). It does not support self-hosted Cyber Threat Exchange installations at this time. + +--- + +## Installation + +### Requirements + +- OpenCTI >= 6.8.0 +- Cyber Threat Exchange team subscribed to a plan with API access enabled +- Cyber Threat Exchange API Key + +### Generating an API Key + +1. Log in to your Cyber Threat Exchange account +2. Navigate to "Account Settings" +3. Locate the API section and select "Create Token" +4. Select the team you want to use and generate the key + * If you don't see a team listed, you do not belong to a team on a plan with API access. Please upgrade the teams account to continue. +5. Copy the key for configuration + +--- + +## Configuration + +### Configuration Variables + +#### OpenCTI Parameters + +| Parameter | Docker envvar | Mandatory | Description | +|-----------|---------------|-----------|-------------| +| OpenCTI URL | `OPENCTI_URL` | Yes | The URL of the OpenCTI platform | +| OpenCTI Token | `OPENCTI_TOKEN` | Yes | The default admin token configured in the OpenCTI platform | + +#### Base Connector Parameters + +| Parameter | Docker envvar | Mandatory | Description | +|-----------|---------------|-----------|-------------| +| Connector ID | `CONNECTOR_ID` | Yes | A unique `UUIDv4` for this connector | +| Connector Name | `CONNECTOR_NAME` | Yes | Name displayed in OpenCTI | +| Log Level | `CONNECTOR_LOG_LEVEL` | No | Log level: `debug`, `info`, `warn`, or `error` | + +#### Connector Extra Parameters + +| Parameter | Docker envvar | config.yml | Required | Default | Description | +|-----------|---------------|------------|----------|---------|-------------| +| Base URL | `CYBERTHREATEXCHANGE_BASE_URL` | `cyberthreatexchange.base_url` | Yes | `https://api.cyberthreatexchange.com/` | Cyber Threat Exchange API URL | +| API Key | `CYBERTHREATEXCHANGE_API_KEY` | `cyberthreatexchange.api_key` | Yes | - | API key for authentication | +| Feed IDs | `CYBERTHREATEXCHANGE_FEED_IDS` | `cyberthreatexchange.feed_ids` | Yes | - | Comma-separated Feed IDs. Pass the Feed IDs like so `f0895eb3-7d90-4b45-8664-a7e157ba880f,b63c638e-43e6-43d4-bfac-5b71c264b132` | +| Interval Hours | `CYBERTHREATEXCHANGE_INTERVAL_HOURS` | `cyberthreatexchange.interval_hours` | Yes | `1` | Polling interval in hours. The connector with poll Cyber Threat Exchange for new Reports in the Feed(s) at this schedule. The minimum value allowed and recommended value is `1` | + +--- + +## Deployment + +### Docker Deployment + +Use the following `docker-compose.yml`: + +```yaml +services: + connector-cyberthreatexchange: + image: opencti/connector-dogesec-cyberthreatexchange:latest + environment: + - OPENCTI_URL=http://opencti:8080 + - OPENCTI_TOKEN=${OPENCTI_ADMIN_TOKEN} + - CONNECTOR_ID=${CONNECTOR_CYBERTHREATEXCHANGE_ID} + - CONNECTOR_NAME=CyberThreatExchange + - CONNECTOR_LOG_LEVEL=info + - CYBERTHREATEXCHANGE_BASE_URL=https://api.cyberthreatexchange.com/ + - CYBERTHREATEXCHANGE_API_KEY=${CYBERTHREATEXCHANGE_API_KEY} + - CYBERTHREATEXCHANGE_FEED_IDS=feed1-uuid,feed2-uuid + - CYBERTHREATEXCHANGE_INTERVAL_HOURS=12 + restart: always + depends_on: + - opencti +``` + +### Manual Deployment + +1. Clone the repository and navigate to the connector directory +2. Install dependencies: `pip install -r requirements.txt` +3. Configure `config.yml` +4. Run: `python connector.py` + +--- + +## Behavior + +### Data Flow + +```mermaid +graph LR + %% Box 1: Cyber Threat Exchange Web + subgraph CyberThreatExchange_Web["Cyber Threat Exchange Web"] + IntelFeeds[Intel Feeds] + end + + %% Box 2: Cyber Threat Exchange API + subgraph CyberThreatExchange_API["Cyber Threat Exchange API"] + API[API] + Bundle[STIX Bundle] + API --> Bundle + end + + %% Box 3: OpenCTI + subgraph OpenCTI["OpenCTI"] + Connector[Connector] + STIX[STIX Objects] + + Connector --> STIX + STIX --> report[Report] + STIX --> attack-pattern[Attack Pattern] + STIX --> campaign[Campaign] + STIX --> course-of-action[Course of Action] + STIX --> identity[Identity] + STIX --> indicator[Indicator] + STIX --> infrastructure[Infrastructure] + STIX --> intrusion-set[Intrusion Set] + STIX --> location[Location] + STIX --> malware[Malware] + STIX --> threat-actor[Threat Actor] + STIX --> tool[Tool] + STIX --> vulnerability[Vulnerability] + STIX --> x-mitre-tactic[ATT&CK Tactic] + STIX --> x-mitre-data-source[ATT&CK Data Source] + STIX --> x-mitre-data-component[ATT&CK Data Component] + + indicator --> autonomous-system[Autonomous System] + indicator --> bank-account[Bank Account] + indicator --> cryptocurrency-wallet[Cryptocurrency Wallet] + indicator --> directory[Directory] + indicator --> domain-name[Domain Name] + indicator --> email-addr[Email Address] + indicator --> file[File] + indicator --> ipv4-addr[IPv4 Address] + indicator --> ipv6-addr[IPv6 Address] + indicator --> network-traffic[Network Traffic] + indicator --> mac-addr[MAC Address] + indicator --> payment-card[Payment Card] + indicator --> phone-number[Phone Number] + indicator --> software[Software] + indicator --> url[URL] + indicator --> user-agent[User Agent] + indicator --> windows-registry-key[Windows Registry Key] + end + + %% Cross-section flow + IntelFeeds --> API + Bundle --> Connector +``` + +### Processing Details + +1. **Feed Selection**: + - At least one Feed ID must be provided + - Can import from multiple feeds (comma-separated) + - Access to feeds visible to authenticated team +2. **Historical Import**: + - All historical intelligence from reports is ingested + - New intelligence added to feeds is imported on schedule +3. **Incremental Updates**: + - Polls at configured interval (default: 12 hours) + - Only fetches new/updated intelligence since last run + +--- + +## Debugging + +Enable debug logging by setting `CONNECTOR_LOG_LEVEL=debug`. + +### Verification + +Navigate to `Data` → `Ingestion` → `Connectors` → `CyberThreatExchange` to verify the connector is working. + +--- + +## Additional Information + +### About CyberThreatExchange + +- **Website**: [cyberthreatexchange.com](https://www.cyberthreatexchange.com/) +- **Sign up**: Free tier available +- **Provider**: [dogesec](https://dogesec.com/) + +### Support + +- **OpenCTI Support**: For general connector installation help +- **dogesec Community Forum**: [community.dogesec.com](https://community.dogesec.com/) (recommended) +- **dogesec Support Portal**: [support.dogesec.com](https://support.dogesec.com/) (requires plan with email support) \ No newline at end of file diff --git a/external-import/dogesec-cyberthreatexchange/__metadata__/connector_manifest.json b/external-import/dogesec-cyberthreatexchange/__metadata__/connector_manifest.json new file mode 100644 index 00000000000..7ad6c53acef --- /dev/null +++ b/external-import/dogesec-cyberthreatexchange/__metadata__/connector_manifest.json @@ -0,0 +1,22 @@ +{ + "title": "Cyber Threat Exchange by dogesec", + "slug": "dogesec-cyberthreatexchange", + "description": "The Cyber Threat Exchange is a platform designed to provide tailored cyber threat intelligence through a marketplace model, allowing organizations to access insights produced by specialist researchers and analysts. Rather than aggregating broad, undifferentiated feeds, it emphasizes structured intelligence and targeted subscriptions that help security teams monitor relevant risks, campaigns, and threat actors across areas such as ransomware, geopolitical developments, and industry-specific threats.\n\nBy enabling users to subscribe to curated intelligence sources, the platform aims to improve the signal-to-noise ratio in threat monitoring and support faster decision-making for cybersecurity, risk, and intelligence teams. Its approach centers on delivering actionable, research-driven intelligence that can be integrated into organizational workflows, helping teams stay informed on evolving cyber risks and better prioritize detection, response, and mitigation efforts.", + "short_description": "The Cyber Threat Exchange is an online marketplace for cyber threat intelligence that connects organizations with specialist researchers and curated intelligence feeds.", + "logo": "external-import/dogesec-cyberthreatexchange/__metadata__/logo.png", + "use_cases": [ + "Commercial Threat Intel", + "Open Source Threat Intel" + ], + "verified": false, + "last_verified_date": null, + "playbook_supported": false, + "max_confidence_level": 50, + "support_version": ">=6.8.0", + "subscription_link": "https://www.cyberthreatexchange.com/", + "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/external-import/dogesec-cyberthreatexchange", + "manager_supported": false, + "container_version": "rolling", + "container_image": "opencti/connector-dogesec-cyberthreatexchange", + "container_type": "EXTERNAL_IMPORT" +} \ No newline at end of file diff --git a/external-import/dogesec-cyberthreatexchange/__metadata__/logo.png b/external-import/dogesec-cyberthreatexchange/__metadata__/logo.png new file mode 100644 index 00000000000..3b159e24053 Binary files /dev/null and b/external-import/dogesec-cyberthreatexchange/__metadata__/logo.png differ diff --git a/external-import/dogesec-cyberthreatexchange/config.yml.sample b/external-import/dogesec-cyberthreatexchange/config.yml.sample new file mode 100644 index 00000000000..86eebf85f35 --- /dev/null +++ b/external-import/dogesec-cyberthreatexchange/config.yml.sample @@ -0,0 +1,21 @@ +opencti: + url: 'http://localhost' + token: 'ChangeMe' + +connector: + type: 'EXTERNAL_IMPORT' + id: 'ChangeMe' + name: 'CyberThreatExchange' + scope: 'cyberthreatexchange' + confidence_level: 70 + update_existing_data: false + log_level: 'info' + queue_protocol: 'api' + auto_create_service_account: true + auto_create_service_account_confidence_level: 75 + +cyberthreatexchange: + base_url: 'https://api.cyberthreatexchange.com/' + api_key: ChangeMe + feed_ids: '' # comma separated feed ids + interval_hours: 1 # interval in hours \ No newline at end of file diff --git a/external-import/dogesec-cyberthreatexchange/docker-compose.yml b/external-import/dogesec-cyberthreatexchange/docker-compose.yml new file mode 100644 index 00000000000..4909bf7c467 --- /dev/null +++ b/external-import/dogesec-cyberthreatexchange/docker-compose.yml @@ -0,0 +1,19 @@ +version: '3' +services: + connector-dogesec-cyberthreatexchange: + image: opencti/connector-dogesec-cyberthreatexchange:latest + environment: + - OPENCTI_URL=http://localhost + - OPENCTI_TOKEN=ChangeMe + - CONNECTOR_ID=ChangeMe + - CONNECTOR_NAME=CyberThreatExchange + - CONNECTOR_SCOPE=cyberthreatexchange + - CONNECTOR_CONFIDENCE_LEVEL=70 + - CONNECTOR_LOG_LEVEL=error + - CONNECTOR_AUTO_CREATE_SERVICE_ACCOUNT=true + - CONNECTOR_AUTO_CREATE_SERVICE_ACCOUNT_CONFIDENCE_LEVEL=75 + - CYBERTHREATEXCHANGE_BASE_URL=https://api.cyberthreatexchange.com/ + - CYBERTHREATEXCHANGE_API_KEY= + - CYBERTHREATEXCHANGE_FEED_IDS= + - CYBERTHREATEXCHANGE_INTERVAL_HOURS=1 + restart: always diff --git a/external-import/dogesec-cyberthreatexchange/entrypoint.sh b/external-import/dogesec-cyberthreatexchange/entrypoint.sh new file mode 100644 index 00000000000..12a37410fcb --- /dev/null +++ b/external-import/dogesec-cyberthreatexchange/entrypoint.sh @@ -0,0 +1,6 @@ +#!/bin/sh +# Go to the right directory +cd /opt/opencti-connector-dogesec-cyberthreatexchange + +# Start the connector +python connector.py diff --git a/external-import/dogesec-cyberthreatexchange/requirements.txt b/external-import/dogesec-cyberthreatexchange/requirements.txt new file mode 100644 index 00000000000..f3f94b09ec4 --- /dev/null +++ b/external-import/dogesec-cyberthreatexchange/requirements.txt @@ -0,0 +1,2 @@ +pycti==7.260515.0 +requests<=2.33.0 \ No newline at end of file diff --git a/external-import/dogesec-cyberthreatexchange/src/connector.py b/external-import/dogesec-cyberthreatexchange/src/connector.py new file mode 100644 index 00000000000..17cfb328ab7 --- /dev/null +++ b/external-import/dogesec-cyberthreatexchange/src/connector.py @@ -0,0 +1,196 @@ +""" +CYBERTHREATEXCHANGE Connector +""" + +import json +import os +import sys +import traceback +from contextlib import contextmanager +from datetime import UTC, datetime +from urllib.parse import urljoin + +import requests +import yaml +from pycti import OpenCTIConnectorHelper, get_config_variable + + +class CTXException(Exception): + pass + + +class CyberThreatExchangeConnector: + def __init__(self): + """Read in config variables""" + + config_file_path = "config.yml" + config = ( + yaml.load(open(config_file_path), Loader=yaml.FullLoader) + if os.path.isfile(config_file_path) + else {} + ) + + self.helper = OpenCTIConnectorHelper(config) + self.base_url = self._get_param("base_url").strip("/") + "/" + self.api_key = self._get_param("api_key") + feed_ids = self._get_param("feed_ids") + self.feed_ids = feed_ids.split(",") if feed_ids else [] + self.interval_hours = self._get_param("interval_hours", is_number=True) + + if not self.feed_ids: + self.helper.log_error("at least one feed id required") + self.helper.stop() + sys.exit(1) + + self.session = requests.Session() + self.session.headers = { + "API-KEY": self.api_key, + } + + def _get_param( + self, param_name: str, is_number: bool = False, default_value: str = None + ) -> int | str: + return get_config_variable( + f"CYBERTHREATEXCHANGE_{param_name.upper()}", + ["cyberthreatexchange", param_name.lower()], + self.helper.config, + is_number, + default_value, + ) + + def list_subbed_feeds(self): + try: + return self.retrieve("v1/subscriptions/", list_key="results") + except Exception as e: + self.helper.log_error("failed to fetch feeds") + raise CTXException("failed to fetch feeds") from e + + def get_and_process_objects(self, feed, work_id): + feed_id = feed["id"] + self.helper.log_info( + "processing feed(id={id}, title='{name}')".format_map(feed) + ) + feed_state = self._get_state()["feeds"].get(feed_id, dict(last_run_at="")) + filters = dict() + self.current_run_time = datetime.now(UTC).isoformat() + if q := feed_state.get("last_run_at"): + filters.update(added_after=q) + + for objects in self._retrieve( + f"v1/feeds/{feed_id}/objects/", list_key="objects", params=filters + ): + self.helper.log_info( + f"processing batch of {len(objects)} objects for feed {feed_id}" + ) + bundle = dict( + type="bundle", + id=f"bundle--{feed_id}", + objects=objects, + ) + self.helper.log_info( + f"Feed(id={feed_id}) sending bundle with {len(objects)} items" + ) + self.helper.send_stix2_bundle(json.dumps(bundle), work_id=work_id) + + def _retrieve(self, path, list_key, params: dict = None): + params = params or {} + params.update(page_size=200) + objects_count = 0 + more = True + url = urljoin(self.base_url, path) + while more: + resp = self.session.get(url, params=params.copy()) + data = resp.json() + yield data[list_key] + objects_count += len(data[list_key]) + if ("next" in data and not data["next"]) or ( + "total_results_count" in data + and data["total_results_count"] <= objects_count + ): + more = False + if "next" in data: + url = data["next"] + if "total_results_count" in data: + params.update(page=data["page_number"] + 1) + return [] + + def retrieve(self, path, list_key, params: dict = None): + all_objects = [] + for objects in self._retrieve(path, list_key, params): + all_objects.extend(objects) + return all_objects + + def _run_once(self): + self.helper.log_info("running as scheduled") + for feed_data in self.list_subbed_feeds(): + feed = feed_data["feed"] + feed_id = feed["id"] + feed_name = feed["name"] + feed_repr = f"Feed(id={feed_id}, name={repr(feed_name)})" + if self.feed_ids and feed_id not in self.feed_ids: + self.helper.log_info( + f"skipping {feed_repr} not in config.cyberthreatexchange.feed_ids" + ) + continue + with self._run_in_work(f"Feed: {feed['name']} ({feed_id})") as work_id: + if feed_data["subscription"]["status"] != "active": + self.helper.log_info( + f"skipping {feed_repr} subscription not active" + ) + raise CTXException("skipping feed with inactive subscription") + self.helper.log_info(f"processing {feed_repr}") + self.get_and_process_objects(feed, work_id) + self.set_feed_state(feed_id, last_updated=self.current_run_time) + self.set_feed_state(None, None) + + @contextmanager + def _run_in_work(self, work_name: str): + work_id = self.helper.api.work.initiate_work(self.helper.connect_id, work_name) + message = "[CyberThreatExchange] Work done" + in_error = False + try: + yield work_id + except Exception as e: + self.helper.log_error(f"work failed: {e}") + message = "[CyberThreatExchange] Work failed - " + traceback.format_exc() + in_error = True + finally: + self.helper.api.work.to_processed( + work_id=work_id, message=message, in_error=in_error + ) + + def run_once(self): + with self._run_in_work("CyberThreatExchange Connector Run"): + self._run_once() + + def set_feed_state(self, feed_id, last_updated): + state = self._get_state() + if feed_id: + feed_state: dict = state["feeds"].setdefault(feed_id, {}) + feed_state.update( + last_run_at=max( + last_updated, feed_state.get("last_run_at", last_updated) + ) + ) + self.helper.set_state(state) + + def _get_state(self) -> dict: + state = self.helper.get_state() + if not state or "feeds" not in state: + state = {"feeds": {}} + return state + + def run(self): + self.helper.log_info("Starting CyberThreatExchange") + self.helper.schedule_process( + message_callback=self.run_once, + duration_period=self.interval_hours * 3600, + ) + + +if __name__ == "__main__": + try: + CyberThreatExchangeConnector().run() + except BaseException: + traceback.print_exc() + exit(1) diff --git a/external-import/dogesec-cyberthreatexchange/tests/__init__.py b/external-import/dogesec-cyberthreatexchange/tests/__init__.py new file mode 100644 index 00000000000..d4839a6b14c --- /dev/null +++ b/external-import/dogesec-cyberthreatexchange/tests/__init__.py @@ -0,0 +1 @@ +# Tests package diff --git a/external-import/dogesec-cyberthreatexchange/tests/conftest.py b/external-import/dogesec-cyberthreatexchange/tests/conftest.py new file mode 100644 index 00000000000..5ee8fc0e226 --- /dev/null +++ b/external-import/dogesec-cyberthreatexchange/tests/conftest.py @@ -0,0 +1,4 @@ +import os +import sys + +sys.path.append(os.path.join(os.path.dirname(__file__), "..", "src")) diff --git a/external-import/dogesec-cyberthreatexchange/tests/cyberthreatexchange/__init__.py b/external-import/dogesec-cyberthreatexchange/tests/cyberthreatexchange/__init__.py new file mode 100644 index 00000000000..cde6b37df66 --- /dev/null +++ b/external-import/dogesec-cyberthreatexchange/tests/cyberthreatexchange/__init__.py @@ -0,0 +1 @@ +# CyberThreatExchange tests package diff --git a/external-import/dogesec-cyberthreatexchange/tests/cyberthreatexchange/conftest.py b/external-import/dogesec-cyberthreatexchange/tests/cyberthreatexchange/conftest.py new file mode 100644 index 00000000000..2e374309742 --- /dev/null +++ b/external-import/dogesec-cyberthreatexchange/tests/cyberthreatexchange/conftest.py @@ -0,0 +1,56 @@ +from typing import Any +from unittest.mock import MagicMock + +import pytest +import pytest_mock + + +@pytest.fixture +def config_dict() -> dict[str, Any]: + return { + "opencti": { + "url": "http://test-opencti-url/", + "token": "test-opencti-token", + }, + "connector": { + "id": "ctx-connector-id", + "type": "EXTERNAL_IMPORT", + "name": "CyberThreatExchange", + "scope": "cyberthreatexchange", + "log_level": "info", + }, + "cyberthreatexchange": { + "base_url": "https://test-ctx-url/", + "api_key": "test-api-key", + "feed_ids": "feed-1,feed-2", + "interval_hours": "1", + }, + } + + +@pytest.fixture +def mock_config(config_dict: dict[str, Any], monkeypatch: pytest.MonkeyPatch): + for key, value in config_dict.items(): + for sub_key, sub_value in value.items(): + if sub_value is not None: + monkeypatch.setenv(f"{key.upper()}_{sub_key.upper()}", str(sub_value)) + + yield + + +@pytest.fixture +def mocked_helper(mocker: pytest_mock.MockerFixture): + helper = MagicMock() + mocker.patch("connector.OpenCTIConnectorHelper", return_value=helper) + helper.get_state.return_value = {} + helper.api.work.initiate_work.return_value = "work-id" + helper.connect_id = "connector-id" + helper.connect_name = "CyberThreatExchange" + yield helper + + +@pytest.fixture +def mock_session(mocker: pytest_mock.MockerFixture) -> MagicMock: + session = MagicMock() + mocker.patch("connector.requests.Session", return_value=session) + return session diff --git a/external-import/dogesec-cyberthreatexchange/tests/cyberthreatexchange/test_connector.py b/external-import/dogesec-cyberthreatexchange/tests/cyberthreatexchange/test_connector.py new file mode 100644 index 00000000000..7fd707c9370 --- /dev/null +++ b/external-import/dogesec-cyberthreatexchange/tests/cyberthreatexchange/test_connector.py @@ -0,0 +1,531 @@ +import json +from unittest.mock import MagicMock, call + +import freezegun +import pytest +from connector import CTXException, CyberThreatExchangeConnector +from pytest_mock import MockerFixture + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_connector_init( + mocked_helper: MagicMock, mock_session: MagicMock, mock_config +) -> None: + """Test connector initialization""" + connector = CyberThreatExchangeConnector() + + assert connector.base_url == "https://test-ctx-url/" + assert connector.api_key == "test-api-key" + assert connector.feed_ids == ["feed-1", "feed-2"] + assert connector.interval_hours == 1 + assert connector.session.headers == {"API-KEY": "test-api-key"} + + +@pytest.fixture +def connector( + mocked_helper, mock_session: MagicMock, mock_config +) -> CyberThreatExchangeConnector: + """Fixture for CyberThreatExchangeConnector instance""" + return CyberThreatExchangeConnector() + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_connector_run(connector: CyberThreatExchangeConnector) -> None: + """Test connector run method""" + connector.run() + + assert connector.helper.log_info.call_count == 1 + connector.helper.log_info.assert_has_calls([call("Starting CyberThreatExchange")]) + + assert connector.helper.schedule_process.call_count == 1 + connector.helper.schedule_process.assert_called_once_with( + message_callback=connector.run_once, duration_period=3600 + ) + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_get_state_empty(connector: CyberThreatExchangeConnector) -> None: + """Test _get_state with empty state""" + connector.helper.get_state.return_value = None + + state = connector._get_state() + + assert state == {"feeds": {}} + connector.helper.get_state.assert_called_once() + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_get_state_existing(connector: CyberThreatExchangeConnector) -> None: + """Test _get_state with existing state""" + existing_state = { + "feeds": {"feed-1": {"last_run_at": "2026-02-17T15:24:00Z"}}, + } + connector.helper.get_state.return_value = existing_state + + state = connector._get_state() + + assert state == existing_state + connector.helper.get_state.assert_called_once() + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_set_feed_state(connector: CyberThreatExchangeConnector) -> None: + """Test set_feed_state method""" + connector.helper.get_state.return_value = {"feeds": {}} + + connector.set_feed_state("feed-1", last_updated="2026-02-18T15:24:00Z") + + expected_state = { + "feeds": {"feed-1": {"last_run_at": "2026-02-18T15:24:00Z"}}, + } + connector.helper.set_state.assert_called_once_with(expected_state) + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_set_feed_state_updates_max(connector: CyberThreatExchangeConnector) -> None: + """Test set_feed_state updates to max of existing and new timestamp""" + connector.helper.get_state.return_value = { + "feeds": {"feed-1": {"last_run_at": "2026-02-19T15:24:00Z"}} + } + + connector.set_feed_state("feed-1", last_updated="2026-02-18T15:24:00Z") + + # Should keep the later timestamp + expected_state = { + "feeds": {"feed-1": {"last_run_at": "2026-02-19T15:24:00Z"}}, + } + connector.helper.set_state.assert_called_once_with(expected_state) + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_set_feed_state_without_feed_id( + connector: CyberThreatExchangeConnector, +) -> None: + """Test set_feed_state with None feed_id""" + connector.helper.get_state.return_value = {"feeds": {}} + + connector.set_feed_state(None, None) + + expected_state = {"feeds": {}} + connector.helper.set_state.assert_called_once_with(expected_state) + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_list_subbed_feeds_success( + mock_session: MagicMock, connector: CyberThreatExchangeConnector +) -> None: + """Test list_subbed_feeds success""" + mock_response = MagicMock() + mock_response.json.return_value = { + "total_results_count": 2, + "page_number": 1, + "results": [ + { + "feed": {"id": "feed-1", "name": "Feed One"}, + "subscription": {"status": "active"}, + }, + { + "feed": {"id": "feed-2", "name": "Feed Two"}, + "subscription": {"status": "active"}, + }, + ], + } + mock_session.get.return_value = mock_response + + feeds = connector.list_subbed_feeds() + + assert len(feeds) == 2 + assert feeds[0]["feed"]["id"] == "feed-1" + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_list_subbed_feeds_failure( + mock_session: MagicMock, connector: CyberThreatExchangeConnector +) -> None: + """Test list_subbed_feeds failure""" + mock_session.get.side_effect = Exception("API Error") + + with pytest.raises(CTXException, match="failed to fetch feeds"): + connector.list_subbed_feeds() + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_retrieve( + mock_session: MagicMock, connector: CyberThreatExchangeConnector +) -> None: + """Test retrieve method with pagination""" + # Mock two pages of results + mock_response_1 = MagicMock() + mock_response_1.json.return_value = { + "total_results_count": 3, + "page_number": 1, + "results": [{"id": "obj-1"}, {"id": "obj-2"}], + } + + mock_response_2 = MagicMock() + mock_response_2.json.return_value = { + "total_results_count": 3, + "page_number": 2, + "results": [{"id": "obj-3"}], + } + + mock_session.get.side_effect = [mock_response_1, mock_response_2] + + objects = connector.retrieve("v1/test/", list_key="results") + + assert len(objects) == 3 + assert objects[0]["id"] == "obj-1" + assert objects[2]["id"] == "obj-3" + mock_session.get.assert_has_calls( + [ + call("https://test-ctx-url/v1/test/", params={"page_size": 200}), + call("https://test-ctx-url/v1/test/", params={"page_size": 200, "page": 2}), + ], + any_order=True, + ) + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_retrieve_with_params( + mock_session: MagicMock, connector: CyberThreatExchangeConnector +) -> None: + """Test retrieve method with custom params""" + mock_response = MagicMock() + mock_response.json.return_value = { + "total_results_count": 1, + "page_number": 1, + "objects": [{"id": "obj-1"}], + } + mock_session.get.return_value = mock_response + + objects = connector.retrieve( + "v1/test/", list_key="objects", params={"added_after": "2026-02-17T00:00:00Z"} + ) + + assert len(objects) == 1 + # Verify params were passed + mock_session.get.assert_has_calls( + [ + call( + "https://test-ctx-url/v1/test/", + params={"added_after": "2026-02-17T00:00:00Z", "page_size": 200}, + ) + ], + any_order=True, + ) + call_params = mock_session.get.call_args[1]["params"] + assert "added_after" in call_params + assert call_params["added_after"] == "2026-02-17T00:00:00Z" + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_retrieve_generator( + mock_session: MagicMock, connector: CyberThreatExchangeConnector +) -> None: + """Test _retrieve generator method""" + # Mock two batches + mock_response_1 = MagicMock() + mock_response_1.json.return_value = { + "total_results_count": 3, + "page_number": 1, + "objects": [{"id": "obj-1"}, {"id": "obj-2"}], + } + + mock_response_2 = MagicMock() + mock_response_2.json.return_value = { + "total_results_count": 3, + "page_number": 2, + "objects": [{"id": "obj-3"}], + } + + mock_session.get.side_effect = [mock_response_1, mock_response_2] + + batches = list(connector._retrieve("v1/test/", list_key="objects")) + + assert len(batches) == 2 + assert len(batches[0]) == 2 + assert len(batches[1]) == 1 + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_retrieve_with_next_url( + mock_session: MagicMock, connector: CyberThreatExchangeConnector +) -> None: + """Test _retrieve with next URL pagination""" + # Mock responses with next URL + mock_response_1 = MagicMock() + mock_response_1.json.return_value = { + "next": "https://test-ctx-url/v1/test/?page=2", + "objects": [{"id": "obj-1"}], + } + + mock_response_2 = MagicMock() + mock_response_2.json.return_value = { + "next": None, + "objects": [{"id": "obj-2"}], + } + + mock_session.get.side_effect = [mock_response_1, mock_response_2] + + batches = list(connector._retrieve("v1/test/", list_key="objects")) + + assert len(batches) == 2 + # Verify second call used the next URL + mock_session.get.assert_has_calls( + [ + call("https://test-ctx-url/v1/test/", params={"page_size": 200}), + call("https://test-ctx-url/v1/test/?page=2", params={"page_size": 200}), + ] + ) + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_get_and_process_objects_no_filter( + mocker: MockerFixture, + mock_session: MagicMock, + connector: CyberThreatExchangeConnector, +) -> None: + """Test get_and_process_objects without last_run_at""" + connector.helper.get_state.return_value = {"feeds": {}} + + feed = {"id": "feed-1", "name": "Test Feed"} + + # Mock _retrieve to return batches + mock_objects = [ + [{"type": "indicator", "id": "indicator--1"}], + [{"type": "indicator", "id": "indicator--2"}], + ] + mocker.patch.object(connector, "_retrieve", return_value=iter(mock_objects)) + + connector.get_and_process_objects(feed, "work-id") + + # Verify bundles were sent + assert connector.helper.send_stix2_bundle.call_count == 2 + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_get_and_process_objects_with_filter( + mocker: MockerFixture, + mock_session: MagicMock, + connector: CyberThreatExchangeConnector, +) -> None: + """Test get_and_process_objects with last_run_at filter""" + connector.helper.get_state.return_value = { + "feeds": {"feed-1": {"last_run_at": "2026-02-17T15:24:00Z"}} + } + + feed = {"id": "feed-1", "name": "Test Feed"} + + mock_objects = [[{"type": "indicator", "id": "indicator--1"}]] + retrieve_mock = mocker.patch.object( + connector, "_retrieve", return_value=iter(mock_objects) + ) + + connector.get_and_process_objects(feed, "work-id") + + # Verify _retrieve was called with added_after filter + call_args = retrieve_mock.call_args + assert "params" in call_args[1] + assert "added_after" in call_args[1]["params"] + assert call_args[1]["params"]["added_after"] == "2026-02-17T15:24:00Z" + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_get_and_process_objects_creates_bundle( + mocker: MockerFixture, + mock_session: MagicMock, + connector: CyberThreatExchangeConnector, +) -> None: + """Test get_and_process_objects creates proper STIX bundle""" + connector.helper.get_state.return_value = {"feeds": {}} + + feed = {"id": "feed-1", "name": "Test Feed"} + + mock_objects = [ + [ + {"type": "indicator", "id": "indicator--1"}, + {"type": "indicator", "id": "indicator--2"}, + ] + ] + mocker.patch.object(connector, "_retrieve", return_value=iter(mock_objects)) + + connector.get_and_process_objects(feed, "work-id") + + connector.helper.send_stix2_bundle.assert_called_once() + bundle_arg = connector.helper.send_stix2_bundle.call_args[0][0] + bundle = json.loads(bundle_arg) + + assert bundle["type"] == "bundle" + assert bundle["id"] == "bundle--feed-1" + assert len(bundle["objects"]) == 2 + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_run_once_processes_all_feeds( + mocker: MockerFixture, connector: CyberThreatExchangeConnector +) -> None: + """Test _run_once processes all subscribed feeds""" + mock_feeds = [ + { + "feed": {"id": "feed-1", "name": "Feed One"}, + "subscription": {"status": "active"}, + }, + { + "feed": {"id": "feed-2", "name": "Feed Two"}, + "subscription": {"status": "active"}, + }, + ] + mocker.patch.object(connector, "list_subbed_feeds", return_value=mock_feeds) + get_and_process_mock = mocker.patch.object(connector, "get_and_process_objects") + mocker.patch.object(connector, "set_feed_state") + + connector._run_once() + + assert get_and_process_mock.call_count == 2 + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_run_once_filters_by_config_feed_ids( + mocker: MockerFixture, connector: CyberThreatExchangeConnector +) -> None: + """Test _run_once filters feeds based on config""" + mock_feeds = [ + { + "feed": {"id": "feed-1", "name": "Feed One"}, + "subscription": {"status": "active"}, + }, + { + "feed": {"id": "feed-3", "name": "Feed Three"}, + "subscription": {"status": "active"}, + }, + ] + mocker.patch.object(connector, "list_subbed_feeds", return_value=mock_feeds) + get_and_process_mock = mocker.patch.object(connector, "get_and_process_objects") + mocker.patch.object(connector, "set_feed_state") + + connector._run_once() + + # Only feed-1 should be processed (feed-3 not in config) + assert get_and_process_mock.call_count == 1 + assert get_and_process_mock.call_args[0][0]["id"] == "feed-1" + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_run_once_skips_inactive_subscriptions( + mocker: MockerFixture, connector: CyberThreatExchangeConnector +) -> None: + """Test _run_once skips feeds with inactive subscriptions""" + mock_feeds = [ + { + "feed": {"id": "feed-1", "name": "Feed One"}, + "subscription": {"status": "inactive"}, + }, + ] + mocker.patch.object(connector, "list_subbed_feeds", return_value=mock_feeds) + get_and_process_mock = mocker.patch.object(connector, "get_and_process_objects") + + connector._run_once() + + # Should not process inactive subscription + get_and_process_mock.assert_not_called() + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_run_once_creates_work_per_feed( + mocker: MockerFixture, connector: CyberThreatExchangeConnector +) -> None: + """Test _run_once creates separate work items for each feed""" + mock_feeds = [ + { + "feed": {"id": "feed-1", "name": "Feed One"}, + "subscription": {"status": "active"}, + }, + { + "feed": {"id": "feed-2", "name": "Feed Two"}, + "subscription": {"status": "active"}, + }, + ] + mocker.patch.object(connector, "list_subbed_feeds", return_value=mock_feeds) + mocker.patch.object(connector, "get_and_process_objects") + mocker.patch.object(connector, "set_feed_state") + + connector._run_once() + + # Should create work item for each feed + assert connector.helper.api.work.initiate_work.call_count == 2 + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_run_once_updates_feed_state( + mocker: MockerFixture, connector: CyberThreatExchangeConnector +) -> None: + """Test _run_once updates feed state after processing""" + mock_feeds = [ + { + "feed": {"id": "feed-1", "name": "Feed One"}, + "subscription": {"status": "active"}, + }, + { + "feed": {"id": "feed-2", "name": "Feed Two"}, + "subscription": {"status": "active"}, + }, + ] + connector.feed_ids = ["feed-1"] + connector.current_run_time = "2026-02-18T15:24:00Z" + mocker.patch.object(connector, "list_subbed_feeds", return_value=mock_feeds) + mocker.patch.object(connector, "get_and_process_objects") + set_feed_state_mock = mocker.patch.object(connector, "set_feed_state") + + connector._run_once() + + set_feed_state_mock.assert_has_calls( + [call("feed-1", last_updated="2026-02-18T15:24:00Z"), call(None, None)] + ) + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_run_once_wrapper( + mocker: MockerFixture, connector: CyberThreatExchangeConnector +) -> None: + """Test run_once method wraps _run_once in work context""" + run_once_mock = mocker.patch.object(connector, "_run_once") + + connector.run_once() + + run_once_mock.assert_called_once() + connector.helper.api.work.initiate_work.assert_called_once() + connector.helper.api.work.to_processed.assert_called_once() + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_run_in_work_success(connector: CyberThreatExchangeConnector) -> None: + """Test _run_in_work context manager success""" + with connector._run_in_work("Test Work") as work_id: + assert work_id == "work-id" + + connector.helper.api.work.to_processed.assert_called_once_with( + work_id="work-id", message="[CyberThreatExchange] Work done", in_error=False + ) + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_run_in_work_failure(connector: CyberThreatExchangeConnector) -> None: + """Test _run_in_work context manager failure""" + with connector._run_in_work("Test Work"): + raise ValueError("Test error") + + call_kwargs = connector.helper.api.work.to_processed.call_args[1] + assert call_kwargs["in_error"] is True + assert "[CyberThreatExchange] Work failed" in call_kwargs["message"] + assert "ValueError: Test error" in call_kwargs["message"] + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_get_param(connector: CyberThreatExchangeConnector) -> None: + """Test _get_param method""" + result = connector._get_param("base_url") + assert result == "https://test-ctx-url/" + + result = connector._get_param("interval_hours", is_number=True) + assert result == 1 + assert isinstance(result, int) diff --git a/external-import/dogesec-cyberthreatexchange/tests/test-requirements.txt b/external-import/dogesec-cyberthreatexchange/tests/test-requirements.txt new file mode 100644 index 00000000000..03e48c0cc0d --- /dev/null +++ b/external-import/dogesec-cyberthreatexchange/tests/test-requirements.txt @@ -0,0 +1,4 @@ +-r ../requirements.txt +pytest +pytest-mock +freezegun diff --git a/external-import/dogesec-obstracts/requirements.txt b/external-import/dogesec-obstracts/requirements.txt index a499067031e..6ae8ef349b5 100644 --- a/external-import/dogesec-obstracts/requirements.txt +++ b/external-import/dogesec-obstracts/requirements.txt @@ -1,3 +1,3 @@ -pycti==7.260309.0 -requests +pycti==7.260515.0 +requests<=2.33.0 schedule \ No newline at end of file diff --git a/external-import/dogesec-obstracts/src/obstracts.py b/external-import/dogesec-obstracts/src/obstracts.py index a6cb44e7dc1..f640aa03e59 100644 --- a/external-import/dogesec-obstracts/src/obstracts.py +++ b/external-import/dogesec-obstracts/src/obstracts.py @@ -4,16 +4,20 @@ import json import os -import time +import traceback +from contextlib import contextmanager from datetime import UTC, datetime, timedelta from urllib.parse import urljoin import requests -import schedule import yaml from pycti import OpenCTIConnectorHelper, get_config_variable +class ObstractsException(Exception): + pass + + class ObstractsConnector: def __init__(self): """Read in config variables""" @@ -26,7 +30,7 @@ def __init__(self): ) self.helper = OpenCTIConnectorHelper(config) - self.base_url = self._get_param("base_url") + "/" + self.base_url = self._get_param("base_url").strip("/") + "/" self.api_key = self._get_param("api_key") feed_ids = self._get_param("feed_ids") self.feed_ids = feed_ids.split(",") if feed_ids else [] @@ -55,11 +59,11 @@ def list_feeds(self): "v1/feeds/", list_key="feeds", params=dict(show_only_my_feeds="true") ) return [feed for feed in feeds] - except Exception: + except Exception as e: self.helper.log_error("failed to fetch feeds") - return [] + raise ObstractsException("failed to fetch feeds") from e - def get_posts_after_last(self, feed): + def get_posts_after_last(self, feed, work_id): feed_id = feed["id"] self.helper.log_info("processing Feed(id={id}, title={title})".format_map(feed)) feed_state = self._get_state()["feeds"].get( @@ -70,6 +74,7 @@ def get_posts_after_last(self, feed): ).isoformat() ), ) + self.current_run_time = datetime.now(UTC).isoformat() feed_posts = self.retrieve( f"v1/feeds/{feed_id}/posts/", "posts", @@ -80,9 +85,9 @@ def get_posts_after_last(self, feed): ), ) for post in feed_posts: - self.process_post(feed_id, post) + self.process_post(feed_id, post, work_id) - def process_post(self, feed_id, post: dict): + def process_post(self, feed_id, post: dict, work_id): post_id = post["id"] post_title = post["title"] post_name = f"Post(title={repr(post_title)}, id={post_id})" @@ -99,7 +104,7 @@ def process_post(self, feed_id, post: dict): id=f"bundle--{post_id}", objects=objects, ) - self.helper.send_stix2_bundle(json.dumps(bundle), work_id=self.work_id) + self.helper.send_stix2_bundle(json.dumps(bundle), work_id=work_id) self.set_feed_state(feed_id, last_updated=post_updated) except Exception: self.helper.log_error("could not process post " + post_name) @@ -121,36 +126,44 @@ def retrieve(self, path, list_key, params: dict = None): ) return objects - def run_once(self): - in_error = False - try: - self.work_id = self.helper.api.work.initiate_work( - self.helper.connect_id, self.helper.connect_name - ) - self._run_once() - except Exception: - self.helper.log_error("run failed") - in_error = True - finally: - self.helper.api.work.to_processed( - work_id=self.work_id, - message="[CONNECTOR] Connector exited gracefully", - in_error=in_error, - ) - self.work_id = None - def _run_once(self): self.helper.log_info("running as scheduled") for feed in self.list_feeds(): feed_id = feed["id"] + feed_title = feed["title"] if feed_id not in (self.feed_ids or [feed_id]): self.helper.log_info( f"skipping feed with id (`{feed_id}`) not in config.obstracts.feed_ids" ) continue - self.get_posts_after_last(feed) + with self._run_in_work(f"Feed: {feed_title} ({feed_id})") as work_id: + self.helper.log_info( + f"processing Feed(id={feed_id}, title={feed_title})" + ) + self.get_posts_after_last(feed, work_id) + self.set_feed_state(feed_id, last_updated=self.current_run_time) self.set_feed_state(None, None) + @contextmanager + def _run_in_work(self, work_name: str): + work_id = self.helper.api.work.initiate_work(self.helper.connect_id, work_name) + message = "[OBSTRACTS] Work done" + in_error = False + try: + yield work_id + except Exception as e: + self.helper.log_error(f"work failed: {e}") + message = "[OBSTRACTS] Work failed - " + traceback.format_exc() + in_error = True + finally: + self.helper.api.work.to_processed( + work_id=work_id, message=message, in_error=in_error + ) + + def run_once(self): + with self._run_in_work("Obstracts Connector Run"): + self._run_once() + def set_feed_state(self, feed_id, last_updated): state = self._get_state() if feed_id: @@ -168,12 +181,15 @@ def _get_state(self) -> dict: def run(self): self.helper.log_info("Starting Obstracts") - schedule.every(self.interval_hours).hours.do(self.run_once) - self.run_once() - while True: - schedule.run_pending() - time.sleep(1) + self.helper.schedule_process( + message_callback=self.run_once, + duration_period=self.interval_hours * 3600, + ) if __name__ == "__main__": - ObstractsConnector().run() + try: + ObstractsConnector().run() + except BaseException: + traceback.print_exc() + exit(1) diff --git a/external-import/dogesec-obstracts/tests/__init__.py b/external-import/dogesec-obstracts/tests/__init__.py new file mode 100644 index 00000000000..66173aec46f --- /dev/null +++ b/external-import/dogesec-obstracts/tests/__init__.py @@ -0,0 +1 @@ +# Test package diff --git a/external-import/dogesec-obstracts/tests/conftest.py b/external-import/dogesec-obstracts/tests/conftest.py new file mode 100644 index 00000000000..5ee8fc0e226 --- /dev/null +++ b/external-import/dogesec-obstracts/tests/conftest.py @@ -0,0 +1,4 @@ +import os +import sys + +sys.path.append(os.path.join(os.path.dirname(__file__), "..", "src")) diff --git a/external-import/dogesec-obstracts/tests/obstracts/__init__.py b/external-import/dogesec-obstracts/tests/obstracts/__init__.py new file mode 100644 index 00000000000..66173aec46f --- /dev/null +++ b/external-import/dogesec-obstracts/tests/obstracts/__init__.py @@ -0,0 +1 @@ +# Test package diff --git a/external-import/dogesec-obstracts/tests/obstracts/conftest.py b/external-import/dogesec-obstracts/tests/obstracts/conftest.py new file mode 100644 index 00000000000..98fec7652fd --- /dev/null +++ b/external-import/dogesec-obstracts/tests/obstracts/conftest.py @@ -0,0 +1,57 @@ +from typing import Any +from unittest.mock import MagicMock + +import pytest +from pytest_mock import MockerFixture + + +@pytest.fixture +def config_dict() -> dict[str, Any]: + return { + "opencti": { + "url": "http://test-opencti-url/", + "token": "test-opencti-token", + }, + "connector": { + "id": "obstracts-connector-id", + "type": "EXTERNAL_IMPORT", + "name": "Obstracts", + "scope": "obstracts", + "log_level": "info", + }, + "obstracts": { + "base_url": "https://test-obstracts-url/", + "api_key": "test-api-key", + "feed_ids": "feed-1,feed-2", + "interval_hours": "1", + "days_to_backfill": "7", + }, + } + + +@pytest.fixture +def mock_config(config_dict: dict[str, Any], monkeypatch: pytest.MonkeyPatch): + for key, value in config_dict.items(): + for sub_key, sub_value in value.items(): + if sub_value is not None: + monkeypatch.setenv(f"{key.upper()}_{sub_key.upper()}", str(sub_value)) + + yield + + +@pytest.fixture +def mocked_helper(mocker: MockerFixture): + helper = MagicMock() + mocker.patch("obstracts.OpenCTIConnectorHelper", return_value=helper) + helper.get_state.return_value = {} + helper.api.work.initiate_work.return_value = "work-id" + helper.connect_id = "connector-id" + helper.connect_name = "Obstracts" + yield helper + + +@pytest.fixture +def mock_session(mocker: MockerFixture) -> MagicMock: + session = MagicMock() + mocker.patch("obstracts.requests.Session", return_value=session) + return session diff --git a/external-import/dogesec-obstracts/tests/obstracts/test_connector.py b/external-import/dogesec-obstracts/tests/obstracts/test_connector.py new file mode 100644 index 00000000000..be97b241ec5 --- /dev/null +++ b/external-import/dogesec-obstracts/tests/obstracts/test_connector.py @@ -0,0 +1,409 @@ +import json +from datetime import UTC, datetime, timedelta +from unittest.mock import MagicMock, call + +import freezegun +import pytest +from obstracts import ObstractsConnector, ObstractsException +from pytest_mock import MockerFixture + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_connector_init(mocked_helper, mock_session: MagicMock, mock_config) -> None: + """Test connector initialization""" + connector = ObstractsConnector() + assert connector.base_url == "https://test-obstracts-url/" + assert connector.api_key == "test-api-key" + assert connector.feed_ids == ["feed-1", "feed-2"] + assert connector.interval_hours == 1 + assert connector.days_to_backfill == 7 + assert connector.session.headers == {"API-KEY": "test-api-key"} + + +@pytest.fixture +def connector( + mocked_helper, mock_session: MagicMock, mock_config +) -> ObstractsConnector: + """Fixture for ObstractsConnector instance""" + return ObstractsConnector() + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_connector_run(connector: ObstractsConnector) -> None: + """Test connector run method""" + connector.run() + + assert connector.helper.log_info.call_count == 1 + connector.helper.log_info.assert_has_calls([call("Starting Obstracts")]) + + assert connector.helper.schedule_process.call_count == 1 + connector.helper.schedule_process.assert_called_once_with( + message_callback=connector.run_once, duration_period=3600 + ) + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_get_state_empty(connector: ObstractsConnector) -> None: + """Test _get_state with empty state""" + connector.helper.get_state.return_value = None + + state = connector._get_state() + + assert state == {"feeds": {}} + connector.helper.get_state.assert_called_once() + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_get_state_existing(connector: ObstractsConnector) -> None: + """Test _get_state with existing state""" + existing_state = { + "feeds": {"feed-1": {"latest_post_update_time": "2026-02-17T15:24:00Z"}}, + "last_run": "2026-02-17T15:24:00Z", + } + connector.helper.get_state.return_value = existing_state + state = connector._get_state() + + assert state == existing_state + connector.helper.get_state.assert_called_once() + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_set_feed_state(connector: ObstractsConnector) -> None: + """Test set_feed_state method""" + connector.helper.get_state.return_value = {"feeds": {}} + + connector.set_feed_state("feed-1", "2026-02-18T15:24:00Z") + + expected_state = { + "feeds": {"feed-1": {"latest_post_update_time": "2026-02-18T15:24:00Z"}}, + "last_run": "2026-02-18T15:24:00+00:00", + } + connector.helper.set_state.assert_called_once_with(expected_state) + connector.helper.last_run_datetime.assert_called_once() + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_set_feed_state_no_feed_id(connector: ObstractsConnector) -> None: + """Test set_feed_state with no feed_id (final state save)""" + existing_state = { + "feeds": {"feed-1": {"latest_post_update_time": "2026-02-17T15:24:00Z"}}, + "last_run": "2025-02-17T15:24:00Z", + } + connector.helper.get_state.return_value = existing_state + + connector.set_feed_state(None, None) + + expected_state = existing_state.copy() + expected_state["last_run"] = "2026-02-18T15:24:00+00:00" + connector.helper.set_state.assert_called_once_with(expected_state) + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_list_feeds_success( + mock_session: MagicMock, connector: ObstractsConnector +) -> None: + """Test list_feeds success""" + mock_response = MagicMock() + mock_response.json.return_value = { + "total_results_count": 2, + "feeds": [ + {"id": "feed-1", "title": "Feed One"}, + {"id": "feed-2", "title": "Feed Two"}, + ], + } + mock_session.get.return_value = mock_response + + feeds = connector.list_feeds() + + assert len(feeds) == 2 + assert feeds[0]["id"] == "feed-1" + assert feeds[1]["id"] == "feed-2" + mock_session.get.assert_called() + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_list_feeds_failure( + mock_session: MagicMock, connector: ObstractsConnector +) -> None: + """Test list_feeds failure""" + mock_session.get.side_effect = Exception("API Error") + + with pytest.raises(ObstractsException, match="failed to fetch feeds"): + connector.list_feeds() + + connector.helper.log_error.assert_called_once_with("failed to fetch feeds") + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_retrieve(mock_session: MagicMock, connector: ObstractsConnector) -> None: + """Test retrieve method with pagination""" + # Mock two pages of results + mock_response_1 = MagicMock() + mock_response_1.json.return_value = { + "total_results_count": 3, + "objects": [{"id": "obj-1"}, {"id": "obj-2"}], + } + + mock_response_2 = MagicMock() + mock_response_2.json.return_value = { + "total_results_count": 3, + "objects": [{"id": "obj-3"}], + } + + mock_session.get.side_effect = [mock_response_1, mock_response_2] + + objects = connector.retrieve("v1/test/", list_key="objects") + + assert len(objects) == 3 + assert objects[0]["id"] == "obj-1" + assert objects[2]["id"] == "obj-3" + assert mock_session.get.call_count == 2 + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_process_post_success( + mock_session: MagicMock, connector: ObstractsConnector +) -> None: + """Test process_post success""" + + post = { + "id": "post-1", + "title": "Test Post", + "datetime_updated": "2026-02-18T15:24:00Z", + } + + mock_response = MagicMock() + mock_response.json.return_value = { + "total_results_count": 2, + "objects": [ + {"type": "indicator", "id": "indicator--1"}, + {"type": "indicator", "id": "indicator--2"}, + ], + } + mock_session.get.return_value = mock_response + + connector.process_post("feed-1", post, "work-id") + + # Verify bundle was sent + connector.helper.send_stix2_bundle.assert_called_once() + bundle_arg = connector.helper.send_stix2_bundle.call_args[0][0] + bundle = json.loads(bundle_arg) + + assert bundle["type"] == "bundle" + assert bundle["id"] == "bundle--post-1" + assert len(bundle["objects"]) == 2 + + # Verify work_id was passed + assert connector.helper.send_stix2_bundle.call_args[1]["work_id"] == "work-id" + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_process_post_failure( + mock_session: MagicMock, connector: ObstractsConnector +) -> None: + """Test process_post failure""" + + post = { + "id": "post-1", + "title": "Test Post", + "datetime_updated": "2026-02-18T15:24:00Z", + } + + mock_session.get.side_effect = Exception("API Error") + + # Should not raise, but log error + connector.process_post("feed-1", post, "work-id") + + connector.helper.log_error.assert_called_once_with( + "could not process post Post(title='Test Post', id=post-1)" + ) + connector.helper.send_stix2_bundle.assert_not_called() + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_get_posts_after_last_with_state( + mocker: MockerFixture, mock_session: MagicMock, connector: ObstractsConnector +) -> None: + """Test get_posts_after_last with existing state""" + existing_state = { + "feeds": {"feed-1": {"latest_post_update_time": "2026-02-17T15:24:00Z"}} + } + connector.helper.get_state.return_value = existing_state + + feed = {"id": "feed-1", "title": "Test Feed"} + + # Mock retrieve to return posts + mock_response = MagicMock() + mock_response.json.return_value = { + "total_results_count": 1, + "posts": [ + { + "id": "post-1", + "title": "Post 1", + "datetime_updated": "2026-02-18T15:24:00Z", + } + ], + } + mock_session.get.return_value = mock_response + + # Mock process_post + process_post_mock = mocker.patch.object(connector, "process_post") + + connector.get_posts_after_last(feed, "work-id") + + # Verify retrieve was called with correct params + assert "updated_after" in mock_session.get.call_args[1]["params"] + assert ( + mock_session.get.call_args[1]["params"]["updated_after"] + == "2026-02-17T15:24:00Z" + ) + + # Verify process_post was called + process_post_mock.assert_called_once() + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_get_posts_after_last_no_state( + mocker: MockerFixture, mock_session: MagicMock, connector: ObstractsConnector +) -> None: + """Test get_posts_after_last with no state (uses backfill)""" + connector.helper.get_state.return_value = {"feeds": {}} + + feed = {"id": "feed-1", "title": "Test Feed"} + + mock_response = MagicMock() + mock_response.json.return_value = { + "total_results_count": 0, + "posts": [], + } + mock_session.get.return_value = mock_response + + mocker.patch.object(connector, "process_post") + + connector.get_posts_after_last(feed, "work-id") + + # Verify backfill date was used (7 days ago) + expected_date = (datetime.now(UTC) - timedelta(days=7)).isoformat() + assert "updated_after" in mock_session.get.call_args[1]["params"] + assert isinstance(mock_session.get.call_args[1]["params"]["updated_after"], str) + assert expected_date == mock_session.get.call_args[1]["params"]["updated_after"] + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_run_once(mocker: MockerFixture, connector: ObstractsConnector) -> None: + """Test run_once method""" + + # Mock list_feeds + mock_feeds = [ + {"id": "feed-1", "title": "Feed One"}, + {"id": "feed-2", "title": "Feed Two"}, + ] + mocker.patch.object(connector, "list_feeds", return_value=mock_feeds) + + # Mock get_posts_after_last + get_posts_mock = mocker.patch.object(connector, "get_posts_after_last") + + # Mock set_feed_state + mocker.patch.object(connector, "set_feed_state") + + connector.run_once() + + # Verify work was initiated + connector.helper.api.work.initiate_work.assert_called() + + # Verify feeds were processed + assert get_posts_mock.call_count == 2 + + # Verify work was closed + connector.helper.api.work.to_processed.assert_called() + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_run_once_filters_feeds( + mocker: MockerFixture, connector: ObstractsConnector +) -> None: + """Test run_once filters feeds based on config""" + + # Mock list_feeds to return 3 feeds, but only 2 are in config + mock_feeds = [ + {"id": "feed-1", "title": "Feed One"}, + {"id": "feed-2", "title": "Feed Two"}, + {"id": "feed-3", "title": "Feed Three"}, # Not in config + ] + mocker.patch.object(connector, "list_feeds", return_value=mock_feeds) + + get_posts_mock = mocker.patch.object(connector, "get_posts_after_last") + mocker.patch.object(connector, "set_feed_state") + + connector.run_once() + + # Should only process 2 feeds (feed-1 and feed-2 from config) + assert get_posts_mock.call_count == 2 + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_run_in_work_success(connector: ObstractsConnector) -> None: + """Test _run_in_work context manager success""" + + with connector._run_in_work("Test Work") as work_id: + assert work_id == "work-id" + + connector.helper.api.work.initiate_work.assert_called_once_with( + "connector-id", "Test Work" + ) + connector.helper.api.work.to_processed.assert_called_once_with( + work_id="work-id", message="[OBSTRACTS] Work done", in_error=False + ) + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_run_in_work_failure(connector: ObstractsConnector) -> None: + """Test _run_in_work context manager failure""" + + with connector._run_in_work("Test Work"): + raise ValueError("Test error") + + connector.helper.api.work.to_processed.assert_called_once() + call_kwargs = connector.helper.api.work.to_processed.call_args[1] + assert call_kwargs["in_error"] is True + assert "[OBSTRACTS] Work failed" in call_kwargs["message"] + assert "ValueError: Test error" in call_kwargs["message"] + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_get_param(connector: ObstractsConnector) -> None: + """Test _get_param method""" + + # String param + result = connector._get_param("base_url") + assert result == "https://test-obstracts-url/" + + # Number param + result = connector._get_param("interval_hours", is_number=True) + assert result == 1 + assert isinstance(result, int) + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_retrieve_with_params( + mock_session: MagicMock, connector: ObstractsConnector +) -> None: + """Test retrieve with custom params""" + + mock_response = MagicMock() + mock_response.json.return_value = { + "total_results_count": 1, + "objects": [{"id": "obj-1"}], + } + mock_session.get.return_value = mock_response + + objects = connector.retrieve( + "v1/test/", list_key="objects", params={"custom_param": "value"} + ) + + assert len(objects) == 1 + # Verify custom param was passed + call_params = mock_session.get.call_args[1]["params"] + assert call_params["custom_param"] == "value" + assert call_params["page"] == 2 + assert call_params["page_size"] == 200 diff --git a/external-import/dogesec-obstracts/tests/test-requirements.txt b/external-import/dogesec-obstracts/tests/test-requirements.txt new file mode 100644 index 00000000000..fefefe8bc25 --- /dev/null +++ b/external-import/dogesec-obstracts/tests/test-requirements.txt @@ -0,0 +1,5 @@ +-r ../requirements.txt + +pytest +pytest-mock +freezegun diff --git a/external-import/dogesec-siemrules/requirements.txt b/external-import/dogesec-siemrules/requirements.txt index a499067031e..6ae8ef349b5 100644 --- a/external-import/dogesec-siemrules/requirements.txt +++ b/external-import/dogesec-siemrules/requirements.txt @@ -1,3 +1,3 @@ -pycti==7.260309.0 -requests +pycti==7.260515.0 +requests<=2.33.0 schedule \ No newline at end of file diff --git a/external-import/dogesec-siemrules/src/connector.py b/external-import/dogesec-siemrules/src/connector.py index d77ee99b9a3..ba3e725abf9 100644 --- a/external-import/dogesec-siemrules/src/connector.py +++ b/external-import/dogesec-siemrules/src/connector.py @@ -4,16 +4,20 @@ import json import os -import time +import traceback +from contextlib import contextmanager from datetime import UTC, datetime from urllib.parse import urljoin import requests -import schedule import yaml from pycti import OpenCTIConnectorHelper, get_config_variable +class SiemrulesException(Exception): + pass + + class SiemrulesConnector: def __init__(self): """Read in config variables""" @@ -26,7 +30,7 @@ def __init__(self): ) self.helper = OpenCTIConnectorHelper(config) - self.base_url = self._get_param("base_url") + "/" + self.base_url = self._get_param("base_url").strip("/") + "/" self.api_key = self._get_param("api_key") detection_packs = self._get_param("detection_packs") self.detection_packs = detection_packs.split(",") if detection_packs else [] @@ -56,11 +60,11 @@ def _get_param( def list_detection_packs(self): try: return self.retrieve("v1/detection-packs/", list_key="results") - except: + except Exception as e: self.helper.log_error("failed to fetch detection-packs") - return [] + raise SiemrulesException("failed to fetch detection-packs") from e - def process_updated_rules(self, dpack): + def process_updated_rules(self, dpack, work_id): pack_id = dpack["id"] self.helper.log_info( "processing Pack(id={id}, title='{name}')".format_map(dpack) @@ -78,10 +82,10 @@ def process_updated_rules(self, dpack): ) pack_rules = sorted(pack_rules, key=lambda rule: rule["metadata"]["modified"]) for rule in pack_rules: - self.process_rule(pack_id, rule) + self.process_rule(pack_id, rule, work_id) self.update_pack_state(pack_id, latest_update=rule["metadata"]["modified"]) - def process_rule(self, pack_id, rule: dict): + def process_rule(self, pack_id, rule: dict, work_id): indicator_id = rule["metadata"]["id"] rule_name = rule["metadata"]["name"] rule_repr = ( @@ -102,18 +106,19 @@ def process_rule(self, pack_id, rule: dict): self.helper.log_info( f"{rule_repr} sending bundle with {len(objects)} items" ) - self.helper.send_stix2_bundle(json.dumps(bundle), work_id=self.work_id) - except: + self.helper.send_stix2_bundle(json.dumps(bundle), work_id=work_id) + except Exception: self.helper.log_error("could not process rule " + rule_repr) def retrieve(self, path, list_key, params: dict = None): params = params or {} params.update(page=1, page_size=200) objects: list[dict] = [] - total_results_count = -1 - while total_results_count < len(objects): + total_results_count = 1 + while total_results_count > len(objects): resp = self.session.get(urljoin(self.base_url, path), params=params) params.update(page=params["page"] + 1) + self.helper.log_info(f">>> status_code={resp.status_code} url={resp.url}") data = resp.json() total_results_count = data["total_results_count"] objects.extend(data[list_key]) @@ -131,12 +136,34 @@ def _run_once(self): f"skipping {pack_repr} not in config.siemrules.detection_packs" ) continue - self.update_pack_state(pack_id, name=pack_name) - self.helper.log_info(f"processing {pack_repr}") - self.process_updated_rules(dpack) - self.update_pack_state(pack_id, last_run=datetime.now(UTC).isoformat()) + with self._run_in_work(f"Pack: {pack_name} ({pack_id})") as work_id: + last_run = datetime.now(UTC).isoformat() + self.update_pack_state(pack_id, name=pack_name) + self.helper.log_info(f"processing {pack_repr}") + self.process_updated_rules(dpack, work_id) + self.update_pack_state(pack_id, last_run=last_run) self.update_state(last_run_completed=datetime.now(UTC).isoformat()) + @contextmanager + def _run_in_work(self, work_name: str): + work_id = self.helper.api.work.initiate_work(self.helper.connect_id, work_name) + message = "[SIEMRULES] Work done" + in_error = False + try: + yield work_id + except Exception as e: + self.helper.log_error(f"work failed: {e}") + message = "[SIEMRULES] Work failed - " + traceback.format_exc() + in_error = True + finally: + self.helper.api.work.to_processed( + work_id=work_id, message=message, in_error=in_error + ) + + def run_once(self): + with self._run_in_work("Siemrules Connector Run"): + self._run_once() + def update_pack_state(self, pack_id, **kwargs): state = self._get_state() pack_state: dict = state["detection-packs"].get(pack_id, {}) @@ -149,24 +176,6 @@ def update_state(self, **kwargs): state.update(kwargs) self.helper.set_state(state) - def run_once(self): - in_error = False - try: - self.work_id = self.helper.api.work.initiate_work( - self.helper.connect_id, self.helper.connect_name - ) - self._run_once() - except: - self.helper.log_error("run failed") - in_error = True - finally: - self.helper.api.work.to_processed( - work_id=self.work_id, - message="[CONNECTOR] Connector exited gracefully", - in_error=in_error, - ) - self.work_id = None - def _get_state(self) -> dict: state = self.helper.get_state() if not state or "detection-packs" not in state: @@ -175,12 +184,15 @@ def _get_state(self) -> dict: def run(self): self.helper.log_info("Starting Siemrules") - schedule.every(self.interval_hours).hours.do(self.run_once) - self.run_once() - while True: - schedule.run_pending() - time.sleep(1) + self.helper.schedule_process( + message_callback=self.run_once, + duration_period=self.interval_hours * 3600, + ) if __name__ == "__main__": - SiemrulesConnector().run() + try: + SiemrulesConnector().run() + except BaseException: + traceback.print_exc() + exit(1) diff --git a/external-import/dogesec-siemrules/tests/__init__.py b/external-import/dogesec-siemrules/tests/__init__.py new file mode 100644 index 00000000000..66173aec46f --- /dev/null +++ b/external-import/dogesec-siemrules/tests/__init__.py @@ -0,0 +1 @@ +# Test package diff --git a/external-import/dogesec-siemrules/tests/conftest.py b/external-import/dogesec-siemrules/tests/conftest.py new file mode 100644 index 00000000000..5ee8fc0e226 --- /dev/null +++ b/external-import/dogesec-siemrules/tests/conftest.py @@ -0,0 +1,4 @@ +import os +import sys + +sys.path.append(os.path.join(os.path.dirname(__file__), "..", "src")) diff --git a/external-import/dogesec-siemrules/tests/siemrules/__init__.py b/external-import/dogesec-siemrules/tests/siemrules/__init__.py new file mode 100644 index 00000000000..66173aec46f --- /dev/null +++ b/external-import/dogesec-siemrules/tests/siemrules/__init__.py @@ -0,0 +1 @@ +# Test package diff --git a/external-import/dogesec-siemrules/tests/siemrules/conftest.py b/external-import/dogesec-siemrules/tests/siemrules/conftest.py new file mode 100644 index 00000000000..0ad2acb79b2 --- /dev/null +++ b/external-import/dogesec-siemrules/tests/siemrules/conftest.py @@ -0,0 +1,56 @@ +from typing import Any +from unittest.mock import MagicMock + +import pytest +from pytest_mock import MockerFixture + + +@pytest.fixture +def config_dict() -> dict[str, Any]: + return { + "opencti": { + "url": "http://test-opencti-url/", + "token": "test-opencti-token", + }, + "connector": { + "id": "siemrules-connector-id", + "type": "EXTERNAL_IMPORT", + "name": "Siemrules", + "scope": "siemrules", + "log_level": "info", + }, + "siemrules": { + "base_url": "https://test-siemrules-url/", + "api_key": "test-api-key", + "detection_packs": "pack-1,pack-2", + "interval_hours": "1", + }, + } + + +@pytest.fixture +def mock_config(config_dict: dict[str, Any], monkeypatch: pytest.MonkeyPatch): + for key, value in config_dict.items(): + for sub_key, sub_value in value.items(): + if sub_value is not None: + monkeypatch.setenv(f"{key.upper()}_{sub_key.upper()}", str(sub_value)) + + yield + + +@pytest.fixture +def mocked_helper(mocker: MockerFixture): + helper = MagicMock() + mocker.patch("connector.OpenCTIConnectorHelper", return_value=helper) + helper.get_state.return_value = {} + helper.api.work.initiate_work.return_value = "work-id" + helper.connect_id = "connector-id" + helper.connect_name = "Siemrules" + yield helper + + +@pytest.fixture +def mock_session(mocker: MockerFixture) -> MagicMock: + session = MagicMock() + mocker.patch("connector.requests.Session", return_value=session) + return session diff --git a/external-import/dogesec-siemrules/tests/siemrules/test_connector.py b/external-import/dogesec-siemrules/tests/siemrules/test_connector.py new file mode 100644 index 00000000000..24379416dad --- /dev/null +++ b/external-import/dogesec-siemrules/tests/siemrules/test_connector.py @@ -0,0 +1,292 @@ +import json +from unittest.mock import MagicMock, call + +import freezegun +import pytest +from connector import SiemrulesConnector, SiemrulesException +from pytest_mock import MockerFixture + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_connector_init( + mocked_helper: MagicMock, mock_session: MagicMock, mock_config +) -> None: + """Test connector initialization""" + connector = SiemrulesConnector() + + assert connector.base_url == "https://test-siemrules-url/" + assert connector.api_key == "test-api-key" + assert connector.detection_packs == ["pack-1", "pack-2"] + assert connector.interval_hours == 1 + assert connector.session.headers == {"API-KEY": "test-api-key"} + + +@pytest.fixture +def connector( + mocked_helper, mock_session: MagicMock, mock_config +) -> SiemrulesConnector: + """Fixture for SiemrulesConnector instance""" + return SiemrulesConnector() + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_connector_run(connector: SiemrulesConnector) -> None: + """Test connector run method""" + connector.run() + + assert connector.helper.log_info.call_count == 1 + connector.helper.log_info.assert_has_calls([call("Starting Siemrules")]) + + assert connector.helper.schedule_process.call_count == 1 + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_get_state_empty(connector: SiemrulesConnector) -> None: + """Test _get_state with empty state""" + connector.helper.get_state.return_value = None + + state = connector._get_state() + + assert state == {"detection-packs": {}} + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_get_state_existing(connector: SiemrulesConnector) -> None: + """Test _get_state with existing state""" + existing_state = { + "detection-packs": {"pack-1": {"latest_update": "2026-02-17T15:24:00Z"}}, + "last_run_start": "2026-02-17T15:24:00Z", + } + connector.helper.get_state.return_value = existing_state + + state = connector._get_state() + + assert state == existing_state + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_update_pack_state(connector: SiemrulesConnector) -> None: + """Test update_pack_state method""" + connector.helper.get_state.return_value = {"detection-packs": {}} + + connector.update_pack_state("pack-1", latest_update="2026-02-18T15:24:00Z") + + expected_state = { + "detection-packs": {"pack-1": {"latest_update": "2026-02-18T15:24:00Z"}} + } + connector.helper.set_state.assert_called_once_with(expected_state) + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_update_state(connector: SiemrulesConnector) -> None: + """Test update_state method""" + connector.helper.get_state.return_value = {"detection-packs": {}} + + connector.update_state(last_run_start="2026-02-18T15:24:00Z") + + expected_state = { + "detection-packs": {}, + "last_run_start": "2026-02-18T15:24:00Z", + } + connector.helper.set_state.assert_called_once_with(expected_state) + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_list_detection_packs_success( + mock_session: MagicMock, connector: SiemrulesConnector +) -> None: + """Test list_detection_packs success""" + mock_response = MagicMock() + mock_response.json.return_value = { + "total_results_count": 2, + "results": [ + {"id": "pack-1", "name": "Pack One"}, + {"id": "pack-2", "name": "Pack Two"}, + ], + } + mock_session.get.return_value = mock_response + + packs = connector.list_detection_packs() + + assert len(packs) == 2 + assert packs[0]["id"] == "pack-1" + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_list_detection_packs_failure( + mock_session: MagicMock, connector: SiemrulesConnector +) -> None: + """Test list_detection_packs failure""" + mock_session.get.side_effect = Exception("API Error") + + with pytest.raises(SiemrulesException, match="failed to fetch detection-packs"): + connector.list_detection_packs() + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_retrieve(mock_session: MagicMock, connector: SiemrulesConnector) -> None: + """Test retrieve method with pagination""" + # Mock two pages of results + mock_response_1 = MagicMock() + mock_response_1.json.return_value = { + "total_results_count": 3, + "results": [{"id": "rule-1"}, {"id": "rule-2"}], + } + + mock_response_2 = MagicMock() + mock_response_2.json.return_value = { + "total_results_count": 3, + "results": [{"id": "rule-3"}], + } + + mock_session.get.side_effect = [mock_response_1, mock_response_2] + + objects = connector.retrieve("v1/test/", list_key="results") + + assert len(objects) == 3 + assert objects[0]["id"] == "rule-1" + assert objects[2]["id"] == "rule-3" + assert mock_session.get.call_count == 2 + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_process_rule_success( + mock_session: MagicMock, connector: SiemrulesConnector +) -> None: + """Test process_rule success""" + rule = { + "metadata": { + "id": "rule-1", + "name": "Test Rule", + "modified": "2026-02-18T15:24:00Z", + }, + "rule_type": "correlation", + } + + mock_response = MagicMock() + mock_response.json.return_value = { + "total_results_count": 2, + "objects": [ + {"type": "indicator", "id": "indicator--1"}, + {"type": "indicator", "id": "indicator--2"}, + ], + } + mock_session.get.return_value = mock_response + + connector.process_rule("pack-1", rule, "work-id") + + connector.helper.send_stix2_bundle.assert_called_once() + bundle_arg = connector.helper.send_stix2_bundle.call_args[0][0] + bundle = json.loads(bundle_arg) + + assert bundle["type"] == "bundle" + assert bundle["id"] == "bundle--rule-1" + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_process_rule_base_type( + mock_session: MagicMock, connector: SiemrulesConnector +) -> None: + """Test process_rule with base rule type""" + rule = { + "metadata": { + "id": "rule-1", + "name": "Test Rule", + "modified": "2026-02-18T15:24:00Z", + }, + "rule_type": "base", + } + + mock_response = MagicMock() + mock_response.json.return_value = { + "total_results_count": 1, + "objects": [{"type": "indicator", "id": "indicator--1"}], + } + mock_session.get.return_value = mock_response + + connector.process_rule("pack-1", rule, "work-id") + + # Verify it called the base-rules endpoint + call_args = mock_session.get.call_args[0][0] + assert "v1/base-rules/rule-1/objects/" in call_args + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_process_updated_rules( + mocker: MockerFixture, mock_session: MagicMock, connector: SiemrulesConnector +) -> None: + """Test process_updated_rules method""" + connector.helper.get_state.return_value = {"detection-packs": {}} + + dpack = {"id": "pack-1", "name": "Pack One"} + + mock_response = MagicMock() + mock_response.json.return_value = { + "total_results_count": 2, + "results": [ + { + "metadata": { + "id": "rule-1", + "name": "Rule 1", + "modified": "2026-02-18T15:00:00Z", + }, + "rule_type": "correlation", + }, + { + "metadata": { + "id": "rule-2", + "name": "Rule 2", + "modified": "2026-02-18T15:01:00Z", + }, + "rule_type": "correlation", + }, + ], + } + mock_session.get.return_value = mock_response + + process_rule_mock = mocker.patch.object(connector, "process_rule") + + connector.process_updated_rules(dpack, "work-id") + + assert process_rule_mock.call_count == 2 + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_run_once(mocker: MockerFixture, connector: SiemrulesConnector) -> None: + """Test run_once method""" + mock_packs = [ + {"id": "pack-1", "name": "Pack One"}, + {"id": "pack-2", "name": "Pack Two"}, + ] + mocker.patch.object(connector, "list_detection_packs", return_value=mock_packs) + mocker.patch.object(connector, "process_updated_rules") + mocker.patch.object(connector, "update_pack_state") + mocker.patch.object(connector, "update_state") + + connector.run_once() + + connector.helper.api.work.initiate_work.assert_called() + connector.helper.api.work.to_processed.assert_called() + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_run_in_work_success(connector: SiemrulesConnector) -> None: + """Test _run_in_work context manager success""" + with connector._run_in_work("Test Work") as work_id: + assert work_id == "work-id" + + connector.helper.api.work.to_processed.assert_called_once_with( + work_id="work-id", message="[SIEMRULES] Work done", in_error=False + ) + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_run_in_work_failure(connector: SiemrulesConnector) -> None: + """Test _run_in_work context manager failure""" + with connector._run_in_work("Test Work"): + raise ValueError("Test error") + + call_kwargs = connector.helper.api.work.to_processed.call_args[1] + assert call_kwargs["in_error"] is True + assert "[SIEMRULES] Work failed" in call_kwargs["message"] + assert "ValueError: Test error" in call_kwargs["message"] diff --git a/external-import/dogesec-siemrules/tests/test-requirements.txt b/external-import/dogesec-siemrules/tests/test-requirements.txt new file mode 100644 index 00000000000..3568df2285a --- /dev/null +++ b/external-import/dogesec-siemrules/tests/test-requirements.txt @@ -0,0 +1,4 @@ +-r ../requirements.txt +pytest +pytest-mock +freezegun \ No newline at end of file diff --git a/external-import/dogesec-stixify/config.yml.sample b/external-import/dogesec-stixify/config.yml.sample index 6512998865c..eabb6a8697d 100644 --- a/external-import/dogesec-stixify/config.yml.sample +++ b/external-import/dogesec-stixify/config.yml.sample @@ -11,6 +11,8 @@ connector: update_existing_data: false log_level: 'info' queue_protocol: 'api' + auto_create_service_account: true + auto_create_service_account_confidence_level: 75 stixify: base_url: 'https://api.stixify.com/' diff --git a/external-import/dogesec-stixify/docker-compose.yml b/external-import/dogesec-stixify/docker-compose.yml index 991f6b6c5d6..fad849f6f9c 100644 --- a/external-import/dogesec-stixify/docker-compose.yml +++ b/external-import/dogesec-stixify/docker-compose.yml @@ -10,6 +10,8 @@ services: - CONNECTOR_SCOPE=stixify - CONNECTOR_CONFIDENCE_LEVEL=70 - CONNECTOR_LOG_LEVEL=error + - CONNECTOR_AUTO_CREATE_SERVICE_ACCOUNT=true + - CONNECTOR_AUTO_CREATE_SERVICE_ACCOUNT_CONFIDENCE_LEVEL=75 - STIXIFY_BASE_URL=http://api.stixify.com/ - STIXIFY_API_KEY= - STIXIFY_DOSSIER_IDS= diff --git a/external-import/dogesec-stixify/requirements.txt b/external-import/dogesec-stixify/requirements.txt index a499067031e..6ae8ef349b5 100644 --- a/external-import/dogesec-stixify/requirements.txt +++ b/external-import/dogesec-stixify/requirements.txt @@ -1,3 +1,3 @@ -pycti==7.260309.0 -requests +pycti==7.260515.0 +requests<=2.33.0 schedule \ No newline at end of file diff --git a/external-import/dogesec-stixify/src/connector.py b/external-import/dogesec-stixify/src/connector.py index 1a04bc3ff2b..f97cf7f8ee2 100644 --- a/external-import/dogesec-stixify/src/connector.py +++ b/external-import/dogesec-stixify/src/connector.py @@ -5,16 +5,20 @@ import json import os import sys -import time -from datetime import UTC, datetime, timedelta +import traceback +from contextlib import contextmanager +from datetime import UTC, datetime from urllib.parse import urljoin import requests -import schedule import yaml from pycti import OpenCTIConnectorHelper, get_config_variable +class StixifyException(Exception): + pass + + class StixifyConnector: def __init__(self): """Read in config variables""" @@ -27,7 +31,7 @@ def __init__(self): ) self.helper = OpenCTIConnectorHelper(config) - self.base_url = self._get_param("base_url") + "/" + self.base_url = self._get_param("base_url").strip("/") + "/" self.api_key = self._get_param("api_key") dossier_ids = self._get_param("dossier_ids") self.dossier_ids = dossier_ids.split(",") if dossier_ids else [] @@ -56,36 +60,37 @@ def _get_param( def list_dossiers(self): try: - return self.retrieve2("v1/dossiers/") + return self.retrieve("v1/dossiers/", list_key="results") except Exception: self.helper.log_error("failed to fetch dossiers") - return [] + raise StixifyException("failed to fetch dossiers") - def get_reports_after_last(self, dossier): + def get_and_process_reports_after_last(self, dossier, work_id): dossier_id = dossier["id"] self.helper.log_info( "processing dossier(id={id}, title='{name}')".format_map(dossier) ) dossier_state = self._get_state()["dossiers"].get( - dossier_id, dict(latest_report="") + dossier_id, dict(last_run_at="") ) filters = dict() - if q := dossier_state.get("latest_report"): - filters.update(created_at_after=q) - dossier_reports = self.retrieve2( + self.current_run_time = datetime.now(UTC).isoformat() + if q := dossier_state.get("last_run_at"): + filters.update(added_after=q) + dossier_reports = self.retrieve( f"v1/dossiers/{dossier_id}/reports/", + list_key="objects", params=filters, ) for report in dossier_reports: - self.process_report(dossier_id, report) + self.process_report(report, work_id) - def process_report(self, dossier_id, report: dict): - self.helper.log_info(str(report)) + def process_report(self, report: dict, work_id): report_id = report["id"] - report_title = report["stixify_file_metadata"]["name"] + report = report.get("stixify_report_metadata", report) + report_title = report["name"] report_name = f"Report(title={report_title}, id={report_id})" self.helper.log_info("Processing " + report_name) - report_created = report["created_at"] try: objects = self.retrieve( f"v1/reports/{report_id}/objects/", list_key="objects" @@ -98,12 +103,7 @@ def process_report(self, dossier_id, report: dict): self.helper.log_info( f"{report_name} sending bundle with {len(objects)} items" ) - self.helper.send_stix2_bundle(json.dumps(bundle), work_id=self.work_id) - # Add some milliseconds to the time so it gets skipped next run - report_created = ( - datetime.fromisoformat(report_created) + timedelta(milliseconds=990) - ).isoformat() - self.set_dossier_state(dossier_id, last_updated=report_created) + self.helper.send_stix2_bundle(json.dumps(bundle), work_id=work_id) except Exception: self.helper.log_error("could not process report " + report_name) @@ -111,8 +111,8 @@ def retrieve(self, path, list_key, params: dict = None): params = params or {} params.update(page=1, page_size=200) objects: list[dict] = [] - total_results_count = -1 - while total_results_count < len(objects): + total_results_count = 1 + while total_results_count > len(objects): resp = self.session.get(urljoin(self.base_url, path), params=params) params.update(page=params["page"] + 1) data = resp.json() @@ -120,16 +120,6 @@ def retrieve(self, path, list_key, params: dict = None): objects.extend(data[list_key]) return objects - def retrieve2(self, path, params=None): - path = urljoin(self.base_url, path) - retval = [] - while path: - resp = self.session.get(path, params=params) - resp_data = resp.json() - path = resp_data.get("next") - retval.extend(resp_data["results"]) - return retval - def _run_once(self): self.helper.log_info("running as scheduled") for dossier in self.list_dossiers(): @@ -141,38 +131,43 @@ def _run_once(self): f"skipping {dossier_repr} not in config.stixify.dossier_ids" ) continue - self.helper.log_info(f"processing {dossier_repr}") - self.get_reports_after_last(dossier) + with self._run_in_work( + f"Dossier: {dossier['name']} ({dossier['id']})" + ) as work_id: + self.helper.log_info(f"processing {dossier_repr}") + self.get_and_process_reports_after_last(dossier, work_id) + self.set_dossier_state(dossier_id, last_updated=self.current_run_time) self.set_dossier_state(None, None) - def run_once(self): + @contextmanager + def _run_in_work(self, work_name: str): + work_id = self.helper.api.work.initiate_work(self.helper.connect_id, work_name) + message = "[Stixify] Work done" in_error = False try: - self.work_id = self.helper.api.work.initiate_work( - self.helper.connect_id, self.helper.connect_name - ) - self._run_once() - except Exception: - self.helper.log_error("run failed") + yield work_id + except Exception as e: + self.helper.log_error(f"work failed: {e}") + message = "[Stixify] Work failed - " + traceback.format_exc() in_error = True finally: self.helper.api.work.to_processed( - work_id=self.work_id, - message="[CONNECTOR] Connector exited gracefully", - in_error=in_error, + work_id=work_id, message=message, in_error=in_error ) - self.work_id = None + + def run_once(self): + with self._run_in_work("Stixify Connector Run"): + self._run_once() def set_dossier_state(self, dossier_id, last_updated): state = self._get_state() if dossier_id: dossier_state: dict = state["dossiers"].setdefault(dossier_id, {}) dossier_state.update( - latest_report=max( - last_updated, dossier_state.get("latest_report", last_updated) + last_run_at=max( + last_updated, dossier_state.get("last_run_at", last_updated) ) ) - state["last_run"] = datetime.now(UTC).isoformat() self.helper.set_state(state) def _get_state(self) -> dict: @@ -183,12 +178,15 @@ def _get_state(self) -> dict: def run(self): self.helper.log_info("Starting Stixify") - schedule.every(self.interval_hours).hours.do(self.run_once) - self.run_once() - while True: - schedule.run_pending() - time.sleep(1) + self.helper.schedule_process( + message_callback=self.run_once, + duration_period=self.interval_hours * 3600, + ) if __name__ == "__main__": - StixifyConnector().run() + try: + StixifyConnector().run() + except BaseException: + traceback.print_exc() + exit(1) diff --git a/external-import/dogesec-stixify/tests/__init__.py b/external-import/dogesec-stixify/tests/__init__.py new file mode 100644 index 00000000000..66173aec46f --- /dev/null +++ b/external-import/dogesec-stixify/tests/__init__.py @@ -0,0 +1 @@ +# Test package diff --git a/external-import/dogesec-stixify/tests/conftest.py b/external-import/dogesec-stixify/tests/conftest.py new file mode 100644 index 00000000000..5ee8fc0e226 --- /dev/null +++ b/external-import/dogesec-stixify/tests/conftest.py @@ -0,0 +1,4 @@ +import os +import sys + +sys.path.append(os.path.join(os.path.dirname(__file__), "..", "src")) diff --git a/external-import/dogesec-stixify/tests/stixify/__init__.py b/external-import/dogesec-stixify/tests/stixify/__init__.py new file mode 100644 index 00000000000..66173aec46f --- /dev/null +++ b/external-import/dogesec-stixify/tests/stixify/__init__.py @@ -0,0 +1 @@ +# Test package diff --git a/external-import/dogesec-stixify/tests/stixify/conftest.py b/external-import/dogesec-stixify/tests/stixify/conftest.py new file mode 100644 index 00000000000..1055fbae029 --- /dev/null +++ b/external-import/dogesec-stixify/tests/stixify/conftest.py @@ -0,0 +1,55 @@ +from typing import Any +from unittest.mock import MagicMock + +import pytest +from pytest_mock import MockerFixture + + +@pytest.fixture +def config_dict() -> dict[str, Any]: + return { + "opencti": { + "url": "http://test-opencti-url/", + "token": "test-opencti-token", + }, + "connector": { + "id": "stixify-connector-id", + "type": "EXTERNAL_IMPORT", + "name": "Stixify", + "scope": "stixify", + "log_level": "info", + }, + "stixify": { + "base_url": "https://test-stixify-url/", + "api_key": "test-api-key", + "dossier_ids": "dossier-1,dossier-2", + "interval_hours": "1", + }, + } + + +@pytest.fixture +def mock_config(config_dict: dict[str, Any], monkeypatch: pytest.MonkeyPatch): + for key, value in config_dict.items(): + for sub_key, sub_value in value.items(): + if sub_value is not None: + monkeypatch.setenv(f"{key.upper()}_{sub_key.upper()}", str(sub_value)) + yield + + +@pytest.fixture +def mocked_helper(mocker: MockerFixture): + helper = MagicMock() + mocker.patch("connector.OpenCTIConnectorHelper", return_value=helper) + helper.get_state.return_value = {} + helper.api.work.initiate_work.return_value = "work-id" + helper.connect_id = "connector-id" + helper.connect_name = "Stixify" + yield helper + + +@pytest.fixture +def mock_session(mocker: MockerFixture) -> MagicMock: + session = MagicMock() + mocker.patch("connector.requests.Session", return_value=session) + return session diff --git a/external-import/dogesec-stixify/tests/stixify/test_connector.py b/external-import/dogesec-stixify/tests/stixify/test_connector.py new file mode 100644 index 00000000000..91d87b456ea --- /dev/null +++ b/external-import/dogesec-stixify/tests/stixify/test_connector.py @@ -0,0 +1,237 @@ +import json +from unittest.mock import MagicMock, call + +import freezegun +import pytest +from connector import StixifyConnector +from pytest_mock import MockerFixture + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_connector_init( + mocked_helper: MagicMock, mock_session: MagicMock, mock_config +) -> None: + """Test connector initialization""" + connector = StixifyConnector() + + assert connector.base_url == "https://test-stixify-url/" + assert connector.api_key == "test-api-key" + assert connector.dossier_ids == ["dossier-1", "dossier-2"] + assert connector.interval_hours == 1 + assert connector.session.headers == {"API-KEY": "test-api-key"} + + +@pytest.fixture +def connector(mocked_helper, mock_session: MagicMock, mock_config) -> StixifyConnector: + """Fixture for StixifyConnector instance""" + return StixifyConnector() + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_connector_run(connector: StixifyConnector) -> None: + """Test connector run method""" + connector.run() + + assert connector.helper.log_info.call_count == 1 + connector.helper.log_info.assert_has_calls([call("Starting Stixify")]) + + assert connector.helper.schedule_process.call_count == 1 + connector.helper.schedule_process.assert_called_once_with( + message_callback=connector.run_once, duration_period=3600 + ) + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_get_state_empty(connector: StixifyConnector) -> None: + """Test _get_state with empty state""" + connector.helper.get_state.return_value = None + + state = connector._get_state() + + assert state == {"dossiers": {}} + connector.helper.get_state.assert_called_once() + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_get_state_existing(connector: StixifyConnector) -> None: + """Test _get_state with existing state""" + existing_state = { + "dossiers": {"dossier-1": {"last_run_at": "2026-02-17T15:24:00Z"}}, + "last_run": "2026-02-17T15:24:00Z", + } + connector.helper.get_state.return_value = existing_state + state = connector._get_state() + + assert state == existing_state + connector.helper.get_state.assert_called_once() + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_set_dossier_state(connector: StixifyConnector) -> None: + """Test set_dossier_state method""" + connector.helper.get_state.return_value = {"dossiers": {}} + + connector.set_dossier_state("dossier-1", "2026-02-18T15:24:00Z") + + expected_state = { + "dossiers": {"dossier-1": {"last_run_at": "2026-02-18T15:24:00Z"}}, + } + connector.helper.set_state.assert_called_once_with(expected_state) + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_list_dossiers_success( + connector: StixifyConnector, mock_session: MagicMock +) -> None: + """Test list_dossiers success""" + mock_response = MagicMock() + mock_response.json.return_value = { + "results": [ + {"id": "dossier-1", "name": "Dossier One"}, + {"id": "dossier-2", "name": "Dossier Two"}, + ], + "total_results_count": 2, + } + mock_session.get.return_value = mock_response + + dossiers = connector.list_dossiers() + + assert len(dossiers) == 2 + assert dossiers[0]["id"] == "dossier-1" + assert dossiers[1]["id"] == "dossier-2" + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_retrieve(connector: StixifyConnector, mock_session: MagicMock) -> None: + """Test retrieve method with pagination""" + mock_response_1 = MagicMock() + mock_response_1.json.return_value = { + "total_results_count": 3, + "objects": [{"id": "obj-1"}, {"id": "obj-2"}], + } + + mock_response_2 = MagicMock() + mock_response_2.json.return_value = { + "total_results_count": 3, + "objects": [{"id": "obj-3"}], + } + + mock_session.get.side_effect = [mock_response_1, mock_response_2] + + objects = connector.retrieve("v1/test/", list_key="objects") + + assert len(objects) == 3 + assert objects[0]["id"] == "obj-1" + assert objects[2]["id"] == "obj-3" + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_process_report_success( + connector: StixifyConnector, mock_session: MagicMock +) -> None: + """Test process_report success""" + report = { + "id": "report-1", + "name": "Test Report", + "created_at": "2026-02-18T15:24:00Z", + } + + mock_response = MagicMock() + mock_response.json.return_value = { + "total_results_count": 2, + "objects": [ + {"type": "indicator", "id": "indicator--1"}, + {"type": "indicator", "id": "indicator--2"}, + ], + } + mock_session.get.return_value = mock_response + + connector.process_report(report, "work-id") + + connector.helper.send_stix2_bundle.assert_called_once() + bundle_arg = connector.helper.send_stix2_bundle.call_args[0][0] + bundle = json.loads(bundle_arg) + + assert bundle["type"] == "bundle" + assert bundle["id"] == "bundle--report-1" + assert len(bundle["objects"]) == 2 + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_run_once(mocker: MockerFixture, connector: StixifyConnector) -> None: + """Test run_once method""" + mock_dossiers = [ + {"id": "dossier-1", "name": "Dossier One"}, + {"id": "dossier-2", "name": "Dossier Two"}, + ] + mocker.patch.object(connector, "list_dossiers", return_value=mock_dossiers) + + get_reports_mock = mocker.patch.object( + connector, "get_and_process_reports_after_last" + ) + + connector.run_once() + + connector.helper.api.work.initiate_work.assert_called() + assert get_reports_mock.call_count == 2 + connector.helper.api.work.to_processed.assert_called() + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_run_once_filters_dossiers( + mocker: MockerFixture, connector: StixifyConnector +) -> None: + """Test run_once filters dossiers based on config""" + mock_dossiers = [ + {"id": "dossier-1", "name": "Dossier One"}, + {"id": "dossier-2", "name": "Dossier Two"}, + {"id": "dossier-3", "name": "Dossier Three"}, # Not in config + ] + mocker.patch.object(connector, "list_dossiers", return_value=mock_dossiers) + + get_reports_mock = mocker.patch.object( + connector, "get_and_process_reports_after_last" + ) + mocker.patch.object(connector, "set_dossier_state") + + connector.run_once() + + assert get_reports_mock.call_count == 2 + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_run_in_work_success(connector: StixifyConnector) -> None: + """Test _run_in_work context manager success""" + with connector._run_in_work("Test Work") as work_id: + assert work_id == "work-id" + + connector.helper.api.work.initiate_work.assert_called_once_with( + "connector-id", "Test Work" + ) + connector.helper.api.work.to_processed.assert_called_once_with( + work_id="work-id", message="[Stixify] Work done", in_error=False + ) + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_run_in_work_failure(connector: StixifyConnector) -> None: + """Test _run_in_work context manager failure""" + with connector._run_in_work("Test Work"): + raise ValueError("Test error") + + call_kwargs = connector.helper.api.work.to_processed.call_args[1] + assert call_kwargs["in_error"] is True + assert "[Stixify] Work failed" in call_kwargs["message"] + assert "ValueError: Test error" in call_kwargs["message"] + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_get_param(connector: StixifyConnector) -> None: + """Test _get_param method""" + + result = connector._get_param("base_url") + assert result == "https://test-stixify-url/" + + result = connector._get_param("interval_hours", is_number=True) + assert result == 1 + assert isinstance(result, int) diff --git a/external-import/dogesec-stixify/tests/test-requirements.txt b/external-import/dogesec-stixify/tests/test-requirements.txt new file mode 100644 index 00000000000..3568df2285a --- /dev/null +++ b/external-import/dogesec-stixify/tests/test-requirements.txt @@ -0,0 +1,4 @@ +-r ../requirements.txt +pytest +pytest-mock +freezegun \ No newline at end of file diff --git a/external-import/dogesec-vulmatch/requirements.txt b/external-import/dogesec-vulmatch/requirements.txt index a499067031e..6ae8ef349b5 100644 --- a/external-import/dogesec-vulmatch/requirements.txt +++ b/external-import/dogesec-vulmatch/requirements.txt @@ -1,3 +1,3 @@ -pycti==7.260309.0 -requests +pycti==7.260515.0 +requests<=2.33.0 schedule \ No newline at end of file diff --git a/external-import/dogesec-vulmatch/src/connector.py b/external-import/dogesec-vulmatch/src/connector.py index a99846447d4..4ef1bb1d69e 100644 --- a/external-import/dogesec-vulmatch/src/connector.py +++ b/external-import/dogesec-vulmatch/src/connector.py @@ -4,13 +4,13 @@ import itertools import os -import time +import traceback import uuid +from contextlib import contextmanager from datetime import UTC, datetime, timedelta from urllib.parse import urljoin import requests -import schedule import yaml from pycti import OpenCTIConnectorHelper, get_config_variable @@ -30,6 +30,10 @@ def parse_number(value: int): SKIPPED_TYPES = ["grouping", "weakness", "exploit"] +class VulmatchException(Exception): + pass + + class VulmatchConnector: work_id = None @@ -44,7 +48,7 @@ def __init__(self): ) self.helper = OpenCTIConnectorHelper(config) - self.base_url = self._get_param("base_url") + "/" + self.base_url = self._get_param("base_url").strip("/") + "/" self.api_key = self._get_param("api_key") self.sbom_only = parse_bool(self._get_param("sbom_only")) self.cvss_v2_score_min = parse_number( @@ -88,18 +92,18 @@ def list_cpes_in_sbom(self): cpes = [obj["cpe"] for obj in self.retrieve(path, list_key="objects")] self.helper.log_info(f"found {len(cpes)} cpes in sbom") if not cpes: - raise Exception("no cpes in sbom") + raise VulmatchException("no cpes in sbom") return cpes - except Exception: + except Exception as e: self.helper.log_error("failed to fetch CPEs from SBOM") - return [] + raise VulmatchException("failed to fetch CPEs from SBOM") from e def retrieve(self, path, list_key, params: dict = None): params = params or {} params.update(page=1, page_size=200) objects: list[dict] = [] - total_results_count = -1 - while total_results_count < len(objects): + total_results_count = 1 + while total_results_count > len(objects): resp = self.session.get(urljoin(self.base_url, path), params=params) params.update(page=params["page"] + 1) data = resp.json() @@ -132,10 +136,28 @@ def get_vulnerabilities(self, cpes): def _run_once(self): self.helper.log_info("running as scheduled") for cpes in chunked(self.list_cpes_in_sbom()): - vulnerabilities = self.get_vulnerabilities(cpes) - for vuln in vulnerabilities: - self.process_vulnerability(vuln) - self.update_state(vuln["modified"]) + cpe_str = ",".join(cpes) if cpes[0] else "all" + with self._run_in_work(f"CPEs: {cpe_str[:50]}"): + vulnerabilities = self.get_vulnerabilities(cpes) + for vuln in vulnerabilities: + self.process_vulnerability(vuln) + self.update_state(vuln["modified"]) + + @contextmanager + def _run_in_work(self, work_name: str): + work_id = self.helper.api.work.initiate_work(self.helper.connect_id, work_name) + message = "[VULMATCH] Work done" + in_error = False + try: + yield work_id + except Exception as e: + self.helper.log_error(f"work failed: {e}") + message = "[VULMATCH] Work failed - " + traceback.format_exc() + in_error = True + finally: + self.helper.api.work.to_processed( + work_id=work_id, message=message, in_error=in_error + ) def process_vulnerability(self, vuln): cve_name = vuln["name"] @@ -172,10 +194,8 @@ def process_vulnerability(self, vuln): ) def run_once(self): - try: + with self._run_in_work("Vulmatch Connector Run"): self._run_once() - except Exception: - self.helper.log_error("run failed") def _get_state(self) -> dict: state = self.helper.get_state() or dict( @@ -198,11 +218,10 @@ def update_state(self, vulnerability_modified): def run(self): self.helper.log_info("Starting Vulmatch") - schedule.every(self.interval_days).days.do(self.run_once) - self.run_once() - while True: - schedule.run_pending() - time.sleep(1) + self.helper.schedule_process( + message_callback=self.run_once, + duration_period=self.interval_days * 86400, + ) def transform_bundle_objects(self, bundle_objects): """ @@ -272,4 +291,8 @@ def chunked(lst): if __name__ == "__main__": - VulmatchConnector().run() + try: + VulmatchConnector().run() + except BaseException: + traceback.print_exc() + exit(1) diff --git a/external-import/dogesec-vulmatch/tests/__init__.py b/external-import/dogesec-vulmatch/tests/__init__.py new file mode 100644 index 00000000000..66173aec46f --- /dev/null +++ b/external-import/dogesec-vulmatch/tests/__init__.py @@ -0,0 +1 @@ +# Test package diff --git a/external-import/dogesec-vulmatch/tests/conftest.py b/external-import/dogesec-vulmatch/tests/conftest.py new file mode 100644 index 00000000000..5ee8fc0e226 --- /dev/null +++ b/external-import/dogesec-vulmatch/tests/conftest.py @@ -0,0 +1,4 @@ +import os +import sys + +sys.path.append(os.path.join(os.path.dirname(__file__), "..", "src")) diff --git a/external-import/dogesec-vulmatch/tests/test-requirements.txt b/external-import/dogesec-vulmatch/tests/test-requirements.txt new file mode 100644 index 00000000000..d17e6b6faac --- /dev/null +++ b/external-import/dogesec-vulmatch/tests/test-requirements.txt @@ -0,0 +1,5 @@ +pytest +pytest-mock +freezegun +pycti==7.260515.0 +requests diff --git a/external-import/dogesec-vulmatch/tests/vulmatch/__init__.py b/external-import/dogesec-vulmatch/tests/vulmatch/__init__.py new file mode 100644 index 00000000000..66173aec46f --- /dev/null +++ b/external-import/dogesec-vulmatch/tests/vulmatch/__init__.py @@ -0,0 +1 @@ +# Test package diff --git a/external-import/dogesec-vulmatch/tests/vulmatch/conftest.py b/external-import/dogesec-vulmatch/tests/vulmatch/conftest.py new file mode 100644 index 00000000000..6206f404a4d --- /dev/null +++ b/external-import/dogesec-vulmatch/tests/vulmatch/conftest.py @@ -0,0 +1,61 @@ +from typing import Any +from unittest.mock import MagicMock + +import pytest +from pytest_mock import MockerFixture + + +@pytest.fixture +def config_dict() -> dict[str, Any]: + return { + "opencti": { + "url": "http://test-opencti-url/", + "token": "test-opencti-token", + }, + "connector": { + "id": "vulmatch-connector-id", + "type": "EXTERNAL_IMPORT", + "name": "Vulmatch", + "scope": "vulmatch", + "log_level": "info", + }, + "vulmatch": { + "base_url": "https://test-vulmatch-url/", + "api_key": "test-api-key", + "sbom_only": "false", + "cvss_v2_score_min": "-1", + "cvss_v3_score_min": "-1", + "cvss_v4_score_min": "-1", + "epss_score_min": "-1", + "interval_days": "1", + "days_to_backfill": "7", + }, + } + + +@pytest.fixture +def mock_config(config_dict: dict[str, Any], monkeypatch: pytest.MonkeyPatch): + for key, value in config_dict.items(): + for sub_key, sub_value in value.items(): + if sub_value is not None: + monkeypatch.setenv(f"{key.upper()}_{sub_key.upper()}", str(sub_value)) + + yield + + +@pytest.fixture +def mocked_helper(mocker: MockerFixture): + helper = MagicMock() + mocker.patch("connector.OpenCTIConnectorHelper", return_value=helper) + helper.get_state.return_value = {} + helper.api.work.initiate_work.return_value = "work-id" + helper.connect_id = "connector-id" + helper.connect_name = "Vulmatch" + yield helper + + +@pytest.fixture +def mock_session(mocker: MockerFixture) -> MagicMock: + session = MagicMock() + mocker.patch("connector.requests.Session", return_value=session) + return session diff --git a/external-import/dogesec-vulmatch/tests/vulmatch/test_connector.py b/external-import/dogesec-vulmatch/tests/vulmatch/test_connector.py new file mode 100644 index 00000000000..29ed8c62e70 --- /dev/null +++ b/external-import/dogesec-vulmatch/tests/vulmatch/test_connector.py @@ -0,0 +1,312 @@ +from datetime import UTC, datetime, timedelta +from unittest.mock import MagicMock, call + +import freezegun +import pytest +from connector import VulmatchConnector, VulmatchException, parse_bool, parse_number +from pytest_mock import MockerFixture + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_connector_init( + mocked_helper: MagicMock, mock_session: MagicMock, mock_config +) -> None: + """Test connector initialization""" + connector = VulmatchConnector() + + assert connector.base_url == "https://test-vulmatch-url/" + assert connector.api_key == "test-api-key" + assert connector.sbom_only is False + assert connector.interval_days == 1 + assert connector.days_to_backfill == 7 + assert connector.session.headers == {"API-KEY": "test-api-key"} + + +@pytest.fixture +def connector(mocked_helper, mock_session: MagicMock, mock_config) -> VulmatchConnector: + """Fixture for VulmatchConnector instance""" + return VulmatchConnector() + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_connector_run(connector: VulmatchConnector) -> None: + """Test connector run method""" + connector.run() + + assert connector.helper.log_info.call_count == 1 + connector.helper.log_info.assert_has_calls([call("Starting Vulmatch")]) + + assert connector.helper.schedule_process.call_count == 1 + connector.helper.schedule_process.assert_called_once_with( + message_callback=connector.run_once, duration_period=86400 + ) + + +def test_parse_bool() -> None: + """Test parse_bool helper function""" + assert parse_bool("yes") is True + assert parse_bool("true") is True + assert parse_bool("1") is True + assert parse_bool("Y") is True + assert parse_bool("no") is False + assert parse_bool("false") is False + + +def test_parse_number() -> None: + """Test parse_number helper function""" + assert parse_number(5) == 5 + assert parse_number(0) is None + assert parse_number(-1) is None + assert parse_number(None) is None + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_get_state_empty(connector: VulmatchConnector) -> None: + """Test _get_state with empty state""" + connector.helper.get_state.return_value = None + + state = connector._get_state() + + assert "last_vulnerability_modified" in state + # Should be 7 days ago + expected_date = (datetime.now(UTC) - timedelta(days=7)).isoformat() + # Just check it's a valid ISO format date + assert expected_date == state["last_vulnerability_modified"] + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_get_state_existing(connector: VulmatchConnector) -> None: + """Test _get_state with existing state""" + existing_state = {"last_vulnerability_modified": "2026-02-17T15:24:00Z"} + connector.helper.get_state.return_value = existing_state + + state = connector._get_state() + + assert state == existing_state + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_update_state(connector: VulmatchConnector) -> None: + """Test update_state method""" + connector.helper.get_state.return_value = { + "last_vulnerability_modified": "2026-02-17T15:24:00Z" + } + + connector.update_state("2026-02-18T15:24:00Z") + + expected_call = connector.helper.set_state.call_args[0][0] + assert expected_call["last_vulnerability_modified"] == "2026-02-18T15:24:00Z" + assert "updated" in expected_call + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_list_cpes_in_sbom_not_sbom_only(connector: VulmatchConnector) -> None: + """Test list_cpes_in_sbom when sbom_only is False""" + connector.sbom_only = False + + cpes = connector.list_cpes_in_sbom() + + assert cpes == [""] + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_list_cpes_in_sbom_success( + mock_session: MagicMock, connector: VulmatchConnector +) -> None: + """Test list_cpes_in_sbom success""" + connector.sbom_only = True + + mock_response = MagicMock() + mock_response.json.return_value = { + "total_results_count": 2, + "objects": [ + {"cpe": "cpe:2.3:a:vendor:product1"}, + {"cpe": "cpe:2.3:a:vendor:product2"}, + ], + } + mock_session.get.return_value = mock_response + + cpes = connector.list_cpes_in_sbom() + + assert len(cpes) == 2 + assert cpes[0] == "cpe:2.3:a:vendor:product1" + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_list_cpes_in_sbom_empty( + mock_session: MagicMock, connector: VulmatchConnector +) -> None: + """Test list_cpes_in_sbom with empty SBOM""" + connector.sbom_only = True + + mock_response = MagicMock() + mock_response.json.return_value = {"total_results_count": 0, "objects": []} + mock_session.get.return_value = mock_response + + with pytest.raises(VulmatchException, match="failed to fetch CPEs from SBOM"): + connector.list_cpes_in_sbom() + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_retrieve(mock_session: MagicMock, connector: VulmatchConnector) -> None: + """Test retrieve method with pagination""" + # Mock two pages of results + mock_response_1 = MagicMock() + mock_response_1.json.return_value = { + "total_results_count": 3, + "objects": [{"id": "cve-1"}, {"id": "cve-2"}], + } + + mock_response_2 = MagicMock() + mock_response_2.json.return_value = { + "total_results_count": 3, + "objects": [{"id": "cve-3"}], + } + + mock_session.get.side_effect = [mock_response_1, mock_response_2] + + objects = connector.retrieve("v1/test/", list_key="objects") + + assert len(objects) == 3 + assert objects[0]["id"] == "cve-1" + assert objects[2]["id"] == "cve-3" + assert mock_session.get.call_count == 2 + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_get_vulnerabilities( + mock_session: MagicMock, connector: VulmatchConnector +) -> None: + """Test get_vulnerabilities method""" + connector.helper.get_state.return_value = { + "last_vulnerability_modified": "2026-02-17T15:24:00Z" + } + + mock_response = MagicMock() + mock_response.json.return_value = { + "total_results_count": 2, + "objects": [ + {"name": "CVE-2024-0001", "modified": "2026-02-18T15:00:00Z"}, + {"name": "CVE-2024-0002", "modified": "2026-02-18T15:01:00Z"}, + ], + } + mock_session.get.return_value = mock_response + + vulns = connector.get_vulnerabilities(["cpe:2.3:a:vendor:product"]) + + assert len(vulns) == 2 + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_process_vulnerability_success( + mock_session: MagicMock, connector: VulmatchConnector +) -> None: + """Test process_vulnerability success""" + vuln = {"name": "CVE-2024-0001", "modified": "2026-02-18T15:24:00Z"} + + mock_response = MagicMock() + mock_response.json.return_value = { + "total_results_count": 2, + "objects": [ + {"type": "vulnerability", "id": "vulnerability--1"}, + {"type": "indicator", "id": "indicator--1"}, + ], + } + mock_session.get.return_value = mock_response + + connector.helper.stix2_create_bundle.return_value = '{"type": "bundle"}' + + connector.process_vulnerability(vuln) + + connector.helper.send_stix2_bundle.assert_called_once() + connector.helper.api.work.to_processed.assert_called_once() + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_process_vulnerability_failure( + mock_session: MagicMock, connector: VulmatchConnector +) -> None: + """Test process_vulnerability failure""" + vuln = {"name": "CVE-2024-0001", "modified": "2026-02-18T15:24:00Z"} + + mock_session.get.side_effect = Exception("API Error") + + connector.process_vulnerability(vuln) + + connector.helper.api.work.report_expectation.assert_called_once() + call_kwargs = connector.helper.api.work.to_processed.call_args[1] + assert call_kwargs["in_error"] is True + + +def test_transform_bundle_objects(connector: VulmatchConnector) -> None: + """Test transform_bundle_objects method""" + bundle_objects = [ + { + "type": "vulnerability", + "id": "vulnerability--1", + "name": "CVE-2024-0001", + "modified": "2026-02-18T15:24:00Z", + "created": "2026-02-18T15:24:00Z", + "object_marking_refs": ["marking--1"], + "external_references": [ + {"source_name": "cve", "external_id": "CVE-2024-0001"} + ], + }, + {"type": "software", "id": "software--1", "name": "Product"}, + {"type": "grouping", "id": "grouping--1", "object_refs": ["software--1"]}, + {"type": "weakness", "id": "weakness--1"}, # Should be skipped + { + "type": "relationship", + "id": "relationship--1", + "source_ref": "indicator--1", + "target_ref": "grouping--1", + "relationship_type": "x-cpes-vulnerable", + }, + ] + + transformed = connector.transform_bundle_objects(bundle_objects) + + # Check that weakness was removed + types = [obj["type"] for obj in transformed] + assert "weakness" not in types + assert "grouping" not in types + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_run_once(mocker: MockerFixture, connector: VulmatchConnector) -> None: + """Test run_once method""" + mocker.patch.object(connector, "list_cpes_in_sbom", return_value=[""]) + mocker.patch.object( + connector, + "get_vulnerabilities", + return_value=[{"name": "CVE-2024-0001", "modified": "2026-02-18T15:24:00Z"}], + ) + mocker.patch.object(connector, "process_vulnerability") + mocker.patch.object(connector, "update_state") + + connector.run_once() + + connector.helper.api.work.initiate_work.assert_called() + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_run_in_work_success(connector: VulmatchConnector) -> None: + """Test _run_in_work context manager success""" + with connector._run_in_work("Test Work") as work_id: + assert work_id == "work-id" + + connector.helper.api.work.to_processed.assert_called_once_with( + work_id="work-id", message="[VULMATCH] Work done", in_error=False + ) + + +@freezegun.freeze_time("2026-02-18T15:24:00Z") +def test_run_in_work_failure(connector: VulmatchConnector) -> None: + """Test _run_in_work context manager failure""" + with connector._run_in_work("Test Work"): + raise ValueError("Test error") + + call_kwargs = connector.helper.api.work.to_processed.call_args[1] + assert call_kwargs["in_error"] is True + assert "[VULMATCH] Work failed" in call_kwargs["message"] + assert "ValueError: Test error" in call_kwargs["message"] diff --git a/external-import/doppel/Dockerfile b/external-import/doppel/Dockerfile index 2048c3cacb0..93c7a799267 100644 --- a/external-import/doppel/Dockerfile +++ b/external-import/doppel/Dockerfile @@ -2,8 +2,8 @@ FROM python:3.12-alpine ENV CONNECTOR_TYPE=EXTERNAL_IMPORT # Set working directory and copy code -WORKDIR /opt/doppel -COPY src /opt/doppel +COPY src /opt/opencti-connector-doppel +WORKDIR /opt/opencti-connector-doppel # Install required OS packages and Python dependencies RUN apk update && apk upgrade && \ @@ -13,8 +13,5 @@ RUN pip install --upgrade pip && \ pip install --no-cache-dir -r requirements.txt && \ apk del git build-base -# Copy entrypoint and make executable -COPY entrypoint.sh /entrypoint.sh -RUN chmod +x /entrypoint.sh - -ENTRYPOINT ["/entrypoint.sh"] +# Execute the connector +CMD [ "python", "main.py" ] \ No newline at end of file diff --git a/external-import/doppel/README.md b/external-import/doppel/README.md index aff3d45f1fa..d16447a1359 100644 --- a/external-import/doppel/README.md +++ b/external-import/doppel/README.md @@ -26,30 +26,15 @@ ## Introduction -**Doppel** is a modern Digital Risk Protection solution that detects phishing and brand cyberattacks across channels like social media, domains, ads, and the dark web. By identifying malicious content and threats early, Doppel helps organizations proactively remove digital risks. - -This connector integrates OpenCTI with the Doppel platform by fetching alerts from the Doppel API and importing them as STIX 2.1 Indicators. Each alert is converted into an Indicator object enriched with metadata such as severity, entity state, platform, audit logs, and more. - -More information: [https://www.doppel.com](https://www.doppel.com) - -The connector leverages the OpenCTI connector scheduler to import Doppel alerts periodically and create corresponding entities in OpenCTI. - -```mermaid -flowchart LR - A[Doppel API] -->|fetch alerts periodically| B(Connector) - B --> C{Convert to STIX bundle} - C -->|dispatch| D1[worker] - C -->|dispatch| D2[worker] - C -->|dispatch| D3[worker] - D1 & D2 & D3 -->|ingest| E(OpenCTI) -``` +This connector fetches alerts from the Doppel API and imports them into OpenCTI as Observables. Each alert is mapped to a +STIX 2.1 Observable object, enriched with metadata such as severity, entity state, platform, audit logs, etc. ## Installation ### Requirements -- OpenCTI Platform >= 6.5.1 -- Doppel API access (API Key required, User API Key optional) +- OpenCTI Platform version >= 6.x +- Doppel API access (URL + API Key + User API Key (optional) + Organization Code (optional)) ## Configuration variables @@ -78,19 +63,18 @@ Below are the parameters you'll need to set for running the connector properly: ### Connector extra parameters environment variables -Below are the parameters you'll need to set for the Doppel connector: - -| Parameter | config.yml `doppel` | Docker environment variable | Default | Mandatory | Description | -|-------------------------|--------------------------|----------------------------------|---------------------------|-----------|-----------------------------------------------------------------------------------| -| API Base URL | `api_base_url` | `DOPPEL_API_BASE_URL` | https://api.doppel.com/v1 | No | The Doppel API base URL. | -| API Key | `api_key` | `DOPPEL_API_KEY` | / | Yes | The Doppel API key for authentication. | -| User API Key | `user_api_key` | `DOPPEL_USER_API_KEY` | / | No | The Doppel User API key (optional, for additional API access). | -| Alerts Endpoint | `alerts_endpoint` | `DOPPEL_ALERTS_ENDPOINT` | /alerts | No | The API endpoint path for fetching alerts. | -| Historical Polling Days | `historical_polling_days`| `DOPPEL_HISTORICAL_POLLING_DAYS` | 30 | No | Number of days to fetch data for on the first run. | -| Max Retries | `max_retries` | `DOPPEL_MAX_RETRIES` | 3 | No | Maximum number of retry attempts on API errors. | -| Retry Delay | `retry_delay` | `DOPPEL_RETRY_DELAY` | 30 | No | Delay in seconds between retry attempts. | -| TLP Level | `tlp_level` | `DOPPEL_TLP_LEVEL` | clear | No | TLP marking for created STIX objects (`clear`, `white`, `green`, `amber`, `amber+strict`, `red`). | -| Page Size | `page_size` | `DOPPEL_PAGE_SIZE` | 100 | No | Number of alerts to fetch per API request. | +| Parameter | config.yml | Docker environment variable | Role | Default | Mandatory | Description | +|-------------------------|--------------------------------|----------------------------------|---------|---------|-----------|---------------------------------------| +| API base URL | doppel.api_base_url | `DOPPEL_API_BASE_URL` | Connectivity: Defines the network entry point for all API requests. | https://api.doppel.com/v1 | Yes | Doppel API base URL | +| API key | doppel.api_key | `DOPPEL_API_KEY` | Authentication: Provides the primary security credentials for service access. | | Yes | Doppel API key | +| User API key | doppel.user_api_key | `DOPPEL_USER_API_KEY` | Authorization: Used for user-specific identity. | | No | Doppel User API key | +| Organization Code | doppel.organization_code | `DOPPEL_ORGANIZATION_CODE` | Scope: Identifies the specific organizational workspace for multi-tenant keys. | | No | Organization Code for Doppel API Keys | +| Alerts endpoint | doppel.alerts_endpoint | `DOPPEL_ALERTS_ENDPOINT` | Routing: Specifies the API resource path for alert ingestion. | /alerts | Yes | API endpoint for fetching alerts | +| Historical polling days | doppel.historical_polling_days | `DOPPEL_HISTORICAL_POLLING_DAYS` | Synchronization: Determines the time-window for initial data fetching. | 30 | No | Days of data to fetch on first run | +| Max retries | doppel.max_retries | `DOPPEL_MAX_RETRIES` | Resilience: Configures automated error recovery from transient failures. | 3 | No | Retry attempts on API errors | +| Retry delay (seconds) | doppel.retry_delay | `DOPPEL_RETRY_DELAY` | Rate Management: Controls the frequency of requests during error recovery. | 30 | No | Delay between retry attempts | +| TLP Level | doppel.tlp_level | `DOPPEL_TLP_LEVEL` | Data Governance: Assigns sensitivity markings for downstream sharing. | clear | No | TLP marking for created STIX objects. | +| Page size | doppel.page_size | `DOPPEL_PAGE_SIZE` | Performance: Optimizes request volume and memory usage per fetch. | 100 | No | Number of alerts to fetch per request | ## Deployment @@ -102,8 +86,29 @@ Build a Docker Image using the provided `Dockerfile`. Example: -```shell -docker build . -t opencti/connector-doppel:latest +3. Register connector in the **main** OpenCTI `docker-compose.yml`: + +```yaml + connector-doppel: + image: opencti/connector-doppel:latest + environment: + - OPENCTI_URL=http://opencti:8080 + - OPENCTI_TOKEN=changeme + - CONNECTOR_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + - CONNECTOR_NAME=Doppel Threat Intelligence + - CONNECTOR_SCOPE=Indicator + - CONNECTOR_LOG_LEVEL=info + - CONNECTOR_DURATION_PERIOD=PT1H + - DOPPEL_API_BASE_URL=https://api.doppel.com + - DOPPEL_API_KEY=changeme + - DOPPEL_USER_API_KEY=changeme + - DOPPEL_ORGANIZATION_CODE=changeme + - DOPPEL_ALERTS_ENDPOINT=/v1/alerts + - DOPPEL_HISTORICAL_POLLING_DAYS=30 + - DOPPEL_MAX_RETRIES=3 + - DOPPEL_RETRY_DELAY=30 + - DOPPEL_TLP_LEVEL=clear + restart: always ``` Make sure to replace the environment variables in `docker-compose.yml` with the appropriate configurations for your environment. Then, start the docker container with the provided `docker-compose.yml`. @@ -143,83 +148,11 @@ Find the "Doppel" connector, and click on the refresh button to reset the connec ## Behavior -The connector fetches alerts from the Doppel API and converts them into STIX 2.1 Indicator objects. - -- **Initial population**: On the first run, the connector retrieves alerts from the last `DOPPEL_HISTORICAL_POLLING_DAYS` days (default: 30 days). -- **Delta-based updates**: Subsequent runs fetch only new or updated alerts since the last run, based on `last_activity_timestamp`. -- **Parallel fetching**: The connector uses multi-threaded pagination to efficiently fetch large volumes of alerts. - -### Mapping to OpenCTI entities - -The graph below describes all the different entities created by the connector in OpenCTI from Doppel alerts. - -```mermaid -graph LR - subgraph Doppel - direction TB - DoppelAlert[Alert] - DoppelEntity[Entity
URL / IP / Email / Domain] - DoppelMetadata[Metadata
severity, platform, state...] - DoppelAuditLogs[Audit Logs] - end - - subgraph OpenCTI - direction TB - subgraph "STIX Domain Objects" - OpenCTIIdentity[Identity
Doppel Organization] - OpenCTIIndicator[Indicator] - end - subgraph "STIX Meta Objects" - OpenCTIMarking[TLP Marking] - OpenCTIExternalRef[External Reference] - end - end - - %% Main transformation - DoppelAlert ==> OpenCTIIndicator - DoppelEntity -->|"pattern + name"| OpenCTIIndicator - DoppelMetadata -->|"description + custom properties"| OpenCTIIndicator - DoppelAuditLogs -->|"x_opencti_audit_logs"| OpenCTIIndicator - - %% References - OpenCTIIdentity -.->|"created_by_ref"| OpenCTIIndicator - OpenCTIMarking -.->|"object_marking_refs"| OpenCTIIndicator - OpenCTIExternalRef -.->|"external_references"| OpenCTIIndicator -``` - -#### Doppel Alert to OpenCTI Indicator mapping - -| Doppel Alert Field | OpenCTI Indicator Field | Description | -|---------------------------|-----------------------------------|------------------------------------------------------------| -| `entity` | `name`, `pattern` | The entity value; pattern type detected automatically | -| `created_at` | `created` | Timestamp when the alert was created | -| `last_activity_timestamp` | `modified` | Timestamp of last activity on the alert | -| `platform` | `description` | Platform where the threat was detected | -| `entity_state` | `description` | Current state of the entity | -| `queue_state` | `description` | Queue processing state | -| `severity` | `description` | Alert severity level | -| `entity_content` | `description` | JSON content of the entity (formatted) | -| `score` | `x_opencti_score` | Risk score converted to 0-100 scale | -| `brand` | `x_opencti_brand` | Associated brand being protected | -| `product` | `x_mitre_platforms` | Platform/product value | -| `source` | `x_opencti_source` | Source of the alert | -| `notes` | `x_opencti_notes` | Additional notes on the alert | -| `audit_logs` | `x_opencti_audit_logs` | Formatted audit log entries (timestamp: type - value) | -| `doppel_link` | `external_references[].url` | Link to the alert in Doppel platform | -| `id` | `external_references[].external_id` | Doppel alert ID | - -### Entity type detection - -The connector automatically detects the entity type from the alert value and creates the appropriate STIX pattern: - -| Entity Type | Detection Pattern | STIX Pattern Example | Observable Type | -|---------------|--------------------------------------------|--------------------------------------------|-----------------| -| URL | Starts with `http://` or `https://` | `[url:value = 'https://example.com']` | Url | -| IPv4 Address | Matches `^(\d{1,3}\.){3}\d{1,3}$` | `[ipv4-addr:value = '192.168.1.1']` | IPv4-Addr | -| Email Address | Matches `^[^@]+@[^@]+\.[^@]+$` | `[email-addr:value = 'user@example.com']` | Email-Addr | -| Domain Name | Default (if no other pattern matches) | `[domain-name:value = 'example.com']` | Domain-Name | - -> **Note**: Domain names are the most common entity type for brand protection use cases and are used as the default when no other pattern matches. +- Fetches alerts from Doppel API paginated by `last_activity_timestamp` +- Converts each alert into a STIX 2.1 Observable object +- Bundles and sends the STIX objects to OpenCTI +- Includes platform, score, brand, audit logs, notes, etc. as `custom_properties` +- On first run, fetches up to `HISTORICAL_POLLING_DAYS`; subsequent runs are delta-based ## Debugging @@ -235,8 +168,7 @@ Set `CONNECTOR_LOG_LEVEL=debug` for verbose logging. Log output includes: ## Additional information -- This connector creates only `Indicator` STIX Domain Objects (no Observables, Incidents, or other SDO types are created directly). -- Each indicator includes the `x_opencti_main_observable_type` custom property to indicate the detected observable type. -- The connector uses pattern-based deterministic ID generation (`PyCTIIndicator.generate_id(pattern=...)`) to ensure idempotent imports and avoid duplicates. -- TLP marking is applied to all created indicators based on the `DOPPEL_TLP_LEVEL` configuration. -- The connector creates a "Doppel" organization identity as the author of all imported indicators. +- This connector strictly follows OpenCTI's standard STIX schema. +- Custom properties like `x_opencti_brand`, `x_opencti_source` are preserved. +- When queue_state is actioned/taken_down, Observables are converted to STIX 2.1 Indicators. +- Supports safe reprocessing with unique `indicator_id` generation to avoid duplication. diff --git a/external-import/doppel/__metadata__/CONNECTOR_CONFIG_DOC.md b/external-import/doppel/__metadata__/CONNECTOR_CONFIG_DOC.md new file mode 100644 index 00000000000..857e8639326 --- /dev/null +++ b/external-import/doppel/__metadata__/CONNECTOR_CONFIG_DOC.md @@ -0,0 +1,25 @@ +# Connector Configurations + +Below is an exhaustive enumeration of all configurable parameters available, each accompanied by detailed explanations of their purposes, default behaviors, and usage guidelines to help you understand and utilize them effectively. + +### Type: `object` + +| Property | Type | Required | Possible values | Default | Description | +| -------- | ---- | -------- | --------------- | ------- | ----------- | +| OPENCTI_URL | `string` | ✅ | Format: [`uri`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | The base URL of the OpenCTI instance. | +| OPENCTI_TOKEN | `string` | ✅ | string | | The API token to connect to OpenCTI. | +| DOPPEL_API_KEY | `string` | ✅ | string | | API key for authentication. | +| CONNECTOR_NAME | `string` | | string | `"Doppel Threat Intelligence"` | The name of the connector. | +| CONNECTOR_SCOPE | `array` | | string | `["doppel"]` | The scope of the connector. | +| CONNECTOR_LOG_LEVEL | `string` | | `debug` `info` `warn` `warning` `error` | `"error"` | The minimum level of logs to display. | +| CONNECTOR_TYPE | `const` | | `EXTERNAL_IMPORT` | `"EXTERNAL_IMPORT"` | | +| CONNECTOR_DURATION_PERIOD | `string` | | Format: [`duration`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | `"PT1H"` | The period of time to await between two runs of the connector. | +| DOPPEL_API_BASE_URL | `string` | | Format: [`uri`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | `"https://api.doppel.com/v1"` | API base URL. | +| DOPPEL_USER_API_KEY | `string` | | string | `null` | Used for user-specific identity | +| DOPPEL_ORGANIZATION_CODE | `string` | | string | `null` | Identifies the specific organizational workspace for multi-tenant keys | +| DOPPEL_TLP_LEVEL | `string` | | `clear` `white` `green` `amber` `amber+strict` `red` | `"clear"` | Default TLP level of the imported entities. | +| DOPPEL_ALERTS_ENDPOINT | `string` | | string | `"/alerts"` | Specifies the API resource path for alert ingestion | +| DOPPEL_HISTORICAL_POLLING_DAYS | `integer` | | integer | `30` | Determines the time-window for initial data fetching | +| DOPPEL_MAX_RETRIES | `integer` | | integer | `3` | Configures automated error recovery from transient failures | +| DOPPEL_RETRY_DELAY | `integer` | | integer | `30` | Controls the frequency of requests during error recovery | +| DOPPEL_PAGE_SIZE | `integer` | | integer | `100` | Optimizes request volume and memory usage per fetch | diff --git a/external-import/doppel/__metadata__/connector_config_schema.json b/external-import/doppel/__metadata__/connector_config_schema.json new file mode 100644 index 00000000000..b592a73cbcc --- /dev/null +++ b/external-import/doppel/__metadata__/connector_config_schema.json @@ -0,0 +1,122 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://www.filigran.io/connectors/doppel_config.schema.json", + "type": "object", + "properties": { + "OPENCTI_URL": { + "description": "The base URL of the OpenCTI instance.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "OPENCTI_TOKEN": { + "description": "The API token to connect to OpenCTI.", + "type": "string" + }, + "CONNECTOR_NAME": { + "default": "Doppel Threat Intelligence", + "description": "The name of the connector.", + "type": "string" + }, + "CONNECTOR_SCOPE": { + "default": [ + "doppel" + ], + "description": "The scope of the connector.", + "items": { + "type": "string" + }, + "type": "array" + }, + "CONNECTOR_LOG_LEVEL": { + "default": "error", + "description": "The minimum level of logs to display.", + "enum": [ + "debug", + "info", + "warn", + "warning", + "error" + ], + "type": "string" + }, + "CONNECTOR_TYPE": { + "const": "EXTERNAL_IMPORT", + "default": "EXTERNAL_IMPORT", + "type": "string" + }, + "CONNECTOR_DURATION_PERIOD": { + "default": "PT1H", + "description": "The period of time to await between two runs of the connector.", + "format": "duration", + "type": "string" + }, + "DOPPEL_API_BASE_URL": { + "default": "https://api.doppel.com/v1", + "description": "API base URL.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "DOPPEL_API_KEY": { + "description": "API key for authentication.", + "type": "string" + }, + "DOPPEL_USER_API_KEY": { + "default": null, + "description": "Used for user-specific identity", + "type": "string" + }, + "DOPPEL_ORGANIZATION_CODE": { + "default": null, + "description": "Identifies the specific organizational workspace for multi-tenant keys", + "type": "string" + }, + "DOPPEL_TLP_LEVEL": { + "default": "clear", + "description": "Default TLP level of the imported entities.", + "enum": [ + "clear", + "white", + "green", + "amber", + "amber+strict", + "red" + ], + "type": "string" + }, + "DOPPEL_ALERTS_ENDPOINT": { + "default": "/alerts", + "description": "Specifies the API resource path for alert ingestion", + "type": "string" + }, + "DOPPEL_HISTORICAL_POLLING_DAYS": { + "default": 30, + "description": "Determines the time-window for initial data fetching", + "type": "integer" + }, + "DOPPEL_MAX_RETRIES": { + "default": 3, + "description": "Configures automated error recovery from transient failures", + "type": "integer" + }, + "DOPPEL_RETRY_DELAY": { + "default": 30, + "description": "Controls the frequency of requests during error recovery", + "type": "integer" + }, + "DOPPEL_PAGE_SIZE": { + "default": 100, + "description": "Optimizes request volume and memory usage per fetch", + "type": "integer" + } + }, + "required": [ + "OPENCTI_URL", + "OPENCTI_TOKEN", + "DOPPEL_API_KEY" + ], + "additionalProperties": true +} \ No newline at end of file diff --git a/external-import/doppel/__metadata__/connector_manifest.json b/external-import/doppel/__metadata__/connector_manifest.json index 98e1f2e14eb..d425fdf8ace 100644 --- a/external-import/doppel/__metadata__/connector_manifest.json +++ b/external-import/doppel/__metadata__/connector_manifest.json @@ -14,7 +14,7 @@ "support_version": ">= 6.5.1", "subscription_link": "https://www.doppel.com", "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/external-import/doppel", - "manager_supported": false, + "manager_supported": true, "container_version": "rolling", "container_image": "opencti/connector-doppel", "container_type": "EXTERNAL_IMPORT" diff --git a/external-import/doppel/docker-compose.yml b/external-import/doppel/docker-compose.yml index 42ec34cc539..de7f98f3118 100644 --- a/external-import/doppel/docker-compose.yml +++ b/external-import/doppel/docker-compose.yml @@ -5,10 +5,10 @@ services: environment: # OpenCTI connection - OPENCTI_URL=http://localhost - - OPENCTI_TOKEN=changeMe + - OPENCTI_TOKEN=ChangeMe # Connector required config - - CONNECTOR_ID=changeMe + - CONNECTOR_ID=ChangeMe - CONNECTOR_NAME=Doppel Threat Intelligence - CONNECTOR_SCOPE=doppel - CONNECTOR_LOG_LEVEL=info @@ -16,8 +16,9 @@ services: # Doppel-specific config - DOPPEL_API_BASE_URL=https://api.doppel.com/v1 - - DOPPEL_API_KEY=changeMe - - DOPPEL_USER_API_KEY=changeMe + - DOPPEL_API_KEY=ChangeMe + - DOPPEL_USER_API_KEY=ChangeMe + - DOPPEL_ORGANIZATION_CODE=ChangeMe - DOPPEL_TLP_LEVEL=clear - DOPPEL_ALERTS_ENDPOINT=/alerts - DOPPEL_HISTORICAL_POLLING_DAYS=30 diff --git a/external-import/doppel/entrypoint.sh b/external-import/doppel/entrypoint.sh deleted file mode 100644 index c3cccbea2e9..00000000000 --- a/external-import/doppel/entrypoint.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh - -# Ensure correct working directory -cd /opt/doppel - -# Start the connector -python3 main.py diff --git a/external-import/doppel/src/config.yml.sample b/external-import/doppel/src/config.yml.sample index 19808a4be9c..b5244387937 100644 --- a/external-import/doppel/src/config.yml.sample +++ b/external-import/doppel/src/config.yml.sample @@ -1,20 +1,21 @@ opencti: url: 'http://localhost' - token: 'changeMe' + token: 'ChangeMe' connector: type: 'EXTERNAL_IMPORT' - id: 'changeMe' # Valid UUIDv4 + id: 'ChangeMe' # Valid UUIDv4 name: 'Doppel Threat Intelligence' scope: 'doppel' log_level: 'info' - duration_period: 'PT1H' # ISO-8601 format for 1 hour + duration_period: 'PT1H' # Interval given for scheduler process in ISO-8601 format doppel: api_base_url: 'https://api.doppel.com/v1' - api_key: 'changeMe' - user_api_key: 'changeMe' - tlp_level: 'clear' # Options: clear, white, green, amber, amber+strict, red + api_key: 'ChangeMe' + user_api_key: null + organization_code: null + tlp_level: 'clear' # available values are: clear, white, green, amber, amber+strict, red alerts_endpoint: '/alerts' historical_polling_days: 30 max_retries: 3 diff --git a/external-import/doppel/src/doppel/__init__.py b/external-import/doppel/src/doppel/__init__.py index 713d97f2934..bed3bbe625e 100644 --- a/external-import/doppel/src/doppel/__init__.py +++ b/external-import/doppel/src/doppel/__init__.py @@ -1,3 +1,7 @@ -from .connector import DoppelConnector +from doppel.connector import DoppelConnector +from doppel.settings import ConnectorSettings -__all__ = ["DoppelConnector"] +__all__ = [ + "ConnectorSettings", + "DoppelConnector", +] diff --git a/external-import/doppel/src/doppel/client_api.py b/external-import/doppel/src/doppel/client_api.py index c3b3b77931f..16fb2749ee6 100644 --- a/external-import/doppel/src/doppel/client_api.py +++ b/external-import/doppel/src/doppel/client_api.py @@ -1,12 +1,23 @@ from concurrent.futures import ThreadPoolExecutor, as_completed -from typing import Any +from typing import TYPE_CHECKING, Any import requests -from tenacity import retry, stop_after_attempt, wait_fixed +from doppel.constants import RETRYABLE_REQUEST_ERRORS +from tenacity import ( + retry, + retry_if_exception, + stop_after_attempt, + wait_exponential_jitter, + wait_fixed, +) + +if TYPE_CHECKING: + from doppel import ConnectorSettings + from pycti import OpenCTIConnectorHelper class ConnectorClient: - def __init__(self, helper, config): + def __init__(self, helper: "OpenCTIConnectorHelper", config: "ConnectorSettings"): """ Initialize the client with necessary configurations """ @@ -14,14 +25,34 @@ def __init__(self, helper, config): self.config = config self.session = requests.Session() - headers = {"x-api-key": self.config.api_key, "accept": "application/json"} + headers = { + "x-api-key": self.config.doppel.api_key, + "accept": "application/json", + } # Add user_api_key if provided - if self.config.user_api_key: - headers["x-user-api-key"] = self.config.user_api_key + if self.config.doppel.user_api_key: + headers["x-user-api-key"] = self.config.doppel.user_api_key + if self.config.doppel.organization_code: + headers["x-organization-code"] = self.config.doppel.organization_code self.session.headers.update(headers) - @retry(wait=wait_fixed(5), stop=stop_after_attempt(3)) # Default fallback values + @staticmethod + def is_retryable_exception(exception): + if isinstance(exception, requests.HTTPError): + if exception.response.status_code in (429, 500, 502, 503, 504): + return True + + if isinstance(exception, RETRYABLE_REQUEST_ERRORS): + return True + return False + + @retry( + retry=retry_if_exception(is_retryable_exception), + wait=wait_exponential_jitter(initial=10, max=60, jitter=1), + stop=stop_after_attempt(5), + reraise=True, + ) def _request_data(self, api_url: str, params=None): """ Internal method to handle API requests @@ -38,6 +69,12 @@ def _request_data(self, api_url: str, params=None): {"url": api_url, "params": params}, ) raise + elif http_err.response.status_code == 429: + self.helper.connector_logger.warning( + "[API] Rate limited (429), retrying with backoff...", + {"url": api_url, "params": params}, + ) + raise else: try: error_json = http_err.response.json() @@ -87,14 +124,13 @@ def get_alerts( """ Retrieve alerts from api """ - url = f"{self.config.api_base_url}{self.config.alerts_endpoint}" - - if last_activity_timestamp.endswith("+00:00"): - last_activity_timestamp = last_activity_timestamp.replace("+00:00", "") + url = f"{self.config.doppel.api_base_url}{self.config.doppel.alerts_endpoint}" # Dynamically set retry settings - self._request_data.retry.wait = wait_fixed(self.config.retry_delay) - self._request_data.retry.stop = stop_after_attempt(self.config.max_retries) + self._request_data.retry.wait = wait_fixed(self.config.doppel.retry_delay) + self._request_data.retry.stop = stop_after_attempt( + self.config.doppel.max_retries + ) params = { "last_activity_timestamp": last_activity_timestamp, diff --git a/external-import/doppel/src/doppel/config_loader.py b/external-import/doppel/src/doppel/config_loader.py deleted file mode 100644 index ea3fecc124d..00000000000 --- a/external-import/doppel/src/doppel/config_loader.py +++ /dev/null @@ -1,143 +0,0 @@ -import os -import re -from pathlib import Path - -import yaml -from pycti import get_config_variable - - -class ConfigDoppel: - def __init__(self): - """ - Initialize the connector with necessary configurations - """ - self.load = self._load_config() - self._initialize_configurations() - - @staticmethod - def _load_config() -> dict: - """ - Load the configuration from the YAML file - :return: Configuration dictionary - """ - config_file_path = Path(__file__).parents[1].joinpath("config.yml") - if os.path.isfile(config_file_path): - with open(config_file_path, "r", encoding="utf-8") as file: - return yaml.safe_load(file) or {} - return {} - - @staticmethod - def _validate_positive_int(value_str: str, field_name: str): - """ - Check if config value is positive integer - :return: Integer or ValueError - """ - try: - value = int(value_str) - if value <= 0: - raise ValueError - return value - except ValueError as e: - raise ValueError( - f"{field_name} must be a positive integer (greater than 0): {e}" - ) from e - - @staticmethod - def _validate_iso8601_duration(value: str, field_name: str): - """ - Check format of duration_period config - :return: duration_period value or ValueError - """ - # Match format like PT30S, PT1M, PT1H, etc. - pattern = re.compile(r"^P(T(\d+H)?(\d+M)?(\d+S)?)?$") - if not pattern.match(value): - raise ValueError( - f"{field_name} must be a valid ISO 8601 duration format (e.g., PT30S, PT5M, PT1H)" - ) - return value - - def _initialize_configurations(self) -> None: - """ - Connector configuration variables - :return: None - """ - # OpenCTI configurations - self.duration_period = self._validate_iso8601_duration( - get_config_variable( - "CONNECTOR_DURATION_PERIOD", - ["connector", "duration_period"], - self.load, - default="PT1H", - ), - "CONNECTOR_DURATION_PERIOD", - ) - - # Connector extra parameters - self.api_base_url = get_config_variable( - "DOPPEL_API_BASE_URL", - ["doppel", "api_base_url"], - self.load, - default="https://api.doppel.com/v1", - ) - - self.api_key = get_config_variable( - "DOPPEL_API_KEY", ["doppel", "api_key"], self.load - ) - - self.user_api_key = get_config_variable( - "DOPPEL_USER_API_KEY", ["doppel", "user_api_key"], self.load - ) - - self.alerts_endpoint = get_config_variable( - "DOPPEL_ALERTS_ENDPOINT", - ["doppel", "alerts_endpoint"], - self.load, - default="/alerts", - ) - - self.historical_days = self._validate_positive_int( - get_config_variable( - "DOPPEL_HISTORICAL_POLLING_DAYS", - ["doppel", "historical_polling_days"], - self.load, - default=30, - ), - "DOPPEL_HISTORICAL_POLLING_DAYS", - ) - - self.max_retries = self._validate_positive_int( - get_config_variable( - "DOPPEL_MAX_RETRIES", - ["doppel", "max_retries"], - self.load, - default=3, - ), - "DOPPEL_MAX_RETRIES", - ) - - self.retry_delay = self._validate_positive_int( - get_config_variable( - "DOPPEL_RETRY_DELAY", - ["doppel", "retry_delay"], - self.load, - default=30, - ), - "DOPPEL_RETRY_DELAY", - ) - - self.tlp_level = get_config_variable( - "DOPPEL_TLP_LEVEL", - ["doppel", "tlp_level"], - self.load, - default="clear", - ) - - self.page_size = self._validate_positive_int( - get_config_variable( - "DOPPEL_PAGE_SIZE", - ["doppel", "page_size"], - self.load, - default=100, - ), - "DOPPEL_PAGE_SIZE", - ) diff --git a/external-import/doppel/src/doppel/connector.py b/external-import/doppel/src/doppel/connector.py index ea46ca2577c..4cd7fe513a8 100644 --- a/external-import/doppel/src/doppel/connector.py +++ b/external-import/doppel/src/doppel/connector.py @@ -3,43 +3,47 @@ from doppel.client_api import ConnectorClient from doppel.converter_to_stix import ConverterToStix +from doppel.settings import ConnectorSettings +from pycti import OpenCTIConnectorHelper class DoppelConnector: - def __init__(self, config, helper): + def __init__(self, config: ConnectorSettings, helper: OpenCTIConnectorHelper): """ Initialize the Connector with necessary configurations """ self.helper = helper self.config = config self.client = ConnectorClient(self.helper, self.config) - self.converter = ConverterToStix(self.helper, self.config) + self.converter = ConverterToStix( + self.helper, tlp_level=self.config.doppel.tlp_level + ) - def _get_last_run(self, start_datetime: datetime) -> datetime: + def _get_last_run(self, current_state, start_datetime: datetime) -> datetime: """ - Retrieve last_run from current state or the - start date depending on historical_days from config + Retrieve previous run from current state or the + start date depending on historical_polling_days from config :params: start_datetime (datetime): datetime when process started :return: datetime """ - current_state = self.helper.get_state() - if current_state and "last_run" in current_state: self.helper.connector_logger.info( "Resuming from last run timestamp", {"last_run": current_state["last_run"]}, ) - last_run = current_state["last_run"] + previous_run = current_state["last_run"] else: - default_start = start_datetime - timedelta(days=self.config.historical_days) - last_run = default_start.strftime("%Y-%m-%dT%H:%M:%S") + default_start = start_datetime - timedelta( + days=self.config.doppel.historical_polling_days + ) + previous_run = default_start.strftime("%Y-%m-%d %H:%M:%S") self.helper.connector_logger.info( "No previous state found. Using historical polling window", - {"start_date": last_run}, + {"start_date": previous_run}, ) - return last_run + return previous_run def process_message(self) -> None: """ @@ -49,15 +53,27 @@ def process_message(self) -> None: self.helper.connector_logger.info("[DoppelConnector] Running scheduled fetch") work_id = None start_datetime = datetime.now(tz=timezone.utc) + current_timestamp = int(datetime.timestamp(start_datetime)) + current_state = self.helper.get_state() try: - last_run = self._get_last_run(start_datetime) - # Perform collection of intelligence - alerts = self.client.get_alerts(last_run, page_size=self.config.page_size) + + previous_run = self._get_last_run(current_state, start_datetime) + # Format previous_run for api call (format: 'yyyy-mm-ddThh:mm:ss') + formatted_previous_run = datetime.fromisoformat(previous_run).isoformat( + timespec="seconds" + ) + alerts = self.client.get_alerts( + formatted_previous_run, page_size=self.config.doppel.page_size + ) + if alerts: + friendly_name = ( + f"Doppel run @ {start_datetime.strftime('%Y-%m-%d %H:%M:%S')}" + ) work_id = self.helper.api.work.initiate_work( - self.helper.connect_id, "Connector feed" + self.helper.connect_id, friendly_name ) bundle = self.converter.convert_alerts_to_stix(alerts) @@ -70,14 +86,22 @@ def process_message(self) -> None: "STIX bundle sent", {"len_bundle_sent": len(bundle_sent)} ) - # Set state with last run - self.helper.set_state( - {"last_run": start_datetime.isoformat(timespec="seconds")} + # Store the current timestamp as a last run of the connector + self.helper.connector_logger.debug( + "Getting current state and update it with last run of the connector", + {"current_timestamp": current_timestamp}, ) + current_state_datetime = start_datetime.strftime("%Y-%m-%d %H:%M:%S") + if current_state: + current_state["last_run"] = current_state_datetime + else: + current_state = {"last_run": current_state_datetime} + self.helper.set_state(current_state) self.helper.connector_logger.info( - "Updated last run state", {"last_run": last_run} + "Updated last run state", {"last_run": current_state_datetime} ) + except (KeyboardInterrupt, SystemExit): self.helper.connector_logger.info( "[CONNECTOR] Connector stopped...", @@ -108,5 +132,5 @@ def run(self) -> None: self.helper.connector_logger.info("[DoppelConnector] Starting scheduler") self.helper.schedule_iso( message_callback=self.process_message, - duration_period=self.config.duration_period, + duration_period=self.config.connector.duration_period, ) diff --git a/external-import/doppel/src/doppel/constants.py b/external-import/doppel/src/doppel/constants.py new file mode 100644 index 00000000000..4e24744fe0b --- /dev/null +++ b/external-import/doppel/src/doppel/constants.py @@ -0,0 +1,6 @@ +import requests + +RETRYABLE_REQUEST_ERRORS = ( + requests.Timeout, + requests.ConnectionError, +) diff --git a/external-import/doppel/src/doppel/converter_to_stix.py b/external-import/doppel/src/doppel/converter_to_stix.py index b4143ddb5d4..4eee5e4d295 100644 --- a/external-import/doppel/src/doppel/converter_to_stix.py +++ b/external-import/doppel/src/doppel/converter_to_stix.py @@ -1,12 +1,42 @@ -import json -import re +from datetime import datetime +from typing import Literal +from doppel.stix_helpers import ( + build_custom_properties, + build_description, + build_external_references, + build_labels, + calculate_priority, + is_reverted_state, + is_takedown_state, +) from doppel.utils import parse_iso_datetime -from pycti import Identity as PyCTIIdentity -from pycti import Indicator as PyCTIIndicator -from pycti import MarkingDefinition -from stix2 import TLP_AMBER, TLP_GREEN, TLP_RED, TLP_WHITE, Identity, Indicator +from pycti import Grouping as PyctiGrouping +from pycti import Identity as PyctiIdentity +from pycti import Indicator as PyctiIndicator +from pycti import MarkingDefinition as PyctiMarkingDefinition +from pycti import Note as PyctiNote +from pycti import ( + OpenCTIConnectorHelper, +) +from pycti import StixCoreRelationship as PyctiStixCoreRelationship +from pycti.utils.constants import CustomObservablePhoneNumber as PhoneNumber +from stix2 import ( + TLP_AMBER, + TLP_GREEN, + TLP_RED, + TLP_WHITE, + DomainName, + Grouping, + Identity, + Indicator, + IPv4Address, +) from stix2 import MarkingDefinition as Stix2MarkingDefinition +from stix2 import ( + Note, +) +from stix2 import Relationship as Stix2Relationship class ConverterToStix: @@ -14,26 +44,29 @@ class ConverterToStix: Provides methods for converting various types of input data into STIX 2.1 objects. """ - # URL regex pattern - URL_PATTERN = re.compile(r"^https?://", re.IGNORECASE) - # IPv4 regex pattern - IPV4_PATTERN = re.compile(r"^(\d{1,3}\.){3}\d{1,3}$") - # Email regex pattern - EMAIL_PATTERN = re.compile(r"^[^@]+@[^@]+\.[^@]+$") + def __init__( + self, + helper: OpenCTIConnectorHelper, + tlp_level: Literal["clear", "white", "green", "amber", "amber+strict", "red"], + ): + """ + Initialize the converter with necessary configuration. - def __init__(self, helper, config): + Args: + helper (OpenCTIConnectorHelper): The helper of the connector. Used for logs. + tlp_level (str): The TLP level to add to the created STIX entities. + """ self.helper = helper - self.config = config - self.author = self._create_identity() - self.tlp_marking = self._create_tlp_marking(level=self.config.tlp_level.lower()) + self.author = self.create_author() + self.tlp_marking = self._create_tlp_marking(level=tlp_level.lower()) - def _create_identity(self) -> Identity: + def create_author(self) -> Identity: """ - Create Identity + Create author object :return: Identity Stix2 object """ return Identity( - id=PyCTIIdentity.generate_id(name="Doppel", identity_class="organization"), + id=PyctiIdentity.generate_id(name="Doppel", identity_class="organization"), name="Doppel", identity_class="organization", description="Threat Intelligence Provider", @@ -52,7 +85,7 @@ def _create_tlp_marking(level: str) -> Stix2MarkingDefinition: "green": TLP_GREEN, "amber": TLP_AMBER, "amber+strict": Stix2MarkingDefinition( - id=MarkingDefinition.generate_id("TLP", "TLP:AMBER+STRICT"), + id=PyctiMarkingDefinition.generate_id("TLP", "TLP:AMBER+STRICT"), definition_type="statement", definition={"statement": "custom"}, custom_properties={ @@ -64,128 +97,631 @@ def _create_tlp_marking(level: str) -> Stix2MarkingDefinition: } return mapping[level] - def _detect_entity_type(self, entity: str) -> tuple[str, str]: + def create_phone_number(self, phone_number: str, alert: dict) -> PhoneNumber: """ - Detect the type of entity and return the appropriate STIX pattern and observable type. - :param entity: The entity value to analyze - :return: Tuple of (stix_pattern, opencti_observable_type) + Create PhoneNumber object """ - entity_stripped = entity.strip() + custom_properties = build_custom_properties(alert, self.author.id) - # Check for URL - if self.URL_PATTERN.match(entity_stripped): - escaped_entity = entity_stripped.replace("'", "\\'") - return f"[url:value = '{escaped_entity}']", "Url" + return PhoneNumber( + value=phone_number, + object_marking_refs=[self.tlp_marking.id], + custom_properties=custom_properties, + ) + + def create_domain(self, domain_name: str, alert: dict) -> DomainName: + """ + Create DomainName object + """ + labels_flat = build_labels(alert) + external_references = build_external_references(alert) + custom_properties = build_custom_properties(alert, self.author.id) + + return DomainName( + value=domain_name, + object_marking_refs=[self.tlp_marking.id], + labels=labels_flat or None, + external_references=external_references if external_references else None, + custom_properties=custom_properties, + allow_custom=True, + ) - # Check for IPv4 - if self.IPV4_PATTERN.match(entity_stripped): - return f"[ipv4-addr:value = '{entity_stripped}']", "IPv4-Addr" + def create_ipv4(self, ip_address: str, alert: dict) -> IPv4Address: + """ + Create IPv4Address object + """ + labels_flat = build_labels(alert) + external_references = build_external_references(alert) + custom_properties = build_custom_properties(alert, self.author.id) + + return IPv4Address( + value=ip_address, + object_marking_refs=[self.tlp_marking.id], + labels=labels_flat or None, + external_references=external_references if external_references else None, + custom_properties=custom_properties, + allow_custom=True, + ) + + def create_grouping_case(self, alert: dict, object_refs: list) -> Grouping: + """ + Create Grouping case object + """ + priority = calculate_priority(alert["score"]) + grouping_name = f"Case for Alert {alert['id']}" + case_labels = build_labels(alert) + case_labels.append(f"priority:{priority}") + + return Grouping( + id=PyctiGrouping.generate_id( + name=grouping_name, context="suspicious-activity" + ), + name=grouping_name, + context="suspicious-activity", + object_refs=object_refs, + created_by_ref=self.author.id, + external_references=build_external_references(alert), + description=build_description(alert), + labels=case_labels, + object_marking_refs=[self.tlp_marking.id], + allow_custom=True, + ) + + def create_relationship( + self, source_id: str, target_id: str, relationship_type: str + ) -> Stix2Relationship: + """ + Create Stix2Relationship object + """ + return Stix2Relationship( + id=PyctiStixCoreRelationship.generate_id( + relationship_type=relationship_type, + source_ref=source_id, + target_ref=target_id, + ), + relationship_type=relationship_type, + source_ref=source_id, + target_ref=target_id, + created_by_ref=self.author.id, + object_marking_refs=[self.tlp_marking.id], + allow_custom=True, + ) + + def create_note( + self, note_content: str, note_body: str, note_refs: list, note_timestamp + ) -> Note: + """ + Create Note object + """ + return Note( + id=PyctiNote.generate_id( + content=note_body, + created=note_timestamp, + ), + abstract=note_content, + content=note_body, + created=note_timestamp, + modified=note_timestamp, + created_by_ref=self.author.id, + object_refs=note_refs, + object_marking_refs=[self.tlp_marking.id], + allow_custom=True, + ) - # Check for Email - if self.EMAIL_PATTERN.match(entity_stripped): - return f"[email-addr:value = '{entity_stripped}']", "Email-Addr" + def create_indicator( + self, + alert: dict, + pattern: str, + name: str, + created_at: datetime, + modified: datetime, + ) -> Indicator: + """ + Create Indicator object + """ + labels_flat = build_labels(alert) + external_references = build_external_references(alert) + custom_properties = build_custom_properties(alert, self.author.id) - # Default to domain-name (most common for brand protection) - escaped_entity = entity_stripped.replace("'", "\\'").lower() - return f"[domain-name:value = '{escaped_entity}']", "Domain-Name" + return Indicator( + id=PyctiIndicator.generate_id(pattern), + pattern=pattern, + pattern_type="stix", + name=name, + description=build_description(alert), + created=created_at, + modified=modified, + created_by_ref=self.author.id, + object_marking_refs=[self.tlp_marking.id], + labels=labels_flat or None, + external_references=external_references if external_references else None, + valid_from=created_at, + custom_properties=custom_properties, + allow_custom=True, + revoked=False, + ) def convert_alerts_to_stix(self, alerts: list): """ - Convert list of alerts to stix2 Indicator objects - :return: stix2 bundle json + Convert list of alerts to stix2 Observable objects: + domain-name, phone number and ipv4-addr + + :param alerts: list of alerts + :return: Serialized STIX Bundle object """ stix_objects = [self.author, self.tlp_marking] - created_by_ref = self.author.id for alert in alerts: try: alert_id = alert.get("id", "unknown") - self.helper.connector_logger.info( - "Processing alert", {"alert_id": alert_id} + alert_queue_state = alert.get("queue_state") + + # Extract required fields + entity_content = alert.get("entity_content", {}) + root_domain = entity_content.get("root_domain", {}) + domain_name = root_domain.get("domain") + ipv4_address = root_domain.get("ip_address") + phone_number = alert["entity"] if not domain_name else None + + domain_observable = None + phone_number_observable = None + ipv4_observable = None + grouping_case_refs = [] + observable_name = domain_name or phone_number + + # Create domain object if exist, else create phone number instead + if domain_name: + domain_observable = self.create_domain(domain_name, alert) + stix_objects.append(domain_observable) + grouping_case_refs.append(domain_observable) + else: + phone_number_observable = self.create_phone_number( + phone_number, alert + ) + stix_objects.append(phone_number_observable) + grouping_case_refs.append(phone_number_observable) + + # Create ipv4 object if exists + if ipv4_address: + ipv4_observable = self.create_ipv4(ipv4_address, alert) + stix_objects.append(ipv4_observable) + grouping_case_refs.append(ipv4_observable) + + # Create relationship between ipv4 and domain + if domain_observable: + relationship = self.create_relationship( + source_id=domain_observable.id, + target_id=ipv4_observable.id, + relationship_type="resolves-to", + ) + stix_objects.append(relationship) + + # Create grouping case + if grouping_case_refs: + grouping_case = self.create_grouping_case( + alert, object_refs=grouping_case_refs + ) + stix_objects.append(grouping_case) + + # Create related-to relationship between case and observables + for entity in grouping_case_refs: + related_to = self.create_relationship( + source_id=grouping_case.id, + target_id=entity.id, + relationship_type="related-to", + ) + stix_objects.append(related_to) + + # DETECT STATE TRANSITIONS + self._handle_state_transitions( + alert_queue_state, + domain_observable or phone_number_observable, + alert, + stix_objects, + observable_name, ) - entity = alert.get("entity", "unknown") - pattern, observable_type = self._detect_entity_type(entity) - indicator_id = PyCTIIndicator.generate_id(pattern=pattern) + except Exception as e: + # Unexpected errors - log and raise + self.helper.connector_logger.error( + "[DoppelConverter] Failed to process alert", + {"alert_id": alert_id, "error": str(e)}, + ) + raise - created_at = ( - parse_iso_datetime(alert["created_at"]) - if alert.get("created_at", None) - else None + return self.helper.stix2_create_bundle(stix_objects) + + def _handle_state_transitions( + self, + alert_queue_state: str, + current_observable: DomainName | PhoneNumber, + alert: dict, + stix_objects: list, + observable_name: str, + ): + """ + Handle state transitions based on queue_state if observable already exists + + Warning: self.helper.api calls may cause latency in the process. + + :param alert_queue_state: queue_state of alert + :param current_observable: DomainName or PhoneNumber entity + :param alert: dict of alert data + :param stix_objects: Stix objects list + :param observable_name: Name of the observable + :return: None + """ + # Check if observable already exists in octi + observable_octi = self.helper.api.stix_cyber_observable.read( + id=current_observable.id + ) + + if observable_octi: + self.helper.connector_logger.debug( + "[Handle state transition] Observable found in OCTI", + { + "current_observable_id": current_observable.id, + "observable_octi": observable_octi, + }, + ) + is_takedown_now = is_takedown_state(alert_queue_state) + is_reverted = is_reverted_state(alert_queue_state) + was_takedown = False + previous_queue_state = None + + # Retrieve previous queue_state from the observable + label_queue_state = [ + label["value"] + for label in observable_octi["objectLabel"] + if label["value"].startswith("queue_state:") + ] + if label_queue_state: + previous_queue_state = label_queue_state[0].replace("queue_state:", "") + was_takedown = is_takedown_state(previous_queue_state) + self.helper.api.stix_cyber_observable.remove_label( + id=observable_octi["id"], label_name=label_queue_state ) - modified = ( - parse_iso_datetime(alert["last_activity_timestamp"]) - if alert.get("last_activity_timestamp", None) - else None + # Transition: TO_TAKEDOWN + # If Doppel marks the alert as “taken down” + if is_takedown_now and not was_takedown: + self.helper.connector_logger.debug( + "[Handle state transition] Transition to process takedown", + { + "current_observable_id": current_observable.id, + "is_takedown_now": is_takedown_now, + "previous_queue_state": previous_queue_state, + }, + ) + self._process_takedown( + alert, current_observable.id, stix_objects, observable_name ) - audit_logs = alert.get("audit_logs", []) - audit_log_text = "\n".join( - [ - f"{log['timestamp']}: {log['type']} - {log['value']}" - for log in audit_logs - ] + # Transition: REVERSION + # If the alert moves from Actioned/Taken Down back to unresolved + elif was_takedown and not is_takedown_now: + self.helper.connector_logger.debug( + "[Handle state transition] Transition to process reversion", + { + "current_observable_id": current_observable.id, + "is_takedown_now": is_takedown_now, + "previous_queue_state": previous_queue_state, + }, + ) + self._process_reversion( + alert, current_observable.id, stix_objects, observable_name ) - entity_content = alert.get("entity_content", {}) - formatted_entity_content = json.dumps(entity_content, indent=2) - platform = alert.get("platform", "unknown") - platform_value = alert.get("product", "unknown") - - entity_state = alert.get("entity_state", "unknown") - queue_state = alert.get("queue_state", "unknown") - raw_severity = alert.get("severity", "unknown") - severity = f"{raw_severity} severity" - - description = ( - f"**Platform**: {platform} \n" - f"**Entity State**: {entity_state} \n" - f"**Queue State**: {queue_state} \n" - f"**Severity**: {severity} \n" - f"**Entity Content**: \n" - f"{formatted_entity_content}" + # Handle case where previous_state is null but we have an active indicator in reverted state + elif previous_queue_state is None and is_reverted and not is_takedown_now: + self.helper.connector_logger.debug( + "[Handle state transition] Transition to process reversion", + { + "current_observable_id": current_observable.id, + "previous_queue_state": previous_queue_state, + }, ) + self._process_reversion( + alert, current_observable.id, stix_objects, observable_name + ) + + def _find_indicators_by_alert_id(self, alert_id: str, observable_name: str) -> list: + """ + Find indicators by alert_id stored in x_opencti_workflow_id or external_id + :param alert_id: Doppel alert ID + :param observable_name: Name of the observable + :return: List of indicator objects or empty + """ + # First, try searching by custom property (may not work if not indexed) + filters = { + "mode": "and", + "filters": [ + {"key": "x_opencti_workflow_id", "values": [alert_id]}, + ], + "filterGroups": [], + } + + indicators_list = self.helper.api.indicator.list(filters=filters) + + if indicators_list: + self.helper.connector_logger.info( + "[DoppelConverter] Found indicators for alert_id", + {"alert_id": alert_id, "count": len(indicators_list)}, + ) + return indicators_list + + # If not found, search by name + else: + self.helper.connector_logger.info( + "[DoppelConverter] No indicators found by workflow_id, trying name search", + {"alert_id": alert_id, "search_value": observable_name}, + ) + + # Search by indicator name (which is the observable value) + filters = { + "mode": "and", + "filters": [ + {"key": "name", "values": [observable_name]}, + ], + "filterGroups": [], + } + + indicators_result = self.helper.api.indicator.list(filters=filters) + + # Filter results to only include indicators with matching external_id + filtered_indicators = [] + if indicators_result: + for indicator in indicators_result: + ext_refs = indicator.get("externalReferences", []) + for ext_ref in ext_refs: + if ext_ref.get("external_id") == alert_id: + filtered_indicators.append(indicator) + + if filtered_indicators: + self.helper.connector_logger.info( + "[DoppelConverter] Found indicators for alert_id", + {"alert_id": alert_id, "count": len(filtered_indicators)}, + ) + return filtered_indicators + + return [] + + def _process_takedown( + self, alert: dict, observable_id: str, stix_objects: list, observable_name: str + ) -> None: + """ + Process takedown workflow: Create Indicator (based-on Observable) + with revoked=False and relationship with observable + + :param alert: dict of alert data + :param observable_id: Id of the observable + :param stix_objects: Stix objects list + :param observable_name: Name of the observable + :return: None + """ + alert_id = alert.get("id") + queue_state = alert.get("queue_state") + + self.helper.connector_logger.info( + "[DoppelConverter] Processing takedown workflow", + {"alert_id": alert_id, "queue_state": queue_state}, + ) + + # Extract domain/IP + entity_content = alert.get("entity_content", {}) + root_domain = entity_content.get("root_domain", {}) + domain_name = root_domain.get("domain") + ipv4_address = root_domain.get("ip_address", "") + phone_value = alert.get("entity") + + # Parse timestamps once for indicator/note reuse + created_at = ( + parse_iso_datetime(alert["created_at"]) if alert.get("created_at") else None + ) + modified_at = ( + parse_iso_datetime(alert.get("last_activity_timestamp")) + if alert.get("last_activity_timestamp") + else None + ) + note_timestamp = modified_at or created_at or datetime.now() + note_content = ( + "Alert is Actioned" + if queue_state and queue_state.lower() == "actioned" + else "Moved to Takedown" + ) + note_body = f"Alert {alert_id} has been {queue_state}" + + # Find existing indicators for this alert + existing_indicators = self._find_indicators_by_alert_id( + alert_id, observable_name + ) + + if existing_indicators: # Indicator already exists + for indicator in existing_indicators: + # Un-revoke if previously revoked + if indicator["revoked"]: + self.helper.connector_logger.info( + "[DoppelConverter] Un-revoking indicator after re-takedown", + { + "alert_id": alert_id, + "indicator_standard_id": indicator["standard_id"], + }, + ) + + # Update to revoked=false + self.helper.api.indicator.update_field( + id=indicator["standard_id"], + input={"key": "revoked", "value": False}, + ) + + # Always record note when takedown/actioned occurs + note_refs = [indicator["standard_id"], observable_id] + note = self.create_note( + note_content, note_body, note_refs, note_timestamp + ) + stix_objects.append(note) - raw_score = alert.get("score") + else: # Create new indicator + # Build pattern + if domain_name: + pattern = f"[domain-name:value = '{domain_name}']" + name = domain_name + elif phone_value: + pattern = f"[tracking-number:value = '{phone_value}']" + name = phone_value + elif ipv4_address: + pattern = f"[ipv4-addr:value = '{ipv4_address}']" + name = ipv4_address + else: + return + + # Create Indicator + indicator = self.create_indicator( + alert, pattern, name, created_at, modified_at + ) + stix_objects.append(indicator) + self.helper.connector_logger.debug( + "[Process taken down] New Indicator created", + { + "alert_id": alert_id, + "name": name, + "indicator_pattern": indicator.pattern, + }, + ) + + # Create based-on relationship to primary observable + indicator_relationship = self.create_relationship( + source_id=indicator.id, + target_id=observable_id, + relationship_type="based-on", + ) + stix_objects.append(indicator_relationship) + + self.helper.connector_logger.info( + "[DoppelConverter] Created based-on relationship for new indicator", + { + "alert_id": alert_id, + "indicator_id": indicator.id, + "observable_id": observable_id, + }, + ) + + # Add note referencing both indicator and observable + note_refs = [indicator.id, observable_id] + note = self.create_note(note_content, note_body, note_refs, note_timestamp) + stix_objects.append(note) + + self.helper.connector_logger.info( + "[DoppelConverter] Created indicator for takedown alert", + {"alert_id": alert_id, "pattern": pattern}, + ) + + def _process_reversion( + self, alert: dict, observable_id: str, stix_objects: list, observable_name: str + ) -> None: + """ + Process reversion workflow: + - Revoke Indicator + - Create Note + - Apply new label to indicator + + :param alert: dict of alert data + :param observable_id: Id of the observable + :param stix_objects: Stix objects list + :param observable_name: Name of the observable + :return: None + """ + alert_id = alert["id"] + queue_state = alert["queue_state"] + + self.helper.connector_logger.info( + "[DoppelConverter] Processing reversion workflow", + {"alert_id": alert_id, "queue_state": queue_state}, + ) + + # Find existing indicators for this alert + existing_indicators = self._find_indicators_by_alert_id( + alert_id, observable_name + ) + + indicators_to_revoke = [ + ind for ind in existing_indicators if not ind.get("revoked", False) + ] + + if not indicators_to_revoke: + self.helper.connector_logger.info( + "[DoppelConverter] No indicators found to revoke", + {"alert_id": alert_id}, + ) + else: + # Parse timestamps + modified = ( + parse_iso_datetime(alert.get("last_activity_timestamp")) + if alert.get("last_activity_timestamp") + else datetime.now() + ) + + revoked_indicator_refs = [] + revoked_indicators_count = 0 + for indicator in indicators_to_revoke: + self.helper.connector_logger.info( + "[DoppelConverter] Revoking indicator", + {"alert_id": alert_id, "indicator_id": indicator["id"]}, + ) + revoked_indicator_refs.append(indicator["standard_id"]) + + # Use OpenCTI API to revoke the indicator try: - score = int(float(raw_score) * 100) if raw_score is not None else 0 - except (ValueError, TypeError): - score = 0 - - indicator = Indicator( - id=indicator_id, - name=entity, - pattern=pattern, - pattern_type="stix", - description=description, - created=created_at, - modified=modified, - created_by_ref=created_by_ref, - object_marking_refs=[self.tlp_marking["id"]], - external_references=[ + self.helper.api.indicator.update_field( + id=indicator["id"], input={"key": "revoked", "value": True} + ) + + # Add revoked-false-positive label + label = self.helper.api.label.create(value="revoked-false-positive") + self.helper.api.indicator.add_label( + id=indicator["id"], label_id=label["id"] + ) + + self.helper.connector_logger.info( + "[DoppelConverter] Successfully revoked indicator via API", + {"alert_id": alert_id, "indicator_id": indicator["id"]}, + ) + revoked_indicators_count += 1 + except Exception as e: + self.helper.connector_logger.error( + "[DoppelConverter] Error revoking indicator via API", { - "source_name": self.author.name, - "url": alert.get("doppel_link"), - "external_id": alert.get("id"), - } - ], - custom_properties={ - "x_opencti_score": score, - "x_opencti_main_observable_type": observable_type, - "x_opencti_brand": alert.get("brand", "unknown"), - "x_mitre_platforms": platform_value, - "x_opencti_source": alert.get("source", "unknown"), - "x_opencti_notes": alert.get("notes", ""), - "x_opencti_audit_logs": audit_log_text, - }, + "alert_id": alert_id, + "indicator_id": indicator["id"], + "error": str(e), + }, + ) + + # Add reversion note to observable + note_refs = revoked_indicator_refs[:] + note_refs.append(observable_id) + + if note_refs: + reversion_note = Note( + id=PyctiNote.generate_id( + content=str(note_refs), + created=modified, + ), + abstract="Moved from taken down back to unresolved", + content=f"Alert {alert_id} has been reverted from takedown state to {queue_state}", + created=modified, + modified=modified, + created_by_ref=self.author.id, + object_refs=note_refs, + object_marking_refs=[self.tlp_marking.id], allow_custom=True, ) - stix_objects.append(indicator) - except Exception as e: - self.helper.connector_logger.warning( - "Failed to process alert", - {"alert": alert, "error": str(e)}, - ) + stix_objects.append(reversion_note) - return self.helper.stix2_create_bundle(stix_objects) + self.helper.connector_logger.info( + "[DoppelConverter] Revoked indicators", + { + "alert_id": alert_id, + "revoked_indicators_count": revoked_indicators_count, + }, + ) diff --git a/external-import/doppel/src/doppel/settings.py b/external-import/doppel/src/doppel/settings.py new file mode 100644 index 00000000000..abbbaed3193 --- /dev/null +++ b/external-import/doppel/src/doppel/settings.py @@ -0,0 +1,97 @@ +from datetime import timedelta +from typing import Literal + +from connectors_sdk import ( + BaseConfigModel, + BaseConnectorSettings, + BaseExternalImportConnectorConfig, + ListFromString, +) +from pydantic import Field, HttpUrl + + +class ExternalImportConnectorConfig(BaseExternalImportConnectorConfig): + """ + Override the `BaseExternalImportConnectorConfig` to add parameters and/or defaults + to the configuration for connectors of type `EXTERNAL_IMPORT`. + """ + + name: str = Field( + description="The name of the connector.", + default="Doppel Threat Intelligence", + ) + scope: ListFromString = Field( + description="The scope of the connector.", + default=["doppel"], + ) + duration_period: timedelta = Field( + description="The period of time to await between two runs of the connector.", + default=timedelta(hours=1), + ) + + +class DoppelConfig(BaseConfigModel): + """ + Define parameters and/or defaults for the configuration specific to the `DoppelConnector`. + """ + + api_base_url: HttpUrl = Field( + description="API base URL.", default=HttpUrl("https://api.doppel.com/v1") + ) + + api_key: str = Field(description="API key for authentication.") + + user_api_key: str | None = Field( + description="Used for user-specific identity", default=None + ) + + organization_code: str | None = Field( + description="Identifies the specific organizational workspace for multi-tenant keys", + default=None, + ) + + tlp_level: Literal[ + "clear", + "white", + "green", + "amber", + "amber+strict", + "red", + ] = Field( + description="Default TLP level of the imported entities.", + default="clear", + ) + + alerts_endpoint: str = Field( + description="Specifies the API resource path for alert ingestion", + default="/alerts", + ) + + historical_polling_days: int = Field( + description="Determines the time-window for initial data fetching", default=30 + ) + + max_retries: int = Field( + description="Configures automated error recovery from transient failures", + default=3, + ) + + retry_delay: int = Field( + description="Controls the frequency of requests during error recovery", + default=30, + ) + + page_size: int = Field( + description="Optimizes request volume and memory usage per fetch", default=100 + ) + + +class ConnectorSettings(BaseConnectorSettings): + """ + Override `BaseConnectorSettings` to include `ExternalImportConnectorConfig` and `DoppelConfig`. + """ + + connector: ExternalImportConnectorConfig = Field( + default_factory=ExternalImportConnectorConfig + ) + doppel: DoppelConfig = Field(default_factory=DoppelConfig) diff --git a/external-import/doppel/src/doppel/stix_helpers.py b/external-import/doppel/src/doppel/stix_helpers.py new file mode 100644 index 00000000000..f1cafa6a7a8 --- /dev/null +++ b/external-import/doppel/src/doppel/stix_helpers.py @@ -0,0 +1,194 @@ +def calculate_priority(score) -> str: + """Calculate case priority based on score""" + if score is None: + return "P4" + try: + score_float = float(score) + if score_float > 0.8: + return "P1" + elif score_float >= 0.5: + return "P2" + elif score_float > 0: + return "P3" + else: + return "P4" + except (ValueError, TypeError): + return "P4" + + +def is_takedown_state(queue_state) -> bool: + """Check if alert is in takedown state""" + return queue_state and queue_state.lower() in ["actioned", "taken_down"] + + +def is_reverted_state(queue_state) -> bool: + """Check if alert is reverted from takedown""" + return queue_state and queue_state.lower() in [ + "archived", + "needs_confirmation", + "doppel_review", + "monitoring", + ] + + +def build_external_references(alert) -> list: + """ + Build external references for observables/indicators + :param alert: Doppel alert + :return: List of external reference dicts + """ + external_references = [] + audit_logs = alert.get("audit_logs", []) + audit_log_text = ( + "\n".join( + [ + f"{log.get('timestamp', '')}: {log.get('type', '')} - {log.get('value', '')} (by {log.get('changed_by', '')})" + for log in audit_logs + ] + ) + if audit_logs + else "" + ) + + if alert.get("doppel_link") or alert.get("id"): + external_ref = { + "source_name": alert.get("source", "Doppel"), + } + if alert.get("doppel_link"): + external_ref["url"] = alert.get("doppel_link") + if alert.get("id"): + external_ref["external_id"] = alert.get("id") + if audit_log_text: + external_ref["description"] = audit_log_text + external_references.append(external_ref) + + return external_references + + +def build_description(alert) -> str: + """ + Build description field from alert data + + NOTE: The screenshot_url value is always regenerated with each API call. + Therefore, the description will always be updated. + + :param alert: Doppel alert + :return: Description string + """ + + # Extract entity_content data + entity_content = alert.get("entity_content", {}) + root_domain = entity_content.get("root_domain", {}) + + country_code = root_domain.get("country_code") + registrar = root_domain.get("registrar") + hosting_provider = root_domain.get("hosting_provider") + contact_email = root_domain.get("contact_email") + mx_records = root_domain.get("mx_records", []) + nameservers = root_domain.get("nameservers", []) + + description_parts = [] + if alert.get("brand"): + description_parts.append(f"**Brand**: {alert.get('brand')}\n") + if alert.get("product"): + description_parts.append(f"**Product**: {alert.get('product')}\n") + if alert.get("notes"): + description_parts.append(f"**Notes**: {alert.get('notes')}\n") + if alert.get("uploaded_by"): + description_parts.append(f"**Uploaded By**: {alert.get('uploaded_by')}\n") + if alert.get("screenshot_url"): + description_parts.append(f"**Screenshot URL**: {alert.get('screenshot_url')}\n") + if alert.get("message"): + description_parts.append(f"**Message**: {alert.get('message')}\n") + if alert.get("source"): + description_parts.append(f"**Source**: {alert.get('source')}\n") + if alert.get("assignee"): + description_parts.append(f"**Assignee**: {alert.get('assignee')}\n") + if country_code: + description_parts.append(f"**Country**: {country_code}\n") + if registrar: + description_parts.append(f"**Registrar**: {registrar}\n") + if hosting_provider: + description_parts.append(f"**Hosting Provider**: {hosting_provider}\n") + if contact_email: + description_parts.append(f"**Contact Email**: {contact_email}\n") + if mx_records: + formatted_mx = [ + f"{mx.get('exchange')} (pref: {mx.get('preference')})" for mx in mx_records + ] + description_parts.append(f"**MX Records**: {', '.join(formatted_mx)}\n") + if nameservers: + ns_text = ", ".join( + [ns if isinstance(ns, str) else ns.get("host") for ns in nameservers] + ) + description_parts.append(f"**Nameservers**: {ns_text}\n") + + return "\n".join(description_parts) if description_parts else "" + + +def build_custom_properties(alert, author_id) -> dict: + """ + Build custom properties for observables/indicators + :param alert: Doppel alert + :return: Dict of custom properties + """ + custom_properties = {} + raw_score = alert.get("score") + try: + # Source API returns a score like 0.34 + # It has to be scaled to 34 in OpenCTI (multiplied by 100) + score = int(float(raw_score) * 100) if raw_score is not None else 0 + except (ValueError, TypeError): + score = 0 + + custom_properties["x_opencti_created_by_ref"] = author_id + custom_properties["x_opencti_score"] = score + custom_properties["x_opencti_workflow_id"] = alert.get( + "id" + ) # Store alert_id for lookup + custom_properties["x_opencti_labels"] = build_labels(alert) + custom_properties["x_opencti_external_references"] = build_external_references( + alert + ) + + x_opencti_description = build_description(alert) + if x_opencti_description: + custom_properties["x_opencti_description"] = x_opencti_description + + return custom_properties + + +def build_labels(alert) -> list: + """ + Build labels for observables/indicators with semantic prefixes + Returns dict with categorized labels and flat list + """ + labels_dict = { + "queue_state": None, + "entity_state": None, + "severity": None, + "platform": None, + "brand": None, + "tags": [], + } + + if alert.get("queue_state"): + labels_dict["queue_state"] = f"queue_state:{alert['queue_state']}" + if alert.get("entity_state"): + labels_dict["entity_state"] = f"entity_state:{alert['entity_state']}" + if alert.get("severity"): + labels_dict["severity"] = f"severity:{alert['severity']}" + if alert.get("platform"): + labels_dict["platform"] = f"platform:{alert['platform']}" + if alert.get("brand"): + labels_dict["brand"] = f"brand:{alert['brand']}" + + tags = alert.get("tags", []) + + if tags: + labels_dict["tags"] = [tag.get("name") for tag in tags if "name" in tag] + + labels_flat = [v for v in labels_dict.values() if v and isinstance(v, str)] + labels_flat.extend(labels_dict["tags"]) + + return labels_flat diff --git a/external-import/doppel/src/doppel/utils.py b/external-import/doppel/src/doppel/utils.py index 07c8300ca05..d2c5abbd5f8 100644 --- a/external-import/doppel/src/doppel/utils.py +++ b/external-import/doppel/src/doppel/utils.py @@ -7,6 +7,6 @@ def parse_iso_datetime(timestamp_str: str) -> datetime: :return: datetime """ try: - return datetime.strptime(timestamp_str, "%Y-%m-%dT%H:%M:%S.%f") + return datetime.fromisoformat(timestamp_str) except ValueError: return None diff --git a/external-import/doppel/src/main.py b/external-import/doppel/src/main.py index de56928a38a..3599cf79f73 100644 --- a/external-import/doppel/src/main.py +++ b/external-import/doppel/src/main.py @@ -1,14 +1,23 @@ import traceback -from doppel.config_loader import ConfigDoppel -from doppel.connector import DoppelConnector +from doppel import ConnectorSettings, DoppelConnector from pycti import OpenCTIConnectorHelper if __name__ == "__main__": + """ + Entry point of the script + + - traceback.print_exc(): This function prints the traceback of the exception to the standard error (stderr). + The traceback includes information about the point in the program where the exception occurred, + which is very useful for debugging purposes. + - exit(1): effective way to terminate a Python program when an error is encountered. + It signals to the operating system and any calling processes that the program did not complete successfully. + """ try: - config = ConfigDoppel() - helper = OpenCTIConnectorHelper(config=config.load) - connector = DoppelConnector(config=config, helper=helper) + settings = ConnectorSettings() + helper = OpenCTIConnectorHelper(config=settings.to_helper_config()) + + connector = DoppelConnector(config=settings, helper=helper) connector.run() except Exception: traceback.print_exc() diff --git a/external-import/doppel/src/requirements.txt b/external-import/doppel/src/requirements.txt index aff52827d2e..ed51be8f1cd 100644 --- a/external-import/doppel/src/requirements.txt +++ b/external-import/doppel/src/requirements.txt @@ -1,4 +1,6 @@ -pycti==7.260309.0 -requests~=2.32.3 # HTTP requests +pycti==7.260515.0 +requests~=2.33.0 # HTTP requests +pydantic~= 2.11.3 stix2~=3.0.1 # STIX 2.1 object creation -tenacity==9.1.2 # Retry logic (used in older implementation, optional now) \ No newline at end of file +tenacity==9.1.2 # Retry logic (used in older implementation, optional now) +connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk \ No newline at end of file diff --git a/external-import/doppel/tests/conftest.py b/external-import/doppel/tests/conftest.py new file mode 100644 index 00000000000..cc2fb660c62 --- /dev/null +++ b/external-import/doppel/tests/conftest.py @@ -0,0 +1,54 @@ +import logging +import sys +from pathlib import Path +from unittest.mock import MagicMock + +import pytest + +# Add src to Python path for imports +sys.path.insert(0, str(Path(__file__).parent.parent / "src")) + +from doppel.converter_to_stix import ConverterToStix + + +@pytest.fixture(autouse=True) +def fake_helper(): + helper = MagicMock() + helper.api.label.create.return_value = {"id": "label_id"} + helper.connector_logger = logging.getLogger("doppel.converter_to_stix") + + return helper + + +@pytest.fixture(autouse=True) +def converter(fake_helper): + return ConverterToStix(helper=fake_helper, tlp_level="clear") + + +@pytest.fixture(autouse=True) +def patch_logger_for_tests(monkeypatch): + """Patch logger methods to format logs with dictionary data for tests.""" + import logging + + def create_enhanced_log_method(original_method): + def enhanced_log(self, msg, *args, **kwargs): + if args and len(args) == 1 and isinstance(args[0], dict): + log_dict = args[0] + formatted_msg = f"{msg} - {log_dict}" + return original_method(self, formatted_msg) + else: + return original_method(self, msg, *args, **kwargs) + + return enhanced_log + + orig_info = logging.Logger.info + orig_debug = logging.Logger.debug + orig_warning = logging.Logger.warning + orig_error = logging.Logger.error + + monkeypatch.setattr(logging.Logger, "info", create_enhanced_log_method(orig_info)) + monkeypatch.setattr(logging.Logger, "debug", create_enhanced_log_method(orig_debug)) + monkeypatch.setattr( + logging.Logger, "warning", create_enhanced_log_method(orig_warning) + ) + monkeypatch.setattr(logging.Logger, "error", create_enhanced_log_method(orig_error)) diff --git a/external-import/doppel/tests/test-requirements.txt b/external-import/doppel/tests/test-requirements.txt new file mode 100644 index 00000000000..f6f64a02ff4 --- /dev/null +++ b/external-import/doppel/tests/test-requirements.txt @@ -0,0 +1,3 @@ +# Main dependencies needs to be installed +-r ../src/requirements.txt +pytest~=9.0.3 \ No newline at end of file diff --git a/external-import/doppel/tests/test_handle_state_transitions.py b/external-import/doppel/tests/test_handle_state_transitions.py new file mode 100644 index 00000000000..37af3c4d341 --- /dev/null +++ b/external-import/doppel/tests/test_handle_state_transitions.py @@ -0,0 +1,184 @@ +import logging +from typing import Any + +import pytest +from stix2 import DomainName + + +def _make_domain() -> DomainName: + """Mock domain name.""" + return DomainName( + id="domain-name--e5651b2a-2840-4e94-9e6d-e4da28565058", + value="Test domain", + ) + + +@pytest.fixture +def expected_log_messages_with_alert_taken_down() -> list[str]: + """Fixture for expected log messages in report orchestration.""" + return [ + "[Handle state transition] Observable found in OCTI - {'current_observable_id': 'domain-name--e5651b2a-2840-4e94-9e6d-e4da28565058', 'observable_octi': {'id': 'domain-name--e5651b2a-2840-4e94-9e6d-e4da28565058', 'objectLabel': [{'value': 'queue_state:doppel_review'}]}}", + "[Handle state transition] Transition to process takedown - {'current_observable_id': 'domain-name--e5651b2a-2840-4e94-9e6d-e4da28565058', 'is_takedown_now': True, 'previous_queue_state': 'doppel_review'}", + "[DoppelConverter] Processing takedown workflow - {'alert_id': 'test id', 'queue_state': 'taken_down'}", + "[DoppelConverter] Found indicators for alert_id - {'alert_id': 'test id', 'count': 0}", + ] + + +@pytest.fixture +def expected_log_messages_with_alert_reverted() -> list[str]: + """Fixture for expected log messages in report orchestration.""" + return [ + "[Handle state transition] Observable found in OCTI - {'current_observable_id': 'domain-name--e5651b2a-2840-4e94-9e6d-e4da28565058', 'observable_octi': {'id': 'domain-name--e5651b2a-2840-4e94-9e6d-e4da28565058', 'objectLabel': [{'value': 'queue_state:taken_down'}]}}", + "[Handle state transition] Transition to process reversion - {'current_observable_id': 'domain-name--e5651b2a-2840-4e94-9e6d-e4da28565058', 'is_takedown_now': False, 'previous_queue_state': 'taken_down'}", + "[DoppelConverter] Processing reversion workflow - {'alert_id': 'test id', 'queue_state': 'doppel_review'}", + "[DoppelConverter] Found indicators for alert_id - {'alert_id': 'test id', 'count': 0}", + "[DoppelConverter] No indicators found to revoke - {'alert_id': 'test id'}", + ] + + +@pytest.fixture +def expected_log_messages_with_alert_reverted_without_previous_state() -> list[str]: + """Fixture for expected log messages in report orchestration.""" + return [ + "[Handle state transition] Observable found in OCTI - {'current_observable_id': 'domain-name--e5651b2a-2840-4e94-9e6d-e4da28565058', 'observable_octi': {'id': 'domain-name--e5651b2a-2840-4e94-9e6d-e4da28565058', 'objectLabel': []}}", + "[Handle state transition] Transition to process reversion - {'current_observable_id': 'domain-name--e5651b2a-2840-4e94-9e6d-e4da28565058', 'previous_queue_state': None}", + "[DoppelConverter] Processing reversion workflow - {'alert_id': 'test id', 'queue_state': 'doppel_review'}", + "[DoppelConverter] Found indicators for alert_id - {'alert_id': 'test id', 'count': 0}", + "[DoppelConverter] No indicators found to revoke - {'alert_id': 'test id'}", + ] + + +# -------------------------- +# --- Scenario Functions --- +# -------------------------- + + +# Scenario: Handle state transitions if observable does not exists +def test_handle_state_transition_with_new_alert( + converter, + caplog, +): + # Given alert + alert = _given_an_alert(caplog, queue_state="taken down") + # And a DomainName observable + obs = _make_domain() + # When alert does not already exists in octi + converter.helper.api.stix_cyber_observable.read.return_value = None + # And we call _handle_state_transitions function + _when_call_handle_state_transitions(obs, converter, alert) + # Then the process takedown should complete successfully with expected logs + _then_process_takedown_completed_successfully(caplog, []) + + +# Scenario: Handle state transitions with queue_state to "taken down" +# if observable already exists with queue state to reverted +def test_handle_state_transition_with_alert_taken_down( + converter, caplog, expected_log_messages_with_alert_taken_down +): + # Given an alert with queue_state taken down + alert = _given_an_alert(caplog, queue_state="taken_down") + # And a DomainName observable + obs = _make_domain() + # When alert already exists in octi as observable + converter.helper.api.stix_cyber_observable.read.return_value = { + "id": "domain-name--e5651b2a-2840-4e94-9e6d-e4da28565058", + "objectLabel": [{"value": "queue_state:doppel_review"}], + } + # And we call _handle_state_transitions function + _when_call_handle_state_transitions(obs, converter, alert) + # Then the process takedown should complete successfully with expected logs + _then_process_takedown_completed_successfully( + caplog, expected_log_messages_with_alert_taken_down + ) + + +# Scenario: Handle state transitions with queue_state in reverted state +# if observable already exists with queue state to taken down +def test_handle_state_transition_with_alert_reverted_with_previous_state_reverted( + converter, caplog, expected_log_messages_with_alert_reverted +): + # Given an alert with queue_state in reverted state + alert = _given_an_alert(caplog, queue_state="doppel_review") + # And a DomainName observable + obs = _make_domain() + # When alert already exists in octi as observable with "taken down" label + converter.helper.api.stix_cyber_observable.read.return_value = { + "id": "domain-name--e5651b2a-2840-4e94-9e6d-e4da28565058", + "objectLabel": [{"value": "queue_state:taken_down"}], + } + # And we call _handle_state_transitions function + _when_call_handle_state_transitions(obs, converter, alert) + # Then the process takedown should complete successfully with expected logs + _then_process_takedown_completed_successfully( + caplog, expected_log_messages_with_alert_reverted + ) + + +# Scenario: Handle state transitions with queue_state in reverted state +# if observable already exists without a previous queue state +def test_handle_state_transition_with_alert_reverted_without_previous_state( + converter, caplog, expected_log_messages_with_alert_reverted_without_previous_state +): + # Given an alert with queue_state in reverted state + alert = _given_an_alert(caplog, queue_state="doppel_review") + # And a DomainName observable + obs = _make_domain() + # When alert already exists in octi as observable without queue_state label + converter.helper.api.stix_cyber_observable.read.return_value = { + "id": "domain-name--e5651b2a-2840-4e94-9e6d-e4da28565058", + "objectLabel": [], + } + # And we call _handle_state_transitions function + _when_call_handle_state_transitions(obs, converter, alert) + # Then the process takedown should complete successfully with expected logs + _then_process_takedown_completed_successfully( + caplog, expected_log_messages_with_alert_reverted_without_previous_state + ) + + +# --------------------------------------------------------- +# --- Helper Functions (implementing the Gherkin steps) --- +# --------------------------------------------------------- + + +# Given an alert +def _given_an_alert(caplog, queue_state): + caplog.set_level(logging.DEBUG) + return { + "id": "test id", + "queue_state": queue_state, + "last_activity_timestamp": "2026-02-26T15:08:24.537482", + "entity_content": { + "root_domain": { + "domain": "test.com", + } + }, + } + + +# When we call _handle_state_transitions function +def _when_call_handle_state_transitions(obs, converter, alert): + return converter._handle_state_transitions( + alert_queue_state=alert["queue_state"], + current_observable=obs, + alert=alert, + stix_objects=[], + observable_name="obs name", + ) + + +# Then the process takedown should complete successfully with expected logs +def _then_process_takedown_completed_successfully( + caplog: Any, expected_report_log_messages: list[str] +) -> None: + """Verify that process takedown completed successfully with expected logs.""" + all_messages = [rec.getMessage() for rec in caplog.records] + missing_messages = [ + msg + for msg in expected_report_log_messages + if not any(msg in log_msg for log_msg in all_messages) + ] + + assert ( # noqa: S101 + not missing_messages + ), f"Missing expected log messages: {missing_messages}" diff --git a/external-import/doppel/tests/test_process_reversion.py b/external-import/doppel/tests/test_process_reversion.py new file mode 100644 index 00000000000..57c6778e317 --- /dev/null +++ b/external-import/doppel/tests/test_process_reversion.py @@ -0,0 +1,98 @@ +import logging +from typing import Any +from uuid import uuid4 + +import pytest + + +@pytest.fixture +def fake_indicators(monkeypatch, converter): + indicators = [{"id": "fakeid", "standard_id": f"note--{uuid4()}", "revoked": False}] + monkeypatch.setattr( + converter, "_find_indicators_by_alert_id", lambda *_: indicators + ) + + +@pytest.fixture +def expected_report_log_messages() -> list[str]: + """Fixture for expected log messages in report orchestration.""" + return [ + "[DoppelConverter] Processing reversion workflow - {'alert_id': 'test id', 'queue_state': 'unresolved'}", + "[DoppelConverter] Revoking indicator - {'alert_id': 'test id', 'indicator_id': 'fakeid'}", + "[DoppelConverter] Successfully revoked indicator via API - {'alert_id': 'test id', 'indicator_id': 'fakeid'}", + "[DoppelConverter] Revoked indicators - {'alert_id': 'test id', 'revoked_indicators_count': 1}", + ] + + +# -------------------------- +# --- Scenario Functions --- +# -------------------------- + + +# Scenario: If the alert moves from Actioned/Taken Down back to unresolved +def test_alert_taken_down_to_unresolved( + converter, fake_indicators, caplog, expected_report_log_messages +): + # Given alert + alert = _given_an_alert(caplog) + # When we call _process_reversion function + _when_call_process_reversion(converter, alert) + # Then the observable has been reverted from taken_down state to unresolved + _then_observable_is_unresolved(converter, fake_indicators) + # Then the process of reversion should complete successfully with expected logs + _then_process_reversion_completed_successfully(caplog, expected_report_log_messages) + + +# --------------------------------------------------------- +# --- Helper Functions (implementing the Gherkin steps) --- +# --------------------------------------------------------- + + +# Given an alert +def _given_an_alert(caplog): + caplog.set_level(logging.DEBUG) + return { + "id": "test id", + "queue_state": "unresolved", + "last_activity_timestamp": "2026-02-26T15:08:24.537482", + } + + +# When we call _process_reversion function +def _when_call_process_reversion(converter, alert): + return converter._process_reversion( + alert=alert, + observable_id=f"domain--{uuid4()}", + stix_objects=[], + observable_name="obs name", + ) + + +# Then the observable has been reverted from taken_down state to unresolved +def _then_observable_is_unresolved(converter, indicator): + converter.helper.api.indicator.update_field.assert_called_once_with( + id="fakeid", input={"key": "revoked", "value": True} + ) + converter.helper.api.label.create.assert_called_once_with( + value="revoked-false-positive" + ) + converter.helper.api.indicator.add_label.assert_called_once_with( + id="fakeid", label_id="label_id" + ) + + +# Then the process of reversion should complete successfully with expected logs +def _then_process_reversion_completed_successfully( + caplog: Any, expected_report_log_messages: list[str] +) -> None: + """Verify that process reversion completed successfully with expected logs.""" + all_messages = [rec.getMessage() for rec in caplog.records] + missing_messages = [ + msg + for msg in expected_report_log_messages + if not any(msg in log_msg for log_msg in all_messages) + ] + + assert ( # noqa: S101 + not missing_messages + ), f"Missing expected log messages: {missing_messages}" diff --git a/external-import/doppel/tests/test_process_takedown.py b/external-import/doppel/tests/test_process_takedown.py new file mode 100644 index 00000000000..35cf81e17ab --- /dev/null +++ b/external-import/doppel/tests/test_process_takedown.py @@ -0,0 +1,143 @@ +import logging +from typing import Any +from uuid import uuid4 + +import pytest + + +@pytest.fixture +def fake_indicators_with_results(monkeypatch, converter): + indicators = [ + { + "id": "indicator--867322cc-57e2-4027-8dee-3802c6c33ecd", + "standard_id": "indicator--867322cc-57e2-4027-8dee-3802c6c33ecd", + "revoked": True, + } + ] + monkeypatch.setattr( + converter, "_find_indicators_by_alert_id", lambda *_: indicators + ) + + +@pytest.fixture +def fake_empty_indicators(monkeypatch, converter): + indicators = None + monkeypatch.setattr( + converter, "_find_indicators_by_alert_id", lambda *_: indicators + ) + + +@pytest.fixture +def expected_log_messages_without_indicator_creation() -> list[str]: + """Fixture for expected log messages in report orchestration.""" + return [ + "[DoppelConverter] Processing takedown workflow - {'alert_id': 'test id', 'queue_state': 'taken down'}", + "[DoppelConverter] Un-revoking indicator after re-takedown - {'alert_id': 'test id', 'indicator_standard_id': 'indicator--867322cc-57e2-4027-8dee-3802c6c33ecd'}", + ] + + +@pytest.fixture +def expected_log_messages_with_indicator_creation() -> list[str]: + """Fixture for expected log messages in report orchestration.""" + return [ + "[DoppelConverter] Processing takedown workflow - {'alert_id': 'test id', 'queue_state': 'taken down'}", + "[Process taken down] New Indicator created - {'alert_id': 'test id', 'name': 'test.com', 'indicator_pattern': \"[domain-name:value = 'test.com']\"}", + # "[DoppelConverter] Created based-on relationship for new indicator - {'alert_id': 'test id', 'indicator_id': 'indicator--6ca61515-7ea1-538b-8e4d-666bcfba472a', 'observable_id': 'domain--40020b21-186e-4239-8f78-8b67582322c7'}", + "[DoppelConverter] Created indicator for takedown alert - {'alert_id': 'test id', 'pattern': \"[domain-name:value = 'test.com']\"}", + ] + + +# -------------------------- +# --- Scenario Functions --- +# -------------------------- + + +# Scenario: If the alert is marked "taken down" by Doppel +def test_alert_taken_down_with_existing_indicator( + converter, + fake_indicators_with_results, + caplog, + expected_log_messages_without_indicator_creation, +): + # Given alert + alert = _given_an_alert(caplog, queue_state="taken down") + # When we call _process_takedown function + _when_call_process_takedown(converter, alert) + # Then the indicator is unrevoked + _then_indicator_is_unrevoked(converter, fake_indicators_with_results) + # Then the process takedown should complete successfully with expected logs + _then_process_takedown_completed_successfully( + caplog, expected_log_messages_without_indicator_creation + ) + + +# Scenario: If the alert is marked "taken down" by Doppel +def test_alert_taken_down_without_existing_indicator( + converter, + fake_empty_indicators, + caplog, + expected_log_messages_with_indicator_creation, +): + # Given alert + alert = _given_an_alert(caplog, queue_state="taken down") + # When we call _process_takedown function + _when_call_process_takedown(converter, alert) + # Then the process takedown should complete successfully with expected logs + _then_process_takedown_completed_successfully( + caplog, expected_log_messages_with_indicator_creation + ) + + +# --------------------------------------------------------- +# --- Helper Functions (implementing the Gherkin steps) --- +# --------------------------------------------------------- + + +# Given an alert +def _given_an_alert(caplog, queue_state): + caplog.set_level(logging.DEBUG) + return { + "id": "test id", + "queue_state": queue_state, + "last_activity_timestamp": "2026-02-26T15:08:24.537482", + "entity_content": { + "root_domain": { + "domain": "test.com", + } + }, + } + + +# When we call _process_takedown function +def _when_call_process_takedown(converter, alert): + return converter._process_takedown( + alert=alert, + observable_id=f"domain-name--{uuid4()}", + stix_objects=[], + observable_name="obs name", + ) + + +# Then the observable has a queue_state to taken_down +def _then_indicator_is_unrevoked(converter, indicator): + converter.helper.api.indicator.update_field.assert_called_once_with( + id="indicator--867322cc-57e2-4027-8dee-3802c6c33ecd", + input={"key": "revoked", "value": False}, + ) + + +# Then the process takedown should complete successfully with expected logs +def _then_process_takedown_completed_successfully( + caplog: Any, expected_report_log_messages: list[str] +) -> None: + """Verify that process takedown completed successfully with expected logs.""" + all_messages = [rec.getMessage() for rec in caplog.records] + missing_messages = [ + msg + for msg in expected_report_log_messages + if not any(msg in log_msg for log_msg in all_messages) + ] + + assert ( # noqa: S101 + not missing_messages + ), f"Missing expected log messages: {missing_messages}" diff --git a/external-import/doppel/tests/test_stix_helpers.py b/external-import/doppel/tests/test_stix_helpers.py new file mode 100644 index 00000000000..eb8f29ddb17 --- /dev/null +++ b/external-import/doppel/tests/test_stix_helpers.py @@ -0,0 +1,166 @@ +from doppel.stix_helpers import ( + build_custom_properties, + build_description, + build_external_references, + build_labels, +) + +# -------------------------- +# --- Scenario Functions --- +# -------------------------- + + +# Scenario: If custom properties are correctly formatted +def test_build_custom_properties(): + # Given an alert + alert = _given_an_alert() + # When we call build_custom_properties function + result = _when_call_build_custom_properties(alert) + # Then the custom properties are correctly formatted + assert result == { + "x_opencti_created_by_ref": "Identity--9662c90d-96a3-43b9-bb4e-03fae4389baf", + "x_opencti_score": 35, + "x_opencti_workflow_id": "Id Test", + "x_opencti_labels": [ + "queue_state:actioned", + "entity_state:active", + "severity:medium", + "platform:domains", + "brand:Brand Test", + ], + "x_opencti_external_references": [ + { + "source_name": "Test Upload", + "url": "https://link-test.com/", + "external_id": "Id Test", + "description": "2026-03-26T15:18:01.622404: queue_state - actioned (by Test)\n2026-02-26T15:08:24.442521: alert_create - needs_review (by Test)", + } + ], + "x_opencti_description": "**Brand**: Brand Test\n\n**Product**: domains\n\n**Notes**: Note Test\n\n**Uploaded By**: Test uploader\n\n**Screenshot URL**: https://test.com/\n\n**Message**: Message test\n\n**Source**: Test Upload\n\n**Assignee**: Assignee Test\n\n**Country**: US\n\n**Hosting Provider**: Test Hosting\n\n**Contact Email**: contact@test.com\n\n**MX Records**: test.com. (pref: 10)\n\n**Nameservers**: NS.TEST.COM\n", + } + + +# Scenario: If external references are correctly formatted +def test_build_external_references(): + # Given an alert + alert = _given_an_alert() + # When we call build_external_references function + result = _when_call_build_external_references(alert) + # Then the external references are correctly formatted + assert result == [ + { + "description": "2026-03-26T15:18:01.622404: queue_state - actioned (by Test)\n" + "2026-02-26T15:08:24.442521: alert_create - needs_review (by Test)", + "external_id": "Id Test", + "source_name": "Test Upload", + "url": "https://link-test.com/", + }, + ] + + +# Scenario: If description is correctly formatted +def test_build_description(): + # Given an alert + alert = _given_an_alert() + # When we call build_description function + result = _when_call_build_description(alert) + # Then the description is correctly formatted + assert ( + result + == "**Brand**: Brand Test\n\n**Product**: domains\n\n**Notes**: Note Test\n\n**Uploaded By**: Test uploader\n\n**Screenshot URL**: https://test.com/\n\n**Message**: Message test\n\n**Source**: Test Upload\n\n**Assignee**: Assignee Test\n\n**Country**: US\n\n**Hosting Provider**: Test Hosting\n\n**Contact Email**: contact@test.com\n\n**MX Records**: test.com. (pref: 10)\n\n**Nameservers**: NS.TEST.COM\n" + ) + + +# Scenario: If labels are correctly formatted +def test_build_labels(): + # Given an alert + alert = _given_an_alert() + # When we call build_labels function + result = _when_call_build_labels(alert) + # Then the labels are correctly formatted + assert result == [ + "queue_state:actioned", + "entity_state:active", + "severity:medium", + "platform:domains", + "brand:Brand Test", + ] + + +# --------------------------------------------------------- +# --- Helper Functions (implementing the Gherkin steps) --- +# --------------------------------------------------------- + + +# Given an alert +def _given_an_alert(): + return { + "id": "Id Test", + "brand": "Brand Test", + "queue_state": "actioned", + "entity_state": "active", + "severity": "medium", + "product": "domains", + "platform": "domains", + "source": "Test Upload", + "notes": "Note Test", + "screenshot_url": "https://test.com/", + "score": "0.35", + "message": "Message test", + "assignee": "Assignee Test", + "doppel_link": "https://link-test.com/", + "uploaded_by": "Test uploader", + "entity_content": { + "root_domain": { + "domain": "domain-test.com", + "ip_address": "123.45.6.789", + "country_code": "US", + "hosting_provider": "Test Hosting", + "contact_email": "contact@test.com", + "mx_records": [ + {"exchange": "test.com.", "preference": 10}, + ], + "nameservers": ["NS.TEST.COM"], + } + }, + "audit_logs": [ + { + "timestamp": "2026-03-26T15:18:01.622404", + "type": "queue_state", + "value": "actioned", + "changed_by": "Test", + "metadata": {}, + }, + { + "timestamp": "2026-02-26T15:08:24.442521", + "type": "alert_create", + "value": "needs_review", + "changed_by": "Test", + "metadata": {}, + }, + ], + "tags": [], + } + + +# When we call _build_custom_properties function +def _when_call_build_custom_properties(alert): + return build_custom_properties( + alert=alert, + author_id="Identity--9662c90d-96a3-43b9-bb4e-03fae4389baf", + ) + + +# When we call _build_external_references function +def _when_call_build_external_references(alert): + return build_external_references(alert=alert) + + +# When we call _build_description function +def _when_call_build_description(alert): + return build_description(alert=alert) + + +# When we call _build_custom_properties function +def _when_call_build_labels(alert): + return build_labels(alert=alert) diff --git a/external-import/dragos/__metadata__/CONNECTOR_CONFIG_DOC.md b/external-import/dragos/__metadata__/CONNECTOR_CONFIG_DOC.md index 010f0feb7cd..fb0fa9c533c 100644 --- a/external-import/dragos/__metadata__/CONNECTOR_CONFIG_DOC.md +++ b/external-import/dragos/__metadata__/CONNECTOR_CONFIG_DOC.md @@ -16,5 +16,5 @@ Below is an exhaustive enumeration of all configurable parameters available, eac | CONNECTOR_TYPE | `const` | | `EXTERNAL_IMPORT` | `"EXTERNAL_IMPORT"` | | | CONNECTOR_DURATION_PERIOD | `string` | | Format: [`duration`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | `"PT1H"` | The period of time to await between two runs of the connector. | | DRAGOS_API_BASE_URL | `string` | | Format: [`uri`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | `"https://portal.dragos.com/"` | Dragos API base URL. | -| DRAGOS_IMPORT_START_DATE | `string` | | Format: [`date-time`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | Start date of first import (ISO format). Can be a relative or an absolute date. | +| DRAGOS_IMPORT_START_DATE | `string` | | Format: [`date-time`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | `"P30D"` | Start date of first import (ISO format). Can be a relative or an absolute date. | | DRAGOS_TLP_LEVEL | `string` | | `white` `green` `amber` `amber+strict` `red` | `"amber+strict"` | TLP level to apply on objects imported into OpenCTI. | diff --git a/external-import/dragos/__metadata__/connector_config_schema.json b/external-import/dragos/__metadata__/connector_config_schema.json index de5fa8eee02..b58a5c08c42 100644 --- a/external-import/dragos/__metadata__/connector_config_schema.json +++ b/external-import/dragos/__metadata__/connector_config_schema.json @@ -74,6 +74,7 @@ "writeOnly": true }, "DRAGOS_IMPORT_START_DATE": { + "default": "P30D", "description": "Start date of first import (ISO format). Can be a relative or an absolute date.", "format": "date-time", "type": "string" diff --git a/external-import/dragos/build/lib/client_api/dev/fake_server/v1/product.py b/external-import/dragos/build/lib/client_api/dev/fake_server/v1/product.py index bd65247d552..f07d6f5a20e 100644 --- a/external-import/dragos/build/lib/client_api/dev/fake_server/v1/product.py +++ b/external-import/dragos/build/lib/client_api/dev/fake_server/v1/product.py @@ -1,5 +1,6 @@ # isort:skip_file """Offer fake api/v1/product endpoint router.""" + import pathlib import json from typing import List, Optional diff --git a/external-import/dragos/build/lib/client_api/v1/common.py b/external-import/dragos/build/lib/client_api/v1/common.py index c5364575f9e..f8cf8c21e87 100644 --- a/external-import/dragos/build/lib/client_api/v1/common.py +++ b/external-import/dragos/build/lib/client_api/v1/common.py @@ -1,5 +1,6 @@ # isort:skip_file """Offer Common tools for the Dragos API V1 endpoints.""" + import json from abc import ABC from logging import DEBUG, getLogger diff --git a/external-import/dragos/build/lib/client_api/v1/indicator.py b/external-import/dragos/build/lib/client_api/v1/indicator.py index 8309dff6d08..1075bf28fbf 100644 --- a/external-import/dragos/build/lib/client_api/v1/indicator.py +++ b/external-import/dragos/build/lib/client_api/v1/indicator.py @@ -1,5 +1,6 @@ # isort:skip_file """Offer Client to reach the Dragos Worldview API product endpoint.""" + import asyncio from datetime import datetime, timezone from typing import AsyncGenerator, Literal, Optional diff --git a/external-import/dragos/build/lib/client_api/v1/product.py b/external-import/dragos/build/lib/client_api/v1/product.py index e56fc9255c4..78435fd39a5 100644 --- a/external-import/dragos/build/lib/client_api/v1/product.py +++ b/external-import/dragos/build/lib/client_api/v1/product.py @@ -1,5 +1,6 @@ # isort:skip_file """Offer Client to reach the Dragos Worldview API product endpoint.""" + import asyncio from datetime import datetime, timezone from io import BytesIO diff --git a/external-import/dragos/build/lib/dragos/settings.py b/external-import/dragos/build/lib/dragos/settings.py index a4569c22299..8712c9d3881 100644 --- a/external-import/dragos/build/lib/dragos/settings.py +++ b/external-import/dragos/build/lib/dragos/settings.py @@ -92,7 +92,10 @@ class DragosConfig(BaseConfigModel): ) import_start_date: DatetimeFromIsoString = Field( description="Start date of first import (ISO format). Can be a relative or an absolute date.", + # `default_factory` is used to set a dynamic default value (datetime) at runtime default_factory=lambda: iso_string_validator("P30D"), # 30 days ago + # but a fixed default value (ISO string) must be used in the schema for documentation purposes + json_schema_extra={"default": "P30D"}, ) tlp_level: Literal[ "white", diff --git a/external-import/dragos/pyproject.toml b/external-import/dragos/pyproject.toml index f6909fc17c4..e6c7c8dc6c7 100644 --- a/external-import/dragos/pyproject.toml +++ b/external-import/dragos/pyproject.toml @@ -19,7 +19,7 @@ classifiers = [ requires-python = ">=3.11, <3.13" dependencies = [ - "pycti==7.260309.0", + "pycti==7.260515.0", "aiohttp>=3.7.4,<4", "limiter==0.5.0", "yarl>=1.10.1,<2", @@ -32,7 +32,7 @@ dependencies = [ [project.optional-dependencies] test= [ - "pytest >=8.1.1, <9", + "pytest >=9.0.3, <10", "pytest-asyncio >=1.2, <2", "freezegun >=1.2.0, <2" ] diff --git a/external-import/dragos/src/dragos.egg-info/PKG-INFO b/external-import/dragos/src/dragos.egg-info/PKG-INFO index ba9b5d12ead..654a93e1155 100644 --- a/external-import/dragos/src/dragos.egg-info/PKG-INFO +++ b/external-import/dragos/src/dragos.egg-info/PKG-INFO @@ -8,20 +8,20 @@ Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 Requires-Python: <3.13,>=3.11 Description-Content-Type: text/markdown -Requires-Dist: pycti==7.260227.0 +Requires-Dist: pycti==7.260416.0 Requires-Dist: aiohttp<4,>=3.7.4 Requires-Dist: limiter==0.5.0 Requires-Dist: yarl<2,>=1.10.1 Requires-Dist: tenacity<10,>=9 Requires-Dist: markdownify<2,>=1.1.0 Requires-Dist: pydantic<3,>=2.8.2 -Requires-Dist: connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@7.260227.0#subdirectory=connectors-sdk +Requires-Dist: connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk Provides-Extra: test -Requires-Dist: pytest<9,>=8.1.1; extra == "test" +Requires-Dist: pytest<10,>=9.0.3; extra == "test" Requires-Dist: pytest-asyncio<2,>=1.2; extra == "test" Requires-Dist: freezegun<2,>=1.2.0; extra == "test" Provides-Extra: dev -Requires-Dist: black<26,>=25.1; extra == "dev" +Requires-Dist: black<27,>=26.1; extra == "dev" Requires-Dist: isort<8,>=7; extra == "dev" Requires-Dist: ruff<1,>=0.7.2; extra == "dev" Requires-Dist: mypy<2,>=1.13.0; extra == "dev" diff --git a/external-import/dragos/src/dragos.egg-info/requires.txt b/external-import/dragos/src/dragos.egg-info/requires.txt index 797c55c9d70..25b381fc038 100644 --- a/external-import/dragos/src/dragos.egg-info/requires.txt +++ b/external-import/dragos/src/dragos.egg-info/requires.txt @@ -1,17 +1,17 @@ -pycti==7.260227.0 +pycti==7.260416.0 aiohttp<4,>=3.7.4 limiter==0.5.0 yarl<2,>=1.10.1 tenacity<10,>=9 markdownify<2,>=1.1.0 pydantic<3,>=2.8.2 -connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@7.260227.0#subdirectory=connectors-sdk +connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk [all] dragos[dev,test] [dev] -black<26,>=25.1 +black<27,>=26.1 isort<8,>=7 ruff<1,>=0.7.2 mypy<2,>=1.13.0 @@ -21,6 +21,6 @@ fastapi<1,>=0.115.8 uvicorn<1,>=0.34.0 [test] -pytest<9,>=8.1.1 +pytest<10,>=9.0.3 pytest-asyncio<2,>=1.2 freezegun<2,>=1.2.0 diff --git a/external-import/dragos/src/dragos/settings.py b/external-import/dragos/src/dragos/settings.py index a4569c22299..8712c9d3881 100644 --- a/external-import/dragos/src/dragos/settings.py +++ b/external-import/dragos/src/dragos/settings.py @@ -92,7 +92,10 @@ class DragosConfig(BaseConfigModel): ) import_start_date: DatetimeFromIsoString = Field( description="Start date of first import (ISO format). Can be a relative or an absolute date.", + # `default_factory` is used to set a dynamic default value (datetime) at runtime default_factory=lambda: iso_string_validator("P30D"), # 30 days ago + # but a fixed default value (ISO string) must be used in the schema for documentation purposes + json_schema_extra={"default": "P30D"}, ) tlp_level: Literal[ "white", diff --git a/external-import/dshield/src/requirements.txt b/external-import/dshield/src/requirements.txt index 5ce3335d7d4..07bccd34ddf 100644 --- a/external-import/dshield/src/requirements.txt +++ b/external-import/dshield/src/requirements.txt @@ -1,2 +1,2 @@ -pycti==7.260309.0 -requests~=2.32.3 \ No newline at end of file +pycti==7.260515.0 +requests~=2.33.0 \ No newline at end of file diff --git a/external-import/echocti/requirements.txt b/external-import/echocti/requirements.txt index d2f54642697..c23b0a3318f 100644 --- a/external-import/echocti/requirements.txt +++ b/external-import/echocti/requirements.txt @@ -1,6 +1,6 @@ -pycti==7.260309.0 +pycti==7.260515.0 pydantic>=2.8.2,<3.0.0 -requests>=2.31.0 +requests>=2.31.0,<=2.33.0 pyyaml>=6.0 stix2>=3.0.1 python-dateutil>=2.8.2 diff --git a/external-import/elastic-security-incidents/src/requirements.txt b/external-import/elastic-security-incidents/src/requirements.txt index e9684a32073..f5b8181a0c7 100644 --- a/external-import/elastic-security-incidents/src/requirements.txt +++ b/external-import/elastic-security-incidents/src/requirements.txt @@ -1 +1 @@ -pycti==7.260309.0 \ No newline at end of file +pycti==7.260515.0 \ No newline at end of file diff --git a/external-import/email-intel-imap/dev-requirements.txt b/external-import/email-intel-imap/dev-requirements.txt index 8f79db0fc1b..6d2a2f7de2b 100644 --- a/external-import/email-intel-imap/dev-requirements.txt +++ b/external-import/email-intel-imap/dev-requirements.txt @@ -1,6 +1,6 @@ -r ./tests/test-requirements.txt -r ./src/requirements.txt -black==26.1.0 +black==26.3.1 isort==7.0.0 mypy==1.19.1 pylint==3.3.9 \ No newline at end of file diff --git a/external-import/email-intel-imap/src/base_connector/requirements.txt b/external-import/email-intel-imap/src/base_connector/requirements.txt index 17c0aa5f720..e89e5be8def 100644 --- a/external-import/email-intel-imap/src/base_connector/requirements.txt +++ b/external-import/email-intel-imap/src/base_connector/requirements.txt @@ -1,3 +1,3 @@ -pycti==7.260309.0 +pycti==7.260515.0 pydantic~=2.11.3 pydantic-settings==2.8.1 diff --git a/external-import/email-intel-imap/src/requirements.txt b/external-import/email-intel-imap/src/requirements.txt index ad9d4868470..fd7a7a58346 100644 --- a/external-import/email-intel-imap/src/requirements.txt +++ b/external-import/email-intel-imap/src/requirements.txt @@ -1,11 +1,11 @@ -r ./base_connector/requirements.txt imap-tools==1.11.0 -pycti==7.260309.0 +pycti==7.260515.0 pydantic~=2.11.3 pydantic-settings==2.8.1 google-api-python-client>=2.169.0 google-api-core==2.30.0 -google-auth==2.48.0 +google-auth==2.50.0 google-auth-oauthlib==1.3.0 # prefered to default one by google-auth google-auth-httplib2==0.3.0 # prefered to default one by google-auth see https://github.com/googleapis/google-auth-library-python-httplib2?tab=readme-ov-file#introduction stix2~=3.0.1 diff --git a/external-import/email-intel-imap/tests/test-requirements.txt b/external-import/email-intel-imap/tests/test-requirements.txt index a1aa708c187..d63e4f9d95a 100644 --- a/external-import/email-intel-imap/tests/test-requirements.txt +++ b/external-import/email-intel-imap/tests/test-requirements.txt @@ -1,4 +1,4 @@ -r ../src/requirements.txt freezegun==1.5.1 -pytest==8.3.5 +pytest==9.0.3 pytest-mock==3.14.0 \ No newline at end of file diff --git a/external-import/email-intel-microsoft/dev-requirements.txt b/external-import/email-intel-microsoft/dev-requirements.txt index 8f79db0fc1b..6d2a2f7de2b 100644 --- a/external-import/email-intel-microsoft/dev-requirements.txt +++ b/external-import/email-intel-microsoft/dev-requirements.txt @@ -1,6 +1,6 @@ -r ./tests/test-requirements.txt -r ./src/requirements.txt -black==26.1.0 +black==26.3.1 isort==7.0.0 mypy==1.19.1 pylint==3.3.9 \ No newline at end of file diff --git a/external-import/email-intel-microsoft/src/base_connector/requirements.txt b/external-import/email-intel-microsoft/src/base_connector/requirements.txt index a8ad65d6754..3a2c90bcdc6 100644 --- a/external-import/email-intel-microsoft/src/base_connector/requirements.txt +++ b/external-import/email-intel-microsoft/src/base_connector/requirements.txt @@ -1,3 +1,3 @@ -pycti==7.260309.0 +pycti==7.260515.0 pydantic~=2.11.3 pydantic-settings==2.9.1 \ No newline at end of file diff --git a/external-import/email-intel-microsoft/src/requirements.txt b/external-import/email-intel-microsoft/src/requirements.txt index 4f42d03f93a..bbe689df802 100644 --- a/external-import/email-intel-microsoft/src/requirements.txt +++ b/external-import/email-intel-microsoft/src/requirements.txt @@ -2,6 +2,6 @@ azure-identity==1.25.1 email_validator==2.3.0 msgraph-sdk==1.53.0 -pycti==7.260309.0 +pycti==7.260515.0 pydantic~=2.11.3 pydantic-settings==2.9.1 diff --git a/external-import/email-intel-microsoft/tests/test-requirements.txt b/external-import/email-intel-microsoft/tests/test-requirements.txt index 2a97d1f5e16..924f84efb60 100644 --- a/external-import/email-intel-microsoft/tests/test-requirements.txt +++ b/external-import/email-intel-microsoft/tests/test-requirements.txt @@ -1,5 +1,5 @@ -r ../src/requirements.txt freezegun==1.5.1 -pytest==8.3.5 -pytest-asyncio==0.26.0 +pytest==9.0.3 +pytest-asyncio==1.3.0 pytest-mock==3.14.0 \ No newline at end of file diff --git a/external-import/eset/src/requirements.txt b/external-import/eset/src/requirements.txt index b2153a3beb5..eb2d4bd685e 100644 --- a/external-import/eset/src/requirements.txt +++ b/external-import/eset/src/requirements.txt @@ -1,3 +1,3 @@ -pycti==7.260309.0 +pycti==7.260515.0 cabby diff --git a/external-import/feedly/src/requirements.txt b/external-import/feedly/src/requirements.txt index 3762bbef40c..a883aea340e 100644 --- a/external-import/feedly/src/requirements.txt +++ b/external-import/feedly/src/requirements.txt @@ -1,4 +1,4 @@ -pycti==7.260309.0 +pycti==7.260515.0 feedly-client==0.27 schedule==1.2.2 Markdown==3.10 diff --git a/external-import/feedly/tests/test-requirements.txt b/external-import/feedly/tests/test-requirements.txt index bdef682113c..d405632324b 100644 --- a/external-import/feedly/tests/test-requirements.txt +++ b/external-import/feedly/tests/test-requirements.txt @@ -1,2 +1,2 @@ -r ../src/requirements.txt -pytest==8.4.2 +pytest==9.0.3 diff --git a/external-import/first-epss-bulk/src/requirements.txt b/external-import/first-epss-bulk/src/requirements.txt index e9684a32073..f5b8181a0c7 100644 --- a/external-import/first-epss-bulk/src/requirements.txt +++ b/external-import/first-epss-bulk/src/requirements.txt @@ -1 +1 @@ -pycti==7.260309.0 \ No newline at end of file +pycti==7.260515.0 \ No newline at end of file diff --git a/external-import/flashpoint/__metadata__/CONNECTOR_CONFIG_DOC.md b/external-import/flashpoint/__metadata__/CONNECTOR_CONFIG_DOC.md index cad23abbdc7..dc15c217328 100644 --- a/external-import/flashpoint/__metadata__/CONNECTOR_CONFIG_DOC.md +++ b/external-import/flashpoint/__metadata__/CONNECTOR_CONFIG_DOC.md @@ -16,7 +16,7 @@ Below is an exhaustive enumeration of all configurable parameters available, eac | CONNECTOR_SCOPE | `array` | | string | `["flashpoint"]` | The scope of the connector, e.g. 'flashpoint'. | | CONNECTOR_DURATION_PERIOD | `string` | | Format: [`duration`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | `"PT1H"` | The period of time to await between two runs of the connector. | | CONNECTOR_LOG_LEVEL | `string` | | `debug` `info` `warn` `warning` `error` | `"error"` | The minimum level of logs to display. | -| FLASHPOINT_IMPORT_START_DATE | `string` | | Format: [`date-time`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | The date from which to start importing data. | +| FLASHPOINT_IMPORT_START_DATE | `string` | | Format: [`date-time`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | `"P30D"` | The date from which to start importing data. | | FLASHPOINT_IMPORT_REPORTS | `boolean` | | boolean | `true` | Whether to import reports from Flashpoint or not. | | FLASHPOINT_INDICATORS_IN_REPORTS | `boolean` | | boolean | `false` | Whether to include indicators in the reports imported from MispFeed or not. | | FLASHPOINT_CREATE_REPORTS | `boolean` | | boolean | `false` | Whether to create reports or groupings from MispFeed events or not. | diff --git a/external-import/flashpoint/__metadata__/connector_config_schema.json b/external-import/flashpoint/__metadata__/connector_config_schema.json index bae0161f4ae..0e43b417052 100644 --- a/external-import/flashpoint/__metadata__/connector_config_schema.json +++ b/external-import/flashpoint/__metadata__/connector_config_schema.json @@ -59,6 +59,7 @@ "writeOnly": true }, "FLASHPOINT_IMPORT_START_DATE": { + "default": "P30D", "description": "The date from which to start importing data.", "format": "date-time", "type": "string" diff --git a/external-import/flashpoint/src/flashpoint_connector/config_loader.py b/external-import/flashpoint/src/flashpoint_connector/config_loader.py index aabb18d435a..06a7e8cbe56 100644 --- a/external-import/flashpoint/src/flashpoint_connector/config_loader.py +++ b/external-import/flashpoint/src/flashpoint_connector/config_loader.py @@ -171,7 +171,10 @@ class FlashpointConfig(ConfigBaseModel): api_key: SecretStr = Field(description="The API key to connect to Flashpoint.") import_start_date: DatetimeFromIsoString = Field( description="The date from which to start importing data.", + # `default_factory` is used to set a dynamic default value (datetime) at runtime default_factory=lambda: iso_string_validator("P30D"), # 30 days ago + # but a fixed default value (ISO string) must be used in the schema for documentation purposes + json_schema_extra={"default": "P30D"}, ) import_reports: bool = Field( description="Whether to import reports from Flashpoint or not.", diff --git a/external-import/flashpoint/src/requirements.txt b/external-import/flashpoint/src/requirements.txt index c2ae4e5ef9d..570c4d4eac7 100644 --- a/external-import/flashpoint/src/requirements.txt +++ b/external-import/flashpoint/src/requirements.txt @@ -1,6 +1,6 @@ -pycti==7.260309.0 +pycti==7.260515.0 validators==0.35.0 -dateparser==1.3.0 -requests==2.32.5 +dateparser==1.4.0 +requests==2.33.0 pydantic==2.11.9 pydantic-settings==2.9.1 \ No newline at end of file diff --git a/external-import/flashpoint/tests/test-requirements.txt b/external-import/flashpoint/tests/test-requirements.txt index 5db56442a2d..95aefa74f7c 100644 --- a/external-import/flashpoint/tests/test-requirements.txt +++ b/external-import/flashpoint/tests/test-requirements.txt @@ -1,3 +1,3 @@ -r ../src/requirements.txt -pytest==8.3.5 \ No newline at end of file +pytest==9.0.3 \ No newline at end of file diff --git a/external-import/fortinet-ti/src/requirements.txt b/external-import/fortinet-ti/src/requirements.txt index 243b9332514..11befb70321 100644 --- a/external-import/fortinet-ti/src/requirements.txt +++ b/external-import/fortinet-ti/src/requirements.txt @@ -1,4 +1,4 @@ stix2==3.0.1 -requests==2.32.5 +requests==2.33.0 PyYAML==6.0.3 -pycti==7.260309.0 \ No newline at end of file +pycti==7.260515.0 \ No newline at end of file diff --git a/external-import/ft3/src/requirements.txt b/external-import/ft3/src/requirements.txt index 639289a54d4..3e97a73ff90 100644 --- a/external-import/ft3/src/requirements.txt +++ b/external-import/ft3/src/requirements.txt @@ -1,5 +1,5 @@ -pycti==7.260309.0 -urllib3==2.6.3 +pycti==7.260515.0 +urllib3==2.7.0 pydantic>=2.10, <3 pydantic-settings==2.9.1 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk diff --git a/external-import/google-drive/src/requirements.txt b/external-import/google-drive/src/requirements.txt index 23814527311..6dcd637d72b 100644 --- a/external-import/google-drive/src/requirements.txt +++ b/external-import/google-drive/src/requirements.txt @@ -1,3 +1,4 @@ -pycti==7.260309.0 -google-api-python-client==2.191.0 -google-auth==2.48.0 +pycti==7.260515.0 +google-api-python-client==2.196.0 +google-auth==2.50.0 + diff --git a/external-import/google-dtm/.dockerignore b/external-import/google-dtm/.dockerignore new file mode 100644 index 00000000000..5da7c07a914 --- /dev/null +++ b/external-import/google-dtm/.dockerignore @@ -0,0 +1,10 @@ +**/logs +**/*.gql +**/venv +**/.venv +**/__pycache__/ +**/*.egg-info/ +**/config.yml +**/__pycache__ +**/__metadata__ +**/__docs__ \ No newline at end of file diff --git a/external-import/google-dtm/.env.sample b/external-import/google-dtm/.env.sample new file mode 100644 index 00000000000..878c66c7bae --- /dev/null +++ b/external-import/google-dtm/.env.sample @@ -0,0 +1,17 @@ +# OpenCTI connection parameters +OPENCTI_URL=http://localhost +OPENCTI_TOKEN=ChangeMe + +# Connector's common parameters +# CONNECTOR_ID=ChangeMe +# CONNECTOR_NAME=Google DTM +# CONNECTOR_SCOPE=google-dtm +# CONNECTOR_LOG_LEVEL=error +# CONNECTOR_DURATION_PERIOD=PT1H + + # Connector's custom execution parameters +GOOGLE_DTM_API_KEY=ChangeMe +# GOOGLE_DTM_TLP=amber+strict +# GOOGLE_DTM_IMPORT_START_DATE=P10D +# GOOGLE_DTM_ALERT_SEVERITY= +# GOOGLE_DTM_ALERT_TYPE= \ No newline at end of file diff --git a/external-import/google-dtm/Dockerfile b/external-import/google-dtm/Dockerfile new file mode 100644 index 00000000000..f8921b1f24f --- /dev/null +++ b/external-import/google-dtm/Dockerfile @@ -0,0 +1,11 @@ +FROM python:3.12-alpine +ENV CONNECTOR_TYPE=EXTERNAL_IMPORT + +COPY src /opt/connector/src +WORKDIR /opt/connector + +RUN apk --no-cache add git build-base libmagic libffi-dev && \ + pip3 install --no-cache-dir -r /opt/connector/src/requirements.txt && \ + apk del git build-base + +CMD ["python", "-m", "src"] diff --git a/external-import/google-dtm/README.md b/external-import/google-dtm/README.md new file mode 100644 index 00000000000..0863d70ca6e --- /dev/null +++ b/external-import/google-dtm/README.md @@ -0,0 +1,129 @@ +# OpenCTI Google Digital Threat Monitoring Connector + +| Status | Date | Comment | +|-------------------|------|---------| +| Filigran Verified | - | - | + +The Google Digital Threat Monitoring (DTM) connector retrieves threat alerts and contextual information from the Google Digital Threat Monitoring API and ingests them into OpenCTI in the form of STIX 2.1 incidents and associated observables (domains, URLs, IP addresses, and email addresses). + +## Table of Contents + +- [OpenCTI Google Digital Threat Monitoring Connector](#opencti-google-digital-threat-monitoring-connector) + - [Table of Contents](#table-of-contents) + - [Introduction](#introduction) + - [Installation](#installation) + - [Requirements](#requirements) + - [Configuration variables](#configuration-variables) + - [OpenCTI environment variables](#opencti-environment-variables) + - [Base connector environment variables](#base-connector-environment-variables) + - [Connector extra parameters environment variables](#connector-extra-parameters-environment-variables) + - [Deployment](#deployment) + - [Docker Deployment](#docker-deployment) + - [Manual Deployment](#manual-deployment) + - [Usage](#usage) + - [Behavior](#behavior) + - [Debugging](#debugging) + - [Additional information](#additional-information) + +## Introduction + +Google Digital Threat Monitoring (DTM) is an external threat intelligence service that continuously monitors the open web, dark web, and other online sources to identify threats targeting your brand, domains, executives, and assets. By providing contextualized alerts and curated intelligence, DTM helps organizations detect and respond quickly to phishing, impersonation, data leakage, and other digital risks. +This connector integrates Google Digital Threat Monitoring (DTM) service with OpenCTI to bring external digital risk insights directly into your threat intelligence platform. +The connector periodically pulls alerts from the DTM API and ingests each alert into OpenCTI as an Incident. +For every Incident, it stores the available context from DTM (threat category, severity, timestamps, sources, and descriptive details) and links all related technical artifacts—indicators and observables like domains, URLs, IP addresses, accounts, and file hashes. + +By integrating DTM alerts as Incidents in OpenCTI and attaching their associated observables, the connector provides a structured, centralized view of external digital threats and makes it easier to correlate them with other intelligence feeds and internal security data. + +## Installation + +### Requirements + +- OpenCTI Platform >= 6.9.x +- Google DTM API key + +## Configuration + +Configuration parameters can be provided in either **`config.yml`** file, **`.env`** file or directly as **environment variables** (e.g. from **`docker-compose.yml`** for Docker deployments). + +Priority: **YAML > .env > environment > defaults**. + +### Configuration variables + +Find all the configuration variables available here: [Connector Configurations](./__metadata__/CONNECTOR_CONFIG_DOC.md) + +## Deployment + +### Docker Deployment + +Build the Docker image: + +```bash +docker build -t opencti/connector-google-dtm:latest . +``` + +Configure the connector in `docker-compose.yml`: + +```yaml + connector-google-dtm: + image: opencti/connector-google-dtm:latest + environment: + - OPENCTI_URL=http://localhost + - OPENCTI_TOKEN=ChangeMe + - CONNECTOR_ID=ChangeMe + - CONNECTOR_TYPE=EXTERNAL_IMPORT + - "CONNECTOR_NAME=Google DTM" + - CONNECTOR_SCOPE=google-dtm + - CONNECTOR_LOG_LEVEL=error + - CONNECTOR_DURATION_PERIOD=PT1H + - GOOGLE_DTM_API_KEY=ChangeMe + - GOOGLE_DTM_TLP=red + - GOOGLE_DTM_IMPORT_START_DATE=P10D + - GOOGLE_DTM_ALERT_SEVERITY= + - GOOGLE_DTM_ALERT_TYPE= + restart: always +``` + +Start the connector: + +```bash +docker compose up -d +``` + +### Manual Deployment + +1. Create `config.yml` based on `config.yml.sample`. + +2. Install dependencies: + +```bash +pip3 install -r requirements.txt +``` + +3. Start the connector: + +```bash +python3 -m src +``` + +## Usage + +The connector runs automatically at the interval defined by `CONNECTOR_DURATION_PERIOD`. To force an immediate run: + +**Data Management → Ingestion → Connectors** + +Find the connector and click the refresh button to reset the state and trigger a new sync. + +## Behavior + +The connector imports Google DTM alerts as Incidents and Observables (Domain, URL, IP, Email). + +## Debugging + +```env +CONNECTOR_LOG_LEVEL=debug +``` + +## Additional information + +- **TLP Levels**: Supports `white`, `green`, `amber`, `amber+strict`, `red` +- **Reference**: [Google DTM API Documentation](https://gtidocs.virustotal.com/reference/get-alerts) \ No newline at end of file diff --git a/external-import/google-dtm/__metadata__/CONNECTOR_CONFIG_DOC.md b/external-import/google-dtm/__metadata__/CONNECTOR_CONFIG_DOC.md new file mode 100644 index 00000000000..11e96e41d06 --- /dev/null +++ b/external-import/google-dtm/__metadata__/CONNECTOR_CONFIG_DOC.md @@ -0,0 +1,20 @@ +# Connector Configurations + +Below is an exhaustive enumeration of all configurable parameters available, each accompanied by detailed explanations of their purposes, default behaviors, and usage guidelines to help you understand and utilize them effectively. + +### Type: `object` + +| Property | Type | Required | Possible values | Default | Description | +| -------- | ---- | -------- | --------------- | ------- | ----------- | +| OPENCTI_URL | `string` | ✅ | Format: [`uri`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | The base URL of the OpenCTI instance. | +| OPENCTI_TOKEN | `string` | ✅ | string | | The API token to connect to OpenCTI. | +| GOOGLE_DTM_API_KEY | `string` | ✅ | Format: [`password`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | Google DTM API Key | +| CONNECTOR_NAME | `string` | | string | `"Google DTM"` | The name of the connector. | +| CONNECTOR_SCOPE | `array` | | string | `["google-dtm"]` | The scope of the connector, e.g. 'google-dtm'. | +| CONNECTOR_LOG_LEVEL | `string` | | `debug` `info` `warn` `warning` `error` | `"error"` | The minimum level of logs to display. | +| CONNECTOR_TYPE | `const` | | `EXTERNAL_IMPORT` | `"EXTERNAL_IMPORT"` | | +| CONNECTOR_DURATION_PERIOD | `string` | | Format: [`duration`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | `"PT1H"` | The period of time to await between two runs of the connector in ISO 8601 format e.g., 'PT1H' for 1 hour. | +| GOOGLE_DTM_TLP | `string` | | `clear` `white` `green` `amber` `amber+strict` `red` | `"amber+strict"` | Default Traffic Light Protocol (TLP) marking for imported data. | +| GOOGLE_DTM_IMPORT_START_DATE | `string` | | Format: [`duration`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | `"P10D"` | ISO 8601 duration string specifying how far back to import alerts (e.g., P1D for 1 day, P7D for 7 days) | +| GOOGLE_DTM_ALERT_TYPE | `array` | | `Compromised Credentials` `Document` `Domain Discovery` `Email` `Forum Post` `Message` `Paste` `Shop Listing` `Tweet` `Web Content` | `[]` | Comma-separated list of alert types to ingest. Leave blank to retrieve alerts of all types. | +| GOOGLE_DTM_ALERT_SEVERITY | `array` | | `high` `medium` `low` | `[]` | Comma-separated list of alert severities to ingest. Leave blank to retrieve alerts of all severities. | diff --git a/external-import/google-dtm/__metadata__/connector_config_schema.json b/external-import/google-dtm/__metadata__/connector_config_schema.json new file mode 100644 index 00000000000..377eaabdc32 --- /dev/null +++ b/external-import/google-dtm/__metadata__/connector_config_schema.json @@ -0,0 +1,120 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://www.filigran.io/connectors/google-dtm_config.schema.json", + "type": "object", + "properties": { + "OPENCTI_URL": { + "description": "The base URL of the OpenCTI instance.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "OPENCTI_TOKEN": { + "description": "The API token to connect to OpenCTI.", + "type": "string" + }, + "CONNECTOR_NAME": { + "default": "Google DTM", + "description": "The name of the connector.", + "type": "string" + }, + "CONNECTOR_SCOPE": { + "default": [ + "google-dtm" + ], + "description": "The scope of the connector, e.g. 'google-dtm'.", + "items": { + "type": "string" + }, + "type": "array" + }, + "CONNECTOR_LOG_LEVEL": { + "default": "error", + "description": "The minimum level of logs to display.", + "enum": [ + "debug", + "info", + "warn", + "warning", + "error" + ], + "type": "string" + }, + "CONNECTOR_TYPE": { + "const": "EXTERNAL_IMPORT", + "default": "EXTERNAL_IMPORT", + "type": "string" + }, + "CONNECTOR_DURATION_PERIOD": { + "default": "PT1H", + "description": "The period of time to await between two runs of the connector in ISO 8601 format e.g., 'PT1H' for 1 hour.", + "format": "duration", + "type": "string" + }, + "GOOGLE_DTM_API_KEY": { + "description": "Google DTM API Key", + "format": "password", + "type": "string", + "writeOnly": true + }, + "GOOGLE_DTM_TLP": { + "description": "Default Traffic Light Protocol (TLP) marking for imported data.", + "enum": [ + "clear", + "white", + "green", + "amber", + "amber+strict", + "red" + ], + "type": "string", + "default": "amber+strict" + }, + "GOOGLE_DTM_IMPORT_START_DATE": { + "default": "P10D", + "description": "ISO 8601 duration string specifying how far back to import alerts (e.g., P1D for 1 day, P7D for 7 days)", + "format": "duration", + "type": "string" + }, + "GOOGLE_DTM_ALERT_TYPE": { + "default": [], + "description": "Comma-separated list of alert types to ingest. Leave blank to retrieve alerts of all types.", + "items": { + "enum": [ + "Compromised Credentials", + "Document", + "Domain Discovery", + "Email", + "Forum Post", + "Message", + "Paste", + "Shop Listing", + "Tweet", + "Web Content" + ], + "type": "string" + }, + "type": "array" + }, + "GOOGLE_DTM_ALERT_SEVERITY": { + "default": [], + "description": "Comma-separated list of alert severities to ingest. Leave blank to retrieve alerts of all severities.", + "items": { + "enum": [ + "high", + "medium", + "low" + ], + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "OPENCTI_URL", + "OPENCTI_TOKEN", + "GOOGLE_DTM_API_KEY" + ], + "additionalProperties": true +} \ No newline at end of file diff --git a/external-import/google-dtm/__metadata__/connector_manifest.json b/external-import/google-dtm/__metadata__/connector_manifest.json new file mode 100644 index 00000000000..1faa0ac390e --- /dev/null +++ b/external-import/google-dtm/__metadata__/connector_manifest.json @@ -0,0 +1,22 @@ +{ + "title": "Google Digital Threat Monitoring (DTM)", + "slug": "google-dtm", + "description": "Google Digital Threat Monitoring (DTM) is an external threat intelligence service that continuously monitors the open web, dark web, and other online sources to identify threats targeting your brand, domains, executives, and assets. By providing contextualized alerts and curated intelligence, DTM helps organizations detect and respond quickly to phishing, impersonation, data leakage, and other digital risks. \n\nThis connector integrates Google Digital Threat Monitoring (DTM) service with OpenCTI to bring external digital risk insights directly into your threat intelligence platform. \n\nThe connector periodically pulls alerts from the DTM API and ingests each alert into OpenCTI as an Incident. For every Incident, it stores the available context from DTM (threat category, severity, timestamps, sources, and descriptive details) and links all related technical artifacts—indicators and observables like domains, URLs, IP addresses, accounts, and file hashes.\n\n By integrating DTM alerts as Incidents in OpenCTI and attaching their associated observables, the connector provides a structured, centralized view of external digital threats and makes it easier to correlate them with other intelligence feeds and internal security data.", + "short_description": "Google Digital Threat Monitoring (DTM) is an external threat intelligence service that continuously monitors the open web, dark web, and other online sources to identify threats targeting your brand, domains, executives, and assets. By providing contextualized alerts and curated intelligence, DTM helps organizations detect and respond quickly to phishing, impersonation, data leakage, and other digital risks.", + "logo": "external-import/google-dtm/__metadata__/logo.png", + "use_cases" : [ + "Brand, Digital Risk & Underground Exposure", + "Third-Party & Supply Chain Oversight" + ], + "verified": true, + "last_verified_date": "2026-04-15", + "playbook_supported": false, + "max_confidence_level": 70, + "support_version": ">=6.9.10", + "subscription_link": "https://cloud.google.com/security/products/digital-threat-monitoring", + "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/external-import/google-dtm", + "manager_supported": true, + "container_version": "rolling", + "container_image": "opencti/connector-google-dtm", + "container_type": "EXTERNAL_IMPORT" +} \ No newline at end of file diff --git a/external-import/google-dtm/__metadata__/logo.png b/external-import/google-dtm/__metadata__/logo.png new file mode 100644 index 00000000000..6deb467f08e Binary files /dev/null and b/external-import/google-dtm/__metadata__/logo.png differ diff --git a/external-import/google-dtm/config.yml.sample b/external-import/google-dtm/config.yml.sample new file mode 100644 index 00000000000..8533f152657 --- /dev/null +++ b/external-import/google-dtm/config.yml.sample @@ -0,0 +1,18 @@ +opencti: + url: 'http://localhost' + token: 'ChangeMe' + +# connector: +# id: '92483abc-27f1-46b4-afcb-d9a0a405754a' +# name: 'Google DTM' +# scope: 'google-dtm' +# log_level: 'error' +# duration_period: 'PT1H' + +google_dtm: + api_key: 'ChangeMe' +# tlp: 'amber+strict' +# import_start_date: 'P10D' +# alert_type: '' +# alert_severity: '' + \ No newline at end of file diff --git a/external-import/google-dtm/docker-compose.yml b/external-import/google-dtm/docker-compose.yml new file mode 100644 index 00000000000..6f41049737c --- /dev/null +++ b/external-import/google-dtm/docker-compose.yml @@ -0,0 +1,21 @@ +version: '3' +services: + connector-google-dtm: + image: opencti/connector-google-dtm:6.9.10 + environment: + # OpenCTI connection parameters + - OPENCTI_URL=http://localhost + - OPENCTI_TOKEN=ChangeMe + # Connector's common parameters + - CONNECTOR_ID=ChangeMe + - "CONNECTOR_NAME=Google DTM" + - CONNECTOR_SCOPE=google-dtm + - CONNECTOR_LOG_LEVEL=error + - CONNECTOR_DURATION_PERIOD=PT1H + # Connector's custom execution parameters + - GOOGLE_DTM_API_KEY=ChangeMe + - GOOGLE_DTM_TLP=amber+strict + - GOOGLE_DTM_IMPORT_START_DATE=P10D + - GOOGLE_DTM_ALERT_SEVERITY= + - GOOGLE_DTM_ALERT_TYPE= + restart: always \ No newline at end of file diff --git a/external-import/google-dtm/src/__init__.py b/external-import/google-dtm/src/__init__.py new file mode 100644 index 00000000000..7076a8183f0 --- /dev/null +++ b/external-import/google-dtm/src/__init__.py @@ -0,0 +1,3 @@ +from src.google_dtm_connector import ConnectorSettings + +__all__ = ["ConnectorSettings"] diff --git a/external-import/google-dtm/src/__main__.py b/external-import/google-dtm/src/__main__.py new file mode 100644 index 00000000000..f3d36b53a6c --- /dev/null +++ b/external-import/google-dtm/src/__main__.py @@ -0,0 +1,24 @@ +import traceback + +from pycti import OpenCTIConnectorHelper +from src.google_dtm_connector import ConnectorSettings, GoogleDTMConnector + +if __name__ == "__main__": + """ + Entry point of the script + + - traceback.print_exc(): This function prints the traceback of the exception to the standard error (stderr). + The traceback includes information about the point in the program where the exception occurred, + which is very useful for debugging purposes. + - exit(1): effective way to terminate a Python program when an error is encountered. + It signals to the operating system and any calling processes that the program did not complete successfully. + """ + try: + settings = ConnectorSettings() + helper = OpenCTIConnectorHelper(config=settings.to_helper_config()) + + connector = GoogleDTMConnector(config=settings, helper=helper) + connector.run() + except Exception: + traceback.print_exc() + exit(1) diff --git a/external-import/google-dtm/src/google_dtm_connector/__init__.py b/external-import/google-dtm/src/google_dtm_connector/__init__.py new file mode 100644 index 00000000000..b6d1d4f7fba --- /dev/null +++ b/external-import/google-dtm/src/google_dtm_connector/__init__.py @@ -0,0 +1,4 @@ +from .connector import GoogleDTMConnector +from .settings import ConnectorSettings + +__all__ = ["ConnectorSettings", "GoogleDTMConnector"] diff --git a/external-import/google-dtm/src/google_dtm_connector/client_api.py b/external-import/google-dtm/src/google_dtm_connector/client_api.py new file mode 100644 index 00000000000..4fa176055d6 --- /dev/null +++ b/external-import/google-dtm/src/google_dtm_connector/client_api.py @@ -0,0 +1,109 @@ +from typing import Any + +import requests + + +class GoogleDTMAPIClient: + + def __init__(self, helper, api_key: str) -> None: + """ + Initialize the client with necessary configurations + """ + self.helper = helper + self.base_url = "https://www.virustotal.com/api/v3/dtm" + headers = {"accept": "application/json", "x-apikey": api_key} + self.session = requests.Session() + self.session.headers.update(headers) + + def _request_data(self, api_url: str, params=None): + """ + Internal method to handle API requests + :return: Response in JSON format + """ + try: + response = self.session.get(api_url, params=params) + # print(response.content) + self.helper.connector_logger.info( + "[API] HTTP Get Request to endpoint", {"url_path": api_url} + ) + + response.raise_for_status() + return response + + except requests.RequestException as err: + error_msg = "[API] Error while fetching data: " + self.helper.connector_logger.error( + error_msg, {"url_path": {api_url}, "error": {str(err)}} + ) + return None + + def get_dtm_alerts(self, since_date, alert_severity, alert_type) -> list[Any]: + """ + :param since_date: + :param alert_severity: + :param alert_type: + :return: + """ + alerts = [] + # size between 0 & 25 max + params = { + "since": since_date, + "sort": "updated_at", + "size": 25, + "severity": alert_severity, + "alert_type": alert_type, + "order": "asc", + } + dtm_alerts_url = self.base_url + "/alerts" + has_more = True + page = 1 + self.helper.connector_logger.info( + "[API] Start fetching DTM alerts", + { + "since": since_date, + "severity": alert_severity, + "alert_type": alert_type, + }, + ) + while has_more: + try: + response = self.session.get(dtm_alerts_url, params=params) + response.raise_for_status() + data = response.json() + page_alerts = data.get("alerts", []) + if page_alerts: + alerts.extend(page_alerts) + + self.helper.connector_logger.info( + "[API] DTM alerts page fetched", + { + "page": page, + "fetched_count": len(page_alerts), + "total_count": len(alerts), + }, + ) + + next_url = response.links.get("next", {}).get("url") + if next_url: + self.helper.connector_logger.info( + "[API] Continue DTM alerts pagination", + {"page": page + 1}, + ) + dtm_alerts_url = next_url + params = {} + page += 1 + else: + has_more = False + except Exception as err: + ex = Exception( + "An exception occurred while fetching alerts, error: {}".format( + str(err) + ) + ) + raise ex + + self.helper.connector_logger.info( + "[API] Finished fetching DTM alerts", + {"total_count": len(alerts), "pages": page}, + ) + return alerts diff --git a/external-import/google-dtm/src/google_dtm_connector/connector.py b/external-import/google-dtm/src/google_dtm_connector/connector.py new file mode 100644 index 00000000000..85443b0449d --- /dev/null +++ b/external-import/google-dtm/src/google_dtm_connector/connector.py @@ -0,0 +1,222 @@ +import sys +from datetime import datetime, timezone +from typing import TYPE_CHECKING, Any + +from src.google_dtm_connector.client_api import GoogleDTMAPIClient +from src.google_dtm_connector.converter_to_stix import ConverterToStix + +if TYPE_CHECKING: + from pycti import OpenCTIConnectorHelper + from src.google_dtm_connector.settings import ConnectorSettings + + +class GoogleDTMConnector: + """ + Specifications of the external import connector + + This class encapsulates the main actions, expected to be run by any external import connector. + Note that the attributes defined below will be complemented per each connector type. + This type of connector aim to fetch external data to create STIX bundle and send it in a RabbitMQ queue. + The STIX bundle in the queue will be processed by the workers. + This type of connector uses the basic methods of the helper. + + --- + + Attributes + - `config (ConfigConnector())`: + Initialize the connector with necessary configuration environment variables + + - `helper (OpenCTIConnectorHelper(config))`: + This is the helper to use. + ALL connectors have to instantiate the connector helper with configurations. + Doing this will do a lot of operations behind the scene. + + - `converter_to_stix (ConnectorConverter(helper))`: + Provide methods for converting various types of input data into STIX 2.1 objects. + + --- + + Best practices + - `self.helper.api.work.initiate_work(...)` is used to initiate a new work + - `self.helper.schedule_iso()` is used to encapsulate the main process in a scheduler + - `self.helper.connector_logger.[info/debug/warning/error]` is used when logging a message + - `self.helper.stix2_create_bundle(stix_objects)` is used when creating a bundle + - `self.helper.send_stix2_bundle(stix_objects_bundle)` is used to send the bundle to RabbitMQ + - `self.helper.set_state()` is used to set state + + """ + + def __init__( + self, config: "ConnectorSettings", helper: "OpenCTIConnectorHelper" + ) -> None: + """ + Initialize the Connector with necessary configurations + """ + self.config = config + self.helper = helper + + # Load configuration file and connection helper + self.client = GoogleDTMAPIClient( + helper=self.helper, + api_key=self.config.google_dtm.api_key.get_secret_value(), + ) + self.converter_to_stix = ConverterToStix( + self.helper, tlp=self.config.google_dtm.tlp + ) + + def _collect_intelligence(self, since_date) -> tuple[list[Any], Any | None]: + """ + Collect intelligence from the source and convert into STIX object + :return: List of STIX objects + """ + stix_objects = [] + + dtm_alerts = self.client.get_dtm_alerts( + since_date=since_date, + alert_severity=self.config.google_dtm.alert_severity, + alert_type=self.config.google_dtm.alert_type, + ) + + self.helper.connector_logger.info( + f"Going to convert and ingest {len(dtm_alerts)} alerts" + ) + + # Convert into STIX2 object and add it on a list + most_recent_alert_date = None + for alert in dtm_alerts: + most_recent_alert_date = alert.get("updated_at") + entity_to_stix = self.converter_to_stix.create_incident(alert) + stix_objects.extend(entity_to_stix) + + # Ensure consistent bundle by adding the author and TLP marking + if stix_objects: + stix_objects.append(self.converter_to_stix.author) + stix_objects.append(self.converter_to_stix.tlp_marking) + + return stix_objects, most_recent_alert_date + + def process_message(self) -> None: + """ + Connector main process to collect intelligence + :return: None + """ + self.helper.connector_logger.info( + "[CONNECTOR] Starting connector...", + {"connector_name": self.helper.connect_name}, + ) + + work_id = None + error_flag = False + + try: + # Get the current state + now = datetime.now(tz=timezone.utc) + now_utc_str = now.strftime("%Y-%m-%dT%H:%M:%SZ") + current_timestamp = int(datetime.timestamp(now)) + current_state = self.helper.get_state() + + if current_state is not None and "last_alert_date" in current_state: + last_alert_date = current_state["last_alert_date"] + + self.helper.connector_logger.info( + "[CONNECTOR] Connector last alert ingested", + {"last_alert_date": last_alert_date}, + ) + else: + self.helper.connector_logger.info( + "[CONNECTOR] Connector has never run..." + ) + first_fetch_delta = self.config.google_dtm.import_start_date + first_fetch_time = datetime.now(timezone.utc) - first_fetch_delta + last_alert_date = first_fetch_time.strftime("%Y-%m-%dT%H:%M:%SZ") + + self.helper.connector_logger.info( + f"Going to fetch alerts since: {last_alert_date}" + ) + + self.helper.connector_logger.info( + "[CONNECTOR] Running connector...", + {"connector_name": self.helper.connect_name}, + ) + + # Performing the collection of intelligence + stix_objects, most_recent_alert = self._collect_intelligence( + since_date=last_alert_date + ) + + if len(stix_objects): + # Initiate a new work + friendly_name = f"Google DTM Connector run @ {now_utc_str}" + work_id = self.helper.api.work.initiate_work( + self.helper.connect_id, friendly_name + ) + + stix_objects_bundle = self.helper.stix2_create_bundle(stix_objects) + bundles_sent = self.helper.send_stix2_bundle( + stix_objects_bundle, + work_id=work_id, + cleanup_inconsistent_bundle=True, + ) + + self.helper.connector_logger.info( + "Sending STIX objects to OpenCTI...", + {"bundles_sent": {str(len(bundles_sent))}}, + ) + + message = ( + f"{self.helper.connect_name} connector successfully run, storing last_run as " + + str(now_utc_str) + ) + + self.helper.api.work.to_processed(work_id, message) + self.helper.connector_logger.info(message) + + # Store the current timestamp as a last run of the connector + self.helper.connector_logger.debug( + "Getting current state and update it with last run of the connector", + {"current_timestamp": current_timestamp}, + ) + current_state = self.helper.get_state() + if current_state: + current_state["last_run"] = now_utc_str + else: + current_state = {"last_run": now_utc_str} + if most_recent_alert: + current_state["last_alert_date"] = most_recent_alert + + self.helper.set_state(current_state) + + except (KeyboardInterrupt, SystemExit): + error_flag = True + message = "Connector stopped by user or system." + self.helper.connector_logger.info( + f"[CONNECTOR] {message}", {"connector_name": self.helper.connect_name} + ) + sys.exit(0) + except Exception as err: + error_flag = True + message = ( + "An unexpected error occurred, see connector's logs for more details." + ) + self.helper.connector_logger.error(f"[CONNECTOR] {message}", {"error": err}) + finally: + # Ensure work is processed even if an exception occurred + if work_id and error_flag: + self.helper.api.work.to_processed(work_id, message, in_error=error_flag) + + def run(self) -> None: + """ + Run the main process encapsulated in a scheduler + It allows you to schedule the process to run at a certain intervals + This specific scheduler from the pycti connector helper will also check the queue size of a connector + If `CONNECTOR_QUEUE_THRESHOLD` is set, if the connector's queue size exceeds the queue threshold, + the connector's main process will not run until the queue is ingested and reduced sufficiently, + allowing it to restart during the next scheduler check. (default is 500MB) + It requires the `duration_period` connector variable in ISO-8601 standard format + Example: `CONNECTOR_DURATION_PERIOD=PT5M` => Will run the process every 5 minutes + :return: None + """ + self.helper.schedule_iso( + message_callback=self.process_message, + duration_period=self.config.connector.duration_period, # type: ignore[arg-type] + ) diff --git a/external-import/google-dtm/src/google_dtm_connector/converter_to_stix.py b/external-import/google-dtm/src/google_dtm_connector/converter_to_stix.py new file mode 100644 index 00000000000..3798dc34de0 --- /dev/null +++ b/external-import/google-dtm/src/google_dtm_connector/converter_to_stix.py @@ -0,0 +1,568 @@ +import base64 + +import stix2 +from pycti import ( + Channel, + CustomObjectChannel, + Identity, + Incident, + MarkingDefinition, + StixCoreRelationship, +) + + +class ConverterToStix: + """ + Provides methods for converting various types of input data into STIX 2.1 objects. + + REQUIREMENTS: + - generate_id() for each entity from OpenCTI pycti library except observables to create + """ + + def __init__(self, helper, tlp): + self.helper = helper + self.author = self.create_author() + self.tlp_marking = self._create_tlp_marking(level=tlp.lower()) + + @staticmethod + def create_author() -> stix2.Identity: + """ + Create Author + :return: Author in Stix2 object + """ + author = stix2.Identity( + id=Identity.generate_id( + name="Google Threat Intelligence", identity_class="organization" + ), + name="Google Threat Intelligence", + identity_class="organization", + ) + return author + + @staticmethod + def _create_tlp_marking(level): + mapping = { + "white": stix2.TLP_WHITE, + "clear": stix2.TLP_WHITE, + "green": stix2.TLP_GREEN, + "amber": stix2.TLP_AMBER, + "amber+strict": stix2.MarkingDefinition( + id=MarkingDefinition.generate_id("TLP", "TLP:AMBER+STRICT"), + definition_type="statement", + definition={"statement": "custom"}, + custom_properties={ + "x_opencti_definition_type": "TLP", + "x_opencti_definition": "TLP:AMBER+STRICT", + }, + ), + "red": stix2.TLP_RED, + } + return mapping[level] + + def create_channel(self, dtm_channel: dict) -> CustomObjectChannel: + """ + :param dtm_channel: + :return: + """ + channel_type = dtm_channel.get("messenger", {}).get("name") + channel_name = dtm_channel.get("name") + channel_description = dtm_channel.get("channel_info").get("description") + channel_url = dtm_channel.get("channel_url") + + formatted_channel_name = "[" + channel_type + "] - " + channel_name + external_refs = [] + if channel_url: + external_ref = stix2.ExternalReference( + source_name=channel_type + " - " + channel_name, url=channel_url + ) + external_refs.append(external_ref) + channel = CustomObjectChannel( + id=Channel.generate_id(name=formatted_channel_name), + name=formatted_channel_name, + description=channel_description, + channel_types=[channel_type], + external_references=external_refs, + object_marking_refs=[self.tlp_marking.get("id")], + ) + return channel + + @staticmethod + def generate_incident_description(dtm_alert: dict) -> str: + """ + :param dtm_alert: + :return: + """ + markdown_description = f""" +**Alert Id**: {dtm_alert.get("id")}\n + +**Alert Summary**: {dtm_alert.get("alert_summary")}\n + +**Summary from Gemini**: {dtm_alert.get("ai_doc_summary")} + """ + return markdown_description + + @staticmethod + def get_common_content_metadata_part(dtm_alert: dict) -> str: + """ + :param dtm_alert: + :return: + """ + markdown_content = f""" +### Metadata +- **Alert Id**: {dtm_alert.get("id")} +- **Monitor Id**: {dtm_alert.get("monitor_id")} +- **Created**: {dtm_alert.get("created_at")} +- **Type**: {dtm_alert.get("alert_type")} +- **Severity**: {dtm_alert.get("severity")} + +### Summary from Gemini +{dtm_alert.get("ai_doc_summary", "N/A")} +""" + return markdown_content + + def convert_document_analysis_alert_to_markdown_content( + self, dtm_alert: dict + ) -> str: + """ + :param dtm_alert: + :return: + """ + metadata_part = self.get_common_content_metadata_part(dtm_alert) + markdown_content = f""" +{metadata_part} +### Source Information +- **Author**: {dtm_alert.get("doc").get("source_url")} +- **Collected**: {dtm_alert.get("doc").get("ingested")} +- **Published**: {dtm_alert.get("doc").get("timestamp")} +- **Source File**: {dtm_alert.get("doc").get("filename")} +- **MD5**: {dtm_alert.get("doc").get("file_hashes").get("md5")} +- **SHA1**: {dtm_alert.get("doc").get("file_hashes").get("sha1")} +- **SHA256**: {dtm_alert.get("doc").get("file_hashes").get("sha256")} +- **Source**: {dtm_alert.get("doc").get("source")} +- **Source URL**: {dtm_alert.get("doc").get("source_url")} + +### Content +``` +{dtm_alert.get("doc").get("raw_text")} +``` +""" + return markdown_content + + def convert_paste_alert_to_markdown_content(self, dtm_alert: dict) -> str: + """ + :param dtm_alert: + :return: + """ + metadata_part = self.get_common_content_metadata_part(dtm_alert) + markdown_content = f""" +{metadata_part} +### Source Information +- **Created**: {dtm_alert.get("doc").get("timestamp")} +- **Paste Id**: {dtm_alert.get("doc").get("paste_id")} +- **URL**: {dtm_alert.get("doc").get("source_location", {}).get("url", "")} +- **Author**: {dtm_alert.get("doc").get("author", {}).get("identity", {}).get("name", "")} +- **Title**: {dtm_alert.get("doc").get("title", "")} + +### Content +``` +{dtm_alert.get("doc").get("body")} +``` +""" + return markdown_content + + def convert_account_discovery_alert_to_markdown_content( + self, dtm_alert: dict + ) -> str: + """ + :param dtm_alert: + :return: + """ + metadata_part = self.get_common_content_metadata_part(dtm_alert) + dtm_alert_doc = dtm_alert.get("doc", {}) + markdown_content = f""" +{metadata_part} +### Source Information +- **Source URL**: {dtm_alert_doc.get("source_url")} +- **Collected**: {dtm_alert_doc.get("ingested")} +- **Published**: {dtm_alert_doc.get("timestamp")} +- **Source File**: {dtm_alert_doc.get("source_file").get("filename")} +- **MD5**: {dtm_alert_doc.get("source_file").get("hashes").get("md5")} +- **SHA1**: {dtm_alert_doc.get("source_file").get("hashes").get("sha1")} +- **SHA256**: {dtm_alert_doc.get("source_file").get("hashes").get("sha256")} +### Content +- **Service URL**: {dtm_alert_doc.get("service_account").get("service").get("inet_location").get("domain")} +- **Service Domain**: {dtm_alert_doc.get("service_account").get("service").get("inet_location").get("url")} +- **Email Domain**: {dtm_alert_doc.get("service_account").get("email_domain")} +- **Login**: {dtm_alert_doc.get("service_account").get("login")} +- **Password**: {dtm_alert_doc.get("service_account").get("password").get("plain_text")} +""" + return markdown_content + + def convert_message_type_alert_to_markdown_content(self, dtm_alert: dict) -> str: + """ + :param dtm_alert: + :return: + """ + metadata_part = self.get_common_content_metadata_part(dtm_alert) + dtm_alert_doc = dtm_alert.get("doc", {}) + markdown_content = f""" +{metadata_part} +### Source Information +- **Created**: {dtm_alert_doc.get("ingested")} +- **Channel**: {dtm_alert_doc.get("channel").get("name")} +- **Channel URL**: {dtm_alert_doc.get("channel").get("channel_url")} +- **Channel Description**: {dtm_alert_doc.get("channel").get("channel_info").get("description")} +- **Messenger**: {dtm_alert_doc.get("channel").get("messenger").get("name")} +- **Author**: {dtm_alert_doc.get("sender").get("identity").get("name")} +- **Message Id**: {dtm_alert_doc.get("message_id")} + +### Content +``` +{dtm_alert_doc.get("body")} +``` +""" + return markdown_content + + def convert_web_content_alert_to_markdown_content(self, dtm_alert: dict) -> str: + """ + :param dtm_alert: + :return: + """ + metadata_part = self.get_common_content_metadata_part(dtm_alert) + dtm_alert_doc = dtm_alert.get("doc", {}) + markdown_content = f""" +{metadata_part} +### Source Information +- **Created**: {dtm_alert_doc.get("timestamp")} +- **Title**: {dtm_alert_doc.get("title")} +- **URL**: {dtm_alert_doc.get("inet_location", {}).get("url", "")} + +### Content +``` +{dtm_alert_doc.get("text") if "text" in dtm_alert_doc else dtm_alert_doc.get("raw_text")} +``` +""" + return markdown_content + + def convert_domain_discovery_alert_to_markdown_content( + self, dtm_alert: dict + ) -> str: + """ + :param dtm_alert: + :return: + """ + metadata_part = self.get_common_content_metadata_part(dtm_alert) + dtm_alert_doc = dtm_alert.get("doc", {}) + markdown_content = f""" +{metadata_part} +### Source Information +- **Created**: {dtm_alert_doc.get("timestamp")} +- **Domain**: {dtm_alert_doc.get("domain")} +- **Source**: {dtm_alert_doc.get("source")} +""" + return markdown_content + + def convert_shop_list_alert_to_markdown_content(self, dtm_alert: dict) -> str: + """ + :param dtm_alert: + :return: + """ + metadata_part = self.get_common_content_metadata_part(dtm_alert) + dtm_alert_doc = dtm_alert.get("doc", {}) + markdown_content = f""" +{metadata_part} +### Source Information +- **Created**: {dtm_alert_doc.get("ingested")} +- **URL**: {dtm_alert_doc.get("listing_url", {}).get("url")} +- **Shop Name**: {dtm_alert_doc.get("shop", {}).get("name")} +- **Price**: {str(dtm_alert_doc.get("price", "")) + dtm_alert_doc.get("currency", "")} +- **Quantity**: {dtm_alert_doc.get("item_qty", "")} +- **Seller**: {dtm_alert_doc.get("seller", {}).get("identity", {}).get("name")} +- **Listing ID**: {dtm_alert_doc.get("listing_id", "")} +- **Listing URL**: {dtm_alert_doc.get("listing_url", {}).get("url", "")} +- **Item Type**: {dtm_alert_doc.get("item_type")} +""" + return markdown_content + + def convert_alert_to_markdown_content(self, dtm_alert: dict) -> str: + """ + :param dtm_alert: + :return: + """ + metadata_part = self.get_common_content_metadata_part(dtm_alert) + markdown_content = f""" +{metadata_part} +### Post +``` +{dtm_alert.get("doc").get("raw_text")} +``` +""" + return markdown_content + + def create_incident(self, dtm_alert: dict) -> list: + """ + convert a dtm_alert into an OCTI incident with related entities + :param dtm_alert: + :return: + """ + stix_objects = [] + + # incident name + incident_name = dtm_alert.get("title") + + # incident description + incident_description = self.generate_incident_description(dtm_alert) + + # incident date + incident_created = dtm_alert.get("created_at") + incident_updated = dtm_alert.get("updated_at") + + incident_severity = dtm_alert.get("severity") + incident_type = dtm_alert.get("alert_type") + + # generate a content based on alert useful information + doc_type = dtm_alert.get("doc").get("__type") + files = [] + try: + if doc_type == "message": + markdown_content = self.convert_message_type_alert_to_markdown_content( + dtm_alert + ) + elif doc_type == "web_content_publish": + markdown_content = self.convert_web_content_alert_to_markdown_content( + dtm_alert + ) + elif doc_type == "account_discovery": + markdown_content = ( + self.convert_account_discovery_alert_to_markdown_content(dtm_alert) + ) + elif doc_type == "document_analysis": + markdown_content = ( + self.convert_document_analysis_alert_to_markdown_content(dtm_alert) + ) + elif doc_type == "paste": + markdown_content = self.convert_paste_alert_to_markdown_content( + dtm_alert + ) + elif doc_type == "shop_listing": + markdown_content = self.convert_shop_list_alert_to_markdown_content( + dtm_alert + ) + elif doc_type == "domain_discovery": + markdown_content = ( + self.convert_domain_discovery_alert_to_markdown_content(dtm_alert) + ) + else: + markdown_content = self.convert_alert_to_markdown_content(dtm_alert) + + # add the alert formatted content into a file attached to the incident + markdown_content_bytes = markdown_content.encode("utf-8") + base64_bytes = base64.b64encode(markdown_content_bytes) + files.append( + { + "name": "alert.md", + "data": base64_bytes, + "mime_type": "text/markdown", + "no_trigger_import": False, + } + ) + except Exception as ex: + self.helper.connector_logger.error( + f"An error occurred while generating alert content for alert.id: {dtm_alert.get('id')}, exception: {str(ex)}" + ) + + # generate external_reference + stix_external_ref = stix2.ExternalReference( + source_name="Google DTM", + url="https://advantage.mandiant.com/dtm/alerts/" + dtm_alert.get("id"), + ) + + # create the incident + stix_incident = stix2.Incident( + id=Incident.generate_id(name=incident_name, created=incident_created), + name=incident_name, + created=incident_created, + first_seen=incident_created, + last_seen=incident_updated, + description=incident_description, + created_by_ref=self.author, + allow_custom=True, + incident_type=incident_type, + labels=dtm_alert.get("tags", []), + severity=incident_severity, + object_marking_refs=[self.tlp_marking.get("id")], + source="Google DTM", + external_references=[stix_external_ref], + custom_properties={"x_opencti_files": files}, + ) + stix_objects.append(stix_incident) + + if "channel" in dtm_alert.get("doc"): + stix_channel = self.create_channel(dtm_alert.get("doc").get("channel")) + stix_objects.append(stix_channel) + + # create relation between incident and channel + relationship_uses = stix2.Relationship( + id=StixCoreRelationship.generate_id( + "uses", + stix_incident.id, + stix_channel.id, + ), + relationship_type="uses", + created_by_ref=self.author.id, + source_ref=stix_incident.id, + target_ref=stix_channel.id, + object_marking_refs=[self.tlp_marking.get("id")], + allow_custom=True, + ) + stix_objects.append(relationship_uses) + + related_stix_entities = [] + # process 'account_discovery' related entities + if doc_type == "account_discovery": + related_stix_entities = self.generate_account_discovery_related_entities( + dtm_alert + ) + + # process 'domain_discovery' related entities + if doc_type == "domain_discovery": + related_stix_entities = self.generate_domain_discovery_related_entities( + dtm_alert + ) + + # attach alert related entities to incident + if related_stix_entities: + for entity in related_stix_entities: + # create relation between incident and email + relationship_uses = stix2.Relationship( + id=StixCoreRelationship.generate_id( + "related-to", + entity.id, + stix_incident.id, + ), + relationship_type="related-to", + created_by_ref=self.author.id, + source_ref=entity.id, + target_ref=stix_incident.id, + object_marking_refs=[self.tlp_marking.get("id")], + allow_custom=True, + ) + stix_objects.append(entity) + stix_objects.append(relationship_uses) + + return stix_objects + + def generate_account_discovery_related_entities(self, dtm_alert: dict) -> list: + """ + :param dtm_alert: + :return: + """ + stix_related_entities = [] + if "login" in dtm_alert.get("doc", {}).get("service_account", {}): + password = None + if ( + "plain_text" + in dtm_alert.get("doc").get("service_account", {}).get("password", {}) + and dtm_alert.get("doc") + .get("service_account", {}) + .get("password", {}) + .get("plain_text") + != "********" + ): + password = ( + dtm_alert.get("doc") + .get("service_account", {}) + .get("password", {}) + .get("plain_text") + ) + stix_account = stix2.UserAccount( + account_login=dtm_alert.get("doc").get("service_account").get("login"), + credential=password, + object_marking_refs=[self.tlp_marking.get("id")], + custom_properties={ + "created_by_ref": self.author.id, + }, + ) + stix_related_entities.append(stix_account) + if "email" in dtm_alert.get("doc").get("service_account", {}).get( + "profile", {} + ).get("contact", {}): + stix_email = stix2.EmailAddress( + value=dtm_alert.get("doc") + .get("service_account", {}) + .get("profile", {}) + .get("contact", {}) + .get("email"), + object_marking_refs=[self.tlp_marking.get("id")], + custom_properties={ + "created_by_ref": self.author.id, + }, + ) + stix_related_entities.append(stix_email) + if "url" in dtm_alert.get("doc").get("service_account", {}).get( + "service", {} + ).get("inet_location", {}): + stix_url = stix2.URL( + value=dtm_alert.get("doc") + .get("service_account", {}) + .get("service", {}) + .get("inet_location", {}) + .get("url"), + object_marking_refs=[self.tlp_marking.get("id")], + custom_properties={ + "created_by_ref": self.author.id, + }, + ) + stix_related_entities.append(stix_url) + if "domain" in dtm_alert.get("doc").get("service_account", {}).get( + "service", {} + ).get("inet_location", {}): + stix_domain = stix2.DomainName( + value=dtm_alert.get("doc") + .get("service_account", {}) + .get("service", {}) + .get("inet_location", {}) + .get("domain"), + object_marking_refs=[self.tlp_marking.get("id")], + custom_properties={ + "created_by_ref": self.author.id, + }, + ) + stix_related_entities.append(stix_domain) + if "filename" in dtm_alert.get("doc").get("source_file", {}): + source_file = dtm_alert.get("doc", {}).get("source_file", {}) + hashes = source_file.get("hashes", {}) + stix_hashes = {} + if hashes.get("sha256"): + stix_hashes["SHA-256"] = hashes["sha256"] + if hashes.get("sha1"): + stix_hashes["SHA-1"] = hashes["sha1"] + if hashes.get("md5"): + stix_hashes["MD5"] = hashes["md5"] + stix_file = stix2.File( + hashes=stix_hashes, + name=source_file.get("name"), + object_marking_refs=[self.tlp_marking.get("id")], + custom_properties={ + "created_by_ref": self.author.id, + }, + ) + stix_related_entities.append(stix_file) + return stix_related_entities + + def generate_domain_discovery_related_entities(self, dtm_alert: dict) -> list: + """ + :param dtm_alert: + :return: + """ + stix_related_entities = [] + if domain := dtm_alert.get("doc", {}).get("domain"): + stix_account = stix2.DomainName( + value=domain, + object_marking_refs=[self.tlp_marking.get("id")], + custom_properties={ + "created_by_ref": self.author.id, + }, + ) + stix_related_entities.append(stix_account) + return stix_related_entities diff --git a/external-import/google-dtm/src/google_dtm_connector/settings.py b/external-import/google-dtm/src/google_dtm_connector/settings.py new file mode 100644 index 00000000000..e3833dc27f2 --- /dev/null +++ b/external-import/google-dtm/src/google_dtm_connector/settings.py @@ -0,0 +1,100 @@ +from datetime import timedelta +from typing import Literal + +from connectors_sdk import ( + BaseConfigModel, + BaseConnectorSettings, + BaseExternalImportConnectorConfig, + ListFromString, +) +from connectors_sdk.models.enums import TLPLevel +from pydantic import Field, SecretStr, TypeAdapter, field_validator + + +class ExternalImportConnectorConfig(BaseExternalImportConnectorConfig): + """ + Override the `BaseExternalImportConnectorConfig` to add parameters and/or defaults + to the configuration for connectors of type `EXTERNAL_IMPORT`. + """ + + id: str = Field( + description="The unique identifier of the connector.", + default="92483abc-27f1-46b4-afcb-d9a0a405754a", + ) + name: str = Field( + description="The name of the connector.", + default="Google DTM", + ) + scope: ListFromString = Field( + description="The scope of the connector, e.g. 'google-dtm'.", + default=["google-dtm"], + ) + duration_period: timedelta = Field( + description="The period of time to await between two runs of the connector in ISO 8601 format e.g., 'PT1H' for 1 hour.", + default=timedelta(hours=1), + ) + + +class GoogleDTMConfig(BaseConfigModel): + """ + Define parameters and/or defaults for the configuration specific to the `GoogleDTMConnector`. + """ + + api_key: SecretStr = Field( + description="Google DTM API Key", + ) + tlp: TLPLevel = Field( + default=TLPLevel.AMBER_STRICT, + description="Default Traffic Light Protocol (TLP) marking for imported data.", + ) + import_start_date: timedelta = Field( + default=timedelta(days=10), + description="ISO 8601 duration string specifying how far back to import alerts (e.g., P1D for 1 day, P7D for 7 days)", + ) + alert_type: list[ + Literal[ + "Compromised Credentials", + "Document", + "Domain Discovery", + "Email", + "Forum Post", + "Message", + "Paste", + "Shop Listing", + "Tweet", + "Web Content", + ] + ] = Field( + default=[], + description="Comma-separated list of alert types to ingest. Leave blank to retrieve alerts of all types.", + ) + alert_severity: list[ + Literal[ + "high", + "medium", + "low", + ] + ] = Field( + default=[], + description="Comma-separated list of alert severities to ingest. Leave blank to retrieve alerts of all severities.", + ) + + @field_validator("alert_type", "alert_severity", mode="before") + @classmethod + def split_comma_separated_values(cls, value): + """Validate and convert comma-separated string values into a list.""" + return TypeAdapter(ListFromString).validate_python(value) + + +class ConnectorSettings(BaseConnectorSettings): + """ + Define the settings for the `GoogleDTMConnector`, including both the common connector configuration + parameters and the specific ones for this connector. + """ + + connector: ExternalImportConnectorConfig = Field( + default_factory=ExternalImportConnectorConfig, + ) + google_dtm: GoogleDTMConfig = Field( + default_factory=GoogleDTMConfig, + ) diff --git a/external-import/google-dtm/src/requirements.txt b/external-import/google-dtm/src/requirements.txt new file mode 100644 index 00000000000..f857015c238 --- /dev/null +++ b/external-import/google-dtm/src/requirements.txt @@ -0,0 +1,5 @@ +pycti==7.260515.0 +pyyaml~=6.0.2 +requests~=2.33.0 +validators==0.34.0 +connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk \ No newline at end of file diff --git a/external-import/google-dtm/tests/conftest.py b/external-import/google-dtm/tests/conftest.py new file mode 100644 index 00000000000..5c33209dd59 --- /dev/null +++ b/external-import/google-dtm/tests/conftest.py @@ -0,0 +1,4 @@ +import os +import sys + +sys.path.append(os.path.join(os.path.dirname(__file__), "..")) diff --git a/external-import/google-dtm/tests/test-requirements.txt b/external-import/google-dtm/tests/test-requirements.txt new file mode 100644 index 00000000000..1a5455858c0 --- /dev/null +++ b/external-import/google-dtm/tests/test-requirements.txt @@ -0,0 +1,3 @@ +# Main dependencies need to be installed +-r ../src/requirements.txt +pytest==9.0.3 diff --git a/external-import/google-dtm/tests/test_main.py b/external-import/google-dtm/tests/test_main.py new file mode 100644 index 00000000000..3bdcc7f4b19 --- /dev/null +++ b/external-import/google-dtm/tests/test_main.py @@ -0,0 +1,102 @@ +from typing import Any +from unittest.mock import MagicMock + +import pytest +from pycti import OpenCTIConnectorHelper +from src.google_dtm_connector.connector import GoogleDTMConnector +from src.google_dtm_connector.settings import ConnectorSettings + + +@pytest.fixture +def mock_opencti_connector_helper(monkeypatch): + """Mock all heavy dependencies of OpenCTIConnectorHelper, typically API calls to OpenCTI.""" + + module_import_path = "pycti.connector.opencti_connector_helper" + monkeypatch.setattr(f"{module_import_path}.killProgramHook", MagicMock()) + monkeypatch.setattr(f"{module_import_path}.sched.scheduler", MagicMock()) + monkeypatch.setattr(f"{module_import_path}.ConnectorInfo", MagicMock()) + monkeypatch.setattr(f"{module_import_path}.OpenCTIApiClient", MagicMock()) + monkeypatch.setattr(f"{module_import_path}.OpenCTIConnector", MagicMock()) + monkeypatch.setattr(f"{module_import_path}.OpenCTIMetricHandler", MagicMock()) + monkeypatch.setattr(f"{module_import_path}.PingAlive", MagicMock()) + + +class StubConnectorSettings(ConnectorSettings): + """ + Subclass of `ConnectorSettings` (implementation of `BaseConnectorSettings`) for testing purpose. + It overrides `BaseConnectorSettings._load_config_dict` to return a fake but valid config dict. + """ + + @classmethod + def _load_config_dict(cls, _, handler) -> dict[str, Any]: + return handler( + { + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + "connector": { + "id": "connector-id", + "name": "Test Connector", + "scope": "test, connector", + "log_level": "error", + "duration_period": "PT5M", + }, + "google_dtm": { + "api_key": "test-api-key", + "tlp": "clear", + "import_start_date": "P10D", + "alert_type": "Email,Message", + "alert_severity": "high,medium", + }, + } + ) + + +def test_connector_settings_is_instantiated(): + """ + Test that the implementation of `BaseConnectorSettings` (from `connectors-sdk`) can be instantiated successfully: + - the implemented class MUST have a method `to_helper_config` (inherited from `BaseConnectorSettings`) + - the method `to_helper_config` MUST return a dict (as in base class) + """ + settings = StubConnectorSettings() + + assert isinstance(settings, ConnectorSettings) + assert isinstance(settings.to_helper_config(), dict) + + +def test_opencti_connector_helper_is_instantiated(mock_opencti_connector_helper): + """ + Test that `OpenCTIConnectorHelper` (from `pycti`) can be instantiated successfully: + - the value of `settings.to_helper_config` MUST be the expected dict for `OpenCTIConnectorHelper` + - the helper MUST be able to get its instance's attributes from the config dict + + :param mock_opencti_connector_helper: `OpenCTIConnectorHelper` is mocked during this test to avoid any external calls to OpenCTI API + """ + settings = StubConnectorSettings() + helper = OpenCTIConnectorHelper(config=settings.to_helper_config()) + + assert helper.opencti_url == "http://localhost:8080/" + assert helper.opencti_token == "test-token" + assert helper.connect_id == "connector-id" + assert helper.connect_name == "Test Connector" + assert helper.connect_scope == "test,connector" + assert helper.log_level == "ERROR" + assert helper.connect_duration_period == "PT5M" + + +def test_connector_is_instantiated(mock_opencti_connector_helper): + """ + Test that the connector's main class can be instantiated successfully: + - the connector's main class MUST be able to access env/config vars through `self.config` + - the connector's main class MUST be able to access `pycti` API through `self.helper` + + :param mock_opencti_connector_helper: `OpenCTIConnectorHelper` is mocked during this test to avoid any external calls to OpenCTI API + """ + settings = StubConnectorSettings() + helper = OpenCTIConnectorHelper(config=settings.to_helper_config()) + + connector = GoogleDTMConnector(config=settings, helper=helper) + + assert connector.config == settings + assert connector.helper == helper diff --git a/external-import/google-dtm/tests/tests_connector/test_settings.py b/external-import/google-dtm/tests/tests_connector/test_settings.py new file mode 100644 index 00000000000..f27a72e1870 --- /dev/null +++ b/external-import/google-dtm/tests/tests_connector/test_settings.py @@ -0,0 +1,153 @@ +from typing import Any + +import pytest +from connectors_sdk import BaseConfigModel, ConfigValidationError +from src.google_dtm_connector import ConnectorSettings + + +@pytest.mark.parametrize( + "settings_dict", + [ + pytest.param( + { + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + "connector": { + "id": "connector-id", + "name": "Test Connector", + "scope": "test, connector", + "log_level": "error", + "duration_period": "PT5M", + }, + "google_dtm": { + "api_key": "test-api-key", + "tlp": "clear", + "import_start_date": "P10D", + "alert_type": "Email,Message", + "alert_severity": "high,medium", + }, + }, + id="full_valid_settings_dict", + ), + pytest.param( + { + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + "connector": {}, + "google_dtm": { + "api_key": "test-api-key", + }, + }, + id="minimal_valid_settings_dict", + ), + ], +) +def test_settings_should_accept_valid_input(settings_dict): + """ + Test that `ConnectorSettings` (implementation of `BaseConnectorSettings` from `connectors-sdk`) accepts valid input. + For the test purpose, `BaseConnectorSettings._load_config_dict` is overridden to return + a fake but valid dict (instead of the env/config vars parsed from `config.yml`, `.env` or env vars). + + :param settings_dict: The dict to use as `ConnectorSettings` input + """ + + class FakeConnectorSettings(ConnectorSettings): + """ + Subclass of `ConnectorSettings` (implementation of `BaseConnectorSettings`) for testing purpose. + It overrides `BaseConnectorSettings._load_config_dict` to return a fake but valid config dict. + """ + + @classmethod + def _load_config_dict(cls, _, handler) -> dict[str, Any]: + return handler(settings_dict) + + settings = FakeConnectorSettings() + + assert isinstance(settings.opencti, BaseConfigModel) is True + assert isinstance(settings.connector, BaseConfigModel) is True + assert isinstance(settings.google_dtm, BaseConfigModel) is True + + +@pytest.mark.parametrize( + "settings_dict, field_name", + [ + pytest.param( + {}, + "settings", + id="empty_settings_dict", + ), + pytest.param( + { + "opencti": { + "url": "http://localhost:PORT", + "token": "test-token", + }, + "connector": { + "id": "connector-id", + "name": "Test Connector", + "scope": "test, connector", + "log_level": "error", + "duration_period": "PT5M", + }, + "google_dtm": { + "api_key": "test-api-key", + "tlp": "clear", + "import_start_date": "P10D", + "alert_type": "Email,Message", + "alert_severity": "high,medium", + }, + }, + "opencti.url", + id="invalid_opencti_url", + ), + pytest.param( + { + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + "connector": { + "id": "connector-id", + "name": "Test Connector", + "scope": "test, connector", + "log_level": "error", + "duration_period": "PT5M", + }, + "google_dtm": { + "tlp": "clear", + "import_start_date": "P10D", + "alert_type": "Email,Message", + "alert_severity": "high,medium", + }, + }, + "google_dtm.api_key", + id="missing_google_dtm_api_key", + ), + ], +) +def test_settings_should_raise_when_invalid_input(settings_dict, field_name): + """ + Test that `ConnectorSettings` (implementation of `BaseConnectorSettings` from `connectors-sdk`) raises on invalid input. + For the test purpose, `BaseConnectorSettings._load_config_dict` is overridden to return + a fake and invalid dict (instead of the env/config vars parsed from `config.yml`, `.env` or env vars). + + :param settings_dict: The dict to use as `ConnectorSettings` input + """ + + class FakeConnectorSettings(ConnectorSettings): + """ + Subclass of `ConnectorSettings` (implementation of `BaseConnectorSettings`) for testing purpose. + It overrides `BaseConnectorSettings._load_config_dict` to return a fake and invalid config dict. + """ + + @classmethod + def _load_config_dict(cls, _, handler) -> dict[str, Any]: + return handler(settings_dict) + + with pytest.raises(ConfigValidationError) as err: + FakeConnectorSettings() + assert str("Error validating configuration") in str(err) diff --git a/external-import/google-ti-feeds/CONTRIBUTING.md b/external-import/google-ti-feeds/CONTRIBUTING.md index 9480ccc0145..14f51b07a57 100644 --- a/external-import/google-ti-feeds/CONTRIBUTING.md +++ b/external-import/google-ti-feeds/CONTRIBUTING.md @@ -292,7 +292,7 @@ CONVERTER_CONFIGS["{entity_type}"] = GTI_{ENTITY_TYPE}_CONVERTER_CONFIG ```python # File: src/custom/client_api.py -# Add to fetch_subentities_ids method +# Add to fetch_subentities method subentity_types = [ "malware_families", "threat_actors", diff --git a/external-import/google-ti-feeds/connector/src/custom/client_api/client_api.py b/external-import/google-ti-feeds/connector/src/custom/client_api/client_api.py index fb5a7c7db73..e44a379c9f1 100644 --- a/external-import/google-ti-feeds/connector/src/custom/client_api/client_api.py +++ b/external-import/google-ti-feeds/connector/src/custom/client_api/client_api.py @@ -175,10 +175,10 @@ async def fetch_campaigns( async for campaign_data in self.campaign_client.fetch_campaigns(initial_state): yield campaign_data - async def fetch_subentities_ids( + async def fetch_subentities( self, entity_name: str, entity_id: str, subentity_types: list[str] - ) -> dict[str, list[str]]: - """Fetch subentities IDs from the API. + ) -> dict[str, list[Any]]: + """Fetch related subentities with full payloads from the API. Args: entity_name (str): The name of the entity. @@ -186,27 +186,13 @@ async def fetch_subentities_ids( subentity_types (list[str]): The type of subentities to fetch. Returns: - dict[str, list[str]]: The fetched subentities IDs. + dict[str, list[Any]]: The fetched related subentities. """ - return await self.shared_client.fetch_subentities_ids( + return await self.shared_client.fetch_subentities( entity_name, entity_id, subentity_types ) - async def fetch_subentity_details( - self, subentity_ids: dict[str, list[str]] - ) -> dict[str, list[Any]]: - """Fetch subentity details in parallel for multiple IDs. - - Args: - subentity_ids: dictionary mapping entity types to lists of IDs - - Returns: - dictionary mapping entity types to lists of fetched entities - - """ - return await self.shared_client.fetch_subentity_details(subentity_ids) - def _create_fetcher_factory(self) -> GenericFetcherFactory: """Create and configure the fetcher factory with all configurations.""" base_headers = { diff --git a/external-import/google-ti-feeds/connector/src/custom/client_api/client_api_base.py b/external-import/google-ti-feeds/connector/src/custom/client_api/client_api_base.py index 301e34bc1ff..368b767cc51 100644 --- a/external-import/google-ti-feeds/connector/src/custom/client_api/client_api_base.py +++ b/external-import/google-ti-feeds/connector/src/custom/client_api/client_api_base.py @@ -386,16 +386,23 @@ async def _paginate_with_cursor( break except Exception as e: + # Use the child class's LOG_PREFIX if available, otherwise use base LOG_PREFIX + prefix = getattr(self.__class__, "LOG_PREFIX", LOG_PREFIX) + self.logger.error( "Failed to fetch page", { - "prefix": LOG_PREFIX, + "prefix": prefix, "entity_description": entity_description, "error": str(e), }, ) + raise finally: + # Use the child class's LOG_PREFIX if available, otherwise use base LOG_PREFIX + prefix = getattr(self.__class__, "LOG_PREFIX", LOG_PREFIX) + self.logger.debug( "Finished fetching", - {"prefix": LOG_PREFIX, "entity_description": entity_description}, + {"prefix": prefix, "entity_description": entity_description}, ) diff --git a/external-import/google-ti-feeds/connector/src/custom/client_api/client_api_shared.py b/external-import/google-ti-feeds/connector/src/custom/client_api/client_api_shared.py index 9c3ec5991fd..88d9e823da9 100644 --- a/external-import/google-ti-feeds/connector/src/custom/client_api/client_api_shared.py +++ b/external-import/google-ti-feeds/connector/src/custom/client_api/client_api_shared.py @@ -4,7 +4,6 @@ from typing import Any from connector.src.custom.client_api.client_api_base import BaseClientAPI -from connector.src.utils.api_engine.exceptions.api_http_error import ApiHttpError LOG_PREFIX = "[FetcherShared]" @@ -22,10 +21,10 @@ def __init__( """Initialize Shared Client API.""" super().__init__(config, logger, api_client, fetcher_factory) - async def fetch_subentities_ids( + async def fetch_subentities( self, entity_name: str, entity_id: str, subentity_types: list[str] - ) -> dict[str, list[str]]: - """Fetch subentities IDs from the API. + ) -> dict[str, list[Any]]: + """Fetch related subentities with full payloads from the API. Args: entity_name (str): The name of the entity. @@ -33,17 +32,18 @@ async def fetch_subentities_ids( subentity_types (list[str]): The type of subentities to fetch. Returns: - dict[str, list[str]]: The fetched subentities IDs. + dict[str, list[Any]]: Related subentities grouped by type. """ - subentities_ids = {} + subentities: dict[str, list[Any]] = {} + total_collection_calls = 0 relationships_fetcher = self.fetcher_factory.create_fetcher_by_name( "relationships", base_url=self.config.api_url.unicode_string() ) try: for subentity_type in subentity_types: - all_ids = [] + all_entities: list[Any] = [] params = { entity_name: entity_id, @@ -55,24 +55,17 @@ async def fetch_subentities_ids( async for page_data in self._paginate_with_cursor( relationships_fetcher, params, f"{subentity_type} relationships" ): + total_collection_calls += 1 if isinstance(page_data, list): - all_ids.extend( - [ - item["id"] - for item in page_data - if isinstance(item, dict) and item.get("id") - ] - ) + all_entities.extend(page_data) elif isinstance(page_data, dict) and "data" in page_data: data = page_data["data"] if isinstance(data, list): - all_ids.extend( - [ - item["id"] - for item in data - if isinstance(item, dict) and item.get("id") - ] - ) + all_entities.extend(data) + elif isinstance(data, dict): + all_entities.append(data) + elif isinstance(page_data, dict): + all_entities.append(page_data) except Exception as e: self.logger.debug( @@ -84,21 +77,24 @@ async def fetch_subentities_ids( }, ) - if all_ids: + if all_entities: + typed_entities = self._deserialize_subentities( + subentity_type, all_entities + ) self.logger.info( - "Retrieved relationship IDs", + "Retrieved related entities", { "prefix": LOG_PREFIX, - "count": len(all_ids), + "count": len(typed_entities), "subentity_type": subentity_type, "entity_name": entity_name, "entity_id": entity_id, }, ) - subentities_ids[subentity_type] = all_ids + subentities[subentity_type] = typed_entities else: self.logger.debug( - "No relationship IDs found", + "No related entities found", { "prefix": LOG_PREFIX, "subentity_type": subentity_type, @@ -107,7 +103,6 @@ async def fetch_subentities_ids( }, ) - return subentities_ids except Exception as e: self.logger.error( "Failed to gather relationships", @@ -119,7 +114,7 @@ async def fetch_subentities_ids( }, ) return {entity_type: [] for entity_type in subentity_types} - finally: + else: self.logger.info( "Finished gathering relationships", { @@ -128,85 +123,43 @@ async def fetch_subentities_ids( "entity_id": entity_id, }, ) + return subentities - async def fetch_subentity_details( - self, subentity_ids: dict[str, list[str]] - ) -> dict[str, list[Any]]: - """Fetch subentity details in parallel for multiple IDs. - - Args: - subentity_ids: dictionary mapping entity types to lists of IDs - - Returns: - dictionary mapping entity types to lists of fetched entities - - """ - subentities: dict[str, list[Any]] = {} - total_to_fetch = sum(len(ids) for ids in subentity_ids.values()) - - if total_to_fetch > 0: - self.logger.info( - "Fetching details for subentities", - {"prefix": LOG_PREFIX, "total_to_fetch": total_to_fetch}, + def _deserialize_subentities( + self, subentity_type: str, entities: list[Any] + ) -> list[Any]: + """Deserialize related entities to their configured model when available.""" + try: + fetcher = self.fetcher_factory.create_fetcher_by_name( + subentity_type, base_url=self.config.api_url.unicode_string() ) + response_model = fetcher.config.response_model + except Exception as e: + self.logger.debug( + "Could not create typed fetcher for related entities", + { + "prefix": LOG_PREFIX, + "subentity_type": subentity_type, + "error": str(e), + }, + ) + response_model = None - for entity_type, ids in subentity_ids.items(): - if not ids: - subentities[entity_type] = [] - continue - - try: - fetcher = self.fetcher_factory.create_fetcher_by_name( - entity_type, base_url=self.config.api_url.unicode_string() - ) - entities = await fetcher.fetch_multiple(ids) - subentities[entity_type] = entities - self.logger.debug( - "Fetched entities", - { - "prefix": LOG_PREFIX, - "count": len(entities), - "entity_type": entity_type, - }, - ) - - except ApiHttpError as e: - if e.status_code == 404 and entity_type == "files": - self.logger.info( - "404 errors expected for files (files may no longer exist in VirusTotal). Treating as normal behavior.", - {"prefix": LOG_PREFIX}, - ) - subentities[entity_type] = [] - else: - self.logger.error( - "HTTP error fetching details", + deserialized_entities: list[Any] = [] + for entity in entities: + if response_model and isinstance(entity, dict): + try: + deserialized_entities.append(response_model.model_validate(entity)) + continue + except Exception as e: + self.logger.debug( + "Failed to deserialize related entity, keeping raw payload", { "prefix": LOG_PREFIX, - "status_code": e.status_code, - "entity_type": entity_type, + "subentity_type": subentity_type, "error": str(e), }, ) - subentities[entity_type] = [] - except Exception as e: - self.logger.error( - "Failed to fetch details", - { - "prefix": LOG_PREFIX, - "entity_type": entity_type, - "error": str(e), - }, - ) - subentities[entity_type] = [] - - if total_to_fetch > 0: - fetched_summary = ", ".join( - [f"{k}: {len(v)}" for k, v in subentities.items() if len(v) > 0] - ) - if fetched_summary: - self.logger.info( - "Fetched details", - {"prefix": LOG_PREFIX, "summary": fetched_summary}, - ) + deserialized_entities.append(entity) - return subentities + return deserialized_entities diff --git a/external-import/google-ti-feeds/connector/src/custom/configs/campaign/batch_processor_config_campaign.py b/external-import/google-ti-feeds/connector/src/custom/configs/campaign/batch_processor_config_campaign.py index 8b11163cf3c..e09269c0319 100644 --- a/external-import/google-ti-feeds/connector/src/custom/configs/campaign/batch_processor_config_campaign.py +++ b/external-import/google-ti-feeds/connector/src/custom/configs/campaign/batch_processor_config_campaign.py @@ -45,5 +45,4 @@ def campaign_extract_stix_date(stix_object: Any) -> Any | None: date_extraction_function=campaign_extract_stix_date, postprocessing_function=log_batch_completion, validation_function=validate_stix_object, - empty_batch_behavior="update_state", ) diff --git a/external-import/google-ti-feeds/connector/src/custom/configs/fetcher_config_common.py b/external-import/google-ti-feeds/connector/src/custom/configs/fetcher_config_common.py index 7f2a4982552..b6319ffd0d2 100644 --- a/external-import/google-ti-feeds/connector/src/custom/configs/fetcher_config_common.py +++ b/external-import/google-ti-feeds/connector/src/custom/configs/fetcher_config_common.py @@ -43,7 +43,7 @@ GTI_RELATIONSHIP_FETCHER_CONFIG = GenericFetcherConfig( entity_type="relationships", - endpoint="/collections/{entity_id}/relationships/{entity_type}", + endpoint="/collections/{entity_id}/{entity_type}", display_name="relationships", exception_class=GTIRelationshipFetchError, response_model=None, diff --git a/external-import/google-ti-feeds/connector/src/custom/configs/malware/batch_processor_config_malware.py b/external-import/google-ti-feeds/connector/src/custom/configs/malware/batch_processor_config_malware.py index 7c4ba5b876f..b5bc1bf41e2 100644 --- a/external-import/google-ti-feeds/connector/src/custom/configs/malware/batch_processor_config_malware.py +++ b/external-import/google-ti-feeds/connector/src/custom/configs/malware/batch_processor_config_malware.py @@ -45,5 +45,4 @@ def malware_family_extract_stix_date(stix_object: Any) -> Any | None: date_extraction_function=malware_family_extract_stix_date, postprocessing_function=log_batch_completion, validation_function=validate_stix_object, - empty_batch_behavior="update_state", ) diff --git a/external-import/google-ti-feeds/connector/src/custom/configs/report/batch_processor_config_report.py b/external-import/google-ti-feeds/connector/src/custom/configs/report/batch_processor_config_report.py index ae30895f95c..9a6c3ad29d3 100644 --- a/external-import/google-ti-feeds/connector/src/custom/configs/report/batch_processor_config_report.py +++ b/external-import/google-ti-feeds/connector/src/custom/configs/report/batch_processor_config_report.py @@ -45,5 +45,4 @@ def report_extract_stix_date(stix_object: Any) -> Any | None: date_extraction_function=report_extract_stix_date, postprocessing_function=log_batch_completion, validation_function=validate_stix_object, - empty_batch_behavior="update_state", ) diff --git a/external-import/google-ti-feeds/connector/src/custom/configs/threat_actor/batch_processor_config_threat_actor.py b/external-import/google-ti-feeds/connector/src/custom/configs/threat_actor/batch_processor_config_threat_actor.py index ebd7ace9126..53e1bcb318d 100644 --- a/external-import/google-ti-feeds/connector/src/custom/configs/threat_actor/batch_processor_config_threat_actor.py +++ b/external-import/google-ti-feeds/connector/src/custom/configs/threat_actor/batch_processor_config_threat_actor.py @@ -45,5 +45,4 @@ def threat_actor_extract_stix_date(stix_object: Any) -> Any | None: date_extraction_function=threat_actor_extract_stix_date, postprocessing_function=log_batch_completion, validation_function=validate_stix_object, - empty_batch_behavior="update_state", ) diff --git a/external-import/google-ti-feeds/connector/src/custom/configs/vulnerability/batch_processor_config_vulnerability.py b/external-import/google-ti-feeds/connector/src/custom/configs/vulnerability/batch_processor_config_vulnerability.py index eaefdb07c7e..ecae50301da 100644 --- a/external-import/google-ti-feeds/connector/src/custom/configs/vulnerability/batch_processor_config_vulnerability.py +++ b/external-import/google-ti-feeds/connector/src/custom/configs/vulnerability/batch_processor_config_vulnerability.py @@ -45,5 +45,4 @@ def vulnerability_extract_stix_date(stix_object: Any) -> Any | None: date_extraction_function=vulnerability_extract_stix_date, postprocessing_function=log_batch_completion, validation_function=validate_stix_object, - empty_batch_behavior="update_state", ) diff --git a/external-import/google-ti-feeds/connector/src/custom/mappers/gti_attack_techniques/gti_attack_technique_ids_to_stix_attack_patterns.py b/external-import/google-ti-feeds/connector/src/custom/mappers/gti_attack_techniques/gti_attack_technique_ids_to_stix_attack_patterns.py index aa8acf3f62c..a5bb0bd56d8 100644 --- a/external-import/google-ti-feeds/connector/src/custom/mappers/gti_attack_techniques/gti_attack_technique_ids_to_stix_attack_patterns.py +++ b/external-import/google-ti-feeds/connector/src/custom/mappers/gti_attack_techniques/gti_attack_technique_ids_to_stix_attack_patterns.py @@ -61,7 +61,6 @@ def create_relationship( marking_ids=src_entity.object_marking_refs, created=datetime.now(tz=timezone.utc), modified=datetime.now(tz=timezone.utc), - description=f"{type(src_entity).__name__} {relation_type} {type(target_entity).__name__}", ) def __init__( @@ -101,19 +100,16 @@ def to_stix(self) -> list[AttackPattern]: name = technique_id - external_references = self._create_minimal_external_references(technique_id) - attack_pattern_model = OctiAttackPatternModel.create( name=name, mitre_id=technique_id, organization_id=self.organization.id, marking_ids=[self.tlp_marking.id], - description=f"Attack technique {technique_id} (minimal representation)", + description=None, aliases=None, first_seen=None, last_seen=None, kill_chain_phases=None, - external_references=external_references, created=current_time, modified=current_time, ) @@ -121,26 +117,3 @@ def to_stix(self) -> list[AttackPattern]: attack_patterns.append(attack_pattern_model) return attack_patterns - - def _create_minimal_external_references( - self, technique_id: str - ) -> list[dict[str, str]] | None: - """Create minimal external references with only MITRE reference. - - Args: - technique_id: The attack technique ID - - Returns: - list[dict[str, str]] | None: Minimal external references with MITRE reference - - """ - if not technique_id: - return None - - mitre_reference = { - "source_name": "mitre-attack", - "external_id": technique_id, - "url": f"https://attack.mitre.org/techniques/{technique_id}/", - } - - return [mitre_reference] diff --git a/external-import/google-ti-feeds/connector/src/custom/mappers/gti_attack_techniques/gti_attack_technique_to_stix_attack_pattern.py b/external-import/google-ti-feeds/connector/src/custom/mappers/gti_attack_techniques/gti_attack_technique_to_stix_attack_pattern.py index 9c6c23bb8f7..392e3af64ba 100644 --- a/external-import/google-ti-feeds/connector/src/custom/mappers/gti_attack_techniques/gti_attack_technique_to_stix_attack_pattern.py +++ b/external-import/google-ti-feeds/connector/src/custom/mappers/gti_attack_techniques/gti_attack_technique_to_stix_attack_pattern.py @@ -52,7 +52,6 @@ def create_relationship( marking_ids=src_entity.object_marking_refs, created=datetime.now(tz=timezone.utc), modified=datetime.now(tz=timezone.utc), - description=f"{type(src_entity).__name__} {relation_type} {type(target_entity).__name__}", ) def __init__( diff --git a/external-import/google-ti-feeds/connector/src/custom/mappers/gti_campaigns/gti_campaign_to_stix_campaign.py b/external-import/google-ti-feeds/connector/src/custom/mappers/gti_campaigns/gti_campaign_to_stix_campaign.py index 9f7fa089ad2..98d433e82cf 100644 --- a/external-import/google-ti-feeds/connector/src/custom/mappers/gti_campaigns/gti_campaign_to_stix_campaign.py +++ b/external-import/google-ti-feeds/connector/src/custom/mappers/gti_campaigns/gti_campaign_to_stix_campaign.py @@ -61,12 +61,17 @@ def to_stix(self) -> Campaign: modified = datetime.fromtimestamp( attributes.last_modification_date, tz=timezone.utc ) + + aliases = self._extract_aliases(attributes) + first_seen, last_seen = self._get_activity_timestamps(attributes) labels = self._extract_labels(attributes) external_references = self._build_external_references(attributes) + objective = self._extract_objective(attributes) campaign_model = OctiCampaignModel.create( name=name, + aliases=aliases, organization_id=self.organization.id, marking_ids=[self.tlp_marking.id], description=attributes.description, @@ -74,6 +79,7 @@ def to_stix(self) -> Campaign: modified=modified, first_seen=first_seen, last_seen=last_seen, + objective=objective, labels=labels, external_references=[ ref.model_dump(exclude_none=True) for ref in external_references @@ -82,6 +88,31 @@ def to_stix(self) -> Campaign: return campaign_model + @staticmethod + def _extract_aliases(attributes: CampaignModel) -> list[str] | None: + """Extract aliases from campaign attributes. + + Args: + attributes: The campaign attributes + + Returns: + list[str] | None: Extracted aliases or None if no aliases exist + + """ + if ( + not hasattr(attributes, "alt_names_details") + or not attributes.alt_names_details + ): + return None + + aliases = [] + for alt_name in attributes.alt_names_details: + if hasattr(alt_name, "value") and alt_name.value: + alt_name = alt_name.value + aliases.append(alt_name) + + return aliases if aliases else None + @staticmethod def _get_activity_timestamps( attributes: CampaignModel, @@ -124,6 +155,32 @@ def _get_activity_timestamps( return first_seen, last_seen + @staticmethod + def _extract_objective(attributes: CampaignModel) -> str | None: + """Extract objective from campaign motivations. + + Each motivation's value is joined with ", " to produce a single + free-text string that maps to the STIX 2.1 Campaign ``objective`` + property. + + Args: + attributes: The campaign attributes + + Returns: + str | None: Comma-separated motivation values, or None when no + motivations are present. + + """ + if attributes.motivations is None: + return None + + values = [ + motivation.value + for motivation in attributes.motivations + if motivation is not None and motivation.value is not None + ] + return ", ".join(values) if values else None + @staticmethod def _extract_labels(attributes: CampaignModel) -> list[str]: """Extract labels from campaign attributes. @@ -196,5 +253,4 @@ def create_relationship( marking_ids=src_entity.object_marking_refs, created=datetime.now(tz=timezone.utc), modified=datetime.now(tz=timezone.utc), - description=f"{type(src_entity).__name__} {relation_type} {type(target_entity).__name__}", ) diff --git a/external-import/google-ti-feeds/connector/src/custom/mappers/gti_campaigns/gti_campaign_to_stix_composite.py b/external-import/google-ti-feeds/connector/src/custom/mappers/gti_campaigns/gti_campaign_to_stix_composite.py index 7253b45e1fe..5e45b94d78c 100644 --- a/external-import/google-ti-feeds/connector/src/custom/mappers/gti_campaigns/gti_campaign_to_stix_composite.py +++ b/external-import/google-ti-feeds/connector/src/custom/mappers/gti_campaigns/gti_campaign_to_stix_composite.py @@ -135,7 +135,6 @@ def _create_relationships( modified=modified, start_time=location_with_timing.first_seen, stop_time=location_with_timing.last_seen, - description=f"Campaign '{attributes.name}' targets location '{location.name}'", ) relationships.append(relationship) @@ -155,7 +154,6 @@ def _create_relationships( modified=modified, start_time=location_with_timing.first_seen, stop_time=location_with_timing.last_seen, - description=f"Campaign '{attributes.name}' originates from location '{location.name}'", ) relationships.append(relationship) @@ -172,7 +170,6 @@ def _create_relationships( modified=modified, start_time=identity_with_timing.first_seen, stop_time=identity_with_timing.last_seen, - description=f"Campaign '{attributes.name}' targets industry '{identity.name}'", ) relationships.append(relationship) diff --git a/external-import/google-ti-feeds/connector/src/custom/mappers/gti_iocs/gti_domain_to_stix_domain.py b/external-import/google-ti-feeds/connector/src/custom/mappers/gti_iocs/gti_domain_to_stix_domain.py index 5f72bd568f6..5845af525fd 100644 --- a/external-import/google-ti-feeds/connector/src/custom/mappers/gti_iocs/gti_domain_to_stix_domain.py +++ b/external-import/google-ti-feeds/connector/src/custom/mappers/gti_iocs/gti_domain_to_stix_domain.py @@ -3,6 +3,9 @@ from datetime import datetime, timezone from typing import Any +from connector.src.custom.mappers.gti_iocs.indicator_type_helpers import ( + indicator_types_from_verdict, +) from connector.src.custom.models.gti.gti_domain_model import ( GTIDomainData, ) @@ -52,7 +55,6 @@ def create_relationship( marking_ids=src_entity.object_marking_refs, created=datetime.now(tz=timezone.utc), modified=datetime.now(tz=timezone.utc), - description=f"Indicator indicates {src_entity.__class__.__name__}", ) else: return OctiRelationshipModel.create( @@ -63,7 +65,6 @@ def create_relationship( marking_ids=src_entity.object_marking_refs, created=datetime.now(tz=timezone.utc), modified=datetime.now(tz=timezone.utc), - description=f"{src_entity.__class__.__name__} {relation_type} {target_entity.__class__.__name__}", ) def __init__( @@ -230,37 +231,13 @@ def _get_score(self) -> int | None: return None def _determine_indicator_types(self) -> list[IndicatorTypeOV]: - """Determine indicator types based on domain attributes. + """Determine indicator types from the GTI assessment verdict. Returns: - list[IndicatorTypeOV]: list of indicator types + list[IndicatorTypeOV]: list of indicator types, empty when no + classification is available (field should be omitted downstream). """ - indicator_types = [] - - gti_types = self._get_types_from_gti_assessment() - if gti_types: - indicator_types.extend(gti_types) - - if not indicator_types: - indicator_types.append(IndicatorTypeOV.UNKNOWN) - - return indicator_types - - def _get_types_from_gti_assessment(self) -> list[IndicatorTypeOV]: - """Extract indicator types from GTI assessment verdict. - - Returns: - list[IndicatorTypeOV]: list of indicator types from GTI assessment - - """ - if not (self.domain.attributes and self.domain.attributes.gti_assessment): - return [] - - gti_assessment = self.domain.attributes.gti_assessment - if not (gti_assessment.verdict and gti_assessment.verdict.value): + if not self.domain.attributes: return [] - - verdict = gti_assessment.verdict.value.upper() - - return [IndicatorTypeOV(verdict)] + return indicator_types_from_verdict(self.domain.attributes.gti_assessment) diff --git a/external-import/google-ti-feeds/connector/src/custom/mappers/gti_iocs/gti_file_to_stix_file.py b/external-import/google-ti-feeds/connector/src/custom/mappers/gti_iocs/gti_file_to_stix_file.py index e4849265795..3b8a0bea001 100644 --- a/external-import/google-ti-feeds/connector/src/custom/mappers/gti_iocs/gti_file_to_stix_file.py +++ b/external-import/google-ti-feeds/connector/src/custom/mappers/gti_iocs/gti_file_to_stix_file.py @@ -3,6 +3,9 @@ from datetime import datetime, timezone from typing import Any +from connector.src.custom.mappers.gti_iocs.indicator_type_helpers import ( + indicator_types_from_verdict, +) from connector.src.custom.models.gti.gti_file_model import ( GTIFileData, ) @@ -52,7 +55,6 @@ def create_relationship( marking_ids=src_entity.object_marking_refs, created=datetime.now(tz=timezone.utc), modified=datetime.now(tz=timezone.utc), - description=f"Indicator indicates {src_entity.__class__.__name__}", ) else: return OctiRelationshipModel.create( @@ -63,7 +65,6 @@ def create_relationship( marking_ids=src_entity.object_marking_refs, created=datetime.now(tz=timezone.utc), modified=datetime.now(tz=timezone.utc), - description=f"{src_entity.__class__.__name__} {relation_type} {target_entity.__class__.__name__}", ) def __init__( @@ -302,37 +303,13 @@ def _build_stix_pattern(self) -> str: return f"[file:hashes.'SHA-256' = '{self.file.id}']" def _determine_indicator_types(self) -> list[IndicatorTypeOV]: - """Determine indicator types based on file attributes. - - Returns: - list[IndicatorTypeOV]: list of indicator types - - """ - indicator_types = [] - - gti_types = self._get_types_from_gti_assessment() - if gti_types: - indicator_types.extend(gti_types) - - if not indicator_types: - indicator_types.append(IndicatorTypeOV.UNKNOWN) - - return indicator_types - - def _get_types_from_gti_assessment(self) -> list[IndicatorTypeOV]: - """Extract indicator types from GTI assessment verdict. + """Determine indicator types from the GTI assessment verdict. Returns: - list[IndicatorTypeOV]: list of indicator types from GTI assessment + list[IndicatorTypeOV]: list of indicator types, empty when no + classification is available (field should be omitted downstream). """ - if not (self.file.attributes and self.file.attributes.gti_assessment): - return [] - - gti_assessment = self.file.attributes.gti_assessment - if not (gti_assessment.verdict and gti_assessment.verdict.value): + if not self.file.attributes: return [] - - verdict = gti_assessment.verdict.value.upper() - - return [IndicatorTypeOV(verdict)] + return indicator_types_from_verdict(self.file.attributes.gti_assessment) diff --git a/external-import/google-ti-feeds/connector/src/custom/mappers/gti_iocs/gti_ip_to_stix_ip.py b/external-import/google-ti-feeds/connector/src/custom/mappers/gti_iocs/gti_ip_to_stix_ip.py index 0a63ac78ecf..d999803c172 100644 --- a/external-import/google-ti-feeds/connector/src/custom/mappers/gti_iocs/gti_ip_to_stix_ip.py +++ b/external-import/google-ti-feeds/connector/src/custom/mappers/gti_iocs/gti_ip_to_stix_ip.py @@ -4,6 +4,9 @@ from datetime import datetime, timezone from typing import Any +from connector.src.custom.mappers.gti_iocs.indicator_type_helpers import ( + indicator_types_from_verdict, +) from connector.src.custom.models.gti.gti_ip_addresses_model import ( GTIIPData, ) @@ -56,7 +59,6 @@ def create_relationship( marking_ids=src_entity.object_marking_refs, created=datetime.now(tz=timezone.utc), modified=datetime.now(tz=timezone.utc), - description=f"Indicator indicates {src_entity.__class__.__name__}", ) else: return OctiRelationshipModel.create( @@ -67,7 +69,6 @@ def create_relationship( marking_ids=src_entity.object_marking_refs, created=datetime.now(tz=timezone.utc), modified=datetime.now(tz=timezone.utc), - description=f"{src_entity.__class__.__name__} {relation_type} {target_entity.__class__.__name__}", ) def __init__( @@ -297,37 +298,13 @@ def _build_stix_pattern(self) -> str: return f"[ipv6-addr:value = '{self.ip.id}']" def _determine_indicator_types(self) -> list[IndicatorTypeOV]: - """Determine indicator types based on IP attributes. + """Determine indicator types from the GTI assessment verdict. Returns: - list[IndicatorTypeOV]: list of indicator types + list[IndicatorTypeOV]: list of indicator types, empty when no + classification is available (field should be omitted downstream). """ - indicator_types = [] - - gti_types = self._get_types_from_gti_assessment() - if gti_types: - indicator_types.extend(gti_types) - - if not indicator_types: - indicator_types.append(IndicatorTypeOV.UNKNOWN) - - return indicator_types - - def _get_types_from_gti_assessment(self) -> list[IndicatorTypeOV]: - """Extract indicator types from GTI assessment verdict. - - Returns: - list[IndicatorTypeOV]: list of indicator types from GTI assessment - - """ - if not (self.ip.attributes and self.ip.attributes.gti_assessment): - return [] - - gti_assessment = self.ip.attributes.gti_assessment - if not (gti_assessment.verdict and gti_assessment.verdict.value): + if not self.ip.attributes: return [] - - verdict = gti_assessment.verdict.value.upper() - - return [IndicatorTypeOV(verdict)] + return indicator_types_from_verdict(self.ip.attributes.gti_assessment) diff --git a/external-import/google-ti-feeds/connector/src/custom/mappers/gti_iocs/gti_url_to_stix_url.py b/external-import/google-ti-feeds/connector/src/custom/mappers/gti_iocs/gti_url_to_stix_url.py index 2b2fc6d6e08..8ddeb866cbc 100644 --- a/external-import/google-ti-feeds/connector/src/custom/mappers/gti_iocs/gti_url_to_stix_url.py +++ b/external-import/google-ti-feeds/connector/src/custom/mappers/gti_iocs/gti_url_to_stix_url.py @@ -3,6 +3,9 @@ from datetime import datetime, timezone from typing import Any +from connector.src.custom.mappers.gti_iocs.indicator_type_helpers import ( + indicator_types_from_verdict, +) from connector.src.custom.models.gti.gti_url_model import ( GTIURLData, ) @@ -52,7 +55,6 @@ def create_relationship( marking_ids=src_entity.object_marking_refs, created=datetime.now(tz=timezone.utc), modified=datetime.now(tz=timezone.utc), - description=f"Indicator indicates {src_entity.__class__.__name__}", ) else: return OctiRelationshipModel.create( @@ -63,7 +65,6 @@ def create_relationship( marking_ids=src_entity.object_marking_refs, created=datetime.now(tz=timezone.utc), modified=datetime.now(tz=timezone.utc), - description=f"{src_entity.__class__.__name__} {relation_type} {target_entity.__class__.__name__}", ) def __init__( @@ -266,37 +267,13 @@ def _build_stix_pattern(self) -> str: return f"[url:value = '{url_value}']" def _determine_indicator_types(self) -> list[IndicatorTypeOV]: - """Determine indicator types based on URL attributes. + """Determine indicator types from the GTI assessment verdict. Returns: - list[IndicatorTypeOV]: list of indicator types + list[IndicatorTypeOV]: list of indicator types, empty when no + classification is available (field should be omitted downstream). """ - indicator_types = [] - - gti_types = self._get_types_from_gti_assessment() - if gti_types: - indicator_types.extend(gti_types) - - if not indicator_types: - indicator_types.append(IndicatorTypeOV.UNKNOWN) - - return indicator_types - - def _get_types_from_gti_assessment(self) -> list[IndicatorTypeOV]: - """Extract indicator types from GTI assessment verdict. - - Returns: - list[IndicatorTypeOV]: list of indicator types from GTI assessment - - """ - if not (self.url.attributes and self.url.attributes.gti_assessment): - return [] - - gti_assessment = self.url.attributes.gti_assessment - if not (gti_assessment.verdict and gti_assessment.verdict.value): + if not self.url.attributes: return [] - - verdict = gti_assessment.verdict.value.upper() - - return [IndicatorTypeOV(verdict)] + return indicator_types_from_verdict(self.url.attributes.gti_assessment) diff --git a/external-import/google-ti-feeds/connector/src/custom/mappers/gti_iocs/indicator_type_helpers.py b/external-import/google-ti-feeds/connector/src/custom/mappers/gti_iocs/indicator_type_helpers.py new file mode 100644 index 00000000000..adc745e408d --- /dev/null +++ b/external-import/google-ti-feeds/connector/src/custom/mappers/gti_iocs/indicator_type_helpers.py @@ -0,0 +1,27 @@ +"""Shared helpers for extracting indicator types from GTI assessment data.""" + +from typing import Any + +from connector.src.stix.v21.models.ovs.indicator_type_ov_enums import IndicatorTypeOV + + +def indicator_types_from_verdict(gti_assessment: Any) -> list[IndicatorTypeOV]: + """Extract indicator types from a GTI assessment verdict. + + Accepts any GTI assessment model that exposes ``verdict.value``. + Returns an empty list when no classification is available, ensuring the + downstream field is omitted rather than defaulting to a placeholder. + + Args: + gti_assessment: A GTI assessment object (may be ``None``). + + Returns: + list[IndicatorTypeOV]: Singleton list with the verdict, + or empty list when the verdict is absent. + + """ + if gti_assessment is None: + return [] + if not (gti_assessment.verdict and gti_assessment.verdict.value): + return [] + return [IndicatorTypeOV(gti_assessment.verdict.value)] diff --git a/external-import/google-ti-feeds/connector/src/custom/mappers/gti_malwares/gti_malware_family_to_stix_composite.py b/external-import/google-ti-feeds/connector/src/custom/mappers/gti_malwares/gti_malware_family_to_stix_composite.py index 866fbd108ba..13ad1c36013 100644 --- a/external-import/google-ti-feeds/connector/src/custom/mappers/gti_malwares/gti_malware_family_to_stix_composite.py +++ b/external-import/google-ti-feeds/connector/src/custom/mappers/gti_malwares/gti_malware_family_to_stix_composite.py @@ -138,7 +138,6 @@ def _create_relationships( modified=modified, start_time=location_with_timing.first_seen, stop_time=location_with_timing.last_seen, - description=f"Malware family '{attributes.name}' targets location '{location.name}'", ) relationships.append(relationship) @@ -157,7 +156,6 @@ def _create_relationships( modified=modified, start_time=location_with_timing.first_seen, stop_time=location_with_timing.last_seen, - description=f"Malware family '{attributes.name}' originates from location '{location.name}'", ) relationships.append(relationship) @@ -173,7 +171,6 @@ def _create_relationships( modified=modified, start_time=sector_with_timing.first_seen, stop_time=sector_with_timing.last_seen, - description=f"Malware family '{attributes.name}' targets sector '{sector.name}'", ) relationships.append(relationship) diff --git a/external-import/google-ti-feeds/connector/src/custom/mappers/gti_malwares/gti_malware_family_to_stix_malware.py b/external-import/google-ti-feeds/connector/src/custom/mappers/gti_malwares/gti_malware_family_to_stix_malware.py index f816d781ef4..b130b93bbee 100644 --- a/external-import/google-ti-feeds/connector/src/custom/mappers/gti_malwares/gti_malware_family_to_stix_malware.py +++ b/external-import/google-ti-feeds/connector/src/custom/mappers/gti_malwares/gti_malware_family_to_stix_malware.py @@ -56,7 +56,6 @@ def create_relationship( marking_ids=src_entity.object_marking_refs, created=datetime.now(tz=timezone.utc), modified=datetime.now(tz=timezone.utc), - description=f"{type(src_entity).__name__} {relation_type} {type(target_entity).__name__}", ) def __init__( @@ -179,9 +178,6 @@ def _extract_malware_types( if hasattr(role, "value") and role.value: malware_types.append(MalwareTypeOV(role.value)) - if not malware_types: - malware_types.append(MalwareTypeOV.UNKNOWN) - return malware_types @staticmethod @@ -202,18 +198,18 @@ def _extract_seen_dates( hasattr(attributes, "first_seen_details") and attributes.first_seen_details and len(attributes.first_seen_details) > 0 - and hasattr(attributes.first_seen_details[0], "values") + and hasattr(attributes.first_seen_details[0], "value") ): - first_seen = attributes.first_seen_details[0].values + first_seen = attributes.first_seen_details[0].value last_seen = None if ( hasattr(attributes, "last_seen_details") and attributes.last_seen_details and len(attributes.last_seen_details) > 0 - and hasattr(attributes.last_seen_details[0], "values") + and hasattr(attributes.last_seen_details[0], "value") ): - last_seen = attributes.last_seen_details[0].values + last_seen = attributes.last_seen_details[0].value return first_seen, last_seen diff --git a/external-import/google-ti-feeds/connector/src/custom/mappers/gti_reports/gti_report_to_stix_composite.py b/external-import/google-ti-feeds/connector/src/custom/mappers/gti_reports/gti_report_to_stix_composite.py index 49aa18022e8..98b00e55e66 100644 --- a/external-import/google-ti-feeds/connector/src/custom/mappers/gti_reports/gti_report_to_stix_composite.py +++ b/external-import/google-ti-feeds/connector/src/custom/mappers/gti_reports/gti_report_to_stix_composite.py @@ -1,5 +1,6 @@ """Composite mapper that handles report to locations, identity, and report conversion in one step.""" +from datetime import datetime, timezone from typing import Any from connector.src.custom.mappers.gti_reports.gti_report_to_stix_identity import ( @@ -15,6 +16,7 @@ GTIReportToSTIXSector, ) from connector.src.custom.models.gti.gti_report_model import GTIReportData +from connector.src.stix.octi.models.note_model import OctiNoteModel from connector.src.utils.converters.generic_converter_config import BaseMapper from connectors_sdk.models.octi import ( # type: ignore[import-untyped] OrganizationAuthor, @@ -94,4 +96,40 @@ def to_stix(self) -> list[Any]: all_entities.append(report_stix) + note = self._create_analyst_comment_note(report_stix) + if note is not None: + all_entities.append(note) + return all_entities + + def _create_analyst_comment_note(self, report_stix: Any) -> Any: + """Create a STIX Note from the analyst_comment field if present. + + Args: + report_stix: The STIX report object to attach the note to + + Returns: + A STIX Note object, or None if no analyst_comment is present + + """ + attributes = self.report.attributes + if not attributes or not attributes.analyst_comment: + return None + + created = datetime.fromtimestamp(attributes.creation_date, tz=timezone.utc) + modified = datetime.fromtimestamp( + attributes.last_modification_date, tz=timezone.utc + ) + + note_model = OctiNoteModel.create( + content=attributes.analyst_comment, + abstract=f"Analyst Comment & News Analysis Rating - {attributes.name}", + created=created, + modified=modified, + organization_id=self.organization.id, + marking_ids=[self.tlp_marking.id], + object_refs=[report_stix.id], + authors=["Google Threat Intelligence"], + ) + + return note_model.to_stix2_object() diff --git a/external-import/google-ti-feeds/connector/src/custom/mappers/gti_threat_actors/gti_threat_actor_to_stix_composite.py b/external-import/google-ti-feeds/connector/src/custom/mappers/gti_threat_actors/gti_threat_actor_to_stix_composite.py index 7bd1f079ef6..358aed0de38 100644 --- a/external-import/google-ti-feeds/connector/src/custom/mappers/gti_threat_actors/gti_threat_actor_to_stix_composite.py +++ b/external-import/google-ti-feeds/connector/src/custom/mappers/gti_threat_actors/gti_threat_actor_to_stix_composite.py @@ -136,7 +136,6 @@ def _create_relationships( modified=modified, start_time=location_with_timing.first_seen, stop_time=location_with_timing.last_seen, - description=f"Threat actor '{attributes.name}' targets location '{location.name}'", ) relationships.append(relationship) @@ -155,7 +154,6 @@ def _create_relationships( modified=modified, start_time=location_with_timing.first_seen, stop_time=location_with_timing.last_seen, - description=f"Threat actor '{attributes.name}' originates from location '{location.name}'", ) relationships.append(relationship) @@ -171,7 +169,6 @@ def _create_relationships( modified=modified, start_time=sector_with_timing.first_seen, stop_time=sector_with_timing.last_seen, - description=f"Threat actor '{attributes.name}' targets sector '{sector.name}'", ) relationships.append(relationship) diff --git a/external-import/google-ti-feeds/connector/src/custom/mappers/gti_threat_actors/gti_threat_actor_to_stix_intrusion_set.py b/external-import/google-ti-feeds/connector/src/custom/mappers/gti_threat_actors/gti_threat_actor_to_stix_intrusion_set.py index b7cdad23df4..81a162e6951 100644 --- a/external-import/google-ti-feeds/connector/src/custom/mappers/gti_threat_actors/gti_threat_actor_to_stix_intrusion_set.py +++ b/external-import/google-ti-feeds/connector/src/custom/mappers/gti_threat_actors/gti_threat_actor_to_stix_intrusion_set.py @@ -55,7 +55,6 @@ def create_relationship( marking_ids=src_entity.object_marking_refs, created=datetime.now(tz=timezone.utc), modified=datetime.now(tz=timezone.utc), - description=f"{type(src_entity).__name__} {relation_type} {type(target_entity).__name__}", ) def __init__( diff --git a/external-import/google-ti-feeds/connector/src/custom/mappers/gti_vulnerabilities/gti_vulnerability_to_stix_composite.py b/external-import/google-ti-feeds/connector/src/custom/mappers/gti_vulnerabilities/gti_vulnerability_to_stix_composite.py index a54f35ce7b8..8d52a4946a4 100644 --- a/external-import/google-ti-feeds/connector/src/custom/mappers/gti_vulnerabilities/gti_vulnerability_to_stix_composite.py +++ b/external-import/google-ti-feeds/connector/src/custom/mappers/gti_vulnerabilities/gti_vulnerability_to_stix_composite.py @@ -134,7 +134,6 @@ def _create_relationships( marking_ids=[self.tlp_marking.id], created=created, modified=modified, - description=f"Software '{software.name}' is affected by vulnerability '{attributes.name}'", ) relationships.append(relationship) diff --git a/external-import/google-ti-feeds/connector/src/custom/mappers/gti_vulnerabilities/gti_vulnerability_to_stix_note.py b/external-import/google-ti-feeds/connector/src/custom/mappers/gti_vulnerabilities/gti_vulnerability_to_stix_note.py index 7a888093feb..46be59619e9 100644 --- a/external-import/google-ti-feeds/connector/src/custom/mappers/gti_vulnerabilities/gti_vulnerability_to_stix_note.py +++ b/external-import/google-ti-feeds/connector/src/custom/mappers/gti_vulnerabilities/gti_vulnerability_to_stix_note.py @@ -50,20 +50,34 @@ def to_stix(self) -> list[Note]: return result attributes = self.vulnerability.attributes - if not attributes.workarounds: - return result - created, modified = self._extract_timestamps(attributes) - for i, workaround in enumerate(attributes.workarounds): - if workaround and workaround.strip(): - markdown_workaround = self._convert_html_to_markdown(workaround) - note = self._create_workaround_note( - markdown_workaround, i + 1, created, modified - ) - if note: - result.append(note) + # add note for 'workarrounds' + if attributes.workarounds: + for i, workaround in enumerate(attributes.workarounds): + if workaround and workaround.strip(): + markdown_workaround = self._convert_html_to_markdown(workaround) + note = self._create_workaround_note( + markdown_workaround, i + 1, created, modified + ) + if note: + result.append(note) + + # add note for 'executive_summary' + if attributes.executive_summary: + note = self._create_executive_summary_note( + attributes.name, attributes.executive_summary, created, modified + ) + if note: + result.append(note) + # add note for 'analysis' + if attributes.analysis: + note = self._create_analysis_note( + attributes.name, attributes.analysis, created, modified + ) + if note: + result.append(note) return result def _create_workaround_note( @@ -100,6 +114,72 @@ def _create_workaround_note( return note + def _create_executive_summary_note( + self, + vulnerability_name, + executive_summary: str, + created: datetime, + modified: datetime, + ) -> Note: + """Create a Note object from executive summary text. + + Args: + vulnerability_name (str): The name of the vulnerability. + executive_summary (str): The executive_summary text content. + created (datetime): When the note was created. + modified (datetime): When the note was last modified. + + Returns: + Note: The STIX Note object representing the executive summary. + + """ + abstract = vulnerability_name + " - " + "Executive Summary" + + note = OctiNoteModel.create( + content=executive_summary, + created=created, + modified=modified, + organization_id=self.organization.id, + marking_ids=[self.tlp_marking.id], + object_refs=[], + abstract=abstract, + authors=["Google Threat Intelligence"], + labels=[], + ) + + return note + + def _create_analysis_note( + self, vulnerability_name, analysis: str, created: datetime, modified: datetime + ) -> Note: + """Create a Note object from executive summary text. + + Args: + vulnerability_name (str): The name of the vulnerability. + analysis (str): The analysis text content. + created (datetime): When the note was created. + modified (datetime): When the note was last modified. + + Returns: + Note: The STIX Note object representing the analysis. + + """ + abstract = vulnerability_name + " - " + "Analysis" + + note = OctiNoteModel.create( + content=analysis, + created=created, + modified=modified, + organization_id=self.organization.id, + marking_ids=[self.tlp_marking.id], + object_refs=[], + abstract=abstract, + authors=["Google Threat Intelligence"], + labels=[], + ) + + return note + def _extract_timestamps( self, attributes: VulnerabilityModel ) -> tuple[datetime, datetime]: diff --git a/external-import/google-ti-feeds/connector/src/custom/mappers/gti_vulnerabilities/gti_vulnerability_to_stix_vulnerability.py b/external-import/google-ti-feeds/connector/src/custom/mappers/gti_vulnerabilities/gti_vulnerability_to_stix_vulnerability.py index 1ac58fe7884..3b3a91c7ce7 100644 --- a/external-import/google-ti-feeds/connector/src/custom/mappers/gti_vulnerabilities/gti_vulnerability_to_stix_vulnerability.py +++ b/external-import/google-ti-feeds/connector/src/custom/mappers/gti_vulnerabilities/gti_vulnerability_to_stix_vulnerability.py @@ -50,7 +50,6 @@ def create_relationship( marking_ids=src_entity.object_marking_refs, created=datetime.now(), modified=datetime.now(), - description=f"{type(src_entity).__name__} {relation_type} {type(target_entity).__name__}", ) def __init__( @@ -326,4 +325,14 @@ def _create_external_references( } external_references.append(gti_reference) + for source in attributes.sources: + source_reference = { + "source_name": ( + source.name if source.name else "Google Threat Intelligence" + ), + "description": source.title if source.title else None, + "url": source.url, + } + external_references.append(source_reference) + return external_references if external_references else None diff --git a/external-import/google-ti-feeds/connector/src/custom/models/gti/gti_campaign_model.py b/external-import/google-ti-feeds/connector/src/custom/models/gti/gti_campaign_model.py index 4f035c7465a..af7bdc2f7b4 100644 --- a/external-import/google-ti-feeds/connector/src/custom/models/gti/gti_campaign_model.py +++ b/external-import/google-ti-feeds/connector/src/custom/models/gti/gti_campaign_model.py @@ -279,6 +279,28 @@ class TargetedIndustry(BaseModel): source: str | None = Field(default=None, description="Information supplier") +class Motivation(BaseModel): + """Motivation associated with the campaign.""" + + confidence: str | None = Field( + default=None, + description="Confidence on the information or the attribution of the motivation", + ) + description: str | None = Field( + default=None, + description="Description / additional information about the motivation", + ) + first_seen: int | None = Field( + default=None, + description="First time this motivation was attributed to the campaign (UTC timestamp)", + ) + last_seen: int | None = Field( + default=None, + description="Last time this motivation was attributed to the campaign (UTC timestamp)", + ) + value: str | None = Field(default=None, description="Motivation value") + + class TargetedRegion(BaseModel): """Regions and countries known to be targeted by the campaign.""" @@ -391,6 +413,10 @@ class CampaignModel(BaseModel): default=None, description="Regions and countries known to be targeted by the campaign", ) + motivations: list[Motivation] | None = Field( + default=None, + description="Motivations associated with the campaign such as espionage, financial gain, etc.", + ) top_icon_md5: list[str] | None = Field( default=None, description="list of the 3 most frequent icons among the campaign's associated IoCs (MD5 hash)", diff --git a/external-import/google-ti-feeds/connector/src/custom/orchestrators/campaign/orchestrator_campaign.py b/external-import/google-ti-feeds/connector/src/custom/orchestrators/campaign/orchestrator_campaign.py index 3dc53a07c9f..1de382fa605 100644 --- a/external-import/google-ti-feeds/connector/src/custom/orchestrators/campaign/orchestrator_campaign.py +++ b/external-import/google-ti-feeds/connector/src/custom/orchestrators/campaign/orchestrator_campaign.py @@ -97,14 +97,14 @@ async def run(self, initial_state: dict[str, Any] | None) -> None: campaign_entities = self.converter.convert_campaign_to_stix( campaign ) - subentities_ids = await self.client_api.fetch_subentities_ids( + subentities = await self.client_api.fetch_subentities( entity_name="entity_id", entity_id=campaign.id, subentity_types=subentity_types, ) rel_summary = ", ".join( - [f"{k}: {len(v)}" for k, v in subentities_ids.items()] + [f"{k}: {len(v)}" for k, v in subentities.items()] ) if len(rel_summary) > 0: self.logger.info( @@ -117,13 +117,12 @@ async def run(self, initial_state: dict[str, Any] | None) -> None: }, ) - # Skip fetch_subentity_details for attack_techniques (quota optimization) - attack_technique_ids = subentities_ids.get("attack_techniques", []) - filtered_subentities_ids = { - k: v - for k, v in subentities_ids.items() - if k != "attack_techniques" - } + attack_technique_entities = subentities.pop("attack_techniques", []) + attack_technique_ids = [ + attack_technique.id + for attack_technique in attack_technique_entities + if getattr(attack_technique, "id", None) + ] if attack_technique_ids: self.logger.info( @@ -134,11 +133,7 @@ async def run(self, initial_state: dict[str, Any] | None) -> None: }, ) - subentities_detailed = ( - await self.client_api.fetch_subentity_details( - filtered_subentities_ids - ) - ) + subentities_detailed = subentities # Convert attack technique IDs to proper model format for conversion if attack_technique_ids: diff --git a/external-import/google-ti-feeds/connector/src/custom/orchestrators/malware/orchestrator_malware.py b/external-import/google-ti-feeds/connector/src/custom/orchestrators/malware/orchestrator_malware.py index 8e424311da2..9b8bc9d6b51 100644 --- a/external-import/google-ti-feeds/connector/src/custom/orchestrators/malware/orchestrator_malware.py +++ b/external-import/google-ti-feeds/connector/src/custom/orchestrators/malware/orchestrator_malware.py @@ -94,14 +94,14 @@ async def run(self, initial_state: dict[str, Any] | None) -> None: malware_family_entities = ( self.converter.convert_malware_family_to_stix(malware_family) ) - subentities_ids = await self.client_api.fetch_subentities_ids( + subentities = await self.client_api.fetch_subentities( entity_name="entity_id", entity_id=malware_family.id, subentity_types=subentity_types, ) rel_summary = ", ".join( - [f"{k}: {len(v)}" for k, v in subentities_ids.items()] + [f"{k}: {len(v)}" for k, v in subentities.items()] ) if len(rel_summary) > 0: self.logger.info( @@ -114,13 +114,12 @@ async def run(self, initial_state: dict[str, Any] | None) -> None: }, ) - # Skip fetch_subentity_details for attack_techniques (quota optimization) - attack_technique_ids = subentities_ids.get("attack_techniques", []) - filtered_subentities_ids = { - k: v - for k, v in subentities_ids.items() - if k != "attack_techniques" - } + attack_technique_entities = subentities.pop("attack_techniques", []) + attack_technique_ids = [ + attack_technique.id + for attack_technique in attack_technique_entities + if getattr(attack_technique, "id", None) + ] if attack_technique_ids: self.logger.info( @@ -131,11 +130,7 @@ async def run(self, initial_state: dict[str, Any] | None) -> None: }, ) - subentities_detailed = ( - await self.client_api.fetch_subentity_details( - filtered_subentities_ids - ) - ) + subentities_detailed = subentities # Convert attack technique IDs to proper model format for conversion if attack_technique_ids: diff --git a/external-import/google-ti-feeds/connector/src/custom/orchestrators/report/orchestrator_report.py b/external-import/google-ti-feeds/connector/src/custom/orchestrators/report/orchestrator_report.py index af385acfd6b..90510e7bfd4 100644 --- a/external-import/google-ti-feeds/connector/src/custom/orchestrators/report/orchestrator_report.py +++ b/external-import/google-ti-feeds/connector/src/custom/orchestrators/report/orchestrator_report.py @@ -92,14 +92,14 @@ async def run(self, initial_state: dict[str, Any] | None) -> None: for report_idx, report in enumerate(gti_reports): self._update_index_inplace() report_entities = self.converter.convert_report_to_stix(report) - subentities_ids = await self.client_api.fetch_subentities_ids( + subentities = await self.client_api.fetch_subentities( entity_name="entity_id", entity_id=report.id, subentity_types=subentity_types, ) rel_summary = ", ".join( - [f"{k}: {len(v)}" for k, v in subentities_ids.items()] + [f"{k}: {len(v)}" for k, v in subentities.items()] ) if len(rel_summary) > 0: self.logger.info( @@ -112,13 +112,12 @@ async def run(self, initial_state: dict[str, Any] | None) -> None: }, ) - # Skip fetch_subentity_details for attack_techniques (quota optimization) - attack_technique_ids = subentities_ids.get("attack_techniques", []) - filtered_subentities_ids = { - k: v - for k, v in subentities_ids.items() - if k != "attack_techniques" - } + attack_technique_entities = subentities.pop("attack_techniques", []) + attack_technique_ids = [ + attack_technique.id + for attack_technique in attack_technique_entities + if getattr(attack_technique, "id", None) + ] if attack_technique_ids: self.logger.info( @@ -129,11 +128,7 @@ async def run(self, initial_state: dict[str, Any] | None) -> None: }, ) - subentities_detailed = ( - await self.client_api.fetch_subentity_details( - filtered_subentities_ids - ) - ) + subentities_detailed = subentities # Convert attack technique IDs to proper model format for conversion if attack_technique_ids: diff --git a/external-import/google-ti-feeds/connector/src/custom/orchestrators/threat_actor/orchestrator_threat_actor.py b/external-import/google-ti-feeds/connector/src/custom/orchestrators/threat_actor/orchestrator_threat_actor.py index b5c897dbfc0..566cca173e1 100644 --- a/external-import/google-ti-feeds/connector/src/custom/orchestrators/threat_actor/orchestrator_threat_actor.py +++ b/external-import/google-ti-feeds/connector/src/custom/orchestrators/threat_actor/orchestrator_threat_actor.py @@ -99,14 +99,14 @@ async def run(self, initial_state: dict[str, Any] | None) -> None: threat_actor_entities = self.converter.convert_threat_actor_to_stix( threat_actor ) - subentities_ids = await self.client_api.fetch_subentities_ids( + subentities = await self.client_api.fetch_subentities( entity_name="entity_id", entity_id=threat_actor.id, subentity_types=subentity_types, ) rel_summary = ", ".join( - [f"{k}: {len(v)}" for k, v in subentities_ids.items()] + [f"{k}: {len(v)}" for k, v in subentities.items()] ) if len(rel_summary) > 0: self.logger.info( @@ -119,13 +119,12 @@ async def run(self, initial_state: dict[str, Any] | None) -> None: }, ) - # Skip fetch_subentity_details for attack_techniques (quota optimization) - attack_technique_ids = subentities_ids.get("attack_techniques", []) - filtered_subentities_ids = { - k: v - for k, v in subentities_ids.items() - if k != "attack_techniques" - } + attack_technique_entities = subentities.pop("attack_techniques", []) + attack_technique_ids = [ + attack_technique.id + for attack_technique in attack_technique_entities + if getattr(attack_technique, "id", None) + ] if attack_technique_ids: self.logger.info( @@ -136,11 +135,7 @@ async def run(self, initial_state: dict[str, Any] | None) -> None: }, ) - subentities_detailed = ( - await self.client_api.fetch_subentity_details( - filtered_subentities_ids - ) - ) + subentities_detailed = subentities # Convert attack technique IDs to proper model format for conversion if attack_technique_ids: diff --git a/external-import/google-ti-feeds/connector/src/custom/orchestrators/vulnerability/orchestrator_vulnerability.py b/external-import/google-ti-feeds/connector/src/custom/orchestrators/vulnerability/orchestrator_vulnerability.py index 27844375659..a3e95dd06cc 100644 --- a/external-import/google-ti-feeds/connector/src/custom/orchestrators/vulnerability/orchestrator_vulnerability.py +++ b/external-import/google-ti-feeds/connector/src/custom/orchestrators/vulnerability/orchestrator_vulnerability.py @@ -99,14 +99,14 @@ async def run(self, initial_state: dict[str, Any] | None) -> None: vulnerability_entities = ( self.converter.convert_vulnerability_to_stix(vulnerability) ) - subentities_ids = await self.client_api.fetch_subentities_ids( + subentities = await self.client_api.fetch_subentities( entity_name="entity_id", entity_id=vulnerability.id, subentity_types=subentity_types, ) rel_summary = ", ".join( - [f"{k}: {len(v)}" for k, v in subentities_ids.items()] + [f"{k}: {len(v)}" for k, v in subentities.items()] ) if len(rel_summary) > 0: self.logger.info( @@ -119,13 +119,12 @@ async def run(self, initial_state: dict[str, Any] | None) -> None: }, ) - # Skip fetch_subentity_details for attack_techniques (quota optimization) - attack_technique_ids = subentities_ids.get("attack_techniques", []) - filtered_subentities_ids = { - k: v - for k, v in subentities_ids.items() - if k != "attack_techniques" - } + attack_technique_entities = subentities.pop("attack_techniques", []) + attack_technique_ids = [ + attack_technique.id + for attack_technique in attack_technique_entities + if getattr(attack_technique, "id", None) + ] if attack_technique_ids: self.logger.info( @@ -136,11 +135,7 @@ async def run(self, initial_state: dict[str, Any] | None) -> None: }, ) - subentities_detailed = ( - await self.client_api.fetch_subentity_details( - filtered_subentities_ids - ) - ) + subentities_detailed = subentities # Convert attack technique IDs to proper model format for conversion if attack_technique_ids: diff --git a/external-import/google-ti-feeds/connector/src/octi/configs/connector_config.py b/external-import/google-ti-feeds/connector/src/octi/configs/connector_config.py index fcf92c35037..69706fc8edb 100644 --- a/external-import/google-ti-feeds/connector/src/octi/configs/connector_config.py +++ b/external-import/google-ti-feeds/connector/src/octi/configs/connector_config.py @@ -12,7 +12,7 @@ class ConnectorConfig(BaseConfig): """Configuration for the connector.""" yaml_section: ClassVar[str] = "connector" - model_config = SettingsConfigDict(env_prefix="connector_") + model_config = SettingsConfigDict(env_prefix="connector_", extra="allow") id: str = Field( ..., diff --git a/external-import/google-ti-feeds/connector/src/stix/octi/models/indicator_model.py b/external-import/google-ti-feeds/connector/src/stix/octi/models/indicator_model.py index a1ebefc5d9e..2c30ec93fae 100644 --- a/external-import/google-ti-feeds/connector/src/stix/octi/models/indicator_model.py +++ b/external-import/google-ti-feeds/connector/src/stix/octi/models/indicator_model.py @@ -73,7 +73,7 @@ def create( "modified": kwargs.pop("modified", datetime.now()), "name": name, "description": description, - "indicator_types": indicator_types or [IndicatorTypeOV.MALICIOUS_ACTIVITY], + "indicator_types": indicator_types if indicator_types is not None else [], "pattern": pattern, "pattern_type": pattern_type, "valid_from": valid_from or datetime.now(), diff --git a/external-import/google-ti-feeds/connector/src/stix/octi/models/relationship_model.py b/external-import/google-ti-feeds/connector/src/stix/octi/models/relationship_model.py index d64e6a780d5..75669ad8b45 100644 --- a/external-import/google-ti-feeds/connector/src/stix/octi/models/relationship_model.py +++ b/external-import/google-ti-feeds/connector/src/stix/octi/models/relationship_model.py @@ -86,15 +86,6 @@ def create_from_report( """ description = kwargs.pop("description", None) - if description is None: - if report_name and target_name: - description = ( - f"Report '{report_name}' {relationship_type} '{target_name}'" - ) - elif report_name: - description = f"Report '{report_name}' {relationship_type} entity" - else: - description = f"Report {relationship_type} entity" return OctiRelationshipModel.create( relationship_type=relationship_type, diff --git a/external-import/google-ti-feeds/connector/src/utils/batch_processors/generic_batch_processor.py b/external-import/google-ti-feeds/connector/src/utils/batch_processors/generic_batch_processor.py index 4392dfcba6e..2eb8b1430b7 100644 --- a/external-import/google-ti-feeds/connector/src/utils/batch_processors/generic_batch_processor.py +++ b/external-import/google-ti-feeds/connector/src/utils/batch_processors/generic_batch_processor.py @@ -161,9 +161,6 @@ def process_current_batch(self) -> str | None: Configured exception class: If batch processing fails """ - if not self._current_batch: - return self._handle_empty_batch() - batch_items = self._current_batch.copy() self._current_batch.clear() @@ -224,24 +221,10 @@ def update_final_state(self) -> None: {"prefix": LOG_PREFIX, "error": str(state_err)}, ) else: - current_time = self.config.get_current_timestamp() self._logger.info( - "State update: Setting to current time", - { - "prefix": LOG_PREFIX, - "state_key": self.config.state_key, - "current_time": current_time, - }, + "State update skipped: no successfully ingested entity date tracked", + {"prefix": LOG_PREFIX, "state_key": self.config.state_key}, ) - try: - self._work_manager.update_state( - state_key=self.config.state_key, date_str=current_time - ) - except Exception as state_err: - self._logger.error( - "Failed to update final state with current time", - {"prefix": LOG_PREFIX, "error": str(state_err)}, - ) def get_statistics(self) -> dict[str, Any]: """Get processing statistics. @@ -292,42 +275,6 @@ def set_latest_date(self, date_str: str) -> None: if date_str and (not self._latest_date or date_str > self._latest_date): self._latest_date = date_str - def _handle_empty_batch(self) -> str | None: - """Handle processing of empty batches based on configuration. - - Returns: - None (empty batches don't create work) - - Raises: - Configured exception class: If empty_batch_behavior is 'error' - - """ - if self.config.empty_batch_behavior == "error": - raise self.config.create_exception("Cannot process empty batch") - - if self.config.empty_batch_behavior == "update_state": - current_time = self.config.get_current_timestamp() - self._logger.debug( - "Updating state with current time for empty batch", - {"prefix": LOG_PREFIX, "current_time": current_time}, - ) - try: - self._work_manager.update_state( - state_key=self.config.state_key, date_str=current_time - ) - self._latest_date = current_time - except Exception as state_err: - self._logger.warning( - "Failed to update state for empty batch", - {"prefix": LOG_PREFIX, "error": str(state_err)}, - ) - - self._logger.info( - "No items in batch to process", - {"prefix": LOG_PREFIX, "display_name": self.config.display_name}, - ) - return None - def _process_batch_with_retries( self, batch_items: list[Any], batch_num: int ) -> str: diff --git a/external-import/google-ti-feeds/connector/src/utils/batch_processors/generic_batch_processor_config.py b/external-import/google-ti-feeds/connector/src/utils/batch_processors/generic_batch_processor_config.py index 23e1196db0e..ea7ea66dfef 100644 --- a/external-import/google-ti-feeds/connector/src/utils/batch_processors/generic_batch_processor_config.py +++ b/external-import/google-ti-feeds/connector/src/utils/batch_processors/generic_batch_processor_config.py @@ -51,8 +51,6 @@ class GenericBatchProcessorConfig: validation_function: Callable[[Any], bool] | None = None """Function to validate individual items before adding to batch""" - empty_batch_behavior: str = "update_state" - """Behavior when processing empty batches: 'skip', 'update_state', or 'error'""" max_retries: int = 0 """Maximum number of retries for failed batch processing""" @@ -74,11 +72,6 @@ def __post_init__(self) -> None: else: self.display_name_singular = self.display_name - if self.empty_batch_behavior not in ("skip", "update_state", "error"): - raise ValueError( - "empty_batch_behavior must be 'skip', 'update_state', or 'error'" - ) - def format_work_name(self, batch_num: int, **kwargs: Any) -> str: """Format the work name with batch number and optional parameters. diff --git a/external-import/google-ti-feeds/connector/src/utils/fetchers/generic_fetcher.py b/external-import/google-ti-feeds/connector/src/utils/fetchers/generic_fetcher.py index b1ac80ff15a..09da77a9088 100644 --- a/external-import/google-ti-feeds/connector/src/utils/fetchers/generic_fetcher.py +++ b/external-import/google-ti-feeds/connector/src/utils/fetchers/generic_fetcher.py @@ -13,9 +13,16 @@ from connector.src.utils.api_engine.api_client import ApiClient from connector.src.utils.api_engine.exceptions.api_network_error import ApiNetworkError from connector.src.utils.fetchers.generic_fetcher_config import GenericFetcherConfig +from prometheus_client import Counter LOG_PREFIX = "[GenericFetcher]" +_ENDPOINT_CALL_COUNTER = Counter( + "google_ti_feeds_api_endpoint_calls", + "Count of API calls made by GenericFetcher for each Google TI Feeds API endpoint", + ["endpoint"], +) + class GenericFetcher: """Generic fetcher for any API endpoint with flexible response handling.""" @@ -43,6 +50,8 @@ def __init__( self.base_url = base_url self.logger = logger or logging.getLogger(__name__) + self._endpoint_counter: dict[str, Counter] = {} + self.headers = {} if base_headers: self.headers.update(base_headers) @@ -406,6 +415,14 @@ async def _make_api_call( }, ) + if self.config.endpoint not in self._endpoint_counter: + # Initialize a Prometheus counter for this endpoint if it doesn't exist + self._endpoint_counter[self.config.endpoint] = ( + _ENDPOINT_CALL_COUNTER.labels(endpoint=self.config.endpoint) + ) + + self._endpoint_counter[self.config.endpoint].inc() + response = await self.api_client.call_api( url=endpoint, method=self.config.method, diff --git a/external-import/google-ti-feeds/pyproject.toml b/external-import/google-ti-feeds/pyproject.toml index 099464ea5b8..65fd8e9bd70 100644 --- a/external-import/google-ti-feeds/pyproject.toml +++ b/external-import/google-ti-feeds/pyproject.toml @@ -18,13 +18,13 @@ classifiers = [ requires-python = ">=3.11, <3.13" dependencies = [ - "pycti==7.260309.0", + "pycti==7.260515.0", "aiohttp~=3.13.2", "Markdown~=3.10.0", "markdownify~=1.2.0", "pydantic~=2.11.7", "pydantic_settings~=2.11.0", - "python-dotenv~=1.1.1", + "python-dotenv~=1.2.2", "stix2~=3.0.1", "dotenv~= 0.9.9", "connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk", @@ -33,7 +33,7 @@ dependencies = [ [project.optional-dependencies] test = [ "isodate ~=0.7.2", - "pytest ~=8.4.1", + "pytest ~=9.0.3", "pytest-asyncio ~=1.2", "pytest-order ~=1.3.0", "polyfactory ~=2.22.1", diff --git a/external-import/google-ti-feeds/tests/custom/client_api/test_client_api_base.py b/external-import/google-ti-feeds/tests/custom/client_api/test_client_api_base.py new file mode 100644 index 00000000000..3ee297be6ad --- /dev/null +++ b/external-import/google-ti-feeds/tests/custom/client_api/test_client_api_base.py @@ -0,0 +1,131 @@ +"""Test module for BaseClientAPI pagination behavior.""" + +from types import SimpleNamespace +from typing import Any +from unittest.mock import AsyncMock, MagicMock + +import pytest +from connector.src.custom.client_api.client_api_base import BaseClientAPI + +# ===================== +# Fixtures +# ===================== + + +@pytest.fixture +def base_client() -> BaseClientAPI: + """Fixture for BaseClientAPI with mocked dependencies.""" + return BaseClientAPI( + config=SimpleNamespace(), + logger=MagicMock(), + api_client=MagicMock(), + fetcher_factory=MagicMock(), + ) + + +# ===================== +# Scenario: Pagination behavior +# ===================== + + +@pytest.mark.asyncio +async def test_paginate_with_cursor_reraises_fetch_errors( + base_client: BaseClientAPI, +) -> None: + """Test that pagination errors are propagated to callers.""" + # Given: A fetcher that fails with a quota error + fetcher = MagicMock() + fetcher.config = SimpleNamespace( + endpoint="/collections", + ) + fetcher.fetch_single = AsyncMock(side_effect=RuntimeError("Quota exceeded")) + + # When: Pagination is executed + results, exception = await _when_paginate_called( + client=base_client, + fetcher=fetcher, + initial_params={"limit": 40}, + entity_description="reports", + ) + + # Then: The quota error is re-raised and no results are yielded + _then_pagination_failed_with_error(exception) + _then_results_are(results, []) + + +@pytest.mark.asyncio +async def test_paginate_with_cursor_yields_data_on_success( + base_client: BaseClientAPI, +) -> None: + """Test that normal pagination flow yields API data.""" + # Given: A fetcher returning two successful pages + fetcher = MagicMock() + fetcher.config = SimpleNamespace( + endpoint="/collections", + ) + fetcher.fetch_single = AsyncMock( + side_effect=[ + { + "data": [{"id": "item-1"}], + "meta": {"cursor": "next-page", "count": 2}, + }, + { + "data": [{"id": "item-2"}], + "meta": {"count": 2}, + }, + ] + ) + + # When: Pagination is executed + results, exception = await _when_paginate_called( + client=base_client, + fetcher=fetcher, + initial_params={"limit": 40}, + entity_description="reports", + ) + + # Then: Results from both pages are returned in order + _then_pagination_succeeded(exception) + _then_results_are(results, [{"id": "item-1"}, {"id": "item-2"}]) + + +# ===================== +# GWT Helper Functions +# ===================== + + +async def _when_paginate_called( + client: BaseClientAPI, + fetcher: Any, + initial_params: dict[str, Any], + entity_description: str, +) -> tuple[list[Any], Exception | None]: + """Execute pagination and capture yielded results and exceptions.""" + results: list[Any] = [] + try: + async for page_data in client._paginate_with_cursor( + fetcher=fetcher, + initial_params=initial_params, + entity_description=entity_description, + ): + results.extend(page_data) + return results, None + except Exception as exc: + return results, exc + + +def _then_pagination_failed_with_error(exception: Exception | None) -> None: + """Assert that pagination failed with the expected error.""" + assert exception is not None # noqa: S101 + assert isinstance(exception, RuntimeError) # noqa: S101 + assert len(str(exception)) > 0 # noqa: S101 + + +def _then_pagination_succeeded(exception: Exception | None) -> None: + """Assert that pagination completed without errors.""" + assert exception is None # noqa: S101 + + +def _then_results_are(results: list[Any], expected_results: list[Any]) -> None: + """Assert that pagination results match expected values.""" + assert results == expected_results # noqa: S101 diff --git a/external-import/google-ti-feeds/tests/custom/debug_responses/attack_techniques_0d43e9f370138ee7.json b/external-import/google-ti-feeds/tests/custom/debug_responses/attack_techniques_0d43e9f370138ee7.json index f9b74977314..89cc48e0a97 100644 --- a/external-import/google-ti-feeds/tests/custom/debug_responses/attack_techniques_0d43e9f370138ee7.json +++ b/external-import/google-ti-feeds/tests/custom/debug_responses/attack_techniques_0d43e9f370138ee7.json @@ -1,49 +1,47 @@ -{ - "request_info": { - "endpoint": "https://www.virustotal.com/api/v3/attack_techniques/T0822", - "query_params": {}, - "entity_type": "attack_techniques", - "method": "GET" - }, - "response": { - "id": "T0822", - "type": "attack_technique", - "links": { - "self": "https://www.virustotal.com/api/v3/attack_techniques/T0822" - }, - "attributes": { - "info": { - "x_mitre_contributors": null, - "x_mitre_platforms": [ - "None" - ], - "x_mitre_is_subtechnique": false, - "x_mitre_permissions_required": null, - "x_mitre_version": "1.1", - "x_mitre_data_sources": [ - "Network Traffic: Network Traffic Flow", - "Logon Session: Logon Session Metadata", - "Application Log: Application Log Content" - ], - "x_mitre_detection": "", - "x_mitre_effective_permissions": null, - "x_mitre_defense_bypassed": null, - "x_mitre_remote_support": null, - "x_mitre_impact_type": null, - "x_mitre_system_requirements": null, - "x_mitre_tactic_type": null, - "x_mitre_deprecated": false, - "x_mitre_old_attack_id": null, - "x_mitre_network_requirements": null - }, - "revoked": false, - "name": "External Remote Services", - "creation_date": 1590083006, - "link": "https://attack.mitre.org/techniques/T0822/", - "stix_id": "attack-pattern--8d2f3bab-507c-4424-b58b-edc977bd215c", - "last_modification_date": 1744838776, - "description": "Adversaries may leverage external remote services as a point of initial access into your network. These services allow users to connect to internal network resources from external locations. Examples are VPNs, Citrix, and other access mechanisms. Remote service gateways often manage connections and credential authentication for these services. \nExternal remote services allow administration of a control system from outside the system. Often, vendors and internal engineering groups have access to external remote services to control system networks via the corporate network. In some cases, this access is enabled directly from the internet. While remote access enables ease of maintenance when a control system is in a remote area, compromise of remote access solutions is a liability. The adversary may use these services to gain access to and execute attacks against a control system network. Access to valid accounts is often a requirement. \nAs they look for an entry point into the control system network, adversaries may begin searching for existing point-to-point VPN implementations at trusted third party networks or through remote support employee connections where split tunneling is enabled. ", - "private": false - } - } -} \ No newline at end of file +{ + "request_info": { + "endpoint": "https://www.virustotal.com/api/v3/attack_techniques/T1482", + "query_params": {}, + "entity_type": "attack_techniques", + "method": "GET" + }, + "response": { + "id": "T1482", + "type": "attack_technique", + "links": { + "self": "https://www.virustotal.com/api/v3/attack_techniques/T1482" + }, + "attributes": { + "info": { + "x_mitre_contributors": null, + "x_mitre_platforms": ["None"], + "x_mitre_is_subtechnique": false, + "x_mitre_permissions_required": null, + "x_mitre_version": "1.1", + "x_mitre_data_sources": [ + "Network Traffic: Network Traffic Flow", + "Logon Session: Logon Session Metadata", + "Application Log: Application Log Content" + ], + "x_mitre_detection": "", + "x_mitre_effective_permissions": null, + "x_mitre_defense_bypassed": null, + "x_mitre_remote_support": null, + "x_mitre_impact_type": null, + "x_mitre_system_requirements": null, + "x_mitre_tactic_type": null, + "x_mitre_deprecated": false, + "x_mitre_old_attack_id": null, + "x_mitre_network_requirements": null + }, + "revoked": false, + "name": "Internal Lateral Movement Services", + "creation_date": 1591092115, + "link": "https://attack.mitre.org/techniques/T1482/", + "stix_id": "attack-pattern--3c7f1b2d-908a-4312-c47e-fab3dc291a4e", + "last_modification_date": 1744838776, + "description": "Adversaries may leverage internal lateral movement services as a point of persistence within your network. These services allow users to connect to internal network resources from adjacent segments. Examples are RDP, WinRM, and other access mechanisms. Remote service gateways often manage connections and credential authentication for these services. \nInternal lateral movement services allow administration of a control system from within the network perimeter. Often, operators and internal engineering groups have access to internal services to control system networks via the corporate intranet. In some cases, this access is enabled directly from the DMZ. While remote access enables ease of maintenance when a control system is in a segmented area, compromise of remote access solutions is a liability. The adversary may use these services to gain access to and execute attacks against a control system network. Access to valid accounts is often a requirement. \nAs they look for an entry point into the control system network, adversaries may begin searching for existing point-to-point VPN implementations at trusted third party networks or through remote support employee connections where split tunneling is enabled. ", + "private": false + } + } +} diff --git a/external-import/google-ti-feeds/tests/custom/debug_responses/campaigns_e3b0c44298fc1c14.json b/external-import/google-ti-feeds/tests/custom/debug_responses/campaigns_e3b0c44298fc1c14.json index 6f3059dbfbb..25abbcf9c62 100644 --- a/external-import/google-ti-feeds/tests/custom/debug_responses/campaigns_e3b0c44298fc1c14.json +++ b/external-import/google-ti-feeds/tests/custom/debug_responses/campaigns_e3b0c44298fc1c14.json @@ -10,10 +10,10 @@ "method": "GET" }, "response": { - "id": "campaign--6e13a583-6805-5dd6-a3df-7ddc57de2bdc", + "id": "campaign--1a2b3c4d-5e6f-7890-abcd-ef1234567890", "type": "collection", "links": { - "self": "https://www.virustotal.com/api/v3/collections/campaign--6e13a583-6805-5dd6-a3df-7ddc57de2bdc" + "self": "https://www.virustotal.com/api/v3/collections/campaign--1a2b3c4d-5e6f-7890-abcd-ef1234567890" }, "attributes": { "targeted_industries": [], @@ -22,13 +22,13 @@ { "description": null, "confidence": "unconfirmed", - "value": "2023-11-20T00:00:00Z", + "value": "2024-02-14T00:00:00Z", "last_seen": null, "first_seen": null } ], - "references_count": 14, - "name": "Exploitation of CVE-2023-4966 in Citrix Netscaler / ADC Appliances", + "references_count": 9, + "name": "Exploitation of CVE-2024-1234 in Lorem Ipsum Gateway Appliances", "tags_details": [], "version_history": [], "targeted_informations": [], @@ -50,12 +50,12 @@ } ], "risk_factors": [], - "description": "In October 2023, Mandiant initiated a Global Event in response to the exploitation of a zero-day vulnerability in Citrix Netscaler ADC and Gateway Security products. Exploitation involves an Improper Restriction of Operations within the Bounds of a Memory Buffer vulnerability (CVE-2023-4966) that allows an attacker to collect potentially sensitive information. A failed attempt at exploitation could potentially cause a crash of the application, resulting in a denial-of-service condition. This vulnerability was first disclosed to the public in October 2023, when the U.S. Cybersecurity and Infrastructure Security Agency (CISA) also added the vulnerability to their Exploited Catalog. Citrix has released a patch to mitigate this issue, and Mandiant suggests prioritizing these patches. \n\nMandiant has confirmed that multiple threat clusters driven by unknown motivations have exploited this vulnerability to gather data and gain initial access since August 2023. Impacted organizations have included both public and private sector entities based in the U.S. and Austria, although targeting is likely opportunistic and broader than directly observed, and subject to the geographic distribution of affected products. The targeting of edge infrastructure and technologies that do not support endpoint detection and response (EDR) solutions to gain persistence and traverse a victim's environment enables threat actors to avoid detection and complicate attribution.", + "description": "In February 2024, a fictitious research team initiated a Global Event in response to the exploitation of a zero-day vulnerability in Lorem Ipsum Gateway and Access products. Exploitation involves an Improper Restriction of Operations within the Bounds of a Memory Buffer vulnerability (CVE-2024-1234) that allows an attacker to collect potentially sensitive information. A failed attempt at exploitation could potentially cause a crash of the application, resulting in a denial-of-service condition. This vulnerability was first disclosed to the public in February 2024, when the fictitious national cybersecurity agency also added the vulnerability to their Exploited Catalog. The vendor has released a patch to mitigate this issue, and the research team suggests prioritizing these patches. \n\nResearchers have confirmed that multiple threat clusters driven by unknown motivations have exploited this vulnerability to gather data and gain initial access since September 2023. Impacted organizations have included both public and private sector entities based in the U.S. and Belgium, although targeting is likely opportunistic and broader than directly observed, and subject to the geographic distribution of affected products. The targeting of edge infrastructure and technologies that do not support endpoint detection and response (EDR) solutions to gain persistence and traverse a victim's environment enables threat actors to avoid detection and complicate attribution.", "domains_count": 1, "malware_roles": [], "field_sources": [], "recent_activity_summary": [7, 7, 7, 14, 3, 2, 7, 6, 3, 6, 4, 3, 3, 5], - "targeted_regions": ["US", "AU", "AT", "CA"], + "targeted_regions": ["US", "AU", "BE", "CA"], "targeted_regions_hierarchy": [ { "region": "Oceania", @@ -71,8 +71,8 @@ { "region": "Europe", "sub_region": "Western Europe", - "country": "Austria", - "country_iso2": "AT", + "country": "Belgium", + "country_iso2": "BE", "confidence": "confirmed", "first_seen": null, "last_seen": null, @@ -104,9 +104,9 @@ ], "first_seen_details": [ { - "description": "Mandiant Observed First Activity of Campaign", + "description": "Lorem Ipsum Observed First Activity of Campaign", "confidence": "unconfirmed", - "value": "2023-08-09T00:00:00Z", + "value": "2023-09-12T00:00:00Z", "last_seen": null, "first_seen": null } @@ -140,7 +140,7 @@ ], "ip_addresses_count": 27, "source_region": "US", - "origin": "Google Threat Intelligence", + "origin": "Lorem Ipsum Threat Intelligence", "exploitation_vectors": [], "targeted_industries_tree": [ { @@ -236,7 +236,7 @@ "attack_techniques": 106 }, "tags": [], - "last_modification_date": 1753912865, + "last_modification_date": 1754021974, "mitigations": [], "vulnerable_products": "", "urls_count": 0, @@ -249,11 +249,11 @@ "is_content_translated": false, "collection_links": [], "operating_systems": [], - "last_seen": 1700438400, + "last_seen": 1701547509, "workarounds": [], - "first_seen": 1691539200, + "first_seen": 1692648309, "private": true, - "alt_names": ["GLOBAL.23.004"], + "alt_names": ["GLOBAL.24.007"], "vendor_fix_references": [], "threat_scape": [], "recent_activity_relative_change": 0.14925373134328357, @@ -263,1444 +263,13 @@ { "description": null, "confidence": "confirmed", - "value": "GLOBAL.23.004", + "value": "GLOBAL.24.007", "last_seen": null, "first_seen": null } ], - "creation_date": 1698878816, - "aggregations": { - "domains": { - "communicating_files": [ - { - "value": "ed5d694d561c97b4d70efe934936286fe562addf7d6836f795b336d9791a5c44", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - } - ], - "downloaded_files": [ - { - "value": "ed5d694d561c97b4d70efe934936286fe562addf7d6836f795b336d9791a5c44", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", - "count": 1, - "total_related": 100000, - "prevalence": 0.00001 - } - ], - "urls": [ - { - "value": "http://adobe-us-updatefiles.digital/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://adobe-us-updatefiles.digital/$", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://adobe-us-updatefiles.digital/index.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://adobe-us-updatefiles.digital/index.php/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://adobe-us-updatefiles.digital/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://adobe-us-updatefiles.digital/123.ps1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://adobe-us-updatefiles.digital/index.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://adobe-us-updatefiles.digital/index.php/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://adobe-us-updatefiles.digital/index.php2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://adobe-us-updatefiles.digital/index.php~", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - } - ], - "registrant_names": [ - { - "value": "1f8f4166599d23ee", - "count": 1, - "total_related": 100000, - "prevalence": 0.00001 - } - ] - }, - "ip_addresses": { - "attributions": [ - { - "value": "whipweave", - "count": 1, - "total_related": 1520, - "prevalence": 0.0006578947368421052 - }, - { - "value": "meterpreter", - "count": 1, - "total_related": 3151, - "prevalence": 0.00031735956839098697 - }, - { - "value": "mirai", - "count": 1, - "total_related": 14046, - "prevalence": 0.00007119464616260858 - }, - { - "value": "metasploit", - "count": 1, - "total_related": 24498, - "prevalence": 0.00004081965874765287 - } - ], - "communicating_files": [ - { - "value": "013c29c08812411b8da0e8b811ade227f2d7c15e82cfd4f88328be6947acb71f", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "003f171386e88cc59fe12091634ed4454ea664a7c45f976f87fd6bdb684aab05", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "00717cf1973e3a18b3bc8237699c907bd7afbc48614b9d46f6634e77e105e2c5", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "009784dbb8d934054ec98ab60586cb7064d617c8f28fdd03d51271aa447ff316", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "0129fe7b6e06db832620d72bb9d5a7c9f3c70e33802d41aababcd3486434d6de", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "014f532918ad7fa1b01bbb8a556659dff706b1621e70016c7b9cc6ec28a62da8", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "0631a89f68921700be23aece8ea3cf1aa29ec4d50965c8cb6ab990899ea154b3", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "078ff994d96384d1734c4049743531f44729a2757bb2a47185b486dc04be7b28", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "098925559a963d485cc03884716d9684bb7d65bf3fca78135c77be1483f06253", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "0c03f024ec9b1a05afbd4d88463f9921600a6784d06f2bb52a7af0b81fcf3f73", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "01339013790756cb14c9b6bb5e047617bf6c15eff1cd58ef1dece8ce5a3e6c3e", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "026470a2f8a1edc1286f940f5444302ccbfc7a105b8b1e82a2ed63b4ad6f05c8", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "048931291a2789d5a97bc448cc7a9b2e9d55a14b01377036bbeafbe8ba9e4098", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "0626042a954a2848d94cbaa06f5f3112b50b0ec8e81364c734bbbac739e8a62d", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "0abf179addc08fd4613273637f9b66fb8f3eee709086f0e47a35d657289f7eca", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "0085212025ca998683ee4d275e62927d79d4cd14eef667cdb5871a97b222a7b8", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "022b43c639806d2215e22670af8c02213fc35d140bb0b83b65072e50bf2f1d95", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "050149b4d37d65560ce08347228ef41592f36ae2e94c9e4a05dc9f86dab3d644", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "051248e5ca487e92d52d21eadbab25b05a172c0338096e0b800d5de9344236f1", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "07865e1e1c0de0b6bb31a48b8bb2b12077021de6f4edc91088f78d574962398b", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "0a09c17afe509c0f04c26d42646711a686c9b58e4a134419fc8ddcaa2889214c", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "0ba7fc77cfdec4ede5e6b366675852b85bfdf453f0cf27254d31997b2864cc10", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "0c0553c78c4a9840ae06a21ea199d7931a22ebe34d8fc2643ed043808e76f512", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "01a5de6b96f789fa86b5683d111f5956b8e5c583323c93ef6af1c66a55ab9097", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "02ff9fb0b2abc9fe513651deaa24b03245caac626344cf6e13e5be4d4b5c2793", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "031e7657fc3adc508dd411bb5626d7e4f9fc74458ecffce3ca7f82b6628594f5", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "03c655128175d821fd52396092252af712d43c029a48e351e9e6be570c470981", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "0448b8e9cb6841169002c8ccb0acc4ce76259b2e7ff9a4c2b5626debf5d2a0b3", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "05da7831a789c3a404d4228ee0010dfca5412a800158cdf61728b03c673c6446", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "07a10c877d8230218b595d6a661646f5ee8f4a0aada03a2fe352c3a8f6e363df", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "0842cf38e162db241aa5ea594003f8d22513c5b3bc549c5fdf48bd8effb43428", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "08adb51467d078b09f9b225e756be4f50db720f4b6d05e26971b5863d2c4779d", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "01242fd5877618fcecf3a3c66a51d13b7972cfa1c3098f18d534f9b7e9881720", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "01f19bc94cab9d2a7a0eb70b9eaeeade718dbd3af4109d3b6c5151963e2f71cf", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "03e4c3301947fa6c56e275219ef229a668577aaf0092f16439d0c033b224661e", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "04c97b6f5168c03de9bf0b867d77a6b29e9e2ebf47a63f64e8ad66240ad200ea", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "06118b197d34b6525c008013775bf77eee1f105671ff4de355a65798e0a6dbaa", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "0aaa57576a0128051371c5cc64b205eea77f5a60cf2a8a2c2aced501f5cec952", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "013aa151d8b1bf08c78df04a33e20678e9074ec5338c455a52b41e0299ce1f04", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "01f67b1f1e441292d6e95f141f61ac028ce59f552184c1510de1707ea5049063", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "04ad04c2753449184a270d85519acdae9680d397312c3aa2714ad7f699d108c7", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "0945d5df2295c332cc7b80af1aed93c0b3da898fdc05983852f54dc4fb29bfa6", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "0171913794181469e6e72260d6ead7f01be6f9e785d65785869f9eda707246c3", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - }, - { - "value": "0386cb7dcf496d7f2211e71af7502653161df2dc0a1c4ba5c3dc7f5aa7f12360", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - }, - { - "value": "06e2285a5bd2e056e98ed49c90470a579754941cf9085808ef597e1c077937c3", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - }, - { - "value": "0a4fd27f67bd85f5413f14c7648b928a58682f0a2256145475d6a4c7249f4fbd", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - }, - { - "value": "0c33c3cc66783ac4d8eaf2b1945fe6a280ccf3047df3c11a7f358bb2e32dde61", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - }, - { - "value": "0308bb8f2badeb297237c79f0468f17510bafde59a3f8e0ade5b5854acc4eefd", - "count": 1, - "total_related": 14, - "prevalence": 0.07142857142857142 - }, - { - "value": "079b6448f4c36adb55099511f4b9dc42cbfe7a5d10e7d2679e4db6c214b17e25", - "count": 1, - "total_related": 14, - "prevalence": 0.07142857142857142 - }, - { - "value": "087e3029643c57cbf4e4854c34193827e8b61c9cc59a3a1f5386d3cc283254e5", - "count": 1, - "total_related": 15, - "prevalence": 0.06666666666666667 - }, - { - "value": "0640c4aab87860b76215945b634fdc8138b1bac80d6feaea09eef9f93f3d9125", - "count": 1, - "total_related": 16, - "prevalence": 0.0625 - }, - { - "value": "084e6d55df4c7b53b5147d7b483f9a03f9ce4a971918f74998dfbfab4cfe23e5", - "count": 1, - "total_related": 16, - "prevalence": 0.0625 - }, - { - "value": "00873276fbc116c8e7d74890b72d86e076b23c8d293a565bb675f0c70826bb67", - "count": 1, - "total_related": 17, - "prevalence": 0.058823529411764705 - }, - { - "value": "07cdb3a98a85d57ee4c26b9df477fcdc46bd5ba89af1074a4cbd30cd869787cd", - "count": 1, - "total_related": 17, - "prevalence": 0.058823529411764705 - }, - { - "value": "09b33989964d9620215919217530ef11cd8a1439da8725bbd28df4293e379dc6", - "count": 1, - "total_related": 17, - "prevalence": 0.058823529411764705 - }, - { - "value": "0adbae74be8dd5150490743a9c9fc833db0ac0bde64c1d6188098bccf621c9e7", - "count": 1, - "total_related": 17, - "prevalence": 0.058823529411764705 - }, - { - "value": "04697777fd7666053fbbcd97630ce7b1edeecea91d6b154b53a3bcf3f64a80d3", - "count": 1, - "total_related": 19, - "prevalence": 0.05263157894736842 - }, - { - "value": "0595c38598502f06152db01207632865a26d6109d27baecb1755a3420a024f5f", - "count": 1, - "total_related": 19, - "prevalence": 0.05263157894736842 - }, - { - "value": "075b5d2cf3f12233552dc816ee25a0afc482ffe9f3af1024a5dc0270cda53496", - "count": 1, - "total_related": 19, - "prevalence": 0.05263157894736842 - }, - { - "value": "0b1b5c191c546a759a22532f6d1f94ac34777e9a5d988aac4698ef6fb08c0efd", - "count": 1, - "total_related": 19, - "prevalence": 0.05263157894736842 - }, - { - "value": "03a9fb7ee683e175411a76851579e25373c56cf7325e6df77e895775d3f05ab5", - "count": 1, - "total_related": 20, - "prevalence": 0.05 - }, - { - "value": "040512e9f28d5d47aa828526faed5d01f30699b6aaefb1ab2a1c5d63a78f9913", - "count": 1, - "total_related": 20, - "prevalence": 0.05 - }, - { - "value": "0910cacdb4b0f0537fde80acb696e8c4b52dbd0542e9d5afedaac3e6f2cddda0", - "count": 1, - "total_related": 20, - "prevalence": 0.05 - }, - { - "value": "099124420232ee286cc927ac3787f2531dfdd684cb087253fc2847ac4f28b139", - "count": 1, - "total_related": 20, - "prevalence": 0.05 - }, - { - "value": "071a91730cf71c8de5fd363085b2b8b90f3d33dcdbd253c0ee6e12ebfc6aa759", - "count": 1, - "total_related": 21, - "prevalence": 0.047619047619047616 - }, - { - "value": "026b5f4d73cb2c885bc87d8bdc7332efd67064b1796f6f6192702c9622d046e5", - "count": 1, - "total_related": 22, - "prevalence": 0.045454545454545456 - }, - { - "value": "09e25b4f00f51071feb8340658115cd0f0363029824d4de71d6213187fbe8905", - "count": 1, - "total_related": 22, - "prevalence": 0.045454545454545456 - }, - { - "value": "058d172672703f383fb81bb89598bc8acdeb09ea0b31dd89fd57497a6f223e19", - "count": 1, - "total_related": 23, - "prevalence": 0.043478260869565216 - }, - { - "value": "07706a6d22e0478f2cc4903c98a5f844cafbaa90caf0d99d268241f157861698", - "count": 1, - "total_related": 23, - "prevalence": 0.043478260869565216 - }, - { - "value": "09e3c99008ef1eec9fac6603133a5caba56831552002437b795208c17f5dce58", - "count": 1, - "total_related": 23, - "prevalence": 0.043478260869565216 - }, - { - "value": "0a24179884457a3b4703e0aaa18dd763051bd6f3e2519508f3b99915bbdbc426", - "count": 1, - "total_related": 23, - "prevalence": 0.043478260869565216 - }, - { - "value": "015de6517877954c0de4bac35a36419e40fc0d65f2837bccaa4463714e417177", - "count": 1, - "total_related": 25, - "prevalence": 0.04 - }, - { - "value": "02bea87aaf700c9e9ac627318b41e4c97b0544cea8ef26ee17788e407aeb3930", - "count": 1, - "total_related": 25, - "prevalence": 0.04 - }, - { - "value": "058bcc12eeec1cb5bb5d16ea77443798cb5e55506f83a9c3e87f8095e0ea2ec6", - "count": 1, - "total_related": 26, - "prevalence": 0.038461538461538464 - }, - { - "value": "030b17c14423e4f9c4467214a7558efe47ee469220af6061375d1ea227dfc1ac", - "count": 1, - "total_related": 29, - "prevalence": 0.034482758620689655 - }, - { - "value": "09ddc77d18052899e46b60f966aefe23830421e990e40600a1c5e87b76e747b1", - "count": 1, - "total_related": 29, - "prevalence": 0.034482758620689655 - }, - { - "value": "004360a165b781977fa392db9d7a47d5ba8772eb1138e40505c65a01d525dada", - "count": 1, - "total_related": 30, - "prevalence": 0.03333333333333333 - }, - { - "value": "060ac51f03729b67849476b0cb956e7181fab8641d709a8b79fb8c1a4fcbb676", - "count": 1, - "total_related": 30, - "prevalence": 0.03333333333333333 - }, - { - "value": "088be3dcbfdae92ddb3b06728e2fcb3cee27cc4ee5c6c5b5b304d35814fa889e", - "count": 1, - "total_related": 30, - "prevalence": 0.03333333333333333 - }, - { - "value": "0a920e831a9425b615f0a14f51371cdbd4c4dfc422675827170953a24211a567", - "count": 1, - "total_related": 31, - "prevalence": 0.03225806451612903 - }, - { - "value": "034951a0395fc079812052af8958e5aa8b3eab52a00513fafd8c2aa260885a5c", - "count": 1, - "total_related": 32, - "prevalence": 0.03125 - }, - { - "value": "0921e58478a117b8b970e55ba3cab20ff7faccce31888f17990ddc1670601d4c", - "count": 1, - "total_related": 34, - "prevalence": 0.029411764705882353 - }, - { - "value": "019afd28256bc30cdec81aae88f5d219eaef96be40bde2b25c3adb8d74a8541d", - "count": 1, - "total_related": 36, - "prevalence": 0.027777777777777776 - }, - { - "value": "0c51926f05e7ecb0331f7ea137abee67caef9067be02b1edb0fad5cd724127c3", - "count": 1, - "total_related": 37, - "prevalence": 0.02702702702702703 - }, - { - "value": "09c013a7056b000168998a521a14f3442bd30bf0b8ac8bdcda8ca222ebb05790", - "count": 1, - "total_related": 40, - "prevalence": 0.025 - }, - { - "value": "0a4dd300fbfcd87485e2d26f497d19c72e84edb4f74a13b2e3ea18673a6501d3", - "count": 1, - "total_related": 40, - "prevalence": 0.025 - }, - { - "value": "01638f004d4528061bc92625d58ac31f727113a40204b791bf1905d93b3ffb87", - "count": 1, - "total_related": 42, - "prevalence": 0.023809523809523808 - }, - { - "value": "066507120efec3a0b46b2737c1212441fcf8c7ed908beca5b8091e9e18b8e6e9", - "count": 1, - "total_related": 43, - "prevalence": 0.023255813953488372 - }, - { - "value": "0685130f1e0a3312bc9db0f58e20dcbc22c23eef5132e3f4a69e2b8d7a8bb6e3", - "count": 1, - "total_related": 44, - "prevalence": 0.022727272727272728 - }, - { - "value": "0ae320fd6c91f30952eb0935a49d88856f5791cf19dc668e39d3882316743ee8", - "count": 1, - "total_related": 48, - "prevalence": 0.020833333333333332 - }, - { - "value": "00350587b629ab43262250660b659b35748c017c33cdeed5f4a28d81eb1bee2d", - "count": 1, - "total_related": 49, - "prevalence": 0.02040816326530612 - }, - { - "value": "04c795cd23ed1fa640d10422af4cc4c36fbd9c4ed468ff4a33f4934b23637c52", - "count": 1, - "total_related": 49, - "prevalence": 0.02040816326530612 - }, - { - "value": "093872d9ec84565ae046573b05fd5197d82997968caf7e26336a23c2cb8c3b53", - "count": 1, - "total_related": 55, - "prevalence": 0.01818181818181818 - }, - { - "value": "0bcd426e4d286919cc66497817373e7ca4c0c154cfd6b985200b92fe295df9c1", - "count": 1, - "total_related": 57, - "prevalence": 0.017543859649122806 - }, - { - "value": "0667bf5c6f885134811ef8608d8fc2b559068a5c3f2b6b069408671b14db5eca", - "count": 1, - "total_related": 62, - "prevalence": 0.016129032258064516 - }, - { - "value": "0a0fa4fe54c4986dd4535795cd9f49f2ddedb792d51dc69e3f18d2c7e8dcedef", - "count": 1, - "total_related": 69, - "prevalence": 0.014492753623188406 - }, - { - "value": "00d65673a38f3596ca0bba76a12b59adb3b127d52e4d376d4e7e26413b07573f", - "count": 1, - "total_related": 77, - "prevalence": 0.012987012987012988 - }, - { - "value": "03ebae51a4174fe378d728ed3c152af0c785ec7ca9592d8b55f8e49a26579228", - "count": 1, - "total_related": 81, - "prevalence": 0.012345679012345678 - }, - { - "value": "0a19e1ce165a16fe62b8791f2bff38dfb88ca0591fda2cd0c59db9a72420b03c", - "count": 1, - "total_related": 90, - "prevalence": 0.011111111111111112 - }, - { - "value": "06c0a62394a0a5f44b9368cfb0d969a4414682c1f0102f723bc1cb3603c465a8", - "count": 1, - "total_related": 105, - "prevalence": 0.009523809523809525 - } - ], - "downloaded_files": [ - { - "value": "6e24d74ebc881e1e97331bb72d6edee8431485a8a0cafd7c4a913a3819817b84", - "count": 2, - "total_related": 17174, - "prevalence": 0.0001164551065564225 - }, - { - "value": "a31fa060fca32efa78eec2bcb6c46cd3d0c6d63f07444b58a64376d50d760553", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "58189cbd4e6dc0c7d8e66b6a6f75652fc9f4afc7ce0eba7d67d8c3feb0d5381f", - "count": 1, - "total_related": 87, - "prevalence": 0.011494252873563218 - }, - { - "value": "bd5e20a01410e913c8a02fbbaa6422c7deb768f34486c060c4efcf4a6f6c6957", - "count": 1, - "total_related": 132, - "prevalence": 0.007575757575757576 - }, - { - "value": "07cc9ced9e5ad4b52a06fd244b30a47c183ccef20834eea011881d6096fa0353", - "count": 1, - "total_related": 552, - "prevalence": 0.0018115942028985507 - }, - { - "value": "e4d1318baabd1316a645ed86cd0cfb4320a1ba5b60cffe91381ed6f1f6ba9741", - "count": 1, - "total_related": 4338, - "prevalence": 0.0002305209774089442 - }, - { - "value": "fe5cb372aa2fc74c4e1458045868e7d13c64ea2f48640a8e9bea6ab15a5bd9fb", - "count": 1, - "total_related": 4808, - "prevalence": 0.00020798668885191348 - }, - { - "value": "8d70b3e6badb6973663b398d297bb32eaedd08826a1af98d0a1cfce5324ffce0", - "count": 1, - "total_related": 6261, - "prevalence": 0.00015971889474524837 - }, - { - "value": "533a1ca5d6595793725bca7641d9461a0f00dd1732dded3e4281196f5dd21736", - "count": 1, - "total_related": 8852, - "prevalence": 0.00011296882060551288 - }, - { - "value": "77df749f6bbe85442500437f7e798f46b9635da344811ae3b4bf7d43048ee9bb", - "count": 1, - "total_related": 12694, - "prevalence": 0.00007877737513786041 - }, - { - "value": "9c8c654fe26ffff624d54b10e91c30938ac4019fe8c64eb6d739783b9b5f10d0", - "count": 1, - "total_related": 30730, - "prevalence": 0.00003254149040026033 - }, - { - "value": "8548215da9bc3fa053e973155fb99462a65aea8b9ee8f6419a1d2c11ca0189f6", - "count": 1, - "total_related": 56361, - "prevalence": 0.000017742765387413283 - }, - { - "value": "3c8cc37a98346bd0123b35e5ccd87bd07d69914dae04f8b49f61c150d96e9d1f", - "count": 1, - "total_related": 93600, - "prevalence": 0.000010683760683760684 - }, - { - "value": "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", - "count": 2, - "total_related": 100000, - "prevalence": 0.00002 - }, - { - "value": "38ffd4972ae513a0c79a8be4573403edcd709f0f572105362b08ff50cf6de521", - "count": 2, - "total_related": 100000, - "prevalence": 0.00002 - }, - { - "value": "2c3adc6b6fb69d3a4e7b75b64e913dc96d21dbaf436bf69e773589b6a6952c47", - "count": 1, - "total_related": 100000, - "prevalence": 0.00001 - }, - { - "value": "fb47468a2cd3953c7131431991afcc6a2703f14640520102eea0a685a7e8d6de", - "count": 1, - "total_related": 100000, - "prevalence": 0.00001 - } - ], - "urls": [ - { - "value": "http://103.140.186.146/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://110.235.236.88/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://155.94.208.144/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://168.100.11.35/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://169.150.196.39/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://172.86.75.141/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://172.86.75.141/1.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://172.86.75.141/2.dll", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://172.86.75.141/index.php(", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://172.86.75.141/index.php86g", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://172.86.75.141/index.phpJ", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://172.86.75.141/x", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://185.112.82.109/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://185.236.231.74/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://188.126.94.46/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://193.70.71.112/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://206.166.251.8/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://206.166.251.8/calc.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://206.166.251.8/index.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://217.182.199.126/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://23.30.25.177/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://23.62.222.58/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://23.94.197.143/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://35.158.56.195/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://45.14.71.12/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://50.232.120.126/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://50.250.225.213/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://61.195.145.68/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://80.76.51.13/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://80.76.51.13:3790/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://81.161.229.113/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://81.161.229.113/asd.zip", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://81.161.229.113:55579/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://81.19.135.217/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://81.19.135.219/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://81.19.135.219/AnyDesk.msi", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://81.19.135.219/F8PtZ87fE8dJWqe.hta", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://81.19.135.219/f8ptz87fe8djwqe.hta", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://81.19.135.219/q0X5wzEh6P7.hta", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://81.19.135.219/q0x5wzeh6p7.hta", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://81.19.135.219:4321/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://81.19.135.219:443/MIDR98KuvzM2pzp.hta", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://81.19.135.219:443/QfJzVIfbQT0H.hta", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://81.19.135.219:443/XDYL3a9GDheDbRQ.hta", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://81.19.135.219:443/q0X5wzEh6P7.hta", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://81.19.135.219:443/q0x5wzeh6p7.hta", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://81.19.135.219:443/ttuq8ECceo9.hta", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://83.97.73.87/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://83.97.73.87/favicon.ico", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://83.97.73.87/solr/admin/info/system?wt=json", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://83.97.73.87/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://83.97.73.87:443/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://83.97.73.87:9000/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://95.101.23.43/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://95.101.23.81/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://admiralx-407.ru/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://androcloud-static.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://checkthis.live/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://connectinghere.cam/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://cpanel.my-apple-wallet-id4.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://gosignhere.digital/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://ip112.ip-193-70-71.eu/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://maplehot.party/ff584cf1ae33dc2800/4w356lj2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://my-amazon-login.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://my-apple-wallet-id4.com/_resources/media", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://no-tjenester.top/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://preservla.com/ff0d0fe1f8627ec800/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://signupherenow.cam/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://sli.law360news.com/imp?s=125919412&li=142&m=e71882d5c1924f6d642c1ed491308a2b&p=159760", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://www.together2night.com/aff.php?data2=wqjli5rdj9eknog93dkn781l&utm_funnel=tds&tds_ps=a&tds_oid=4375779&tdsId=b1853pet_lp_a_1618412475605_t2n&utm_campaign=497f5345&utm_source=int&p_tds_cid=&tds_path=/tds/ae&_disAL=true&utm_sub=opnfnl&tds_ao=1&btUrl=aHR0cHM6Ly9yb21hbmNldGFzdGljLmNvbS90ZHMvYWUvY2Ivcy9mZDY3ZjIyZmI0NDIwN2Y5ZGQxM2FlM2I0Njk2ODRlMT9fX3Q9MTc0NjAwMzQ1OTQyOCZfX2w9MzYwMCZfX2M9NTA1OWMzZmZhMDk4NDk4ZmJkODY1ZTk0MTc0YWU1ZmM0NmIzMmRhZA==&s1=ps&tds_id=b1853pet_lp_a_1618412475605_t2n&tds_reason=direct&gf=2168&utm_ex=a&tds_ac_id=s7017yas&dynamicpage=all_wlp_5st_halfphoto_v2_a&s3=wqjli5rdj9eknog93dkn781l&tds_cid=5059c3ffa098498fbd865e94174ae5fc46b32dad&tds_campaign=b1853pet&tds_host=romancetastic.com&dci=c43fbd58d3482463603230709b51212047f7efc0&utm_content=0d74cbe8-f881-4e63-b725-8a597feef9fb", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://103.140.186.146/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://155.94.208.144/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://168.100.11.35/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://169.150.196.39/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://172.86.75.141/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://172.86.75.141/1.exe/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://185.112.82.109/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://185.236.231.74/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://188.126.94.46/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://193.70.71.112/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://206.166.251.8/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://217.182.199.126/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://23.30.25.177/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://35.158.56.195/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://45.14.71.12/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://50.232.120.126/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://50.232.120.126:4443/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://50.250.225.213/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://61.195.145.68/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://canadapos-ptc.buzz/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://cdnsync.com/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://king-oreoo-36.com/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://konto-bestaetigen.de/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://mpoxl-bth.xyz/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://duasinggit.shop/", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "http://jap77oke.rest/", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "http://maplehot.party/", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "http://my-apple-wallet-id4.com/", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "http://www.oewheelsllc.com/", - "count": 1, - "total_related": 14, - "prevalence": 0.07142857142857142 - }, - { - "value": "http://antitrots.ru/", - "count": 1, - "total_related": 15, - "prevalence": 0.06666666666666667 - } - ] - } - } + "creation_date": 1699987925, + "aggregations": {} }, "context_attributes": { "shared_with_me": false, diff --git a/external-import/google-ti-feeds/tests/custom/debug_responses/domains_fde7a8d003bd07cc.json b/external-import/google-ti-feeds/tests/custom/debug_responses/domains_fde7a8d003bd07cc.json index ff0fba302e5..31a608f1ac9 100644 --- a/external-import/google-ti-feeds/tests/custom/debug_responses/domains_fde7a8d003bd07cc.json +++ b/external-import/google-ti-feeds/tests/custom/debug_responses/domains_fde7a8d003bd07cc.json @@ -1,824 +1,153 @@ -{ - "request_info": { - "endpoint": "https://www.virustotal.com/api/v3/domains/computadorpj.com", - "query_params": {}, - "entity_type": "domains", - "method": "GET" - }, - "response": { - "id": "computadorpj.com", - "type": "domain", - "links": { - "self": "https://www.virustotal.com/api/v3/domains/computadorpj.com" - }, - "attributes": { - "categories": { - "alphaMountain.ai": "Phishing (alphaMountain.ai)" - }, - "creation_date": 1728518400, - "favicon": null, - "gti_assessment": null, - "jarm": "2ad2ad0002ad2ad00042d42d00000000f78d2dc0ce6e5bbc5b8149a4872356", - "last_analysis_date": 1747645667, - "last_analysis_results": { - "Acronis": { - "category": "harmless", - "engine_name": "Acronis", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "0xSI_f33d": { - "category": "undetected", - "engine_name": "0xSI_f33d", - "engine_version": null, - "method": "blacklist", - "result": "unrated" - }, - "Abusix": { - "category": "harmless", - "engine_name": "Abusix", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "ADMINUSLabs": { - "category": "harmless", - "engine_name": "ADMINUSLabs", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "Axur": { - "category": "undetected", - "engine_name": "Axur", - "engine_version": null, - "method": "blacklist", - "result": "unrated" - }, - "Criminal IP": { - "category": "harmless", - "engine_name": "Criminal IP", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "AILabs (MONITORAPP)": { - "category": "harmless", - "engine_name": "AILabs (MONITORAPP)", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "AlienVault": { - "category": "harmless", - "engine_name": "AlienVault", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "alphaMountain.ai": { - "category": "malicious", - "engine_name": "alphaMountain.ai", - "engine_version": null, - "method": "blacklist", - "result": "phishing" - }, - "AlphaSOC": { - "category": "undetected", - "engine_name": "AlphaSOC", - "engine_version": null, - "method": "blacklist", - "result": "unrated" - }, - "Antiy-AVL": { - "category": "harmless", - "engine_name": "Antiy-AVL", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "ArcSight Threat Intelligence": { - "category": "malicious", - "engine_name": "ArcSight Threat Intelligence", - "engine_version": null, - "method": "blacklist", - "result": "phishing" - }, - "AutoShun": { - "category": "undetected", - "engine_name": "AutoShun", - "engine_version": null, - "method": "blacklist", - "result": "unrated" - }, - "benkow.cc": { - "category": "harmless", - "engine_name": "benkow.cc", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "Bfore.Ai PreCrime": { - "category": "undetected", - "engine_name": "Bfore.Ai PreCrime", - "engine_version": null, - "method": "blacklist", - "result": "unrated" - }, - "BitDefender": { - "category": "malicious", - "engine_name": "BitDefender", - "engine_version": null, - "method": "blacklist", - "result": "phishing" - }, - "Bkav": { - "category": "undetected", - "engine_name": "Bkav", - "engine_version": null, - "method": "blacklist", - "result": "unrated" - }, - "Blueliv": { - "category": "harmless", - "engine_name": "Blueliv", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "Certego": { - "category": "harmless", - "engine_name": "Certego", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "Chong Lua Dao": { - "category": "harmless", - "engine_name": "Chong Lua Dao", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "CINS Army": { - "category": "harmless", - "engine_name": "CINS Army", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "Cluster25": { - "category": "undetected", - "engine_name": "Cluster25", - "engine_version": null, - "method": "blacklist", - "result": "unrated" - }, - "CRDF": { - "category": "harmless", - "engine_name": "CRDF", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "CSIS Security Group": { - "category": "undetected", - "engine_name": "CSIS Security Group", - "engine_version": null, - "method": "blacklist", - "result": "unrated" - }, - "Snort IP sample list": { - "category": "harmless", - "engine_name": "Snort IP sample list", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "CMC Threat Intelligence": { - "category": "harmless", - "engine_name": "CMC Threat Intelligence", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "Cyan": { - "category": "undetected", - "engine_name": "Cyan", - "engine_version": null, - "method": "blacklist", - "result": "unrated" - }, - "Cyble": { - "category": "harmless", - "engine_name": "Cyble", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "CyRadar": { - "category": "malicious", - "engine_name": "CyRadar", - "engine_version": null, - "method": "blacklist", - "result": "malicious" - }, - "DNS8": { - "category": "harmless", - "engine_name": "DNS8", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "Dr.Web": { - "category": "harmless", - "engine_name": "Dr.Web", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "Ermes": { - "category": "undetected", - "engine_name": "Ermes", - "engine_version": null, - "method": "blacklist", - "result": "unrated" - }, - "ESET": { - "category": "malicious", - "engine_name": "ESET", - "engine_version": null, - "method": "blacklist", - "result": "phishing" - }, - "ESTsecurity": { - "category": "harmless", - "engine_name": "ESTsecurity", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "EmergingThreats": { - "category": "harmless", - "engine_name": "EmergingThreats", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "Emsisoft": { - "category": "harmless", - "engine_name": "Emsisoft", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "Forcepoint ThreatSeeker": { - "category": "undetected", - "engine_name": "Forcepoint ThreatSeeker", - "engine_version": null, - "method": "blacklist", - "result": "unrated" - }, - "Fortinet": { - "category": "malicious", - "engine_name": "Fortinet", - "engine_version": null, - "method": "blacklist", - "result": "phishing" - }, - "G-Data": { - "category": "malicious", - "engine_name": "G-Data", - "engine_version": null, - "method": "blacklist", - "result": "phishing" - }, - "GCP Abuse Intelligence": { - "category": "undetected", - "engine_name": "GCP Abuse Intelligence", - "engine_version": null, - "method": "blacklist", - "result": "unrated" - }, - "Google Safebrowsing": { - "category": "harmless", - "engine_name": "Google Safebrowsing", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "GreenSnow": { - "category": "harmless", - "engine_name": "GreenSnow", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "Gridinsoft": { - "category": "undetected", - "engine_name": "Gridinsoft", - "engine_version": null, - "method": "blacklist", - "result": "unrated" - }, - "Heimdal Security": { - "category": "harmless", - "engine_name": "Heimdal Security", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "Hunt.io Intelligence": { - "category": "undetected", - "engine_name": "Hunt.io Intelligence", - "engine_version": null, - "method": "blacklist", - "result": "unrated" - }, - "IPsum": { - "category": "harmless", - "engine_name": "IPsum", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "Juniper Networks": { - "category": "harmless", - "engine_name": "Juniper Networks", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "Kaspersky": { - "category": "harmless", - "engine_name": "Kaspersky", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "Lionic": { - "category": "malicious", - "engine_name": "Lionic", - "engine_version": null, - "method": "blacklist", - "result": "phishing" - }, - "Lumu": { - "category": "undetected", - "engine_name": "Lumu", - "engine_version": null, - "method": "blacklist", - "result": "unrated" - }, - "MalwarePatrol": { - "category": "harmless", - "engine_name": "MalwarePatrol", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "MalwareURL": { - "category": "undetected", - "engine_name": "MalwareURL", - "engine_version": null, - "method": "blacklist", - "result": "unrated" - }, - "Malwared": { - "category": "harmless", - "engine_name": "Malwared", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "Mimecast": { - "category": "undetected", - "engine_name": "Mimecast", - "engine_version": null, - "method": "blacklist", - "result": "unrated" - }, - "Netcraft": { - "category": "undetected", - "engine_name": "Netcraft", - "engine_version": null, - "method": "blacklist", - "result": "unrated" - }, - "OpenPhish": { - "category": "harmless", - "engine_name": "OpenPhish", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "Phishing Database": { - "category": "harmless", - "engine_name": "Phishing Database", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "PhishFort": { - "category": "undetected", - "engine_name": "PhishFort", - "engine_version": null, - "method": "blacklist", - "result": "unrated" - }, - "PhishLabs": { - "category": "undetected", - "engine_name": "PhishLabs", - "engine_version": null, - "method": "blacklist", - "result": "unrated" - }, - "Phishtank": { - "category": "harmless", - "engine_name": "Phishtank", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "PREBYTES": { - "category": "harmless", - "engine_name": "PREBYTES", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "PrecisionSec": { - "category": "undetected", - "engine_name": "PrecisionSec", - "engine_version": null, - "method": "blacklist", - "result": "unrated" - }, - "Quick Heal": { - "category": "harmless", - "engine_name": "Quick Heal", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "Quttera": { - "category": "harmless", - "engine_name": "Quttera", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "SafeToOpen": { - "category": "undetected", - "engine_name": "SafeToOpen", - "engine_version": null, - "method": "blacklist", - "result": "unrated" - }, - "Sansec eComscan": { - "category": "undetected", - "engine_name": "Sansec eComscan", - "engine_version": null, - "method": "blacklist", - "result": "unrated" - }, - "Scantitan": { - "category": "harmless", - "engine_name": "Scantitan", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "SCUMWARE.org": { - "category": "harmless", - "engine_name": "SCUMWARE.org", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "Seclookup": { - "category": "harmless", - "engine_name": "Seclookup", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "SecureBrain": { - "category": "undetected", - "engine_name": "SecureBrain", - "engine_version": null, - "method": "blacklist", - "result": "unrated" - }, - "SOCRadar": { - "category": "undetected", - "engine_name": "SOCRadar", - "engine_version": null, - "method": "blacklist", - "result": "unrated" - }, - "Sophos": { - "category": "malicious", - "engine_name": "Sophos", - "engine_version": null, - "method": "blacklist", - "result": "phishing" - }, - "Spam404": { - "category": "harmless", - "engine_name": "Spam404", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "StopForumSpam": { - "category": "harmless", - "engine_name": "StopForumSpam", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "Sucuri SiteCheck": { - "category": "harmless", - "engine_name": "Sucuri SiteCheck", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "ThreatHive": { - "category": "harmless", - "engine_name": "ThreatHive", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "Threatsourcing": { - "category": "harmless", - "engine_name": "Threatsourcing", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "Trustwave": { - "category": "harmless", - "engine_name": "Trustwave", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "Underworld": { - "category": "undetected", - "engine_name": "Underworld", - "engine_version": null, - "method": "blacklist", - "result": "unrated" - }, - "URLhaus": { - "category": "harmless", - "engine_name": "URLhaus", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "URLQuery": { - "category": "undetected", - "engine_name": "URLQuery", - "engine_version": null, - "method": "blacklist", - "result": "unrated" - }, - "Viettel Threat Intelligence": { - "category": "harmless", - "engine_name": "Viettel Threat Intelligence", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "VIPRE": { - "category": "undetected", - "engine_name": "VIPRE", - "engine_version": null, - "method": "blacklist", - "result": "unrated" - }, - "VX Vault": { - "category": "harmless", - "engine_name": "VX Vault", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "ViriBack": { - "category": "harmless", - "engine_name": "ViriBack", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "Webroot": { - "category": "malicious", - "engine_name": "Webroot", - "engine_version": null, - "method": "blacklist", - "result": "malicious" - }, - "Yandex Safebrowsing": { - "category": "harmless", - "engine_name": "Yandex Safebrowsing", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "ZeroCERT": { - "category": "harmless", - "engine_name": "ZeroCERT", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "desenmascara.me": { - "category": "harmless", - "engine_name": "desenmascara.me", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "malwares.com URL checker": { - "category": "harmless", - "engine_name": "malwares.com URL checker", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "securolytics": { - "category": "harmless", - "engine_name": "securolytics", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "Xcitium Verdict Cloud": { - "category": "harmless", - "engine_name": "Xcitium Verdict Cloud", - "engine_version": null, - "method": "blacklist", - "result": "clean" - }, - "zvelo": { - "category": "undetected", - "engine_name": "zvelo", - "engine_version": null, - "method": "blacklist", - "result": "unrated" - }, - "ZeroFox": { - "category": "undetected", - "engine_name": "ZeroFox", - "engine_version": null, - "method": "blacklist", - "result": "unrated" - } - }, - "last_analysis_stats": { - "harmless": 54, - "malicious": 10, - "suspicious": 0, - "timeout": 0, - "undetected": 30 - }, - "last_dns_records": [ - { - "expire": null, - "flag": null, - "minimum": null, - "priority": null, - "refresh": null, - "rname": null, - "retry": null, - "serial": null, - "tag": null, - "ttl": 21600, - "type": "NS", - "value": "arturo.ns.cloudflare.com" - }, - { - "expire": 604800, - "flag": null, - "minimum": 1800, - "priority": null, - "refresh": 10000, - "rname": "dns.cloudflare.com", - "retry": 2400, - "serial": 2369357942, - "tag": null, - "ttl": 1800, - "type": "SOA", - "value": "arturo.ns.cloudflare.com" - }, - { - "expire": null, - "flag": null, - "minimum": null, - "priority": null, - "refresh": null, - "rname": null, - "retry": null, - "serial": null, - "tag": null, - "ttl": 21600, - "type": "NS", - "value": "penny.ns.cloudflare.com" - }, - { - "expire": null, - "flag": null, - "minimum": null, - "priority": null, - "refresh": null, - "rname": null, - "retry": null, - "serial": null, - "tag": null, - "ttl": 300, - "type": "A", - "value": "107.174.231.26" - } - ], - "last_dns_records_date": 1747702214, - "last_https_certificate": { - "cert_signature": { - "signature_algorithm": "sha256RSA", - "signature": "7582102baaad22a6fba7202029a427a2d816ebff965cc2317b070dbae46c76d9770d2fd2d42f4c136d42fec9837045047f463d8dc510d4b936160878b4b8ca51027ef4786915e8e280951b403da311bbc81710950a67ec621b2e0d7214aa65152d3ccd9b45625af102e23466bf7b7f777a3a04b2bafb8b86924b4b05591975070e6ae6d19f34a629949bd476c9ed7dda78d6f29b3a09b5d6eccf007acfacf28eca8272fb01cd01f77dcf7ebbb64a22f8714da063cc8d6d6e1db92012c439f57400cf9af567e3d686c5448c8c32684e02290ce6a533ad471b948048b2c65d5b762b1bd8162a1d1891bde8406f61d04b8598d2151bc6589399ac46abf334c4432d" - }, - "extensions": { - "key_usage": [ - "digitalSignature", - "keyEncipherment" - ], - "extended_key_usage": [ - "serverAuth", - "clientAuth" - ], - "CA": false, - "subject_key_identifier": "89b3e89c6a94e31cf4ed18e989fe958c5f956511", - "authority_key_identifier": { - "keyid": "c5cf46a4eaf4c3c07a6c95c42db05e922f26e3b9" - }, - "ca_information_access": { - "OCSP": "http://r11.o.lencr.org", - "CA Issuers": "http://r11.i.lencr.org/" - }, - "subject_alternative_name": [ - "*.nfe-fiscal.com" - ], - "certificate_policies": [ - "2.23.140.1.2.1" - ], - "crl_distribution_points": [ - "http://r11.c.lencr.org/89.crl" - ], - "1.3.6.1.4.1.11129.2.4.2": "0481f400f2007700ccfb0f6a85710965fe959b53cee9b27c22e9855c0d978db6" - }, - "validity": { - "not_after": "2025-06-11 13:47:11", - "not_before": "2025-03-13 13:47:12" - }, - "size": 1318, - "version": "V3", - "public_key": { - "algorithm": "RSA", - "rsa": { - "modulus": "b2769024c2119ff8b75ddca5dcf2710d5b9bfe3f31486bf6d630bcdb28ab15388bb0f92139b69fc8aab6c89b851181009c2da7fd22af4570353257cf03f37111050620845e2f199ba21a04e33788f8f4f6335e561ab8c7ee449db145114e916e13f1ce079b0e7c01e98a9da43d3f62e10deab84bfe5e66070bc36d75de5961783221418d57f738b832147311d63a9aad5ce603d93725df13790be391f8395a85786ba1b4cd2b461be8f9baedabc1664342a68cc52f97c172542b8e6daee29ebbb030901f3ed9dbe0787ea0d7107a90c668c44d45c60d00676fb84a929a19ef76fca32b945ac8f9231bbc08a69e55d27b4e110de51ec3788885a50a9a58268f59", - "exponent": "10001", - "key_size": 2048 - } - }, - "thumbprint_sha256": "60781fb95aa71bf2212001ca0189baabaff5e55c5bb2f8fcda5d9cabcf15e523", - "thumbprint": "9aaf9a0ffd5546b4e65b8eb19a48e34bdd42dfb1", - "serial_number": "5767530c3396f623bb29169458f9cae13d8", - "issuer": { - "C": "US", - "O": "Let's Encrypt", - "CN": "R11" - }, - "subject": { - "CN": "*.nfe-fiscal.com" - } - }, - "last_https_certificate_date": 1747702214, - "last_modification_date": 1749036287, - "last_update_date": 1728518400, - "popularity_ranks": {}, - "registrar": null, - "reputation": 0, - "tags": [], - "total_votes": { - "harmless": 0, - "malicious": 0 - }, - "whois": "Administrative city: DATA REDACTED\nAdministrative country: DATA REDACTED\nAdministrative state: DATA REDACTED\nBilling city: DATA REDACTED\nBilling country: DATA REDACTED\nBilling state: DATA REDACTED\nCreate date: 2024-10-10 00:00:00\nDomain name: computadorpj.com\nDomain registrar id: 1910\nDomain registrar url: https://www.cloudflare.com\nExpiry date: 2025-10-10 00:00:00\nName server 1: penny.ns.cloudflare.com\nName server 2: arturo.ns.cloudflare.com\nQuery time: 2024-10-11 11:37:23\nRegistrant city: acfd0ee3752cd95d\nRegistrant company: acfd0ee3752cd95d\nRegistrant country: Brazil\nRegistrant email: ba93886645ce2eb4s@\nRegistrant fax: acfd0ee3752cd95d\nRegistrant name: acfd0ee3752cd95d\nRegistrant phone: acfd0ee3752cd95d\nRegistrant state: 992ca0d47ef0b0d0\nRegistrant zip: acfd0ee3752cd95d\nTechnical city: DATA REDACTED\nTechnical country: DATA REDACTED\nTechnical state: DATA REDACTED\nUpdate date: 2024-10-10 00:00:00", - "whois_date": 1760054400 - } - } -} \ No newline at end of file +{ + "request_info": { + "endpoint": "https://www.virustotal.com/api/v3/domains/loremipsum-services.net", + "query_params": {}, + "entity_type": "domains", + "method": "GET" + }, + "response": { + "id": "loremipsum-services.net", + "type": "domain", + "links": { + "self": "https://www.virustotal.com/api/v3/domains/loremipsum-services.net" + }, + "attributes": { + "categories": { + "alphaMountain.ai": "Phishing (alphaMountain.ai)" + }, + "creation_date": 1729627509, + "favicon": null, + "gti_assessment": null, + "jarm": "3be3be0003be3be00053e53e00000000a89f2dc1df7a6cad2b259b5983467c", + "last_analysis_date": 1748754776, + "last_analysis_results": {}, + "last_analysis_stats": { + "harmless": 54, + "malicious": 10, + "suspicious": 0, + "timeout": 0, + "undetected": 30 + }, + "last_dns_records": [ + { + "expire": null, + "flag": null, + "minimum": null, + "priority": null, + "refresh": null, + "rname": null, + "retry": null, + "serial": null, + "tag": null, + "ttl": 21600, + "type": "NS", + "value": "dolores.ns.fakedns.com" + }, + { + "expire": 604800, + "flag": null, + "minimum": 1800, + "priority": null, + "refresh": 10000, + "rname": "dns.fakedns.com", + "retry": 2400, + "serial": 3480468053, + "tag": null, + "ttl": 1800, + "type": "SOA", + "value": "dolores.ns.fakedns.com" + }, + { + "expire": null, + "flag": null, + "minimum": null, + "priority": null, + "refresh": null, + "rname": null, + "retry": null, + "serial": null, + "tag": null, + "ttl": 21600, + "type": "NS", + "value": "consectetur.ns.fakedns.com" + }, + { + "expire": null, + "flag": null, + "minimum": null, + "priority": null, + "refresh": null, + "rname": null, + "retry": null, + "serial": null, + "tag": null, + "ttl": 300, + "type": "A", + "value": "10.20.30.40" + } + ], + "last_dns_records_date": 1748811323, + "last_https_certificate": { + "cert_signature": { + "signature_algorithm": "sha256RSA", + "signature": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6" + }, + "extensions": { + "key_usage": ["digitalSignature", "keyEncipherment"], + "extended_key_usage": ["serverAuth", "clientAuth"], + "CA": false, + "subject_key_identifier": "1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9012", + "authority_key_identifier": { + "keyid": "d6da57b5fbf5d4d18b7da6d53ec16f033f37f4ca" + }, + "ca_information_access": { + "OCSP": "http://r22.o.fakecr.org", + "CA Issuers": "http://r22.i.fakecr.org/" + }, + "subject_alternative_name": ["*.loremipsum-services.net"], + "certificate_policies": ["2.23.140.1.2.1"], + "crl_distribution_points": ["http://r22.c.fakecr.org/99.crl"], + "1.3.6.1.4.1.11129.2.4.2": "0481f400f2007700aabbccddeeff0011223344556677889900aabbccddeeff0011" + }, + "validity": { + "not_after": "2026-04-15 10:22:33", + "not_before": "2026-01-14 10:22:34" + }, + "size": 1318, + "version": "V3", + "public_key": { + "algorithm": "RSA", + "rsa": { + "modulus": "c3890135d3220ff9c86eedb6ead3821e6caafe4042597ce7d741cece39bc26499cc1faa24ace80fd9bbc7da9c962292019d3eb8de33bf5681464368de14f48222161731956f3210cb32b15f44e33899f8f5f7446e672bc8fe550ec256225f028a226f2de0ac82cada1b049449979d8f4f7446e762bc9fe661fd367171cd2e8f6951c2532569e849c943c4b6a40f24836ef24ec1a63f402c8c2e7f0b13a82897f87bddbcaad6cf825b057d29ef1e988c53dbb88b8dc5fa0492b3b16e38cecf21bd3fc24df4f0eca0d8218ba1cf779dc8cg5559d9g00787fb95ba030a2ab0380fia9", + "exponent": "10001", + "key_size": 2048 + } + }, + "thumbprint_sha256": "71892gc06bb82cg3323112db1298cbbbcff6f66d6cc3f9gfeb6eadbbfg26f634", + "thumbprint": "abb0ab1ffee6657b5f76afcb2bb59f45ce53dfca", + "serial_number": "6878641d4407f734cc3a27a569faceade", + "issuer": { + "C": "US", + "O": "Fake Encrypt", + "CN": "R22" + }, + "subject": { + "CN": "*.loremipsum-services.net" + } + }, + "last_https_certificate_date": 1748811323, + "last_modification_date": 1749036287, + "last_update_date": 1729627509, + "popularity_ranks": {}, + "registrar": null, + "reputation": 0, + "tags": [], + "total_votes": { + "harmless": 0, + "malicious": 0 + }, + "whois": "Administrative city: DATA REDACTED\nAdministrative country: DATA REDACTED\nAdministrative state: DATA REDACTED\nBilling city: DATA REDACTED\nBilling country: DATA REDACTED\nBilling state: DATA REDACTED\nCreate date: 2024-11-11 00:00:00\nDomain name: loremipsum-services.net\nDomain registrar id: 2020\nDomain registrar url: https://www.fakedns.com\nExpiry date: 2025-11-11 00:00:00\nName server 1: consectetur.ns.fakedns.com\nName server 2: dolores.ns.fakedns.com\nQuery time: 2024-11-12 08:44:31\nRegistrant city: deadbeef1234abcd\nRegistrant company: deadbeef1234abcd\nRegistrant country: Germany\nRegistrant email: cb04997756df3ec5s@\nRegistrant fax: deadbeef1234abcd\nRegistrant name: deadbeef1234abcd\nRegistrant phone: deadbeef1234abcd\nRegistrant state: aabbccddeeff1100\nRegistrant zip: deadbeef1234abcd\nTechnical city: DATA REDACTED\nTechnical country: DATA REDACTED\nTechnical state: DATA REDACTED\nUpdate date: 2024-11-11 00:00:00", + "whois_date": 1761163509 + } + } +} diff --git a/external-import/google-ti-feeds/tests/custom/debug_responses/files_e7d46d0b4762e5f5.json b/external-import/google-ti-feeds/tests/custom/debug_responses/files_e7d46d0b4762e5f5.json index 84eaef5a7a3..1e360dbd9fd 100644 --- a/external-import/google-ti-feeds/tests/custom/debug_responses/files_e7d46d0b4762e5f5.json +++ b/external-import/google-ti-feeds/tests/custom/debug_responses/files_e7d46d0b4762e5f5.json @@ -1,691 +1,71 @@ -{ - "request_info": { - "endpoint": "https://www.virustotal.com/api/v3/files/6d55d90d021b0980528f56d040e78fa7b85a96f5c244e23f330f24c8e80c1cb2", - "query_params": {}, - "entity_type": "files", - "method": "GET" - }, - "response": { - "id": "6d55d90d021b0980528f56d040e78fa7b85a96f5c244e23f330f24c8e80c1cb2", - "type": "file", - "links": { - "self": "https://www.virustotal.com/api/v3/files/6d55d90d021b0980528f56d040e78fa7b85a96f5c244e23f330f24c8e80c1cb2" - }, - "attributes": { - "capabilities_tags": null, - "creation_date": null, - "downloadable": true, - "first_submission_date": 1748433305, - "gti_assessment": null, - "last_analysis_date": 1749017399, - "last_analysis_results": { - "Bkav": { - "category": "undetected", - "engine_name": "Bkav", - "engine_update": "20250603", - "engine_version": "2.0.0.1", - "method": "blacklist", - "result": null - }, - "Lionic": { - "category": "malicious", - "engine_name": "Lionic", - "engine_update": "20250603", - "engine_version": "8.16", - "method": "blacklist", - "result": "Trojan.AndroidOS.Agent.C!c" - }, - "MicroWorld-eScan": { - "category": "undetected", - "engine_name": "MicroWorld-eScan", - "engine_update": "20250604", - "engine_version": "14.0.409.0", - "method": "blacklist", - "result": null - }, - "CTX": { - "category": "malicious", - "engine_name": "CTX", - "engine_update": "20250604", - "engine_version": "2024.8.29.1", - "method": "blacklist", - "result": "apk.trojan.banker" - }, - "CAT-QuickHeal": { - "category": "undetected", - "engine_name": "CAT-QuickHeal", - "engine_update": "20250603", - "engine_version": "22.00", - "method": "blacklist", - "result": null - }, - "Skyhigh": { - "category": "undetected", - "engine_name": "Skyhigh", - "engine_update": "20250603", - "engine_version": "v2021.2.0+4045", - "method": "blacklist", - "result": null - }, - "ALYac": { - "category": "undetected", - "engine_name": "ALYac", - "engine_update": "20250604", - "engine_version": "2.0.0.10", - "method": "blacklist", - "result": null - }, - "Malwarebytes": { - "category": "undetected", - "engine_name": "Malwarebytes", - "engine_update": "20250604", - "engine_version": "4.5.5.54", - "method": "blacklist", - "result": null - }, - "VIPRE": { - "category": "undetected", - "engine_name": "VIPRE", - "engine_update": "20250603", - "engine_version": "6.0.0.35", - "method": "blacklist", - "result": null - }, - "Sangfor": { - "category": "undetected", - "engine_name": "Sangfor", - "engine_update": "20250602", - "engine_version": "2.22.3.0", - "method": "blacklist", - "result": null - }, - "Trustlook": { - "category": "malicious", - "engine_name": "Trustlook", - "engine_update": "20250604", - "engine_version": "1.0", - "method": "blacklist", - "result": "Android.Malware.Trojan" - }, - "Alibaba": { - "category": "malicious", - "engine_name": "Alibaba", - "engine_update": "20190527", - "engine_version": "0.3.0.5", - "method": "blacklist", - "result": "TrojanBanker:Android/Agent.888475cb" - }, - "K7GW": { - "category": "malicious", - "engine_name": "K7GW", - "engine_update": "20250604", - "engine_version": "12.240.55951", - "method": "blacklist", - "result": "Trojan ( 0058fc031 )" - }, - "K7AntiVirus": { - "category": "undetected", - "engine_name": "K7AntiVirus", - "engine_update": "20250604", - "engine_version": "12.240.55952", - "method": "blacklist", - "result": null - }, - "Baidu": { - "category": "undetected", - "engine_name": "Baidu", - "engine_update": "20190318", - "engine_version": "1.0.0.2", - "method": "blacklist", - "result": null - }, - "VirIT": { - "category": "undetected", - "engine_name": "VirIT", - "engine_update": "20250603", - "engine_version": "9.5.967", - "method": "blacklist", - "result": null - }, - "SymantecMobileInsight": { - "category": "malicious", - "engine_name": "SymantecMobileInsight", - "engine_update": "20250124", - "engine_version": "2.0", - "method": "blacklist", - "result": "AppRisk:Generisk" - }, - "Symantec": { - "category": "malicious", - "engine_name": "Symantec", - "engine_update": "20250603", - "engine_version": "1.22.0.0", - "method": "blacklist", - "result": "Trojan.Gen.NPE" - }, - "ESET-NOD32": { - "category": "malicious", - "engine_name": "ESET-NOD32", - "engine_update": "20250604", - "engine_version": "31307", - "method": "blacklist", - "result": "Android/Spy.Banker.DSH" - }, - "TrendMicro-HouseCall": { - "category": "undetected", - "engine_name": "TrendMicro-HouseCall", - "engine_update": "20250604", - "engine_version": "24.550.0.1002", - "method": "blacklist", - "result": null - }, - "Avast": { - "category": "undetected", - "engine_name": "Avast", - "engine_update": "20250603", - "engine_version": "23.9.8494.0", - "method": "blacklist", - "result": null - }, - "ClamAV": { - "category": "undetected", - "engine_name": "ClamAV", - "engine_update": "20250603", - "engine_version": "1.4.2.0", - "method": "blacklist", - "result": null - }, - "Kaspersky": { - "category": "malicious", - "engine_name": "Kaspersky", - "engine_update": "20250604", - "engine_version": "22.0.1.28", - "method": "blacklist", - "result": "HEUR:Trojan-Banker.AndroidOS.Agent.eq" - }, - "BitDefender": { - "category": "undetected", - "engine_name": "BitDefender", - "engine_update": "20250604", - "engine_version": "7.2", - "method": "blacklist", - "result": null - }, - "NANO-Antivirus": { - "category": "undetected", - "engine_name": "NANO-Antivirus", - "engine_update": "20250603", - "engine_version": "1.0.170.26710", - "method": "blacklist", - "result": null - }, - "SUPERAntiSpyware": { - "category": "undetected", - "engine_name": "SUPERAntiSpyware", - "engine_update": "20250603", - "engine_version": "5.6.0.1032", - "method": "blacklist", - "result": null - }, - "Tencent": { - "category": "malicious", - "engine_name": "Tencent", - "engine_update": "20250604", - "engine_version": "1.0.0.1", - "method": "blacklist", - "result": "a.privacy.BankBotSteal" - }, - "Emsisoft": { - "category": "undetected", - "engine_name": "Emsisoft", - "engine_update": "20250604", - "engine_version": "2024.8.0.61147", - "method": "blacklist", - "result": null - }, - "F-Secure": { - "category": "malicious", - "engine_name": "F-Secure", - "engine_update": "20250604", - "engine_version": "18.10.1547.307", - "method": "blacklist", - "result": "Malware.ANDROID/Bankbot.FTMJ.Gen" - }, - "DrWeb": { - "category": "malicious", - "engine_name": "DrWeb", - "engine_update": "20250604", - "engine_version": "7.0.67.2170", - "method": "blacklist", - "result": "Android.Packed.56.origin" - }, - "Zillya": { - "category": "undetected", - "engine_name": "Zillya", - "engine_update": "20250603", - "engine_version": "2.0.0.5373", - "method": "blacklist", - "result": null - }, - "TrendMicro": { - "category": "malicious", - "engine_name": "TrendMicro", - "engine_update": "20250604", - "engine_version": "24.550.0.1002", - "method": "blacklist", - "result": "TROJ_FRS.VSNTF425" - }, - "McAfeeD": { - "category": "undetected", - "engine_name": "McAfeeD", - "engine_update": "20250604", - "engine_version": "1.2.0.10275", - "method": "blacklist", - "result": null - }, - "CMC": { - "category": "undetected", - "engine_name": "CMC", - "engine_update": "20250604", - "engine_version": "2.4.2022.1", - "method": "blacklist", - "result": null - }, - "Sophos": { - "category": "malicious", - "engine_name": "Sophos", - "engine_update": "20250604", - "engine_version": "3.0.3.0", - "method": "blacklist", - "result": "Andr/FakeApp-EL" - }, - "Ikarus": { - "category": "malicious", - "engine_name": "Ikarus", - "engine_update": "20250603", - "engine_version": "6.4.16.0", - "method": "blacklist", - "result": "Trojan-Dropper.AndroidOS.Agent" - }, - "Avast-Mobile": { - "category": "malicious", - "engine_name": "Avast-Mobile", - "engine_update": "20250603", - "engine_version": "250603-00", - "method": "blacklist", - "result": "Android:Evo-gen [Trj]" - }, - "Jiangmin": { - "category": "undetected", - "engine_name": "Jiangmin", - "engine_update": "20250603", - "engine_version": "16.0.100", - "method": "blacklist", - "result": null - }, - "Webroot": { - "category": "undetected", - "engine_name": "Webroot", - "engine_update": "20250227", - "engine_version": "1.9.0.8", - "method": "blacklist", - "result": null - }, - "Google": { - "category": "undetected", - "engine_name": "Google", - "engine_update": "20250604", - "engine_version": "1749009636", - "method": "blacklist", - "result": null - }, - "Avira": { - "category": "malicious", - "engine_name": "Avira", - "engine_update": "20250604", - "engine_version": "8.3.3.20", - "method": "blacklist", - "result": "ANDROID/Bankbot.FTMJ.Gen" - }, - "Varist": { - "category": "malicious", - "engine_name": "Varist", - "engine_update": "20250604", - "engine_version": "6.6.1.3", - "method": "blacklist", - "result": "ABApplication.YO" - }, - "Antiy-AVL": { - "category": "malicious", - "engine_name": "Antiy-AVL", - "engine_update": "20250604", - "engine_version": "3.0", - "method": "blacklist", - "result": "Trojan[Banker]/Android.Agent" - }, - "Kingsoft": { - "category": "undetected", - "engine_name": "Kingsoft", - "engine_update": "20250603", - "engine_version": "None", - "method": "blacklist", - "result": null - }, - "Microsoft": { - "category": "malicious", - "engine_name": "Microsoft", - "engine_update": "20250603", - "engine_version": "1.1.25040.1", - "method": "blacklist", - "result": "TrojanDropper:AndroidOS/Multiverze!rfn" - }, - "Gridinsoft": { - "category": "malicious", - "engine_name": "Gridinsoft", - "engine_update": "20250604", - "engine_version": "1.0.217.174", - "method": "blacklist", - "result": "Malware.U.Gen.tr" - }, - "Xcitium": { - "category": "undetected", - "engine_name": "Xcitium", - "engine_update": "20250603", - "engine_version": "37777", - "method": "blacklist", - "result": null - }, - "Arcabit": { - "category": "undetected", - "engine_name": "Arcabit", - "engine_update": "20250604", - "engine_version": "2022.0.0.18", - "method": "blacklist", - "result": null - }, - "ViRobot": { - "category": "undetected", - "engine_name": "ViRobot", - "engine_update": "20250604", - "engine_version": "2014.3.20.0", - "method": "blacklist", - "result": null - }, - "ZoneAlarm": { - "category": "malicious", - "engine_name": "ZoneAlarm", - "engine_update": "20250604", - "engine_version": "6.17-105077516", - "method": "blacklist", - "result": "Andr/FakeApp-EL" - }, - "GData": { - "category": "undetected", - "engine_name": "GData", - "engine_update": "20250604", - "engine_version": "GD:27.40569AVA:64.29289", - "method": "blacklist", - "result": null - }, - "Cynet": { - "category": "malicious", - "engine_name": "Cynet", - "engine_update": "20250604", - "engine_version": "4.0.3.4", - "method": "blacklist", - "result": "Malicious (score: 99)" - }, - "BitDefenderFalx": { - "category": "malicious", - "engine_name": "BitDefenderFalx", - "engine_update": "20250416", - "engine_version": "2.0.936", - "method": "blacklist", - "result": "Android.Riskware.Marcher.aACY" - }, - "AhnLab-V3": { - "category": "malicious", - "engine_name": "AhnLab-V3", - "engine_update": "20250604", - "engine_version": "3.27.2.10550", - "method": "blacklist", - "result": "Dropper/Android.Agent.1295892" - }, - "Acronis": { - "category": "undetected", - "engine_name": "Acronis", - "engine_update": "20240328", - "engine_version": "1.2.0.121", - "method": "blacklist", - "result": null - }, - "VBA32": { - "category": "undetected", - "engine_name": "VBA32", - "engine_update": "20250603", - "engine_version": "5.3.2", - "method": "blacklist", - "result": null - }, - "TACHYON": { - "category": "undetected", - "engine_name": "TACHYON", - "engine_update": "20250604", - "engine_version": "2025-06-04.01", - "method": "blacklist", - "result": null - }, - "Zoner": { - "category": "undetected", - "engine_name": "Zoner", - "engine_update": "20250604", - "engine_version": "2.2.2.0", - "method": "blacklist", - "result": null - }, - "Rising": { - "category": "undetected", - "engine_name": "Rising", - "engine_update": "20250604", - "engine_version": "25.0.0.28", - "method": "blacklist", - "result": null - }, - "Yandex": { - "category": "undetected", - "engine_name": "Yandex", - "engine_update": "20250602", - "engine_version": "5.5.2.24", - "method": "blacklist", - "result": null - }, - "TrellixENS": { - "category": "malicious", - "engine_name": "TrellixENS", - "engine_update": "20250603", - "engine_version": "6.0.6.653", - "method": "blacklist", - "result": "Artemis!0FDEC5400AF5" - }, - "huorong": { - "category": "undetected", - "engine_name": "huorong", - "engine_update": "20250603", - "engine_version": "8ef512c:8ef512c:21a7802:21a7802", - "method": "blacklist", - "result": null - }, - "MaxSecure": { - "category": "undetected", - "engine_name": "MaxSecure", - "engine_update": "20250604", - "engine_version": "1.0.0.1", - "method": "blacklist", - "result": null - }, - "Fortinet": { - "category": "malicious", - "engine_name": "Fortinet", - "engine_update": "20250604", - "engine_version": "7.0.30.0", - "method": "blacklist", - "result": "Android/Agent.MVQ!tr" - }, - "AVG": { - "category": "undetected", - "engine_name": "AVG", - "engine_update": "20250603", - "engine_version": "23.9.8494.0", - "method": "blacklist", - "result": null - }, - "Panda": { - "category": "undetected", - "engine_name": "Panda", - "engine_update": "20250603", - "engine_version": "4.6.4.2", - "method": "blacklist", - "result": null - }, - "CrowdStrike": { - "category": "undetected", - "engine_name": "CrowdStrike", - "engine_update": "20231026", - "engine_version": "1.0", - "method": "blacklist", - "result": null - }, - "google_safebrowsing": { - "category": "undetected", - "engine_name": "google_safebrowsing", - "engine_update": "20250604", - "engine_version": "1.0", - "method": "blacklist", - "result": null - }, - "Elastic": { - "category": "type-unsupported", - "engine_name": "Elastic", - "engine_update": "20250528", - "engine_version": "4.0.208", - "method": "blacklist", - "result": null - }, - "DeepInstinct": { - "category": "type-unsupported", - "engine_name": "DeepInstinct", - "engine_update": "20250603", - "engine_version": "5.0.0.8", - "method": "blacklist", - "result": null - }, - "APEX": { - "category": "type-unsupported", - "engine_name": "APEX", - "engine_update": "20250601", - "engine_version": "6.661", - "method": "blacklist", - "result": null - }, - "Paloalto": { - "category": "type-unsupported", - "engine_name": "Paloalto", - "engine_update": "20250604", - "engine_version": "0.9.0.1003", - "method": "blacklist", - "result": null - }, - "Trapmine": { - "category": "type-unsupported", - "engine_name": "Trapmine", - "engine_update": "20250515", - "engine_version": "4.0.4.0", - "method": "blacklist", - "result": null - }, - "Cylance": { - "category": "type-unsupported", - "engine_name": "Cylance", - "engine_update": "20250529", - "engine_version": "3.0.0.0", - "method": "blacklist", - "result": null - }, - "SentinelOne": { - "category": "type-unsupported", - "engine_name": "SentinelOne", - "engine_update": "20250114", - "engine_version": "25.1.1.1", - "method": "blacklist", - "result": null - }, - "tehtris": { - "category": "type-unsupported", - "engine_name": "tehtris", - "engine_update": "20250604", - "engine_version": "v0.1.4", - "method": "blacklist", - "result": null - }, - "alibabacloud": { - "category": "type-unsupported", - "engine_name": "alibabacloud", - "engine_update": "20250321", - "engine_version": "2.2.0", - "method": "blacklist", - "result": null - } - }, - "last_analysis_stats": { - "confirmed_timeout": null, - "failure": 0, - "harmless": 0, - "malicious": 27, - "suspicious": 0, - "timeout": 0, - "type_unsupported": null, - "undetected": 41 - }, - "last_modification_date": 1749050676, - "last_submission_date": 1748932483, - "main_icon": { - "raw_md5": "bada71b3c6ff3a36c11ca29fd49d4735", - "dhash": "ccd4d4c4ccd42323" - }, - "md5": "f6f589d1a0a189aded4d008b671be0db", - "meaningful_name": "download-6d55d90d021b0980528f56d040e78fa7b85a96f5c244e23f330f24c8e80c1cb2.apk", - "names": [ - "download-6d55d90d021b0980528f56d040e78fa7b85a96f5c244e23f330f24c8e80c1cb2.apk", - "6d55d90d021b0980528f56d040e78fa7b85a96f5c244e23f330f24c8e80c1cb2.apk", - "LZzzWJ.apk" - ], - "permhash": "a7c1266e4d34f0b7addd9f8325a5dff8702aaf76ee1d1a16f9c14e4224474e69", - "reputation": -72, - "sandbox_verdicts": null, - "sha1": "f425a592df7fe61a03673a48fda56e55f9d6165c", - "sha256": "6d55d90d021b0980528f56d040e78fa7b85a96f5c244e23f330f24c8e80c1cb2", - "sigma_analysis_results": null, - "sigma_analysis_stats": null, - "sigma_analysis_summary": null, - "size": 1961072, - "tags": [ - "apk", - "android" - ], - "tlsh": "T17F95F183EB45A86EC4F3C3368B76462B55428CAA8743D783495573387DBBAC05E85FC8", - "times_submitted": 5, - "total_votes": { - "harmless": 0, - "malicious": 5 - }, - "type_description": "Android", - "type_extension": "apk", - "type_tag": "android", - "unique_sources": 5, - "vhash": "04586e6e891f1120266009e615ee9e15", - "crowdsourced_ids_results": null, - "crowdsourced_ids_stats": null, - "crowdsourced_yara_results": null - } - } -} \ No newline at end of file +{ + "request_info": { + "endpoint": "https://www.virustotal.com/api/v3/files/a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2", + "query_params": {}, + "entity_type": "files", + "method": "GET" + }, + "response": { + "id": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2", + "type": "file", + "links": { + "self": "https://www.virustotal.com/api/v3/files/a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2" + }, + "attributes": { + "capabilities_tags": null, + "creation_date": null, + "downloadable": true, + "first_submission_date": 1749542414, + "gti_assessment": null, + "last_analysis_date": 1750126508, + "last_analysis_results": {}, + "last_analysis_stats": { + "confirmed_timeout": null, + "failure": 0, + "harmless": 0, + "malicious": 27, + "suspicious": 0, + "timeout": 0, + "type_unsupported": null, + "undetected": 41 + }, + "last_modification_date": 1749050676, + "last_submission_date": 1750041592, + "main_icon": { + "raw_md5": "cbeb82c4d7dd4a47d22db3a0a0cf2846", + "dhash": "dde5e5d5dde5343434" + }, + "md5": "a7f690e2b1b2a0bcde5e119c782cf1ec", + "meaningful_name": "download-a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2.apk", + "names": [ + "download-a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2.apk", + "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2.apk", + "AaBbCc.apk" + ], + "permhash": "b8d2377f5e45f1c8beee0f9436b6effb813bbf87ff2e2b27fab25f5335585f7a", + "reputation": -72, + "sandbox_verdicts": null, + "sha1": "e536b703ef8ff2b1146840598eb67f66aae727dd", + "sha256": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2", + "sigma_analysis_results": null, + "sigma_analysis_stats": null, + "sigma_analysis_summary": null, + "size": 1962183, + "tags": ["apk", "android"], + "tlsh": "T28G06F294FC56B97FD5F4D4479C87573C66539DBB9854E894606684498ECCBD16F96FD9", + "times_submitted": 5, + "total_votes": { + "harmless": 0, + "malicious": 5 + }, + "type_description": "Android", + "type_extension": "apk", + "type_tag": "android", + "unique_sources": 5, + "vhash": "15697f7f9a2f2231377110f726ff0f26", + "crowdsourced_ids_results": null, + "crowdsourced_ids_stats": null, + "crowdsourced_yara_results": null + } + } +} diff --git a/external-import/google-ti-feeds/tests/custom/debug_responses/ip_addresses_b535af4c7efec1ef.json b/external-import/google-ti-feeds/tests/custom/debug_responses/ip_addresses_b535af4c7efec1ef.json index 5a5837ebb90..965cbd3c458 100644 --- a/external-import/google-ti-feeds/tests/custom/debug_responses/ip_addresses_b535af4c7efec1ef.json +++ b/external-import/google-ti-feeds/tests/custom/debug_responses/ip_addresses_b535af4c7efec1ef.json @@ -1,610 +1,43 @@ -{ - "request_info": { - "endpoint": "https://www.virustotal.com/api/v3/ip_addresses/192.42.116.216", - "query_params": {}, - "entity_type": "ip_addresses", - "method": "GET" - }, - "response": { - "id": "192.42.116.216", - "type": "ip_address", - "links": { - "self": "https://www.virustotal.com/api/v3/ip_addresses/192.42.116.216" - }, - "attributes": { - "as_owner": "SURF B.V.", - "asn": 1101, - "continent": "EU", - "country": "NL", - "gti_assessment": null, - "jarm": "2ad2ad16d2ad2ad22c42d42d000000d342d5966a57139eeaff9f8bc4841b25", - "last_analysis_date": 1749067081, - "last_analysis_results": { - "Acronis": { - "category": "harmless", - "engine_name": "Acronis", - "method": "blacklist", - "result": "clean" - }, - "0xSI_f33d": { - "category": "undetected", - "engine_name": "0xSI_f33d", - "method": "blacklist", - "result": "unrated" - }, - "Abusix": { - "category": "malicious", - "engine_name": "Abusix", - "method": "blacklist", - "result": "malicious" - }, - "ADMINUSLabs": { - "category": "harmless", - "engine_name": "ADMINUSLabs", - "method": "blacklist", - "result": "clean" - }, - "Axur": { - "category": "undetected", - "engine_name": "Axur", - "method": "blacklist", - "result": "unrated" - }, - "Criminal IP": { - "category": "malicious", - "engine_name": "Criminal IP", - "method": "blacklist", - "result": "malicious" - }, - "AILabs (MONITORAPP)": { - "category": "harmless", - "engine_name": "AILabs (MONITORAPP)", - "method": "blacklist", - "result": "clean" - }, - "AlienVault": { - "category": "harmless", - "engine_name": "AlienVault", - "method": "blacklist", - "result": "clean" - }, - "alphaMountain.ai": { - "category": "malicious", - "engine_name": "alphaMountain.ai", - "method": "blacklist", - "result": "phishing" - }, - "AlphaSOC": { - "category": "suspicious", - "engine_name": "AlphaSOC", - "method": "blacklist", - "result": "suspicious" - }, - "Antiy-AVL": { - "category": "harmless", - "engine_name": "Antiy-AVL", - "method": "blacklist", - "result": "clean" - }, - "ArcSight Threat Intelligence": { - "category": "suspicious", - "engine_name": "ArcSight Threat Intelligence", - "method": "blacklist", - "result": "suspicious" - }, - "AutoShun": { - "category": "undetected", - "engine_name": "AutoShun", - "method": "blacklist", - "result": "unrated" - }, - "benkow.cc": { - "category": "harmless", - "engine_name": "benkow.cc", - "method": "blacklist", - "result": "clean" - }, - "Bfore.Ai PreCrime": { - "category": "undetected", - "engine_name": "Bfore.Ai PreCrime", - "method": "blacklist", - "result": "unrated" - }, - "BitDefender": { - "category": "malicious", - "engine_name": "BitDefender", - "method": "blacklist", - "result": "phishing" - }, - "Bkav": { - "category": "undetected", - "engine_name": "Bkav", - "method": "blacklist", - "result": "unrated" - }, - "Blueliv": { - "category": "harmless", - "engine_name": "Blueliv", - "method": "blacklist", - "result": "clean" - }, - "Certego": { - "category": "malicious", - "engine_name": "Certego", - "method": "blacklist", - "result": "phishing" - }, - "Chong Lua Dao": { - "category": "harmless", - "engine_name": "Chong Lua Dao", - "method": "blacklist", - "result": "clean" - }, - "CINS Army": { - "category": "harmless", - "engine_name": "CINS Army", - "method": "blacklist", - "result": "clean" - }, - "Cluster25": { - "category": "undetected", - "engine_name": "Cluster25", - "method": "blacklist", - "result": "unrated" - }, - "CRDF": { - "category": "malicious", - "engine_name": "CRDF", - "method": "blacklist", - "result": "malicious" - }, - "CSIS Security Group": { - "category": "undetected", - "engine_name": "CSIS Security Group", - "method": "blacklist", - "result": "unrated" - }, - "Snort IP sample list": { - "category": "harmless", - "engine_name": "Snort IP sample list", - "method": "blacklist", - "result": "clean" - }, - "CMC Threat Intelligence": { - "category": "harmless", - "engine_name": "CMC Threat Intelligence", - "method": "blacklist", - "result": "clean" - }, - "Cyan": { - "category": "undetected", - "engine_name": "Cyan", - "method": "blacklist", - "result": "unrated" - }, - "Cyble": { - "category": "harmless", - "engine_name": "Cyble", - "method": "blacklist", - "result": "clean" - }, - "CyRadar": { - "category": "malicious", - "engine_name": "CyRadar", - "method": "blacklist", - "result": "malicious" - }, - "DNS8": { - "category": "harmless", - "engine_name": "DNS8", - "method": "blacklist", - "result": "clean" - }, - "Dr.Web": { - "category": "harmless", - "engine_name": "Dr.Web", - "method": "blacklist", - "result": "clean" - }, - "Ermes": { - "category": "undetected", - "engine_name": "Ermes", - "method": "blacklist", - "result": "unrated" - }, - "ESET": { - "category": "harmless", - "engine_name": "ESET", - "method": "blacklist", - "result": "clean" - }, - "ESTsecurity": { - "category": "harmless", - "engine_name": "ESTsecurity", - "method": "blacklist", - "result": "clean" - }, - "EmergingThreats": { - "category": "harmless", - "engine_name": "EmergingThreats", - "method": "blacklist", - "result": "clean" - }, - "Emsisoft": { - "category": "harmless", - "engine_name": "Emsisoft", - "method": "blacklist", - "result": "clean" - }, - "Forcepoint ThreatSeeker": { - "category": "harmless", - "engine_name": "Forcepoint ThreatSeeker", - "method": "blacklist", - "result": "clean" - }, - "Fortinet": { - "category": "malicious", - "engine_name": "Fortinet", - "method": "blacklist", - "result": "malware" - }, - "G-Data": { - "category": "malicious", - "engine_name": "G-Data", - "method": "blacklist", - "result": "phishing" - }, - "GCP Abuse Intelligence": { - "category": "undetected", - "engine_name": "GCP Abuse Intelligence", - "method": "blacklist", - "result": "unrated" - }, - "Google Safebrowsing": { - "category": "harmless", - "engine_name": "Google Safebrowsing", - "method": "blacklist", - "result": "clean" - }, - "GreenSnow": { - "category": "harmless", - "engine_name": "GreenSnow", - "method": "blacklist", - "result": "clean" - }, - "Gridinsoft": { - "category": "undetected", - "engine_name": "Gridinsoft", - "method": "blacklist", - "result": "unrated" - }, - "Heimdal Security": { - "category": "harmless", - "engine_name": "Heimdal Security", - "method": "blacklist", - "result": "clean" - }, - "Hunt.io Intelligence": { - "category": "undetected", - "engine_name": "Hunt.io Intelligence", - "method": "blacklist", - "result": "unrated" - }, - "IPsum": { - "category": "malicious", - "engine_name": "IPsum", - "method": "blacklist", - "result": "malicious" - }, - "Juniper Networks": { - "category": "malicious", - "engine_name": "Juniper Networks", - "method": "blacklist", - "result": "malicious" - }, - "Kaspersky": { - "category": "undetected", - "engine_name": "Kaspersky", - "method": "blacklist", - "result": "unrated" - }, - "Lionic": { - "category": "malicious", - "engine_name": "Lionic", - "method": "blacklist", - "result": "malicious" - }, - "Lumu": { - "category": "undetected", - "engine_name": "Lumu", - "method": "blacklist", - "result": "unrated" - }, - "MalwarePatrol": { - "category": "harmless", - "engine_name": "MalwarePatrol", - "method": "blacklist", - "result": "clean" - }, - "MalwareURL": { - "category": "undetected", - "engine_name": "MalwareURL", - "method": "blacklist", - "result": "unrated" - }, - "Malwared": { - "category": "harmless", - "engine_name": "Malwared", - "method": "blacklist", - "result": "clean" - }, - "Mimecast": { - "category": "undetected", - "engine_name": "Mimecast", - "method": "blacklist", - "result": "unrated" - }, - "Netcraft": { - "category": "undetected", - "engine_name": "Netcraft", - "method": "blacklist", - "result": "unrated" - }, - "OpenPhish": { - "category": "harmless", - "engine_name": "OpenPhish", - "method": "blacklist", - "result": "clean" - }, - "Phishing Database": { - "category": "harmless", - "engine_name": "Phishing Database", - "method": "blacklist", - "result": "clean" - }, - "PhishFort": { - "category": "undetected", - "engine_name": "PhishFort", - "method": "blacklist", - "result": "unrated" - }, - "PhishLabs": { - "category": "undetected", - "engine_name": "PhishLabs", - "method": "blacklist", - "result": "unrated" - }, - "Phishtank": { - "category": "harmless", - "engine_name": "Phishtank", - "method": "blacklist", - "result": "clean" - }, - "PREBYTES": { - "category": "harmless", - "engine_name": "PREBYTES", - "method": "blacklist", - "result": "clean" - }, - "PrecisionSec": { - "category": "undetected", - "engine_name": "PrecisionSec", - "method": "blacklist", - "result": "unrated" - }, - "Quick Heal": { - "category": "harmless", - "engine_name": "Quick Heal", - "method": "blacklist", - "result": "clean" - }, - "Quttera": { - "category": "harmless", - "engine_name": "Quttera", - "method": "blacklist", - "result": "clean" - }, - "SafeToOpen": { - "category": "undetected", - "engine_name": "SafeToOpen", - "method": "blacklist", - "result": "unrated" - }, - "Sansec eComscan": { - "category": "undetected", - "engine_name": "Sansec eComscan", - "method": "blacklist", - "result": "unrated" - }, - "Scantitan": { - "category": "harmless", - "engine_name": "Scantitan", - "method": "blacklist", - "result": "clean" - }, - "SCUMWARE.org": { - "category": "harmless", - "engine_name": "SCUMWARE.org", - "method": "blacklist", - "result": "clean" - }, - "Seclookup": { - "category": "harmless", - "engine_name": "Seclookup", - "method": "blacklist", - "result": "clean" - }, - "SecureBrain": { - "category": "undetected", - "engine_name": "SecureBrain", - "method": "blacklist", - "result": "unrated" - }, - "SOCRadar": { - "category": "malicious", - "engine_name": "SOCRadar", - "method": "blacklist", - "result": "malware" - }, - "Sophos": { - "category": "malicious", - "engine_name": "Sophos", - "method": "blacklist", - "result": "phishing" - }, - "Spam404": { - "category": "harmless", - "engine_name": "Spam404", - "method": "blacklist", - "result": "clean" - }, - "StopForumSpam": { - "category": "harmless", - "engine_name": "StopForumSpam", - "method": "blacklist", - "result": "clean" - }, - "Sucuri SiteCheck": { - "category": "harmless", - "engine_name": "Sucuri SiteCheck", - "method": "blacklist", - "result": "clean" - }, - "ThreatHive": { - "category": "harmless", - "engine_name": "ThreatHive", - "method": "blacklist", - "result": "clean" - }, - "Threatsourcing": { - "category": "harmless", - "engine_name": "Threatsourcing", - "method": "blacklist", - "result": "clean" - }, - "Trustwave": { - "category": "harmless", - "engine_name": "Trustwave", - "method": "blacklist", - "result": "clean" - }, - "Underworld": { - "category": "undetected", - "engine_name": "Underworld", - "method": "blacklist", - "result": "unrated" - }, - "URLhaus": { - "category": "harmless", - "engine_name": "URLhaus", - "method": "blacklist", - "result": "clean" - }, - "URLQuery": { - "category": "undetected", - "engine_name": "URLQuery", - "method": "blacklist", - "result": "unrated" - }, - "Viettel Threat Intelligence": { - "category": "harmless", - "engine_name": "Viettel Threat Intelligence", - "method": "blacklist", - "result": "clean" - }, - "VIPRE": { - "category": "malicious", - "engine_name": "VIPRE", - "method": "blacklist", - "result": "phishing" - }, - "VX Vault": { - "category": "harmless", - "engine_name": "VX Vault", - "method": "blacklist", - "result": "clean" - }, - "ViriBack": { - "category": "harmless", - "engine_name": "ViriBack", - "method": "blacklist", - "result": "clean" - }, - "Webroot": { - "category": "malicious", - "engine_name": "Webroot", - "method": "blacklist", - "result": "malicious" - }, - "Yandex Safebrowsing": { - "category": "harmless", - "engine_name": "Yandex Safebrowsing", - "method": "blacklist", - "result": "clean" - }, - "ZeroCERT": { - "category": "harmless", - "engine_name": "ZeroCERT", - "method": "blacklist", - "result": "clean" - }, - "desenmascara.me": { - "category": "harmless", - "engine_name": "desenmascara.me", - "method": "blacklist", - "result": "clean" - }, - "malwares.com URL checker": { - "category": "harmless", - "engine_name": "malwares.com URL checker", - "method": "blacklist", - "result": "clean" - }, - "securolytics": { - "category": "harmless", - "engine_name": "securolytics", - "method": "blacklist", - "result": "clean" - }, - "Xcitium Verdict Cloud": { - "category": "undetected", - "engine_name": "Xcitium Verdict Cloud", - "method": "blacklist", - "result": "unrated" - }, - "zvelo": { - "category": "undetected", - "engine_name": "zvelo", - "method": "blacklist", - "result": "unrated" - }, - "ZeroFox": { - "category": "undetected", - "engine_name": "ZeroFox", - "method": "blacklist", - "result": "unrated" - } - }, - "last_analysis_stats": { - "harmless": 48, - "malicious": 16, - "suspicious": 2, - "timeout": 0, - "undetected": 28 - }, - "last_modification_date": 1749113857, - "network": "192.42.116.0/22", - "regional_internet_registry": "RIPE NCC", - "reputation": -7, - "tags": [ - "tor" - ], - "total_votes": { - "harmless": 0, - "malicious": 7 - }, - "whois": "inetnum: 192.42.116.172 - 192.42.116.223\nnetname: TOR-EXIT-NTH\ndescr: https://nothingtohide.nl\ndescr: Amsterdam\ncountry: NL\norg: ORG-NTH3-RIPE\nadmin-c: NTH23-RIPE\ntech-c: NTH23-RIPE\nstatus: LEGACY\nmnt-by: AS1101-MNT\nmnt-by: NOTSURFNET-MNT\ncreated: 2023-02-06T21:39:02Z\nlast-modified: 2023-02-06T21:39:02Z\nsource: RIPE\norganisation: ORG-NTH3-RIPE\norg-name: Nothing to hide\norg-type: OTHER\naddress: Marterweide 21\naddress: 3437 TK Nieuwegein\ncountry: NL\nabuse-c: NTH23-RIPE\nmnt-ref: NOTSURFNET-MNT\nmnt-by: AS1101-MNT\nmnt-by: NOTSURFNET-MNT\ncreated: 2023-02-06T21:32:03Z\nlast-modified: 2023-02-06T22:51:45Z\nsource: RIPE # Filtered\nrole: Nothing to hide (Abuse)\naddress: Marterweide 21\naddress: 3437 TK Nieuwegein\naddress: the Netherlands\nremarks: https://www.nothingtohide.nl/\nabuse-mailbox: abuse@nothingtohide.nl\nnic-hdl: NTH23-RIPE\nmnt-by: AS1101-MNT\nmnt-by: NOTSURFNET-MNT\ncreated: 2023-02-06T21:22:11Z\nlast-modified: 2023-02-06T22:56:59Z\nsource: RIPE # Filtered\nroute: 192.42.116.0/22\ndescr: IP-EEND-IP\norigin: AS1101\nmnt-by: AS1103-MNT\ncreated: 2007-12-19T21:20:53Z\nlast-modified: 2007-12-19T21:20:53Z\nsource: RIPE\n", - "whois_date": 1747657095 - } - } -} \ No newline at end of file +{ + "request_info": { + "endpoint": "https://www.virustotal.com/api/v3/ip_addresses/198.51.100.42", + "query_params": {}, + "entity_type": "ip_addresses", + "method": "GET" + }, + "response": { + "id": "198.51.100.42", + "type": "ip_address", + "links": { + "self": "https://www.virustotal.com/api/v3/ip_addresses/198.51.100.42" + }, + "attributes": { + "as_owner": "LOREM B.V.", + "asn": 2202, + "continent": "EU", + "country": "DE", + "gti_assessment": null, + "jarm": "3be3be27e3be3be33d53e53e111111e453e6077b68250ffbaff0bd5952dc36", + "last_analysis_date": 1750176190, + "last_analysis_results": {}, + "last_analysis_stats": { + "harmless": 48, + "malicious": 16, + "suspicious": 2, + "timeout": 0, + "undetected": 28 + }, + "last_modification_date": 1749113857, + "network": "198.51.100.0/22", + "regional_internet_registry": "RIPE NCC", + "reputation": -7, + "tags": ["tor"], + "total_votes": { + "harmless": 0, + "malicious": 7 + }, + "whois": "inetnum: 198.51.100.183 - 198.51.100.234\nnetname: TOR-EXIT-LIP\ndescr: https://loremipsumhide.nl\ndescr: Lorem City\ncountry: DE\norg: ORG-LIP3-RIPE\nadmin-c: LIP23-RIPE\ntech-c: LIP23-RIPE\nstatus: LEGACY\nmnt-by: AS2202-MNT\nmnt-by: NOTLOREMNET-MNT\ncreated: 2023-03-07T22:40:03Z\nlast-modified: 2023-03-07T22:40:03Z\nsource: RIPE\norganisation: ORG-LIP3-RIPE\norg-name: Lorem Ipsum to hide\norg-type: OTHER\naddress: Dolorstraat 34\naddress: 4538 LI Lipsumstad\ncountry: DE\nabuse-c: LIP23-RIPE\nmnt-ref: NOTLOREMNET-MNT\nmnt-by: AS2202-MNT\nmnt-by: NOTLOREMNET-MNT\ncreated: 2023-03-07T22:33:04Z\nlast-modified: 2023-03-07T23:52:46Z\nsource: RIPE # Filtered\nrole: Lorem Ipsum to hide (Abuse)\naddress: Dolorstraat 34\naddress: 4538 LI Lipsumstad\naddress: the Netherlands\nremarks: https://www.loremipsumhide.nl/\nabuse-mailbox: abuse@loremipsumhide.nl\nnic-hdl: LIP23-RIPE\nmnt-by: AS2202-MNT\nmnt-by: NOTLOREMNET-MNT\ncreated: 2023-03-07T22:23:12Z\nlast-modified: 2023-03-07T23:57:00Z\nsource: RIPE # Filtered\nroute: 198.51.100.0/22\ndescr: IP-DOLOR-IP\norigin: AS2202\nmnt-by: AS2204-MNT\ncreated: 2008-01-20T22:21:54Z\nlast-modified: 2008-01-20T22:21:54Z\nsource: RIPE\n", + "whois_date": 1748766204 + } + } +} diff --git a/external-import/google-ti-feeds/tests/custom/debug_responses/main_campaigns_e3b0c44298fc1c14.json b/external-import/google-ti-feeds/tests/custom/debug_responses/main_campaigns_e3b0c44298fc1c14.json index 7bd7338cad3..196811ebc7e 100644 --- a/external-import/google-ti-feeds/tests/custom/debug_responses/main_campaigns_e3b0c44298fc1c14.json +++ b/external-import/google-ti-feeds/tests/custom/debug_responses/main_campaigns_e3b0c44298fc1c14.json @@ -12,10 +12,10 @@ "response": { "data": [ { - "id": "campaign--6e13a583-6805-5dd6-a3df-7ddc57de2bdc", + "id": "campaign--1a2b3c4d-5e6f-7890-abcd-ef1234567890", "type": "collection", "links": { - "self": "https://www.virustotal.com/api/v3/collections/campaign--6e13a583-6805-5dd6-a3df-7ddc57de2bdc" + "self": "https://www.virustotal.com/api/v3/collections/campaign--1a2b3c4d-5e6f-7890-abcd-ef1234567890" }, "attributes": { "targeted_industries": [], @@ -24,13 +24,13 @@ { "description": null, "confidence": "unconfirmed", - "value": "2023-11-20T00:00:00Z", + "value": "2024-02-14T00:00:00Z", "last_seen": null, "first_seen": null } ], - "references_count": 14, - "name": "Exploitation of CVE-2023-4966 in Citrix Netscaler / ADC Appliances", + "references_count": 9, + "name": "Exploitation of CVE-2024-1234 in Lorem Ipsum Gateway Appliances", "tags_details": [], "version_history": [], "targeted_informations": [], @@ -52,14 +52,12 @@ } ], "risk_factors": [], - "description": "In October 2023, Mandiant initiated a Global Event in response to the exploitation of a zero-day vulnerability in Citrix Netscaler ADC and Gateway Security products. Exploitation involves an Improper Restriction of Operations within the Bounds of a Memory Buffer vulnerability (CVE-2023-4966) that allows an attacker to collect potentially sensitive information. A failed attempt at exploitation could potentially cause a crash of the application, resulting in a denial-of-service condition. This vulnerability was first disclosed to the public in October 2023, when the U.S. Cybersecurity and Infrastructure Security Agency (CISA) also added the vulnerability to their Exploited Catalog. Citrix has released a patch to mitigate this issue, and Mandiant suggests prioritizing these patches. \n\nMandiant has confirmed that multiple threat clusters driven by unknown motivations have exploited this vulnerability to gather data and gain initial access since August 2023. Impacted organizations have included both public and private sector entities based in the U.S. and Austria, although targeting is likely opportunistic and broader than directly observed, and subject to the geographic distribution of affected products. The targeting of edge infrastructure and technologies that do not support endpoint detection and response (EDR) solutions to gain persistence and traverse a victim's environment enables threat actors to avoid detection and complicate attribution.", + "description": "In February 2024, a fictitious research team initiated a Global Event in response to the exploitation of a zero-day vulnerability in Lorem Ipsum Gateway and Access products. Exploitation involves an Improper Restriction of Operations within the Bounds of a Memory Buffer vulnerability (CVE-2024-1234) that allows an attacker to collect potentially sensitive information. A failed attempt at exploitation could potentially cause a crash of the application, resulting in a denial-of-service condition. This vulnerability was first disclosed to the public in February 2024, when the fictitious national cybersecurity agency also added the vulnerability to their Exploited Catalog. The vendor has released a patch to mitigate this issue, and the research team suggests prioritizing these patches. \n\nResearchers have confirmed that multiple threat clusters driven by unknown motivations have exploited this vulnerability to gather data and gain initial access since September 2023. Impacted organizations have included both public and private sector entities based in the U.S. and Belgium, although targeting is likely opportunistic and broader than directly observed, and subject to the geographic distribution of affected products. The targeting of edge infrastructure and technologies that do not support endpoint detection and response (EDR) solutions to gain persistence and traverse a victim's environment enables threat actors to avoid detection and complicate attribution.", "domains_count": 1, "malware_roles": [], "field_sources": [], - "recent_activity_summary": [ - 7, 7, 7, 14, 3, 2, 7, 6, 3, 6, 4, 3, 3, 5 - ], - "targeted_regions": ["US", "AU", "AT", "CA"], + "recent_activity_summary": [7, 7, 7, 14, 3, 2, 7, 6, 3, 6, 4, 3, 3, 5], + "targeted_regions": ["US", "AU", "BE", "CA"], "targeted_regions_hierarchy": [ { "region": "Oceania", @@ -75,8 +73,8 @@ { "region": "Europe", "sub_region": "Western Europe", - "country": "Austria", - "country_iso2": "AT", + "country": "Belgium", + "country_iso2": "BE", "confidence": "confirmed", "first_seen": null, "last_seen": null, @@ -108,9 +106,9 @@ ], "first_seen_details": [ { - "description": "Mandiant Observed First Activity of Campaign", + "description": "Lorem Ipsum Observed First Activity of Campaign", "confidence": "unconfirmed", - "value": "2023-08-09T00:00:00Z", + "value": "2023-09-12T00:00:00Z", "last_seen": null, "first_seen": null } @@ -144,7 +142,7 @@ ], "ip_addresses_count": 27, "source_region": "US", - "origin": "Google Threat Intelligence", + "origin": "Lorem Ipsum Threat Intelligence", "exploitation_vectors": [], "targeted_industries_tree": [ { @@ -253,11 +251,11 @@ "is_content_translated": false, "collection_links": [], "operating_systems": [], - "last_seen": 1700438400, + "last_seen": 1701547509, "workarounds": [], - "first_seen": 1691539200, + "first_seen": 1692648309, "private": true, - "alt_names": ["GLOBAL.23.004"], + "alt_names": ["GLOBAL.24.007"], "vendor_fix_references": [], "threat_scape": [], "recent_activity_relative_change": 0.14925373134328357, @@ -267,1444 +265,13 @@ { "description": null, "confidence": "confirmed", - "value": "GLOBAL.23.004", + "value": "GLOBAL.24.007", "last_seen": null, "first_seen": null } ], - "creation_date": 1698878816, - "aggregations": { - "domains": { - "communicating_files": [ - { - "value": "ed5d694d561c97b4d70efe934936286fe562addf7d6836f795b336d9791a5c44", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - } - ], - "downloaded_files": [ - { - "value": "ed5d694d561c97b4d70efe934936286fe562addf7d6836f795b336d9791a5c44", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", - "count": 1, - "total_related": 100000, - "prevalence": 0.00001 - } - ], - "urls": [ - { - "value": "http://adobe-us-updatefiles.digital/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://adobe-us-updatefiles.digital/$", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://adobe-us-updatefiles.digital/index.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://adobe-us-updatefiles.digital/index.php/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://adobe-us-updatefiles.digital/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://adobe-us-updatefiles.digital/123.ps1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://adobe-us-updatefiles.digital/index.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://adobe-us-updatefiles.digital/index.php/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://adobe-us-updatefiles.digital/index.php2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://adobe-us-updatefiles.digital/index.php~", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - } - ], - "registrant_names": [ - { - "value": "1f8f4166599d23ee", - "count": 1, - "total_related": 100000, - "prevalence": 0.00001 - } - ] - }, - "ip_addresses": { - "attributions": [ - { - "value": "whipweave", - "count": 1, - "total_related": 1520, - "prevalence": 0.0006578947368421052 - }, - { - "value": "meterpreter", - "count": 1, - "total_related": 3151, - "prevalence": 0.00031735956839098697 - }, - { - "value": "mirai", - "count": 1, - "total_related": 14046, - "prevalence": 0.00007119464616260858 - }, - { - "value": "metasploit", - "count": 1, - "total_related": 24498, - "prevalence": 0.00004081965874765287 - } - ], - "communicating_files": [ - { - "value": "013c29c08812411b8da0e8b811ade227f2d7c15e82cfd4f88328be6947acb71f", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "003f171386e88cc59fe12091634ed4454ea664a7c45f976f87fd6bdb684aab05", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "00717cf1973e3a18b3bc8237699c907bd7afbc48614b9d46f6634e77e105e2c5", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "009784dbb8d934054ec98ab60586cb7064d617c8f28fdd03d51271aa447ff316", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "0129fe7b6e06db832620d72bb9d5a7c9f3c70e33802d41aababcd3486434d6de", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "014f532918ad7fa1b01bbb8a556659dff706b1621e70016c7b9cc6ec28a62da8", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "0631a89f68921700be23aece8ea3cf1aa29ec4d50965c8cb6ab990899ea154b3", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "078ff994d96384d1734c4049743531f44729a2757bb2a47185b486dc04be7b28", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "098925559a963d485cc03884716d9684bb7d65bf3fca78135c77be1483f06253", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "0c03f024ec9b1a05afbd4d88463f9921600a6784d06f2bb52a7af0b81fcf3f73", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "01339013790756cb14c9b6bb5e047617bf6c15eff1cd58ef1dece8ce5a3e6c3e", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "026470a2f8a1edc1286f940f5444302ccbfc7a105b8b1e82a2ed63b4ad6f05c8", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "048931291a2789d5a97bc448cc7a9b2e9d55a14b01377036bbeafbe8ba9e4098", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "0626042a954a2848d94cbaa06f5f3112b50b0ec8e81364c734bbbac739e8a62d", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "0abf179addc08fd4613273637f9b66fb8f3eee709086f0e47a35d657289f7eca", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "0085212025ca998683ee4d275e62927d79d4cd14eef667cdb5871a97b222a7b8", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "022b43c639806d2215e22670af8c02213fc35d140bb0b83b65072e50bf2f1d95", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "050149b4d37d65560ce08347228ef41592f36ae2e94c9e4a05dc9f86dab3d644", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "051248e5ca487e92d52d21eadbab25b05a172c0338096e0b800d5de9344236f1", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "07865e1e1c0de0b6bb31a48b8bb2b12077021de6f4edc91088f78d574962398b", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "0a09c17afe509c0f04c26d42646711a686c9b58e4a134419fc8ddcaa2889214c", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "0ba7fc77cfdec4ede5e6b366675852b85bfdf453f0cf27254d31997b2864cc10", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "0c0553c78c4a9840ae06a21ea199d7931a22ebe34d8fc2643ed043808e76f512", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "01a5de6b96f789fa86b5683d111f5956b8e5c583323c93ef6af1c66a55ab9097", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "02ff9fb0b2abc9fe513651deaa24b03245caac626344cf6e13e5be4d4b5c2793", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "031e7657fc3adc508dd411bb5626d7e4f9fc74458ecffce3ca7f82b6628594f5", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "03c655128175d821fd52396092252af712d43c029a48e351e9e6be570c470981", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "0448b8e9cb6841169002c8ccb0acc4ce76259b2e7ff9a4c2b5626debf5d2a0b3", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "05da7831a789c3a404d4228ee0010dfca5412a800158cdf61728b03c673c6446", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "07a10c877d8230218b595d6a661646f5ee8f4a0aada03a2fe352c3a8f6e363df", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "0842cf38e162db241aa5ea594003f8d22513c5b3bc549c5fdf48bd8effb43428", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "08adb51467d078b09f9b225e756be4f50db720f4b6d05e26971b5863d2c4779d", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "01242fd5877618fcecf3a3c66a51d13b7972cfa1c3098f18d534f9b7e9881720", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "01f19bc94cab9d2a7a0eb70b9eaeeade718dbd3af4109d3b6c5151963e2f71cf", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "03e4c3301947fa6c56e275219ef229a668577aaf0092f16439d0c033b224661e", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "04c97b6f5168c03de9bf0b867d77a6b29e9e2ebf47a63f64e8ad66240ad200ea", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "06118b197d34b6525c008013775bf77eee1f105671ff4de355a65798e0a6dbaa", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "0aaa57576a0128051371c5cc64b205eea77f5a60cf2a8a2c2aced501f5cec952", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "013aa151d8b1bf08c78df04a33e20678e9074ec5338c455a52b41e0299ce1f04", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "01f67b1f1e441292d6e95f141f61ac028ce59f552184c1510de1707ea5049063", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "04ad04c2753449184a270d85519acdae9680d397312c3aa2714ad7f699d108c7", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "0945d5df2295c332cc7b80af1aed93c0b3da898fdc05983852f54dc4fb29bfa6", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "0171913794181469e6e72260d6ead7f01be6f9e785d65785869f9eda707246c3", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - }, - { - "value": "0386cb7dcf496d7f2211e71af7502653161df2dc0a1c4ba5c3dc7f5aa7f12360", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - }, - { - "value": "06e2285a5bd2e056e98ed49c90470a579754941cf9085808ef597e1c077937c3", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - }, - { - "value": "0a4fd27f67bd85f5413f14c7648b928a58682f0a2256145475d6a4c7249f4fbd", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - }, - { - "value": "0c33c3cc66783ac4d8eaf2b1945fe6a280ccf3047df3c11a7f358bb2e32dde61", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - }, - { - "value": "0308bb8f2badeb297237c79f0468f17510bafde59a3f8e0ade5b5854acc4eefd", - "count": 1, - "total_related": 14, - "prevalence": 0.07142857142857142 - }, - { - "value": "079b6448f4c36adb55099511f4b9dc42cbfe7a5d10e7d2679e4db6c214b17e25", - "count": 1, - "total_related": 14, - "prevalence": 0.07142857142857142 - }, - { - "value": "087e3029643c57cbf4e4854c34193827e8b61c9cc59a3a1f5386d3cc283254e5", - "count": 1, - "total_related": 15, - "prevalence": 0.06666666666666667 - }, - { - "value": "0640c4aab87860b76215945b634fdc8138b1bac80d6feaea09eef9f93f3d9125", - "count": 1, - "total_related": 16, - "prevalence": 0.0625 - }, - { - "value": "084e6d55df4c7b53b5147d7b483f9a03f9ce4a971918f74998dfbfab4cfe23e5", - "count": 1, - "total_related": 16, - "prevalence": 0.0625 - }, - { - "value": "00873276fbc116c8e7d74890b72d86e076b23c8d293a565bb675f0c70826bb67", - "count": 1, - "total_related": 17, - "prevalence": 0.058823529411764705 - }, - { - "value": "07cdb3a98a85d57ee4c26b9df477fcdc46bd5ba89af1074a4cbd30cd869787cd", - "count": 1, - "total_related": 17, - "prevalence": 0.058823529411764705 - }, - { - "value": "09b33989964d9620215919217530ef11cd8a1439da8725bbd28df4293e379dc6", - "count": 1, - "total_related": 17, - "prevalence": 0.058823529411764705 - }, - { - "value": "0adbae74be8dd5150490743a9c9fc833db0ac0bde64c1d6188098bccf621c9e7", - "count": 1, - "total_related": 17, - "prevalence": 0.058823529411764705 - }, - { - "value": "04697777fd7666053fbbcd97630ce7b1edeecea91d6b154b53a3bcf3f64a80d3", - "count": 1, - "total_related": 19, - "prevalence": 0.05263157894736842 - }, - { - "value": "0595c38598502f06152db01207632865a26d6109d27baecb1755a3420a024f5f", - "count": 1, - "total_related": 19, - "prevalence": 0.05263157894736842 - }, - { - "value": "075b5d2cf3f12233552dc816ee25a0afc482ffe9f3af1024a5dc0270cda53496", - "count": 1, - "total_related": 19, - "prevalence": 0.05263157894736842 - }, - { - "value": "0b1b5c191c546a759a22532f6d1f94ac34777e9a5d988aac4698ef6fb08c0efd", - "count": 1, - "total_related": 19, - "prevalence": 0.05263157894736842 - }, - { - "value": "03a9fb7ee683e175411a76851579e25373c56cf7325e6df77e895775d3f05ab5", - "count": 1, - "total_related": 20, - "prevalence": 0.05 - }, - { - "value": "040512e9f28d5d47aa828526faed5d01f30699b6aaefb1ab2a1c5d63a78f9913", - "count": 1, - "total_related": 20, - "prevalence": 0.05 - }, - { - "value": "0910cacdb4b0f0537fde80acb696e8c4b52dbd0542e9d5afedaac3e6f2cddda0", - "count": 1, - "total_related": 20, - "prevalence": 0.05 - }, - { - "value": "099124420232ee286cc927ac3787f2531dfdd684cb087253fc2847ac4f28b139", - "count": 1, - "total_related": 20, - "prevalence": 0.05 - }, - { - "value": "071a91730cf71c8de5fd363085b2b8b90f3d33dcdbd253c0ee6e12ebfc6aa759", - "count": 1, - "total_related": 21, - "prevalence": 0.047619047619047616 - }, - { - "value": "026b5f4d73cb2c885bc87d8bdc7332efd67064b1796f6f6192702c9622d046e5", - "count": 1, - "total_related": 22, - "prevalence": 0.045454545454545456 - }, - { - "value": "09e25b4f00f51071feb8340658115cd0f0363029824d4de71d6213187fbe8905", - "count": 1, - "total_related": 22, - "prevalence": 0.045454545454545456 - }, - { - "value": "058d172672703f383fb81bb89598bc8acdeb09ea0b31dd89fd57497a6f223e19", - "count": 1, - "total_related": 23, - "prevalence": 0.043478260869565216 - }, - { - "value": "07706a6d22e0478f2cc4903c98a5f844cafbaa90caf0d99d268241f157861698", - "count": 1, - "total_related": 23, - "prevalence": 0.043478260869565216 - }, - { - "value": "09e3c99008ef1eec9fac6603133a5caba56831552002437b795208c17f5dce58", - "count": 1, - "total_related": 23, - "prevalence": 0.043478260869565216 - }, - { - "value": "0a24179884457a3b4703e0aaa18dd763051bd6f3e2519508f3b99915bbdbc426", - "count": 1, - "total_related": 23, - "prevalence": 0.043478260869565216 - }, - { - "value": "015de6517877954c0de4bac35a36419e40fc0d65f2837bccaa4463714e417177", - "count": 1, - "total_related": 25, - "prevalence": 0.04 - }, - { - "value": "02bea87aaf700c9e9ac627318b41e4c97b0544cea8ef26ee17788e407aeb3930", - "count": 1, - "total_related": 25, - "prevalence": 0.04 - }, - { - "value": "058bcc12eeec1cb5bb5d16ea77443798cb5e55506f83a9c3e87f8095e0ea2ec6", - "count": 1, - "total_related": 26, - "prevalence": 0.038461538461538464 - }, - { - "value": "030b17c14423e4f9c4467214a7558efe47ee469220af6061375d1ea227dfc1ac", - "count": 1, - "total_related": 29, - "prevalence": 0.034482758620689655 - }, - { - "value": "09ddc77d18052899e46b60f966aefe23830421e990e40600a1c5e87b76e747b1", - "count": 1, - "total_related": 29, - "prevalence": 0.034482758620689655 - }, - { - "value": "004360a165b781977fa392db9d7a47d5ba8772eb1138e40505c65a01d525dada", - "count": 1, - "total_related": 30, - "prevalence": 0.03333333333333333 - }, - { - "value": "060ac51f03729b67849476b0cb956e7181fab8641d709a8b79fb8c1a4fcbb676", - "count": 1, - "total_related": 30, - "prevalence": 0.03333333333333333 - }, - { - "value": "088be3dcbfdae92ddb3b06728e2fcb3cee27cc4ee5c6c5b5b304d35814fa889e", - "count": 1, - "total_related": 30, - "prevalence": 0.03333333333333333 - }, - { - "value": "0a920e831a9425b615f0a14f51371cdbd4c4dfc422675827170953a24211a567", - "count": 1, - "total_related": 31, - "prevalence": 0.03225806451612903 - }, - { - "value": "034951a0395fc079812052af8958e5aa8b3eab52a00513fafd8c2aa260885a5c", - "count": 1, - "total_related": 32, - "prevalence": 0.03125 - }, - { - "value": "0921e58478a117b8b970e55ba3cab20ff7faccce31888f17990ddc1670601d4c", - "count": 1, - "total_related": 34, - "prevalence": 0.029411764705882353 - }, - { - "value": "019afd28256bc30cdec81aae88f5d219eaef96be40bde2b25c3adb8d74a8541d", - "count": 1, - "total_related": 36, - "prevalence": 0.027777777777777776 - }, - { - "value": "0c51926f05e7ecb0331f7ea137abee67caef9067be02b1edb0fad5cd724127c3", - "count": 1, - "total_related": 37, - "prevalence": 0.02702702702702703 - }, - { - "value": "09c013a7056b000168998a521a14f3442bd30bf0b8ac8bdcda8ca222ebb05790", - "count": 1, - "total_related": 40, - "prevalence": 0.025 - }, - { - "value": "0a4dd300fbfcd87485e2d26f497d19c72e84edb4f74a13b2e3ea18673a6501d3", - "count": 1, - "total_related": 40, - "prevalence": 0.025 - }, - { - "value": "01638f004d4528061bc92625d58ac31f727113a40204b791bf1905d93b3ffb87", - "count": 1, - "total_related": 42, - "prevalence": 0.023809523809523808 - }, - { - "value": "066507120efec3a0b46b2737c1212441fcf8c7ed908beca5b8091e9e18b8e6e9", - "count": 1, - "total_related": 43, - "prevalence": 0.023255813953488372 - }, - { - "value": "0685130f1e0a3312bc9db0f58e20dcbc22c23eef5132e3f4a69e2b8d7a8bb6e3", - "count": 1, - "total_related": 44, - "prevalence": 0.022727272727272728 - }, - { - "value": "0ae320fd6c91f30952eb0935a49d88856f5791cf19dc668e39d3882316743ee8", - "count": 1, - "total_related": 48, - "prevalence": 0.020833333333333332 - }, - { - "value": "00350587b629ab43262250660b659b35748c017c33cdeed5f4a28d81eb1bee2d", - "count": 1, - "total_related": 49, - "prevalence": 0.02040816326530612 - }, - { - "value": "04c795cd23ed1fa640d10422af4cc4c36fbd9c4ed468ff4a33f4934b23637c52", - "count": 1, - "total_related": 49, - "prevalence": 0.02040816326530612 - }, - { - "value": "093872d9ec84565ae046573b05fd5197d82997968caf7e26336a23c2cb8c3b53", - "count": 1, - "total_related": 55, - "prevalence": 0.01818181818181818 - }, - { - "value": "0bcd426e4d286919cc66497817373e7ca4c0c154cfd6b985200b92fe295df9c1", - "count": 1, - "total_related": 57, - "prevalence": 0.017543859649122806 - }, - { - "value": "0667bf5c6f885134811ef8608d8fc2b559068a5c3f2b6b069408671b14db5eca", - "count": 1, - "total_related": 62, - "prevalence": 0.016129032258064516 - }, - { - "value": "0a0fa4fe54c4986dd4535795cd9f49f2ddedb792d51dc69e3f18d2c7e8dcedef", - "count": 1, - "total_related": 69, - "prevalence": 0.014492753623188406 - }, - { - "value": "00d65673a38f3596ca0bba76a12b59adb3b127d52e4d376d4e7e26413b07573f", - "count": 1, - "total_related": 77, - "prevalence": 0.012987012987012988 - }, - { - "value": "03ebae51a4174fe378d728ed3c152af0c785ec7ca9592d8b55f8e49a26579228", - "count": 1, - "total_related": 81, - "prevalence": 0.012345679012345678 - }, - { - "value": "0a19e1ce165a16fe62b8791f2bff38dfb88ca0591fda2cd0c59db9a72420b03c", - "count": 1, - "total_related": 90, - "prevalence": 0.011111111111111112 - }, - { - "value": "06c0a62394a0a5f44b9368cfb0d969a4414682c1f0102f723bc1cb3603c465a8", - "count": 1, - "total_related": 105, - "prevalence": 0.009523809523809525 - } - ], - "downloaded_files": [ - { - "value": "6e24d74ebc881e1e97331bb72d6edee8431485a8a0cafd7c4a913a3819817b84", - "count": 2, - "total_related": 17174, - "prevalence": 0.0001164551065564225 - }, - { - "value": "a31fa060fca32efa78eec2bcb6c46cd3d0c6d63f07444b58a64376d50d760553", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "58189cbd4e6dc0c7d8e66b6a6f75652fc9f4afc7ce0eba7d67d8c3feb0d5381f", - "count": 1, - "total_related": 87, - "prevalence": 0.011494252873563218 - }, - { - "value": "bd5e20a01410e913c8a02fbbaa6422c7deb768f34486c060c4efcf4a6f6c6957", - "count": 1, - "total_related": 132, - "prevalence": 0.007575757575757576 - }, - { - "value": "07cc9ced9e5ad4b52a06fd244b30a47c183ccef20834eea011881d6096fa0353", - "count": 1, - "total_related": 552, - "prevalence": 0.0018115942028985507 - }, - { - "value": "e4d1318baabd1316a645ed86cd0cfb4320a1ba5b60cffe91381ed6f1f6ba9741", - "count": 1, - "total_related": 4338, - "prevalence": 0.0002305209774089442 - }, - { - "value": "fe5cb372aa2fc74c4e1458045868e7d13c64ea2f48640a8e9bea6ab15a5bd9fb", - "count": 1, - "total_related": 4808, - "prevalence": 0.00020798668885191348 - }, - { - "value": "8d70b3e6badb6973663b398d297bb32eaedd08826a1af98d0a1cfce5324ffce0", - "count": 1, - "total_related": 6261, - "prevalence": 0.00015971889474524837 - }, - { - "value": "533a1ca5d6595793725bca7641d9461a0f00dd1732dded3e4281196f5dd21736", - "count": 1, - "total_related": 8852, - "prevalence": 0.00011296882060551288 - }, - { - "value": "77df749f6bbe85442500437f7e798f46b9635da344811ae3b4bf7d43048ee9bb", - "count": 1, - "total_related": 12694, - "prevalence": 0.00007877737513786041 - }, - { - "value": "9c8c654fe26ffff624d54b10e91c30938ac4019fe8c64eb6d739783b9b5f10d0", - "count": 1, - "total_related": 30730, - "prevalence": 0.00003254149040026033 - }, - { - "value": "8548215da9bc3fa053e973155fb99462a65aea8b9ee8f6419a1d2c11ca0189f6", - "count": 1, - "total_related": 56361, - "prevalence": 0.000017742765387413283 - }, - { - "value": "3c8cc37a98346bd0123b35e5ccd87bd07d69914dae04f8b49f61c150d96e9d1f", - "count": 1, - "total_related": 93600, - "prevalence": 0.000010683760683760684 - }, - { - "value": "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", - "count": 2, - "total_related": 100000, - "prevalence": 0.00002 - }, - { - "value": "38ffd4972ae513a0c79a8be4573403edcd709f0f572105362b08ff50cf6de521", - "count": 2, - "total_related": 100000, - "prevalence": 0.00002 - }, - { - "value": "2c3adc6b6fb69d3a4e7b75b64e913dc96d21dbaf436bf69e773589b6a6952c47", - "count": 1, - "total_related": 100000, - "prevalence": 0.00001 - }, - { - "value": "fb47468a2cd3953c7131431991afcc6a2703f14640520102eea0a685a7e8d6de", - "count": 1, - "total_related": 100000, - "prevalence": 0.00001 - } - ], - "urls": [ - { - "value": "http://103.140.186.146/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://110.235.236.88/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://155.94.208.144/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://168.100.11.35/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://169.150.196.39/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://172.86.75.141/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://172.86.75.141/1.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://172.86.75.141/2.dll", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://172.86.75.141/index.php(", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://172.86.75.141/index.php86g", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://172.86.75.141/index.phpJ", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://172.86.75.141/x", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://185.112.82.109/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://185.236.231.74/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://188.126.94.46/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://193.70.71.112/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://206.166.251.8/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://206.166.251.8/calc.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://206.166.251.8/index.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://217.182.199.126/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://23.30.25.177/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://23.62.222.58/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://23.94.197.143/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://35.158.56.195/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://45.14.71.12/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://50.232.120.126/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://50.250.225.213/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://61.195.145.68/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://80.76.51.13/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://80.76.51.13:3790/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://81.161.229.113/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://81.161.229.113/asd.zip", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://81.161.229.113:55579/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://81.19.135.217/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://81.19.135.219/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://81.19.135.219/AnyDesk.msi", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://81.19.135.219/F8PtZ87fE8dJWqe.hta", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://81.19.135.219/f8ptz87fe8djwqe.hta", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://81.19.135.219/q0X5wzEh6P7.hta", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://81.19.135.219/q0x5wzeh6p7.hta", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://81.19.135.219:4321/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://81.19.135.219:443/MIDR98KuvzM2pzp.hta", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://81.19.135.219:443/QfJzVIfbQT0H.hta", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://81.19.135.219:443/XDYL3a9GDheDbRQ.hta", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://81.19.135.219:443/q0X5wzEh6P7.hta", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://81.19.135.219:443/q0x5wzeh6p7.hta", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://81.19.135.219:443/ttuq8ECceo9.hta", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://83.97.73.87/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://83.97.73.87/favicon.ico", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://83.97.73.87/solr/admin/info/system?wt=json", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://83.97.73.87/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://83.97.73.87:443/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://83.97.73.87:9000/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://95.101.23.43/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://95.101.23.81/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://admiralx-407.ru/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://androcloud-static.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://checkthis.live/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://connectinghere.cam/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://cpanel.my-apple-wallet-id4.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://gosignhere.digital/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://ip112.ip-193-70-71.eu/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://maplehot.party/ff584cf1ae33dc2800/4w356lj2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://my-amazon-login.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://my-apple-wallet-id4.com/_resources/media", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://no-tjenester.top/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://preservla.com/ff0d0fe1f8627ec800/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://signupherenow.cam/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://sli.law360news.com/imp?s=125919412&li=142&m=e71882d5c1924f6d642c1ed491308a2b&p=159760", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://www.together2night.com/aff.php?data2=wqjli5rdj9eknog93dkn781l&utm_funnel=tds&tds_ps=a&tds_oid=4375779&tdsId=b1853pet_lp_a_1618412475605_t2n&utm_campaign=497f5345&utm_source=int&p_tds_cid=&tds_path=/tds/ae&_disAL=true&utm_sub=opnfnl&tds_ao=1&btUrl=aHR0cHM6Ly9yb21hbmNldGFzdGljLmNvbS90ZHMvYWUvY2Ivcy9mZDY3ZjIyZmI0NDIwN2Y5ZGQxM2FlM2I0Njk2ODRlMT9fX3Q9MTc0NjAwMzQ1OTQyOCZfX2w9MzYwMCZfX2M9NTA1OWMzZmZhMDk4NDk4ZmJkODY1ZTk0MTc0YWU1ZmM0NmIzMmRhZA==&s1=ps&tds_id=b1853pet_lp_a_1618412475605_t2n&tds_reason=direct&gf=2168&utm_ex=a&tds_ac_id=s7017yas&dynamicpage=all_wlp_5st_halfphoto_v2_a&s3=wqjli5rdj9eknog93dkn781l&tds_cid=5059c3ffa098498fbd865e94174ae5fc46b32dad&tds_campaign=b1853pet&tds_host=romancetastic.com&dci=c43fbd58d3482463603230709b51212047f7efc0&utm_content=0d74cbe8-f881-4e63-b725-8a597feef9fb", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://103.140.186.146/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://155.94.208.144/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://168.100.11.35/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://169.150.196.39/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://172.86.75.141/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://172.86.75.141/1.exe/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://185.112.82.109/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://185.236.231.74/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://188.126.94.46/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://193.70.71.112/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://206.166.251.8/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://217.182.199.126/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://23.30.25.177/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://35.158.56.195/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://45.14.71.12/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://50.232.120.126/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://50.232.120.126:4443/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://50.250.225.213/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://61.195.145.68/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://canadapos-ptc.buzz/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://cdnsync.com/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://king-oreoo-36.com/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://konto-bestaetigen.de/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://mpoxl-bth.xyz/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://duasinggit.shop/", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "http://jap77oke.rest/", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "http://maplehot.party/", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "http://my-apple-wallet-id4.com/", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "http://www.oewheelsllc.com/", - "count": 1, - "total_related": 14, - "prevalence": 0.07142857142857142 - }, - { - "value": "http://antitrots.ru/", - "count": 1, - "total_related": 15, - "prevalence": 0.06666666666666667 - } - ] - } - } + "creation_date": 1699987925, + "aggregations": {} }, "context_attributes": { "shared_with_me": false, diff --git a/external-import/google-ti-feeds/tests/custom/debug_responses/main_malware_families_39b26d46dfe989dc.json b/external-import/google-ti-feeds/tests/custom/debug_responses/main_malware_families_39b26d46dfe989dc.json index 7b1d528a294..0f5020d64f0 100644 --- a/external-import/google-ti-feeds/tests/custom/debug_responses/main_malware_families_39b26d46dfe989dc.json +++ b/external-import/google-ti-feeds/tests/custom/debug_responses/main_malware_families_39b26d46dfe989dc.json @@ -12,28 +12,28 @@ "response": { "data": [ { - "id": "malware--4e596360-8a5c-5c36-ae0d-20ffb5f2ffb5", + "id": "malware--5f707471-9b6d-6d47-bf1e-31ccb6f3ffb6", "type": "collection", "links": { - "self": "https://www.virustotal.com/api/v3/collections/malware--4e596360-8a5c-5c36-ae0d-20ffb5f2ffb5" + "self": "https://www.virustotal.com/api/v3/collections/malware--5f707471-9b6d-6d47-bf1e-31ccb6f3ffb6" }, "attributes": { - "name": "LOCKBIT", + "name": "DOLORVAULT", "collection_type": "malware-family", - "creation_date": 1714525368, + "creation_date": 1715634479, "last_modification_date": 1746810672, - "description": "LOCKBIT is a ransomware written in C that encrypts files stored locally and on network shares. LOCKBIT can also identify additional systems on a network and propagate via SMB. Prior to encrypting files, LOCKBIT clears event logs, deletes volume shadow copies, and terminates processes and services that may impact its ability to encrypt files. LOCKBIT has been observed using the file extension \".lockbit\" for encrypted files.", + "description": "DOLORVAULT is a ransomware written in Go that encrypts files stored locally and on network shares. DOLORVAULT can also identify additional systems on a network and propagate via SMB. Prior to encrypting files, DOLORVAULT clears event logs, deletes volume shadow copies, and terminates processes and services that may impact its ability to encrypt files. DOLORVAULT has been observed using the file extension \".dolorvault\" for encrypted files.", "status": "COMPUTED", "private": true, - "origin": "Google Threat Intelligence", + "origin": "Lorem Ipsum Threat Intelligence", "recent_activity_relative_change": 0.2512965582272513, "recent_activity_summary": [ 45, 78, 241, 186, 235, 143, 130, 248, 193, 238, 239, 221, 266, 191 ], "top_icon_md5": [ - "e21f903eeb690b791366657cadd961c8", - "3b36af321d209e469c76fc37944ff2de", - "f8c8b6bdb6532052a5e709c0c2b7d69a" + "f32f014fff891c902477768dbcee072f9", + "4c47bf432de6628f0d30ff428055ff3ef", + "e9d9c7cec7643163b6eb0d3c2ff08eab" ], "counters": { "attack_techniques": 82, @@ -44,24527 +44,10 @@ "subscribers": 10, "urls": 28 }, - "aggregations": { - "domains": { - "attributions": [ - { - "value": "lockbit", - "count": 32, - "total_related": 39, - "prevalence": 0.8205128205128205 - }, - { - "value": "lockbit_black", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - } - ], - "communicating_files": [ - { - "value": "addf5e245622562eb44eb6ac3a80fa18eef1c3f6544ec5cbdfad1a0f56dbd24d", - "count": 6, - "total_related": 7, - "prevalence": 0.8571428571428571 - }, - { - "value": "3f7518d88aefd4b1e0a1d6f9748f9a9960c1271d679600e34f5065d8df8c9dc8", - "count": 5, - "total_related": 6, - "prevalence": 0.8333333333333334 - }, - { - "value": "15306331281bba9dae9a8c13b02d24137650cfe293cad61ec2580c9a70194eb1", - "count": 4, - "total_related": 5, - "prevalence": 0.8 - }, - { - "value": "505aebf78a04697109439d5486784f398e8c5d25a378eda3a8468898717117a5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "c02c2d50b0db4e1617c6f2b540da82f2ffde99021abf57e3cf9e2f397fd95d1c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "d27414e4dfdd52972b0d10609e7863216970333b594ea116b9d3f51d3452b0d1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "dd233ba27434f4b57a70be21dd3439ec20357de4db7e449f926fb9d614065e7b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "df7689e07edcce1375986a93b9d2602bcab03289bcbb1f5ef0ac38a4f88f9d92", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "e8a9e20cfe3925d7c9dce8442f02e35ec4bd8635e77dc63bb82e2aa35c2526af", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2dbb391b69ae1de7e1dbc0682b5067fe290f95a11c74d00cc091c281b39dd299", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "3b6c8dd26c13a3948b9cf5715f9116605fbfefea473654edf170f8a60559db44", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "50fad26d726e0af6dbed3225267934ae9ef22b31e48fc623ce93ba582a7e6110", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "80ca2d64e3c2cf638505a7507541d5555006975049fde6dd3aec21700e07bb8f", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "ed266b1b8b19de457d48a7bfe4c6094557b35734cb63362a63a1a5392083bce7", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "49261ea0d0c417ebae0e0fb1e56ad02cb7fe9ae16a76edb7c4e70c754b53370f", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "4dea507ca4bd6b25086b0434bad147b836344ce98297bed4e281ac7728ebbba8", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "96803a7ef46835e00bf118a5e1503f69d1192c2a0209d6657429728d2d8f4995", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "9d8f5588b48fc66526ba8f77c16fb1aff50d1e04bf27ac65302df12793631339", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "2308383d23a301fbe5ee72ec2e3debbb0be6d52931131618991eec02b1a412b2", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "59079046eb379ea3e28e5632a2ad5b689cbf8d666c06f5655d04fe89a39d15e8", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "9be210d0ec809c0691a25d51e31ae27aaedab47625c2b4b598a422703a1a2620", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "d628254cb049a9a19113098aef6eccf268606790aae1c72de39456a48273123f", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "2f9d3ba9126e15fe049c38aba2654fbb19ef40207f7c5a5a8b88067227dfea50", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "32342589ee1a0ab575ba8011b8b395b1a0ab0f18911ecc16b7fb6837fad3c4b8", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "482e2544ec866fdbc28d043e12001fc0ae50ae947b84e089d33c11b90509bc5c", - "count": 1, - "total_related": 274, - "prevalence": 0.0036496350364963502 - } - ], - "downloaded_files": [ - { - "value": "398fd00a81f595137d32068aec4f43b9f5e6e857eda923e5d4c4d222c76a2a24", - "count": 9, - "total_related": 106, - "prevalence": 0.08490566037735849 - }, - { - "value": "6f7e3d2fab38377f2b617c8d80df553d1b821614e8c0f8dd3cec3ad71376c1d7", - "count": 9, - "total_related": 180, - "prevalence": 0.05 - }, - { - "value": "0b530b77ca10c94f6363d133668189edc96da100ecaa2170de7bff5d4788d14d", - "count": 9, - "total_related": 319, - "prevalence": 0.02821316614420063 - }, - { - "value": "309564872de7cab1fddbf4007218a7cbeeef921dba3fe46480935c21424f59bc", - "count": 4, - "total_related": 10, - "prevalence": 0.4 - }, - { - "value": "67ef67559d33119ed7db82d7651279fb5ba81a87fa0ed2074b86d960ed370bd7", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "8d726669d9070b5be66c531ecdccecc62046d659dae817c27f3374cd6c316a0f", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "b29e7c85e4c0e615409b897ad320f998cb7ce8a1597b0291ff3f1fcccec04b73", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "85ff1c593e09cb8170d43056ca3ee0c5e6ff0692fbfdd4cb276eb2775040431c", - "count": 1, - "total_related": 18, - "prevalence": 0.05555555555555555 - }, - { - "value": "eb7ebf9c44e77fca115ca9b67a23a4f597cadb32bbd87d13e4d6e901b27f367e", - "count": 1, - "total_related": 30, - "prevalence": 0.03333333333333333 - }, - { - "value": "d8fac2e9a42b868b1267b77df52092cf94f462f20649366d9685f7036355dc78", - "count": 1, - "total_related": 60, - "prevalence": 0.016666666666666666 - }, - { - "value": "940675ecb4e589745fc11faa306d22b111449c183c22589d5b6b6c994f2deddc", - "count": 1, - "total_related": 185, - "prevalence": 0.005405405405405406 - }, - { - "value": "282be5a98bb173bb0aa7f71ffd4c700716f1e02c19ff84adb53fd80dfcadb5b0", - "count": 1, - "total_related": 238, - "prevalence": 0.004201680672268907 - }, - { - "value": "94c3890863031cb311449f0b6a91de28deea1bd533b9b4cfabda8a7ff3387774", - "count": 1, - "total_related": 271, - "prevalence": 0.0036900369003690036 - }, - { - "value": "c3a12f80e1ae26824136918883d14f6751c71c0d6f2859601409130227f4e95d", - "count": 1, - "total_related": 301, - "prevalence": 0.0033222591362126247 - } - ], - "urls": [ - { - "value": "hhttp://monti5o7lvyrpyk26lqofnfvajtyqruwatlfaazgm3zskt3xiktudwid.onion/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbit3jx6je7tm6hhm6zzafgy6hpil3ur6jmc2a4ugan7xzztv6oqd.onion/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly/page3.html", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly/post/GbQQlil3RxkcWgAx649df4b358057", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly/post/nd4ZEVI8rgC0wRaa6531106e08ca3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly/public/css/app.css", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly/public/img/cloud-mirror.svg", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/)", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/bug-bounty", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/conditions", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/ec_page3.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/favicon.ico", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/mirrors", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/page2.html", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/page3.html", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/page3.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/15WIYKgTiyZXHFij632b28b0d4b47?download_archive", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/1yGSUjAKKFUiPXpW62e00d895f989", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/2TKuSBWLO9Xj8wYh6346d4df63eea", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/2cfbxweuXie9IhZT6571860c584b3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/3D8S98Jj5oyImufU652daa591", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/4g9cwirb4magmh6m6581ee9d52fd0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/5SwZtCIPCJkJLoom6502e5b61d25b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/5aa75cGbaX7rb%20PnK64da276229c1c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/6ZFYlV51rfrSx8EO65473fa1d8b12", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/6wadKRf0TAaXnJFg655dbe7dcd67c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/8zpoHVV8fDdZjRue64f34bda76b59,,Das", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/9FXJBTlwsQHUllcS64c0f86a6f6ed", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/9aQrt6idTIVygsu3643826d949d17", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/9|/Y2fpFe%20C4ml6Ud62cc276550736", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/AInQB8pgKPhnQIZ364da6d6562770,,\\\"Headquartered", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/Ksf0V7pNNwF6HIc3632b2cb5bb19e?download_archive", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/L107zTa4UccNfDp562d695f5bdbf0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/L4sCa4MjJP2kuGyx653fbf147", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/OEtdflvLlTT8wLxE64185a7eafa31", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/OZ11yP32uQRaBeOI62e3d3c30c19c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/PHGKqcDAe6MRLtuT64c0b9f2c8b63", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/RbVJA9aK70XvgWYu651b4b2a183ec", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/SWbgobA8OMFDDz4B6410edb943796", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/UN7ztWR4ULIuF0xW655dbf254009a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/UaT8i3f7vcgXAxUp6538273164c84", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/W0wJk62edYT7jrvM6441bf00dba2e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/XgSBRG356wX2Neuk656b95f474870", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/Y7n3Q3WiUL3XGZiu6412dbc2d7dfe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/YCooW1gTutkETH1m642aa4d5d9c32", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/YE23OUQ0eKmGrTin654bec2a6c537", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/afawnyv522gohdpb65c405b57c860", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/auhOwWRRuvRKfiag643de79bb1613", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/brit7of7zkygxomz6584d965c7eb9", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/cpdv8mxxmmpbntlb65c54a7c76b85", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/dpGGTXwJUYMy8cTW63002f8b14b9c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/evdiW9VNDhkOlapY656ed9dd059d2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/fqf5uhnz0tew9ueu6584d8475cce6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/gjZovjwoRd45667u642528e274d23", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/gxepsaiy8vcptxc364ee35558c18f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/ienBAuYW1NPTpP8E6412dacad", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/irCb7TR26ZAj2w0J65b28e37117d6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/koLBVr3DyxOi3oFT6438e6e91cd3b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/kylVIz6qhJT9plrI6412ded8bd52c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/lwgu87uwgi0woesq65701c989bbb5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/oj8tk3qqqpdjrboe65cf1bc14ce9f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/olj0G2cMEtPYad5565377907a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/p1gv6eqqa7lttidp65c5380f3c4ee", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/pXNIXYHx41ZnpXDo6329751800a17", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/qEHYNGa12f4hKrmL64e1c7102ae2f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/rappER3oZWEYqjzg64cadc43031f3%C2%BB?", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/rwmUH1oZo4zTC7tv6572e5420940b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/tjswu9noddwwsfo865cf0428d543e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/tvEmpPOMW8QObXYs65c9d73f9fba8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/wzzs5vgd5r0ni8ji65cde24bbc436", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/xdUKTdprAXGSkYVE63f52ef078a96", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/xyjkcpn4m4grzvwi64d375bd1c0a7", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/yKm4iW5XBvp6EvFH654e99f70b89e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/z56cW2OOAoAH7tRf63845fb26d907", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/zcrrG5l18LHHt2Ym64629612ac716", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/zkpgWSIiBU6TNmPR632b2c578c867?download_archive", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/posts/affil-exposed", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/posts/affil-exposed.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/posts/french-action.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/posts/infra-disrupted.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/posts/japan-europol-recovery.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/posts/lbsupp-whoishe.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/posts/leaks/core/VM2_CORE_ADMIN_2.png", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/posts/lockbit-leaks.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/posts/lockbit-linked-uk-arrests.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/posts/remember-this.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/posts/unseen-photos.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/rules", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion/)", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion/FrigorificosBandeira", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion/_kfisher", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion/_mk", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion/_oomiya", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion/artdis", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - } - ], - "registrant_names": [ - { - "value": "lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "lockbitapt72iw55njgnqpymggskg5yp75ry7rirtdg4m7i42artsbqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "lockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "lockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - } - ] - }, - "files": { - "itw_urls": [ - { - "value": "http://119.28.78.133/LB3.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://147.78.47.125/LB3.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://174.138.23.254/boom/LB3.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://185.215.113.101/file/380g.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://185.215.113.41/files/5804781818/eZp5zCz.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://185.39.17.162/files/7244183739/LWHqO19.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://196.251.118.210/d/rr.dll", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://196.251.118.210/d/rr.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://196.251.118.210/d/rref.dll", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://23.26.137.225:8091/chromeset.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://23.92.208.51:8080/RW.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://34.80.156.164/svchost.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://37.48.67.140/K1OhgVFP6UopuqKiR7UXphJWH5YfWJ", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://80.64.18.219/files/7244183739/ejjSND0.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://83.149.110.52/3q4sdxInRIP1iYetMaIJPh2XS9bswg", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://83.149.110.52/O1qh2VfOksE4uWetMyT0dhJbHaQIoa", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/000026190486/scenario/417200___0e3e4323-7e68-4d95-8d04-0ee0f6f84791.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/000169122020/scenario/749913___3bcd26ec-5404-4169-8e9a-6c71845eebd8.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/000211694729/scenario/843740___b35d00a6-22f8-45a6-8e57-90e255309115.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/000317403225/scenario/337044___a00ecdd3-ff92-4a64-a7c3-7872325f9657.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/000317418366/scenario/300820___be3dadf7-7787-4729-8b35-62875dc17320.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/000324692150/scenario/233443___b7456c56-3c5c-43d7-bbce-b6f468fac1c5.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/000380646472/scenario/444644___eae2a563-bc79-4fb0-8c90-d4a0d457cb5d.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/000446281047/scenario/304922___c525f412-8eef-491d-99c1-04e421fdd4a4.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/000617868958/scenario/704624___b4186d87-4efd-4ee0-9f07-6c5ebd04a97e.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/000625801907/scenario/226042___5aefb792-ad03-4f92-a9b7-340d1567f8d3.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/000653215217/scenario/419714___364663e9-58f0-4c9c-b92d-433564f911fa.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/000668788197/scenario/680912___6f02fba3-b91f-4286-904f-55d75ff1732d.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/000701482018/scenario/597734___7beea843-9837-40cf-aaf9-0efb8565e5b9.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/000766061438/scenario/462881___03953c73-34ff-426f-8683-04fcd6b9cb1d.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/000813408289/scenario/492838___22597b46-c835-4f00-a58f-7814c9483d08.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/000843967329/scenario/328787___0dd10c46-e5c7-4028-96cd-6c922d65c5db.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/000967735041/scenario/679863___2ef5a7db-29c3-4c76-b5e9-2806d8380c10.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/001027926755/scenario/412063___15e29e25-7496-44d9-9e98-85036c12de8e.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/001075209743/scenario/814485___b1278634-4271-4ce8-8667-7e49ae077ddd.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/001101290507/scenario/306716___6d696369-6d83-4520-8c04-4c1e1009ea78.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/001131662132/scenario/641183___5d3cf566-c8dd-4bf0-8b1f-e60107870631.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/001243345080/scenario/799189___71458f90-2756-4137-bb3f-9305d18651b0.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/001248692583/scenario/699942___406514fb-f114-4af6-8fad-59393bf4bbb2.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/001290712568/scenario/855910___d1e396c4-a1f9-4471-a1fa-096e1f51f255.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/001313435608/scenario/223712___9b315a0d-c1ba-4e4b-a9d7-37b4a1c3ddb4.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/001353636501/scenario/554614___99899836-30f5-406e-9c30-ade10d9ab846.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/001416792856/scenario/412277___dacd89b9-8693-4ae3-abb1-31b6e4c66249.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/001527173000/scenario/623425___c64b73cb-246b-4908-8fb4-0019c5b3bc9c.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/001609970327/scenario/877015___510d8308-c4ac-4ec6-b32e-9d348480d2cc.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/001691834362/scenario/374769___331f3972-fac0-4078-935d-3e39994f4d75.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/001778190467/scenario/636743___9040ac7d-d861-4a3b-834f-1c30b765a177.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/001793909884/scenario/412063___15e29e25-7496-44d9-9e98-85036c12de8e.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/001861139060/scenario/704624___b4186d87-4efd-4ee0-9f07-6c5ebd04a97e.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/001896711985/scenario/882556___c53d1a17-65da-4d97-9c65-449af4b80fb2.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/002011882129/scenario/770187___991a10fa-2455-494b-a74c-1aabd2e90e1a.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/002020156442/scenario/370371___5fdb5737-ac1c-41db-8f40-5f9260407f97.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/002029038073/scenario/891381___2ba85d0b-d72a-46f6-b598-58b0ef6b0936.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/002034316341/scenario/567682___89ef17c4-d109-4b80-8684-2c8b488ed7ef.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/002041434944/scenario/658783___049d84cc-dd0f-4d4e-a35c-5f9cbada11ff.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/002098511289/scenario/796135___1cb2330d-9be9-431a-b1ed-c11e30ff933a.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://raw.githubusercontent.com/petikvx/LockBit-Black-Builder/main/LockBit3Builder/Build/LB3.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://raw.githubusercontent.com/petikvx/LockBit-Black-Builder/refs/heads/main/LockBit30/Build/LB3.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://s3.us-east-1.wasabisys.com/vxugmwdb/6e07da23603fbe5b26755df5b8fec19cadf1f7001b1558ea4f12e20271263417", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://s3.us-east-1.wasabisys.com/vxugmwdb/eb82946fa0de261e92f8f60aa878c9fef9ebb34fdababa66995403b110118b12?x-amz-algorithm=aws4-hmac-sha256&x-amz-credential=4t0qtsw3aj0t4i3g983l/20240711/us-east-1/s3/aws4_request&x-amz-date=20240711t180053z&x-amz-expires=300&x-amz-signedheaders=host&x-amz-signature=35f7ee6b7fa5a7c013c45d6e43838737fb89a6897292320b319319d4efcead8e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://wdfiles.ru/rC9O?download_token=3b806f12ff8d12174dfc7a75acf9170c3f8f009574394de3d3704e510c4de248", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://174.138.23.254/boom/LB3.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://github.com/petikvx/LockBit-Black-Builder/blob/main/LockBit3Builder/Build/LB3.exe?raw=true", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://github.com/petikvx/LockBit-Black-Builder/raw/main/LockBit3Builder/Build/LB3.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://github.com/petikvx/LockBit-Black-Builder/raw/refs/heads/main/LockBit30/Build/LB3.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://jerando.com/uploads/user_617/CB-menuiserie/.store/20161121_164609.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://pcsdl.com/short-url-v2/001209761168/scenario/535429___297e2f68-cf6b-4c2e-b907-7c8085438102.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://pcsdl.com/short-url-v2/001554699068/scenario/680912___6f02fba3-b91f-4286-904f-55d75ff1732d.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://raw.githubusercontent.com/petikvx/LockBit-Black-Builder/main/LockBit3Builder/Build/LB3.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://raw.githubusercontent.com/petikvx/LockBit-Black-Builder/refs/heads/main/LockBit30/Build/LB3.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://www.pixelindustry.co.nz/w2box/?download=LB3.txt", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://185.215.113.101/file/LB3.exe", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://80.64.18.219/files/7244183739/0e9KhDv.exe", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://uploads.simosnap.com/321a1e5f6f7820df40a352964e231b64/ee9e9d6b90c5df29a52464e977b566ad", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://uploads.simosnap.com/786b2c7a7237e5e429f396ff5334d34b/ee9e9d6b90c5df29a52464e977b566ad", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://uploads.simosnap.com/dc84c8a43201fc905c6acc8cb20dbc46/ee9e9d6b90c5df29a52464e977b566ad", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://176.111.174.140/svchost.exe", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "https://master-repogen.vercel.app/file/server.scr", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "http://a1035933.xsph.ru/LB3.exe", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "http://188.120.247.108/files/4mmc.exe", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - } - ], - "contacted_urls": [ - { - "value": "http://www.microsoft.com/pki/certs/MicrosoftTimeStampPCA.crt", - "count": 24, - "total_related": 86784, - "prevalence": 0.0002765486725663717 - }, - { - "value": "http://www.microsoft.com/pki/certs/MicCodSigPCA_08-31-2010.crt", - "count": 24, - "total_related": 88270, - "prevalence": 0.00027189305539821005 - }, - { - "value": "http://0.0.0.1/", - "count": 12, - "total_related": 352, - "prevalence": 0.03409090909090909 - }, - { - "value": "https://update.googleapis.com/service/update2/json", - "count": 2, - "total_related": 33487, - "prevalence": 5.972466927464389e-5 - }, - { - "value": "http://github.org/?G9RzV=Ozl1d51AhUYka43GZ1x&mW6=a0EfMYYixF&RGVtg=KKR1fuN", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://github.org/?Rwgri38OuH=fi8WW4M8EDa9&tJo6=iTGwb6QD10pP&uzhS=IpPQLqOwrU2Ho&5oXW138mKz=rTnE4YbwwI2ywE&5aBXoI8h=hz9lCVrooE7KhDqP&YX8URGZ6OK=5spagCknd&JIY=qXAcSobpyg3vtsx&iZHwHF=WnRKXtI4&kKOntd=vjbxQv9TB&ei9Hg0Zqi=4GsRXq&Xe3=k9XE3rpPV73e&gsVP=LrGM7oiu0aRwbn&NN5ljZm=4NENO3jLb&xo4LVU01=KgjdZTy79AmNbp0Uv&3pw9Xinmpf=65yvVGi&oZu1eE=gCkk2CatDLNftjoEP7f&eQCxe=jF2DeQC72ayy&lIrR2b=hvqsUG4TGfj&kIDVVBd=RwItZXyMYWVy", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://github.org/?uLm=lRRXtQYy&L7PU=m4ciqwaZMronBvUXBx75&u3X2H1Qj=&LrQM=OS39UKWYLeesKy4iLP&tZE63Qjf=OnXn5QrhUKcWd&YCc5=1qO2lrl8ISrHFd8hD6y", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://github.org/?xQsxibO=ebxK2&8BvzXkuc=PC4IObUP96JWqX&c7nhBg=1ZbhLrmkKS2&CNRDH5X6i6=qWL7G&G9vjeZKKy=iaibqsUuYJvbd66dxG&=uY9bcqQOvve2px8XzU", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://github.org/?zTNN3=72iE", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://github.com/?G9RzV=Ozl1d51AhUYka43GZ1x&mW6=a0EfMYYixF&RGVtg=KKR1fuN", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://github.com/?Rwgri38OuH=fi8WW4M8EDa9&tJo6=iTGwb6QD10pP&uzhS=IpPQLqOwrU2Ho&5oXW138mKz=rTnE4YbwwI2ywE&5aBXoI8h=hz9lCVrooE7KhDqP&YX8URGZ6OK=5spagCknd&JIY=qXAcSobpyg3vtsx&iZHwHF=WnRKXtI4&kKOntd=vjbxQv9TB&ei9Hg0Zqi=4GsRXq&Xe3=k9XE3rpPV73e&gsVP=LrGM7oiu0aRwbn&NN5ljZm=4NENO3jLb&xo4LVU01=KgjdZTy79AmNbp0Uv&3pw9Xinmpf=65yvVGi&oZu1eE=gCkk2CatDLNftjoEP7f&eQCxe=jF2DeQC72ayy&lIrR2b=hvqsUG4TGfj&kIDVVBd=RwItZXyMYWVy", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://github.com/?xQsxibO=ebxK2&8BvzXkuc=PC4IObUP96JWqX&c7nhBg=1ZbhLrmkKS2&CNRDH5X6i6=qWL7G&G9vjeZKKy=iaibqsUuYJvbd66dxG&=uY9bcqQOvve2px8XzU", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://github.com/?zTNN3=72iE", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://update.googleapis.com/service/update2/json?cup2key=14:0xcFspjR-Mf652igbyht-1FLBIWXErCZcMMo5UILmFk&cup2hreq=5a4e3a6b277b66e67aa94765a7063865edf92e2ee1f769caef610af4d32f633c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://update.googleapis.com/service/update2/json?cup2key=14:fi4tStm1ajp7yxpl4Mu99GWIQcXW-ScFAazmuarDMSc&cup2hreq=53605224c85318033157889aec2898c24af15a99e308ea7a98096ee369585ae2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://pastebin.com/raw/Jv1P4zmq", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://91.211.250.177/24777744417c481c.php", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "https://piratetwrath.run/ytus", - "count": 1, - "total_related": 56, - "prevalence": 0.017857142857142856 - }, - { - "value": "http://e6.o.lencr.org/MFMwUTBPME0wSzAJBgUrDgMCGgUABBTUejiAQejpjQc4fOz2ttjyD6VkMQQUDcXM/ZvuFAWhTDCCpT5eisNYCdICEgaKc14QkOr/LKXh4Wlg/Shyow==", - "count": 1, - "total_related": 68, - "prevalence": 0.014705882352941176 - }, - { - "value": "http://185.215.113.41/files/unique1/random.exe", - "count": 1, - "total_related": 87, - "prevalence": 0.011494252873563218 - }, - { - "value": "http://185.215.113.41/test/exe/random.exe", - "count": 1, - "total_related": 94, - "prevalence": 0.010638297872340425 - }, - { - "value": "http://185.215.113.41/files/fate/random.exe", - "count": 1, - "total_related": 96, - "prevalence": 0.010416666666666666 - }, - { - "value": "http://185.215.113.41/files/unique2/random.exe", - "count": 1, - "total_related": 96, - "prevalence": 0.010416666666666666 - }, - { - "value": "http://185.215.113.41/well/random.exe", - "count": 1, - "total_related": 102, - "prevalence": 0.00980392156862745 - }, - { - "value": "http://185.215.113.41/off/random.exe", - "count": 1, - "total_related": 111, - "prevalence": 0.009009009009009009 - }, - { - "value": "http://185.215.113.41/luma/random.exe", - "count": 1, - "total_related": 118, - "prevalence": 0.00847457627118644 - }, - { - "value": "http://185.215.113.41/mine/random.exe", - "count": 1, - "total_related": 162, - "prevalence": 0.006172839506172839 - }, - { - "value": "http://185.215.113.59/Dy5h4kus/index.php", - "count": 1, - "total_related": 309, - "prevalence": 0.003236245954692557 - }, - { - "value": "https://changeaie.top/geps", - "count": 1, - "total_related": 369, - "prevalence": 0.0027100271002710027 - }, - { - "value": "https://clarmodq.top/qoxo", - "count": 1, - "total_related": 920, - "prevalence": 0.0010869565217391304 - }, - { - "value": "http://ocsp.sectigo.com/MFEwTzBNMEswSTAJBgUrDgMCGgUABBTPlNxcMEqnlIVyH5VuZ4lawhZX3QQU9oUKOxGG4QR9DqoLLNLuzGR7e64CEE4o94a2bBo7lCzSxA63QqU=", - "count": 1, - "total_related": 2345, - "prevalence": 0.00042643923240938164 - }, - { - "value": "http://ocsp.usertrust.com/MFIwUDBOMEwwSjAJBgUrDgMCGgUABBSr83eyJy3njhjVpn5bEpfc6MXawQQUOuEJhtTPGcKWdnRJdtzgNcZjY5oCEQDzZE5rbgBQI34JRr174fUd", - "count": 1, - "total_related": 7376, - "prevalence": 0.00013557483731019523 - }, - { - "value": "http://armmf.adobe.com/arm-manifests/win/ServicesUpdater/DC/RdrManifest2.msi", - "count": 1, - "total_related": 42882, - "prevalence": 2.331980784478336e-5 - }, - { - "value": "http://armmf.adobe.com/arm-manifests/win/ArmManifest3.msi", - "count": 1, - "total_related": 51213, - "prevalence": 1.9526292152383183e-5 - }, - { - "value": "http://detectportal.firefox.com/success.txt?ipv4", - "count": 1, - "total_related": 75297, - "prevalence": 1.3280741596610755e-5 - }, - { - "value": "http://crt.sectigo.com/SectigoPublicCodeSigningCAR36.crt", - "count": 52, - "total_related": 100000, - "prevalence": 0.00052 - }, - { - "value": "http://crt.sectigo.com/SectigoPublicCodeSigningRootR46.p7c", - "count": 51, - "total_related": 100000, - "prevalence": 0.00051 - }, - { - "value": "http://download.windowsupdate.com/d/msdownload/update/others/2015/05/17930914_a3b333eff1f0428f5a2c87724c542504821cdbd8.cab", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "http://www.msftncsi.com/ncsi.txt", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "http://ip-api.com/line/?fields=hosting", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "http://ocsp.comodoca.com/MFEwTzBNMEswSTAJBgUrDgMCGgUABBRTtU9uFqgVGHhJwXZyWCNXmVR5ngQUoBEKIz6W8Qfs4q8p74Klf9AwpLQCEFZnHQTqT5lMbxCBR1nSdZQ=", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "contacted_domains": [ - { - "value": "23.125.168.192.in-addr.arpa", - "count": 9, - "total_related": 11660, - "prevalence": 0.0007718696397941681 - }, - { - "value": "13.125.168.192.in-addr.arpa", - "count": 9, - "total_related": 11673, - "prevalence": 0.0007710100231303007 - }, - { - "value": "50.125.168.192.in-addr.arpa", - "count": 9, - "total_related": 11925, - "prevalence": 0.0007547169811320754 - }, - { - "value": "20.125.168.192.in-addr.arpa", - "count": 8, - "total_related": 11575, - "prevalence": 0.0006911447084233262 - }, - { - "value": "53.125.168.192.in-addr.arpa", - "count": 8, - "total_related": 11608, - "prevalence": 0.0006891798759476223 - }, - { - "value": "63.125.168.192.in-addr.arpa", - "count": 8, - "total_related": 11722, - "prevalence": 0.000682477392936359 - }, - { - "value": "56.125.168.192.in-addr.arpa", - "count": 8, - "total_related": 11854, - "prevalence": 0.0006748776784207862 - }, - { - "value": "5.125.168.192.in-addr.arpa", - "count": 7, - "total_related": 11350, - "prevalence": 0.0006167400881057269 - }, - { - "value": "55.125.168.192.in-addr.arpa", - "count": 7, - "total_related": 11403, - "prevalence": 0.0006138735420503376 - }, - { - "value": "15.125.168.192.in-addr.arpa", - "count": 7, - "total_related": 11438, - "prevalence": 0.0006119951040391676 - }, - { - "value": "4.125.168.192.in-addr.arpa", - "count": 7, - "total_related": 11440, - "prevalence": 0.0006118881118881119 - }, - { - "value": "30.125.168.192.in-addr.arpa", - "count": 7, - "total_related": 11462, - "prevalence": 0.000610713662537079 - }, - { - "value": "57.125.168.192.in-addr.arpa", - "count": 7, - "total_related": 11513, - "prevalence": 0.0006080083384000695 - }, - { - "value": "52.125.168.192.in-addr.arpa", - "count": 7, - "total_related": 11544, - "prevalence": 0.0006063756063756063 - }, - { - "value": "64.125.168.192.in-addr.arpa", - "count": 7, - "total_related": 11617, - "prevalence": 0.0006025652061633813 - }, - { - "value": "36.125.168.192.in-addr.arpa", - "count": 7, - "total_related": 11741, - "prevalence": 0.0005962013457116088 - }, - { - "value": "11.125.168.192.in-addr.arpa", - "count": 7, - "total_related": 11971, - "prevalence": 0.0005847464706373736 - }, - { - "value": "6.125.168.192.in-addr.arpa", - "count": 7, - "total_related": 12042, - "prevalence": 0.0005812987875768145 - }, - { - "value": "65.125.168.192.in-addr.arpa", - "count": 7, - "total_related": 12409, - "prevalence": 0.0005641066967523572 - }, - { - "value": "4.1.16.172.in-addr.arpa", - "count": 6, - "total_related": 307, - "prevalence": 0.019543973941368076 - }, - { - "value": "38.125.168.192.in-addr.arpa", - "count": 6, - "total_related": 11207, - "prevalence": 0.0005353796734183992 - }, - { - "value": "35.125.168.192.in-addr.arpa", - "count": 6, - "total_related": 11430, - "prevalence": 0.0005249343832020997 - }, - { - "value": "39.125.168.192.in-addr.arpa", - "count": 6, - "total_related": 11518, - "prevalence": 0.0005209237714881056 - }, - { - "value": "21.125.168.192.in-addr.arpa", - "count": 6, - "total_related": 11532, - "prevalence": 0.0005202913631633715 - }, - { - "value": "43.125.168.192.in-addr.arpa", - "count": 6, - "total_related": 11574, - "prevalence": 0.0005184033177812338 - }, - { - "value": "41.125.168.192.in-addr.arpa", - "count": 6, - "total_related": 11608, - "prevalence": 0.0005168849069607167 - }, - { - "value": "59.125.168.192.in-addr.arpa", - "count": 6, - "total_related": 11612, - "prevalence": 0.0005167068549776093 - }, - { - "value": "10.125.168.192.in-addr.arpa", - "count": 6, - "total_related": 11736, - "prevalence": 0.0005112474437627812 - }, - { - "value": "51.125.168.192.in-addr.arpa", - "count": 6, - "total_related": 11748, - "prevalence": 0.0005107252298263534 - }, - { - "value": "48.125.168.192.in-addr.arpa", - "count": 6, - "total_related": 11768, - "prevalence": 0.0005098572399728076 - }, - { - "value": "42.125.168.192.in-addr.arpa", - "count": 6, - "total_related": 11782, - "prevalence": 0.0005092514004413513 - }, - { - "value": "27.125.168.192.in-addr.arpa", - "count": 6, - "total_related": 11815, - "prevalence": 0.0005078290308929327 - }, - { - "value": "22.125.168.192.in-addr.arpa", - "count": 6, - "total_related": 12163, - "prevalence": 0.0004932993504891886 - }, - { - "value": "3.1.16.172.in-addr.arpa", - "count": 5, - "total_related": 314, - "prevalence": 0.01592356687898089 - }, - { - "value": "34.125.168.192.in-addr.arpa", - "count": 5, - "total_related": 11289, - "prevalence": 0.00044290902648595976 - }, - { - "value": "19.125.168.192.in-addr.arpa", - "count": 5, - "total_related": 11404, - "prevalence": 0.0004384426517011575 - }, - { - "value": "26.125.168.192.in-addr.arpa", - "count": 5, - "total_related": 11429, - "prevalence": 0.0004374835943652113 - }, - { - "value": "9.125.168.192.in-addr.arpa", - "count": 5, - "total_related": 11460, - "prevalence": 0.0004363001745200698 - }, - { - "value": "58.125.168.192.in-addr.arpa", - "count": 5, - "total_related": 11494, - "prevalence": 0.0004350095702105446 - }, - { - "value": "54.125.168.192.in-addr.arpa", - "count": 5, - "total_related": 11543, - "prevalence": 0.00043316295590401107 - }, - { - "value": "47.125.168.192.in-addr.arpa", - "count": 5, - "total_related": 11634, - "prevalence": 0.00042977479800584495 - }, - { - "value": "3.125.168.192.in-addr.arpa", - "count": 5, - "total_related": 11661, - "prevalence": 0.0004287796929937398 - }, - { - "value": "2.125.168.192.in-addr.arpa", - "count": 5, - "total_related": 11677, - "prevalence": 0.000428192172647084 - }, - { - "value": "40.125.168.192.in-addr.arpa", - "count": 5, - "total_related": 11688, - "prevalence": 0.0004277891854893908 - }, - { - "value": "18.125.168.192.in-addr.arpa", - "count": 5, - "total_related": 11713, - "prevalence": 0.00042687612054981646 - }, - { - "value": "37.125.168.192.in-addr.arpa", - "count": 5, - "total_related": 11822, - "prevalence": 0.0004229402808323465 - }, - { - "value": "12.125.168.192.in-addr.arpa", - "count": 5, - "total_related": 12322, - "prevalence": 0.0004057782827463074 - }, - { - "value": "103.122.168.192.in-addr.arpa", - "count": 4, - "total_related": 61, - "prevalence": 0.06557377049180328 - }, - { - "value": "104.122.168.192.in-addr.arpa", - "count": 4, - "total_related": 64, - "prevalence": 0.0625 - }, - { - "value": "134.1.16.172.in-addr.arpa", - "count": 4, - "total_related": 106, - "prevalence": 0.03773584905660377 - }, - { - "value": "131.1.16.172.in-addr.arpa", - "count": 4, - "total_related": 111, - "prevalence": 0.036036036036036036 - }, - { - "value": "137.1.16.172.in-addr.arpa", - "count": 4, - "total_related": 111, - "prevalence": 0.036036036036036036 - }, - { - "value": "138.1.16.172.in-addr.arpa", - "count": 4, - "total_related": 112, - "prevalence": 0.03571428571428571 - }, - { - "value": "132.1.16.172.in-addr.arpa", - "count": 4, - "total_related": 114, - "prevalence": 0.03508771929824561 - }, - { - "value": "111.1.16.172.in-addr.arpa", - "count": 4, - "total_related": 124, - "prevalence": 0.03225806451612903 - }, - { - "value": "102.1.16.172.in-addr.arpa", - "count": 4, - "total_related": 125, - "prevalence": 0.032 - }, - { - "value": "105.1.16.172.in-addr.arpa", - "count": 4, - "total_related": 125, - "prevalence": 0.032 - }, - { - "value": "128.1.16.172.in-addr.arpa", - "count": 4, - "total_related": 126, - "prevalence": 0.031746031746031744 - }, - { - "value": "119.1.16.172.in-addr.arpa", - "count": 4, - "total_related": 127, - "prevalence": 0.031496062992125984 - }, - { - "value": "106.1.16.172.in-addr.arpa", - "count": 4, - "total_related": 129, - "prevalence": 0.031007751937984496 - }, - { - "value": "116.1.16.172.in-addr.arpa", - "count": 4, - "total_related": 129, - "prevalence": 0.031007751937984496 - }, - { - "value": "121.1.16.172.in-addr.arpa", - "count": 4, - "total_related": 131, - "prevalence": 0.030534351145038167 - }, - { - "value": "103.1.16.172.in-addr.arpa", - "count": 4, - "total_related": 133, - "prevalence": 0.03007518796992481 - }, - { - "value": "2.1.16.172.in-addr.arpa", - "count": 4, - "total_related": 301, - "prevalence": 0.013289036544850499 - }, - { - "value": "16.125.168.192.in-addr.arpa", - "count": 4, - "total_related": 11236, - "prevalence": 0.000355998576005696 - }, - { - "value": "33.125.168.192.in-addr.arpa", - "count": 4, - "total_related": 11295, - "prevalence": 0.0003541389995573263 - }, - { - "value": "24.125.168.192.in-addr.arpa", - "count": 4, - "total_related": 11328, - "prevalence": 0.00035310734463276836 - }, - { - "value": "62.125.168.192.in-addr.arpa", - "count": 4, - "total_related": 11496, - "prevalence": 0.0003479471120389701 - }, - { - "value": "28.125.168.192.in-addr.arpa", - "count": 4, - "total_related": 11505, - "prevalence": 0.0003476749239461104 - }, - { - "value": "45.125.168.192.in-addr.arpa", - "count": 4, - "total_related": 11553, - "prevalence": 0.00034623041634207567 - }, - { - "value": "14.125.168.192.in-addr.arpa", - "count": 4, - "total_related": 11584, - "prevalence": 0.0003453038674033149 - }, - { - "value": "7.125.168.192.in-addr.arpa", - "count": 4, - "total_related": 11658, - "prevalence": 0.00034311202607651396 - }, - { - "value": "31.125.168.192.in-addr.arpa", - "count": 4, - "total_related": 11702, - "prevalence": 0.0003418219107844813 - }, - { - "value": "60.125.168.192.in-addr.arpa", - "count": 4, - "total_related": 12237, - "prevalence": 0.0003268775026558797 - }, - { - "value": "113.1.16.172.in-addr.arpa", - "count": 3, - "total_related": 119, - "prevalence": 0.025210084033613446 - }, - { - "value": "107.1.16.172.in-addr.arpa", - "count": 3, - "total_related": 125, - "prevalence": 0.024 - }, - { - "value": "112.1.16.172.in-addr.arpa", - "count": 3, - "total_related": 125, - "prevalence": 0.024 - }, - { - "value": "104.1.16.172.in-addr.arpa", - "count": 3, - "total_related": 129, - "prevalence": 0.023255813953488372 - }, - { - "value": "110.1.16.172.in-addr.arpa", - "count": 3, - "total_related": 129, - "prevalence": 0.023255813953488372 - }, - { - "value": "114.1.16.172.in-addr.arpa", - "count": 3, - "total_related": 129, - "prevalence": 0.023255813953488372 - }, - { - "value": "108.1.16.172.in-addr.arpa", - "count": 3, - "total_related": 130, - "prevalence": 0.023076923076923078 - }, - { - "value": "101.1.16.172.in-addr.arpa", - "count": 3, - "total_related": 133, - "prevalence": 0.022556390977443608 - }, - { - "value": "www.microsoft.com", - "count": 78, - "total_related": 100000, - "prevalence": 0.00078 - }, - { - "value": "crt.sectigo.com", - "count": 48, - "total_related": 100000, - "prevalence": 0.00048 - }, - { - "value": "sectigo.com", - "count": 42, - "total_related": 100000, - "prevalence": 0.00042 - }, - { - "value": "tse1.mm.bing.net", - "count": 23, - "total_related": 100000, - "prevalence": 0.00023 - }, - { - "value": "fp2e7a.wpc.2be4.phicdn.net", - "count": 22, - "total_related": 100000, - "prevalence": 0.00022 - }, - { - "value": "fp2e7a.wpc.phicdn.net", - "count": 22, - "total_related": 100000, - "prevalence": 0.00022 - }, - { - "value": "microsoft.com", - "count": 19, - "total_related": 100000, - "prevalence": 0.00019 - }, - { - "value": "c.pki.goog", - "count": 15, - "total_related": 100000, - "prevalence": 0.00015 - }, - { - "value": "time.windows.com", - "count": 14, - "total_related": 100000, - "prevalence": 0.00014 - }, - { - "value": "dns.msftncsi.com", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "res.public.onecdn.static.microsoft", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "bg.microsoft.map.fastly.net", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": "ecs-office.s-0005.dual-s-msedge.net", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "s-0005.dual-s-msedge.net", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "1.1.16.172.in-addr.arpa", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "a233.dscd.akamai.net", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "assets.msn.com", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "login.live.com", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - } - ], - "contacted_ips": [ - { - "value": "10.0.2.2", - "count": 10, - "total_related": 4950, - "prevalence": 0.00202020202020202 - }, - { - "value": "10.0.2.3", - "count": 10, - "total_related": 29279, - "prevalence": 0.0003415417193210151 - }, - { - "value": "192.168.166.11", - "count": 5, - "total_related": 272, - "prevalence": 0.01838235294117647 - }, - { - "value": "192.168.166.8", - "count": 5, - "total_related": 272, - "prevalence": 0.01838235294117647 - }, - { - "value": "192.168.166.10", - "count": 5, - "total_related": 273, - "prevalence": 0.018315018315018316 - }, - { - "value": "192.168.166.9", - "count": 5, - "total_related": 274, - "prevalence": 0.01824817518248175 - }, - { - "value": "192.168.166.7", - "count": 5, - "total_related": 280, - "prevalence": 0.017857142857142856 - }, - { - "value": "192.168.166.1", - "count": 5, - "total_related": 509, - "prevalence": 0.009823182711198428 - }, - { - "value": "0.0.0.1", - "count": 5, - "total_related": 78758, - "prevalence": 6.348561415983138e-5 - }, - { - "value": "192.168.166.13", - "count": 4, - "total_related": 244, - "prevalence": 0.01639344262295082 - }, - { - "value": "192.168.166.12", - "count": 4, - "total_related": 257, - "prevalence": 0.01556420233463035 - }, - { - "value": "192.168.166.16", - "count": 4, - "total_related": 286, - "prevalence": 0.013986013986013986 - }, - { - "value": "192.168.166.15", - "count": 4, - "total_related": 287, - "prevalence": 0.013937282229965157 - }, - { - "value": "192.168.166.14", - "count": 4, - "total_related": 288, - "prevalence": 0.013888888888888888 - }, - { - "value": "192.168.166.5", - "count": 3, - "total_related": 262, - "prevalence": 0.011450381679389313 - }, - { - "value": "192.168.166.4", - "count": 3, - "total_related": 263, - "prevalence": 0.011406844106463879 - }, - { - "value": "192.168.166.6", - "count": 3, - "total_related": 263, - "prevalence": 0.011406844106463879 - }, - { - "value": "192.168.166.3", - "count": 3, - "total_related": 273, - "prevalence": 0.01098901098901099 - }, - { - "value": "192.168.166.2", - "count": 3, - "total_related": 280, - "prevalence": 0.010714285714285714 - }, - { - "value": "192.168.122.10", - "count": 3, - "total_related": 10849, - "prevalence": 0.0002765231818600793 - }, - { - "value": "192.168.122.67", - "count": 3, - "total_related": 18112, - "prevalence": 0.00016563604240282687 - }, - { - "value": "192.168.122.84", - "count": 3, - "total_related": 19406, - "prevalence": 0.00015459136349582603 - }, - { - "value": "ff02::1:3", - "count": 3, - "total_related": 28465, - "prevalence": 0.00010539258738802038 - }, - { - "value": "192.168.0.95", - "count": 3, - "total_related": 48445, - "prevalence": 6.192589534523686e-5 - }, - { - "value": "192.168.122.101", - "count": 3, - "total_related": 82347, - "prevalence": 3.643119967940544e-5 - }, - { - "value": "192.168.0.102", - "count": 2, - "total_related": 40833, - "prevalence": 4.8979991673401416e-5 - }, - { - "value": "20.99.133.109", - "count": 44, - "total_related": 100000, - "prevalence": 0.00044 - }, - { - "value": "192.229.211.108", - "count": 34, - "total_related": 100000, - "prevalence": 0.00034 - }, - { - "value": "20.99.186.246", - "count": 29, - "total_related": 100000, - "prevalence": 0.00029 - }, - { - "value": "23.216.81.152", - "count": 23, - "total_related": 100000, - "prevalence": 0.00023 - }, - { - "value": "20.99.185.48", - "count": 22, - "total_related": 100000, - "prevalence": 0.00022 - }, - { - "value": "224.0.0.252", - "count": 22, - "total_related": 100000, - "prevalence": 0.00022 - }, - { - "value": "20.99.184.37", - "count": 18, - "total_related": 100000, - "prevalence": 0.00018 - }, - { - "value": "204.79.197.203", - "count": 17, - "total_related": 100000, - "prevalence": 0.00017 - }, - { - "value": "172.64.149.23", - "count": 15, - "total_related": 100000, - "prevalence": 0.00015 - }, - { - "value": "23.55.140.42", - "count": 15, - "total_related": 100000, - "prevalence": 0.00015 - }, - { - "value": "20.69.140.28", - "count": 14, - "total_related": 100000, - "prevalence": 0.00014 - }, - { - "value": "23.196.145.221", - "count": 13, - "total_related": 100000, - "prevalence": 0.00013 - }, - { - "value": "104.18.38.233", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "192.229.221.95", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "151.101.22.172", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": "184.27.218.92", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": "13.107.21.200", - "count": 8, - "total_related": 100000, - "prevalence": 8e-5 - }, - { - "value": "52.185.73.156", - "count": 8, - "total_related": 100000, - "prevalence": 8e-5 - }, - { - "value": "131.107.255.255", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "192.168.0.1", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "204.79.197.200", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "23.196.193.245", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "52.154.209.174", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "104.71.214.69", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "192.168.0.14", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "192.168.0.67", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "23.213.37.172", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "114.114.114.114", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "13.107.4.50", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "131.253.33.203", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "150.171.27.10", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "150.171.28.10", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "192.168.0.27", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "192.168.0.3", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "218.85.157.99", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "192.168.0.26", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "192.168.0.31", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "192.168.0.32", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "192.168.0.35", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "192.168.0.8", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "199.232.210.172", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "23.216.147.64", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "192.168.0.10", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "192.168.0.12", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "192.168.0.16", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "192.168.0.2", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "192.168.0.36", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "192.168.0.37", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "192.168.0.38", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "192.168.0.42", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "192.168.0.43", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "192.168.0.50", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "192.168.0.51", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "192.168.0.56", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "192.168.0.6", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "192.168.0.60", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "192.168.0.68", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "192.168.0.73", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "199.232.214.172", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "20.101.57.9", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "20.96.52.198", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "23.216.147.76", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "74.125.69.94", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "a83f:8110::1b00:100:2800:0", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "104.18.14.101", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "142.250.125.94", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "162.159.36.2", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "192.168.0.11", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "192.168.0.13", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "192.168.0.15", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "192.168.0.17", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "192.168.0.18", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "192.168.0.19", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "192.168.0.21", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - } - ], - "execution_parents": [ - { - "value": "b7147a76c6695b750a84de55d4569f71f694b33aeefeef5daa09318ebabd9a24", - "count": 8, - "total_related": 102, - "prevalence": 0.0784313725490196 - }, - { - "value": "34ae59b7acc09c2e82625640cae82c5158b649db1418ddbaa24138b51f1722c5", - "count": 5, - "total_related": 25, - "prevalence": 0.2 - }, - { - "value": "f566f21f3db0c4a9f421f18e6561279b4dd4c5fd3c32456a6f2e5b927b49719d", - "count": 5, - "total_related": 26, - "prevalence": 0.19230769230769232 - }, - { - "value": "57e3b02548b7af9629eefbbaf247f2984f688734966a3328e8c91acafabea468", - "count": 5, - "total_related": 80, - "prevalence": 0.0625 - }, - { - "value": "1336f6c265b29ef4c4c554cadd445dc095816e8b64a584f637dbc319c848346d", - "count": 3, - "total_related": 12, - "prevalence": 0.25 - }, - { - "value": "d2942c6c19e67220d72bfb9a30b019627b950ff0fa8669a475d5730ff5097112", - "count": 3, - "total_related": 13, - "prevalence": 0.23076923076923078 - }, - { - "value": "ff3ce05ba945382e269bbfca32f90f84a962fc949eaee21be417daf96396fc3e", - "count": 3, - "total_related": 79, - "prevalence": 0.0379746835443038 - }, - { - "value": "f711b14efb7792033b7ac954ebcfaec8141eb0abafef9c17e769ff96e8fecdf3", - "count": 2, - "total_related": 17, - "prevalence": 0.11764705882352941 - }, - { - "value": "9e1342e551b8eec0a18eb329f1968b9d81023e1152a15702fc901d8d129c16c2", - "count": 2, - "total_related": 23, - "prevalence": 0.08695652173913043 - }, - { - "value": "a1dbfe0c9ce5ed94a6344c7603483142ee4908c60798fe5e05d01343abcc5c0f", - "count": 2, - "total_related": 28, - "prevalence": 0.07142857142857142 - }, - { - "value": "bfc092b384976e97153bae0e29359461bfd65fce5ad8188d6460de57bc680eaf", - "count": 2, - "total_related": 40, - "prevalence": 0.05 - }, - { - "value": "3755718db9d33f4aba2563de454d4530a308b41b1096c904102d08e2101f2020", - "count": 2, - "total_related": 56, - "prevalence": 0.03571428571428571 - }, - { - "value": "f18c57b59014dfd89d0f0fc336443f736bec6e7f525d7c95ed383ee257a39174", - "count": 2, - "total_related": 115, - "prevalence": 0.017391304347826087 - }, - { - "value": "0225ded4dc1850d79f0ee3a717c2938d3b6436fdca4a1138dfc427095e8fe878", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0641da9d362721e94f70a40c5e8df017b52bb1ad480a01f02f92dbeacb4f369b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0f431f0230148e82699432dbb1e79a1ac967565fb2828f62e45ca625821e5d49", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "28664daf83a19ae6efd7caf9433600981fbb7c95025f473dc4e6099b603512a0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2a042b14363cddb39ef3a1f7f7b96dbb533de11226a856a8e5db42c248807114", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "77496302f15cd581f460a23cdcfdaee9b1a764326d64f8226ea13abce8d29165", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "8656c8bc2d098776803ef6648d5b4d9e4cc444647ac09bb97fcccd54956ddc94", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "89a1471200ca659d069236e757d7813e86ceeca7db0ed7f8350a850763d0b85a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0080ec82da326f6bebcab521f2c4f79bafb09e5d0eea3be39ca8a2bd6ef9aa8b", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "0ed5729655b3f09c29878e1cc10de55e0cbfae7ac344f574d471827c256cf086", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2438243a35d6eb84ee610cea1b91fc2e0e5256186a005dc861fb5a4b921c2c7f", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2d23cd3723f7038cd0424c3023bdda9c49c02831e59144e8774aadb59e389a51", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "3e6a15e8b77cdf69fc9feb2bea693349ac4ea97ef95d4138431acfad01b5224d", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "426da2085b9b19cf694566af01ddeb330be618ca071bd20053cb37a29158cb91", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "52d2af9a8ff6137ac140d31715644d479bf91078969a3884273575e765b51b99", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "77be13bdcebe3c287d776bcaa17baabb8e6733fd3f9b4936ed1b16a5e70f9864", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "820c814711f6e9342e2fc078eac22e6c33f37136eae874a694c04e948cc34eb5", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "a80f54e1ef92eb5806486ac5a8c265ab50f26ce4c19a642dd03fe13f09693fc9", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "209d0c5f48177bd0eef333787f88f41d0938a4d0a6e3444d1fe66082b5bf5461", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "414368c3a85deb96f2961fc49ea44c484a8e5756791efc7ff239e194596cb14e", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "43de9dac4e456549d8fbfb2b38686a0f794a3ad7788cf8ba9ec81b21b367e51c", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "442050fa9042c683303f972234d0a8198e7da631fa42a27c8d38e330d84fc7c7", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "5880c56845f47c743526bc924d56d15317fd292542b43aba5170c167c258ff68", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "8d4c1705286c9518dbcf3c0c01e99b7f19c761bd986372d37083a0a4354adcc1", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "9fe6dbe252ec80bf6dd4f93adfbd8b451d0cbbe4792025bdd2e909aae382b344", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "a5d0293b35b9142a5449f1f31a0b9611767a585e5ae9f125b4f980fb91faff50", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "1e86c9b1a92c3624e69ecaabb8abf495475f07a60e9a5449053270cfd2a78b51", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "9348dd3779b4b67d0a3b6a9b32f948e8a8e7b6c2f26be8900bd1b33ea988db05", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "7e55783bf229723a9b3ed1a3699321e572f70bf547a713d726c868274514e9c0", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "1ae187f1324eb6107c72fd19f3b05198663bf9775e20ff660befe125c28a52c1", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "a2ffc30b72bb25f813708da9bd34717ed91952ef1d88e64df057d9f50faa9a18", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "0cf9bcf39b9f9bb6d58c2150384080bd2be671197463e637eaa41ac7849645aa", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "58ccf2fa0a882f014cbb6fcbc6d7d15ea9608e85fb9596708685fbd7b576bfc9", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "9ed9fd45446f4a3eccd3977394ef4045f621e63850c9672ffd03771ab675f3d0", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "21879b5a8a84c5fe5e009c85744caf74b817c57203020bf919037d7ccb6b6a58", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "622b42db5fd9f7faa109212504f636c0f2f76d87e025214e3c6be14e460e8f95", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "a11587e5da097799146454e58c3cae36febb5f62901062441fb7c377def50795", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "9e81f5ff3172ac2029e60ae4705aef2bf6a503c50268693acf36bc8655378127", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "40cbce36a2755389a74ddad8f061da5535368d2edb255f61340d69807c494f79", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "61feb8b81fa95acbd8e09741b22f15da27094d0c3cfbcf7e358ea3dbeae857b7", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "00f704a09024ca12d12d2464c84eae2a95cc4c68145c000da26eb99419b8856b", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - }, - { - "value": "4bc3c6475a2f3f2cbd0545ecc89cf2f378717f152db3df24fe7a730c0e1dc125", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - }, - { - "value": "874d3f892c299a623746d6b0669298375af4bd0ea02f52ac424c579e57ab48fd", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - }, - { - "value": "05406c13d43a3796c29602a73c8d71df619dc8145840d28d27414fea40fefcdc", - "count": 1, - "total_related": 14, - "prevalence": 0.07142857142857142 - }, - { - "value": "2ade5488f2edda4601a72f807cfdbf5370098f0db8d461f5d92ad611d676feed", - "count": 1, - "total_related": 14, - "prevalence": 0.07142857142857142 - }, - { - "value": "88580efa885b9d084523baf292fdc834a477377ad92fb604f39e67c4cd331dcc", - "count": 1, - "total_related": 14, - "prevalence": 0.07142857142857142 - }, - { - "value": "8cd768765b23e275c62428b5507bc9177bc31344be72042e9607d5c99c93eda8", - "count": 1, - "total_related": 14, - "prevalence": 0.07142857142857142 - }, - { - "value": "13916d6b1fddb42f3146b641d37f3a69b491f183146e310aa972dd469e3417bf", - "count": 1, - "total_related": 15, - "prevalence": 0.06666666666666667 - }, - { - "value": "1bb1a9c810609fbec87e7220f9336b50d9d1be83a7be4fd1d85711e93b4cfdaa", - "count": 1, - "total_related": 15, - "prevalence": 0.06666666666666667 - }, - { - "value": "1cd644ff91182d2a6647e6f7c061ced0703239a85e9e01068cfd0dd1f5af24f4", - "count": 1, - "total_related": 15, - "prevalence": 0.06666666666666667 - }, - { - "value": "21280cf5c8ea9eb4a07453ba315c6206c7667852ef7e408374aed596da62898d", - "count": 1, - "total_related": 16, - "prevalence": 0.0625 - }, - { - "value": "3735150a6fa5b17f9893bf3d9e855e73f00b6c5834dc6470688360794d3044c0", - "count": 1, - "total_related": 16, - "prevalence": 0.0625 - }, - { - "value": "64c95b90a06442de37f53f3e779174024beefb155a2c93e898fd4380a6a18b2d", - "count": 1, - "total_related": 16, - "prevalence": 0.0625 - }, - { - "value": "7f899996d4bc193a1739b8f9ca51a7f46a7d41007f472df5622208e2db62b232", - "count": 1, - "total_related": 16, - "prevalence": 0.0625 - }, - { - "value": "0341ab8139cf2bea05d76ebac2060c1ab0c7922404172b9f8d73ba09b08b4fc9", - "count": 1, - "total_related": 17, - "prevalence": 0.058823529411764705 - }, - { - "value": "27304beb569bfbdc48f63bb578f8adcdc6051349d6971fd216ee4b0f96e08f5b", - "count": 1, - "total_related": 17, - "prevalence": 0.058823529411764705 - }, - { - "value": "40494b12beba32d4300eb9364b4e5543db4c46572ef739f19519f1c36c6be164", - "count": 1, - "total_related": 17, - "prevalence": 0.058823529411764705 - }, - { - "value": "500160bf68922f5ea34b543fdbfb8fac71fde193381da245d10a51d6d0062896", - "count": 1, - "total_related": 17, - "prevalence": 0.058823529411764705 - }, - { - "value": "7bf7dfc7534aec7b5ca71d147205d2b8a3ce113e5254bb342d9f9b69828cf8ee", - "count": 1, - "total_related": 17, - "prevalence": 0.058823529411764705 - }, - { - "value": "166bba02413995aff28ffeb27d3bf3d5a5f6a6cd36893e252c7b9a22836f4980", - "count": 1, - "total_related": 18, - "prevalence": 0.05555555555555555 - }, - { - "value": "1e4313839b8075330c948e4ec1110a7a925a12b9b0e5f96a6e9d0ad69782d328", - "count": 1, - "total_related": 18, - "prevalence": 0.05555555555555555 - }, - { - "value": "55ff7873f086970d76691ab9cffa3d82411f883ed1178ef97d480c9e8daae1fc", - "count": 1, - "total_related": 18, - "prevalence": 0.05555555555555555 - }, - { - "value": "62fc350397b98ac1f593eadaf0ebb6c31d272708d71c0ee9a2ce859e06ba2060", - "count": 1, - "total_related": 18, - "prevalence": 0.05555555555555555 - }, - { - "value": "029e3e11f99dbaa17ef305c6fcb4888577360ecaf48a130961442db02678be5b", - "count": 1, - "total_related": 19, - "prevalence": 0.05263157894736842 - }, - { - "value": "69cec2548d04cd837c2388dbae7234018d7239d326a919d37ecdb5cd6b08ac81", - "count": 1, - "total_related": 19, - "prevalence": 0.05263157894736842 - }, - { - "value": "7da802e06f854423395b80b7afcf38f356a38d01895d01dff09f2b0b2a6eb0c2", - "count": 1, - "total_related": 19, - "prevalence": 0.05263157894736842 - }, - { - "value": "0cc54ffd005b4d3d048e72f6d66bcc1ac5a7a511ab9ecf59dc1d2ece72c69e85", - "count": 1, - "total_related": 20, - "prevalence": 0.05 - }, - { - "value": "0ec64451a73e304f84e90bfd7573f33df2ef7b668fa4b71c9c89039d8581254e", - "count": 1, - "total_related": 21, - "prevalence": 0.047619047619047616 - }, - { - "value": "a19fd3adec14939c4c93b289085ab441b6a77a3e992ce1f2e09d27a23078a029", - "count": 1, - "total_related": 21, - "prevalence": 0.047619047619047616 - }, - { - "value": "1c5fd7bf511885054464124142f793501ab2c6e987b203c1a5f4b3bdcccb1fa1", - "count": 1, - "total_related": 22, - "prevalence": 0.045454545454545456 - }, - { - "value": "99ac7b25255663d34bc8ff74fe2f72167be9e625208415e66108e13893a844fb", - "count": 1, - "total_related": 22, - "prevalence": 0.045454545454545456 - }, - { - "value": "3cd1d9ec98d9199c17a59e2f71d77f0aa6950e8829c490083700d0ec62b3d865", - "count": 1, - "total_related": 24, - "prevalence": 0.041666666666666664 - }, - { - "value": "7833eb816dcba5d61a21eaaa90c3240b9e26f8280d33df8b231f350ee7bea926", - "count": 1, - "total_related": 24, - "prevalence": 0.041666666666666664 - }, - { - "value": "88c3613f822cbebf05da93d2d6e099edb767b2caee74aa231353d6a5e13672ad", - "count": 1, - "total_related": 25, - "prevalence": 0.04 - }, - { - "value": "92c0cf68942400d20b14256d45bda65ce3401358ba5bfec00df3316b6016c342", - "count": 1, - "total_related": 25, - "prevalence": 0.04 - }, - { - "value": "a0bcd1b1ec3143aa7bb11a8080d7f1e61f8ab045e06252ef507d0558f6eff55d", - "count": 1, - "total_related": 25, - "prevalence": 0.04 - }, - { - "value": "0ad2efd0b2590290677dae7d803c45be6f7945897f2df4fad6b82ceb5b87fc52", - "count": 1, - "total_related": 27, - "prevalence": 0.037037037037037035 - }, - { - "value": "a71d28f0b9a0ce7beb375ea85daf2ca10724859c7237d6e61dc103e738a2134d", - "count": 1, - "total_related": 28, - "prevalence": 0.03571428571428571 - }, - { - "value": "12242edf565ceef037f775a78b12ad09d3237e57c77e403a8653160e27ec6d45", - "count": 1, - "total_related": 31, - "prevalence": 0.03225806451612903 - }, - { - "value": "8ccb70e70b90b102c585cd750ba0f1f4524c27cc92ec5ce9b2c4110dc904db4c", - "count": 1, - "total_related": 31, - "prevalence": 0.03225806451612903 - }, - { - "value": "43f187e16b86e2c1fd9c4c23576b70531ed08ff582bee7c94980940cc25abe1b", - "count": 1, - "total_related": 38, - "prevalence": 0.02631578947368421 - }, - { - "value": "a7c63577d769e659fc7172f60c04528a973a6a68a5c80be7b51f407db6800569", - "count": 1, - "total_related": 41, - "prevalence": 0.024390243902439025 - }, - { - "value": "1148b9a6adfc4ce16307347e7c69d0c1654689f50b24d1df1da89012b1a61914", - "count": 1, - "total_related": 43, - "prevalence": 0.023255813953488372 - }, - { - "value": "4ef606bb544e63ac6510fe1b0634cfd26fdf6978c44a4d1adbd192fe8ebf8f59", - "count": 1, - "total_related": 48, - "prevalence": 0.020833333333333332 - }, - { - "value": "998640071344906547f8db70306dc43ffc8f3b2342e42025e750abf8896eb527", - "count": 1, - "total_related": 302, - "prevalence": 0.0033112582781456954 - }, - { - "value": "5339981168dfcefb874dc7e82563fa7aca047f17b1184ae8db9336a2335473a9", - "count": 1, - "total_related": 459, - "prevalence": 0.002178649237472767 - }, - { - "value": "0bc2ebd7d81e248ff24266be5167696d17e6f034115d9e29233e28afc9c87e79", - "count": 1, - "total_related": 477, - "prevalence": 0.0020964360587002098 - } - ], - "compressed_parents": [ - { - "value": "b7147a76c6695b750a84de55d4569f71f694b33aeefeef5daa09318ebabd9a24", - "count": 8, - "total_related": 102, - "prevalence": 0.0784313725490196 - }, - { - "value": "344fef7ed45e437a246e058a35cadffcfd3761ec20f495575d3f8ea3b8aabe24", - "count": 5, - "total_related": 23, - "prevalence": 0.21739130434782608 - }, - { - "value": "f566f21f3db0c4a9f421f18e6561279b4dd4c5fd3c32456a6f2e5b927b49719d", - "count": 5, - "total_related": 29, - "prevalence": 0.1724137931034483 - }, - { - "value": "34ae59b7acc09c2e82625640cae82c5158b649db1418ddbaa24138b51f1722c5", - "count": 5, - "total_related": 36, - "prevalence": 0.1388888888888889 - }, - { - "value": "704e97633634c202779337bd60b2e448a24b92effa2c17ce8b2e7cb4af9c9adb", - "count": 5, - "total_related": 61, - "prevalence": 0.08196721311475409 - }, - { - "value": "57e3b02548b7af9629eefbbaf247f2984f688734966a3328e8c91acafabea468", - "count": 5, - "total_related": 80, - "prevalence": 0.0625 - }, - { - "value": "eaf84d323ec4d0c805e12f68225bed9bdc322b93eaa8ef316ccc247522f05565", - "count": 3, - "total_related": 8, - "prevalence": 0.375 - }, - { - "value": "1336f6c265b29ef4c4c554cadd445dc095816e8b64a584f637dbc319c848346d", - "count": 3, - "total_related": 11, - "prevalence": 0.2727272727272727 - }, - { - "value": "d2942c6c19e67220d72bfb9a30b019627b950ff0fa8669a475d5730ff5097112", - "count": 3, - "total_related": 15, - "prevalence": 0.2 - }, - { - "value": "ff3ce05ba945382e269bbfca32f90f84a962fc949eaee21be417daf96396fc3e", - "count": 3, - "total_related": 79, - "prevalence": 0.0379746835443038 - }, - { - "value": "1bb1b363055c0422ac7c337156a68c5b62e25b669e3e801fdbc2424b6f96dc05", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "9e1342e551b8eec0a18eb329f1968b9d81023e1152a15702fc901d8d129c16c2", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "b094665ec4cdca6d8e9b9f63d8d71b1b9263eda12f1fdd1d8aa820dbf4c231f6", - "count": 2, - "total_related": 15, - "prevalence": 0.13333333333333333 - }, - { - "value": "6003da433c9240d051c7925dc0fb616a13985ffe8ff65ba1e1092dee7418782d", - "count": 2, - "total_related": 26, - "prevalence": 0.07692307692307693 - }, - { - "value": "bfc092b384976e97153bae0e29359461bfd65fce5ad8188d6460de57bc680eaf", - "count": 2, - "total_related": 32, - "prevalence": 0.0625 - }, - { - "value": "351afa339d01b385b673c2272ca3255fbad03f4b04c62a99fb99ea8be3c8561d", - "count": 2, - "total_related": 86, - "prevalence": 0.023255813953488372 - }, - { - "value": "f18c57b59014dfd89d0f0fc336443f736bec6e7f525d7c95ed383ee257a39174", - "count": 2, - "total_related": 114, - "prevalence": 0.017543859649122806 - }, - { - "value": "00e90be7052329d003befe98f5c72a3b776fcec854e06c76d82016b0dde81eed", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "02a38d0ca261e69e7ac93676c87f98d761acb5f49c41ec7cff1260ed9e08b95e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0641da9d362721e94f70a40c5e8df017b52bb1ad480a01f02f92dbeacb4f369b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "077c45a3083684f1b2398b1041eba54c498b6f4891a1dd1ff5783fd9bf2efd81", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "07827048101b75e8062308253695b2456680e55593fe4c5f1ec457b7be2a62af", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "07926e060b7083bbe639b36e9c79cce23404ba9dcaa58c190ee40d7d415ff96f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0c52f70b4c340274208310ef1c9c09eee3124fb58063aee0c010a9645e417650", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0ed5729655b3f09c29878e1cc10de55e0cbfae7ac344f574d471827c256cf086", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0f431f0230148e82699432dbb1e79a1ac967565fb2828f62e45ca625821e5d49", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0f969df02a286de37ab18bd48f018bb195f84e9935f5f28a3d09ad6e9f7cb80a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1008af117f3f9f5c2d7f634c7c88fdb2af0dc2a8d01be203f0d69897559d3e05", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "13916d6b1fddb42f3146b641d37f3a69b491f183146e310aa972dd469e3417bf", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1619d1ebff7dbbd6ca16ffea7885820c11b1c389c48bfefd2ba1b67d0049b154", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "19d4b6b7609e8f421055ff39219cc4381753a26c451f982510e51bc2770b671f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "209d0c5f48177bd0eef333787f88f41d0938a4d0a6e3444d1fe66082b5bf5461", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "23fbb26e2f0c325814ae15cb98e0d7b5a80c0b6d172db1dc0c09a2e992797154", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2438243a35d6eb84ee610cea1b91fc2e0e5256186a005dc861fb5a4b921c2c7f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "261f03e7eef18b2b90482363d1f62928a3309260f3abbe939738beefc8a1dd81", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2a042b14363cddb39ef3a1f7f7b96dbb533de11226a856a8e5db42c248807114", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2bad639d0a1f90525ad56b31641b3bd5fe1310079d1e6abd6bc7889cdc1ff3f5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2cee882bd0dc4267bacf099ac4571c319ac547be12b955f7ccb2f0144ae40876", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2daa5fa152b627f5ae23d2e8fa4e3e399d4899729ad32f184e32d59fd4dd20ef", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "31d7528594b69dc8bb94e4924c70b7befd5ec5c2cfbaa48ba1af3d604fee9259", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "338ca8f7f28cdef28ef3ea255e784ad3596b49b7395a9545060cfddd53b6e200", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "3735150a6fa5b17f9893bf3d9e855e73f00b6c5834dc6470688360794d3044c0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "374f9c0647cd87007e04065945d4f74fb5f91008c2e5c3874e62110e36b3570c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "3836986841894492f57ed22631c1b0f6311708c65babf0525d57ca1de3cbaca0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "3aff0182b1a9f5770002346fe3d33f0bac9e5bfc5bd87235c0f28c7da347c319", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "3e6a15e8b77cdf69fc9feb2bea693349ac4ea97ef95d4138431acfad01b5224d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "3fd6fa0cbd284c6ea9959b7f1fc5e01191b012b05b6dc4f0082d1dd19a36b61a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "414368c3a85deb96f2961fc49ea44c484a8e5756791efc7ff239e194596cb14e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "47970572e98100f7f993c4ec95ce1fdfed06da5c32e8420b746f93e3f55bbf85", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "498e3b7a867d41b5a3af3910d2aa6231612c787ce8a4bc14ab03f800caab130f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4bc3c6475a2f3f2cbd0545ecc89cf2f378717f152db3df24fe7a730c0e1dc125", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4d92c09aeb55814d7543a3bc7e8f7af80a6d2d85425e4713b40854785f73c5e4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4f7b6ce98ea17beeacd5832add0815e5a3b927b74cb25f2467b54ac82e416f50", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "501a6138d75535a08bfe28e4a0f77463e93c27d5b2ba17b343f72776a8a0960c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "513dd91c05752ba47152e76ca401195edda6ef74371ee4b29aaede162502d520", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "52d2af9a8ff6137ac140d31715644d479bf91078969a3884273575e765b51b99", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "54a619ecb85a5b5dc379a3a59058fcbddbe5870cae22297746b91d879ec332d9", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "55ff7873f086970d76691ab9cffa3d82411f883ed1178ef97d480c9e8daae1fc", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5721e6a09cf912aa329fa275aa665932ada075edc890be4cf98e9adaf1b3701c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5880c56845f47c743526bc924d56d15317fd292542b43aba5170c167c258ff68", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5a1e89b319e0e83c2b822cee2e11ba5482c813a9bd9bbc69c54cae86d8d0dfbd", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "64c95b90a06442de37f53f3e779174024beefb155a2c93e898fd4380a6a18b2d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "691d83bd37f1dcffd6090e38ccaa1891d85e913dda7c6147a594fc046cb9417e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "75b53b9476416ec6f9a24918f663a9bd268717e9d7762d01b60d176a308dcd82", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "77496302f15cd581f460a23cdcfdaee9b1a764326d64f8226ea13abce8d29165", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "77962f889091c9e450513e04de1b429b1f15e3a0645637da3e55f963c2da8c43", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "77be13bdcebe3c287d776bcaa17baabb8e6733fd3f9b4936ed1b16a5e70f9864", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "7da802e06f854423395b80b7afcf38f356a38d01895d01dff09f2b0b2a6eb0c2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "820c814711f6e9342e2fc078eac22e6c33f37136eae874a694c04e948cc34eb5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "874d3f892c299a623746d6b0669298375af4bd0ea02f52ac424c579e57ab48fd", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "88bb534525e0fb662e60ff3524897d1b92d86ef792615f916f93f27abb5ea4b1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "89a1471200ca659d069236e757d7813e86ceeca7db0ed7f8350a850763d0b85a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "8bb213d785da8e0c9d8a75d72f8cef6809563bcdb8323a680feadeda0d63bc72", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "8d4c1705286c9518dbcf3c0c01e99b7f19c761bd986372d37083a0a4354adcc1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0080ec82da326f6bebcab521f2c4f79bafb09e5d0eea3be39ca8a2bd6ef9aa8b", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "0341ab8139cf2bea05d76ebac2060c1ab0c7922404172b9f8d73ba09b08b4fc9", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "19c741f450653c5615be1c0f256a3833f21fb4f97156fcb6e6d943597be776ac", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "19ebbfab5d736bb49d11d88f0c71658c18c7c312c3a85ca84447a1c25dbcf849", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "1cd644ff91182d2a6647e6f7c061ced0703239a85e9e01068cfd0dd1f5af24f4", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "28664daf83a19ae6efd7caf9433600981fbb7c95025f473dc4e6099b603512a0", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "4d58d127c08744c5f994ea70d558307a84d9f7a242907bb5f08fe6d376b34a2f", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "62fc350397b98ac1f593eadaf0ebb6c31d272708d71c0ee9a2ce859e06ba2060", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "80886c0098998920898977a6e7f55a8abff2243d74f1176e39447a1654a72c01", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "8656c8bc2d098776803ef6648d5b4d9e4cc444647ac09bb97fcccd54956ddc94", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "8d806315475990a9c3e5d950f415bd2cecafbb3aeb627c4c512a9fc303ef8520", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "8e2dfaccdd6cae858001c2026f60b00c8786cf67e4322a04154671847cac3bea", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "7f899996d4bc193a1739b8f9ca51a7f46a7d41007f472df5622208e2db62b232", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "87e87fd910037fb102a728f4e0036cf5f066b7b704e1160bd685d71d290acedb", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "0bc2ebd7d81e248ff24266be5167696d17e6f034115d9e29233e28afc9c87e79", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "622b42db5fd9f7faa109212504f636c0f2f76d87e025214e3c6be14e460e8f95", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "00f704a09024ca12d12d2464c84eae2a95cc4c68145c000da26eb99419b8856b", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "43de9dac4e456549d8fbfb2b38686a0f794a3ad7788cf8ba9ec81b21b367e51c", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "442050fa9042c683303f972234d0a8198e7da631fa42a27c8d38e330d84fc7c7", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "88580efa885b9d084523baf292fdc834a477377ad92fb604f39e67c4cd331dcc", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "40cbce36a2755389a74ddad8f061da5535368d2edb255f61340d69807c494f79", - "count": 1, - "total_related": 14, - "prevalence": 0.07142857142857142 - }, - { - "value": "1148b9a6adfc4ce16307347e7c69d0c1654689f50b24d1df1da89012b1a61914", - "count": 1, - "total_related": 42, - "prevalence": 0.023809523809523808 - }, - { - "value": "026f04f0f45d9ed9004c03f3092b150b6a917606e90765f5f66ba7abfd93e72e", - "count": 1, - "total_related": 190, - "prevalence": 0.005263157894736842 - }, - { - "value": "5339981168dfcefb874dc7e82563fa7aca047f17b1184ae8db9336a2335473a9", - "count": 1, - "total_related": 459, - "prevalence": 0.002178649237472767 - }, - { - "value": "88de2ea3e3360a0a26f4cbe1922e1f86fa848f7994a702fea6801fb8524c312a", - "count": 1, - "total_related": 893, - "prevalence": 0.0011198208286674132 - }, - { - "value": "67b6eb21319c12e54f9180e24452d103adaa5c507c9ae10161fed7c4d120e85d", - "count": 1, - "total_related": 972, - "prevalence": 0.00102880658436214 - } - ], - "pcap_parents": [ - { - "value": "1c5fd7bf511885054464124142f793501ab2c6e987b203c1a5f4b3bdcccb1fa1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1e86c9b1a92c3624e69ecaabb8abf495475f07a60e9a5449053270cfd2a78b51", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2d23cd3723f7038cd0424c3023bdda9c49c02831e59144e8774aadb59e389a51", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "40494b12beba32d4300eb9364b4e5543db4c46572ef739f19519f1c36c6be164", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "7bf7dfc7534aec7b5ca71d147205d2b8a3ce113e5254bb342d9f9b69828cf8ee", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "a11587e5da097799146454e58c3cae36febb5f62901062441fb7c377def50795", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "abc0064210d2fd9b3d2bcd93eb84413ebbe627e12cccd2cc97729fa8521983e2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0cc54ffd005b4d3d048e72f6d66bcc1ac5a7a511ab9ecf59dc1d2ece72c69e85", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "ddbc4908272a1d0f339b58627a6795a7daff257470741474cc9203b9a9a56cd6", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "8cd768765b23e275c62428b5507bc9177bc31344be72042e9607d5c99c93eda8", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "1ae187f1324eb6107c72fd19f3b05198663bf9775e20ff660befe125c28a52c1", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "a2ffc30b72bb25f813708da9bd34717ed91952ef1d88e64df057d9f50faa9a18", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "0435dd2fa17d9639ddb030e25bfbf890f1f81309e46ef290d3aab52a5b7d4bd2", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "e9ae7d5f64a7c3c557223362da81478708a147803f3b4282d1e00b52ef5afa64", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "1e4313839b8075330c948e4ec1110a7a925a12b9b0e5f96a6e9d0ad69782d328", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "8253d093936e3107a9c08999008ce6789e1a1b31a05a35cbd277932624971713", - "count": 1, - "total_related": 15, - "prevalence": 0.06666666666666667 - }, - { - "value": "e29a3db17025e34336b10d36e5dd59ff5d1ac07ada8df0cddba0d3f3db689f65", - "count": 1, - "total_related": 15, - "prevalence": 0.06666666666666667 - }, - { - "value": "0d60ed897f58b56823755784e63aac00446bd96c93facc216d911e8b5530cb21", - "count": 1, - "total_related": 17, - "prevalence": 0.058823529411764705 - }, - { - "value": "ce28c8ed8851249ba6cae8f8d68d8d59f59be3eae6238c36b547b5a833b86860", - "count": 1, - "total_related": 17, - "prevalence": 0.058823529411764705 - }, - { - "value": "cc366561956b54063032aae446e76e164737c5cf1a1510305703767a4fdcee35", - "count": 1, - "total_related": 18, - "prevalence": 0.05555555555555555 - }, - { - "value": "43f187e16b86e2c1fd9c4c23576b70531ed08ff582bee7c94980940cc25abe1b", - "count": 1, - "total_related": 19, - "prevalence": 0.05263157894736842 - }, - { - "value": "ce23b05499badea64685798fe4ed42fadc25008d871e9a67a56ae0e83134334e", - "count": 1, - "total_related": 19, - "prevalence": 0.05263157894736842 - }, - { - "value": "05406c13d43a3796c29602a73c8d71df619dc8145840d28d27414fea40fefcdc", - "count": 1, - "total_related": 20, - "prevalence": 0.05 - }, - { - "value": "82401eb5ae2416daebbab1b3f0b7fef3d10388c7eb9a048384577100e6ae712b", - "count": 1, - "total_related": 20, - "prevalence": 0.05 - }, - { - "value": "414fa7f5d5a30d0ad0eba824f1df08a20681508cb7ed85d3b31fad87293d9aed", - "count": 1, - "total_related": 21, - "prevalence": 0.047619047619047616 - }, - { - "value": "a0bcd1b1ec3143aa7bb11a8080d7f1e61f8ab045e06252ef507d0558f6eff55d", - "count": 1, - "total_related": 22, - "prevalence": 0.045454545454545456 - }, - { - "value": "c7d9deba734a1bd671f865a828c0c84841aaedf33eef5a82fa8b01a2d243817d", - "count": 1, - "total_related": 22, - "prevalence": 0.045454545454545456 - }, - { - "value": "cb430eb78924333bbf1a2e48e35c80760669662339334bf258d05a0fffa1d793", - "count": 1, - "total_related": 22, - "prevalence": 0.045454545454545456 - }, - { - "value": "cd89f99567dd598809fa2055774b7f18fc3676c6547f0d3083e192f119b2cf14", - "count": 1, - "total_related": 22, - "prevalence": 0.045454545454545456 - }, - { - "value": "52361be82676ee24ebe76772e37d4c037a3f23e1f8bba881eecda730b47bef95", - "count": 1, - "total_related": 23, - "prevalence": 0.043478260869565216 - } - ], - "dropped_files_sha256": [ - { - "value": "917e115cc403e29b4388e0d175cbfac3e7e40ca1742299fbdb353847db2de7c2", - "count": 3, - "total_related": 936, - "prevalence": 0.003205128205128205 - }, - { - "value": "00342569cc4b347d888bc14a7ba5af339157835afb938f929622e46b90dd04a5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "00618aef93948027371e2b57c46005a6ffa95a51e759623ed576c8ea3b4d4852", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "00ea40714e1d1d323d900b27861fd791d8d8048f8915b32e4096fcbcb97c1ab7", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0112a44c49df3883d019a0614ff1632d0b9eb9d7c13673e29a09cb17a2af8cf6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "01faad5233e99b700711e275700dbd7583a65a05699ab4a7870f1d3a638ef890", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0213f77d114bc56551ab807bab0041e53c37ec26ff67b1510483b973c06f009a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "021684209fcc0bfd0e92ecdd0cda773c03a7d07ee7150228144782fc24bb3c08", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "023d65057a20f71ede919d888b25345edb049d4d270b412a1588e56aa39e1842", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0252fdfbe20b651777ea9517530f5ffea5c3ddb5298988f8c7a8b17e88d991c6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "027c0059dae76f38b83736cf0bf5744df420bca9322c384eac8e9b9e1920d6c4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0286ebaf8ba6353986d49541e31daea364bac3e8d5f519e9b29654ddf8d20d18", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "028fe9fd85a1f4cf43458efa60b7473725f281f735187d6bcb85d044826be9d7", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "02d8d86561a7417f857a46dc77b42785ecb185f7b3196b6aaaf73e8f0b8b973a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "02fbe3919645ac9273cc86ae47ad4eac384e8a08e7c53ce619a43e921c435196", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "032d0742b96337e5145b5c063637e8b945e04fcc81994fb64626617d6088d0df", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "039059ce2588719940c57378a6208b5391576a6cded3eac27b2ab4239a04b5b4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "03c890a8b92b289b013c115b4656b5d96225195034b352e8911d8444d72e4d2e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0434a7b84be3adb50e5c6a13abc5bde2370c07816c07b9c46b2446fa3fbd46be", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "046892f2e0fcd2859c2bb3d4e687535e8ac44d6da2cb772193b7faf1939d5b37", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "047583d7aece8e3eff217d6b12b0f7e36c6c6a09f8eb50457278e43fdcfc4b34", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "04907897ebb7eb00582237022ac44b0c8682d3e3977424a4af87e2915740deb5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "04967ab11c9e5c229ec919fed16f9aa4deb6f58a55bc7e950872cf29380b743e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "04d33c774ba45a5a9cb15858b038ea463292d40967683ea7e9347283460b16d2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "04e3d2bea28ba66b32da2fb83bf6084e5f99b2e82691bf4cb4904550cf32c78f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "04f5ee069dfc4747675806e28caead0387a7d74e9db6e86dfc0e754e5702b12c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "04fa6b7c633dda899ae5d878af01bb0e26ae25601c51e54eca4ae785f46773a7", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "058d98a55ed039a2740585dca30cf3d4352b267c7dce0f82561d8bc07005fe30", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "063000c83f29d1772301df8639e08d504f1bcac851067d309bfba135fbd4e449", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0633e1469977ceb2adf9a4375bbc615d6db72c1bbe5ca789b8c2aab860c4da2c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "070e354174228ac66561f7729b9da53579b782fe26dda251f8629b5b1b3f7eeb", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "07512919e6bffc0ac6cb296bf3a8baa08035b813b1bf37162137fcb5c64495bc", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "082cf187bc5460b643cac69f1b9aae049aaffc633ab72b31441ca0816738993c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "084c61844d4ed126cf3d673fc4c7a92b83ec2cf7ec642ce114594bca4f2830a2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "088f925c3a9d2149bb286158b18097dbab17ee94ebd4637410612986d5a7711e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "094c0f7470b9560c6b40bed9acd8e564bb652e24b6adaaf64968de6a5d4a21be", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "09988bdb7932f9925f294ef69407ed68501e0eec8d393d39f2e2cc71d7484ad2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0ad204cb9370ba5da541f54654282f5b28361cbf85b6cb90d50aae5db5491241", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0be075cbc47563bcefe018bf5df8b5d7a9f7d2b391db2447ec1f097f7f74ee23", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0be24ccede352167154431ea2e811ccf07befc9e06ba3bd73ca97083b45718ed", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0c6e322682de312afa306d40e469e1498897a28abd7f0ec9ccc21841811cfbb3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0cac8446c5f224a4e8557d70e84ec3a36798cd17d2c783b4e44f072662f542f3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0cdbb0c5051ec8af455d571f1c05970bbdc83f5f5e0236744bc4d12ba26913e5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0cf0d5791be3428de4dfe00521351d00c671089b7d0d4327dade43c2943e2d83", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0cf6c3906152296dae33873061dba5e5051e618488a272a58ceb890f3be4c3c3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0d3f64df4276c56daa13b84fe4b0738c827a370ed4da065e8af9fe35f8251d6c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0d66312151c22b62371305ef9352186296aa9279461ee1fd30b832cde2fd2665", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0e71b1e133a35af762fe2f1b5be07ad84fa77c49939a9e6cc0e76f03ffb9f638", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0e7cfbda492b201768fe0bad34cc4c09564304bc448c0798bb9fad8821867080", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0ecda607f46c3974ec1278fe30c1f145cd1a8350d6313ea5077c4a1127d33672", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0f44f170893356deebe1eb3d30ebab688335e30753952aa48b08d9e995e90cb9", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0f9cee2b038bc384375c3184fc5322c73f5665e4e095bfaa1edcc3cddd26ee01", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0fd5fb5f51aaab326d4f43821e3ec4052e3511fa1a2bde7162b4de77b4fdd39e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0fe4154e4270b52121517957d3b3c91c42d7ebd6c1c01e3922e926107803b538", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "106e09b88db7b41cef5b88f7888f0966b5f1ef6a73d25ba3f6323d229056a3ef", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1103f88856ade2356a5f01a7918f7466e9f3314106e60eef8fb8146c0eb1e0cb", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "11514e45c650e862ce2c5e49c3c1769bb02318fac55133ea0bcc1fb03cc613fc", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "115edf769fedcef4659880760fedc9ac770d906ed4bedbfaf6c4faf92f2d644d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "11b32e16d0d83702e7be751c0bff7114a9f8f6d9a53c4ce9c98a96b6553857fe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "11b884c4cf7078ae7976f3c696428bc5ffa6d48b130f968cf720e134ae5fdf39", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "12152ef7eefe52037daf764853da48deea6e02ca23d561e7db4ad426bf8a43da", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "12186d78401e5b6ecfa316b7a7531b878d8bdfd5b27d267a293dd91d291e17c2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "123562d1667f5a78853af79f4e0ca276b9b71c700dccfb30a2a4bc9585c4935b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1310BC4EC642CB9209B592C0A0C2FE201E095620281341F3679CBB9C5E45F9F9", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "13238589b4b1f5246493c719c93771e1e0c8bf3258f55b70c44e44714e13f080", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1334c3575f401d3c2179556820b228d64ede5bcff144ea3b034288977d2190e6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "13559e8dc6ca8b36f586a0ecb0aa4489d45d75a28caad89c00c381429535f7c2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "13aff6e7aff64dba8976af48199a9db82e7a67dd2efb0de9f4817849b637c4f9", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "14160fb7d1bf0153a9e2fa2159288049f6ccb6f6eda5b11e46b6e6ad0e92da28", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "143d738860a08cf333c1b6a0b728b4ed9a12d85b71a6c82c1a2ff987353ac5af", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "145294070135c628e17bb3e38e882642600e9bce0e005d8827525817c838f8f3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "145e677d234cd99207d4e395ca2a1a1bb044fe3802055ca919bd10ac71ab3bf8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "15300afa719f3225fc8a767ff768d72340e4c856099a4b8b6df46404d9c6cbc1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "15547c1ba66914b2cf43f867070c0571d91b70c877fe499b0e07476fd072cbb1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "157a885d75efd599b326555291eccae5809b3c300c3b6c8c3860301272f7417b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "15be3aadd7a0d6d9eadba7091bf9eb017ec53c9d0741ec86b4edac41e6f8e1e7", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1610ACD2CF4F328B8F79D59C0068500D776937B67EAB24B5AF4FFFE3E948E1C8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "165659fa007bab93095a38d2b417f6e7c86dcfacde656376537b8f43abed935f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "16648805012b5993fc569e6f4af9168a00e516bc074530525a7a0daa60fae04b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "166745214126e468cbd5b7a15efb818ab9feada06a160206dc0e5a305104dede", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "16674f20e1525a57b0173b484fb5a29c5ec70ee7481199b18f2e9b195d188ab7", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "16968312641745bdfc22996f0f63ead46105456d08923737b75a6fbaf866ab95", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "16a2e3e7a264bd600403a175453a5e133718a3212234bfe393b63facc9a98faf", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "16c22851cc2ed60c42712352ebbd5f1fb88d5f2d1d70bca7c245fc2c394f6d7f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "16dba07c889b93727fa6fa3e7c46348ddadc6589fedc5b112b6c40c0416e5355", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "171754a60031523be6e4542daeb28747b334e1ff7ba504c1ead43bbbef696885", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1735164e88076143f76d3548dbea4d87ef13ee2dcf9219848c3e14d7c0b2e0b7", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "173825365bd0bc90df09439424f515d366897d8cd7cf164a30429c95a716e297", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1749fdaeffa0ef1bc869b0a7861ac59d3ef736bc5c5a3a4b4ad7a8dc793469d7", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1751c526c251cbfb81fb27550021f751a1945589d7c2f92b484e8cab1359e095", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1758a07e7c2635b290f3bd3074d651213ced01c540c57555dfa77e7c094477c3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "177667ab212fbd916f5a4e6470e3c81a2457e7a417de6026e33c8fc16c186dcf", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1788f46efcd8b64a92d944af55e4c59c77ada44ba25511b8e0beb9fe48e5c5a4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "17F3429931063CDC51A8C17B8D4276BC65D57F68B7376BDE75C960C9E170953B", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "17a0f8b7e26348d3e7c05017ddd2ff533ced47c469287ccbd3aad183cf390016", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "17ba97000b29b7fd35d4d4c1510784f78eabd6b04d2f4fa7129ee141aa8a6b06", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "182ce38978e8843809813c3c08fcc9d3947859066258169d3715fc0544b8c274", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0811a839cfe3332343721140211cdecc94b0dc69820db0032df32c968adc88df", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "1583d8d0a2b7c232e0499f21d9e723f75efb3b3fe937d8167f7d233928ab7115", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "0356a869fc7e6495bac33303b002935c317166d0ea5d403be162573cf01055d8", - "count": 1, - "total_related": 10405, - "prevalence": 9.610764055742432e-5 - } - ], - "tags": [ - { - "value": "peexe", - "count": 171 - }, - { - "value": "detect-debug-environment", - "count": 148 - }, - { - "value": "calls-wmi", - "count": 136 - }, - { - "value": "long-sleeps", - "count": 131 - }, - { - "value": "checks-cpu-name", - "count": 61 - }, - { - "value": "checks-user-input", - "count": 53 - }, - { - "value": "direct-cpu-clock-access", - "count": 48 - }, - { - "value": "runtime-modules", - "count": 48 - }, - { - "value": "persistence", - "count": 44 - }, - { - "value": "spreader", - "count": 38 - }, - { - "value": "self-delete", - "count": 26 - }, - { - "value": "invalid-rich-pe-linker-version", - "count": 23 - }, - { - "value": "checks-network-adapters", - "count": 19 - }, - { - "value": "overlay", - "count": 12 - }, - { - "value": "exploit", - "count": 7 - }, - { - "value": "pedll", - "count": 7 - }, - { - "value": "cve-2014-3931", - "count": 5 - }, - { - "value": "idle", - "count": 4 - }, - { - "value": "64bits", - "count": 3 - }, - { - "value": "cve-2004-0790", - "count": 3 - }, - { - "value": "cve-2005-0068", - "count": 3 - }, - { - "value": "cve-1999-0016", - "count": 2 - }, - { - "value": "assembly", - "count": 1 - }, - { - "value": "checks-disk-space", - "count": 1 - }, - { - "value": "corrupt", - "count": 1 - }, - { - "value": "executes-dropped-file", - "count": 1 - }, - { - "value": "malware", - "count": 1 - }, - { - "value": "obfuscated", - "count": 1 - }, - { - "value": "rar", - "count": 1 - }, - { - "value": "upx", - "count": 1 - } - ], - "main_icon_dhash": [ - { - "value": "6cf4d4dcdcd4d4d4", - "count": 6, - "total_related": 277, - "prevalence": 0.021660649819494584 - }, - { - "value": "831f362424242626", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "34e9e4518babd6d6", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "71e8ccccc4b0f230", - "count": 1, - "total_related": 49, - "prevalence": 0.02040816326530612 - }, - { - "value": "d4c4c4d8ccd4d0c4", - "count": 1, - "total_related": 89785, - "prevalence": 1.1137717881606059e-5 - }, - { - "value": "b2a2e3e3e3a3a200", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "f0f0f4d8c8c8d8f0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "main_icon_raw_md5": [ - { - "value": "e21f903eeb690b791366657cadd961c8", - "count": 6, - "total_related": 248, - "prevalence": 0.024193548387096774 - }, - { - "value": "3b36af321d209e469c76fc37944ff2de", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "f8c8b6bdb6532052a5e709c0c2b7d69a", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "442f396c500b086bfe8aab8ef3a5190e", - "count": 1, - "total_related": 49, - "prevalence": 0.02040816326530612 - }, - { - "value": "2bd1617e44bb44db5f26dceac89c9b1e", - "count": 1, - "total_related": 90047, - "prevalence": 1.1105311670572034e-5 - }, - { - "value": "2a1613d0845d00b916aa58adf0d41788", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "6f18b3932aca200c19eda2c0a8389fe2", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "vhash": [ - { - "value": "01506666151d7d7567za1z8nz7fz", - "count": 71, - "total_related": 666, - "prevalence": 0.1066066066066066 - }, - { - "value": "01506666151d7d7567z61z7nzbfz", - "count": 54, - "total_related": 450, - "prevalence": 0.12 - }, - { - "value": "0950366d651029z47z29z1jz", - "count": 19, - "total_related": 433, - "prevalence": 0.04387990762124711 - }, - { - "value": "0850266d6\"z", - "count": 12, - "total_related": 68, - "prevalence": 0.17647058823529413 - }, - { - "value": "01506666151d7d7567z81z8nz7fz", - "count": 12, - "total_related": 186, - "prevalence": 0.06451612903225806 - }, - { - "value": "015036656d11e3z12z390302231z37z60600165zb7z", - "count": 9, - "total_related": 12, - "prevalence": 0.75 - }, - { - "value": "015036656d51e3z12z390302231z37z60600165zb7z", - "count": 7, - "total_related": 8, - "prevalence": 0.875 - }, - { - "value": "01507666151d7d751567z61z7nzbfz", - "count": 6, - "total_related": 22, - "prevalence": 0.2727272727272727 - }, - { - "value": "015036656d51e3z12z3b0302231z37z60600165zb7z", - "count": 6, - "total_related": 46, - "prevalence": 0.13043478260869565 - }, - { - "value": "01506666151d7d7567zc1z4nz4fz", - "count": 5, - "total_related": 66, - "prevalence": 0.07575757575757576 - }, - { - "value": "01505e665d1d7d77z51z9nzafz", - "count": 4, - "total_related": 6, - "prevalence": 0.6666666666666666 - }, - { - "value": "115056651d7d7567z71zanz7fz", - "count": 4, - "total_related": 38, - "prevalence": 0.10526315789473684 - }, - { - "value": "015036656d11e3z12z3b0302231z37z60600165zb7z", - "count": 4, - "total_related": 67, - "prevalence": 0.05970149253731343 - }, - { - "value": "01507666151d7d756e17za1z8nz7fz", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "01506666151d7d6567za1z8nz7fz", - "count": 3, - "total_related": 23, - "prevalence": 0.13043478260869565 - }, - { - "value": "11506666151d7d7567z51z9nz9ez7", - "count": 3, - "total_related": 37, - "prevalence": 0.08108108108108109 - }, - { - "value": "1350976d755c051d5d1dbz462e9z13z13z2ez1", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "0950366d651029z57z29z1jz", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "0160c6755d155665501d1az5d!z", - "count": 2, - "total_related": 229, - "prevalence": 0.008733624454148471 - }, - { - "value": "016056655d15755210b020023009f6z141b013ze2za0030e039z", - "count": 2, - "total_related": 23737, - "prevalence": 8.425664574293298e-5 - }, - { - "value": "01506666151d7d7567z71z6nz8fz", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "01608666151d7d750e651bz3nz1fz", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "01608666151d7d756e651bz3nz1fz", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "04609606050d0d060d1677z11z1nz1fz", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "256036756519a08a2cf1095", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "6989d5335e381ec0bda90ca85748c6ba", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "015036656d51e3z12z390402231z37z60600165zb7z", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "01506666151d7d6517zc1z4nz4fz", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "06508606050d0d0707751015z11z1nz1fz", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "0950366d651029z57z29z2jz", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "0950366d651029z67z29z1jz", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "09609606050d0d060d1677z11z1nz1fz", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "115056651d7d7567z81z7nzbfz", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "01507666151d7d757567z61z7nzbfz", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "056086656d15651550651023z42zaa7z21z2031z1028z1f4z12b", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "11506666151d7d7567z71z5nzaez7", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "01506666151d7d756\"z", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "01506666151d7d6567z61z7nzbfz", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - }, - { - "value": "05608606050d0d07077517z11z1nz1fz", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - }, - { - "value": "11506666151d7d7567z71z7nz4ez7", - "count": 1, - "total_related": 31, - "prevalence": 0.03225806451612903 - }, - { - "value": "095076655d155d15655az979z3tz", - "count": 1, - "total_related": 36, - "prevalence": 0.027777777777777776 - }, - { - "value": "115056651d7d7567z81z8nz7fz", - "count": 1, - "total_related": 36, - "prevalence": 0.027777777777777776 - }, - { - "value": "017046557c051bz112fz1lz", - "count": 1, - "total_related": 72, - "prevalence": 0.013888888888888888 - }, - { - "value": "017076655d155d05555048z6dnzefz", - "count": 1, - "total_related": 601, - "prevalence": 0.0016638935108153079 - }, - { - "value": "0260566d55557560e013z1005114kz1e03dz", - "count": 1, - "total_related": 12322, - "prevalence": 8.115565654926148e-5 - }, - { - "value": "03503e0f7d1bz4!z", - "count": 1, - "total_related": 16517, - "prevalence": 6.054368226675546e-5 - }, - { - "value": "0150866d1c0d1c0515651035zc00159z25z23z2fz", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - } - ], - "imphash": [ - { - "value": "914685b69f2ac2ff61b6b0f1883a054d", - "count": 77, - "total_related": 855, - "prevalence": 0.09005847953216374 - }, - { - "value": "41fb8cb2943df6de998b35a9d28668e8", - "count": 61, - "total_related": 667, - "prevalence": 0.09145427286356822 - }, - { - "value": "216df81b1ef7bc2aa8ec52bbeef137c9", - "count": 19, - "total_related": 410, - "prevalence": 0.046341463414634146 - }, - { - "value": "eb998cc9454b55f8d5f953c6f8cc8cbb", - "count": 16, - "total_related": 20, - "prevalence": 0.8 - }, - { - "value": "89b43582b27abefb2b74684ab12a2f8e", - "count": 12, - "total_related": 245, - "prevalence": 0.04897959183673469 - }, - { - "value": "e9f710b579880d1b6ff748176eb620f1", - "count": 10, - "total_related": 117, - "prevalence": 0.08547008547008547 - }, - { - "value": "3bc510de773c954bd69d33670cb624d6", - "count": 6, - "total_related": 79, - "prevalence": 0.0759493670886076 - }, - { - "value": "a50a0d82b9120fc73965c28fea79e1f9", - "count": 4, - "total_related": 19, - "prevalence": 0.21052631578947367 - }, - { - "value": "07530c85f3bf8d18d55bc566a43ea905", - "count": 4, - "total_related": 39, - "prevalence": 0.10256410256410256 - }, - { - "value": "d5feac3e94d92e4c2e9fe14f1f783fd7", - "count": 3, - "total_related": 93, - "prevalence": 0.03225806451612903 - }, - { - "value": "5d85e9bd7b32de0958c404af2cf1e756", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "d5eee910bd9051fc4b1b237f82f77d00", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "62f2e1f5c3bc54599fe39dfb87ec9ee0", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "130d5621ef2323889c6e1ed2746329fe", - "count": 2, - "total_related": 242, - "prevalence": 0.008264462809917356 - }, - { - "value": "88381b84da56810b869e897e6d45bd58", - "count": 2, - "total_related": 16279, - "prevalence": 0.00012285766939001166 - }, - { - "value": "bbac62fd99326ea68ec5a33b36925dd1", - "count": 2, - "total_related": 88356, - "prevalence": 2.2635701027660827e-5 - }, - { - "value": "17a3893d66d35318253b647340956b4d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "38ab51ce4bc65b6c7d56dddb7ab47c7e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2d914d7e9fbec35234d49a5bce5e0aa6", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "bfce782cfa0e2f22c598571118d3f91d", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "ee120aa57fa2ff682fc9cac51b047e49", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "e3df9a977ea4b797be29251e9f3e0125", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "a6e537c4400191f066a8ccb2bd93aeb1", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "45d9a94dc34a9970bbb91822da78d46c", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - }, - { - "value": "b1826e7d9522633dc1f4953f25424ce3", - "count": 1, - "total_related": 31, - "prevalence": 0.03225806451612903 - }, - { - "value": "acd3b654f3f639b4748149cb649c3de6", - "count": 1, - "total_related": 32, - "prevalence": 0.03125 - }, - { - "value": "b750c147c0bcc8b349e4f1143ac1432e", - "count": 1, - "total_related": 87, - "prevalence": 0.011494252873563218 - }, - { - "value": "e459be60628b1dec27c7257fd3678a46", - "count": 1, - "total_related": 224, - "prevalence": 0.004464285714285714 - }, - { - "value": "6f462fcc6b830b77fb3fef2add9dc570", - "count": 1, - "total_related": 1068, - "prevalence": 0.0009363295880149813 - }, - { - "value": "7e0a0e8f80bbd1a9c0078e57256f1c3d", - "count": 1, - "total_related": 3528, - "prevalence": 0.0002834467120181406 - }, - { - "value": "33742414196e45b8b306a928e178f844", - "count": 1, - "total_related": 20954, - "prevalence": 4.7723584995704876e-5 - }, - { - "value": "9f4693fc0c511135129493f2161d1e86", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "646167cce332c1c252cdcb1839e0cf48", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "6ed4f5f04d62b18d96b26d6db7c18840", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "f34d5f2d4577ed6d9ceec516c1f5a744", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "behash": [ - { - "value": "32cb327dcc152a362038c7279c8f252c", - "count": 25, - "total_related": 39232, - "prevalence": 0.0006372349102773246 - }, - { - "value": "9137a846c3ee495c3da2605d3c5ed886", - "count": 21, - "total_related": 443, - "prevalence": 0.04740406320541761 - }, - { - "value": "f206db6b1407a4f4a305d2e976db9773", - "count": 18, - "total_related": 172, - "prevalence": 0.10465116279069768 - }, - { - "value": "0660276d9182600fe70e7a3bd32eb340", - "count": 18, - "total_related": 228, - "prevalence": 0.07894736842105263 - }, - { - "value": "edd678586a96b6839e50161143e35b6d", - "count": 13, - "total_related": 191, - "prevalence": 0.06806282722513089 - }, - { - "value": "36404bb72afeef768f08f16e4b615b9c", - "count": 10, - "total_related": 14902, - "prevalence": 0.0006710508656556167 - }, - { - "value": "978748c2175ddb54ef24f114248db84b", - "count": 9, - "total_related": 25, - "prevalence": 0.36 - }, - { - "value": "741d7d485cfe51768680ecb1eacceedf", - "count": 9, - "total_related": 169, - "prevalence": 0.05325443786982249 - }, - { - "value": "67874de755683cb11ad8b140fcc4bd9d", - "count": 8, - "total_related": 150, - "prevalence": 0.05333333333333334 - }, - { - "value": "72887f3befa4e36a6aaafdd879a38f5b", - "count": 7, - "total_related": 51, - "prevalence": 0.13725490196078433 - }, - { - "value": "77151ad1512b05ef5df3ff41e8db917e", - "count": 6, - "total_related": 197, - "prevalence": 0.030456852791878174 - }, - { - "value": "f671fc507e3d4b6c64a5a49227f0d6de", - "count": 5, - "total_related": 7, - "prevalence": 0.7142857142857143 - }, - { - "value": "9c594e5a5aa498fb6cba4597382dc3b8", - "count": 5, - "total_related": 14, - "prevalence": 0.35714285714285715 - }, - { - "value": "d8db68a88476218cca173ab06296b788", - "count": 5, - "total_related": 15, - "prevalence": 0.3333333333333333 - }, - { - "value": "bf37d63668a3babeab8243ffb31be1d5", - "count": 5, - "total_related": 26, - "prevalence": 0.19230769230769232 - }, - { - "value": "b90571594561e96b04ec44dd4aa5ca95", - "count": 5, - "total_related": 62, - "prevalence": 0.08064516129032258 - }, - { - "value": "08e770c0dc483729be0d4c0d1c41dbc0", - "count": 5, - "total_related": 91, - "prevalence": 0.054945054945054944 - }, - { - "value": "1194351a4be0410aabfd5b350868784f", - "count": 5, - "total_related": 162, - "prevalence": 0.030864197530864196 - }, - { - "value": "b1306ff7eee879d62f3378664356538c", - "count": 5, - "total_related": 230, - "prevalence": 0.021739130434782608 - }, - { - "value": "f29d7cd77f34d687a9acd726b4055fdf", - "count": 5, - "total_related": 250, - "prevalence": 0.02 - }, - { - "value": "3d2984f2bbbdf3ec55379c13445eb40d", - "count": 5, - "total_related": 270, - "prevalence": 0.018518518518518517 - }, - { - "value": "966abea788c3845ee2bf26ece9237ced", - "count": 5, - "total_related": 15413, - "prevalence": 0.00032440147927074547 - }, - { - "value": "363f0aed880d2eadf7f58915b534c919", - "count": 4, - "total_related": 8, - "prevalence": 0.5 - }, - { - "value": "2cf07b029e557bee9f4d30a6bb5c5cf7", - "count": 4, - "total_related": 13, - "prevalence": 0.3076923076923077 - }, - { - "value": "d3ff4e0e37f3844023d196a782c4060c", - "count": 4, - "total_related": 19, - "prevalence": 0.21052631578947367 - }, - { - "value": "5c4fc895cf763f2f106e8de0633ddc7d", - "count": 4, - "total_related": 22, - "prevalence": 0.18181818181818182 - }, - { - "value": "12044e4e34fa6783661132d04208a23b", - "count": 4, - "total_related": 31, - "prevalence": 0.12903225806451613 - }, - { - "value": "d3ba36a6619304f3e59219f804ecf98c", - "count": 4, - "total_related": 36, - "prevalence": 0.1111111111111111 - }, - { - "value": "dd9e0e05856d2e2f7bc3342ba8c50540", - "count": 4, - "total_related": 40, - "prevalence": 0.1 - }, - { - "value": "72fed847140b18c381cd34d5bd68105f", - "count": 4, - "total_related": 89, - "prevalence": 0.0449438202247191 - }, - { - "value": "e92922755986dbbf0d256e3a401aa10b", - "count": 4, - "total_related": 104, - "prevalence": 0.038461538461538464 - }, - { - "value": "318fff25826b092a5eb3ec55c717f563", - "count": 4, - "total_related": 115, - "prevalence": 0.034782608695652174 - }, - { - "value": "dd6cea56e8bc96ea957e4a99022dc786", - "count": 4, - "total_related": 153, - "prevalence": 0.026143790849673203 - }, - { - "value": "d130866329c42d572d832050520597d9", - "count": 4, - "total_related": 154, - "prevalence": 0.025974025974025976 - }, - { - "value": "ffd7a93dd5dbdcbea87d51a0315cfde4", - "count": 4, - "total_related": 255, - "prevalence": 0.01568627450980392 - }, - { - "value": "5c9f933ea3889f66c8107ba692c08738", - "count": 4, - "total_related": 8698, - "prevalence": 0.0004598758335249483 - }, - { - "value": "03281af501e7b558d0038fb1f792aff0", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "5afdace2752a4cbef36dcd6747e15e5c", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "9d1cb7e136312de0d13a4db562eb551f", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "27ac2ed47b5b2f6a409660adaf77812f", - "count": 3, - "total_related": 6, - "prevalence": 0.5 - }, - { - "value": "a9174473576e2a55967c40b3a63f38bb", - "count": 3, - "total_related": 6, - "prevalence": 0.5 - }, - { - "value": "403490a85a10139e6603f2524ab91f41", - "count": 3, - "total_related": 9, - "prevalence": 0.3333333333333333 - }, - { - "value": "a14f8546a0fae47d655db49d07050997", - "count": 3, - "total_related": 14, - "prevalence": 0.21428571428571427 - }, - { - "value": "a956fb321b62503d95194b6248cd3340", - "count": 3, - "total_related": 18, - "prevalence": 0.16666666666666666 - }, - { - "value": "dac314f4d93fa30419158df8d271afd4", - "count": 3, - "total_related": 19, - "prevalence": 0.15789473684210525 - }, - { - "value": "774480b67812871debf105263b80e867", - "count": 3, - "total_related": 27, - "prevalence": 0.1111111111111111 - }, - { - "value": "c259b01ca70896c3e513026d789097af", - "count": 3, - "total_related": 30, - "prevalence": 0.1 - }, - { - "value": "fc040b4d3960aee7d5b9cd0c152ee5cb", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "2bca0ff41eef62623765156c11cac201", - "count": 3, - "total_related": 45, - "prevalence": 0.06666666666666667 - }, - { - "value": "996c890e329ac2cd24edcef5de1a243e", - "count": 3, - "total_related": 87, - "prevalence": 0.034482758620689655 - }, - { - "value": "eefd4fd22d50d140f1752316267942f6", - "count": 3, - "total_related": 150, - "prevalence": 0.02 - }, - { - "value": "2474b2bd99844ee8aee96af6407064d4", - "count": 3, - "total_related": 159, - "prevalence": 0.018867924528301886 - }, - { - "value": "907b722e96ec5ed1c591ddee7da2b465", - "count": 3, - "total_related": 57883, - "prevalence": 5.182868890693295e-5 - }, - { - "value": "77cda058f3bc9a42b185036757c1474f", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "b71866e72ce3534bbf5b9e6bdb7eb3bf", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "5f75fd1a1afcdd926b7385bb3c458c38", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "a9ca21ae59eec5d45f59f9a218b8cb95", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "ac0de3e24b763ad02a6ba2dcdba4a65f", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "afa9d097df689602b060be2a6834d96f", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "38e9e004d014892815caeadbd26a8db6", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "5d9c3f6a9a711219d9277fb050be52ab", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "a21855206f0086c8df193dd7d8ea38de", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "c7493cc3afa51de2303b86190f38d476", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "8adb7ba320c60cb36dabef9c118d2ab9", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "48c879a57b16431015fa32b2688ecb3f", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "85704a297f79c242c058eddaa6b53c24", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "2af4097ea50174e0dd0cd1ee470a1b68", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "3a3d3f150a017329e4a9b2d5d7c01883", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "6057da703200848add000b0a646eb2eb", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "2cf0cddd45767e9c43ee0b03920c822a", - "count": 2, - "total_related": 9, - "prevalence": 0.2222222222222222 - }, - { - "value": "c4b9c2d4168204b2ba78a259fefbca17", - "count": 2, - "total_related": 10, - "prevalence": 0.2 - }, - { - "value": "7e2b4f49725606b5874d693b966b7179", - "count": 2, - "total_related": 11, - "prevalence": 0.18181818181818182 - }, - { - "value": "b4dade15dd2c051d797ad18025f63d0d", - "count": 2, - "total_related": 21, - "prevalence": 0.09523809523809523 - }, - { - "value": "6fc7e20bc0163ad81ff641ee388db23c", - "count": 2, - "total_related": 23, - "prevalence": 0.08695652173913043 - }, - { - "value": "3233240df1b8c942d0cb7d9735875fcd", - "count": 2, - "total_related": 26, - "prevalence": 0.07692307692307693 - }, - { - "value": "6790c2500dbc170714db1f8a43519781", - "count": 2, - "total_related": 32, - "prevalence": 0.0625 - }, - { - "value": "a2c951748fb3f446b31b8343bd7bbe5a", - "count": 2, - "total_related": 34, - "prevalence": 0.058823529411764705 - }, - { - "value": "4f7dde1e48f64af592771278c4338bd7", - "count": 2, - "total_related": 36, - "prevalence": 0.05555555555555555 - }, - { - "value": "b1a98f2bccc298c4443ce55830d5305b", - "count": 2, - "total_related": 36, - "prevalence": 0.05555555555555555 - }, - { - "value": "2fbb80e5908a2f657342e703834370e2", - "count": 2, - "total_related": 37, - "prevalence": 0.05405405405405406 - }, - { - "value": "c4b500b43d95093c3784a174c4fcb4c3", - "count": 2, - "total_related": 48, - "prevalence": 0.041666666666666664 - }, - { - "value": "2bae430272e987a44b78cc94e6d33767", - "count": 2, - "total_related": 59, - "prevalence": 0.03389830508474576 - }, - { - "value": "8642bbb917d5196905775a6694f90c35", - "count": 2, - "total_related": 105, - "prevalence": 0.01904761904761905 - }, - { - "value": "78d89ab7222464441e415e8988333fe1", - "count": 2, - "total_related": 1001, - "prevalence": 0.001998001998001998 - }, - { - "value": "6ace938cf63e7de2164fd7cc0d4160f8", - "count": 2, - "total_related": 16647, - "prevalence": 0.00012014176728539677 - }, - { - "value": "b8555ec7354d74eecfa3090f1c814c9b", - "count": 2, - "total_related": 19212, - "prevalence": 0.00010410160316468874 - }, - { - "value": "0008bd0be2a556eade7f078789e67536", - "count": 2, - "total_related": 75600, - "prevalence": 2.6455026455026456e-5 - }, - { - "value": "c59bc85a0f166a721d9d5e8e1edcb1f2", - "count": 2, - "total_related": 83543, - "prevalence": 2.393976754485714e-5 - }, - { - "value": "6b33cf0792be0edfdc8a60a1e53c523e", - "count": 2, - "total_related": 98010, - "prevalence": 2.0406081012141617e-5 - }, - { - "value": "76c6c8e44cd4f1dbddc0f6c2202c1480", - "count": 60, - "total_related": 100000, - "prevalence": 0.0006 - }, - { - "value": "43934995b7323e096c638e2ecdc31311", - "count": 17, - "total_related": 100000, - "prevalence": 0.00017 - }, - { - "value": "2d0784920a7bf6f905a432af4b87a30d", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "53878ae7c240c652e087120bf0c44d20", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": "adb8af1a660afc6666dc16400fb2aceb", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": "32d4cb0c7069c90eeaeaecfe034c0aa9", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "43f3951f8a6e628e4b6db052d1431fcd", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "727f326aa01b8b87c06c8b13411a992d", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "7eb58e30b74038daa9b31b5d9df78cf2", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "1278f351ee7cd00fcf509a73b37353c2", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "22f73bfbc7ed8be4139c70426894cdab", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - } - ], - "tlshhash": [ - { - "value": "T11E253A0593018F96C813207951FE8DB3A877073192BF1CE6A78466DC83B2FA5776B366", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "T100155D1997028F56CC13207591FD9DB3A8760730937F0CE66BC466DC82E2FE9636A356", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T100E37D21F25ED0B3D47718F22726B57DB3EA4D2C1AA56807E6D80F48BCA49232F0595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T102145C20F245A8F3C42324F52A36E47173AA9F2D1D6C180FEAB53F4A68725D32B55D4B", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T103E37E21F262D0B3C83718F13736B572B3DE8E5C19A96907DAD80F59BCA58232F05997", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T104E36C21F15ED073C47718F22726B17DB3EA4D2C0AA57843EAD80F88ACA49632F1595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T105E36C11F25ED0B3D47718F12726B17DB3EA4D2C0A6A6843EAD40F88BCA59232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T105E37D21F223D0B3C83718F13736B572B39E8E6C15996917EAD80F99BC648232F15997", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T106B39E21F615D573C0E718BE7B567119B35F8E280E79A843D9E80F042865B6BFF21A83", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T106E36C21F25ED0B3D47718F12726B17DB3EA4D2C0A6A6803EAE50F487CA59232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T106E36D21F212D0B3C87718F13726B5B1F39A4E2C2AA56947EAD80F5D7CA48232F15597", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T107C633F6866FF7D4D99804F6C27A08EC56766D4E0B4EBDE52714C93E243CE42D2A2813", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T107E38C21B15ED0B3C47718F22726B17EB3EA4D2C1AA67847E6D50F48BCA48232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10AE37D21F212D0B3C83718F13736B5B2F39E4D2C19A96857DAD80F99BCA48236F45997", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10CE38C10BA52E077D0677AF1BF9FB122738E4D281A686047EAEC0F1864E5C17AF19D53", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10DE35B21F25ED0B3D47718F22726A17DB3EA4D2C0AA57807E6D40F88BCA59232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10EF38E21F253E1B3D42718F12B3675B1B39B8E2D1AA57413EAD80F55AC72823EF18947", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T114642358E9E4A93BCCDE56F562F17B173D9DB828D4A40709BE94718309F39CC8678388", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T116E31725F086D236D9C703B43565DEF668E86438132488E7CBEC5E5C58E0BE5AE3B247", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T118E36B21F25ED0B3D87718F12726A17DB3EA4D2C0AA67847E6E40F48BCA48232F5555F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T119E37C21B25ED0B3D47718F21726B17DB3EA4D2C0AA57843E6E90F48BCA49232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11AE36E21F212D0B3C47718F13736B572F39E4E2C15A96847EAD80F59BCA48236F45A97", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11AE37D21F25ED0B3D47718F12726B17DB3EA4D2C0AA96843E6E50F48BCA49232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11DE36D21F212D073C83718F5373675B2F3DE4E2C29A56847EA980F99BCA48236F45997", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11DF38D21F513D173D42728F22B367571B39B8E2C1AA57413EAD80F59ADB2823EF18947", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11EE37C11F11ED0B3C47718F12726B17DB3EA4D2C1AA66803EAE90F88BCA49636F4555F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11EE37D21B222D0B3D83718F137367572F39E4E2C19A96807DAE80F5DBCA58236F45997", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11F455B52B6D2C1FCC5833DFA657A275AE6368D1E83A4A0C7E3D87F8295103D273B4642", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11FB6330A679124E7F8EB567D8E12CC32A777B9D11F14C3AB026812E55F23AC24937379", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11FE37C21B25ED073D87718F21726B17DB3EA4D2C1AA57843EAD90F48BCA48232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11FE37D21F213D073C83718F12736B5B2B3DE4E6C19AA6817DAD80F99BC658232F45997", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T120E37E11F212D073C87718F12736B572F39E8E2C29A56807EAD80F5DBCA58236F15997", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T121E36C21F25ED0B3C47718F12726B17EB3EA4D2C1AA56843E6E50F48BCA49232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T122E37C21E25ED073D47718F22726B17DB3EA4D2C0AA57803EAD81F88BCA49632F4555F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T122E38C21B11ED0B3D87718F12726B17DB3EA4D2C1AA57817E6D80F88BCA49232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T128E36C21F21ED0B3D47718F22726A57DB3EA4D2C0A657807EAD50F48BCA49232F4695F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T128E37E21F222D0B3C83718F13736B572F39E8D2C1AA96917DAD80F59BC658232F45997", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T12A047D31B152E137CA6638F5A72AB3B073899E2C12A86467F6D4CF4B34738236F15947", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T12AE31725F086D236D9C703B43565DEF668E86438132488E7CBEC5E5C58E0BE5AE3B247", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T12AE36D21F212D0B3C83718F53736B572F39E4E2C15A96847DAE80F9DACA58132F45A97", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T12BE37C21F15ED0B3D47718F12736A17EB3EA4D2C1AA56903E6E50F887CA59232F0591F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T12DE38E21F213D0B3D83718F13B36B572B39E4D2C29A56847EA980F9DBCA58236F05597", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T131E36B21F15EE0B3C47718F22736A17DB3EA4D2C1AA56847E6D80F48BCA58232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T132E37CC510671E69D4DB62B695BE3C128530D8CE02633735BCEB5608FADFE50772A0AB", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T132F38D21F513D1B3D42718F12B357571B3AB8F2C1AA67413EAD80F59ACA6823EF18947", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T133E36C21F25ED0B3C86718F22726B57DB3EA4D2C0A657803E6E50F48BCA59232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T134E31725F086D236D9C703B43565DEF668E86438132488E7CBEC5E5C58E0BE5AE3B247", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T134E36C21B15ED0B3D47718F12726B17DB3AB4D2C0AA56847EAE80F48BCA59232F0595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T13525DF2545A192E6F29154B27A897190F033BD3B87395FFF82F0E325154AFC41B2E72A", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T135E37C21E15ED0B3D47718F12B3AA17EB3EA4D2C0A657843EAD41F48BCA49232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T135F38D21F113D0B3D42718F12B367671B39B8E2C2AA57413EAD90F55ACA6823EF18957", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T136F37D11F212D0B3D87718F12736B5B2B3DE8D6C2AA56807DAE80F5DBC648232F45997", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T136F38E21F213D1B3D42718F12B367571B3AB8E3C1AA57413EAE90F55ACA1823EF18957", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T138E37C21F15ED0B3C87718F22726B17DB3EA4D2C0AA56847E6D90F48BCA49232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T139E37D21F25ED0B3D87718F12726B17DB3EA4D2C0AA57847EAD40F48ACA49232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T13BE37D11F25ED0B3D87718F22726A17DB3EA4D1C1A697843EAD50F48BCA49232F4691F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T13CE36C21B25ED0B3D47718F12726B17DB3EA4D2C0AA57843EAE50F48BCA49232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T13DE37D11F212D073C87718F13736B572F39E8E6C19A96807EAE80F99BCA58136F05997", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T13EE37C11BB11D077D06716F2FF9FB512734F893819B96443EAE51F0824AA8E7AF04A93", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T13EE37D21B113D0B3C83718F13736B1B2F39E8D6C29A96857DAD80F99BCA48132F55997", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T13F4633DEF3835CA6DE2D973940233170777288CAD844E25B49C4A75AAFB32CB1D42E56", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T140E37E21F212D073C83718F53736B572B39E8E6C19A96807EAD80F5DBCA58232F54997", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T141E32725F156E276C4E70BB07568CFF658E8A434232090F7DBED1A5C08E4BE16E37256", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T141E37A11F25AD073D47708F22716F57AB3EA4D2C0AB96847EAD80F5DACA08232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T142155D1997028F56CC13207691FD9DB3A8760730937F0CE66BC466DC82E2FE9636A356", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T144E37D21B153D0B3C83718F527367572F39E8D2C1AA96807EAE80F5DBCA48236F45997", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T146E31725F086D236D9C703B43565DEF668E86438132488E7CBEC5E5C58E0BE5AE3B247", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T147E37E21F622D0B3D87718F13736B572F39E8D6C19A56807DAD80F99BCA48232F05997", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T147F37D21B112E177CA6734F6A729B3B4734A9E2C12A8A463F6D4CF4B35738236F15847", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T149155D1997028F56CC13207591FD9DB3A8760730937F0CE66BC46ADC82E2FE9636A356", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T14AE31725F086D236D9C703B43565DEF668E86438132488E7CBEC5E5C58E0BE5AE3B247", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T14B46236317221145E0E9CC3AC92BBEE532FB0366CF82B57868E75AC535138F4E712967", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T14BE31725F086D236D9C703B43565DEF668E86438132488E7CBEC5E5C58E0BE5AE3B247", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T14BE37C21F25ED0B3C47718F22726B17DB3EA4D2C1AA56807E6E90F48BCA59232F4554F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T14DE31725F086D236D9C703B43565DEF668E86438132488E7CBEC5E5C58E0BE5AE3B247", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T14DE37CC510671E69D4DB62B695BE3C128530D8CE02633735BCEB5608F9DFE50772A0AB", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T152E31725F156E276C4E70BB07668CFF658E8A434232090F7DBED0A5C18E4BE16E37256", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T152E37D21F252D0B3C83718F53B36B572F39E8E2C29A96847EAD80F59BCA48231F54557", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T155E37C21B15ED0B3C47718F12736B17DB3EA4D2C1AA56807EAE50F88BCA19232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T156155D1997028F56CC13207691FD9DB3A8760730937F0CE66BC466DC82E2FE9636A356", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T156E37D21F21ED0B3D47718F21726B17DB3AA4D2C1AA67803E6D50F88BCA59232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T157E37C11F25ED0B3D47718F22726B17DB3EA4D2C1AA57807E6D80F88ACA49232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T158E37C21B25ED073D87718F21726B17DB3EA4D2C1AA56843EAD90F48BCA48232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T15DE36B21F11ED0B3D86718F22726B17DB3EA4D2C1A697807E6D50F88BCA49232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T15E148C21F25ED073C4371CF61B26A17DB3EB4D2C1A696853EAE50F88ACA49632F0554F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T15EE37C21B25ED073D87718F21726B17DB3EA4D2C1AA56843EAD90F48BCA48232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T15EF37E217112D137DA6734F1A72AB3B0739A9E2C12A8A467F6E4CF4B35738236F14947", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T15FE36D21F212E073C87718F53B36B572F39A4D6C19996847DAE80F5DBCA48232F14A97", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T15FE37C21F25ED0B3D87718F12726A17DB3EA4D2C0AA57803EAD50F88BCA45632F4195F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T161E37C25F25ED0B3C87718F22726B17DB3EA4D2C0AA56803E6D50F48BCA49632F4555F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T163A39E21F611E573C1E718FE77566119B38F8E380E759853D9E80F442868A6BFF21A83", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T16464E026F61380FBE8122AB185A7FBEFC726C85958335B3DD3980520EFAB555349D243", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T110253A0593018F96C813207951FE8DB3A877073192BF1CE6A78466DC83B2FA5776B366", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "T12D253A0593018F96C813207951FE8DB3A877073192BF1CE6A78466DC83B2FA5776B366", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "T144253A0593018F96C813207951FE8DB3A877073192BF1CE6A78466DC83B2FA5776B366", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "T14B253A0593018F96C813207951FE8DB3A877073192BF1CE6A78466DC83B2FA5776B366", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "T14CE31725E156E276C4E70BB07668CFF658E8A434232090F7DBED0A5C18E4BE16E37256", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "T10F253A0593018F96C813207951FE8DB3A877073192BF1CE6A78466DC83B2FA5776B366", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "T114253A0593018F96C813207951FE8DB3A877073192BF1CE6A78466DC83B2FA5776B366", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "T126253A0593018F96C813207951FE8DB3A877073192BF1CE6A78466DC83B2FA5776B366", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - } - ], - "attributions": [ - { - "value": "lockbit", - "count": 263, - "total_related": 10022, - "prevalence": 0.026242267012572342 - }, - { - "value": "lockbit_black", - "count": 261, - "total_related": 3916, - "prevalence": 0.06664964249233912 - }, - { - "value": "blackmatter", - "count": 174, - "total_related": 2884, - "prevalence": 0.060332871012482664 - }, - { - "value": "lockbit_v2", - "count": 27, - "total_related": 127, - "prevalence": 0.2125984251968504 - }, - { - "value": "conti", - "count": 17, - "total_related": 11641, - "prevalence": 0.0014603556395498668 - }, - { - "value": "babuk", - "count": 11, - "total_related": 87456, - "prevalence": 0.00012577753384559093 - }, - { - "value": "ragnarok", - "count": 9, - "total_related": 94, - "prevalence": 0.09574468085106383 - }, - { - "value": "onyx", - "count": 5, - "total_related": 3141, - "prevalence": 0.001591849729385546 - }, - { - "value": "lummac", - "count": 3, - "total_related": 82849, - "prevalence": 3.621045516542143e-5 - }, - { - "value": "lokibot", - "count": 2, - "total_related": 43852, - "prevalence": 4.560795402718234e-5 - }, - { - "value": "limerat", - "count": 1, - "total_related": 4781, - "prevalence": 0.00020916126333403055 - }, - { - "value": "darktortilla", - "count": 1, - "total_related": 6054, - "prevalence": 0.00016518004625041294 - }, - { - "value": "lummac_v2", - "count": 1, - "total_related": 70224, - "prevalence": 1.4240145819093187e-5 - }, - { - "value": "quasarrat", - "count": 1, - "total_related": 97646, - "prevalence": 1.0241074903221842e-5 - }, - { - "value": "neshta", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "autoit", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "tinba", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "amadey", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "crowdsourced_ids_results": [ - { - "value": { - "id": "1:51127", - "message": "SERVER-OTHER NetBIOS name request probe attempt", - "category": "attempted-recon", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert udp $EXTERNAL_NET any -> $HOME_NET 137 ( msg:\"SERVER-OTHER NetBIOS name request probe attempt\"; flow:to_server; content:\"|00 00 00 01 00 00 00 00 00 00|\",depth 12,offset 2; content:\"|00 21 00 01|\",distance 0; detection_filter:track by_src,count 5,seconds 2; metadata:policy max-detect-ips drop; service:netbios-ns; classtype:attempted-recon; sid:51127; rev:3; )" - }, - "count": 3, - "total_related": 2729, - "prevalence": 0.0010993037742762918 - }, - { - "value": { - "id": "1:1620", - "message": "DELETED BAD TRAFFIC Non-Standard IP protocol", - "category": "non-standard-protocol", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert ip $EXTERNAL_NET any -> $HOME_NET any ( msg:\"DELETED BAD TRAFFIC Non-Standard IP protocol\"; ip_proto:!1; ip_proto:!2; ip_proto:!47; ip_proto:!50; ip_proto:!51; ip_proto:!6; ip_proto:!89; classtype:non-standard-protocol; sid:1620; rev:6; )" - }, - "count": 3, - "total_related": 54585, - "prevalence": 5.496015388843089e-5 - }, - { - "value": { - "id": "1:2061449", - "message": "ET MALWARE StealC v2 CnC Checkin (POST)", - "category": "command-and-control", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://www.virustotal.com/gui/search/f4398f139f80cb47207ef34dc5b7df0c", - "https://x.com/g0njxa/status/1910364088963649750", - "https://app.any.run/tasks/78b9c7f0-2412-4b48-b02c-64c81539d67b" - ], - "rule": "alert http $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET MALWARE StealC v2 CnC Checkin (POST)\"; flow:established,to_server; flowbits:set,ET.StealC.v2; urilen:21; http.method; content:\"POST\"; http.uri; pcre:\"/^\\x2f[a-z0-9]{16}\\x2ephp$/\"; http.content_type; content:\"application/json\"; http.header; content:\"Cache|2d|Control|3a| no|2d|cache|0d 0a|\"; http.header_names; bsize:55; content:\"|0d 0a|Content-Type|0d 0a|Host|0d 0a|Content-Length|0d 0a|Cache-Control|0d 0a 0d 0a|\"; fast_pattern; http.request_body; base64_decode: bytes 14, offset 8; base64_data; content:\"|22|build|22 3a 20 22|\"; reference:md5,f4398f139f80cb47207ef34dc5b7df0c; reference:url,x.com/g0njxa/status/1910364088963649750; reference:url,app.any.run/tasks/78b9c7f0-2412-4b48-b02c-64c81539d67b; classtype:command-and-control; sid:2061449; rev:1; metadata:affected_product Windows_XP_Vista_7_8_10_Server_32_64_Bit, attack_target Client_Endpoint, tls_state plaintext, created_at 2025_04_11, deployment Perimeter, malware_family Stealc, confidence High, signature_severity Critical, tag c2, updated_at 2025_04_11, mitre_tactic_id TA0011, mitre_tactic_name Command_And_Control, mitre_technique_id T1071, mitre_technique_name Application_Layer_Protocol; target:src_ip;)" - }, - "count": 1, - "total_related": 21, - "prevalence": 0.047619047619047616 - }, - { - "value": { - "id": "1:2033643", - "message": "ET MALWARE BlackMatter CnC Activity", - "category": "command-and-control", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://www.virustotal.com/gui/search/d0512f2063cbd79fb0f770817cc81ab3" - ], - "rule": "alert http $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET MALWARE BlackMatter CnC Activity\"; flow:established,to_server; http.request_line; content:\"POST /?\"; startswith; http.header; content:\"Accept|3a 20|*/*|0d 0a|Connection|3a 20|keep-alive|0d 0a|Accept-Encoding|3a 20|gzip, deflate, br|0d 0a|Content-Type|3a 20|text/plain|0d 0a|User-Agent|3a 20|\"; startswith; http.header_names; content:\"|0d 0a|Accept|0d 0a|Connection|0d 0a|Accept-Encoding|0d 0a|Content-Type|0d 0a|User-Agent|0d 0a|Host|0d 0a|Content-Length|0d 0a|Cache-Control|0d 0a 0d 0a|\"; bsize:104; http.user_agent; content:\"/\"; content:!\"/\"; distance:0; reference:md5,d0512f2063cbd79fb0f770817cc81ab3; classtype:command-and-control; sid:2033643; rev:1; metadata:affected_product Windows_XP_Vista_7_8_10_Server_32_64_Bit, attack_target Client_Endpoint, created_at 2021_08_02, deployment Perimeter, malware_family DarkSide, performance_impact Low, confidence High, signature_severity Major, tag Ransomware, updated_at 2021_08_02;)" - }, - "count": 1, - "total_related": 65, - "prevalence": 0.015384615384615385 - }, - { - "value": { - "id": "1:902206854", - "message": "SSLBL: Malicious SSL certificate detected (LummaStealer C&C)", - "source": "Abuse.ch SSL Blocklist", - "url": "https://sslbl.abuse.ch/blacklist/sslblacklist.rules", - "references_urls": [ - "https://sslbl.abuse.ch/ssl-certificates/sha1/5987434eb36b2326d4e0beeae83fa5fb9cf1d549/" - ], - "rule": "alert tls $EXTERNAL_NET any -> $HOME_NET any (msg:\"SSLBL: Malicious SSL certificate detected (LummaStealer C&C)\"; tls.fingerprint:\"59:87:43:4e:b3:6b:23:26:d4:e0:be:ea:e8:3f:a5:fb:9c:f1:d5:49\"; reference:url, sslbl.abuse.ch/ssl-certificates/sha1/5987434eb36b2326d4e0beeae83fa5fb9cf1d549/; sid:902206854; rev:1;)" - }, - "count": 1, - "total_related": 947, - "prevalence": 0.0010559662090813093 - }, - { - "value": { - "id": "1:2061392", - "message": "ET MALWARE Observed Win32/Lumma Stealer Related Domain (clarmodq .top in TLS SNI)", - "category": "domain-c2", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://www.virustotal.com/gui/search/486ac4b868bcba983a2016e703d0bd01" - ], - "rule": "alert tls $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET MALWARE Observed Win32/Lumma Stealer Related Domain (clarmodq .top in TLS SNI)\"; flow:established,to_server; tls.sni; bsize:12; content:\"clarmodq.top\"; fast_pattern; reference:md5,486ac4b868bcba983a2016e703d0bd01; classtype:domain-c2; sid:2061392; rev:1; metadata:tls_state TLSEncrypt, created_at 2025_04_08, deployment Perimeter, malware_family Lumma_Stealer, confidence High, signature_severity Critical, updated_at 2025_04_08, mitre_tactic_id TA0011, mitre_tactic_name Command_And_Control, mitre_technique_id T1071, mitre_technique_name Application_Layer_Protocol; target:src_ip;)" - }, - "count": 1, - "total_related": 1407, - "prevalence": 0.0007107320540156361 - }, - { - "value": { - "id": "1:2061391", - "message": "ET MALWARE Win32/Lumma Stealer Related CnC Domain in DNS Lookup (clarmodq .top)", - "category": "domain-c2", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://www.virustotal.com/gui/search/486ac4b868bcba983a2016e703d0bd01" - ], - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET MALWARE Win32/Lumma Stealer Related CnC Domain in DNS Lookup (clarmodq .top)\"; dns.query; bsize:12; content:\"clarmodq.top\"; fast_pattern; nocase; reference:md5,486ac4b868bcba983a2016e703d0bd01; classtype:domain-c2; sid:2061391; rev:1; metadata:attack_target Client_Endpoint, created_at 2025_04_08, deployment Perimeter, deployment Internal, malware_family Lumma_Stealer, confidence High, signature_severity Major, updated_at 2025_04_08, mitre_tactic_id TA0011, mitre_tactic_name Command_And_Control, mitre_technique_id T1071, mitre_technique_name Application_Layer_Protocol; target:src_ip;)" - }, - "count": 1, - "total_related": 1635, - "prevalence": 0.0006116207951070336 - }, - { - "value": { - "id": "1:2610332", - "message": "TGI HUNT netsh advfirewall", - "category": "bad-unknown", - "source": "Travis Green: Threat hunting rules", - "url": "https://raw.githubusercontent.com/travisbgreen/hunting-rules/master/hunting.rules", - "rule": "alert ip any any -> any any (msg:\"TGI HUNT netsh advfirewall\"; flow:established; content:\"netsh advfirewall\"; content:!\"This example shows how to disable Wmi fixed port\"; distance:-730; within: 50; content:!\"from administrator command prompt window\"; distance:22; within:45; threshold:type limit, track by_src, seconds 60, count 1; classtype:bad-unknown; sid:2610332; rev:1;)" - }, - "count": 1, - "total_related": 2447, - "prevalence": 0.0004086636697997548 - }, - { - "value": { - "id": "1:402", - "message": "PROTOCOL-ICMP destination unreachable port unreachable packet detected", - "category": "misc-activity", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "references_urls": [ - "https://cve.mitre.org/cgi-bin/cvename.cgi?name=2004-0790", - "https://cve.mitre.org/cgi-bin/cvename.cgi?name=2005-0068" - ], - "tags": ["cve-2004-0790", "cve-2005-0068"], - "rule": "alert icmp $EXTERNAL_NET any -> $HOME_NET any ( msg:\"PROTOCOL-ICMP destination unreachable port unreachable packet detected\"; icode:3; itype:3; metadata:policy max-detect-ips drop,ruleset community; reference:cve,2004-0790; reference:cve,2005-0068; classtype:misc-activity; sid:402; rev:16; )" - }, - "count": 1, - "total_related": 5589, - "prevalence": 0.0001789228842368939 - }, - { - "value": { - "id": "1:2200003", - "message": "SURICATA IPv4 truncated packet", - "category": "protocol-command-decode", - "source": "Suricata", - "url": "https://www.openinfosecfoundation.org/", - "rule": "alert pkthdr any any -> any any (msg:\"SURICATA IPv4 truncated packet\"; decode-event:ipv4.trunc_pkt; classtype:protocol-command-decode; sid:2200003; rev:2;)" - }, - "count": 1, - "total_related": 8494, - "prevalence": 0.0001177301624676242 - }, - { - "value": { - "id": "1:2054168", - "message": "ET INFO External IP Lookup Domain in DNS Lookup (ipinfo .io)", - "category": "external-ip-check", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://github.com/chubin/awesome-console-services" - ], - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET INFO External IP Lookup Domain in DNS Lookup (ipinfo .io)\"; dns.query; bsize:9; content:\"ipinfo.io\"; nocase; reference:url,github.com/chubin/awesome-console-services; classtype:external-ip-check; sid:2054168; rev:1; metadata:affected_product Any, attack_target Client_Endpoint, created_at 2024_06_28, deployment Perimeter, performance_impact Low, confidence High, signature_severity Informational, tag External_IP_Lookup, updated_at 2024_06_28, reviewed_at 2024_10_04, mitre_tactic_id TA0043, mitre_tactic_name Reconnaissance, mitre_technique_id T1590, mitre_technique_name Gather_Victim_Network_Information;)" - }, - "count": 1, - "total_related": 28960, - "prevalence": 3.4530386740331494e-5 - }, - { - "value": { - "id": "1:2054989", - "message": "ET INFO Tunneling Service in DNS Lookup (* .ply .gg)", - "category": "misc-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET INFO Tunneling Service in DNS Lookup (* .ply .gg)\"; dns.query; dotprefix; content:\".ply.gg\"; nocase; endswith; classtype:misc-activity; sid:2054989; rev:1; metadata:attack_target Client_Endpoint, created_at 2024_08_07, deployment Perimeter, performance_impact Low, confidence High, signature_severity Informational, updated_at 2024_08_07, reviewed_at 2025_01_06;)" - }, - "count": 1, - "total_related": 30785, - "prevalence": 3.24833522819555e-5 - }, - { - "value": { - "id": "1:2044590", - "message": "ET INFO playit .gg Tunneling Domain in DNS Lookup", - "category": "bad-unknown", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": ["https://playit.gg/"], - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET INFO playit .gg Tunneling Domain in DNS Lookup\"; dns.query; dotprefix; content:\".at.ply.gg\"; nocase; endswith; reference:url,playit.gg/; classtype:bad-unknown; sid:2044590; rev:1; metadata:attack_target Client_Endpoint, created_at 2023_03_14, deployment Perimeter, performance_impact Low, confidence High, signature_severity Informational, updated_at 2023_03_14, mitre_tactic_id TA0011, mitre_tactic_name Command_And_Control, mitre_technique_id T1572, mitre_technique_name Protocol_Tunneling;)" - }, - "count": 1, - "total_related": 47825, - "prevalence": 2.0909566126502874e-5 - }, - { - "value": { - "id": "1:2041933", - "message": "ET INFO Observed Telegram Domain (t .me in TLS SNI)", - "category": "misc-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert tls $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET INFO Observed Telegram Domain (t .me in TLS SNI)\"; flow:established,to_server; tls.sni; content:\"t.me\"; bsize:4; fast_pattern; classtype:misc-activity; sid:2041933; rev:1; metadata:attack_target Client_Endpoint, created_at 2022_06_24, deployment Perimeter, performance_impact Low, confidence High, signature_severity Informational, updated_at 2022_12_07, former_sid 2851827;)" - }, - "count": 1, - "total_related": 61064, - "prevalence": 1.6376260972094853e-5 - }, - { - "value": { - "id": "1:2033967", - "message": "ET HUNTING Observed Telegram API Domain (api .telegram .org in TLS SNI)", - "category": "misc-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert tls $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET HUNTING Observed Telegram API Domain (api .telegram .org in TLS SNI)\"; flow:established,to_server; tls.sni; content:\"api.telegram.org\"; bsize:16; fast_pattern; classtype:misc-activity; sid:2033967; rev:1; metadata:attack_target Client_Endpoint, created_at 2021_09_16, deployment Perimeter, performance_impact Low, confidence High, signature_severity Informational, updated_at 2021_09_16;)" - }, - "count": 1, - "total_related": 92312, - "prevalence": 1.083282780136927e-5 - }, - { - "value": { - "id": "1:2021076", - "message": "ET HUNTING SUSPICIOUS Dotted Quad Host MZ Response", - "category": "bad-unknown", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert http $EXTERNAL_NET any -> $HOME_NET any (msg:\"ET HUNTING SUSPICIOUS Dotted Quad Host MZ Response\"; flow:established,to_client; flowbits:isset,http.dottedquadhost; file_data; content:\"MZ\"; within:2; content:\"PE|00 00|\"; distance:0; classtype:bad-unknown; sid:2021076; rev:2; metadata:created_at 2015_05_08, confidence Medium, signature_severity Informational, updated_at 2019_07_26;)" - }, - "count": 1, - "total_related": 97157, - "prevalence": 1.0292619162798358e-5 - }, - { - "value": { - "id": "1:29456", - "message": "PROTOCOL-ICMP Unusual PING detected", - "category": "successful-recon-limited", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "references_urls": [ - "https://krebsonsecurity.com/2014/01/a-closer-look-at-the-target-malware-part-ii/", - "https://krebsonsecurity.com/2014/01/a-first-look-at-the-target-intrusion-malware/" - ], - "rule": "alert icmp $HOME_NET any -> $EXTERNAL_NET any ( msg:\"PROTOCOL-ICMP Unusual PING detected\"; icode:0; itype:8; fragbits:!M; content:!\"ABCDEFGHIJKLMNOPQRSTUVWABCDEFGHI\",depth 32; content:!\"0123456789abcdefghijklmnopqrstuv\",depth 32; content:!\"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE\",depth 36; content:!\"WANG2\"; content:!\"cacti-monitoring-system\",depth 65; content:!\"SolarWinds\",depth 72; metadata:policy max-detect-ips drop,ruleset community; reference:url,krebsonsecurity.com/2014/01/a-closer-look-at-the-target-malware-part-ii/; reference:url,krebsonsecurity.com/2014/01/a-first-look-at-the-target-intrusion-malware/; classtype:successful-recon-limited; sid:29456; rev:3; )" - }, - "count": 27, - "total_related": 100000, - "prevalence": 0.00027 - }, - { - "value": { - "id": "1:384", - "message": "PROTOCOL-ICMP PING", - "category": "misc-activity", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert icmp $EXTERNAL_NET any -> $HOME_NET any ( msg:\"PROTOCOL-ICMP PING\"; icode:0; itype:8; metadata:ruleset community; classtype:misc-activity; sid:384; rev:8; )" - }, - "count": 27, - "total_related": 100000, - "prevalence": 0.00027 - }, - { - "value": { - "id": "1:408", - "message": "PROTOCOL-ICMP Echo Reply", - "category": "misc-activity", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert icmp $EXTERNAL_NET any -> $HOME_NET any ( msg:\"PROTOCOL-ICMP Echo Reply\"; icode:0; itype:0; metadata:ruleset community; classtype:misc-activity; sid:408; rev:8; )" - }, - "count": 27, - "total_related": 100000, - "prevalence": 0.00027 - }, - { - "value": { - "id": "1:382", - "message": "PROTOCOL-ICMP PING Windows", - "category": "misc-activity", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert icmp $EXTERNAL_NET any -> $HOME_NET any ( msg:\"PROTOCOL-ICMP PING Windows\"; itype:8; content:\"abcdefghijklmnop\",depth 16; metadata:ruleset community; classtype:misc-activity; sid:382; rev:11; )" - }, - "count": 23, - "total_related": 100000, - "prevalence": 0.00023 - }, - { - "value": { - "id": "116:424", - "message": "(eth) truncated ethernet header", - "category": "misc-activity", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert ( gid:116; sid:424; rev:2; msg:\"(eth) truncated ethernet header\"; metadata: policy max-detect-ips drop, rule-type decode; classtype:misc-activity;)" - }, - "count": 8, - "total_related": 100000, - "prevalence": 8e-5 - }, - { - "value": { - "id": "1:254", - "message": "PROTOCOL-DNS SPOOF query response with TTL of 1 min. and no authority", - "category": "bad-unknown", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert udp $EXTERNAL_NET 53 -> $HOME_NET any ( msg:\"PROTOCOL-DNS SPOOF query response with TTL of 1 min. and no authority\"; flow:to_client; content:\"|81 80|\",depth 4,offset 2,fast_pattern; byte_test:2,>,0,0,relative,big; byte_test:2,>,0,2,relative,big; content:\"|00 00 00 00|\",within 4,distance 4; content:\"|C0 0C 00 01 00 01|\",distance 0; byte_test:4,<,61,0,relative,big; byte_test:4,>,0,0,relative,big; metadata:policy max-detect-ips drop,ruleset community; service:dns; classtype:bad-unknown; sid:254; rev:16; )" - }, - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": { - "id": "1:31767", - "message": "SERVER-OTHER MRLG fastping echo reply memory corruption attempt", - "category": "misc-attack", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "references_urls": [ - "https://cve.mitre.org/cgi-bin/cvename.cgi?name=2014-3931", - "https://mrlg.op-sec.us/", - "https://s3.eurecom.fr/cve/CVE-2014-3931.txt" - ], - "tags": ["cve-2014-3931"], - "rule": "alert icmp $EXTERNAL_NET any -> $HOME_NET any ( msg:\"SERVER-OTHER MRLG fastping echo reply memory corruption attempt\"; icode:0; itype:0; content:!\"ABCDEFGHIJKLMNOPQRSTUVWABCDEFGHI\",depth 32; content:!\"0123456789abcdefghijklmnopqrstuv\",depth 32; content:!\"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE\",depth 36; byte_test:4,>,1000000,8,little; metadata:policy max-detect-ips drop; reference:cve,2014-3931; reference:url,mrlg.op-sec.us/; reference:url,s3.eurecom.fr/cve/CVE-2014-3931.txt; classtype:misc-attack; sid:31767; rev:2; )" - }, - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": { - "id": "1:401", - "message": "PROTOCOL-ICMP Destination Unreachable Network Unreachable", - "category": "misc-activity", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert icmp $EXTERNAL_NET any -> $HOME_NET any ( msg:\"PROTOCOL-ICMP Destination Unreachable Network Unreachable\"; icode:0; itype:3; metadata:ruleset community; classtype:misc-activity; sid:401; rev:9; )" - }, - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": { - "id": "1:385", - "message": "PROTOCOL-ICMP traceroute", - "category": "attempted-recon", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert icmp $EXTERNAL_NET any -> $HOME_NET any ( msg:\"PROTOCOL-ICMP traceroute\"; itype:8; ttl:1; metadata:ruleset community; classtype:attempted-recon; sid:385; rev:8; )" - }, - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": { - "id": "2:1", - "message": "(output) tagged packet", - "category": "not-suspicious", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert ( gid:2; sid:1; rev:2; msg:\"(output) tagged packet\"; metadata: rule-type preproc; classtype:not-suspicious;)" - }, - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": { - "id": "122:19", - "message": "(port_scan) UDP portsweep", - "category": "attempted-recon", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert ( gid:122; sid:19; rev:2; msg:\"(port_scan) UDP portsweep\"; metadata: rule-type preproc; classtype:attempted-recon;)" - }, - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": { - "id": "1:57756", - "message": "MALWARE-CNC DNS Fast Flux attempt", - "category": "trojan-activity", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "references_urls": [ - "https://attack.mitre.org/techniques/T1568/001/" - ], - "rule": "alert udp $EXTERNAL_NET 53 -> $HOME_NET any ( msg:\"MALWARE-CNC DNS Fast Flux attempt\"; flow:to_client; content:\"|00 01|\",depth 2,offset 4; byte_test:2,>,1,0,relative; byte_test:1,=,1,2,bitmask 0x80; content:\"|00 01 00 01|\",distance 6; content:\"|00 01 00 01 00 00 00 05|\",distance 0; metadata:policy max-detect-ips drop; service:dns; reference:url,attack.mitre.org/techniques/T1568/001/; classtype:trojan-activity; sid:57756; rev:2; )" - }, - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": { - "id": "1:2016141", - "message": "ET INFO Executable Download from dotted-quad Host", - "category": "bad-unknown", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert http $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET INFO Executable Download from dotted-quad Host\"; flow:established,to_server; http.uri; content:\".exe\"; endswith; nocase; http.host; content:\".\"; offset:1; depth:3; content:\".\"; within:4; content:\".\"; within:4; pcre:\"/^(?:\\d{1,3}\\.){3}\\d{1,3}$/\"; http.request_line; content:\".exe HTTP/1.\"; fast_pattern; classtype:bad-unknown; sid:2016141; rev:9; metadata:attack_target Client_and_Server, created_at 2013_01_03, deployment Perimeter, performance_impact Significant, confidence High, signature_severity Informational, updated_at 2024_04_09;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "1:2016538", - "message": "ET INFO Executable Retrieved With Minimal HTTP Headers - Potential Second Stage Download", - "category": "bad-unknown", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert http $EXTERNAL_NET any -> $HOME_NET any (msg:\"ET INFO Executable Retrieved With Minimal HTTP Headers - Potential Second Stage Download\"; flowbits:isset,min.gethttp; flow:established,to_client; file_data; content:\"MZ\"; within:2; content:\"PE|00 00|\"; distance:0; classtype:bad-unknown; sid:2016538; rev:3; metadata:created_at 2013_03_06, confidence High, signature_severity Informational, updated_at 2019_07_26;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "1:2018170", - "message": "ET POLICY Application Crash Report Sent to Microsoft", - "category": "policy-violation", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert http $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET POLICY Application Crash Report Sent to Microsoft\"; flow:established,to_server; http.user_agent; content:\"MSDW\"; depth:4; http.host; content:\"watson.microsoft.com\"; classtype:policy-violation; sid:2018170; rev:6; metadata:created_at 2014_02_24, confidence High, signature_severity Informational, updated_at 2020_08_17;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "1:2022082", - "message": "ET POLICY External IP Lookup ip-api.com", - "category": "external-ip-check", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert http $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET POLICY External IP Lookup ip-api.com\"; flow:established,to_server; http.host; content:\"ip-api.com\"; classtype:external-ip-check; sid:2022082; rev:6; metadata:attack_target Client_Endpoint, created_at 2015_11_13, deployment Perimeter, performance_impact Low, confidence High, signature_severity Informational, updated_at 2024_11_26, mitre_tactic_id TA0043, mitre_tactic_name Reconnaissance, mitre_technique_id T1590, mitre_technique_name Gather_Victim_Network_Information;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "1:2023883", - "message": "ET DNS Query to a *.top domain - Likely Hostile", - "category": "bad-unknown", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://www.symantec.com/connect/blogs/shady-tld-research-gdn-and-our-2016-wrap", - "https://www.spamhaus.org/statistics/tlds/" - ], - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET DNS Query to a *.top domain - Likely Hostile\"; threshold:type limit, track by_src, count 1, seconds 30; dns.query; content:\".top\"; nocase; endswith; reference:url,www.symantec.com/connect/blogs/shady-tld-research-gdn-and-our-2016-wrap; reference:url,www.spamhaus.org/statistics/tlds/; classtype:bad-unknown; sid:2023883; rev:4; metadata:affected_product Windows_XP_Vista_7_8_10_Server_32_64_Bit, attack_target Client_Endpoint, created_at 2017_02_07, deployment Perimeter, confidence Medium, signature_severity Major, updated_at 2020_09_15;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "1:2025331", - "message": "ET POLICY Possible External IP Lookup Domain Observed in SNI (ipinfo. io)", - "category": "external-ip-check", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert tls $HOME_NET any -> $EXTERNAL_NET 443 (msg:\"ET POLICY Possible External IP Lookup Domain Observed in SNI (ipinfo. io)\"; flow:established,to_server; tls.sni; content:\"ipinfo.io\"; bsize:9; fast_pattern; classtype:external-ip-check; sid:2025331; rev:5; metadata:affected_product Windows_XP_Vista_7_8_10_Server_32_64_Bit, affected_product Mac_OSX, affected_product Linux, attack_target Client_Endpoint, created_at 2018_02_07, deployment Perimeter, performance_impact Low, confidence High, signature_severity Informational, updated_at 2024_09_19, mitre_tactic_id TA0043, mitre_tactic_name Reconnaissance, mitre_technique_id T1590, mitre_technique_name Gather_Victim_Network_Information;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "1:2027389", - "message": "ET USER_AGENTS Microsoft Dr Watson User-Agent (MSDW)", - "category": "unknown", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert http $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET USER_AGENTS Microsoft Dr Watson User-Agent (MSDW)\"; flow:established,to_server; http.user_agent; content:\"MSDW\"; depth:4; isdataat:!1,relative; fast_pattern; threshold: type limit, track by_src, count 1, seconds 300; classtype:unknown; sid:2027389; rev:4; metadata:affected_product Web_Browsers, attack_target Client_Endpoint, created_at 2019_05_28, deployment Perimeter, performance_impact Low, confidence High, signature_severity Minor, updated_at 2019_10_16;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "1:2033966", - "message": "ET HUNTING Telegram API Domain in DNS Lookup", - "category": "misc-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET HUNTING Telegram API Domain in DNS Lookup\"; dns.query; content:\"api.telegram.org\"; nocase; bsize:16; classtype:misc-activity; sid:2033966; rev:1; metadata:attack_target Client_Endpoint, created_at 2021_09_16, deployment Perimeter, performance_impact Low, confidence High, signature_severity Minor, updated_at 2021_09_16;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "1:2047702", - "message": "ET INFO External IP Lookup Domain (ipify .org) in DNS Lookup", - "category": "misc-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET INFO External IP Lookup Domain (ipify .org) in DNS Lookup\"; dns.query; dotprefix; content:\".ipify.org\"; nocase; endswith; classtype:misc-activity; sid:2047702; rev:1; metadata:affected_product Any, attack_target Client_Endpoint, created_at 2023_08_22, deployment Perimeter, performance_impact Low, confidence High, signature_severity Informational, tag External_IP_Lookup, updated_at 2023_08_22, reviewed_at 2023_10_06, mitre_tactic_id TA0043, mitre_tactic_name Reconnaissance, mitre_technique_id T1590, mitre_technique_name Gather_Victim_Network_Information;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "1:2047703", - "message": "ET INFO External IP Address Lookup Domain (ipify .org) in TLS SNI", - "category": "misc-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert tls $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET INFO External IP Address Lookup Domain (ipify .org) in TLS SNI\"; flow:established,to_server; tls.sni; dotprefix; content:\".ipify.org\"; endswith; fast_pattern; classtype:misc-activity; sid:2047703; rev:1; metadata:affected_product Any, attack_target Client_and_Server, created_at 2023_08_22, deployment Perimeter, performance_impact Low, confidence High, signature_severity Informational, tag External_IP_Lookup, updated_at 2023_08_22, reviewed_at 2023_08_22;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "1:2054141", - "message": "ET INFO External IP Lookup Domain in DNS Lookup (ip-api .com)", - "category": "external-ip-check", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://github.com/chubin/awesome-console-services" - ], - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET INFO External IP Lookup Domain in DNS Lookup (ip-api .com)\"; dns.query; bsize:10; content:\"ip-api.com\"; nocase; reference:url,github.com/chubin/awesome-console-services; classtype:external-ip-check; sid:2054141; rev:1; metadata:affected_product Any, attack_target Client_Endpoint, created_at 2024_06_28, deployment Perimeter, performance_impact Low, confidence High, signature_severity Informational, tag External_IP_Lookup, updated_at 2024_06_28, reviewed_at 2024_10_04, mitre_tactic_id TA0043, mitre_tactic_name Reconnaissance, mitre_technique_id T1590, mitre_technique_name Gather_Victim_Network_Information;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "1:2210045", - "message": "SURICATA STREAM Packet with invalid ack", - "category": "protocol-command-decode", - "source": "Suricata", - "url": "https://www.openinfosecfoundation.org/", - "rule": "alert tcp any any -> any any (msg:\"SURICATA STREAM Packet with invalid ack\"; stream-event:pkt_invalid_ack; classtype:protocol-command-decode; sid:2210045; rev:2;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "1:2210046", - "message": "SURICATA STREAM SHUTDOWN RST invalid ack", - "category": "protocol-command-decode", - "source": "Suricata", - "url": "https://www.openinfosecfoundation.org/", - "rule": "alert tcp any any -> any any (msg:\"SURICATA STREAM SHUTDOWN RST invalid ack\"; stream-event:rst_invalid_ack; classtype:protocol-command-decode; sid:2210046; rev:2;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "1:906200054", - "message": "SSLBL: Malicious JA3 SSL-Client Fingerprint detected (Tofsee)", - "source": "Abuse.ch Suricata JA3 Fingerprint Ruleset", - "url": "https://sslbl.abuse.ch/blacklist/ja3_fingerprints.rules", - "references_urls": [ - "https://sslbl.abuse.ch/ja3-fingerprints/1d095e68489d3c535297cd8dffb06cb9/" - ], - "rule": "alert tls any any -> any any (msg:\"SSLBL: Malicious JA3 SSL-Client Fingerprint detected (Tofsee)\"; ja3_hash; content:\"1d095e68489d3c535297cd8dffb06cb9\"; reference:url, sslbl.abuse.ch/ja3-fingerprints/1d095e68489d3c535297cd8dffb06cb9/; sid:906200054; rev:1;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "crowdsourced_yara_results": [ - { - "value": { - "id": "015e7930ee|Windows_Ransomware_Lockbit_369e1e94", - "ruleset_id": "015e7930ee", - "ruleset_name": "Windows_Ransomware_Lockbit", - "rule_name": "Windows_Ransomware_Lockbit_369e1e94", - "source": "https://github.com/elastic/protections-artifacts" - }, - "count": 174, - "total_related": 2612, - "prevalence": 0.0666156202143951 - }, - { - "value": { - "id": "0022c78e42|Darkside", - "ruleset_id": "0022c78e42", - "ruleset_name": "Darkside", - "rule_name": "Darkside", - "source": "https://github.com/bartblaze/Yara-rules" - }, - "count": 174, - "total_related": 5010, - "prevalence": 0.03473053892215569 - }, - { - "value": { - "id": "0080597496|win_lockbit_auto", - "ruleset_id": "0080597496", - "ruleset_name": "win.lockbit_auto", - "rule_name": "win_lockbit_auto", - "source": "https://github.com/malpedia/signator-rules" - }, - "count": 166, - "total_related": 2226, - "prevalence": 0.07457322551662174 - }, - { - "value": { - "id": "00bc40da16|Lockbit", - "ruleset_id": "00bc40da16", - "ruleset_name": "Lockbit", - "rule_name": "Lockbit", - "source": "https://github.com/kevoreilly/CAPEv2" - }, - "count": 58, - "total_related": 6092, - "prevalence": 0.009520682862770847 - }, - { - "value": { - "id": "00c3b8eb5d|INDICATOR_SUSPICIOUS_EXE_UACBypass_CMSTPCOM", - "ruleset_id": "00c3b8eb5d", - "ruleset_name": "indicator_suspicious", - "rule_name": "INDICATOR_SUSPICIOUS_EXE_UACBypass_CMSTPCOM", - "source": "https://github.com/ditekshen/detection" - }, - "count": 57, - "total_related": 49050, - "prevalence": 0.0011620795107033638 - }, - { - "value": { - "id": "00c3b8eb5d|INDICATOR_SUSPICIOUS_USNDeleteJournal", - "ruleset_id": "00c3b8eb5d", - "ruleset_name": "indicator_suspicious", - "rule_name": "INDICATOR_SUSPICIOUS_USNDeleteJournal", - "source": "https://github.com/ditekshen/detection" - }, - "count": 55, - "total_related": 17190, - "prevalence": 0.0031995346131471784 - }, - { - "value": { - "id": "015e7930ee|Windows_Ransomware_Lockbit_a1c60939", - "ruleset_id": "015e7930ee", - "ruleset_name": "Windows_Ransomware_Lockbit", - "rule_name": "Windows_Ransomware_Lockbit_a1c60939", - "source": "https://github.com/elastic/protections-artifacts" - }, - "count": 32, - "total_related": 474, - "prevalence": 0.06751054852320675 - }, - { - "value": { - "id": "015e7930ee|Windows_Ransomware_Lockbit_89e64044", - "ruleset_id": "015e7930ee", - "ruleset_name": "Windows_Ransomware_Lockbit", - "rule_name": "Windows_Ransomware_Lockbit_89e64044", - "source": "https://github.com/elastic/protections-artifacts" - }, - "count": 32, - "total_related": 483, - "prevalence": 0.06625258799171843 - }, - { - "value": { - "id": "0002ccf6ba|MAL_EXE_LockBit_v2", - "ruleset_id": "0002ccf6ba", - "ruleset_name": "gen_100days_of_yara_2023", - "rule_name": "MAL_EXE_LockBit_v2", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 32, - "total_related": 494, - "prevalence": 0.06477732793522267 - }, - { - "value": { - "id": "00139d79e2|Lockbit2_Jul21", - "ruleset_id": "00139d79e2", - "ruleset_name": "RANSOM_Lockbit2", - "rule_name": "Lockbit2_Jul21", - "source": "https://github.com/advanced-threat-research/Yara-Rules" - }, - "count": 32, - "total_related": 550, - "prevalence": 0.05818181818181818 - }, - { - "value": { - "id": "00c3b8eb5d|INDICATOR_SUSPICIOUS_ClearWinLogs", - "ruleset_id": "00c3b8eb5d", - "ruleset_name": "indicator_suspicious", - "rule_name": "INDICATOR_SUSPICIOUS_ClearWinLogs", - "source": "https://github.com/ditekshen/detection" - }, - "count": 26, - "total_related": 12170, - "prevalence": 0.0021364009860312242 - }, - { - "value": { - "id": "00c3b8eb5d|INDICATOR_SUSPICOUS_EXE_References_VEEAM", - "ruleset_id": "00c3b8eb5d", - "ruleset_name": "indicator_suspicious", - "rule_name": "INDICATOR_SUSPICOUS_EXE_References_VEEAM", - "source": "https://github.com/ditekshen/detection" - }, - "count": 25, - "total_related": 14012, - "prevalence": 0.0017841849842991722 - }, - { - "value": { - "id": "00c3b8eb5d|INDICATOR_SUSPICIOUS_GENRansomware", - "ruleset_id": "00c3b8eb5d", - "ruleset_name": "indicator_suspicious", - "rule_name": "INDICATOR_SUSPICIOUS_GENRansomware", - "source": "https://github.com/ditekshen/detection" - }, - "count": 25, - "total_related": 46746, - "prevalence": 0.0005348051170153596 - }, - { - "value": { - "id": "005e4bd1ed|Win32_Ransomware_LockBit", - "ruleset_id": "005e4bd1ed", - "ruleset_name": "Win32.Ransomware.LockBit", - "rule_name": "Win32_Ransomware_LockBit", - "source": "https://github.com/reversinglabs/reversinglabs-yara-rules" - }, - "count": 21, - "total_related": 487, - "prevalence": 0.043121149897330596 - }, - { - "value": { - "id": "00c291ca7f|INDICATOR_EXE_Packed_BoxedApp", - "ruleset_id": "00c291ca7f", - "ruleset_name": "indicator_packed", - "rule_name": "INDICATOR_EXE_Packed_BoxedApp", - "source": "https://github.com/ditekshen/detection" - }, - "count": 2, - "total_related": 8921, - "prevalence": 0.0002241901132160072 - }, - { - "value": { - "id": "000f44c4bb|SUSP_XORed_URL_In_EXE", - "ruleset_id": "000f44c4bb", - "ruleset_name": "gen_susp_xor", - "rule_name": "SUSP_XORed_URL_In_EXE", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 22, - "total_related": 100000, - "prevalence": 0.00022 - }, - { - "value": { - "id": "00c3b8eb5d|INDICATOR_SUSPICIOUS_EXE_RegKeyComb_DisableWinDefender", - "ruleset_id": "00c3b8eb5d", - "ruleset_name": "indicator_suspicious", - "rule_name": "INDICATOR_SUSPICIOUS_EXE_RegKeyComb_DisableWinDefender", - "source": "https://github.com/ditekshen/detection" - }, - "count": 22, - "total_related": 100000, - "prevalence": 0.00022 - }, - { - "value": { - "id": "000f44c4bb|SUSP_XORed_URL_in_EXE", - "ruleset_id": "000f44c4bb", - "ruleset_name": "gen_susp_xor", - "rule_name": "SUSP_XORed_URL_in_EXE", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 19, - "total_related": 100000, - "prevalence": 0.00019 - }, - { - "value": { - "id": "000c8f1d6e|MAL_Malware_Imphash_Mar23_1", - "ruleset_id": "000c8f1d6e", - "ruleset_name": "gen_imphash_detection", - "rule_name": "MAL_Malware_Imphash_Mar23_1", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": { - "id": "000d22dbf9|MAL_Neshta_Generic", - "ruleset_id": "000d22dbf9", - "ruleset_name": "mal_netsha", - "rule_name": "MAL_Neshta_Generic", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": { - "id": "00cc803bdc|MALWARE_Win_Neshta", - "ruleset_id": "00cc803bdc", - "ruleset_name": "malware", - "rule_name": "MALWARE_Win_Neshta", - "source": "https://github.com/ditekshen/detection" - }, - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": { - "id": "0140fddf38|win_neshta_1", - "ruleset_id": "0140fddf38", - "ruleset_name": "neshta", - "rule_name": "win_neshta_1", - "source": "https://github.com/baderj/yara" - }, - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": { - "id": "0153a96305|Windows_Virus_Neshta_2a5a14c8", - "ruleset_id": "0153a96305", - "ruleset_name": "Windows_Virus_Neshta", - "rule_name": "Windows_Virus_Neshta_2a5a14c8", - "source": "https://github.com/elastic/protections-artifacts" - }, - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": { - "id": "0023c73876|AutoIT_Compiled", - "ruleset_id": "0023c73876", - "ruleset_name": "AutoIT", - "rule_name": "AutoIT_Compiled", - "source": "https://github.com/bartblaze/Yara-rules" - }, - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": { - "id": "00c291ca7f|INDICATOR_EXE_Packed_VMProtect", - "ruleset_id": "00c291ca7f", - "ruleset_name": "indicator_packed", - "rule_name": "INDICATOR_EXE_Packed_VMProtect", - "source": "https://github.com/ditekshen/detection" - }, - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": { - "id": "000c8f1d6e|SUSP_Imphash_Mar23_3", - "ruleset_id": "000c8f1d6e", - "ruleset_name": "gen_imphash_detection", - "rule_name": "SUSP_Imphash_Mar23_3", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "00b6c50803|UPX", - "ruleset_id": "00b6c50803", - "ruleset_name": "UPX", - "rule_name": "UPX", - "source": "https://github.com/kevoreilly/CAPEv2" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "embedded_domains": [ - { - "value": "bigblog.at", - "count": 35, - "total_related": 1050, - "prevalence": 0.03333333333333333 - }, - { - "value": "lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion", - "count": 35, - "total_related": 1517, - "prevalence": 0.023071852340145024 - }, - { - "value": "tox.chat", - "count": 35, - "total_related": 20562, - "prevalence": 0.0017021690497033362 - }, - { - "value": "lockbitks2tvnmwk.onion", - "count": 28, - "total_related": 434, - "prevalence": 0.06451612903225806 - }, - { - "value": "tb-manual.torproject.org", - "count": 28, - "total_related": 4349, - "prevalence": 0.0064382616693492755 - }, - { - "value": "bridges.torproject.org", - "count": 28, - "total_related": 23552, - "prevalence": 0.001188858695652174 - }, - { - "value": "lockbit-decryptor.com", - "count": 16, - "total_related": 122, - "prevalence": 0.13114754098360656 - }, - { - "value": "lockbit-decryptor.top", - "count": 12, - "total_related": 301, - "prevalence": 0.03986710963455149 - }, - { - "value": "decryptor.com", - "count": 9, - "total_related": 30, - "prevalence": 0.3 - }, - { - "value": "a.run", - "count": 9, - "total_related": 47210, - "prevalence": 0.00019063757678457953 - }, - { - "value": "boxedapp.com", - "count": 2, - "total_related": 27070, - "prevalence": 7.388252678241596e-5 - }, - { - "value": "ipwho.is", - "count": 1, - "total_related": 29919, - "prevalence": 3.34235769912096e-5 - }, - { - "value": "proton.me", - "count": 1, - "total_related": 60967, - "prevalence": 1.640231600702019e-5 - }, - { - "value": "torproject.org", - "count": 28, - "total_related": 100000, - "prevalence": 0.00028 - }, - { - "value": "www.torproject.org", - "count": 28, - "total_related": 100000, - "prevalence": 0.00028 - }, - { - "value": "bzip.org", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "gcc.gnu.org", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "gnu.org", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "autoitscript.com", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "d.symcb.com", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "github.com", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "s.symcb.com", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "schemas.xmlsoap.org", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "sourceware.org", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "symcb.com", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "ts-aia.ws.symantec.com", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "ts-crl.ws.symantec.com", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "ws.symantec.com", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "xmlsoap.org", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "api.ipify.org", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "appsyndication.org", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "cacerts.digicert.com", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "ccsca2021.crl.certum.pl", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "certum.pl", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "comodoca.com", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "crl.certum.pl", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "crl.comodoca.com", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "crl.sectigo.com", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "crl3.digicert.com", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "crl4.digicert.com", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "crt.sectigo.com", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "digicert.com", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "gmail.com", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "repository.certum.pl", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "sectigo.com", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "stackoverflow.com", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "www.certum.pl", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "www.digicert.com", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "embedded_ips": [ - { - "value": "1::2", - "count": 2, - "total_related": 19802, - "prevalence": 0.000100999899000101 - }, - { - "value": "24.0.0.22", - "count": 2, - "total_related": 44697, - "prevalence": 4.474573237577466e-5 - }, - { - "value": "72.45.24.0", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "21.9.0.0", - "count": 1, - "total_related": 9075, - "prevalence": 0.00011019283746556474 - }, - { - "value": "17.10.0.0", - "count": 1, - "total_related": 39714, - "prevalence": 2.5180037266455153e-5 - }, - { - "value": "17.7.0.0", - "count": 1, - "total_related": 46808, - "prevalence": 2.136386942403008e-5 - }, - { - "value": "0.0.0.0", - "count": 16, - "total_related": 100000, - "prevalence": 0.00016 - }, - { - "value": "123.45.67.89", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "24.0.0.1", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "15.0.0.0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "15.8.0.0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "16.0.0.0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "16.10.0.0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "17.0.0.0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "embedded_urls": [ - { - "value": "https://bigblog.at/", - "count": 39, - "total_related": 1629, - "prevalence": 0.040241796200345424 - }, - { - "value": "http://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion/", - "count": 42, - "total_related": 3032, - "prevalence": 0.02779036005024787 - }, - { - "value": "https://tox.chat/download.html", - "count": 37, - "total_related": 20004, - "prevalence": 0.002747472580915143 - }, - { - "value": "http://lockbitks2tvnmwk.onion/?12345678911234567891123456789112", - "count": 28, - "total_related": 132, - "prevalence": 0.21212121212121213 - }, - { - "value": "http://lockbitks2tvnmwk.onion/", - "count": 28, - "total_related": 325, - "prevalence": 0.08615384615384615 - }, - { - "value": "https://tb-manual.torproject.org/about", - "count": 28, - "total_related": 563, - "prevalence": 0.0497335701598579 - }, - { - "value": "https://bridges.torproject.org/", - "count": 28, - "total_related": 3490, - "prevalence": 0.008022922636103151 - }, - { - "value": "https://www.torproject.org/", - "count": 33, - "total_related": 125971, - "prevalence": 0.0004523028927186759 - }, - { - "value": "http://lockbit-decryptor.com/?12345678911234567891123456789112", - "count": 16, - "total_related": 34, - "prevalence": 0.47058823529411764 - }, - { - "value": "http://lockbit-decryptor.com/", - "count": 16, - "total_related": 48, - "prevalence": 0.3333333333333333 - }, - { - "value": "http://lockbit-decryptor.top/?12345678911234567891123456789112", - "count": 12, - "total_related": 149, - "prevalence": 0.08053691275167785 - }, - { - "value": "http://lockbit-decryptor.top/", - "count": 12, - "total_related": 164, - "prevalence": 0.07317073170731707 - }, - { - "value": "http://boxedapp.com/boxedapppacker/order.html", - "count": 2, - "total_related": 9216, - "prevalence": 0.00021701388888888888 - }, - { - "value": "http://[1::2]/wsman", - "count": 2, - "total_related": 19802, - "prevalence": 0.000100999899000101 - }, - { - "value": "http://boxedapp.com/boxedappsdk/order.html", - "count": 2, - "total_related": 24952, - "prevalence": 8.01538954793203e-5 - }, - { - "value": "https://github.com/grosesch/ibra/raw/refs/heads/main/chinainstal.exe", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "https://stackoverflow.com/q/14436606/23354", - "count": 1, - "total_related": 65105, - "prevalence": 1.535980339451655e-5 - }, - { - "value": "https://stackoverflow.com/q/11564914/23354", - "count": 1, - "total_related": 77004, - "prevalence": 1.2986338372032622e-5 - }, - { - "value": "https://stackoverflow.com/q/2152978/23354", - "count": 1, - "total_related": 80362, - "prevalence": 1.2443692292376994e-5 - }, - { - "value": "https://gcc.gnu.org/bugs/", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "http://s.symcb.com/universal-root.crl0", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "http://ts-aia.ws.symantec.com/sha256-tss-ca.cer0", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "http://ts-crl.ws.symantec.com/sha256-tss-ca.crl0", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "https://d.symcb.com/cps0%25", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "https://d.symcb.com/rpa0", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "http://appsyndication.org/2006/appsyn", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "http://cacerts.digicert.com/DigiCertAssuredIDCodeSigningCA-1.crt0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "http://cacerts.digicert.com/DigiCertAssuredIDRootCA.crt0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "http://cacerts.digicert.com/DigiCertAssuredIDRootCA.crt0E", - "count": 2, - "total_related": 197357, - "prevalence": 2.0271475086537178e-5 - }, - { - "value": "http://cacerts.digicert.com/DigiCertTrustedG4CodeSigningRSA4096SHA3842021CA1.crt0", - "count": 2, - "total_related": 148778, - "prevalence": 3.0501045553323217e-5 - }, - { - "value": "http://cacerts.digicert.com/DigiCertTrustedG4RSA4096SHA256TimeStampingCA.crt0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "http://cacerts.digicert.com/DigiCertTrustedRootG4.crt0C", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "http://ccsca2021.crl.certum.pl/ccsca2021.crl0s", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "http://crl.certum.pl/ctnca.crl0k", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "http://crl.certum.pl/ctnca2.crl0l", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "http://crl.certum.pl/ctsca2021.crl0o", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "http://crl.comodoca.com/AAACertificateServices.crl04", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "http://crl.sectigo.com/SectigoPublicCodeSigningCAEVR36.crl0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "http://crl.sectigo.com/SectigoPublicCodeSigningRootR46.crl0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "http://crl3.digicert.com/DigiCertAssuredIDRootCA.crl0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "http://crl3.digicert.com/DigiCertTrustedG4CodeSigningRSA4096SHA3842021CA1.crl0S", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "http://crl3.digicert.com/DigiCertTrustedG4RSA4096SHA256TimeStampingCA.crl0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "http://crl3.digicert.com/DigiCertTrustedRootG4.crl0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "http://crl3.digicert.com/assured-cs-g1.crl00", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "http://crl4.digicert.com/DigiCertAssuredIDRootCA.crl0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "http://crl4.digicert.com/DigiCertTrustedG4CodeSigningRSA4096SHA3842021CA1.crl0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "http://crl4.digicert.com/DigiCertTrustedG4CodeSigningRSA4096SHA3842021CA1.crl0=", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "http://crl4.digicert.com/assured-cs-g1.crl0L", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "http://crt.sectigo.com/SectigoPublicCodeSigningCAEVR36.crt0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "http://crt.sectigo.com/SectigoPublicCodeSigningRootR46.p7c0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "http://repository.certum.pl/ccsca2021.cer0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "http://repository.certum.pl/ctnca.cer09", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "http://repository.certum.pl/ctnca2.cer09", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "http://repository.certum.pl/ctsca2021.cer0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "http://www.certum.pl/CPS0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "http://www.digicert.com/CPS0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "http://www.digicert.com/ssl-cps-repository.htm0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "https://github.com/dart-lang/sdk/blob/master/runtime/docs/compiler/aot/entry_point_pragma.md", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "https://sectigo.com/CPS0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "https://www.certum.pl/CPS0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "https://www.digicert.com/CPS0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "https://pastebin.com/raw/Jv1P4zmq", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://185.215.113.59/Dy5h4kus/index.php", - "count": 1, - "total_related": 221, - "prevalence": 0.004524886877828055 - }, - { - "value": "http://github.org/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://github.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://test.white-datasheet.com/", - "count": 1, - "total_related": 19, - "prevalence": 0.05263157894736842 - }, - { - "value": "http://test.white-datasheet.com/", - "count": 1, - "total_related": 20, - "prevalence": 0.05 - }, - { - "value": "https://decoding.at/", - "count": 4, - "total_related": 565, - "prevalence": 0.007079646017699115 - }, - { - "value": "http://lockbitsap2oaqhcun3syvbqt6n5nzt7fqosc6jdlmsfleu3ka4k2did.onion/", - "count": 4, - "total_related": 578, - "prevalence": 0.006920415224913495 - }, - { - "value": "https://twitter.com/hashtag/lockbit?f=live", - "count": 4, - "total_related": 664, - "prevalence": 0.006024096385542169 - }, - { - "value": "http://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly/", - "count": 3, - "total_related": 478, - "prevalence": 0.006276150627615063 - }, - { - "value": "http://lockbitsup4yezcd5enk5unncx3zcy7kw6wllyqmiyhvanjj352jayid.onion/", - "count": 3, - "total_related": 577, - "prevalence": 0.005199306759098787 - }, - { - "value": "http://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly/", - "count": 3, - "total_related": 688, - "prevalence": 0.00436046511627907 - }, - { - "value": "http://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion/", - "count": 3, - "total_related": 702, - "prevalence": 0.004273504273504274 - }, - { - "value": "http://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion/", - "count": 3, - "total_related": 921, - "prevalence": 0.003257328990228013 - }, - { - "value": "http://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion/", - "count": 3, - "total_related": 926, - "prevalence": 0.0032397408207343412 - }, - { - "value": "http://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion/", - "count": 3, - "total_related": 940, - "prevalence": 0.0031914893617021275 - }, - { - "value": "https://www.sphinx-doc.org/", - "count": 3, - "total_related": 9009, - "prevalence": 0.000333000333000333 - }, - { - "value": "https://github.com/python/cpython/blob/main/Doc/library/tokenize.rst", - "count": 2, - "total_related": 32, - "prevalence": 0.0625 - }, - { - "value": "https://github.com/python/cpython/tree/3.11/Lib/asyncio/protocols.py", - "count": 2, - "total_related": 33, - "prevalence": 0.06060606060606061 - }, - { - "value": "https://www.activestate.com/activepython/", - "count": 2, - "total_related": 33, - "prevalence": 0.06060606060606061 - }, - { - "value": "https://manpages.debian.org/vsnprintf(3", - "count": 2, - "total_related": 40, - "prevalence": 0.05 - }, - { - "value": "https://ncoghlan-devs-python-notes.readthedocs.io/en/latest/python3/questions_and_answers.html", - "count": 2, - "total_related": 54, - "prevalence": 0.037037037037037035 - }, - { - "value": "https://peps.python.org/pep-0397/", - "count": 2, - "total_related": 66, - "prevalence": 0.030303030303030304 - }, - { - "value": "https://pypi.org/project/pylint", - "count": 2, - "total_related": 70, - "prevalence": 0.02857142857142857 - }, - { - "value": "https://www.boddie.org.uk/python/COM.html", - "count": 2, - "total_related": 89, - "prevalence": 0.02247191011235955 - }, - { - "value": "https://www.nuget.org/packages/pythonx86", - "count": 2, - "total_related": 91, - "prevalence": 0.02197802197802198 - }, - { - "value": "https://github.com/python/cpython/blob/main/Doc/library/queue.rst", - "count": 2, - "total_related": 102, - "prevalence": 0.0196078431372549 - }, - { - "value": "https://tox.chat/download.htmlUsing", - "count": 2, - "total_related": 116, - "prevalence": 0.017241379310344827 - }, - { - "value": "https://peps.python.org/pep-0647/", - "count": 2, - "total_related": 132, - "prevalence": 0.015151515151515152 - }, - { - "value": "http://lockbit435xk3ki62yun7z5nhwz6jyjdp2c64j5vge536if2eny3gtid.onion/", - "count": 2, - "total_related": 149, - "prevalence": 0.013422818791946308 - }, - { - "value": "http://lockbit3g3ohd3katajf6zaehxz4h4cnhmz5t735zpltywhwpc6oy3id.onion/", - "count": 2, - "total_related": 150, - "prevalence": 0.013333333333333334 - }, - { - "value": "http://lockbit3olp7oetlc4tl5zydnoluphh7fvdt5oa6arcp2757r7xkutid.onion/", - "count": 2, - "total_related": 150, - "prevalence": 0.013333333333333334 - }, - { - "value": "http://lockbit4lahhluquhoka3t4spqym2m3dhe66d6lr337glmnlgg2nndad.onion/", - "count": 2, - "total_related": 150, - "prevalence": 0.013333333333333334 - }, - { - "value": "http://lockbit7ouvrsdgtojeoj5hvu6bljqtghitekwpdy3b6y62ixtsu5jqd.onion/", - "count": 2, - "total_related": 150, - "prevalence": 0.013333333333333334 - }, - { - "value": "http://lockbit6knrauo3qafoksvl742vieqbujxw7rd6ofzdtapjb4rrawqad.onion/", - "count": 2, - "total_related": 152, - "prevalence": 0.013157894736842105 - }, - { - "value": "https://mozillacla.ampxdirect.com/wayfair?sub1=wayfair&sub2=us&custom-data=3433&ctag=319104999us3433", - "count": 2, - "total_related": 152, - "prevalence": 0.013157894736842105 - }, - { - "value": "https://mozillacla.ampxdirect.com/wayfair?sub1=wayfair&sub2=us&custom-data=3447&ctag=319104999us3447", - "count": 2, - "total_related": 156, - "prevalence": 0.01282051282051282 - }, - { - "value": "http://lockbit3753ekiocyo5epmpy6klmejchjtzddoekjlnt6mu3qh4de2id.onion/", - "count": 2, - "total_related": 158, - "prevalence": 0.012658227848101266 - }, - { - "value": "https://peps.python.org/pep-3132/", - "count": 2, - "total_related": 209, - "prevalence": 0.009569377990430622 - }, - { - "value": "https://datatracker.ietf.org/doc/html/rfc2104.html", - "count": 2, - "total_related": 256, - "prevalence": 0.0078125 - }, - { - "value": "https://www.rakuten.com/signup_sem.htm?merchant_id=10794?src=admarketplace-Search&eeid=17879&utm_cha", - "count": 2, - "total_related": 283, - "prevalence": 0.007067137809187279 - }, - { - "value": "https://peps.python.org/pep-0644/", - "count": 2, - "total_related": 293, - "prevalence": 0.006825938566552901 - }, - { - "value": "http://lockbitsupuhswh4izvoucoxsbnotkmgq6durg7kficg6u33zfvq3oyd.onion/", - "count": 2, - "total_related": 308, - "prevalence": 0.006493506493506494 - }, - { - "value": "https://peps.python.org/pep-0528/", - "count": 2, - "total_related": 314, - "prevalence": 0.006369426751592357 - }, - { - "value": "https://peps.python.org/pep-0636/", - "count": 2, - "total_related": 327, - "prevalence": 0.0061162079510703364 - }, - { - "value": "http://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly/", - "count": 2, - "total_related": 347, - "prevalence": 0.005763688760806916 - }, - { - "value": "https://peps.python.org/pep-0451/", - "count": 2, - "total_related": 385, - "prevalence": 0.005194805194805195 - }, - { - "value": "https://www.python.org/downloads/source/", - "count": 2, - "total_related": 401, - "prevalence": 0.004987531172069825 - }, - { - "value": "https://mozillacla.ampxdirect.com/wayfair?sub1=wayfair&sub2=us&custom-data=3446&ctag=319104999us3446", - "count": 2, - "total_related": 461, - "prevalence": 0.004338394793926247 - }, - { - "value": "https://peps.python.org/pep-0529/", - "count": 2, - "total_related": 515, - "prevalence": 0.003883495145631068 - }, - { - "value": "http://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion/", - "count": 2, - "total_related": 529, - "prevalence": 0.003780718336483932 - }, - { - "value": "http://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion/", - "count": 2, - "total_related": 530, - "prevalence": 0.0037735849056603774 - }, - { - "value": "http://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion/", - "count": 2, - "total_related": 532, - "prevalence": 0.0037593984962406013 - }, - { - "value": "http://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion/", - "count": 2, - "total_related": 534, - "prevalence": 0.003745318352059925 - }, - { - "value": "http://lockbitapt.uz/", - "count": 2, - "total_related": 540, - "prevalence": 0.003703703703703704 - }, - { - "value": "https://peps.python.org/pep-0634/", - "count": 2, - "total_related": 609, - "prevalence": 0.003284072249589491 - }, - { - "value": "https://peps.python.org/pep-0613/", - "count": 2, - "total_related": 704, - "prevalence": 0.002840909090909091 - }, - { - "value": "https://peps.python.org/pep-0612/", - "count": 2, - "total_related": 1145, - "prevalence": 0.0017467248908296944 - }, - { - "value": "https://peps.python.org/pep-0526/", - "count": 2, - "total_related": 1149, - "prevalence": 0.0017406440382941688 - }, - { - "value": "https://bugs.python.org/issue?&", - "count": 2, - "total_related": 1207, - "prevalence": 0.0016570008285004142 - }, - { - "value": "http://testca.pythontest.net/testca/revocation.crl", - "count": 2, - "total_related": 1258, - "prevalence": 0.001589825119236884 - }, - { - "value": "https://setuptools.readthedocs.io/en/latest/setuptools.html", - "count": 2, - "total_related": 1729, - "prevalence": 0.001156737998843262 - }, - { - "value": "https://github.com/pypa/wheel/pull/289", - "count": 2, - "total_related": 2151, - "prevalence": 0.0009298000929800093 - }, - { - "value": "https://github.com/python/typing/issues/508", - "count": 2, - "total_related": 3107, - "prevalence": 0.000643707756678468 - }, - { - "value": "https://peps.python.org/pep-0484/", - "count": 2, - "total_related": 5579, - "prevalence": 0.000358487184083169 - }, - { - "value": "http://bugs.python.org/issue20541", - "count": 1, - "total_related": 54, - "prevalence": 0.018518518518518517 - }, - { - "value": "http://aquamacs.org/", - "count": 1, - "total_related": 60, - "prevalence": 0.016666666666666666 - }, - { - "value": "http://bugs.python.org/issue10340", - "count": 1, - "total_related": 95, - "prevalence": 0.010526315789473684 - }, - { - "value": "http://buildbot.python.org/all/xmlrpc/", - "count": 1, - "total_related": 98, - "prevalence": 0.01020408163265306 - }, - { - "value": "http://bugs.python.org/review/23491/diff/13982/Lib/zipapp.py", - "count": 1, - "total_related": 103, - "prevalence": 0.009708737864077669 - }, - { - "value": "http://127.0.0.1/spammity/sp%EF%BF%BDm", - "count": 1, - "total_related": 105, - "prevalence": 0.009523809523809525 - }, - { - "value": "http://bugs.python.org/issue19728", - "count": 1, - "total_related": 108, - "prevalence": 0.009259259259259259 - }, - { - "value": "http://127.0.0.1/spammity/spam?s%EF%BF%BDy=ni", - "count": 1, - "total_related": 112, - "prevalence": 0.008928571428571428 - }, - { - "value": "http://127.0.0.1/spammity/spam", - "count": 1, - "total_related": 118, - "prevalence": 0.00847457627118644 - }, - { - "value": "http://bugs.python.org/issue6289", - "count": 1, - "total_related": 127, - "prevalence": 0.007874015748031496 - }, - { - "value": "http://127.0.0.1/spammity/spam;ham", - "count": 1, - "total_related": 128, - "prevalence": 0.0078125 - }, - { - "value": "http://bugs.python.org/issue20819", - "count": 1, - "total_related": 138, - "prevalence": 0.007246376811594203 - }, - { - "value": "http://127.0.0.1/spammity/spam?say=ni", - "count": 1, - "total_related": 188, - "prevalence": 0.005319148936170213 - }, - { - "value": "http://127.0.0.1/spam", - "count": 1, - "total_related": 202, - "prevalence": 0.0049504950495049506 - }, - { - "value": "http://127.0.0.1/spammity/spam;cookie=1234", - "count": 1, - "total_related": 228, - "prevalence": 0.0043859649122807015 - }, - { - "value": "http://bugs.python.org/issue23310", - "count": 1, - "total_related": 228, - "prevalence": 0.0043859649122807015 - }, - { - "value": "http://127.0.0.1/sp%EF%BF%BDm", - "count": 1, - "total_related": 231, - "prevalence": 0.004329004329004329 - }, - { - "value": "http://bugs.python.org/issue25390", - "count": 1, - "total_related": 312, - "prevalence": 0.003205128205128205 - }, - { - "value": "http://bugs.python.org/issue18081).", - "count": 1, - "total_related": 371, - "prevalence": 0.0026954177897574125 - }, - { - "value": "http://bugs.python.org/issue18318).", - "count": 1, - "total_related": 372, - "prevalence": 0.002688172043010753 - }, - { - "value": "http://bugs.python.org/issue20167", - "count": 1, - "total_related": 441, - "prevalence": 0.0022675736961451248 - }, - { - "value": "http://bugs.python.org/issue19734", - "count": 1, - "total_related": 717, - "prevalence": 0.001394700139470014 - }, - { - "value": "http://bugs.python.org/issue1339007", - "count": 1, - "total_related": 821, - "prevalence": 0.001218026796589525 - }, - { - "value": "http://bugs.python.org/issue7833", - "count": 1, - "total_related": 826, - "prevalence": 0.0012106537530266344 - }, - { - "value": "http://bugs.python.org/issue20053", - "count": 1, - "total_related": 929, - "prevalence": 0.001076426264800861 - }, - { - "value": "http://bugs.python.org/issue28539", - "count": 1, - "total_related": 1153, - "prevalence": 0.0008673026886383347 - }, - { - "value": "http://bugs.python.org/issue22107", - "count": 1, - "total_related": 1347, - "prevalence": 0.0007423904974016332 - }, - { - "value": "http://cacerts.darkmatter.ae/qvrca2g3.crt0", - "count": 1, - "total_related": 2094, - "prevalence": 0.0004775549188156638 - }, - { - "value": "http://autorite.certigna.fr/certigna.der06", - "count": 1, - "total_related": 2156, - "prevalence": 0.00046382189239332097 - }, - { - "value": "http://aia1.netlock.hu/index.cgi?ca=gold04", - "count": 1, - "total_related": 4212, - "prevalence": 0.00023741690408357076 - }, - { - "value": "http://bugs.python.org/issue10272", - "count": 1, - "total_related": 4778, - "prevalence": 0.0002092925910422771 - }, - { - "value": "http://127.0.0.1:8000/", - "count": 1, - "total_related": 12447, - "prevalence": 8.034064433196755e-5 - }, - { - "value": "https://github.com/pypa/packaging", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "https://www.python.org/", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "http://127.0.0.1/", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "mutexes_created": [ - { - "value": "Global\\{649F4E29-16CB-DD42-8922-9FFF0592856B}", - "count": 30, - "total_related": 514, - "prevalence": 0.058365758754863814 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Global\\{649F4E29-16CB-DD42-8922-9FFF0592856B}", - "count": 14, - "total_related": 586, - "prevalence": 0.023890784982935155 - }, - { - "value": "Global\\{BEF590BE-11A6-442A-A85B-656C1081E04C}", - "count": 13, - "total_related": 722, - "prevalence": 0.018005540166204988 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Global\\{BEF590BE-11A6-442A-A85B-656C1081E04C}", - "count": 11, - "total_related": 432, - "prevalence": 0.02546296296296296 - }, - { - "value": "Global\\C::Users:admin:AppData:Local:Microsoft:Windows:Explorer:thumbcache_idx.db!ThumbnailCacheInit", - "count": 4, - "total_related": 83833, - "prevalence": 4.771390741116267e-5 - }, - { - "value": "Global\\C::Users:admin:AppData:Local:Microsoft:Windows:Explorer:thumbcache_sr.db!dfMaintainer", - "count": 4, - "total_related": 83846, - "prevalence": 4.770650955322854e-5 - }, - { - "value": "Global\\C::Users:admin:AppData:Local:Microsoft:Windows:Explorer:thumbcache_1024.db!dfMaintainer", - "count": 4, - "total_related": 83851, - "prevalence": 4.770366483405088e-5 - }, - { - "value": "Global\\C::Users:admin:AppData:Local:Microsoft:Windows:Explorer:thumbcache_256.db!dfMaintainer", - "count": 4, - "total_related": 83860, - "prevalence": 4.769854519437157e-5 - }, - { - "value": "Global\\C::Users:admin:AppData:Local:Microsoft:Windows:Explorer:thumbcache_96.db!dfMaintainer", - "count": 4, - "total_related": 83868, - "prevalence": 4.769399532598846e-5 - }, - { - "value": "Global\\C::Users:admin:AppData:Local:Microsoft:Windows:Explorer:thumbcache_32.db!dfMaintainer", - "count": 4, - "total_related": 83875, - "prevalence": 4.769001490312966e-5 - }, - { - "value": "Global\\C::Users:admin:AppData:Local:Microsoft:Windows:Explorer:thumbcache_idx.db!rwWriterMutex", - "count": 4, - "total_related": 83893, - "prevalence": 4.7679782580191434e-5 - }, - { - "value": "Global\\C::Users:admin:AppData:Local:Microsoft:Windows:Explorer:thumbcache_idx.db!rwReaderRefs", - "count": 4, - "total_related": 89515, - "prevalence": 4.468524828241077e-5 - }, - { - "value": "Global\\835d560ec8e7a8965228e679547bfa44", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "Global\\fa90141b3c1949fd8133d3b971432d86", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Global\\835d560ec8e7a8965228e679547bfa44", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "\\BaseNamedObjects\\{43A8B1A0-43A8-ECAA-A945-5065658150CB}", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\WinSpl64To32Mutex_140f5_0_3000", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "Global\\459cfad1e2519034db83d51629a41372", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Global\\459cfad1e2519034db83d51629a41372", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Global\\f050f591bbcd9ed9ad84d7345922b844", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "Global\\f050f591bbcd9ed9ad84d7345922b844", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "\\BaseNamedObjects\\Local\\SM0:9980:304:WilStaging_02", - "count": 2, - "total_related": 10, - "prevalence": 0.2 - }, - { - "value": "Global\\C::Users:user:AppData:Local:Microsoft:Windows:Explorer:thumbcache_idx.db!11e1394", - "count": 2, - "total_related": 1547, - "prevalence": 0.001292824822236587 - }, - { - "value": "\\BaseNamedObjects\\shell.{210A4BA0-3AEA-1069-A2D9-08002B30309D}", - "count": 2, - "total_related": 9537, - "prevalence": 0.0002097095522701059 - }, - { - "value": "\\BaseNamedObjects\\Global\\userenv: User Profile setup event", - "count": 2, - "total_related": 9761, - "prevalence": 0.00020489703923778303 - }, - { - "value": "Global\\C::Users:Louise:AppData:Local:Microsoft:Windows:Explorer:thumbcache_32.db!dfMaintainer", - "count": 2, - "total_related": 13504, - "prevalence": 0.0001481042654028436 - }, - { - "value": "Global\\C::Users:Louise:AppData:Local:Microsoft:Windows:Explorer:thumbcache_sr.db!dfMaintainer", - "count": 2, - "total_related": 13509, - "prevalence": 0.00014804944851580428 - }, - { - "value": "Global\\C::Users:Louise:AppData:Local:Microsoft:Windows:Explorer:thumbcache_idx.db!ThumbnailCacheInit", - "count": 2, - "total_related": 13510, - "prevalence": 0.00014803849000740192 - }, - { - "value": "Global\\C::Users:Louise:AppData:Local:Microsoft:Windows:Explorer:thumbcache_96.db!dfMaintainer", - "count": 2, - "total_related": 13517, - "prevalence": 0.00014796182584893096 - }, - { - "value": "Global\\C::Users:Louise:AppData:Local:Microsoft:Windows:Explorer:thumbcache_idx.db!rwWriterMutex", - "count": 2, - "total_related": 13522, - "prevalence": 0.00014790711433219938 - }, - { - "value": "Global\\C::Users:Louise:AppData:Local:Microsoft:Windows:Explorer:thumbcache_256.db!dfMaintainer", - "count": 2, - "total_related": 13524, - "prevalence": 0.0001478852410529429 - }, - { - "value": "Global\\C::Users:Louise:AppData:Local:Microsoft:Windows:Explorer:thumbcache_1024.db!dfMaintainer", - "count": 2, - "total_related": 13529, - "prevalence": 0.00014783058614827407 - }, - { - "value": "\\BaseNamedObjects\\CTF.TimListCache.FMPDefaultS-1-5-21-1229272821-842925246-1060284298-1003MUTEX.DefaultS-1-5-21-1229272821-842925246-1060284298-1003", - "count": 2, - "total_related": 14600, - "prevalence": 0.000136986301369863 - }, - { - "value": "\\BaseNamedObjects\\CTF.Asm.MutexDefaultS-1-5-21-1229272821-842925246-1060284298-1003", - "count": 2, - "total_related": 14608, - "prevalence": 0.00013691128148959474 - }, - { - "value": "\\BaseNamedObjects\\CTF.Compart.MutexDefaultS-1-5-21-1229272821-842925246-1060284298-1003", - "count": 2, - "total_related": 14608, - "prevalence": 0.00013691128148959474 - }, - { - "value": "\\BaseNamedObjects\\CTF.LBES.MutexDefaultS-1-5-21-1229272821-842925246-1060284298-1003", - "count": 2, - "total_related": 14608, - "prevalence": 0.00013691128148959474 - }, - { - "value": "\\BaseNamedObjects\\CTF.Layouts.MutexDefaultS-1-5-21-1229272821-842925246-1060284298-1003", - "count": 2, - "total_related": 14608, - "prevalence": 0.00013691128148959474 - }, - { - "value": "\\BaseNamedObjects\\CTF.TMD.MutexDefaultS-1-5-21-1229272821-842925246-1060284298-1003", - "count": 2, - "total_related": 14608, - "prevalence": 0.00013691128148959474 - }, - { - "value": "Global\\C::Users:Louise:AppData:Local:Microsoft:Windows:Explorer:thumbcache_idx.db!rwReaderRefs", - "count": 2, - "total_related": 15666, - "prevalence": 0.00012766500702157538 - }, - { - "value": "\\BaseNamedObjects\\shell.{A48F1A32-A340-11D1-BC6B-00A0C90312E1}", - "count": 2, - "total_related": 17667, - "prevalence": 0.00011320541121865625 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Microsoft.Windows.Health.TestInProduction.RegistryStore.AggregateResults", - "count": 2, - "total_related": 63534, - "prevalence": 3.147920798312714e-5 - }, - { - "value": "Global\\03b84b750e7b0c183e81917fcc29ae2b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\050f89a193c5772acb2862c98214b0ea", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\06eae475f2a1d6c43bd9495734f21346", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\166aa5594b98b69ed102613c64a0b8e2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\1898ae4a37d6450476cba394cefc5417", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\059e209281ada150c0df4a044869e46c", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "Global\\0d90e2a6610da8cb78dd2690e38a276c", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "Global\\0e5c42373d9796bc3c88f617245e1bf3", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "Global\\1ab7e49e7ef7a4a9576df1840aae1341", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "Global\\0c59d3d18c5fd19369e5de86ac7ebb90", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "Global\\0e3ccf3669de0a6226aa862ef0407af7", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "D1040AAE2C1B", - "count": 1, - "total_related": 423, - "prevalence": 0.002364066193853428 - }, - { - "value": "955BC4895D65", - "count": 1, - "total_related": 541, - "prevalence": 0.0018484288354898336 - }, - { - "value": "Local\\RstrMgr-3887CAB8-533F-4C85-B0DC-3E5639F8D511-Session0000", - "count": 42, - "total_related": 100000, - "prevalence": 0.00042 - }, - { - "value": "Local\\RstrMgr3887CAB8-533F-4C85-B0DC-3E5639F8D511", - "count": 40, - "total_related": 100000, - "prevalence": 0.0004 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\RstrMgr-3887CAB8-533F-4C85-B0DC-3E5639F8D511-Session0000", - "count": 39, - "total_related": 100000, - "prevalence": 0.00039 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\RstrMgr3887CAB8-533F-4C85-B0DC-3E5639F8D511", - "count": 39, - "total_related": 100000, - "prevalence": 0.00039 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Global\\SyncRootManager", - "count": 37, - "total_related": 100000, - "prevalence": 0.00037 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\ZonesCacheCounterMutex", - "count": 29, - "total_related": 100000, - "prevalence": 0.00029 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\ZonesLockedCacheCounterMutex", - "count": 29, - "total_related": 100000, - "prevalence": 0.00029 - }, - { - "value": "Local\\ZonesCacheCounterMutex", - "count": 19, - "total_related": 100000, - "prevalence": 0.00019 - }, - { - "value": "Local\\ZonesLockedCacheCounterMutex", - "count": 19, - "total_related": 100000, - "prevalence": 0.00019 - }, - { - "value": "CTF.Asm.MutexDefaultS-1-5-21-1482476501-1645522239-1417001333-500", - "count": 17, - "total_related": 100000, - "prevalence": 0.00017 - }, - { - "value": "CTF.Compart.MutexDefaultS-1-5-21-1482476501-1645522239-1417001333-500", - "count": 17, - "total_related": 100000, - "prevalence": 0.00017 - }, - { - "value": "CTF.LBES.MutexDefaultS-1-5-21-1482476501-1645522239-1417001333-500", - "count": 17, - "total_related": 100000, - "prevalence": 0.00017 - }, - { - "value": "CTF.Layouts.MutexDefaultS-1-5-21-1482476501-1645522239-1417001333-500", - "count": 17, - "total_related": 100000, - "prevalence": 0.00017 - }, - { - "value": "CTF.TMD.MutexDefaultS-1-5-21-1482476501-1645522239-1417001333-500", - "count": 17, - "total_related": 100000, - "prevalence": 0.00017 - }, - { - "value": "CTF.TimListCache.FMPDefaultS-1-5-21-1482476501-1645522239-1417001333-500MUTEX.DefaultS-1-5-21-1482476501-1645522239-1417001333-500", - "count": 16, - "total_related": 100000, - "prevalence": 0.00016 - }, - { - "value": "Global\\SetupLog", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "Global\\WdsSetupLogInit", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "Global\\OneSettingQueryMutex+compat+encapsulation", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": "Global\\G{C4F406E5-F024-4e3f-89A7-D5AB7663C3CD}", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "Local\\ZoneAttributeCacheCounterMutex", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "DefaultTabtip-MainUI", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "Global\\AmiProviderMutex_InventoryApplicationFile", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "Global\\C::Users:user:AppData:Local:Microsoft:Windows:Explorer:thumbcache_1024.db!dfMaintainer", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "Global\\C::Users:user:AppData:Local:Microsoft:Windows:Explorer:thumbcache_256.db!dfMaintainer", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "Global\\C::Users:user:AppData:Local:Microsoft:Windows:Explorer:thumbcache_32.db!dfMaintainer", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "Global\\C::Users:user:AppData:Local:Microsoft:Windows:Explorer:thumbcache_96.db!dfMaintainer", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "Global\\C::Users:user:AppData:Local:Microsoft:Windows:Explorer:thumbcache_idx.db!ThumbnailCacheInit", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "Global\\C::Users:user:AppData:Local:Microsoft:Windows:Explorer:thumbcache_idx.db!rwReaderRefs", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "Global\\C::Users:user:AppData:Local:Microsoft:Windows:Explorer:thumbcache_idx.db!rwWriterMutex", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "Global\\C::Users:user:AppData:Local:Microsoft:Windows:Explorer:thumbcache_sr.db!dfMaintainer", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "Local\\WininetProxyRegistryMutex", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "Local\\WininetStartupMutex", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "Local\\_!MSFTHISTORY!_", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "NULL", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\SessionImmersiveColorMutex", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "Groove:PathMutex:h1kwmeaFCOs5YDt3Ur7pBe3iRlE=", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "Local\\WininetConnectionMutex", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "Local\\ZonesCounterMutex", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\ZoneAttributeCacheCounterMutex", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "Local\\c:!users!admin!appdata!local!microsoft!windows!history!history.ie5!", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "Local\\c:!users!admin!appdata!local!microsoft!windows!temporary internet files!content.ie5!", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "Local\\c:!users!admin!appdata!roaming!microsoft!windows!cookies!", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\ZonesCounterMutex", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "!IECompat!Mutex", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "MutexPolesskayaGlush*.*\u0090svchost.com\u0090exefile\\shell\\open\\command\u2039\u00c0 \"%1\" %*\u0153\u2018@", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "RasPbFile", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - } - ], - "mutexes_opened": [ - { - "value": "Global\\{649F4E29-16CB-DD42-8922-9FFF0592856B}", - "count": 79, - "total_related": 637, - "prevalence": 0.12401883830455258 - }, - { - "value": "Global\\{BEF590BE-11A6-442A-A85B-656C1081E04C}", - "count": 28, - "total_related": 729, - "prevalence": 0.038408779149519894 - }, - { - "value": "\\KernelObjects\\BcdSyncMutant", - "count": 7, - "total_related": 12765, - "prevalence": 0.0005483744614179397 - }, - { - "value": "Global\\f050f591bbcd9ed9ad84d7345922b844", - "count": 5, - "total_related": 6, - "prevalence": 0.8333333333333334 - }, - { - "value": "Global\\2cae82bd1366f4e0fdc7a9a7c12e2a6b", - "count": 4, - "total_related": 8, - "prevalence": 0.5 - }, - { - "value": "Global\\7ace23bb6c0db6d1eb1a0c49cf37d447", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "Global\\459cfad1e2519034db83d51629a41372", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "Global\\3c327a3c730976ff4c65a77122158495", - "count": 3, - "total_related": 6, - "prevalence": 0.5 - }, - { - "value": "Global\\7c21db26ea4232f501229ca27db16a48", - "count": 3, - "total_related": 13, - "prevalence": 0.23076923076923078 - }, - { - "value": "Global\\7f7737f71a85e7f2185210ed3eeda4c4", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "Global\\835d560ec8e7a8965228e679547bfa44", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "Global\\afc200360976321f509d43e70300f12a", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "Global\\fa90141b3c1949fd8133d3b971432d86", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "Global\\548aa41141e72339cf9daac6d40189a7", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "Global\\8a41eed9f9a609f3b5f231fda1525a36", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "Global\\fd1a98b18d2c3e7b533671cfce0cf4fe", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "Global\\f62e0bbb829f0693ca3f1e7fd5ce88c5", - "count": 2, - "total_related": 13, - "prevalence": 0.15384615384615385 - }, - { - "value": "MutexPolesskayaGlush*.*\u0090svchost.com\u0090\u00b5\u00e1\u00d9n\u00ca\u0012X\u00fd\u00b1\u0015.\u009at\u00dbN\u00f3\u00c4\u009et\u0093\u00ee\u00e2h\u00ee\u0011\u0084\u008b\u00c0`\u0088\u00b2\u00f2T\u00f85\u00fd\u009c\u0091@", - "count": 2, - "total_related": 294, - "prevalence": 0.006802721088435374 - }, - { - "value": "MutexPolesskayaGlush*.*\u0090svchost.com\u0090exefile\\shell\\open\\command\u008b\u00c0 \"%1\" %*\u009c\u0091@", - "count": 2, - "total_related": 782, - "prevalence": 0.0025575447570332483 - }, - { - "value": "044527C95AAB", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\009d89933e9ce2fc20492ba162010c0c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\03b84b750e7b0c183e81917fcc29ae2b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\050f89a193c5772acb2862c98214b0ea", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\06eae475f2a1d6c43bd9495734f21346", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\09c0016691ac380ce6834bdce356edf3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\0b32ca9dec339d33dd1bd5908acf4ce2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\0eb7466dc7a3da96da1782e96a44b677", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\10b5e1850ed6703d7665a1adf3e368f4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\13e16f1919bd1705b1753e0cf7a0dd9a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\166aa5594b98b69ed102613c64a0b8e2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\182dc0e041f41322f0b2b49918aa5c23", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\1898ae4a37d6450476cba394cefc5417", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\1ac66e159467457ac32aae05c78a7ba3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\1b26a4134219806e9f3a590666950215", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\1be38b5a23d8e6013a069da5665bd2c4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\1c66a1c7ee5f27a48010a6f5790bea9b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\1fa4e784150868fd2cd630a295d5a0e5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\20f009041ccc70effab99457e5ffde5d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\237e949e4487156ad806efa6f491f45d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\2a7a0ac603519dbb920a5629c6c90c38", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\2ae6b975f4f018240539060ca39404b6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\2b22789be73f416d4931ca4725ebf1a8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\2cb777ea76baae3b077dc1818c5dd3a4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\2dc8d78d897f159fcbf630af928af189", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\3620d3a865322698b9aafc9c1d227fe9", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\391396896a2cb3a40a83c4fbbe4675f3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\39f319ebdc5b64a80341e0dc262479ac", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\3c906140c89223256df8f42fd1d64999", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\3d7f9a4efd5899e239b6254acf883f59", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\42617d8bffcad874d60a1b4e7c5e04f7", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\459bf63110ce888f28d3fd21adc5b730", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\4db24cbb565899cdd8b265d3b98958a2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\4fc4524516079bf293781b0f855e616c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\5047e33c3c6def76827ed2004f2e5c22", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\059e209281ada150c0df4a044869e46c", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "Global\\0d90e2a6610da8cb78dd2690e38a276c", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "Global\\0e5c42373d9796bc3c88f617245e1bf3", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "Global\\0eaf76902f3015259698a1abfd12ef36", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "Global\\1ab7e49e7ef7a4a9576df1840aae1341", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "Global\\273066c1690c95bc6fe923fd47d714f7", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "Global\\2d04f7a63bb59d999f9e1a1b7d59cd7c", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "Global\\32cea76f43d615f918b93198b6309dd9", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "Global\\4ef62a5292cb9e97e9d8195108b7ac42", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "Global\\2d87d2149e7f73dd7b6b84daebbb7b1b", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "Global\\437c6986173ae963e24b3eba0a473ec2", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "Global\\0c59d3d18c5fd19369e5de86ac7ebb90", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "Global\\0f6796e2cb740ff935ea61fc554b56e5", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "Global\\4c3e3cb8c6ed0804dcd51ba2638722cd", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "Global\\0e3ccf3669de0a6226aa862ef0407af7", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "006700e5a2ab05704bbb0c589b88924d", - "count": 1, - "total_related": 16570, - "prevalence": 6.0350030175015085e-5 - }, - { - "value": "ShimCacheMutex", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "DefaultTabtip-MainUI", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": "Local\\WininetConnectionMutex", - "count": 8, - "total_related": 100000, - "prevalence": 8e-5 - }, - { - "value": "Local\\WininetProxyRegistryMutex", - "count": 8, - "total_related": 100000, - "prevalence": 8e-5 - }, - { - "value": "Local\\WininetStartupMutex", - "count": 8, - "total_related": 100000, - "prevalence": 8e-5 - }, - { - "value": "Local\\_!MSFTHISTORY!_", - "count": 8, - "total_related": 100000, - "prevalence": 8e-5 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Global\\TermSrvReadyEvent", - "count": 8, - "total_related": 100000, - "prevalence": 8e-5 - }, - { - "value": "CicLoadWinStaWinSta0", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "Local\\__DDrawCheckExclMode__", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\%APPDATA%!microsoft!windows!cookies!", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\%LOCALAPPDATA%!microsoft!windows!!content.ie5!", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\%LOCALAPPDATA%!microsoft!windows!history!history.ie5!", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\WininetConnectionMutex", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\WininetProxyRegistryMutex", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\WininetStartupMutex", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\_!MSFTHISTORY!_", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "Global\\SyncRootManager", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "Local\\MSCTF.Asm.MutexDefault1", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "Local\\ZoneAttributeCacheCounterMutex", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "Local\\ZonesCacheCounterMutex", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "Local\\ZonesCounterMutex", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "Local\\ZonesLockedCacheCounterMutex", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "Local\\c:!users!admin!appdata!local!microsoft!windows!history!history.ie5!", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "Local\\c:!users!admin!appdata!local!microsoft!windows!temporary internet files!content.ie5!", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "Local\\c:!users!admin!appdata!roaming!microsoft!windows!cookies!", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "Local\\c:!users!administrator!appdata!local!microsoft!windows!history!history.ie5!", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "Local\\c:!users!administrator!appdata!local!microsoft!windows!temporary internet files!content.ie5!", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "Local\\c:!users!administrator!appdata!roaming!microsoft!windows!cookies!", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\BaseNamedObjects\\Global\\SvcctrlStartEvent_A3752DX", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "\\BaseNamedObjects\\Global\\crypt32LogoffEvent", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - } - ], - "registry_keys_deleted": [ - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\RestartManager\\Session0000\\RegFilesHash", - "count": 10, - "total_related": 12370, - "prevalence": 0.0008084074373484236 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\RestartManager\\Session0000\\RegFiles0000", - "count": 10, - "total_related": 12371, - "prevalence": 0.0008083420903726457 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\RestartManager\\Session0000\\Owner", - "count": 10, - "total_related": 36935, - "prevalence": 0.0002707459049681874 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\RestartManager\\Session0000\\Sequence", - "count": 10, - "total_related": 36935, - "prevalence": 0.0002707459049681874 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\RestartManager\\Session0000\\SessionHash", - "count": 10, - "total_related": 36935, - "prevalence": 0.0002707459049681874 - }, - { - "value": "HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Services\\VSS\\Diag", - "count": 8, - "total_related": 236, - "prevalence": 0.03389830508474576 - }, - { - "value": "HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Services\\VSS\\Diag\\BITS Writer", - "count": 8, - "total_related": 236, - "prevalence": 0.03389830508474576 - }, - { - "value": "HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Services\\VSS\\Diag\\SPP", - "count": 8, - "total_related": 236, - "prevalence": 0.03389830508474576 - }, - { - "value": "HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Services\\VSS\\Diag\\System Writer", - "count": 8, - "total_related": 236, - "prevalence": 0.03389830508474576 - }, - { - "value": "HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Services\\VSS\\Diag\\SystemRestore", - "count": 8, - "total_related": 236, - "prevalence": 0.03389830508474576 - }, - { - "value": "HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Services\\VSS\\Diag\\VolSnap", - "count": 8, - "total_related": 236, - "prevalence": 0.03389830508474576 - }, - { - "value": "HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Services\\VSS\\Diag\\WMI Writer", - "count": 8, - "total_related": 236, - "prevalence": 0.03389830508474576 - }, - { - "value": "HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Services\\VSS", - "count": 8, - "total_related": 238, - "prevalence": 0.03361344537815126 - }, - { - "value": "HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Services\\VSS\\Settings", - "count": 7, - "total_related": 236, - "prevalence": 0.029661016949152543 - }, - { - "value": "HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Services\\VSS\\Settings\\WritersBlockingRevert", - "count": 7, - "total_related": 236, - "prevalence": 0.029661016949152543 - }, - { - "value": "HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Services\\VSS\\VssAccessControl", - "count": 7, - "total_related": 236, - "prevalence": 0.029661016949152543 - }, - { - "value": "HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Services\\VSS\\Providers", - "count": 7, - "total_related": 238, - "prevalence": 0.029411764705882353 - }, - { - "value": "HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Services\\VSS\\Providers\\{b5946137-7b9f-4925-af80-51abd60b20d5}", - "count": 7, - "total_related": 238, - "prevalence": 0.029411764705882353 - }, - { - "value": "HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Services\\VSS\\Providers\\{b5946137-7b9f-4925-af80-51abd60b20d5}\\CLSID", - "count": 7, - "total_related": 238, - "prevalence": 0.029411764705882353 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Internet Explorer\\LinksBar\\ItemCache", - "count": 4, - "total_related": 206, - "prevalence": 0.019417475728155338 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Internet Explorer\\LinksBar\\ItemCache\\0", - "count": 4, - "total_related": 207, - "prevalence": 0.01932367149758454 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\.NET Runtime", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\.NET Runtime Optimization Service", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Application", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Application Error", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Application Hang", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Application Management", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Application-Addon-Event-Provider", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\AutoEnrollment", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Business Connectivity Services(Legacy Provider)", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\COM", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\COM+", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\CardSpace 4.0.0.0", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\CertCa", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\CertCli", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\CertEnroll", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Chkdsk", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\DeliveryOptimization", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Desktop Window Manager", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\DiskQuota", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Dwminit", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\ESENT", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Error Instrument", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\EventSystem", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Folder Redirection", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Group Policy Applications", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Group Policy Client", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Group Policy Data Sources", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Group Policy Device Settings", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Group Policy Drive Maps", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Group Policy Environment", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Group Policy Files", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Group Policy Folder Options", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Group Policy Folders", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Group Policy Ini Files", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Group Policy Internet Settings", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Group Policy Local Users and Groups", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Group Policy Mail Profiles", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{a5a30fa2-3d06-4e9f-b5f4-a01df9d1fcba}", - "count": 2, - "total_related": 4180, - "prevalence": 0.0004784688995215311 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{a5a30fa2-3d06-4e9f-b5f4-a01df9d1fcba}\\Description", - "count": 2, - "total_related": 4180, - "prevalence": 0.0004784688995215311 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{a5a30fa2-3d06-4e9f-b5f4-a01df9d1fcba}\\Elements", - "count": 2, - "total_related": 4180, - "prevalence": 0.0004784688995215311 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{a5a30fa2-3d06-4e9f-b5f4-a01df9d1fcba}\\Elements\\24000001", - "count": 2, - "total_related": 4180, - "prevalence": 0.0004784688995215311 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{a5a30fa2-3d06-4e9f-b5f4-a01df9d1fcba}\\Elements\\25000004", - "count": 2, - "total_related": 4180, - "prevalence": 0.0004784688995215311 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{ced07d4c-3b30-11eb-833c-df431422fea5}\\Elements\\12000004", - "count": 2, - "total_related": 4181, - "prevalence": 0.00047835446065534564 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{ced07d4b-3b30-11eb-833c-df431422fea5}\\Elements\\12000004", - "count": 2, - "total_related": 4182, - "prevalence": 0.00047824007651841227 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{9dea862c-5cdd-4e70-acc1-f32b344d4795}\\Elements\\12000002", - "count": 2, - "total_related": 4184, - "prevalence": 0.0004780114722753346 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{9dea862c-5cdd-4e70-acc1-f32b344d4795}\\Elements\\11000001", - "count": 2, - "total_related": 4223, - "prevalence": 0.0004735969689793985 - }, - { - "value": "HKEY_LOCAL_MACHINE\\COMPONENTS\\PendingXmlIdentifier", - "count": 2, - "total_related": 7534, - "prevalence": 0.0002654632333421821 - }, - { - "value": "HKEY_LOCAL_MACHINE\\COMPONENTS\\RepairTransactionPended", - "count": 2, - "total_related": 7537, - "prevalence": 0.00026535756932466497 - }, - { - "value": "HKEY_LOCAL_MACHINE\\COMPONENTS\\ExecutionState", - "count": 2, - "total_related": 7541, - "prevalence": 0.0002652168147460549 - }, - { - "value": "HKEY_LOCAL_MACHINE\\COMPONENTS\\PoqexecFailure", - "count": 2, - "total_related": 7546, - "prevalence": 0.00026504108136761196 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Description\\FirmwareModified", - "count": 2, - "total_related": 8871, - "prevalence": 0.00022545372562281593 - }, - { - "value": "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\RestartManager\\Session0000", - "count": 2, - "total_related": 38759, - "prevalence": 5.160091849634924e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\HomeGroup\\UIStatusCache", - "count": 2, - "total_related": 40940, - "prevalence": 4.885197850512946e-5 - }, - { - "value": "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\RestartManager\\Session0000\\Owner", - "count": 50, - "total_related": 100000, - "prevalence": 0.0005 - }, - { - "value": "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\RestartManager\\Session0000\\RegFiles0000", - "count": 50, - "total_related": 100000, - "prevalence": 0.0005 - }, - { - "value": "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\RestartManager\\Session0000\\RegFilesHash", - "count": 50, - "total_related": 100000, - "prevalence": 0.0005 - }, - { - "value": "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\RestartManager\\Session0000\\Sequence", - "count": 50, - "total_related": 100000, - "prevalence": 0.0005 - }, - { - "value": "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\RestartManager\\Session0000\\SessionHash", - "count": 50, - "total_related": 100000, - "prevalence": 0.0005 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\RestartManager\\Session0000", - "count": 27, - "total_related": 100000, - "prevalence": 0.00027 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Services\\WmiApRpl\\Performance\\First Counter", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Services\\WmiApRpl\\Performance\\First Help", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Services\\WmiApRpl\\Performance\\Last Counter", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Services\\WmiApRpl\\Performance\\Last Help", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Services\\WmiApRpl\\Performance\\Object List", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\IntranetName", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\ProxyBypass", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\IntranetName", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\ProxyBypass", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Control\\Network\\NetCfgLockHolder", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "HKLM/Software/Microsoft/Windows/CurrentVersion/Internet Settings/ZoneMap//IntranetName", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "HKLM/Software/Microsoft/Windows/CurrentVersion/Internet Settings/ZoneMap//ProxyBypass", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "HKU/S-1-5-21-470376811-3006406624-3672060426-1000/Software/Microsoft/Windows/CurrentVersion/Internet Settings/ZoneMap//IntranetName", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "HKU/S-1-5-21-470376811-3006406624-3672060426-1000/Software/Microsoft/Windows/CurrentVersion/Internet Settings/ZoneMap//ProxyBypass", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\IntranetName", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\ProxyBypass", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "\\Software\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\IntranetName", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "\\Software\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\ProxyBypass", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\IntranetName", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\ProxyBypass", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - } - ], - "registry_keys_opened": [ - { - "value": "HKCU\\Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_LOCALMACHINE_LOCKDOWN\\8ee35297d2da61ff6063714a4ac437f7.virus.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{11CD958A-C507-4EF3-B3F2-5FD9DFBD2C78}.check.101", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{A5268B8E-7DB5-465b-BAB7-BDCDA39A394A}.check.100", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{DAB69A6A-4D2A-4D44-94BF-E0091898C881}.check.100", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Providers/EventLog/{11CD958A-C507-4EF3-B3F2-5FD9DFBD2C78}", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Providers/EventLog/{A5268B8E-7DB5-465b-BAB7-BDCDA39A394A}", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Providers/EventLog/{DAB69A6A-4D2A-4D44-94BF-E0091898C881}", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{01979c6a-42fa-414c-b8aa-eee2c8202018}.check.100", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{01979c6a-42fa-414c-b8aa-eee2c8202018}.check.101", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{852FB1F8-5CC6-4567-9C0E-7C330F8807C2}.check.100", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{852FB1F8-5CC6-4567-9C0E-7C330F8807C2}.check.101", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{945a8954-c147-4acd-923f-40c45405a658}.check.42", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{C8E6F269-B90A-4053-A3BE-499AFCEC98C4}.check.0", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Providers/EventLog/{01979c6a-42fa-414c-b8aa-eee2c8202018}", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Providers/EventLog/{945a8954-c147-4acd-923f-40c45405a658}", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/Windows Error Reporting", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/Windows Error Reporting/ERC", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Policies/Microsoft/Windows/Windows Error Reporting", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/SOFTWARE/Microsoft/Windows/CurrentVersion/Internet Settings/Zones", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{E8433B72-5842-4d43-8645-BC2C35960837}.check.100", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{E8433B72-5842-4d43-8645-BC2C35960837}.check.101", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{E8433B72-5842-4d43-8645-BC2C35960837}.check.102", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{E8433B72-5842-4d43-8645-BC2C35960837}.check.103", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{E8433B72-5842-4d43-8645-BC2C35960837}.check.104", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{E8433B72-5842-4d43-8645-BC2C35960837}.check.106", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Internet Settings/Zones/1", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Internet Settings/Zones/2", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Internet Settings/Zones/3", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Internet Settings/Zones/4", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Policies/Microsoft/Windows/CurrentVersion/Internet Settings/Zones/0", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Policies/Microsoft/Windows/CurrentVersion/Internet Settings/Zones/1", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Policies/Microsoft/Windows/CurrentVersion/Internet Settings/Zones/2", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Policies/Microsoft/Windows/CurrentVersion/Internet Settings/Zones/3", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Policies/Microsoft/Windows/CurrentVersion/Internet Settings/Zones/4", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "HKCR/CLSID/{E3633C03-DF7A-41E0-B903-CC349A05E021}", - "count": 1, - "total_related": 118, - "prevalence": 0.00847457627118644 - }, - { - "value": "HKCR/Interface/{A2DBE0E9-E0F7-4A8F-9F9B-471C1CD02136}", - "count": 1, - "total_related": 118, - "prevalence": 0.00847457627118644 - }, - { - "value": "HKCR/CLSID/{37734C4D-FFA8-4139-9AAC-60FBE55BF3DF}", - "count": 1, - "total_related": 131, - "prevalence": 0.007633587786259542 - }, - { - "value": "HKCR/AppID/wbadmin.exe", - "count": 1, - "total_related": 143, - "prevalence": 0.006993006993006993 - }, - { - "value": "HKCR/CLSID/{3AD05575-8857-4850-9277-11B85BDB8E09}", - "count": 1, - "total_related": 296, - "prevalence": 0.0033783783783783786 - }, - { - "value": "HKCU\\SOFTWARE\\LockBit", - "count": 1, - "total_related": 590, - "prevalence": 0.001694915254237288 - }, - { - "value": "HKCR/Interface/{DA9F41D4-1A5D-41D0-A614-6DFD78DF5D05}", - "count": 1, - "total_related": 597, - "prevalence": 0.0016750418760469012 - }, - { - "value": "HKCR/AppID/vssadmin.exe", - "count": 1, - "total_related": 645, - "prevalence": 0.0015503875968992248 - }, - { - "value": "HKCR/AppID/WMIC.exe", - "count": 1, - "total_related": 1195, - "prevalence": 0.0008368200836820083 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}", - "count": 1, - "total_related": 1282, - "prevalence": 0.00078003120124805 - }, - { - "value": "HKCR/CLSID/{F2C2787D-95AB-40D4-942D-298F5F757874}", - "count": 1, - "total_related": 1577, - "prevalence": 0.0006341154090044388 - }, - { - "value": "HKCR/Interface/{79EAC9E4-BAF9-11CE-8C82-00AA004BA90B}", - "count": 1, - "total_related": 1766, - "prevalence": 0.0005662514156285391 - }, - { - "value": "HKCR/CLSID/{E579AB5F-1CC4-44B4-BED9-DE0991FF0623}", - "count": 1, - "total_related": 1840, - "prevalence": 0.0005434782608695652 - }, - { - "value": "HKCR/CLSID/{F6D90F12-9C73-11D3-B32E-00C04F990BB4}", - "count": 1, - "total_related": 1878, - "prevalence": 0.0005324813631522897 - }, - { - "value": "HKCR/PROTOCOLS/Filter/text/xml", - "count": 1, - "total_related": 1940, - "prevalence": 0.0005154639175257732 - }, - { - "value": "HKCR/CLSID/{807573E5-5146-11D5-A672-00B0D022E945}", - "count": 1, - "total_related": 2262, - "prevalence": 0.0004420866489832007 - }, - { - "value": "HKCR/.xml", - "count": 1, - "total_related": 2347, - "prevalence": 0.00042607584149978694 - }, - { - "value": "HKCR/PROTOCOLS/Name-Space Handler/file", - "count": 1, - "total_related": 18304, - "prevalence": 5.463286713286713e-5 - }, - { - "value": "HKCR/CLSID/{8BC3F05E-D86B-11D0-A075-00C04FB68820}", - "count": 1, - "total_related": 73967, - "prevalence": 1.3519542498681845e-5 - }, - { - "value": "HKCR/CLSID/{208D2C60-3AEA-1069-A2D7-08002B30309D}/ShellFolder", - "count": 1, - "total_related": 99110, - "prevalence": 1.008979921299566e-5 - }, - { - "value": "HKCR/CLSID/{1B1CAD8C-2DAB-11D2-B604-00104B703EFD}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCR/CLSID/{1F486A52-3CB1-48FD-8F50-B8DC300D9F9D}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCR/CLSID/{20D04FE0-3AEA-1069-A2D8-08002B30309D}/ShellFolder", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCR/CLSID/{4590F811-1D3A-11D0-891F-00AA004B2E24}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCR/CLSID/{4590F812-1D3A-11D0-891F-00AA004B2E24}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCR/CLSID/{6AE07DC1-0244-4C6F-9AB0-5017A56357C3}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCR/CLSID/{7C857801-7381-11CF-884D-00AA004B2E24}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCR/CLSID/{871C5380-42A0-1069-A2EA-08002B30309D}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCR/CLSID/{871C5380-42A0-1069-A2EA-08002B30309D}/InProcServer32", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCR/CLSID/{871C5380-42A0-1069-A2EA-08002B30309D}/ShellFolder", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCR/CLSID/{871c5380-42a0-1069-a2ea-08002b30309d}/InProcServer32", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCR/CLSID/{88D96A05-F192-11D4-A65F-0040963251E5}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCR/CLSID/{900C0763-5CAD-4A34-BC1F-40CD513679D5}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCR/CLSID/{C8E6F269-B90A-4053-A3BE-499AFCEC98C4}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCR/CLSID/{CA236752-2E77-4386-B63B-0E34774A413D}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCR/CLSID/{D68AF00A-29CB-43FA-8504-CE99A996D9EA}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCR/Interface/{00000134-0000-0000-C000-000000000046}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCR/Interface/{027947E1-D731-11CE-A357-000000000001}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCR/Interface/{1C1C45EE-4395-11D2-B60B-00104B703EFD}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCR/Interface/{423EC01E-2E35-11D2-B604-00104B703EFD}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCR/Interface/{9556DC99-828C-11CF-A37E-00AA003240C7}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCR/Interface/{D4781CD6-E5D3-44DF-AD94-930EFE48A887}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCR/Interface/{F309AD18-D86A-11D0-A075-00C04FB68820}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCR/PROTOCOLS/Name-Space Handler", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCR/PROTOCOLS/Name-Space Handler/*", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCU\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCU\\Software", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCU\\Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_ALLOW_REVERSE_SOLIDUS_IN_USERINFO_KB932562", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCU\\Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCU\\Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_IGNORE_POLICIES_ZONEMAP_IF_ESC_ENABLED_KB918915", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCU\\Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_INITIALIZE_URLACTION_SHELLEXECUTE_TO_ALLOW_KB936610", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCU\\Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_LOCALMACHINE_LOCKDOWN", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCU\\Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_LOCALMACHINE_LOCKDOWN\\*", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCU\\Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_PROTOCOL_LOCKDOWN", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCU\\Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_UNC_SAVEDFILECHECK", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCU\\Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_ZONES_CHECK_ZONEMAP_POLICY_KB941001", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCU\\Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_ZONES_DEFAULT_DRIVE_INTRANET_KB941000", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCU\\Software\\Microsoft\\Internet Explorer\\Security", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCU\\Software\\Microsoft\\Internet Explorer\\Security\\DisableSecuritySettingsCheck", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\CreateUriCacheSize", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\EnablePunycode", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Lockdown_Zones", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Lockdown_Zones\\0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Lockdown_Zones\\1", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Lockdown_Zones\\2", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "registry_keys_set": [ - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\BitBucket\\Volume\\{3ad3197b-12d6-45c2-a036-8dbcc38b1f2e}", - "count": 2, - "total_related": 1237, - "prevalence": 0.0016168148746968471 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\BitBucket\\Volume\\{fde94e26-51ac-4a3b-a031-293cbf326422}", - "count": 2, - "total_related": 1265, - "prevalence": 0.0015810276679841897 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\BitBucket\\Volume\\{3ad3197b-12d6-45c2-a036-8dbcc38b1f2e}\\MaxCapacity", - "count": 2, - "total_related": 1289, - "prevalence": 0.0015515903801396431 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\BitBucket\\Volume\\{3ad3197b-12d6-45c2-a036-8dbcc38b1f2e}\\NukeOnDelete", - "count": 2, - "total_related": 1289, - "prevalence": 0.0015515903801396431 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\BitBucket\\Volume\\{fde94e26-51ac-4a3b-a031-293cbf326422}\\MaxCapacity", - "count": 2, - "total_related": 1317, - "prevalence": 0.0015186028853454822 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\BitBucket\\Volume\\{fde94e26-51ac-4a3b-a031-293cbf326422}\\NukeOnDelete", - "count": 2, - "total_related": 1317, - "prevalence": 0.0015186028853454822 - }, - { - "value": "HKCU\\Software\\172375D3E3B45C\\Private", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "HKCU\\Software\\172375D3E3B45C\\Public", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\\{AD2359D3-E3E3-40C5-BF5C-BFBC1DD0BDA}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "HKEY_CURRENT_USER\\SOFTWARE\\172375D3E3B45C", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "HKEY_CURRENT_USER\\SOFTWARE\\172375D3E3B45C\\Private", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "HKEY_CURRENT_USER\\SOFTWARE\\172375D3E3B45C\\Public", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\{AD2359D3-E3E3-40C5-BF5C-BFBC1DD0BDA}", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\172375D3E3B45C\\Private", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\172375D3E3B45C\\Public", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\\{AD2359D3-E3E3-40C5-BF5C-BFBC1DD0BDA}", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "HKEY_CLASSES_ROOT\\.kF0wnCN24", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "HKEY_CLASSES_ROOT\\kF0wnCN24\\DefaultIcon", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\kF0wnCN24", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\.kF0wnCN24", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\.kF0wnCN24\\NULL", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\kF0wnCN24\\DefaultIcon", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\kF0wnCN24\\DefaultIcon\\NULL", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{945a8954-c147-4acd-923f-40c45405a658}.check.42/CheckSetting", - "count": 1, - "total_related": 16, - "prevalence": 0.0625 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{E8433B72-5842-4d43-8645-BC2C35960837}.check.100/CheckSetting", - "count": 1, - "total_related": 25, - "prevalence": 0.04 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{E8433B72-5842-4d43-8645-BC2C35960837}.check.101/CheckSetting", - "count": 1, - "total_related": 25, - "prevalence": 0.04 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{E8433B72-5842-4d43-8645-BC2C35960837}.check.103/CheckSetting", - "count": 1, - "total_related": 25, - "prevalence": 0.04 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{E8433B72-5842-4d43-8645-BC2C35960837}.check.104/CheckSetting", - "count": 1, - "total_related": 25, - "prevalence": 0.04 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{E8433B72-5842-4d43-8645-BC2C35960837}.check.106/CheckSetting", - "count": 1, - "total_related": 25, - "prevalence": 0.04 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{852FB1F8-5CC6-4567-9C0E-7C330F8807C2}.check.100/CheckSetting", - "count": 1, - "total_related": 26, - "prevalence": 0.038461538461538464 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{852FB1F8-5CC6-4567-9C0E-7C330F8807C2}.check.101/CheckSetting", - "count": 1, - "total_related": 26, - "prevalence": 0.038461538461538464 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{E8433B72-5842-4d43-8645-BC2C35960837}.check.102/CheckSetting", - "count": 1, - "total_related": 26, - "prevalence": 0.038461538461538464 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{01979c6a-42fa-414c-b8aa-eee2c8202018}.check.100/CheckSetting", - "count": 1, - "total_related": 27, - "prevalence": 0.037037037037037035 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{11CD958A-C507-4EF3-B3F2-5FD9DFBD2C78}.check.101/CheckSetting", - "count": 1, - "total_related": 27, - "prevalence": 0.037037037037037035 - }, - { - "value": "HKEY_CURRENT_USER\\SOFTWARE\\LockBit", - "count": 1, - "total_related": 182, - "prevalence": 0.005494505494505495 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\LockBit\\Public", - "count": 1, - "total_related": 182, - "prevalence": 0.005494505494505495 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\LockBit\\full", - "count": 1, - "total_related": 183, - "prevalence": 0.00546448087431694 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\\XO1XADpO01", - "count": 1, - "total_related": 184, - "prevalence": 0.005434782608695652 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\.lockbit\\DefaultIcon\\NULL", - "count": 1, - "total_related": 391, - "prevalence": 0.0025575447570332483 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\AMSI/Debug\\ChannelAccess", - "count": 1, - "total_related": 691, - "prevalence": 0.001447178002894356 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\AMSI/Debug\\Enabled", - "count": 1, - "total_related": 691, - "prevalence": 0.001447178002894356 - }, - { - "value": "HKEY_CURRENT_USER\\Control Panel\\Desktop\\WallPaper", - "count": 1, - "total_related": 1173, - "prevalence": 0.0008525149190110827 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\DebugChannel\\ChannelAccess", - "count": 1, - "total_related": 1239, - "prevalence": 0.0008071025020177562 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\General Logging\\ChannelAccess", - "count": 1, - "total_related": 1241, - "prevalence": 0.0008058017727639 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\DebugChannel\\Enabled", - "count": 1, - "total_related": 1244, - "prevalence": 0.0008038585209003215 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\AirSpaceChannel\\ChannelAccess", - "count": 1, - "total_related": 1245, - "prevalence": 0.0008032128514056225 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\FirstUXPerf-Analytic\\Enabled", - "count": 1, - "total_related": 1247, - "prevalence": 0.0008019246190858059 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\AirSpaceChannel\\Enabled", - "count": 1, - "total_related": 1249, - "prevalence": 0.0008006405124099279 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\Els_Hyphenation/Analytic\\Enabled", - "count": 1, - "total_related": 1258, - "prevalence": 0.000794912559618442 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\ForwardedEvents\\Enabled", - "count": 1, - "total_related": 1272, - "prevalence": 0.0007861635220125787 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\DirectShowFilterGraph\\Enabled", - "count": 1, - "total_related": 1274, - "prevalence": 0.0007849293563579278 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\DirectShowPluginControl\\Enabled", - "count": 1, - "total_related": 1274, - "prevalence": 0.0007849293563579278 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\Analytic\\Enabled", - "count": 1, - "total_related": 1275, - "prevalence": 0.000784313725490196 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\EndpointMapper\\Enabled", - "count": 1, - "total_related": 1275, - "prevalence": 0.000784313725490196 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\FirstUXPerf-Analytic\\ChannelAccess", - "count": 1, - "total_related": 1456, - "prevalence": 0.0006868131868131869 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\Els_Hyphenation/Analytic\\ChannelAccess", - "count": 1, - "total_related": 1462, - "prevalence": 0.0006839945280437756 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\DirectShowFilterGraph\\ChannelAccess", - "count": 1, - "total_related": 1475, - "prevalence": 0.0006779661016949153 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\DirectShowPluginControl\\ChannelAccess", - "count": 1, - "total_related": 1475, - "prevalence": 0.0006779661016949153 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\ForwardedEvents\\ChannelAccess", - "count": 1, - "total_related": 1475, - "prevalence": 0.0006779661016949153 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\Analytic\\ChannelAccess", - "count": 1, - "total_related": 1476, - "prevalence": 0.0006775067750677507 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\EndpointMapper\\ChannelAccess", - "count": 1, - "total_related": 1478, - "prevalence": 0.0006765899864682003 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{71a3c7fc-f751-4982-aec1-e958357e6813}\\Elements\\250000e0", - "count": 1, - "total_related": 1862, - "prevalence": 0.0005370569280343716 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\\(Default)", - "count": 1, - "total_related": 1931, - "prevalence": 0.0005178663904712584 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\CLSID\\{645FF040-5081-101B-9F08-00AA002F954E}\\DefaultIcon\\NULL", - "count": 1, - "total_related": 2760, - "prevalence": 0.00036231884057971015 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{71a3c7fc-f751-4982-aec1-e958357e6813}\\Elements\\250000e0\\Element", - "count": 1, - "total_related": 3977, - "prevalence": 0.00025144581342720644 - }, - { - "value": "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\\(Default)", - "count": 1, - "total_related": 5718, - "prevalence": 0.00017488632388947185 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{ced07d4b-3b30-11eb-833c-df431422fea5}\\Elements\\12000004", - "count": 1, - "total_related": 9117, - "prevalence": 0.00010968520346605243 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{ced07d4c-3b30-11eb-833c-df431422fea5}\\Elements\\12000004", - "count": 1, - "total_related": 10403, - "prevalence": 9.612611746611554e-5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{a5a30fa2-3d06-4e9f-b5f4-a01df9d1fcba}\\Elements\\24000001", - "count": 1, - "total_related": 10404, - "prevalence": 9.611687812379854e-5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{a5a30fa2-3d06-4e9f-b5f4-a01df9d1fcba}\\Elements\\25000004", - "count": 1, - "total_related": 10404, - "prevalence": 9.611687812379854e-5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{a5a30fa2-3d06-4e9f-b5f4-a01df9d1fcba}", - "count": 1, - "total_related": 10406, - "prevalence": 9.609840476648087e-5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{a5a30fa2-3d06-4e9f-b5f4-a01df9d1fcba}\\Description", - "count": 1, - "total_related": 10406, - "prevalence": 9.609840476648087e-5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{a5a30fa2-3d06-4e9f-b5f4-a01df9d1fcba}\\Elements", - "count": 1, - "total_related": 10406, - "prevalence": 9.609840476648087e-5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{9dea862c-5cdd-4e70-acc1-f32b344d4795}\\Elements\\11000001", - "count": 1, - "total_related": 10412, - "prevalence": 9.604302727621975e-5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{9dea862c-5cdd-4e70-acc1-f32b344d4795}\\Elements\\12000002", - "count": 1, - "total_related": 10415, - "prevalence": 9.601536245799327e-5 - }, - { - "value": "HKCU\\Software\\Microsoft\\OneDrive\\Accounts\\LastUpdate", - "count": 1, - "total_related": 10446, - "prevalence": 9.573042312847023e-5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{ced07d4b-3b30-11eb-833c-df431422fea5}\\Elements\\12000004\\Element", - "count": 1, - "total_related": 13302, - "prevalence": 7.517666516313337e-5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Description\\FirmwareModified", - "count": 1, - "total_related": 14391, - "prevalence": 6.948787436592315e-5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{a5a30fa2-3d06-4e9f-b5f4-a01df9d1fcba}\\Elements\\25000004\\Element", - "count": 1, - "total_related": 14875, - "prevalence": 6.722689075630252e-5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{a5a30fa2-3d06-4e9f-b5f4-a01df9d1fcba}\\Description\\Type", - "count": 1, - "total_related": 14878, - "prevalence": 6.721333512568894e-5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{a5a30fa2-3d06-4e9f-b5f4-a01df9d1fcba}\\Elements\\24000001\\Element", - "count": 1, - "total_related": 14878, - "prevalence": 6.721333512568894e-5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{ced07d4c-3b30-11eb-833c-df431422fea5}\\Elements\\12000004\\Element", - "count": 1, - "total_related": 14879, - "prevalence": 6.720881779689495e-5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{9dea862c-5cdd-4e70-acc1-f32b344d4795}\\Elements\\12000002\\Element", - "count": 1, - "total_related": 14889, - "prevalence": 6.716367788300088e-5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{9dea862c-5cdd-4e70-acc1-f32b344d4795}\\Elements\\11000001\\Element", - "count": 1, - "total_related": 14895, - "prevalence": 6.71366230278617e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\RestartManager", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\RestartManager\\Session0000", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Explorer\\GlobalAssocChangedCounter", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\AutoDetect", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\UNCAsIntranet", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Control Panel\\Desktop\\WallpaperStyle", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\RestartManager\\Session0000\\Owner", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\RestartManager\\Session0000\\RegFiles0000", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\RestartManager\\Session0000\\RegFilesHash", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\RestartManager\\Session0000\\Sequence", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\RestartManager\\Session0000\\SessionHash", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\RestartManager\\Session0000\\Owner", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\RestartManager\\Session0000\\RegFiles0000", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\RestartManager\\Session0000\\RegFilesHash", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\RestartManager\\Session0000\\Sequence", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\RestartManager\\Session0000\\SessionHash", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "file_types": [ - { - "value": "peexe", - "count": 246 - }, - { - "value": "pedll", - "count": 13 - }, - { - "value": "rar", - "count": 2 - }, - { - "value": "msi", - "count": 1 - }, - { - "value": "gzip", - "count": 1 - } - ], - "crowdsourced_sigma_results": [ - { - "value": { - "id": "cf2984facb3af2703a88c05e420505bdaad5887f51fbf32167a0bf5abfcc28bc", - "level": "high", - "title": "Change Winevt Channel Access Permission Via Registry", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects tampering with the \"ChannelAccess\" registry key in order to change access to Windows event channel." - }, - "count": 121, - "total_related": 1486, - "prevalence": 0.08142664872139974 - }, - { - "value": { - "id": "7d0d3be8fa405f5e34c2e0cf9eaa345cacd60eb5244b50b23dc54c4785bc7512", - "level": "low", - "title": "Load Of RstrtMgr.DLL By An Uncommon Process", - "author": "Luc G\u00e9naux", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the load of RstrtMgr DLL (Restart Manager) by an uncommon process.\nThis library has been used during ransomware campaigns to kill processes that would prevent file encryption by locking them (e.g. Conti ransomware, Cactus ransomware). It has also recently been seen used by the BiBi wiper for Windows.\nIt could also be used for anti-analysis purposes by shut downing specific processes.\n" - }, - "count": 106, - "total_related": 87800, - "prevalence": 0.0012072892938496582 - }, - { - "value": { - "id": "5800379600db7e280b56236f291d8f474f097bed4c21c02367049347a8febc40", - "level": "high", - "title": "Windows Defender Service Disabled - Registry", - "author": "J\u00e1n Tren\u010dansk\u00fd, frack113, AlertIQ, Nasreddine Bencherchali", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects when an attacker or tool disables the Windows Defender service (WinDefend) via the registry" - }, - "count": 91, - "total_related": 39231, - "prevalence": 0.002319594198465499 - }, - { - "value": { - "id": "16b459cba08f0827ee9607be238b1582dfd3717c30b129b5f215736d5a3c3e1b", - "level": "low", - "title": "DNS Server Discovery Via LDAP Query", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects DNS server discovery via LDAP query requests from uncommon applications" - }, - "count": 86, - "total_related": 9498, - "prevalence": 0.009054537797431038 - }, - { - "value": { - "id": "7496876fb48565b8278bf669ff38b2846b842f9f663b755f72c105f928ae76c6", - "level": "high", - "title": "Disable Windows Event Logging Via Registry", - "author": "frack113, Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects tampering with the \"Enabled\" registry key in order to disable Windows logging of a Windows event channel" - }, - "count": 85, - "total_related": 1647, - "prevalence": 0.05160898603521554 - }, - { - "value": { - "id": "be6d29855558a0e8c404486d8f1838ce35594866f126f9c1c62a9792e9c76be2", - "level": "critical", - "title": "Delete shadow copy via WMIC", - "author": "Joe Security", - "source_url": "https://github.com/joesecurity/sigma-rules", - "source": "Joe Security Rule Set (GitHub)", - "description": "Delete shadow copy via WMIC" - }, - "count": 19, - "total_related": 17033, - "prevalence": 0.00111548171197088 - }, - { - "value": { - "id": "2da0b3cba5dc2b56e1426049598590c54a224e6d15740b9b07c108e089c84520", - "level": "high", - "title": "Boot Configuration Tampering Via Bcdedit.EXE", - "author": "E.M. Anhaus (originally from Atomic Blue Detections, Endgame), oscd.community", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the use of the bcdedit command to tamper with the boot configuration data. This technique is often times used by malware or attackers as a destructive way before launching ransomware." - }, - "count": 18, - "total_related": 5115, - "prevalence": 0.0035190615835777126 - }, - { - "value": { - "id": "ad5e4d4b939797a70a9aa742d979a4742c2cfedddd663fb1a43b2795c1e6054b", - "level": "high", - "title": "Shadow Copies Deletion Using Operating Systems Utilities", - "author": "Florian Roth (Nextron Systems), Michael Haag, Teymur Kheirkhabarov, Daniil Yugoslavskiy, oscd.community, Andreas Hunkeler (@Karneades)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Shadow Copies deletion using operating systems utilities" - }, - "count": 18, - "total_related": 20713, - "prevalence": 0.0008690194563800512 - }, - { - "value": { - "id": "d8e5c8a4902824901a6b91baa07694ac8ea9e13689cebd342572a8b546bad5bc", - "level": "high", - "title": "Disabled Windows Defender Eventlog", - "author": "Florian Roth (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the disabling of the Windows Defender eventlog as seen in relation to Lockbit 3.0 infections" - }, - "count": 17, - "total_related": 271, - "prevalence": 0.06273062730627306 - }, - { - "value": { - "id": "2219766fcc5e77936dbd9b7310a20b2ba3f5b4aac858c6ac312c81fcc2838d4a", - "level": "high", - "title": "UAC Bypass via ICMLuaUtil", - "author": "Florian Roth (Nextron Systems), Elastic (idea)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the pattern of UAC Bypass using ICMLuaUtil Elevated COM interface" - }, - "count": 15, - "total_related": 8436, - "prevalence": 0.0017780938833570413 - }, - { - "value": { - "id": "a30845acd045e920f165087e59ac6d9461f6c4bfadfa52e4c518e3bcb9d8cb0c", - "level": "high", - "title": "CMSTP UAC Bypass via COM Object Access", - "author": "Nik Seetharaman, Christian Burkard (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects UAC Bypass Attempt Using Microsoft Connection Manager Profile Installer Autoelevate-capable COM Objects (e.g. UACMe ID of 41, 43, 58 or 65)" - }, - "count": 15, - "total_related": 8998, - "prevalence": 0.0016670371193598578 - }, - { - "value": { - "id": "51a5b51db51679c45a7aea23d8e25f242e096a01ad35754b45acf5da3ec98440", - "level": "high", - "title": "Suspicious File Creation Activity From Fake Recycle.Bin Folder", - "author": "X__Junior (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects file write event from/to a fake recycle bin folder that is often used as a staging directory for malware" - }, - "count": 9, - "total_related": 20714, - "prevalence": 0.0004344887515689872 - }, - { - "value": { - "id": "de683a6054ff03b9c12e58c842648f759cfcf797f91dc01078d285e8f3f8e856", - "level": "medium", - "title": "Suspicious Copy From or To System Directory", - "author": "Florian Roth (Nextron Systems), Markus Neis, Tim Shelton (HAWK.IO), Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects a suspicious copy operation that tries to copy a program from system (System32, SysWOW64, WinSxS) directories to another on disk.\nOften used to move LOLBINs such as 'certutil' or 'desktopimgdownldr' to a different location with a different name in order to bypass detections based on locations.\n" - }, - "count": 9, - "total_related": 41838, - "prevalence": 0.00021511544528897175 - }, - { - "value": { - "id": "74ea3fde96df11352e7b3c70bce437f83f170b5677efeb447c7f33d001142691", - "level": "medium", - "title": "Access To Browser Credential Files By Uncommon Application", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects file access requests to browser credential stores by uncommon processes.\nCould indicate potential attempt of credential stealing.\nRequires heavy baselining before usage\n" - }, - "count": 7, - "total_related": 23417, - "prevalence": 0.0002989281291369518 - }, - { - "value": { - "id": "b8a9a3d755cac11238eb37aa06d27255714356075872c2e2e140acfb3e8ab8b0", - "level": "critical", - "title": "WannaCry Ransomware Activity", - "author": "Florian Roth (Nextron Systems), Tom U. @c_APT_ure (collection), oscd.community, Jonhnathan Ribeiro", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects WannaCry ransomware activity" - }, - "count": 5, - "total_related": 10518, - "prevalence": 0.0004753755466818787 - }, - { - "value": { - "id": "90a2634e64f0a02343bf17b797e3d249061fdee81d36e5dac2d8e3fe2a2df280", - "level": "high", - "title": "Suspicious Volume Shadow Copy VSS_PS.dll Load", - "author": "Markus Neis, @markus_neis", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the image load of vss_ps.dll by uncommon executables" - }, - "count": 4, - "total_related": 5048, - "prevalence": 0.000792393026941363 - }, - { - "value": { - "id": "f441bf0f20310d2f8fb4c38b047725cf9bafb59c2a7634f73d2d38745157b248", - "level": "high", - "title": "Uncommon File Created In Office Startup Folder", - "author": "frack113, Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the creation of a file with an uncommon extension in an Office application startup folder" - }, - "count": 4, - "total_related": 16165, - "prevalence": 0.00024744819053510673 - }, - { - "value": { - "id": "6f788218e57d2939e69140473d30d868ecfc490ccb3caee4be496d022d6bc807", - "level": "medium", - "title": "Amsi.DLL Loaded Via LOLBIN Process", - "author": "Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects loading of \"Amsi.dll\" by a living of the land process. This could be an indication of a \"PowerShell without PowerShell\" attack" - }, - "count": 2, - "total_related": 6486, - "prevalence": 0.0003083564600678384 - }, - { - "value": { - "id": "2e58fcf707ea25a6c7465ae2a0d4b35ff302cceb7b8fde4ac5d3467d832e005e", - "level": "high", - "title": "Suspicious Ping/Del Command Combination", - "author": "Ilya Krestinichev", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects a method often used by ransomware. Which combines the \"ping\" to wait a couple of seconds and then \"del\" to delete the file in question. Its used to hide the file responsible for the initial infection for example" - }, - "count": 2, - "total_related": 16577, - "prevalence": 0.00012064909211558183 - }, - { - "value": { - "id": "99aac26486266b4916c883cf9ec793784cff9e6617ed361b8c47f7972a4baf46", - "level": "medium", - "title": "Suspicious Msbuild Execution By Uncommon Parent Process", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects suspicious execution of 'Msbuild.exe' by a uncommon parent process" - }, - "count": 2, - "total_related": 33745, - "prevalence": 5.926803970958661e-5 - }, - { - "value": { - "id": "fb092b3aee3feb316c048a1249e1ac9639a63cac318318afd45bf38887b31b0c", - "level": "low", - "title": "WMI Module Loaded By Non Uncommon Process", - "author": "Roberto Rodriguez @Cyb3rWard0g", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects a WMI modules being loaded by an uncommon process" - }, - "count": 2, - "total_related": 90308, - "prevalence": 2.2146432209771005e-5 - }, - { - "value": { - "id": "9aae4742b47a403c0d2871d344a6076cd6b797a267bbe2d0b85e607927ef3dc9", - "level": "medium", - "title": "Windows Backup Deleted Via Wbadmin.EXE", - "author": "frack113, Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the deletion of backups or system state backups via \"wbadmin.exe\".\nThis technique is used by numerous ransomware families and actors.\nThis may only be successful on server platforms that have Windows Backup enabled.\n" - }, - "count": 1, - "total_related": 389, - "prevalence": 0.002570694087403599 - }, - { - "value": { - "id": "c4e0758476210a09a3e470db05d2cbec0aebd511e48d351685c75970566f894f", - "level": "high", - "title": "Suspicious Splwow64 Without Params", - "author": "Florian Roth (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects suspicious Splwow64.exe process without any command line parameters" - }, - "count": 1, - "total_related": 851, - "prevalence": 0.0011750881316098707 - }, - { - "value": { - "id": "667c9dcf6079fd28997e3e2b10b629c8ddbbd7bdffee1889aef6476277791e13", - "level": "critical", - "title": "LimeRAT", - "author": "Joe Security", - "source_url": "https://github.com/joesecurity/sigma-rules", - "source": "Joe Security Rule Set (GitHub)", - "description": "LimeRAT" - }, - "count": 1, - "total_related": 1025, - "prevalence": 0.000975609756097561 - }, - { - "value": { - "id": "ada08103432e4112d167b1d10f0fc02281936c8fcb181de17d5bca07755bac84", - "level": "high", - "title": "Potential Emotet Activity", - "author": "Florian Roth (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects all Emotet like process executions that are not covered by the more generic rules" - }, - "count": 1, - "total_related": 7744, - "prevalence": 0.00012913223140495868 - }, - { - "value": { - "id": "1fd2d09eff791a970cc2ad6da0820134ef9d52d4341ab32028edd04e8dd158bd", - "level": "critical", - "title": "Powershell download and execute file", - "author": "Joe Security", - "source_url": "https://github.com/joesecurity/sigma-rules", - "source": "Joe Security Rule Set (GitHub)", - "description": "powershell download file from internet and execute" - }, - "count": 1, - "total_related": 7858, - "prevalence": 0.00012725884448969204 - }, - { - "value": { - "id": "f0282b9dc90a1761ed8cfb90b52bc5f53c2c8ccbff1ca29790e8d17c7eae56dd", - "level": "high", - "title": "PowerShell DownloadFile", - "author": "Florian Roth (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the execution of powershell, a WebClient object creation and the invocation of DownloadFile in a single command line" - }, - "count": 1, - "total_related": 11681, - "prevalence": 8.56091088091773e-5 - }, - { - "value": { - "id": "f86d8f196029958699a0b36a9a1a254d7c1bfc594fd486ee04c1e4988965f3b2", - "level": "high", - "title": "Powershell Base64 Encoded MpPreference Cmdlet", - "author": "Florian Roth (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects base64 encoded \"MpPreference\" PowerShell cmdlet code that tries to modifies or tamper with Windows Defender AV" - }, - "count": 1, - "total_related": 19941, - "prevalence": 5.014793641241663e-5 - }, - { - "value": { - "id": "e75e9983c2277304aa1294c0b077a3139a8405cd1661ccf513a6c05a002acacf", - "level": "high", - "title": "Base64 Encoded PowerShell Command Detected", - "author": "Florian Roth (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects usage of the \"FromBase64String\" function in the commandline which is used to decode a base64 encoded string" - }, - "count": 1, - "total_related": 21924, - "prevalence": 4.5612114577631816e-5 - }, - { - "value": { - "id": "7b87fbdccf3c12011b709aab8b9bd4642bd61dc9880e0e1ce9ebb9901e2a3497", - "level": "medium", - "title": "Uncommon Child Process Of Conhost.EXE", - "author": "omkar72", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects uncommon \"conhost\" child processes. This could be a sign of \"conhost\" usage as a LOLBIN or potential process injection activity." - }, - "count": 1, - "total_related": 22192, - "prevalence": 4.506128334534967e-5 - }, - { - "value": { - "id": "c9f2b527fcecda6141fde1caee187052676355bc055141a8caa6c22482fca3ad", - "level": "critical", - "title": "Xmrig", - "author": "Joe Security", - "source_url": "https://github.com/joesecurity/sigma-rules", - "source": "Joe Security Rule Set (GitHub)", - "description": "Detect Xmrig" - }, - "count": 1, - "total_related": 22195, - "prevalence": 4.505519261094841e-5 - }, - { - "value": { - "id": "12273189dbbd1ed526c045fb9a7d5e45682ba4e0a13e2e94d65376962a0bfc2e", - "level": "high", - "title": "Suspicious PowerShell Encoded Command Patterns", - "author": "Florian Roth (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects PowerShell command line patterns in combincation with encoded commands that often appear in malware infection chains" - }, - "count": 1, - "total_related": 42290, - "prevalence": 2.3646252069047056e-5 - }, - { - "value": { - "id": "5d47487e23119ea582c4bd1cbba5e4550dde8d31b114da54629a3b0bb7675b80", - "level": "medium", - "title": "Potentially Suspicious WDAC Policy File Creation", - "author": "X__Junior", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects suspicious Windows Defender Application Control (WDAC) policy file creation from abnormal processes that could be abused by attacker to block EDR/AV components while allowing their own malicious code to run on the system.\n" - }, - "count": 1, - "total_related": 59378, - "prevalence": 1.684125433662299e-5 - }, - { - "value": { - "id": "24c9049c81b149aa4537cce166e36f3697878dcdad3fab8b662889d154056d7c", - "level": "medium", - "title": "PowerShell Download Pattern", - "author": "Florian Roth (Nextron Systems), oscd.community, Jonhnathan Ribeiro", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects a Powershell process that contains download commands in its command line string" - }, - "count": 1, - "total_related": 63371, - "prevalence": 1.5780088684098403e-5 - }, - { - "value": { - "id": "11ef2fbb89770dbec860f554810a4e34a33e1326589f9eaf562412ceba567f00", - "level": "critical", - "title": "Potential Dridex Activity", - "author": "Florian Roth (Nextron Systems), oscd.community, Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects potential Dridex acitvity via specific process patterns" - }, - "count": 1, - "total_related": 91663, - "prevalence": 1.0909527290182517e-5 - }, - { - "value": { - "id": "eb75f9de2201bfad4ef177dca85b0b8fa8e5a86ba2357af5301f72acbc5eb144", - "level": "medium", - "title": "Suspicious Execution of Powershell with Base64", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Commandline to launch powershell with a base64 payload" - }, - "count": 1, - "total_related": 99529, - "prevalence": 1.0047322890815743e-5 - }, - { - "value": { - "id": "77ed185ff979a8d9206b5eed07bf6d5823529f713ed0ea19f2ef7a4a355568bc", - "level": "low", - "title": "File Deletion Via Del", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects execution of the builtin \"del\"/\"erase\" commands in order to delete files.\nAdversaries may delete files left behind by the actions of their intrusion activity.\nMalware, tools, or other non-native files dropped or created on a system by an adversary may leave traces to indicate to what was done within a network and how.\nRemoval of these files can occur during an intrusion, or as part of a post-intrusion process to minimize the adversary's footprint.\n" - }, - "count": 92, - "total_related": 100000, - "prevalence": 0.00092 - }, - { - "value": { - "id": "cdd5a8ff564f3632d9613d1f4925baca8be40a01fe14c7ba3e30f51bf1ff3829", - "level": "medium", - "title": "Suspicious desktop.ini Action", - "author": "Maxime Thiebaut (@0xThiebaut), Tim Shelton (HAWK.IO)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects unusual processes accessing desktop.ini, which can be leveraged to alter how Explorer displays a folder's content (i.e. renaming files) without changing them on disk." - }, - "count": 83, - "total_related": 100000, - "prevalence": 0.00083 - }, - { - "value": { - "id": "8b5db9da5732dc549b0e8b56fe5933d7c95ed760f3ac20568ab95347ef8c5bcc", - "level": "medium", - "title": "CurrentVersion Autorun Keys Modification", - "author": "Victor Sergeev, Daniil Yugoslavskiy, Gleb Sukhodolskiy, Timur Zinniatullin, oscd.community, Tim Shelton, frack113 (split)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects modification of autostart extensibility point (ASEP) in registry." - }, - "count": 36, - "total_related": 100000, - "prevalence": 0.00036 - }, - { - "value": { - "id": "e77646c39db7fa011a5223aeb73c738046787fc7f62a99394e883d76a54341f7", - "level": "low", - "title": "CMD Shell Output Redirect", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the use of the redirection character \">\" to redicrect information in commandline" - }, - "count": 18, - "total_related": 100000, - "prevalence": 0.00018 - }, - { - "value": { - "id": "f09d5248ed8fc1a93251158bfda71f8144ccaf37fa922416ccd897498bff7c55", - "level": "medium", - "title": "Suspicious Process Creation", - "author": "Florian Roth", - "source_url": "https://sigma.socprime.com/#!/", - "source": "SOC Prime Threat Detection Marketplace", - "description": "Detects suspicious process starts on Windows systems based on keywords" - }, - "count": 15, - "total_related": 100000, - "prevalence": 0.00015 - }, - { - "value": { - "id": "b8c95f5909e68be942c69ab250a3b47557e33b2d1d582cd72e665210efeadb8f", - "level": "medium", - "title": "PowerShell Module File Created By Non-PowerShell Process", - "author": "Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the creation of a new PowerShell module \".psm1\", \".psd1\", \".dll\", \".ps1\", etc. by a non-PowerShell process" - }, - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": { - "id": "1f7f8b1e9005dd4d64cb9d30ed53ee94f68fb96262fbd72f7a0266881149c79f", - "level": "low", - "title": "Suspicious Get-WmiObject", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "The infrastructure for management data and operations that enables local and remote management of Windows personal computers and servers" - }, - "count": 8, - "total_related": 100000, - "prevalence": 8e-5 - }, - { - "value": { - "id": "5572c8188426269a10ccb41fc8e9c8445391ac38a0917621b0a1ee05ec99aac9", - "level": "medium", - "title": "Change PowerShell Policies to an Insecure Level - PowerShell", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects changing the PowerShell script execution policy to a potentially insecure level using the \"Set-ExecutionPolicy\" cmdlet." - }, - "count": 8, - "total_related": 100000, - "prevalence": 8e-5 - }, - { - "value": { - "id": "5a6c8cc8cab203cf6f2333e64a60bd47d75fb197ebae1de9ed494061e525a58c", - "level": "medium", - "title": "Potentially Suspicious Desktop Background Change Via Registry", - "author": "Nasreddine Bencherchali (Nextron Systems), Stephen Lincoln @slincoln-aiq (AttackIQ)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects registry value settings that would replace the user's desktop background.\nThis is a common technique used by malware to change the desktop background to a ransom note or other image.\n" - }, - "count": 8, - "total_related": 100000, - "prevalence": 8e-5 - }, - { - "value": { - "id": "27b72c2678411f21ba21bd10b44b7e9c45594d5a5f61f14223b81a8906675039", - "level": "high", - "title": "New RUN Key Pointing to Suspicious Folder", - "author": "Florian Roth (Nextron Systems), Markus Neis, Sander Wiebing, Swachchhanda Shrawan Poudel (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects suspicious new RUN key element pointing to an executable in a suspicious folder" - }, - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": { - "id": "25fc56c1bee673d7ff3edcf371e4d2a36c0af83222da348961b87735c8efa61f", - "level": "high", - "title": "System File Execution Location Anomaly", - "author": "Florian Roth (Nextron Systems), Patrick Bareiss, Anton Kutepov, oscd.community, Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the execution of a Windows system binary that is usually located in the system folder from an uncommon location.\n" - }, - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": { - "id": "8919a871f4a52b7af785fab44b4665ab6a3637e6ebeeac0288df8a5012a48be2", - "level": "low", - "title": "User with Privileges Logon", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects logon with \"Special groups\" and \"Special Privileges\" can be thought of as Administrator groups or privileges." - }, - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": { - "id": "3c0434c2b9b483a1c7879404c2a80556dc54436bf222a970ca7131b1f30079f1", - "level": "medium", - "title": "Use Short Name Path in Command Line", - "author": "frack113, Nasreddine Bencherchali", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detect use of the Windows 8.3 short name. Which could be used as a method to avoid command-line detection" - }, - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": { - "id": "b5386a23355681c43cfbd2f2ccfe4b16ed45324d0d7b5583487a9f302ee1e427", - "level": "low", - "title": "Creation of an Executable by an Executable", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the creation of an executable by another executable" - }, - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": { - "id": "e13498937de9343f50c1e8f315ce602aa238e37e21f3dbb15d3403c25afafe3e", - "level": "medium", - "title": "Files With System Process Name In Unsuspected Locations", - "author": "Sander Wiebing, Tim Shelton, Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the creation of an executable with a system process name in folders other than the system ones (System32, SysWOW64, etc.).\nIt is highly recommended to perform an initial baseline before using this rule in production.\n" - }, - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": { - "id": "18842e32896dd83b8aca4d5e1ac78c1f66b1d252479c0023cdd02f108c42c8cd", - "level": "medium", - "title": "Wow6432Node CurrentVersion Autorun Keys Modification", - "author": "Victor Sergeev, Daniil Yugoslavskiy, Gleb Sukhodolskiy, Timur Zinniatullin, oscd.community, Tim Shelton, frack113 (split)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects modification of autostart extensibility point (ASEP) in registry." - }, - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": { - "id": "1c2e4db94ca79f939e94e29c04fb3b71467fc6f5b9c31db34fcce5a2fb3b856f", - "level": "low", - "title": "Non Interactive PowerShell Process Spawned", - "author": "Roberto Rodriguez @Cyb3rWard0g (rule), oscd.community (improvements)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects non-interactive PowerShell activity by looking at the \"powershell\" process with a non-user GUI process such as \"explorer.exe\" as a parent." - }, - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": { - "id": "2333305c10a5e401a71aa3f6f7fdc5beb2f3131724fbb28c6c6d9e4ae27ef754", - "level": "high", - "title": "Suspicious Process Masquerading As SvcHost.EXE", - "author": "Swachchhanda Shrawan Poudel", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects a suspicious process that is masquerading as the legitimate \"svchost.exe\" by naming its binary \"svchost.exe\" and executing from an uncommon location.\nAdversaries often disguise their malicious binaries by naming them after legitimate system processes like \"svchost.exe\" to evade detection.\n" - }, - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": { - "id": "43c6ce8bdbd683e1a7f4fb9b49a3a8236621ff32e67fdf0987c5770097ef376c", - "level": "medium", - "title": "ADS Zone.Identifier Deleted By Uncommon Application", - "author": "Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the deletion of the \"Zone.Identifier\" ADS by an uncommon process. Attackers can leverage this in order to bypass security restrictions that make use of the ADS such as Microsoft Office apps." - }, - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": { - "id": "80708cad12d59acde6c91bdfbb0ed867ffd0538e97f962f2ffd72040a66ecb6b", - "level": "medium", - "title": "UAC Disabled", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects when an attacker tries to disable User Account Control (UAC) by setting the registry value \"EnableLUA\" to 0.\n" - }, - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": { - "id": "86c36bfac526414900d3b4c6f66d0b7bb2cf11a511b7ad65c486685dc8d4d05f", - "level": "medium", - "title": "Disable Internal Tools or Feature in Registry", - "author": "frack113, Nasreddine Bencherchali (Nextron Systems), CrimpSec", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects registry modifications that change features of internal Windows tools (malware like Agent Tesla uses this technique)" - }, - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": { - "id": "a0daa529834b3c5230b4524da005a6b6503e7cb061e298a8f74e0dc1fee0a008", - "level": "medium", - "title": "Uncommon Svchost Parent Process", - "author": "Florian Roth (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects an uncommon svchost parent process" - }, - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": { - "id": "afd546ea5eff265c454f77f6e7641ade6e5a791d79de155fa27d377be1581535", - "level": "low", - "title": "Windows Processes Suspicious Parent Directory", - "author": "vburov", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detect suspicious parent processes of well-known Windows processes" - }, - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": { - "id": "cf863dff3d564c975d28d336cb7981fcd6956e6fb9afbd2794f600b130e83171", - "level": "medium", - "title": "Windows Defender Exclusions Added - PowerShell", - "author": "Tim Rauch, Elastic (idea)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects modifications to the Windows Defender configuration settings using PowerShell to add exclusions" - }, - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": { - "id": "e4d5f1be0673fa786cc8379c15338af08cdd11eed433bead9e801d6204d42a2d", - "level": "medium", - "title": "Python Initiated Connection", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects a Python process initiating a network connection. While this often relates to package installation, it can also indicate a potential malicious script communicating with a C&C server." - }, - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": { - "id": "02b55b29ddf740930b68c311ca7cd59354f8c35ceda86d09a3fb06f08b760857", - "level": "critical", - "title": "Schedule system process", - "author": "Joe Security", - "source_url": "https://github.com/joesecurity/sigma-rules", - "source": "Joe Security Rule Set (GitHub)", - "description": "Schedule system process" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "0533322c5c44794b71e761cd351a2459aad6e21ae95c9543d4c9fdb3c8fde6c4", - "level": "medium", - "title": "Schedule Task Creation From Env Variable Or Potentially Suspicious Path Via Schtasks.EXE", - "author": "Florian Roth (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects Schtask creations that point to a suspicious folder or an environment variable often used by malware" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "06b48fa7870d38bdf92b4d4a9b9c4a4df779bd405fdc5ba0e70911df20027ce1", - "level": "medium", - "title": "Change PowerShell Policies to an Insecure Level", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects changing the PowerShell script execution policy to a potentially insecure level using the \"-ExecutionPolicy\" flag." - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "0752dd4f3de82ada650a6c6ed1887cc940d8f55e130fec468ce0df9b2ec4ef25", - "level": "high", - "title": "Monero Crypto Coin Mining Pool Lookup", - "author": "Florian Roth (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects suspicious DNS queries to Monero mining pools" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "0db9fba426142aca003830de31e38a7318ed0a3a299852f6bc4cbe8bc905515f", - "level": "medium", - "title": "Read Contents From Stdin Via Cmd.EXE", - "author": "frack113, Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detect the use of \"<\" to read and potentially execute a file via cmd.exe" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "2104d1ee1ce64e7aa3dbd368652a54ce160e6a5751019af14601fc8fd1df8086", - "level": "medium", - "title": "Execution of Suspicious File Type Extension", - "author": "Max Altgelt (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects whether the image specified in a process creation event doesn't refer to an \".exe\" (or other known executable extension) file. This can be caused by process ghosting or other unorthodox methods to start a process.\nThis rule might require some initial baselining to align with some third party tooling in the user environment.\n" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "33a4a18ae1a3802586c239be79075294541594b5b603c230af39618577e03fae", - "level": "high", - "title": "Audit Policy Tampering Via Auditpol", - "author": "Janantha Marasinghe (https://github.com/blueteam0ps)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Threat actors can use auditpol binary to change audit policy configuration to impair detection capability.\nThis can be carried out by selectively disabling/removing certain audit policies as well as restoring a custom policy owned by the threat actor.\n" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "3a2766a08d32a855b604a786cddc0f76fee13e6ccd22e01d4878150f0ef1eebc", - "level": "medium", - "title": "Suspicious DNS Query for IP Lookup Service APIs", - "author": "Brandon George (blog post), Thomas Patzke", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects DNS queries for IP lookup services such as \"api.ipify.org\" originating from a non browser process." - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "3bc9d14114a6b67367a24df21134d0564d6f08a0ad903d68f9b25e9d8b7f0790", - "level": "low", - "title": "Scheduled Task Creation Via Schtasks.EXE", - "author": "Florian Roth (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the creation of scheduled tasks by user accounts via the \"schtasks\" utility." - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "539dcb36e9155d97ed39c68182bde1733b86e2785cbef70586ce6a771645c425", - "level": "high", - "title": "Driver Load From A Temporary Directory", - "author": "Florian Roth (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects a driver load from a temporary directory" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "5ead81ee12f2097316af35270a1ac0f8623db054349c52ef366fc42a4b7d2de2", - "level": "critical", - "title": "Suspicious Double Extension File Execution", - "author": "Florian Roth (Nextron Systems), @blu3_team (idea), Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects suspicious use of an .exe extension after a non-executable file extension like .pdf.exe, a set of spaces or underlines to cloak the executable file in spear phishing campaigns" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "5f96c8ad390b56fba16309ec092ccde0290c7896bd2bfd7c49b738c77dc36bde", - "level": "high", - "title": "Network Communication With Crypto Mining Pool", - "author": "Florian Roth (Nextron Systems), Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects initiated network connections to crypto mining pools" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "6291f85314c7d9966be831c56d3cdfb30f42c84f599273e73dac5c95e1122abf", - "level": "medium", - "title": "Usage Of Web Request Commands And Cmdlets - ScriptBlock", - "author": "James Pemberton / @4A616D6573", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the use of various web request commands with commandline tools and Windows PowerShell cmdlets (including aliases) via PowerShell scriptblock logs" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "67ee86b34b3617ea45dec0ef09b7a71a5f44f5c010ccc9139d92f49685996f49", - "level": "low", - "title": "DMP/HDMP File Creation", - "author": "Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the creation of a file with the \".dmp\"/\".hdmp\" extension. Often created by software during a crash. Memory dumps can sometimes contain sensitive information such as credentials. It's best to determine the source of the crash." - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "71686ca6fd31ecd29454e2d39e38be5c971f96ad539e461b7d1d79b85f90182a", - "level": "high", - "title": "Service Binary in Suspicious Folder", - "author": "Florian Roth (Nextron Systems), frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detect the creation of a service with a service binary located in a suspicious directory" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "7752bbd4e940ef58081260cfa45b4ac6b149e2cecb836d79f5e61bfbdc237105", - "level": "low", - "title": "File And SubFolder Enumeration Via Dir Command", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects usage of the \"dir\" command part of Widows CMD with the \"/S\" command line flag in order to enumerate files in a specified directory and all subdirectories.\n" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "7ca43f2acf2c039e776af286dca2b5216d23967e6e8fe43dd5a5cc95f86e52e5", - "level": "low", - "title": "Modification of IE Registry Settings", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects modification of the registry settings used for Internet Explorer and other Windows components that use these settings. An attacker can abuse this registry key to add a domain to the trusted sites Zone or insert javascript for persistence" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "92acfd50d9fe4d995d6998a5346e4e031ea037d422458bb4f74555a52ffc886c", - "level": "high", - "title": "Script Interpreter Execution From Suspicious Folder", - "author": "Florian Roth (Nextron Systems), Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects a suspicious script execution in temporary folders or folders accessible by environment variables" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "96d2c399118cab5d249093badf4a85f0ef1889872b0191bdf131bcabc0994681", - "level": "high", - "title": "Suspicious Script Execution From Temp Folder", - "author": "Florian Roth (Nextron Systems), Max Altgelt (Nextron Systems), Tim Shelton", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects a suspicious script executions from temporary folder" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "c0bf6ba71da9d0f13368b0f1281354c8f9b3d491845ea5902282fece277ec655", - "level": "medium", - "title": "Use NTFS Short Name in Command Line", - "author": "frack113, Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detect use of the Windows 8.3 short name. Which could be used as a method to avoid command-line detection" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "c0cdd12b4805f2aebecbc0415332f2594acf1ae6d8d82da086eeac9a84bf0c37", - "level": "medium", - "title": "Regsvr32 DLL Execution With Uncommon Extension", - "author": "Florian Roth (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects a \"regsvr32\" execution where the DLL doesn't contain a common file extension." - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "d62173552d7fce98c24a7040b784edf35cc6650d2e68ecf2d04f40c58d58cfda", - "level": "high", - "title": "Scheduled TaskCache Change by Uncommon Program", - "author": "Syed Hasan (@syedhasan009)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Monitor the creation of a new key under 'TaskCache' when a new scheduled task is registered by a process that is not svchost.exe, which is suspicious" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "dac677b84d14788387f1c92fd6733396974f070639fca6be1bbf50df44b426cf", - "level": "medium", - "title": "PowerShell Web Download", - "author": "Florian Roth (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects suspicious ways to download files or content using PowerShell" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "e36b579d4bc4ef49ede1d82dd08ec1cba660d105c6f037d12ecf79b434617e88", - "level": "medium", - "title": "Suspicious Schtasks Schedule Type With High Privileges", - "author": "Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects scheduled task creations or modification to be run with high privileges on a suspicious schedule type" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "f92451c8957e89bb4e61e68433faeb8d7c1461c3b90d06b3403c8f3d87c728b8", - "level": "medium", - "title": "Usage Of Web Request Commands And Cmdlets", - "author": "James Pemberton / @4A616D6573, Endgame, JHasenbusch, oscd.community, Austin Songer @austinsonger", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the use of various web request commands with commandline tools and Windows PowerShell cmdlets (including aliases) via CommandLine" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "debug_codeview_guids": [ - { - "value": "4b1617f2-90a6-4430-be42-ec64df2175a0", - "count": 1, - "total_related": 74, - "prevalence": 0.013513513513513514 - }, - { - "value": "7683cbb1-e0d9-4527-9522-2487bcb04e84", - "count": 1, - "total_related": 1843, - "prevalence": 0.0005425935973955507 - }, - { - "value": "f7e3cdba-cee6-facd-3182-000d0af2efe5", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "debug_codeview_names": [ - { - "value": "C:\\b\\s\\w\\ir\\x\\w\\sdk\\out\\ReleaseX64\\dart_precompiled_runtime_product.exe.pdb", - "count": 1, - "total_related": 1291, - "prevalence": 0.000774593338497289 - }, - { - "value": "D:\\Projects\\WinRAR\\SFX\\build\\sfxrar64\\Release\\sfxrar.pdb", - "count": 1, - "total_related": 4147, - "prevalence": 0.00024113817217265494 - }, - { - "value": "wextract.pdb", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "debug_timestamps": [ - { - "value": "Tue Sep 13 23:30:57 2022", - "count": 79, - "total_related": 864, - "prevalence": 0.09143518518518519 - }, - { - "value": "Fri Sep 9 01:27:01 2022", - "count": 61, - "total_related": 671, - "prevalence": 0.09090909090909091 - }, - { - "value": "Thu Jul 14 10:29:09 2022", - "count": 12, - "total_related": 245, - "prevalence": 0.04897959183673469 - }, - { - "value": "Sat Jun 11 09:50:55 2022", - "count": 6, - "total_related": 79, - "prevalence": 0.0759493670886076 - }, - { - "value": "Mon Jun 27 14:55:54 2022", - "count": 4, - "total_related": 21, - "prevalence": 0.19047619047619047 - }, - { - "value": "Tue Sep 13 23:31:10 2022", - "count": 4, - "total_related": 39, - "prevalence": 0.10256410256410256 - }, - { - "value": "Tue Sep 13 23:31:03 2022", - "count": 3, - "total_related": 93, - "prevalence": 0.03225806451612903 - }, - { - "value": "Mon Dec 30 15:52:29 2013", - "count": 2, - "total_related": 64093, - "prevalence": 3.1204655734635605e-5 - }, - { - "value": "Thu May 29 22:50:42 2025", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Thu Sep 8 23:42:25 2022", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Sat Jun 11 09:30:22 2022", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "Sat Jun 11 09:30:30 2022", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "Fri Sep 9 01:26:27 2022", - "count": 1, - "total_related": 31, - "prevalence": 0.03225806451612903 - }, - { - "value": "Mon Jun 12 19:35:16 2023", - "count": 1, - "total_related": 74, - "prevalence": 0.013513513513513514 - }, - { - "value": "Fri Sep 9 01:27:08 2022", - "count": 1, - "total_related": 87, - "prevalence": 0.011494252873563218 - }, - { - "value": "Thu Mar 20 10:01:29 2025", - "count": 1, - "total_related": 1845, - "prevalence": 0.0005420054200542005 - }, - { - "value": "Tue May 24 22:49:06 2022", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "dropped_files_path": [ - { - "value": "C:\\Program Files\\Windows Mail\\en-US\\Restore-My-Files.txt", - "count": 2, - "total_related": 155, - "prevalence": 0.012903225806451613 - }, - { - "value": "C:\\Program Files\\WindowsPowerShell\\Modules\\Pester\\3.4.0\\Restore-My-Files.txt", - "count": 2, - "total_related": 216, - "prevalence": 0.009259259259259259 - }, - { - "value": "C:\\Program Files\\WindowsPowerShell\\Modules\\Pester\\3.4.0\\Snippets\\Restore-My-Files.txt", - "count": 2, - "total_related": 216, - "prevalence": 0.009259259259259259 - }, - { - "value": "C:\\Program Files\\WindowsPowerShell\\Modules\\Pester\\3.4.0\\en-US\\Restore-My-Files.txt", - "count": 2, - "total_related": 216, - "prevalence": 0.009259259259259259 - }, - { - "value": "C:\\Program Files\\WindowsPowerShell\\Modules\\Microsoft.PowerShell.Operation.Validation\\1.0.1\\Restore-My-Files.txt", - "count": 2, - "total_related": 217, - "prevalence": 0.009216589861751152 - }, - { - "value": "C:\\Program Files\\WindowsPowerShell\\Modules\\Microsoft.PowerShell.Operation.Validation\\1.0.1\\Test\\Modules\\Example2.Diagnostics\\1.0.1\\Restore-My-Files.txt", - "count": 2, - "total_related": 217, - "prevalence": 0.009216589861751152 - }, - { - "value": "C:\\Program Files\\WindowsPowerShell\\Modules\\PSReadline\\1.2\\Restore-My-Files.txt", - "count": 2, - "total_related": 223, - "prevalence": 0.008968609865470852 - }, - { - "value": "C:\\Program Files\\WindowsPowerShell\\Modules\\PackageManagement\\1.0.0.1\\Restore-My-Files.txt", - "count": 2, - "total_related": 225, - "prevalence": 0.008888888888888889 - }, - { - "value": "C:\\Program Files\\WindowsPowerShell\\Modules\\PowerShellGet\\1.0.0.1\\Restore-My-Files.txt", - "count": 2, - "total_related": 225, - "prevalence": 0.008888888888888889 - }, - { - "value": "C:\\Program Files\\WindowsPowerShell\\Modules\\PowerShellGet\\1.0.0.1\\en-US\\Restore-My-Files.txt", - "count": 2, - "total_related": 225, - "prevalence": 0.008888888888888889 - }, - { - "value": "C:\\Program Files\\Windows Security\\BrowserCore\\Restore-My-Files.txt", - "count": 2, - "total_related": 232, - "prevalence": 0.008620689655172414 - }, - { - "value": "C:\\Program Files\\Windows Security\\BrowserCore\\en-US\\Restore-My-Files.txt", - "count": 2, - "total_related": 232, - "prevalence": 0.008620689655172414 - }, - { - "value": "C:\\Program Files\\Windows Defender Advanced Threat Protection\\en-US\\Restore-My-Files.txt", - "count": 2, - "total_related": 233, - "prevalence": 0.008583690987124463 - }, - { - "value": "C:\\Program Files\\Windows Defender\\en-US\\Restore-My-Files.txt", - "count": 2, - "total_related": 233, - "prevalence": 0.008583690987124463 - }, - { - "value": "C:\\Program Files\\Windows Media Player\\en-US\\Restore-My-Files.txt", - "count": 2, - "total_related": 233, - "prevalence": 0.008583690987124463 - }, - { - "value": "C:\\Program Files\\Windows Photo Viewer\\en-US\\Restore-My-Files.txt", - "count": 2, - "total_related": 233, - "prevalence": 0.008583690987124463 - }, - { - "value": "C:\\Program Files\\Windows Media Player\\Media Renderer\\Restore-My-Files.txt", - "count": 2, - "total_related": 234, - "prevalence": 0.008547008547008548 - }, - { - "value": "C:\\Program Files\\Windows Media Player\\Skins\\Restore-My-Files.txt", - "count": 2, - "total_related": 234, - "prevalence": 0.008547008547008548 - }, - { - "value": "C:\\Program Files\\Windows Media Player\\Network Sharing\\Restore-My-Files.txt", - "count": 2, - "total_related": 235, - "prevalence": 0.00851063829787234 - }, - { - "value": "C:\\Users\\user\\AppData\\Local\\Adobe\\Acrobat\\DC\\SOPHIA\\Reader\\Restore-My-Files.txt", - "count": 2, - "total_related": 369, - "prevalence": 0.005420054200542005 - }, - { - "value": "C:\\Users\\user\\AppData\\Local\\Adobe\\Acrobat\\DC\\SOPHIA\\Reader\\Files\\Restore-My-Files.txt", - "count": 2, - "total_related": 371, - "prevalence": 0.005390835579514825 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\js\\app\\dev\\nls\\pl-pl\\Restore-My-Files.txt", - "count": 2, - "total_related": 380, - "prevalence": 0.005263157894736842 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\js\\app\\dev\\nls\\nl-nl\\Restore-My-Files.txt", - "count": 2, - "total_related": 384, - "prevalence": 0.005208333333333333 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\js\\app\\dev\\nls\\nb-no\\Restore-My-Files.txt", - "count": 2, - "total_related": 390, - "prevalence": 0.005128205128205128 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\js\\app\\dev\\nls\\ja-jp\\Restore-My-Files.txt", - "count": 2, - "total_related": 391, - "prevalence": 0.005115089514066497 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\js\\app\\dev\\nls\\ko-kr\\Restore-My-Files.txt", - "count": 2, - "total_related": 391, - "prevalence": 0.005115089514066497 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\js\\app\\dev\\nls\\it-it\\Restore-My-Files.txt", - "count": 2, - "total_related": 392, - "prevalence": 0.00510204081632653 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\js\\app\\dev\\nls\\hu-hu\\Restore-My-Files.txt", - "count": 2, - "total_related": 395, - "prevalence": 0.005063291139240506 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\js\\app\\dev\\nls\\hr-hr\\Restore-My-Files.txt", - "count": 2, - "total_related": 397, - "prevalence": 0.005037783375314861 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\js\\app\\dev\\nls\\fr-ma\\Restore-My-Files.txt", - "count": 2, - "total_related": 402, - "prevalence": 0.004975124378109453 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\js\\app\\dev\\nls\\fr-fr\\Restore-My-Files.txt", - "count": 2, - "total_related": 406, - "prevalence": 0.0049261083743842365 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\js\\app\\dev\\nls\\fi-fi\\Restore-My-Files.txt", - "count": 2, - "total_related": 410, - "prevalence": 0.004878048780487805 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\js\\app\\dev\\nls\\es-es\\Restore-My-Files.txt", - "count": 2, - "total_related": 411, - "prevalence": 0.004866180048661801 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\js\\app\\dev\\nls\\eu-es\\Restore-My-Files.txt", - "count": 2, - "total_related": 411, - "prevalence": 0.004866180048661801 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\js\\app\\dev\\nls\\en-il\\Restore-My-Files.txt", - "count": 2, - "total_related": 416, - "prevalence": 0.004807692307692308 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\js\\app\\dev\\nls\\en-gb\\Restore-My-Files.txt", - "count": 2, - "total_related": 419, - "prevalence": 0.00477326968973747 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\js\\app\\dev\\nls\\de-de\\Restore-My-Files.txt", - "count": 2, - "total_related": 420, - "prevalence": 0.004761904761904762 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\js\\app\\dev\\nls\\en-ae\\Restore-My-Files.txt", - "count": 2, - "total_related": 420, - "prevalence": 0.004761904761904762 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\js\\app\\dev\\nls\\ca-es\\Restore-My-Files.txt", - "count": 2, - "total_related": 424, - "prevalence": 0.0047169811320754715 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\js\\app\\dev\\nls\\cs-cz\\Restore-My-Files.txt", - "count": 2, - "total_related": 424, - "prevalence": 0.0047169811320754715 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\js\\app\\dev\\nls\\da-dk\\Restore-My-Files.txt", - "count": 2, - "total_related": 424, - "prevalence": 0.0047169811320754715 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\images\\win8-scrollbar\\themes\\dark\\Restore-My-Files.txt", - "count": 2, - "total_related": 442, - "prevalence": 0.004524886877828055 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\images\\win8-scrollbar\\Restore-My-Files.txt", - "count": 2, - "total_related": 466, - "prevalence": 0.004291845493562232 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\images\\win-scrollbar\\themes\\dark\\Restore-My-Files.txt", - "count": 2, - "total_related": 490, - "prevalence": 0.004081632653061225 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\images\\win-scrollbar\\Restore-My-Files.txt", - "count": 2, - "total_related": 505, - "prevalence": 0.0039603960396039604 - }, - { - "value": "C:\\Users\\user\\AppData\\Local\\D3DSCache\\e8010882af4f153f\\Restore-My-Files.txt", - "count": 2, - "total_related": 532, - "prevalence": 0.0037593984962406013 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\images\\themes\\dark\\Restore-My-Files.txt", - "count": 2, - "total_related": 535, - "prevalence": 0.003738317757009346 - }, - { - "value": "C:\\Users\\user\\AppData\\Local\\MicrosoftEdge\\SharedCacheContainers\\MicrosoftEdge_iecompat\\Restore-My-Files.txt", - "count": 2, - "total_related": 548, - "prevalence": 0.0036496350364963502 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\images\\hi_contrast\\Restore-My-Files.txt", - "count": 2, - "total_related": 550, - "prevalence": 0.0036363636363636364 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\images\\file_types\\themes\\dark\\Restore-My-Files.txt", - "count": 2, - "total_related": 558, - "prevalence": 0.0035842293906810036 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\images\\file_types\\hi_contrast\\Restore-My-Files.txt", - "count": 2, - "total_related": 560, - "prevalence": 0.0035714285714285713 - }, - { - "value": "C:\\Users\\user\\AppData\\Local\\D3DSCache\\ecbf0d5a3a180bb\\Restore-My-Files.txt", - "count": 2, - "total_related": 562, - "prevalence": 0.0035587188612099642 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\images\\file_types\\Restore-My-Files.txt", - "count": 2, - "total_related": 564, - "prevalence": 0.0035460992907801418 - }, - { - "value": "C:\\Users\\user\\AppData\\Local\\ConnectedDevicesPlatform\\L.user\\Restore-My-Files.txt", - "count": 2, - "total_related": 564, - "prevalence": 0.0035460992907801418 - }, - { - "value": "C:\\Users\\user\\AppData\\Local\\D3DSCache\\3534848bb9f4cb71\\Restore-My-Files.txt", - "count": 2, - "total_related": 564, - "prevalence": 0.0035460992907801418 - }, - { - "value": "C:\\Users\\user\\AppData\\Local\\ConnectedDevicesPlatform\\Restore-My-Files.txt", - "count": 2, - "total_related": 572, - "prevalence": 0.0034965034965034965 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\images\\Restore-My-Files.txt", - "count": 2, - "total_related": 581, - "prevalence": 0.0034423407917383822 - }, - { - "value": "C:\\Users\\user\\AppData\\Local\\Comms\\UnistoreDB\\Restore-My-Files.txt", - "count": 2, - "total_related": 583, - "prevalence": 0.003430531732418525 - }, - { - "value": "C:\\Users\\user\\AppData\\Local\\Adobe\\Color\\Restore-My-Files.txt", - "count": 2, - "total_related": 589, - "prevalence": 0.003395585738539898 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\css\\Restore-My-Files.txt", - "count": 2, - "total_related": 590, - "prevalence": 0.003389830508474576 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\Restore-My-Files.txt", - "count": 2, - "total_related": 593, - "prevalence": 0.003372681281618887 - }, - { - "value": "C:\\Users\\user\\AppData\\Local\\Adobe\\Acrobat\\DC\\Cache\\Restore-My-Files.txt", - "count": 2, - "total_related": 598, - "prevalence": 0.0033444816053511705 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\UIThemes\\Restore-My-Files.txt", - "count": 2, - "total_related": 601, - "prevalence": 0.0033277870216306157 - }, - { - "value": "C:\\Users\\user\\AppData\\Local\\Adobe\\Acrobat\\DC\\Restore-My-Files.txt", - "count": 2, - "total_related": 603, - "prevalence": 0.003316749585406302 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\Tracker\\Restore-My-Files.txt", - "count": 2, - "total_related": 625, - "prevalence": 0.0032 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\plug_ins3d\\Restore-My-Files.txt", - "count": 2, - "total_related": 630, - "prevalence": 0.0031746031746031746 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\plug_ins\\Multimedia\\MPP\\Restore-My-Files.txt", - "count": 2, - "total_related": 630, - "prevalence": 0.0031746031746031746 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\plug_ins\\Annotations\\Stamps\\Restore-My-Files.txt", - "count": 2, - "total_related": 633, - "prevalence": 0.00315955766192733 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\plug_ins\\AcroForm\\PMP\\Restore-My-Files.txt", - "count": 2, - "total_related": 635, - "prevalence": 0.0031496062992125984 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\plug_ins\\Annotations\\Stamps\\ENU\\Restore-My-Files.txt", - "count": 2, - "total_related": 635, - "prevalence": 0.0031496062992125984 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\plug_ins\\AcroForm\\Restore-My-Files.txt", - "count": 2, - "total_related": 639, - "prevalence": 0.003129890453834116 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\plug_ins\\Restore-My-Files.txt", - "count": 2, - "total_related": 639, - "prevalence": 0.003129890453834116 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\Legal\\ENU\\Restore-My-Files.txt", - "count": 2, - "total_related": 641, - "prevalence": 0.0031201248049922 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\Browser\\WCChromeExtn\\Restore-My-Files.txt", - "count": 2, - "total_related": 642, - "prevalence": 0.003115264797507788 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\AcroCEF\\Restore-My-Files.txt", - "count": 2, - "total_related": 644, - "prevalence": 0.003105590062111801 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\AcroCEF\\locales\\Restore-My-Files.txt", - "count": 2, - "total_related": 644, - "prevalence": 0.003105590062111801 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\Locale\\en_US\\Restore-My-Files.txt", - "count": 2, - "total_related": 645, - "prevalence": 0.0031007751937984496 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\IDTemplates\\ENU\\Restore-My-Files.txt", - "count": 2, - "total_related": 646, - "prevalence": 0.0030959752321981426 - }, - { - "value": "C:\\Program Files\\Microsoft Office\\Office16\\OneNote\\Restore-My-Files.txt", - "count": 2, - "total_related": 656, - "prevalence": 0.003048780487804878 - }, - { - "value": "C:\\Program Files\\Java\\jre1.8.0_121\\lib\\security\\Restore-My-Files.txt", - "count": 2, - "total_related": 660, - "prevalence": 0.0030303030303030303 - }, - { - "value": "C:\\Program Files\\Java\\jre1.8.0_121\\lib\\management\\Restore-My-Files.txt", - "count": 2, - "total_related": 663, - "prevalence": 0.0030165912518853697 - }, - { - "value": "C:\\Program Files\\Microsoft Office\\Office16\\1033\\Restore-My-Files.txt", - "count": 2, - "total_related": 664, - "prevalence": 0.0030120481927710845 - }, - { - "value": "C:\\Program Files\\Java\\jre1.8.0_121\\lib\\jfr\\Restore-My-Files.txt", - "count": 2, - "total_related": 665, - "prevalence": 0.0030075187969924814 - }, - { - "value": "C:\\Program Files\\Java\\jre1.8.0_121\\lib\\images\\cursors\\Restore-My-Files.txt", - "count": 2, - "total_related": 667, - "prevalence": 0.0029985007496251873 - }, - { - "value": "C:\\Program Files\\Java\\jre1.8.0_121\\lib\\ext\\Restore-My-Files.txt", - "count": 2, - "total_related": 668, - "prevalence": 0.0029940119760479044 - }, - { - "value": "C:\\Program Files\\Java\\jre1.8.0_121\\lib\\Restore-My-Files.txt", - "count": 2, - "total_related": 669, - "prevalence": 0.0029895366218236174 - }, - { - "value": "C:\\Program Files\\Java\\jre1.8.0_121\\lib\\amd64\\Restore-My-Files.txt", - "count": 2, - "total_related": 669, - "prevalence": 0.0029895366218236174 - }, - { - "value": "C:\\Program Files\\Java\\jre1.8.0_121\\lib\\deploy\\Restore-My-Files.txt", - "count": 2, - "total_related": 669, - "prevalence": 0.0029895366218236174 - }, - { - "value": "C:\\Program Files\\Java\\jre1.8.0_121\\bin\\server\\Restore-My-Files.txt", - "count": 2, - "total_related": 670, - "prevalence": 0.0029850746268656717 - }, - { - "value": "C:\\Program Files\\Java\\jre1.8.0_121\\lib\\cmm\\Restore-My-Files.txt", - "count": 2, - "total_related": 670, - "prevalence": 0.0029850746268656717 - }, - { - "value": "C:\\Program Files\\Microsoft Office\\Office16\\Restore-My-Files.txt", - "count": 2, - "total_related": 680, - "prevalence": 0.0029411764705882353 - }, - { - "value": "C:\\Program Files\\Java\\jre1.8.0_121\\Restore-My-Files.txt", - "count": 2, - "total_related": 685, - "prevalence": 0.00291970802919708 - }, - { - "value": "%SAMPLEPATH%\\Restore-My-Files.txt", - "count": 2, - "total_related": 702, - "prevalence": 0.002849002849002849 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\AcroApp\\ENU\\Restore-My-Files.txt", - "count": 2, - "total_related": 709, - "prevalence": 0.0028208744710860366 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\Restore-My-Files.txt", - "count": 2, - "total_related": 725, - "prevalence": 0.002758620689655172 - }, - { - "value": "C:\\Recovery\\Logs\\Restore-My-Files.txt", - "count": 2, - "total_related": 766, - "prevalence": 0.0026109660574412533 - }, - { - "value": "C:\\Users\\Default\\Restore-My-Files.txt", - "count": 2, - "total_related": 831, - "prevalence": 0.0024067388688327317 - }, - { - "value": "C:\\$SysReset\\Restore-My-Files.txt", - "count": 2, - "total_related": 875, - "prevalence": 0.002285714285714286 - }, - { - "value": "C:\\$SysReset\\Logs\\Restore-My-Files.txt", - "count": 2, - "total_related": 925, - "prevalence": 0.002162162162162162 - }, - { - "value": "C:\\$SysReset\\AppxLogs\\Restore-My-Files.txt", - "count": 2, - "total_related": 929, - "prevalence": 0.002152852529601722 - } - ], - "exiftool_create_dates": [ - { - "value": "2025:04:18 08:58:36", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - } - ], - "filecondis_dhash": [ - { - "value": "00383e3e3e1d2400", - "count": 27, - "total_related": 230, - "prevalence": 0.11739130434782609 - }, - { - "value": "003c3d3e2e2f2c24", - "count": 19, - "total_related": 270, - "prevalence": 0.07037037037037037 - }, - { - "value": "7c7e3c1e0e1d1800", - "count": 15, - "total_related": 21, - "prevalence": 0.7142857142857143 - }, - { - "value": "20383e3e3e1d2400", - "count": 14, - "total_related": 81, - "prevalence": 0.1728395061728395 - }, - { - "value": "003c3d3e2e2f2c0a", - "count": 11, - "total_related": 18, - "prevalence": 0.6111111111111112 - }, - { - "value": "00343e3e3e1d2400", - "count": 9, - "total_related": 56, - "prevalence": 0.16071428571428573 - }, - { - "value": "7e7a3c1e0e1c1800", - "count": 7, - "total_related": 60, - "prevalence": 0.11666666666666667 - }, - { - "value": "00303e3e3e1d2400", - "count": 7, - "total_related": 98, - "prevalence": 0.07142857142857142 - }, - { - "value": "003c3e3e3e1d2400", - "count": 6, - "total_related": 52, - "prevalence": 0.11538461538461539 - }, - { - "value": "00383e3e3e1d3400", - "count": 6, - "total_related": 55, - "prevalence": 0.10909090909090909 - }, - { - "value": "003a3e3e3e1d2400", - "count": 5, - "total_related": 40, - "prevalence": 0.125 - }, - { - "value": "003a3c3e3e1d2400", - "count": 5, - "total_related": 47, - "prevalence": 0.10638297872340426 - }, - { - "value": "20343e3e3e1d3400", - "count": 4, - "total_related": 5, - "prevalence": 0.8 - }, - { - "value": "20363c3e3e1d2400", - "count": 4, - "total_related": 8, - "prevalence": 0.5 - }, - { - "value": "20343e3e3e1d2400", - "count": 4, - "total_related": 22, - "prevalence": 0.18181818181818182 - }, - { - "value": "10383e3e3e1d2400", - "count": 3, - "total_related": 7, - "prevalence": 0.42857142857142855 - }, - { - "value": "00303e3e3e1d1c04", - "count": 3, - "total_related": 8, - "prevalence": 0.375 - }, - { - "value": "003c3e3c3d3a2400", - "count": 3, - "total_related": 9, - "prevalence": 0.3333333333333333 - }, - { - "value": "203a3c3e3e1d3400", - "count": 3, - "total_related": 13, - "prevalence": 0.23076923076923078 - }, - { - "value": "203a3e3e3e1d2400", - "count": 3, - "total_related": 15, - "prevalence": 0.2 - }, - { - "value": "20303e3e3e1d2400", - "count": 3, - "total_related": 18, - "prevalence": 0.16666666666666666 - }, - { - "value": "20383e3e3e1d3400", - "count": 3, - "total_related": 25, - "prevalence": 0.12 - }, - { - "value": "00303e3e3e1d1400", - "count": 3, - "total_related": 58, - "prevalence": 0.05172413793103448 - }, - { - "value": "00383e3e3e1d1400", - "count": 3, - "total_related": 161, - "prevalence": 0.018633540372670808 - }, - { - "value": "00383e3f1c1d1a04", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "40303e3e3e1d2400", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "10303e3e3e1d2400", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "10363e3e3e1d2400", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "7e7e3c1e0e1c1800", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "00383e3c3d3a2400", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "003c3d3e2e272c22", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "20323c3e3e1d2400", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "00323e3e3e1d2400", - "count": 2, - "total_related": 12, - "prevalence": 0.16666666666666666 - }, - { - "value": "003a3c3e3e1d3400", - "count": 2, - "total_related": 12, - "prevalence": 0.16666666666666666 - }, - { - "value": "003c3e1e0c372400", - "count": 2, - "total_related": 13, - "prevalence": 0.15384615384615385 - }, - { - "value": "203a3c3e3e1d2400", - "count": 2, - "total_related": 15, - "prevalence": 0.13333333333333333 - }, - { - "value": "00383e3e3c1d3400", - "count": 2, - "total_related": 17, - "prevalence": 0.11764705882352941 - }, - { - "value": "00003c1e1c1f0e00", - "count": 2, - "total_related": 1378, - "prevalence": 0.001451378809869376 - }, - { - "value": "20303c3e3c1d3400", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "20343e3e3c1d1400", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "20363c3e3e1d2c00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "20383e3e3c1d3600", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "203a3e3ebe1d2400", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "203e3c3e3e1d2400", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "30383e3c3c3d3400", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "403a3c3e3e1d2400", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "7a7e3c1c1e9d4800", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "00323e3e1e1d2c00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "00343c3e3c1d2400", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "003c3d3e2e270c22", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "003c3d3e2e2f2c22", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "04383e3e3e1d2c00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "10303e3e3e1d2c00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "28343e3e3e1d2400", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "40343e3e3e1d2c00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "407c3e1c0e0d4404", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "00323e3e3e1d3400", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "10343e3e3e1d2400", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "303c3e3e3c1d1400", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "7e7e3c1e0e355800", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "003c3e3e3c1d1400", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "20343e3c3c1d1400", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "203c3e3e3c1d3400", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "203c3e3e3e3d0c00", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "303c3e3e3c1d3400", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "20383e3e3c1d1400", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "203a3e3e3e3d2400", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "203c3e3e3e1d2c00", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "303c3e3c3c1d1400", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "003c3e3e3e1d2c00", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "003c3e3e3e1d3400", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "203a3e3e3e1d2c00", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "203c3e3c3d3a2400", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "00343e3e3e1d3400", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "003c3c3e3c2d0400", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "00383c3e3c2d2400", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "00323c3e3e1d2400", - "count": 1, - "total_related": 17, - "prevalence": 0.058823529411764705 - }, - { - "value": "00383e3e3e3d1c00", - "count": 1, - "total_related": 20, - "prevalence": 0.05 - }, - { - "value": "20383e3e3e1d2c00", - "count": 1, - "total_related": 24, - "prevalence": 0.041666666666666664 - }, - { - "value": "203c3e3e3e1d2400", - "count": 1, - "total_related": 35, - "prevalence": 0.02857142857142857 - }, - { - "value": "00101e1e1e1f1408", - "count": 1, - "total_related": 43, - "prevalence": 0.023255813953488372 - }, - { - "value": "00003c1e0e261300", - "count": 1, - "total_related": 125, - "prevalence": 0.008 - }, - { - "value": "00343c3e3d340800", - "count": 1, - "total_related": 186, - "prevalence": 0.005376344086021506 - }, - { - "value": "00001e1e1e1f1408", - "count": 1, - "total_related": 212, - "prevalence": 0.0047169811320754715 - }, - { - "value": "003c3c3c3d3c0800", - "count": 1, - "total_related": 295, - "prevalence": 0.003389830508474576 - }, - { - "value": "000000000f0e0d0a", - "count": 1, - "total_related": 1353, - "prevalence": 0.0007390983000739098 - }, - { - "value": "000000000f07070a", - "count": 1, - "total_related": 1734, - "prevalence": 0.0005767012687427913 - }, - { - "value": "0000001c1d1e0800", - "count": 1, - "total_related": 2659, - "prevalence": 0.000376081233546446 - }, - { - "value": "0000101e1e1e1d00", - "count": 1, - "total_related": 3067, - "prevalence": 0.00032605151613955004 - }, - { - "value": "0000000c0e0e0904", - "count": 1, - "total_related": 3715, - "prevalence": 0.00026917900403768504 - }, - { - "value": "0000101e1e1e1500", - "count": 1, - "total_related": 5671, - "prevalence": 0.00017633574325515782 - }, - { - "value": "0000000e0e0f0e04", - "count": 1, - "total_related": 6194, - "prevalence": 0.00016144656118824668 - }, - { - "value": "0000001c1c090000", - "count": 1, - "total_related": 20970, - "prevalence": 4.768717215069146e-5 - }, - { - "value": "000000000e0e0d00", - "count": 1, - "total_related": 37916, - "prevalence": 2.637409009389176e-5 - }, - { - "value": "0000000003030302", - "count": 1, - "total_related": 74285, - "prevalence": 1.346166790065289e-5 - }, - { - "value": "0000000000070706", - "count": 1, - "total_related": 89112, - "prevalence": 1.1221833198671336e-5 - }, - { - "value": "0000000000000000", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "000000000c0d0400", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "000000000e0f0600", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "0000001c0e0d0c00", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "netassembly_mvid": [ - { - "value": "369bed14-2d1e-4092-8659-3aa80f8caaa6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - } - ], - "office_application_names": [ - { - "value": "dwadw", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - } - ], - "office_creation_datetimes": [ - { - "value": "2025-04-18 08:58:36", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - } - ], - "office_last_saved": [ - { - "value": "2025-04-18 08:58:36", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - } - ], - "pe_info_imports": [ - { - "value": "KERNEL32.dll", - "count": 205, - "total_related": 100000, - "prevalence": 0.00205 - }, - { - "value": "USER32.dll", - "count": 180, - "total_related": 100000, - "prevalence": 0.0018 - }, - { - "value": "gdi32.dll", - "count": 156, - "total_related": 100000, - "prevalence": 0.00156 - }, - { - "value": "ADVAPI32.dll", - "count": 50, - "total_related": 100000, - "prevalence": 0.0005 - }, - { - "value": "ole32.dll", - "count": 48, - "total_related": 100000, - "prevalence": 0.00048 - }, - { - "value": "SHLWAPI.dll", - "count": 46, - "total_related": 100000, - "prevalence": 0.00046 - }, - { - "value": "SHELL32.dll", - "count": 28, - "total_related": 100000, - "prevalence": 0.00028 - }, - { - "value": "IPHLPAPI.DLL", - "count": 27, - "total_related": 100000, - "prevalence": 0.00027 - }, - { - "value": "msvcrt.dll", - "count": 27, - "total_related": 100000, - "prevalence": 0.00027 - }, - { - "value": "MPR.dll", - "count": 26, - "total_related": 100000, - "prevalence": 0.00026 - }, - { - "value": "CRYPT32.dll", - "count": 25, - "total_related": 100000, - "prevalence": 0.00025 - }, - { - "value": "WS2_32.dll", - "count": 25, - "total_related": 100000, - "prevalence": 0.00025 - }, - { - "value": "gdiplus.dll", - "count": 25, - "total_related": 100000, - "prevalence": 0.00025 - }, - { - "value": "NETAPI32.dll", - "count": 24, - "total_related": 100000, - "prevalence": 0.00024 - }, - { - "value": "ntdll.dll", - "count": 24, - "total_related": 100000, - "prevalence": 0.00024 - }, - { - "value": "ACTIVEDS.dll", - "count": 21, - "total_related": 100000, - "prevalence": 0.00021 - }, - { - "value": "kernel32.dll", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "shell32.dll", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "KERNEL32.DLL", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "PSAPI.DLL", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "advapi32.dll", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "oleaut32.dll", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "user32.dll", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "COMCTL32.dll", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "GDI32.dll", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "OLEAUT32.dll", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "VERSION.dll", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "COMDLG32.dll", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "USER32.DLL", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "USERENV.dll", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "UxTheme.dll", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "WININET.dll", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "WINMM.dll", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "WSOCK32.dll", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "WTSAPI32.dll", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "Cabinet.dll", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "RPCRT4.dll", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "bcrypt.dll", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "dbghelp.dll", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "mscoree.dll", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "pe_info_exports": [ - { - "value": "gdll", - "count": 5, - "total_related": 233, - "prevalence": 0.02145922746781116 - }, - { - "value": "sdll", - "count": 5, - "total_related": 234, - "prevalence": 0.021367521367521368 - }, - { - "value": "wdll", - "count": 5, - "total_related": 234, - "prevalence": 0.021367521367521368 - }, - { - "value": "pmod", - "count": 5, - "total_related": 236, - "prevalence": 0.0211864406779661 - }, - { - "value": "gdel", - "count": 5, - "total_related": 238, - "prevalence": 0.02100840336134454 - }, - { - "value": "gmod", - "count": 5, - "total_related": 296, - "prevalence": 0.016891891891891893 - }, - { - "value": "del", - "count": 5, - "total_related": 475, - "prevalence": 0.010526315789473684 - }, - { - "value": "?loader_main_thunk@@YAHXZ", - "count": 2, - "total_related": 519, - "prevalence": 0.0038535645472061657 - }, - { - "value": "Dart_DebugNameToCString", - "count": 1, - "total_related": 1651, - "prevalence": 0.0006056935190793458 - }, - { - "value": "Dart_DisableHeapSampling", - "count": 1, - "total_related": 1932, - "prevalence": 0.0005175983436853002 - }, - { - "value": "Dart_EnableHeapSampling", - "count": 1, - "total_related": 1932, - "prevalence": 0.0005175983436853002 - }, - { - "value": "Dart_CurrentIsolateGroupId", - "count": 1, - "total_related": 2274, - "prevalence": 0.00043975373790677223 - }, - { - "value": "Dart_GetCurrentUserTag", - "count": 1, - "total_related": 2975, - "prevalence": 0.0003361344537815126 - }, - { - "value": "Dart_GetDefaultUserTag", - "count": 1, - "total_related": 2975, - "prevalence": 0.0003361344537815126 - }, - { - "value": "Dart_GetUserTagLabel", - "count": 1, - "total_related": 2975, - "prevalence": 0.0003361344537815126 - }, - { - "value": "Dart_CreateIsolateInGroup", - "count": 1, - "total_related": 3395, - "prevalence": 0.0002945508100147275 - }, - { - "value": "Dart_DeleteFinalizableHandle", - "count": 1, - "total_related": 3582, - "prevalence": 0.00027917364600781687 - }, - { - "value": "Dart_CreateAppAOTSnapshotAsAssemblies", - "count": 1, - "total_related": 3583, - "prevalence": 0.00027909572983533354 - }, - { - "value": "Dart_CreateAppAOTSnapshotAsElfs", - "count": 1, - "total_related": 3583, - "prevalence": 0.00027909572983533354 - }, - { - "value": "Dart_DeferredLoadComplete", - "count": 1, - "total_related": 3583, - "prevalence": 0.00027909572983533354 - }, - { - "value": "Dart_DeferredLoadCompleteError", - "count": 1, - "total_related": 3583, - "prevalence": 0.00027909572983533354 - }, - { - "value": "Dart_DetectNullSafety", - "count": 1, - "total_related": 3613, - "prevalence": 0.0002767783005812344 - }, - { - "value": "Dart_CurrentIsolateGroup", - "count": 1, - "total_related": 3663, - "prevalence": 0.000273000273000273 - }, - { - "value": "Dart_GetNonNullableType", - "count": 1, - "total_related": 3667, - "prevalence": 0.0002727024815925825 - }, - { - "value": "Dart_GetNullableType", - "count": 1, - "total_related": 3667, - "prevalence": 0.0002727024815925825 - }, - { - "value": "Dart_CreateIsolateGroup", - "count": 1, - "total_related": 3768, - "prevalence": 0.0002653927813163482 - }, - { - "value": "Dart_CreateIsolateGroupFromKernel", - "count": 1, - "total_related": 3768, - "prevalence": 0.0002653927813163482 - }, - { - "value": "Dart_CurrentIsolateGroupData", - "count": 1, - "total_related": 3768, - "prevalence": 0.0002653927813163482 - }, - { - "value": "Dart_GetNativeIsolateGroupData", - "count": 1, - "total_related": 3768, - "prevalence": 0.0002653927813163482 - }, - { - "value": "Dart_ExecuteInternalCommand", - "count": 1, - "total_related": 3790, - "prevalence": 0.0002638522427440633 - }, - { - "value": "Dart_CreateAppAOTSnapshotAsElf", - "count": 1, - "total_related": 3794, - "prevalence": 0.0002635740643120717 - }, - { - "value": "Dart_FinalizeAllClasses", - "count": 1, - "total_related": 3794, - "prevalence": 0.0002635740643120717 - }, - { - "value": "Dart_AddSymbols", - "count": 1, - "total_related": 3818, - "prevalence": 0.00026191723415400735 - }, - { - "value": "Dart_CreateCoreJITSnapshotAsBlobs", - "count": 1, - "total_related": 4463, - "prevalence": 0.00022406453058480843 - }, - { - "value": "Dart_DefaultCanonicalizeUrl", - "count": 1, - "total_related": 4772, - "prevalence": 0.00020955574182732607 - }, - { - "value": "Dart_ClassLibrary", - "count": 1, - "total_related": 5095, - "prevalence": 0.00019627085377821394 - }, - { - "value": "Dart_GetStaticMethodClosure", - "count": 1, - "total_related": 5095, - "prevalence": 0.00019627085377821394 - }, - { - "value": "Dart_ClassName", - "count": 1, - "total_related": 5106, - "prevalence": 0.00019584802193497845 - }, - { - "value": "Dart_CompileToKernel", - "count": 1, - "total_related": 5134, - "prevalence": 0.00019477989871445267 - }, - { - "value": "Dart_ClosureFunction", - "count": 1, - "total_related": 5155, - "prevalence": 0.00019398642095053346 - }, - { - "value": "Dart_FunctionIsStatic", - "count": 1, - "total_related": 5155, - "prevalence": 0.00019398642095053346 - }, - { - "value": "Dart_FunctionName", - "count": 1, - "total_related": 5155, - "prevalence": 0.00019398642095053346 - }, - { - "value": "Dart_FunctionOwner", - "count": 1, - "total_related": 5155, - "prevalence": 0.00019398642095053346 - }, - { - "value": "Dart_GetObfuscationMap", - "count": 1, - "total_related": 5172, - "prevalence": 0.00019334880123743234 - }, - { - "value": "Dart_CreateVMAOTSnapshotAsAssembly", - "count": 1, - "total_related": 5173, - "prevalence": 0.00019331142470520006 - }, - { - "value": "Dart_CreateAppAOTSnapshotAsAssembly", - "count": 1, - "total_related": 5197, - "prevalence": 0.00019241870309794111 - }, - { - "value": "Dart_CreateAppJITSnapshotAsBlobs", - "count": 1, - "total_related": 5197, - "prevalence": 0.00019241870309794111 - }, - { - "value": "Dart_ErrorGetStackTrace", - "count": 1, - "total_related": 5197, - "prevalence": 0.00019241870309794111 - }, - { - "value": "Dart_DumpNativeStackTrace", - "count": 1, - "total_related": 5203, - "prevalence": 0.00019219680953296174 - }, - { - "value": "Dart_GetLoadedLibraries", - "count": 1, - "total_related": 5203, - "prevalence": 0.00019219680953296174 - }, - { - "value": "Dart_GetNativeResolver", - "count": 1, - "total_related": 5203, - "prevalence": 0.00019219680953296174 - }, - { - "value": "Dart_GetNativeSymbol", - "count": 1, - "total_related": 5203, - "prevalence": 0.00019219680953296174 - }, - { - "value": "Dart_GetStickyError", - "count": 1, - "total_related": 5204, - "prevalence": 0.0001921598770176787 - }, - { - "value": "Dart_GetMessageNotifyCallback", - "count": 1, - "total_related": 5244, - "prevalence": 0.00019069412662090009 - }, - { - "value": "Dart_GetDataFromByteBuffer", - "count": 1, - "total_related": 5356, - "prevalence": 0.00018670649738610905 - }, - { - "value": "Dart_AllocateWithNativeFields", - "count": 1, - "total_related": 5358, - "prevalence": 0.0001866368047779022 - }, - { - "value": "Dart_FinalizeLoading", - "count": 1, - "total_related": 5358, - "prevalence": 0.0001866368047779022 - }, - { - "value": "Dart_EmptyString", - "count": 1, - "total_related": 5368, - "prevalence": 0.00018628912071535022 - }, - { - "value": "Dart_GetNativeArguments", - "count": 1, - "total_related": 5369, - "prevalence": 0.00018625442354255913 - }, - { - "value": "Dart_GetNativeFieldsOfArgument", - "count": 1, - "total_related": 5380, - "prevalence": 0.0001858736059479554 - }, - { - "value": "Dart_HandleServiceMessages", - "count": 1, - "total_related": 5386, - "prevalence": 0.0001856665428889714 - }, - { - "value": "Dart_Cleanup", - "count": 1, - "total_related": 5395, - "prevalence": 0.00018535681186283596 - }, - { - "value": "Dart_GetNativeBooleanArgument", - "count": 1, - "total_related": 5396, - "prevalence": 0.00018532246108228317 - }, - { - "value": "Dart_GetNativeDoubleArgument", - "count": 1, - "total_related": 5396, - "prevalence": 0.00018532246108228317 - }, - { - "value": "Dart_GetNativeIntegerArgument", - "count": 1, - "total_related": 5396, - "prevalence": 0.00018532246108228317 - }, - { - "value": "Dart_GetNativeStringArgument", - "count": 1, - "total_related": 5396, - "prevalence": 0.00018532246108228317 - }, - { - "value": "Dart_GetNativeReceiver", - "count": 1, - "total_related": 5398, - "prevalence": 0.0001852537977028529 - }, - { - "value": "Dart_Allocate", - "count": 1, - "total_related": 5400, - "prevalence": 0.00018518518518518518 - }, - { - "value": "Dart_CloseNativePort", - "count": 1, - "total_related": 5400, - "prevalence": 0.00018518518518518518 - }, - { - "value": "Dart_DeleteWeakPersistentHandle", - "count": 1, - "total_related": 5400, - "prevalence": 0.00018518518518518518 - }, - { - "value": "Dart_GetType", - "count": 1, - "total_related": 5400, - "prevalence": 0.00018518518518518518 - }, - { - "value": "Dart_HandleFromPersistent", - "count": 1, - "total_related": 5400, - "prevalence": 0.00018518518518518518 - }, - { - "value": "Dart_HandleFromWeakPersistent", - "count": 1, - "total_related": 5400, - "prevalence": 0.00018518518518518518 - }, - { - "value": "Dart_CompileAll", - "count": 1, - "total_related": 5401, - "prevalence": 0.00018515089798185522 - }, - { - "value": "Dart_GetTypeOfExternalTypedData", - "count": 1, - "total_related": 5404, - "prevalence": 0.0001850481125092524 - }, - { - "value": "Dart_GetTypeOfTypedData", - "count": 1, - "total_related": 5404, - "prevalence": 0.0001850481125092524 - }, - { - "value": "Dart_CurrentIsolateData", - "count": 1, - "total_related": 5410, - "prevalence": 0.00018484288354898336 - }, - { - "value": "Dart_DebugName", - "count": 1, - "total_related": 5410, - "prevalence": 0.00018484288354898336 - }, - { - "value": "Dart_ErrorGetException", - "count": 1, - "total_related": 5410, - "prevalence": 0.00018484288354898336 - }, - { - "value": "Dart_ErrorHasException", - "count": 1, - "total_related": 5410, - "prevalence": 0.00018484288354898336 - }, - { - "value": "Dart_False", - "count": 1, - "total_related": 5410, - "prevalence": 0.00018484288354898336 - }, - { - "value": "Dart_GetError", - "count": 1, - "total_related": 5410, - "prevalence": 0.00018484288354898336 - }, - { - "value": "Dart_GetField", - "count": 1, - "total_related": 5410, - "prevalence": 0.00018484288354898336 - }, - { - "value": "Dart_GetMainPortId", - "count": 1, - "total_related": 5410, - "prevalence": 0.00018484288354898336 - }, - { - "value": "Dart_GetNativeArgumentCount", - "count": 1, - "total_related": 5410, - "prevalence": 0.00018484288354898336 - }, - { - "value": "Dart_GetNativeInstanceFieldCount", - "count": 1, - "total_related": 5410, - "prevalence": 0.00018484288354898336 - }, - { - "value": "Dart_GetPeer", - "count": 1, - "total_related": 5410, - "prevalence": 0.00018484288354898336 - }, - { - "value": "Dart_HandleMessage", - "count": 1, - "total_related": 5410, - "prevalence": 0.00018484288354898336 - }, - { - "value": "Dart_BooleanValue", - "count": 1, - "total_related": 5411, - "prevalence": 0.00018480872297172427 - }, - { - "value": "Dart_CreateSnapshot", - "count": 1, - "total_related": 5411, - "prevalence": 0.00018480872297172427 - }, - { - "value": "Dart_CurrentIsolate", - "count": 1, - "total_related": 5411, - "prevalence": 0.00018480872297172427 - }, - { - "value": "Dart_DeletePersistentHandle", - "count": 1, - "total_related": 5411, - "prevalence": 0.00018480872297172427 - }, - { - "value": "Dart_DoubleValue", - "count": 1, - "total_related": 5411, - "prevalence": 0.00018480872297172427 - }, - { - "value": "Dart_EnterIsolate", - "count": 1, - "total_related": 5411, - "prevalence": 0.00018480872297172427 - }, - { - "value": "Dart_EnterScope", - "count": 1, - "total_related": 5411, - "prevalence": 0.00018480872297172427 - }, - { - "value": "Dart_ExitIsolate", - "count": 1, - "total_related": 5411, - "prevalence": 0.00018480872297172427 - }, - { - "value": "Dart_ExitScope", - "count": 1, - "total_related": 5411, - "prevalence": 0.00018480872297172427 - }, - { - "value": "Dart_GetClass", - "count": 1, - "total_related": 5411, - "prevalence": 0.00018480872297172427 - }, - { - "value": "Dart_GetNativeArgument", - "count": 1, - "total_related": 5411, - "prevalence": 0.00018480872297172427 - }, - { - "value": "Dart_GetNativeInstanceField", - "count": 1, - "total_related": 5411, - "prevalence": 0.00018480872297172427 - } - ], - "pe_info_section_md5": [ - { - "value": "68a4352eca889669f544bd64baa3f961", - "count": 55, - "total_related": 711, - "prevalence": 0.07735583684950774 - }, - { - "value": "9264ea7f335858b063b39397d3c51d14", - "count": 54, - "total_related": 846, - "prevalence": 0.06382978723404255 - }, - { - "value": "57ad8095d0d1b2e0663fbd3ef4405410", - "count": 53, - "total_related": 707, - "prevalence": 0.07496463932107496 - }, - { - "value": "0adcc204eb91a7bbe4f95e6c65202fe1", - "count": 53, - "total_related": 708, - "prevalence": 0.0748587570621469 - }, - { - "value": "3f87e4c23650dfad0bee7da98889ba94", - "count": 50, - "total_related": 482, - "prevalence": 0.1037344398340249 - }, - { - "value": "6f4cd57381bb5584c0a0755384d25180", - "count": 50, - "total_related": 534, - "prevalence": 0.09363295880149813 - }, - { - "value": "cfbda2c44e51b3b0b00bcbbc767c62a2", - "count": 50, - "total_related": 535, - "prevalence": 0.09345794392523364 - }, - { - "value": "bd829aa493ecd52fe5bec776d207f206", - "count": 49, - "total_related": 658, - "prevalence": 0.07446808510638298 - }, - { - "value": "964ef105d227bac747b79bba46b0f797", - "count": 16, - "total_related": 394, - "prevalence": 0.04060913705583756 - }, - { - "value": "dac0cb8eb9636c88fb016f39652232df", - "count": 15, - "total_related": 427, - "prevalence": 0.0351288056206089 - }, - { - "value": "5f33d2e9a87eaf7f522f498235279554", - "count": 11, - "total_related": 20, - "prevalence": 0.55 - }, - { - "value": "7debe16e25bfd1a9ef4cff4e728caf75", - "count": 11, - "total_related": 20, - "prevalence": 0.55 - }, - { - "value": "cf51fe8e7514a1e9d89a22b4d37f111d", - "count": 9, - "total_related": 189, - "prevalence": 0.047619047619047616 - }, - { - "value": "a7a670174407de807cff37c5e7fb202e", - "count": 9, - "total_related": 195, - "prevalence": 0.046153846153846156 - }, - { - "value": "d68bc6bdc1e23b22003fd59f18bf4eb3", - "count": 9, - "total_related": 196, - "prevalence": 0.04591836734693878 - }, - { - "value": "268416740728623556ea3770633003b0", - "count": 9, - "total_related": 232, - "prevalence": 0.03879310344827586 - }, - { - "value": "41b4a8ff28dfc1e35d11fda0c3b7161c", - "count": 8, - "total_related": 113, - "prevalence": 0.07079646017699115 - }, - { - "value": "d282ab13a7ed038291ebcb361830096c", - "count": 8, - "total_related": 116, - "prevalence": 0.06896551724137931 - }, - { - "value": "8e1a301fc1c12724bb7b06a226f6ee0b", - "count": 7, - "total_related": 23, - "prevalence": 0.30434782608695654 - }, - { - "value": "0498258b0cc68156e1295f5d17bb63e6", - "count": 5, - "total_related": 19, - "prevalence": 0.2631578947368421 - }, - { - "value": "0c81cdea9bab9728890129f0621fc2b2", - "count": 4, - "total_related": 9, - "prevalence": 0.4444444444444444 - }, - { - "value": "77f1d0aea9e9462b32efcd4d44dfc4c0", - "count": 4, - "total_related": 63, - "prevalence": 0.06349206349206349 - }, - { - "value": "20ecbfcc87e53c78ea8ce9c0dd66c6bc", - "count": 4, - "total_related": 66, - "prevalence": 0.06060606060606061 - }, - { - "value": "d1fc67767f0df03587cc49406db85585", - "count": 4, - "total_related": 66, - "prevalence": 0.06060606060606061 - }, - { - "value": "9ca82a61ff7ef48f91aac3b0abfa7802", - "count": 4, - "total_related": 74, - "prevalence": 0.05405405405405406 - }, - { - "value": "eefc3e4440d655ddd8270a0db5a1af79", - "count": 3, - "total_related": 8, - "prevalence": 0.375 - }, - { - "value": "69ce49de89357d50159262cb1e3f509c", - "count": 3, - "total_related": 38, - "prevalence": 0.07894736842105263 - }, - { - "value": "9580c791df2e6fb2d69380d24bfa7a42", - "count": 3, - "total_related": 39, - "prevalence": 0.07692307692307693 - }, - { - "value": "49d290bb6d3a8651b266c5b81e78c897", - "count": 3, - "total_related": 40, - "prevalence": 0.075 - }, - { - "value": "41e8d37aba913cbb8d5383de16a48bde", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "7f63086beb030a42ebc18fbd907169ef", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "a026f0b50c7882f4a48c324ed64475cc", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "46c5a02392d55292c5043c96a54afe19", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "651d4567cb245caf34b275b63b23734e", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "e946d8dcc8811cf697278f6c4b9dc82e", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "370771393d9be8cc5aeda2f0977dc086", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "c7ab4010eca46760327ff8b8c51e8d98", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "ad451f79ecc1306c6969af4094c3b6b9", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "8dbdc0b2e8a4a892cedac675d0eae9a5", - "count": 2, - "total_related": 8, - "prevalence": 0.25 - }, - { - "value": "c26796ef91203c2b098509ae6344707b", - "count": 2, - "total_related": 8, - "prevalence": 0.25 - }, - { - "value": "a0eb002be6b2a4898173cba3ccb71dde", - "count": 2, - "total_related": 17, - "prevalence": 0.11764705882352941 - }, - { - "value": "dd0955a2f9ce023b0f38d8364083634a", - "count": 2, - "total_related": 40, - "prevalence": 0.05 - }, - { - "value": "331d3773bf65049a3d59a6e22111815f", - "count": 2, - "total_related": 41, - "prevalence": 0.04878048780487805 - }, - { - "value": "25daf073d97d73bb80d8914fdbc28e1a", - "count": 2, - "total_related": 43, - "prevalence": 0.046511627906976744 - }, - { - "value": "eb51a9196a386b2a314f42f823a6affd", - "count": 2, - "total_related": 92, - "prevalence": 0.021739130434782608 - }, - { - "value": "139347318238917ee7161d3ea45501fe", - "count": 2, - "total_related": 466, - "prevalence": 0.004291845493562232 - }, - { - "value": "576c856afaad699ad9fe099fc6a9ce33", - "count": 2, - "total_related": 41885, - "prevalence": 4.774979109466396e-5 - }, - { - "value": "e6d2e204147f7cdc3055011093632f54", - "count": 2, - "total_related": 42728, - "prevalence": 4.680771391125258e-5 - }, - { - "value": "c2f6ddaeef894b7510c3be928eeae5dd", - "count": 2, - "total_related": 43066, - "prevalence": 4.6440347373798355e-5 - }, - { - "value": "74af66fa540568c59b3868e78900e476", - "count": 2, - "total_related": 43775, - "prevalence": 4.568817818389492e-5 - }, - { - "value": "03850a9595f233378735126eef3faf46", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0438bdcc924d3e587ed32480d69abf1a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "05ffb085f1fd084c5e4098ffd21561f5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "08a72cfefe0ae2b92ae3fb0e8d62578c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "08bb7e4ebc85f205968f830ac8842231", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0947d4dac11c7023dd16c91f26ddd02c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "098045a292ca4545110c95eb3767fc52", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "098d2edaa034fa6fc6522df26d5c26e0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0baeef64d43dc7a38a06037dabcf90f3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0d04bb245f151b8bfc9b339b2480db8a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0d3f3033681f8b01494cd7451f59081d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0e83e2b748bced5362c2dd4d981b5e00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0f0f647bbeb1e586e7f33f57a4d6670b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0f883de12d05924ce41348cca55dfb4c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0fbe2f6c98b0474b0c82ba4536fbf06e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "102523281ebb9f3ec63b2e13f51c258d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "10bfbe029f9a4f3e6d54fdacbe3eb44e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "12329e6b3e18ef6dfe1cd08daa7d67b5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1240045d81b31890d7bdd52c86ad9a36", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "143a89b5505ae1bc0701c74b2ee46229", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "15184282c294611434036cbdfd5c5484", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1676b34390c8006054f1e13e323e9e95", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "16ab8f75b9f98383aa3a08a4d20fa046", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "17529fbc2c5b9b054ab35fc816243621", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1b5d0e90a51b7e772e48457197cb0630", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1ccd37c192554d8d88783f3863bd3d9d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1da15de5297fb341de46d64d0cca1972", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1e19d4143144e9a46a0411385a3d1b9a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1e84951268aecf7bc74998c96443a87e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1f26de52a4833994fc9cce7925931db4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "20bc8278a5776e985112a6684b0a4fc5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "091342461ea46a3f4703d985f8b1b88b", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "1425022798afc81f0df76b322258b609", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "1453b3d79278f88c3f0534555bfdda09", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "0eb986de0814d0d089504f759a9e2a20", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "0fd5ad0df5d8da96cdaafd8041869d18", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "0d6eddc3baf5bab1a43876a4c0de3c00", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "1de61d4ccf7a0ac1b8d25e4e98b5b172", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "0e5b0079762610078bc076e9164b71e0", - "count": 1, - "total_related": 61, - "prevalence": 0.01639344262295082 - }, - { - "value": "1a7953c4d376b63d540e49219da4fbe2", - "count": 1, - "total_related": 61, - "prevalence": 0.01639344262295082 - }, - { - "value": "012cca679e6073e4a57cfe5d0aa7e15b", - "count": 1, - "total_related": 1924, - "prevalence": 0.0005197505197505198 - }, - { - "value": "d41d8cd98f00b204e9800998ecf8427e", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": "0bda792e1a4385a8c5dce49ce9bdec9e", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "16968c66d220638496d6b095f21de777", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "6e7a45521bfca94f1e506361f70e7261", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "7e6c0f4f4435abc870eb550d5072bad6", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "7ffc3168a7f3103634abdf3a768ed128", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "ca3464d4f08c9010e7ffa2fe3e890344", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "1f354d76203061bfdd5a53dae48d5435", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "8c950f651287cbc1296bcb4e8cd7e990", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - } - ], - "pe_info_section_names": [ - { - "value": ".B1", - "count": 2, - "total_related": 676, - "prevalence": 0.0029585798816568047 - }, - { - "value": ".jss", - "count": 2, - "total_related": 1694, - "prevalence": 0.0011806375442739079 - }, - { - "value": ".ddt2", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": ".dtd0", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": ".dtd1", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": ".dtd2", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": ".ddt0", - "count": 1, - "total_related": 23, - "prevalence": 0.043478260869565216 - }, - { - "value": ".ddt1", - "count": 1, - "total_related": 23, - "prevalence": 0.043478260869565216 - }, - { - "value": ".newsec", - "count": 1, - "total_related": 5717, - "prevalence": 0.00017491691446562882 - }, - { - "value": ".bxpck", - "count": 1, - "total_related": 15731, - "prevalence": 6.356874960269532e-5 - }, - { - "value": ".main", - "count": 1, - "total_related": 25384, - "prevalence": 3.939489442168295e-5 - }, - { - "value": ".text", - "count": 181, - "total_related": 100000, - "prevalence": 0.00181 - }, - { - "value": ".data", - "count": 180, - "total_related": 100000, - "prevalence": 0.0018 - }, - { - "value": ".rdata", - "count": 157, - "total_related": 100000, - "prevalence": 0.00157 - }, - { - "value": ".reloc", - "count": 138, - "total_related": 100000, - "prevalence": 0.00138 - }, - { - "value": ".pdata", - "count": 134, - "total_related": 100000, - "prevalence": 0.00134 - }, - { - "value": ".itext", - "count": 127, - "total_related": 100000, - "prevalence": 0.00127 - }, - { - "value": ".idata", - "count": 24, - "total_related": 100000, - "prevalence": 0.00024 - }, - { - "value": ".rsrc", - "count": 13, - "total_related": 100000, - "prevalence": 0.00013 - }, - { - "value": ".tls", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "BSS", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "CODE", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "DATA", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": ".bss", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": ".gxfg", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": ".retplne", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": ".vmp0", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": ".vmp1", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "_RDATA", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": ".CRT", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": ".didat", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": ".edata", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "UPX0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "UPX1", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "UPX2", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "sandbox_verdicts": [ - { - "value": "Malware", - "count": 137, - "sandbox_name": "Zenbox" - }, - { - "value": "Ransom", - "count": 137, - "sandbox_name": "Zenbox" - }, - { - "value": "Evader", - "count": 118, - "sandbox_name": "Zenbox" - }, - { - "value": "Trojan", - "count": 87, - "sandbox_name": "Zenbox" - }, - { - "value": "Stealer", - "count": 85, - "sandbox_name": "Zenbox" - }, - { - "value": "Phishing", - "count": 68, - "sandbox_name": "Zenbox" - }, - { - "value": "Malware", - "count": 49, - "sandbox_name": "Yomi Hunter" - }, - { - "value": "Ransom", - "count": 43, - "sandbox_name": "VMRay" - }, - { - "value": "Malware", - "count": 30, - "sandbox_name": "VMRay" - }, - { - "value": "Spreader", - "count": 29, - "sandbox_name": "Zenbox" - }, - { - "value": "Malware", - "count": 16, - "sandbox_name": "Tencent HABO" - }, - { - "value": "Ransom", - "count": 16, - "sandbox_name": "Tencent HABO" - }, - { - "value": "Evader", - "count": 14, - "sandbox_name": "Tencent HABO" - }, - { - "value": "Malware", - "count": 13, - "sandbox_name": "Dr.Web vxCube" - }, - { - "value": "Malware", - "count": 11, - "sandbox_name": "DAS-Security Orcas" - }, - { - "value": "Ransom", - "count": 11, - "sandbox_name": "Dr.Web vxCube" - }, - { - "value": "Malware", - "count": 11, - "sandbox_name": "Lastline" - }, - { - "value": "Malware", - "count": 10, - "sandbox_name": "CAPE Sandbox" - }, - { - "value": "Trojan", - "count": 10, - "sandbox_name": "Lastline" - }, - { - "value": "Ransom", - "count": 4, - "sandbox_name": "C2AE" - }, - { - "value": "Ransom", - "count": 4, - "sandbox_name": "Lastline" - }, - { - "value": "Malware", - "count": 3, - "sandbox_name": "SecondWrite" - }, - { - "value": "Ransom", - "count": 3, - "sandbox_name": "SecondWrite" - }, - { - "value": "Spreader", - "count": 3, - "sandbox_name": "VMRay" - }, - { - "value": "Rat", - "count": 2, - "sandbox_name": "CAPE Sandbox" - }, - { - "value": "Malware", - "count": 2, - "sandbox_name": "NSFOCUS POMA" - }, - { - "value": "Malware", - "count": 2, - "sandbox_name": "ReaQta-Hive" - }, - { - "value": "Clean", - "count": 2, - "sandbox_name": "Yomi Hunter" - }, - { - "value": "Malware", - "count": 1, - "sandbox_name": "C2AE" - }, - { - "value": "Stealer", - "count": 1, - "sandbox_name": "C2AE" - }, - { - "value": "Malware", - "count": 1, - "sandbox_name": "SecneurX" - }, - { - "value": "Ransom", - "count": 1, - "sandbox_name": "SecneurX" - }, - { - "value": "Clean", - "count": 1, - "sandbox_name": "SecondWrite" - }, - { - "value": "Rat", - "count": 1, - "sandbox_name": "Zenbox" - } - ], - "signature_info_comments": [ - { - "value": "TestConnection Lansweeper", - "count": 1, - "total_related": 204, - "prevalence": 0.004901960784313725 - } - ], - "signature_info_copyrights": [ - { - "value": "Lansweeper", - "count": 1, - "total_related": 2987, - "prevalence": 0.00033478406427854036 - }, - { - "value": "\u00a9 Microsoft Corporation. All rights reserved.", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - } - ], - "signature_info_descriptions": [ - { - "value": "TestConnection Lansweeper", - "count": 1, - "total_related": 208, - "prevalence": 0.004807692307692308 - }, - { - "value": "Microsoft Robocopy", - "count": 1, - "total_related": 2882, - "prevalence": 0.00034698126301179735 - }, - { - "value": "Win32 Cabinet Self-Extractor", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "signature_info_internal_names": [ - { - "value": "TestConnection.exe", - "count": 1, - "total_related": 331, - "prevalence": 0.0030211480362537764 - }, - { - "value": "robocopy", - "count": 1, - "total_related": 9292, - "prevalence": 0.00010761945759793371 - }, - { - "value": "Wextract", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "signature_info_original_names": [ - { - "value": "TestConnection.exe", - "count": 1, - "total_related": 398, - "prevalence": 0.002512562814070352 - }, - { - "value": "robocopy.exe", - "count": 1, - "total_related": 8148, - "prevalence": 0.00012272950417280314 - }, - { - "value": "WEXTRACT.EXE .MUI", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "signature_info_products": [ - { - "value": "ConnectionTester", - "count": 1, - "total_related": 287, - "prevalence": 0.003484320557491289 - }, - { - "value": "Internet Explorer", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "Microsoft\u00ae Windows\u00ae Operating System", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "rich_pe_header_hash": [ - { - "value": "82d244e90c46c620853593462bf11538", - "count": 19, - "total_related": 522, - "prevalence": 0.03639846743295019 - }, - { - "value": "eed5b4fadeceff2eb558753cae3a12ea", - "count": 16, - "total_related": 37, - "prevalence": 0.43243243243243246 - }, - { - "value": "89824521e01c5cba8c3474eb969b188b", - "count": 13, - "total_related": 27, - "prevalence": 0.48148148148148145 - }, - { - "value": "79b52924c41bbb9bac35b912cb8932a0", - "count": 10, - "total_related": 126, - "prevalence": 0.07936507936507936 - }, - { - "value": "d939f25258873cf0cb489515f6799baa", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "a58d908e608be4322fb4ac3becde82e1", - "count": 2, - "total_related": 8, - "prevalence": 0.25 - }, - { - "value": "00404645cf6c33a8983bc6d770a8831b", - "count": 2, - "total_related": 48564, - "prevalence": 4.118276912939626e-5 - }, - { - "value": "d591e59b4c1ee23aba02da739aa9c84e", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "baa2b2fbf97a9629001158b6a25b96d2", - "count": 1, - "total_related": 155, - "prevalence": 0.0064516129032258064 - }, - { - "value": "b64ef6d390be7eadf6ebd5500e38ab5b", - "count": 1, - "total_related": 3376, - "prevalence": 0.0002962085308056872 - }, - { - "value": "b9719f3c91da9a820231cd1a8603974d", - "count": 1, - "total_related": 7481, - "prevalence": 0.0001336719689881032 - }, - { - "value": "a2219bc13a0374dca88bf79d95493c1b", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "popular_threat_category": [ - { - "value": "trojan", - "count": 261 - }, - { - "value": "ransomware", - "count": 255 - }, - { - "value": "dropper", - "count": 6 - } - ], - "popular_threat_name": [ - { - "value": "lockbit", - "count": 254 - }, - { - "value": "gen7", - "count": 182 - }, - { - "value": "blackmatter", - "count": 174 - } - ], - "suggested_threat_label": "trojan.lockbit/gen7", - "attack_techniques": [ - { - "value": "T1491", - "count": 4, - "total_related": 6602, - "prevalence": 0.0006058770069675856 - }, - { - "value": "T1058", - "count": 4, - "total_related": 19589, - "prevalence": 0.0002041962325795089 - }, - { - "value": "T1070.001", - "count": 3, - "total_related": 84210, - "prevalence": 3.562522265764161e-5 - }, - { - "value": "T1039", - "count": 2, - "total_related": 1129, - "prevalence": 0.001771479185119575 - }, - { - "value": "T1021.002", - "count": 1, - "total_related": 1908, - "prevalence": 0.0005241090146750524 - }, - { - "value": "T1036.007", - "count": 1, - "total_related": 2034, - "prevalence": 0.0004916420845624386 - }, - { - "value": "T1210", - "count": 1, - "total_related": 2862, - "prevalence": 0.00034940600978336826 - }, - { - "value": "T1190", - "count": 1, - "total_related": 2908, - "prevalence": 0.000343878954607978 - }, - { - "value": "T1087.001", - "count": 1, - "total_related": 60656, - "prevalence": 1.6486415193880244e-5 - }, - { - "value": "T1078", - "count": 1, - "total_related": 70752, - "prevalence": 1.4133876074174582e-5 - }, - { - "value": "T1027", - "count": 34, - "total_related": 100000, - "prevalence": 0.00034 - }, - { - "value": "T1082", - "count": 32, - "total_related": 100000, - "prevalence": 0.00032 - }, - { - "value": "T1083", - "count": 30, - "total_related": 100000, - "prevalence": 0.0003 - }, - { - "value": "T1129", - "count": 30, - "total_related": 100000, - "prevalence": 0.0003 - }, - { - "value": "T1486", - "count": 30, - "total_related": 100000, - "prevalence": 0.0003 - }, - { - "value": "T1057", - "count": 29, - "total_related": 100000, - "prevalence": 0.00029 - }, - { - "value": "T1497", - "count": 28, - "total_related": 100000, - "prevalence": 0.00028 - }, - { - "value": "T1518.001", - "count": 28, - "total_related": 100000, - "prevalence": 0.00028 - }, - { - "value": "T1036", - "count": 26, - "total_related": 100000, - "prevalence": 0.00026 - }, - { - "value": "T1012", - "count": 24, - "total_related": 100000, - "prevalence": 0.00024 - }, - { - "value": "T1071", - "count": 24, - "total_related": 100000, - "prevalence": 0.00024 - }, - { - "value": "T1074", - "count": 23, - "total_related": 100000, - "prevalence": 0.00023 - }, - { - "value": "T1489", - "count": 23, - "total_related": 100000, - "prevalence": 0.00023 - }, - { - "value": "T1059", - "count": 22, - "total_related": 100000, - "prevalence": 0.00022 - }, - { - "value": "T1010", - "count": 21, - "total_related": 100000, - "prevalence": 0.00021 - }, - { - "value": "T1543.003", - "count": 21, - "total_related": 100000, - "prevalence": 0.00021 - }, - { - "value": "T1005", - "count": 20, - "total_related": 100000, - "prevalence": 0.0002 - }, - { - "value": "T1045", - "count": 20, - "total_related": 100000, - "prevalence": 0.0002 - }, - { - "value": "T1003", - "count": 18, - "total_related": 100000, - "prevalence": 0.00018 - }, - { - "value": "T1090", - "count": 18, - "total_related": 100000, - "prevalence": 0.00018 - }, - { - "value": "T1562.001", - "count": 18, - "total_related": 100000, - "prevalence": 0.00018 - }, - { - "value": "T1055", - "count": 17, - "total_related": 100000, - "prevalence": 0.00017 - }, - { - "value": "T1543", - "count": 17, - "total_related": 100000, - "prevalence": 0.00017 - }, - { - "value": "T1562", - "count": 17, - "total_related": 100000, - "prevalence": 0.00017 - }, - { - "value": "T1185", - "count": 15, - "total_related": 100000, - "prevalence": 0.00015 - }, - { - "value": "T1574.002", - "count": 15, - "total_related": 100000, - "prevalence": 0.00015 - }, - { - "value": "T1056", - "count": 13, - "total_related": 100000, - "prevalence": 0.00013 - }, - { - "value": "T1112", - "count": 13, - "total_related": 100000, - "prevalence": 0.00013 - }, - { - "value": "T1552", - "count": 13, - "total_related": 100000, - "prevalence": 0.00013 - }, - { - "value": "T1552.001", - "count": 13, - "total_related": 100000, - "prevalence": 0.00013 - }, - { - "value": "T1047", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "T1070.004", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "T1089", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "T1095", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "T1564", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "T1027.002", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "T1027.005", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "T1564.003", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "T1080", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": "T1202", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": "T1547.001", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": "T1555", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": "T1555.003", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": "T1114", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": "T1485", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": "T1614", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": "T1006", - "count": 8, - "total_related": 100000, - "prevalence": 8e-5 - }, - { - "value": "T1016", - "count": 8, - "total_related": 100000, - "prevalence": 8e-5 - }, - { - "value": "T1135", - "count": 8, - "total_related": 100000, - "prevalence": 8e-5 - }, - { - "value": "T1033", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "T1056.001", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "T1490", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "T1497.001", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "T1060", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "T1070", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "T1143", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "T1518", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "T1547", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "T1007", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "T1050", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "T1222", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "T1564.001", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "T1014", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "T1018", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "T1053", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "T1071.001", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "T1106", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "T1120", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "T1496", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "T1542", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "T1542.003", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "T1548.002", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "T1614.001", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "T1036.005", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "T1049", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "T1053.002", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "T1124", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "T1218.011", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "T1546", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "T1548", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "T1559.001", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "T1027.009", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "T1031", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "T1055.003", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "T1056.004", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "T1059.003", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "T1107", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "T1115", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "T1125", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "T1134.001", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "malware_config_family_name": [ - { - "value": "lockbit_black", - "count": 206, - "total_related": 1913, - "prevalence": 0.10768426555148981 - }, - { - "value": "lockbit", - "count": 115, - "total_related": 1420, - "prevalence": 0.08098591549295775 - }, - { - "value": "limerat", - "count": 1, - "total_related": 640, - "prevalence": 0.0015625 - }, - { - "value": "lummac", - "count": 1, - "total_related": 50182, - "prevalence": 1.9927464030927423e-5 - }, - { - "value": "amadey", - "count": 1, - "total_related": 54549, - "prevalence": 1.8332141744119964e-5 - }, - { - "value": "quasarrat", - "count": 1, - "total_related": 57584, - "prevalence": 1.7365934981939426e-5 - } - ], - "malware_config_campaign_id": [ - { - "value": "8ac6b9", - "count": 1, - "total_related": 216, - "prevalence": 0.004629629629629629 - } - ], - "malware_config_registry_key": [ - { - "value": "SOFTWARE", - "count": 23, - "total_related": 373, - "prevalence": 0.06166219839142091 - }, - { - "value": "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", - "count": 23, - "total_related": 373, - "prevalence": 0.06166219839142091 - } - ], - "malware_config_mutex": [ - { - "value": "{EC1CC5DF-EC1C-E733-A34E-1C0606F11CD7}", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "{095650E2-0956-73FC-75BA-CE6A6A58CEB8}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{10513AB4-1051-C358-BAC6-845757D48468}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{396E424B-396E-EEFC-AF88-A5C2C2CBA536}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{4722890A-4722-5BBA-7B41-6FB1B1B56FC6}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{4D86B868-4D86-2F54-6D4C-E059598FE0DD}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{6F867F83-6F86-042A-B592-5BC8C8935B2B}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{7133F903-7133-F36E-0805-DDC1C11FDD55}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{7C09E5A8-7C09-DCB3-2E92-CDECEC09CDED}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{82169703-8216-AC6B-19AA-A24F4F6EA255}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{9B43172F-9B43-4C77-D027-792C2C437963}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{BD2238FB-BD22-77D2-242C-73E5E5997314}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{C96E5FA9-C96E-3261-8703-14C8C87A1434}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{CE5066F0-CE50-5CDE-1A8E-5696964156B8}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{DE9B3ACC-DE9B-B21A-36DA-8157575A81C6}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{E884B42B-E884-2094-CDBC-65DADA4165D7}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{F04F4DF6-F04F-47C2-507F-863636E9865C}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{F67CEA24-F67C-061B-9172-BB292965BB6C}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{2A88A03D-2A88-E759-2227-D72020E6D746}", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "{74C5FCA2-74C5-52C7-12CE-459F9FC8453F}", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "{C3128F95-C312-A7FE-D1C9-3BE2E25C3BA3}", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "{62DFB03E-62DF-3ADD-3694-F0C4C493F02F}", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "006700e5a2ab05704bbb0c589b88924d", - "count": 1, - "total_related": 6123, - "prevalence": 0.00016331863465621427 - } - ], - "malware_config_folder": [ - { - "value": "appdata", - "count": 1, - "total_related": 306, - "prevalence": 0.0032679738562091504 - } - ], - "malware_config_crypto_key": [ - { - "value": "5d795ea4a70c62fdbac841ba15bdb93afd5a1ab18adc462f9165ccea23431965ad3eb59779204fa007606f311b2cc675eb6eabde9226ec8f7cf223ceabd596c43f3c6362b62e350eca2aae723f65fe8f300d39a13b0527155f9710a3971dc95058750ffecf52ca08ed3124b5489444ac3b6bcfe6bc9d943d5af3e125f4b928ed", - "count": 8, - "total_related": 9, - "prevalence": 0.8888888888888888 - }, - { - "value": "69b61777019f1fe04f5ce9d899925dc4296743c710672a8d5e61a5be3a5a59504174f4df30fefdac02fdc7b2f08ebcc25b8cfa387f534ec2eecf43a44a0df8513391c406f0d1bd6eef198ae7071fd663310f344314dac109c6cc0c58f359cafee249042b438ccd996b53b0c64e8e1d27fd60a69f4cd44a826cb716c9b4b83629", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "755af0932d815f0dc45c5dcdf686623bef9748c3ee75a9f3f8df0062da98e43582918b22d96267bff68e5b2e264aea147264dff4b0ff63371ada10ce77986c29c78de1140ae8b4759728c0907b578a7b6cbf458084f5551114321691fd887aa31286ffbf3ecaa7bb98b9f12c3a08feac354e10be31ea977cf59f4e6f61499e15", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "734f2afcbe13ff00e4235835c6444f90a367878ef44b39a20926ede824459706c1cdc7f5efdd0c011bae17a11c8881acace89805a1e827d6fecea3cdf377a695312eb49fc9faeb00b1715d3415a8f24b1d285c381654fd7c23b96e2c52711fb451bd549efa3a2a19a56a28e4df45011c64788c0d2fbc18c0144ae9e879566323", - "count": 4, - "total_related": 9, - "prevalence": 0.4444444444444444 - }, - { - "value": "7208a44c3abc7ef71b4367af255058a245747fa78f485d2425efb6415e9302564a4cba515aa978d013734fb8e8a75d33e5fa91cc04590944e40602e21fcb847469670e8b9453ada34b84b237fbdd138b2a80b63b04a044e0930698f4c45641b5fb8c5729a9a702a17ac5a6b4afe61ecdecb9cd286d56c05d59ff53db22860cb3", - "count": 4, - "total_related": 12, - "prevalence": 0.3333333333333333 - }, - { - "value": "6c320e591e3f44bf600e585b3ac05ab927dc4b9fcbf3a7b9a87e8c5fc2d36c5d4132cde10a112e88dcaf84fa14d738d312a6010fd75e0ea609d5649be371c822f4c34a1c74f82fd02947e1f0af9c0cd8e278e829ef9831f333b0967b6e69e0dc6b47a603021a313dd5b1d75d2c21d06eb20bae4412fb646c2acafea179efa793", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "63318712b09dd31bb0bacae8cebbfdd4c133fe21165d8153e8c40f77b71acc9a44eb1a3ee7cb24f4033d5420f54a16c2db8e7843a971f85a2eedd69527b2f857fdf10020d7df7aebd1763b176196b6141ed2945bb797cfa25ec340f463fe55b2e86f38bb7699a796c27aca7f4e24f2b30b0d1d5f88509c8b2dfe2ef86d04d6ed", - "count": 3, - "total_related": 6, - "prevalence": 0.5 - }, - { - "value": "45b7c59df6b017b9073760415c77f6d37e572a9685dd29c54b5f1041d29cf0a66788a4e2b82ab1aa688d87341f073476000a176a4d59833af13bd370e20e2f5e326396b490182eb5dfc1e25c1a050f5144fa8bbef7b049d96ca3e27c091c2740ddd7b7f6c8e66d7d55f3ee040da8efb3ae0f031d1d354fe85b23e090b7b9aa07", - "count": 3, - "total_related": 7, - "prevalence": 0.42857142857142855 - }, - { - "value": "66f4478eb942b63c7406255505e2cfde32a3fa64d62e09d11409f23b3abe6b15216ab8a749616336f8d7e0a527f6ed1e0eb31d87a557fe131844b73cae99c633c4c073a644f00c54ce8d1a62179a6fbc67977ca15cb11f3a281191eeb7d7f7ddbaf8346554a42a1d27242c7e664813bcbb4dda001927d695cfff4b56d3efef21", - "count": 3, - "total_related": 7, - "prevalence": 0.42857142857142855 - }, - { - "value": "5113a45c823bc8a5d7ad1c3cfd4da2bad40ba31b67d554ff5ee940d55394fa3807db922c9649fe4e35a3257df2c9164c82f01f18955043a8020f91394710b81bede4c1556003a1c027e8996f50531e3035a89e2be9b1ca3f19ed96ef6c6036ba28fc2607e1c2cc266bdfee5073e2bcb7f9d805e54a6300c23f0a3b37ac31912d", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "64a055331e3b5104bafe44b761f99515e2627b1b2f53479b7c8a923f0977c81c41354db3e1e64bafa8651c441041d0ba561156f346735c9cf8265fa797c4f4e4246c3401503a44ede2ed7364a3b04b70c6ddcf0f04417814da28afa7710f51ed27723c7dee625f7ff362caa72c5ab44d5b6a0e2e07a47db2547e6f6da5ac9167", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "65f5f543cd41451f67ece9323dcc474bcee9df998da37b2edccc4c8fc9f7a0ea1cbdf94e6222be7fc44be2bcb52a1287ea0f0d6fc19c8ffb0b8ffe32c18c9fe4f099c60a32a00d2cbc6a3a9223215d78635bade8b212e62eb23d33b447b87b928bfaa6ef0fbadbc8931ea52ccfe5a8b949357be8f384404f0cd13d8abef77bfd", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "7ec0e24dbfd47762a67a4e298e0bca61131f5ac72c308949bbd47151857809bc46850cca472ae893ee9b7f4058a61abb90f354e6b932c33d10f161111e046abccc935dc5b9892a5e3c94cfa22b36eefeb0aa6caea7527fcf4f3987ddcbf11269025202739ea19fcdf3d9e223eb96eb9afed4ab8ced21b3dada03d1c5d4fc8ba1", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "7f13325a69bcfc7dfbfa1a68f40045ac68b97602cecba5a61d0c83dfbe94da36757618fc7617a59af2932c7227501a660e3f421748f4b8bda07e2e04937e865a586d63b5b4dba7ed20d18f3e0606f9a8ace37d86fa202f1992cf910c6be8a614c66fd6b85b672b98bc1b3cb94fdd9a351a1d935e757642ea9a2d8a6ac6940e9b", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "7fa6af5cef47e9c502c1e8b030924effc4da94d115f09aa0d3cac0acaf8bb99103345c50d7aac201b3b140b25781007dff3971f03eecb30a37c08495350a047a8f251f6866459fe466b18530fc6425c3fc42cad0d1c503c58b43e091d6beda9cfe714c31950db84411f9d0a66f47a152a3b64654035b151cd542baaf2a397d3d", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "55334a02c4f9d9e63d948910a13ff83e50a95917eb8f81825b911246aeb461275d149c6a0b2261face0edc5dbc603924031b0524d7e5e9c7cec977ec99497862c75b92c09bb92e3bc053c5c3b71d93386ee1997f5fd9e39468c84b3487ff4366cdd907e13a542c41988417e62b9a8ccf3e22dbd354b0310cbf7ef68eb1e3cb7f", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "56e4dcd51accd559f7f617735536412578fe160659cf6460b35dccd1de06b29d8662061743ae8d38ff226c4e58b764f8caf78e217398ea46382201bdc2b726f3eeba72c62b6e94079044cd60816537c2116ede1b52d1d979ac1bf2feb8207dcf2b7e619acfb83edefef3ba14dd024651048ab5f63c6368e50fecdfcecabac139", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "66aa9734f6e353f743f07d7cd8a56f68ae02399cf2634797f326bfe2d147695971ade414af040973c93571a677aa03973cfd920d71f23634e3fda75b7898d29ed05816729ec2b3f0ea698a8387b1ac64131cde6ff6c40b59720192c603806978f0f881a4b2f1efeddcba3360ef4c727bff837449936531e94191ced212546899", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "5face9e217c7c364931a9803a80bd81e04e4f1469ad5aeed346e296ad11abb5d26ddf6ab3b663604a52e3b4dd18c570a70ddf6d41e0bdcd532e66103f3af9e720a066aa10090bab564da47ef54d2a178795ce89ab78dd22c2590ecdf763d359fe1dba9ed0fd0b363846890015405584fc9ae7edab9aedbf53cadc4585d9d7b21", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "7f7265cadb083542d7c5a0a9797018f149a0432a215edc0ed9ba7f2116d9903710a39cc583219f4efac55a433a40ea26e0b86ed934c30048056a74df66902490c1fbfadad9e403163d0c74a9131bc47d4465eb097e886dc276f437c1f7b0b78f59af57ca2495a2abb3c67120dd87fe0291584e9b549585cf640a581185a345ed", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "4957f5109cc0b7055898e4925d0dfb214fa133d1a3d64a735b5a63b091529b38fb5a90d3640a9e74b8fd4312e12c62841595147a11caef085feea07031a662ac7a1c09a5d881d2a613388c31b9b27d58a9904354de4170f1d16f17a5d906068ef5953d3be289d578fcab03a04aed18fd9430f60fdc0afc51f815e73ee6f8ba21", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "bdcdc5dfec1ce733a34e1c069ef12dd70e00ea37ebd18757d90eda0d943dc36f", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "0f643accde9bb21a36da8157bb5a8bc65531975de4e01f7b524de13dd2804146", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0fc8890a47225bba7b416fb1a6b5b6c6c3c8ece797df04d3b0d2581cd78e0101", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1386b42be8842094cdbc65dac14161d734be40d92516be5e7f136d3fbb88bf0d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2d247f836f86042ab5925bc84193af2bda0f3b9b2211ca7ba95fa87367f67b1f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "3ad8424b396eeefcaf88a5c280cb99368da87d56dbb1f8a0a54fd47afd954575", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "43002c2781413fd2bbe5f35216efe63aad11b5789d29b6f027b59a9d9bf3d8e31f7fbf97dda65fc16ee237243187a11e71ebb42fbbf37d91e3fe307437e32fa6feed183670bd97e640e7ae2fa4800c7f9d2efc7ea7212c79873ac98a0005be525b77b24d5e59cb4b72902809681f2fdd20caa24dc1116168fc4b5b318c91edcb", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "47403f671477177ba4be25632eae59d192d6510c4017fe9c9f46a06c0fc1c5fcb6497a581fb3ebbac77f12f98d4bacde96ec325dd6e2e3a1da5147c6786385394d5966105214850d185834fa50c8e3fe9ea2e746080d48b9d4dc76c8be5040c3e50fad37217502050cd153872477aa69624c15b3daf093ad60647afa5085a96b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "49b4ecae694b0fb0fb69485a32cf6fc4746cb1112d9589be8de5432dcef7b7bd238d8a9495a82b1809c314316e9049868135c3276dd4cf32dbcc2aa7eceb6b454415e65aa13ecb33b0d53bd197ebb4c999fb2a6547b904d8436090d60f8703d346abef0dd612b12826e5d06883cc488c6e47d79c5e5a57a6cd73594634de2da9", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "49b61f0fa7f3f09d364e3750376436869b5a79897466d00f5efb2948c85f928d3df26f32f7b0ce0b6de153df5ef0a4bade41c5faa9314cd312a7384a29e2a4f33d831312781d1301f8734a7f22619cb32741140b110653f122e86ed49813052ee92fceead1e72862895e18366336fc49941d6f83214ffb0a7c7eed26899f9139", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "49e3f2cc98e03fba8624d4f15f49c520b4d739f3cbaae97ff3321dc65d45797a95509ab963628583be9f7e8f7df66b0f47fac50abcd0b85573ca1eefa9e925038a63c263647d460a28a51a71dc9ba6f94d138ef07caa212c005f41173e6272549eb6c17042470a0c76be35a757913230b240c4243969a09c37a55334f2c233ad", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4b5365492b0bcbad512ff1bbcca5aa1ee38159868e8b1ec82f084ff0fcff8409e48ff490c2d92a2415d6c1dc064bc6d376fe291d44f7448e5c103dd85d9b4555d9ca87df1b9cce467a45596c8e7e99a1bedc1f98442a49c1de6a36a309f7e4c9d089fcc8c31edcc1a63cc614999bcf7b6cf0250ab8bfa517cccc8dbfa6718d55", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4ba9fd0ae76e62dba7f97a94d47b9f2610994a70e9358afc261a54c0cfc22d5db6b3a1c501cc3b586c58838380358aeab2605cbb44249028f7b18ce2dda4d6c69dc064517e39903323d1f710ad0c7c9d6f6723acf2950d8f400b0d9429fd42abd9919150182682c57dec3c019289bd0aecefdadc0b929b9c23e210f71a5862eb", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4bcac4e8b85ceea6791bff5714595a8ca5840a6e1ef2db954c23e99d773e7d0405a1be10e944d1ff522cce07fd769b5fb5c707683289a228ee2c529e4c2f1b989d93662349af85252c9f8575e9019d8d17fc5349d0877cc780da92b533789c0f1b48cd182de773f5c925f74eeb718443d35718b068504ea52a33af0f09893aed", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4cbde71d7040ea172c7487bc0776835b018dce3f74a6cfbc5d5ed2cc36a07b36e0e85661fdab0136f032b08759ebf7fc1805971088d8136c56f0b13606c34a3b96909658b61f38c92cf5fc7b6b70bd432bac76f2d4606b26d8c20f9d138b228ae2e128e108c3672d5e76c085bdc7b5121ae7be1884905b309a18b56e24a8ac73", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4cf202312072e5731b7ac1593ce7cba8d51b3ac252a5a806bbf97dc9abfbc101b7279a551143865bb51dac0c71e0178f8af631143601bd977a30a477ce24df28183263cac338e07b0708335d5e05182b4313e92269182298acd6d7a41ca09620b480a455bdd9d6dcb1cdcb0d9b1fe387229fab792b1ba80a044587163773a6f9", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "52d92815cb0f743103c4357586a4a3e8e821d7fc0a4d6458deffda63575cea016b8ef2678b063ae4d2d1efda910ba15a5b3fe381a5ae5f89fc4d74cf2709fb75d2fae5b93f356436c3823e70c64ab9e0bb7312d139fb7ca49ec378a7d3ee76988c54382eeeb9b415a293330d43ba9d4a4e8f8a6ad66d16bf4609594822acdc0d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "56d74261fcf7c9915617da196ff380278f9740c7db16111684611628ac2d5da90ed304374f6c1b56f9a6bda9f8499a771d978f0d193cac65fd4c7c2735a7f8ea3838fd4d25621425e94689d40a84524bb838f429e97fae61c3a35869b228f6a612f8a3af0ebd836b30c66a7b87c18b516555279a3c4c701101e66a6fbabfb693", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "56eff9037133f36e0805ddc1ff1f7055b4ea843b90b7edbab4d4a96278ba3f27", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5869b8684d862f546d4ce059fb8f32dd24b8d881a17cd6fb162095c932b47e5e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "586a97038216ac6b19aaa24f606eb255a435de435f57ea31c16fe1515f2cec54", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "59175fa9c96e3261870314c8b37ab634663f8aa924babb5efec5dc40d039351a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "59328c377d66b08e01c261717d3eb659a763e0dc8dcc5d0a0870005d2392059a0fbfea5af2e2b1208b4436fa70e3a3fdb7561e6c4896c937769a9508e69e6e8740b162440966a6b0619760c8336f46d03afca34cdabcd1ba4d41eac596c897745907f0f48947d308312ea689095935db099cca35f803a40fc4dbf3a3405a7535", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5c25b77123807d57c26c600b1764869d07fe274c52ff5f4fea8182c5188b1f31c2398d7911ebde067deaa12c437e834c804d1d6ae66cef31151c2577870d5846621275378af5244471aa7c06cb3b298a50e9305c02e88c7018c447ab4ecc5fede98740e751e74c6e9f3002f93733ed4b4d9b7a95580398f2351c6c7d14fc6329", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5cc02b15c56a0427c0d768eb08f9a310515271d3aa1bc5f552768faaa73295bf94f17974ede1c1af9189384855d18766fddf21df4d158c3833aa04b389ed2755a05ba55a2916a89d943ff429bbb6a21986acbbfe48d1cc9b6c3a7523b149b2bfbaee8da4d2d5ae8413af300f0310b74a9ec7eb33f5848fe47b15409e04ed6bf9", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5cf000066f0b647a62ce15a6137137cc2096d161c841ee4a320797578732f78a3683e1566634964848c962d3b9e698e3dbdb6f0eec0793e4435c583d73398915ff794bf15f3a8e87ef65c444c1bb329e87696a89bc8934e0ca5627d22aec4be8a5acdf0f36a466eaa2e703a16335797f74eb59bee3b122a2aaff0c59e58a1d8f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5d40c57360e75df905170a588ebe1b6f11c13a4ad684ba6185c717478fa765ad28bf246a93e2db3624aee586bb8852b041e0dc7c3bc13082969bc074cdb4647673437e81dae490ef87f2af026551aefd398d3c3936d45bf6ceb4e397eb33d7b2e5c6364797829b29c20a8073b9d6000b3387fff842a7b1896af17f371571b7f3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5d6e3163691faed004693a3ca0333b1a395c060e3e2203b370cd881134bdfc31fb017048d9cc4a18547581baa87e08335081d1bcef4da95c63a46deedd56ae8b778d581865b8ef5f283b60fee77002b37c28766e26eb2d18ced1755c96b25deb49c99bf27389ce3404be94b75303a7387fdac053d9a854e6ef69d31b71f4bea3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5d7d1ad3a00b3512d6ad1c6b8d90011f162218899d7fc9089298679de52b01f24e135e20c12480371f10dcba894265b69185bae351609ae671563af6466f4434caffc57ea4863d1e619e53dca4f9b7233237dc56fecb7030be9e1c1d0119f83920bb5de5f48b34982702f576f7558af53515a0a4c511c48f8be7e1cac676df65", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5d84087ff0514e9313e056f5b34f58d8da6b4acfdf7f4d54bd82ac8f88412aeb9c7a209413cc487ed55a6128ca61f9aa24422bba5bce29eda2fcff6d61e8caf3ca5751de45a5b90399e8411d79c3c1d7b0dba8e4a3e6adffd80f994026862df816b8bc305c59f7037411b819d4ad40e03cb314ffd4ce6e2c7c4b5d4e5fc6c7ff", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5d90bf94b3adb70e5e3b65f7fda8ce7e4204b0ecebb2047c1541bf7dde86103fed3236e256278b5b52559026844df8dde1df06919ca6daf875b4b820e0db2022dc77363a2664f97e1740aa6e24836216b72b597a30667070bc21bf1352a66f9026031001b833645ef9d7c27e8262ac9b7ddca121263ce1ca408d63449212a689", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5e52b9a583b1e0a4361244eb2a049bc414bf644a7787274bb09c28aae89c2cd1f3b01ab51a15777193bae988559050e1469990cdabcca59ce788cda1f64d6d8e971fc78456366ca2511c922e495c32f6c6d8e94cc904cb2721431fc7736106605afb4b911b5a747bd7560fb5c73677275b7096035094ed8479ca4c6b004cb853", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "603fa7b556be34048409f08452df19a44bd1f60fea807589b848820cbe654aa6483d71c375d1a8edb58658f906b65e8b90805a97460e0f5b273059e11f36161f5e461169184a365136ca34c43e3c71790b7b1943f67e58181789780fe2261622e79c7aec4f42c418a54e0cba79793af1157794528efd26171f175c833bba1d19", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "60a20055590ffdb7f7241e1bf05f09665b7c330edb627233c4603495c92a7a02009b7fbaed0e7c412417df421094ee5e57eda171025da0a24f60b113efd7884698fc454daaac44cf476d1d418980148352c80e635eb7865d6a8d2e33489f9d79765f0b4ff3d275dffad27cec28893f32cadf94a6bf59f7346010144e7ba47cbd", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "60a4ed3ddd9f3f12ac33bffbfbae9bd5d227ccae6b96271374e55aae82cbfce37dc4883445365b162c34f4aea4c222ff47b99b94fdbbc548f7484894ae0a0d359bbc9539ec3ac4c875d8658a58c7304e65c715281939f6ba2573f8902059e1c2749e9468accee3b9eb19d8f6de33e3aba941138366854b0e5af98d13a46bb13d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "60fb9c09a1f28bf450d53d8aa907707150cda83d891d35ff5520f7462c22f403f8f9b876f7a435500f16faf0efb2efbc7cf88f4a3d741cba023886028d13666aefb3facc859b56f181580e7cb8d109a1c04e906a205ab06d0ca011498da450cbbe877c5e4d35e22ef80a959bc90155223fd8bab16cbc5c8e042e96380987bd15", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "616a946a9a28e4c411a7289d47f9573ac7fa9fc479dc5d99f365d555a07941153f748945fce6d2cc780dc5b8851b728a4f7eabdd552302be86d1aa92d6e20a21e6fda54daa53122bd2a6d7b8c51a69594d717cbcc567567bdcf12430c6f828aedc778ec487c90071aa67a062d431203da888bd994705124bdb054fd85c5263bb", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "61c955bd8bb4b20111970b676a85e676b9c5557e77f37dcdcce73091580e6c4b1d6dde9091cfec917fa27898d12193f1927e77ff558a9d3b73c70771e0bb91d356fd25b25387ba40be10d69bc52d54bd0997645fdca6250ab1c23519b5095972606776f5f386b515ac5ba75e10f057c05fd9e64b96ffa0f10f5c6a497d7d3bb1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "61ff2a7d785d8fdba763d86fbab981b964e1ebf7719c8ae9878a469fe1b1be431302d1df987cfa235254155119d0013fe3709c04becb24e5d5b296e4eb78fde31ef6d5db3d96f3ba07444fccc861d1400b048a7cb6b4e5e61422da666930f12be320d99c1067b38f51b52fe227668f1cf1e18d059658844381ba34a0f4a47913", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "62397286b6b6c767f1b7b6a5773d7d56dc2e80fcd0c92297c0f631c2e9a9df3c7f6fdab6b94b6e25dac87786565902d393c7620b277c91ee17102848ab705041f1809e1b27a9928eecc51036d141847e861b6311bebcef5cf5254f38e8bc9bebffac87dfb870ea6cbf76ccbe87770f6f416bfdfbecee7cc070001e9016cb1ae5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "6250a5c3bb3c27eff080d19e10c7639fb92bef65008cb1ca5fe1261f01310afb4138fb4c79726dbe738fedaed71c2f09cb8cd268e8fca5f414163cdf6bb0caa38f6cde7e9424f77c90b73b71d0448036a455690ac9c3281841e759e80b97b72c6913b4d46bcfac32ee4560e85e50c0654ad943a3335f31d636261b6fc33c55ff", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "626e891bd4c492acf6d97f9951b2848de287807eb75b9ced4a3e61422f08b8ddcf9edce5a9b3220c9f2009a8468c6c9ce85e0789ef2e2711f7dbb9fc879485f2523c3e0c86056d6a866becbd23c4511562d7b3ccd94bc8150918a16ac58960e81a463520019711fee599a76c44679403a1bea1183d8fadb1a78592b93c13556b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "62791cd268abdc1f2cf9503d73cf21b483889c3769b528c1d3f657c1241860d2d9287ea171ed284c9ff900833f50e7b860f8fd5665124efe177fed2702e821cb1437e21f529f51636db01e014b80f26807bb3c1af61dbcfb0b10d808a82031c238e7207a1bfa144405e61040dfd6426dd2c8b8f9e6540a2b0d4cdff44bbbe1d5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "63d46e7411407b1353f2d2d5826c9831441624a25a8b035704776592473400837729394bec14c20dd415cca2c3e437794ac9d56352774b7639a0ab7938f32d379140c00251fd9550903ebabdea2f8356a79e009cba1429487116f62260d8948e4ac8af1aedfc18cb2e051d1e32be3c4aa5a76ef6fb32afaae8d4061cd8bd6f51", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "64933bae802e0bc9afaff3db0aedaaa6421f334777bc9e0db90b790c43e6b086565139fb6cf988a9345f18cca81e3a70237eca29be14d045b17e47df86d86136d9e5514ae0b9a894feac6603fdabda8ceb8eaff76f5726a51596624c4424368511343fba67aabc9e406179551ef7f812b61cfa495f350e7f757b8f12a434bc7f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "649659bc32c902e69732b578075c1e8030c8c1f58d8d538ce2a72b54744739892aa2472f2a89fd38888cfbafc5f5e3effdab9e0f28bf4eb9121a4d3ae13ba36375028a082885942f26fbedb9274426e3cefde1d33a5a27360cc49f6b6d20828c946d1a5cfce13d737acd6a661a0fe1490540d9d31c2fec5ef1c64a38a331cf5d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "64f7db36d6ab9b92f185f1c26dff9e39b8baf91aa632b862ebc3a6811de845842c4f5172fcdd87fa458982cfba35b50c8a7a9470b586898750111a4c56e67a9b8ace2132f7748fe9d7fcff68a63409758d15fc26a18fdb28ea0accf1d8838297f18374b0f2fe13ee818b145f3cd3762323138a5421ec87fcfc843f8e933e1659", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "65a9815e830dbf5ccf1188c0eafeb917a83d318cc98f23e6b3e30995b3492919ae6af0424d8fa200364f3e4fdf62609c5892f5bf1b8761ad69873e895ee43656a7bfe03bfb3dee671f412d3e7187dcd1a3c3c59c2508a5e9947a020877dac88677de5e84c9b9f319af75a3aac2413645732e3fe0b92d53dd2345818e037d01e9", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "65d56e72ae56cc52999040469558495bcfe48f6844a98612be26320b8b61564957f3c5df15bfb062142166016a35540a476ae2c15a23d0f37da4d5a4afbc6b1d5ad1baafeee7944ecea8bea9849d52b605fb6e4f6de72d1d30e05f089f0a7bb1d69636720faad7c53e42cc642245b0157e2aaf9c8f8dcbc9c4f28938b7625363", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "660c0b6c5cd0a2886f9b8209021433e4bd09321e5af1f7676af0c30d772f73e9af385e75de70b80616d47500bfe637bfdca80fa123eaed5563ada6f21a4145a613dc4c95a2c5983c6257e234be6e7bf94e60e235ab744ece364dc5f88d837e30349abc8de91b7168a7d1d3d6d467b3ee627443f35593a40d049808d27a9387fb", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "66c1af767c51cb1ad6ec1853694f91690fbde45400c2ce255260667daabb754ac13a77d96744ac8dedb1d0a56a7c0e4526e1ee32a189ab86aae7699b7425b5be4fc6d3b0b17f0ea33ad3c8fc9dec85d880fbf390d6019ef431dba29a164487417b9486b4f224fd1d93ab1e34955cbba1db5da8c1a19f9cad6fd19cd9a9015975", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "670ea3cb2b55338ff7117e7f94a050ae820fccd11f3e7974c958e12e6ae1b9b6795c6ee9eea17657bdd2438b7bd501805af17ded2dde43a118af6ef5e1aa448847cc693c82496692d5dc9245be1461a499fb09b79917abd2de881771f664e298513174f4a59367109f2969691d1e101ac017afe6807fca83bded11c0f0b2a155", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "673ab5779ed5d22f961e926786e941d00d11ab6fa8b2df192b2c8aea385424fd2d3d25dae19295b56995afe7ddfc802ad9698890af1f2ec757080171f713c917b7e53869bc4eeace6225c4c8986338fe782cc6408dee4089b0dd48460d84a99777db52d2e132098ff0ce85dc0ee39784b55813ae2ade7157fc70a79aa3bf754b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "675f20f667157e1c610ba67d2ade2bcfe66999c8b42275cb7934860eb982f1f68000174146cbd96baf2f4330c89f036d68ac429d88fde1232d59210c1628f047f502572e64c9ff8726d591caabf1599c6cd93e14a7f31b5abaa949143c87c23a8b69586dcd28bfe878d21792aefff7a475b6349e5a97507f0b800418124c5391", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "67c70d1a76d1e1ba14c851567aa367bc3ff3346db335c39416d3017a9efdea33c74214936bb7035b3ddad6a5197c729544b23eab5c2d8d8e9c4a79f680357a2002d8217288f714a803483a17d8562c4f3d4f0ba094cba88b98c385ce84bb005214cddc0ce53e23aaa724e332dd106e468c9223694caa46339224b5a561f5406d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "67f72a54bd29f05fa9983e7470be87265762ef1cc2365d3fa8a1fde5405c1c3b820d60e6bc1310b5936f3c561cf7b7d32284ce1016a8d50adbc167585612f42eb7003e2fa104317d5185229ac2f147bd4ce0b0ce9cdd84ea5216a9acd400e16c1b8b80f1f86cd9aa89f3e3039f36b1f744eed8d12d9d987fbbd7037dc8b90a81", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "680c9a898e74d65709286727d269b04269c38d2a784585dfc2281f7c79e148eb40ef7838cc42c8879edf19b2e2dec64d3654fc9e2413339707ffc52fcea72524e62477bc06c4b25c3eb2068f68e75466a04540784c1a37a49bd739200575682c19281ca4d4554fac421f3317eeeee572c831667a7288ea3c1452a3f37284372b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "68492bb7b78a0ee317bbbb1873a7a603bebb64b30e9c354ad8e9d62890c0ff05b07b3636e2862d823f53c065d7335a39efd4f5d69f7cdccb7cec259e988775e6d24293fd4fdd572e75ea4bc5090a717a6d21576efa7e063bf2c4459ca4f4a37bc4a3ed51a22de35c7f2f79be22035f1aeaa6154c63269e22d3b8004bc87dfaf3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "6877a888cb38f075fda7e3866029cd03b89e5403bac294405c9cda37851361e480b4229e88eeeb05cf8161c452afe0d6beed30bdf7b8ffb83b11ff114a713454329b0c065b33aadad754f25be307d4ef9487fed7cf0475556abcd2cf42c32631fc85ec74086d7df399d2a4e96858021f48a1e1bbc609e468aaa990f2ae66415b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "22e1a03d2a88e7592227d72092e69d46d58117c470e4daf4f795a1c9569df840", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "328bfca274c552c712ce459f4fc8ed3f8ff433abd083cdf96f5f6614b2dfa23d", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "45181cea7d99e92a8884e3cd8baf34e25a6830e5daf98eaed0c9fc868e24b6179b32f03ceb28eea9898c9aef633872f4894e5e131bb6022d103143ea2795be3345dd345c6f08af00dd0856413ab25a436bcda9edb4256001bae5bc00f99aba867c78a063084b97a12f3e61cda1bca0648a914b3b271750767a64ec94449e56dd", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "4e90d504bbad5f1aff2f9a8413754a65b78ab4e1b424b448c48e72a7e9a15e1f63c9a5ca6b6ebe0567ae436d5b318793644ab9ae843e3f26fe8072301c4b9964f222d10ddd5fdd507dcc7a42c8e95e028b5030427cb08a0da98066022960ce3f0ec718dd5c7a11a29c1ae6c0a2d67df1a9b941238a6df9a669fcdbd5f83b1209", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "555687c8c4a6d4f3a55ba7dea2b0d3b7deee8171c55cc0c4827436cd11ed73213be8e9d1e37ccfbdaf5fc03c0933ba1903094a5ef46007d0b0f5d94bfbcf523b58b40385e47d4ca3e1e2d93ee577a04ab09e466516d340afd1a63f0e45f1becb495ae38362f1b3b4dca8bb97d464f51945dd774e71cca4b60f05197560037709", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "58789be0d099fadda854c510ea06f476eb838a1080813260a9f6588ef6872fce1cde66b22da8be10896a2146b3b3a9e53a8f76027455e10716cf4b68b0fac7ed2cddaad5abd8199e261243b4dbae076006e180e26ac6957a8deefdd8f3f40ac1f59757f3b4fdef063a7ed1f968c7b10070db17ff3f43a4bc4d3509fd7843be1b", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "5d53af2a404c31cbf57dc45f060188f94d2b5c5d22eaef4343045a99f7d442c3b5628dccc8ed6e293c0acc2e2cf43ca9784f248c3710233b5c30ed2e2d8fdc1ee3bbd70e94b4d21ca7d39b8ece3efa9218f6277ec04688eb09e0be5b149a1ffd58a0b22d4df4639b586535919acbcc6a8f91d803a8886c9d78e9d3ae6cb562f9", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "5fa0b36524a509a3f43f9f3b55885db9996e0c571b1c5a930a294f7721ef588029fcc34b10eaf9a83b20f2574d65b63e000d4225e66c5281dd2087f0380c966e06f8907e0488c221c65d7e292c182eba26a0c7e0b145935e6e060b616f54956b57ed7f830edc6a7cc9241060d5b7d3ae5efbf09f2a849e3d518b1641de8016db", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "67504ba6794de4dba4c88fe57b44138a34f915d2b28c0ee53ee29b517aa4e776cfc2c842936d461f748b4cafbd9409d85dca8add49774290d5fcfe8f63cbdf1cae79c936edecf954210cd67fabf4472c87b62edf28f3b7b6ee2165519c41791985e08b0950accbeb31544422040156dacd5545e6bc0e3fc07684780bf064cec5", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "45fa52c81316e6bb1ddf13e2a434e997af91d491ba8c1241dc43e134118c277f14d0fb3d4fee6ae79e8513848a8732c33b210476f2526aa36efdff33bae955c21d5ee0f641dbe5edc19ad31ac6580ae2ee5a49d62584696021de110d9d54aab4861c8d989c87383c712932fd8a16b7807246537ee73f0e200d41fac94656c2ef", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "4b727d4ba87578c1cce7de59479a88c457c29a151ab9ee1116b8e5112e55fd160810ea6157d308155a766db70476b1d4083e9755bdf7d76b3a664246033bc3839223abbcc448c0af19f86edda63c5536b255c96c35dfcf14970334105f4e2aa78e41aceed520751c3395236a0f98f7c0f5731062a443ca42d3da6b4d002c77c9", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "5892daf011100549c985d8734b9adcb3387157a6d13d64ea9c496daeb186938a5540bb91293dbfd1605e4e11ec4c1f531b07e687be0e33920cf2a551809964a8fd5ad5b2587767a28b65411cfa52e8cca1ad958bd17595fc96cd73c86a051e989c55aaee3e570a04c03edf060860c7ff3286dcc7bb04ea7fbc78fabc3a2223bd", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "5cba25865dcbc4be64f11865e171fc70d6bb66e1363264fb8481812cea191ac67331a9bdf8c93702d04de311b8e6861aeebb2c659f84597eadcdbebd575161d3d1e88debd1473ac37d84751846aa5c9c1eccf08e773fb8494ddf62c9efbc45073ea7d06b0ad6d086cb811b2001df318c38d3de85e5f968e607e45f37c181eaf7", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "4eeb0125ac29066ae9a357e4940e76e0a185dc2af10a7dc53c9aae742c62b1bc536f4088bc7f759e3befd34c241be15134cdea40b352330da9b2365f0ab3ec49d93322f0995153664328495255f0cbb64af8b3c9179fd78972027e90cfc7fbd6221b3fa6537d1c0565d623dac7a3d85aa2e9bb07452200dbcedeba62d4034a0b", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "57cd4e8bd319e97e2e8a5b9ebfdd36f719819169965c75d59511ac878e929538004e3a020f8a6e70a5ac24015eaedc689799abe07416b871eb0d851bfe222697a62541c01c187abf02a2159345eadfe78d4dfdbccd298b72f8daa29b02cd0e6321ecea87f42a3969976be794050efb243545b2c306358e9a81525c2e6ea53449", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "62c828583ddd04ac79d9ee15d51f4c0981715d0e4d618b518d124b1cb434f1c331ff19418ff2677192a0ad1178c0f23a3345cb72f8db7d9458da09218cd4573b98eaf59d1d54946e688765a781c97ad570d48908f2b42a7d057fc9b27dab2f16e87941dc5f5cf59a45e577f0489f7d04b196be09b2acc719a2f5aa6b44b4f9fd", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "5bbba81bd7241bff47300e1b8ee337e888a0b3c68f573cdb666fd0d17f7e2df872f1d7bffe6574d588ea58351f13e9f1ebbe7f2f3148d7379207c0c68a985d5bda17a493a36e1b5a67e201918ac8c3a336cf03389a11ff7a3b21024ea41630c809e5572687b2348f03e93dd6b413b7bc339bc5bf4bebbec8a4deb3ba1428a7a1", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "5f4f962f1cb4f440a2f637cb8b11f1c3de9e2829bbc8c8570d55b001f10ba6e07e3dcef1ff4cb6f91356e4295d390cbb7520bb3ac0b5f90538c243e8aa5c2ba0b3001cb8a73a2f5bef287d2637c3f6b19edc111cf99673722b0186e48f7a154d0cc8950f865ee3ae297325da09c02e74a37c1a90fc4cc76db7ce77e3b7851703", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "64c042f98199b2153ced69174a16bd0ffb017ac28a1f314f6a744e44d17caf1c083c2c88011ecfc21d03f8ef658dd80078f0c4d6d74b5e8bde650d0f46918457fddbeed697f51834894761baba70a22f27bf1b3135a1f4499db73718728e5778e1e4c12a1514350964b961cf652cb445dfbd54e2babee7a4b827675dcc2703c9", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "006700e5a2ab05704bbb0c589b88924d", - "count": 1, - "total_related": 2359, - "prevalence": 0.000423908435777872 - } - ], - "malware_config_displayed_message": [ - { - "value": "\r\n ~~~ LockBit 3.0 the world's fastest ransomware since 2019~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n\tThe data will be published on TOR website if you do not pay the ransom \r\n\r\n\tLinks for Tor Browser:\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion\r\n\r\n\tLinks for the normal browser\r\n\thttp://lockbitapt.uz\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion.ly\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion.ly\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion.ly\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion.ly\r\n\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n \r\n\tYou can obtain information about us on twitter https://twitter.com/hashtag/lockbit?f=live\r\n \r\n\r\n>>>> You need contact us and decrypt one file for free on these TOR sites with your personal DECRYPTION ID\r\n\r\n\tDownload and install TOR Browser https://www.torproject.org/\r\n\tWrite to a chat and wait for the answer, we will always answer you. \r\n\tSometimes you will need to wait for our answer because we attack many companies.\r\n\t\r\n\tLinks for Tor Browser:\r\n\thttp://lockbitsupt7nr3fa6e7xyb73lk6bw6rcneqhoyblniiabj4uwvzapqd.onion\r\n\thttp://lockbitsupuhswh4izvoucoxsbnotkmgq6durg7kficg6u33zfvq3oyd.onion\r\n\thttp://lockbitsupn2h6be2cnqpvncyhj4rgmnwn44633hnzzmtxdvjoqlp7yd.onion\r\n\r\n\tLink for the normal browser\r\n\thttp://lockbitsupp.uz\r\n\t\r\n\tIf you do not get an answer in the chat room for a long time, the site does not work and in any other emergency, you can contact us in jabber or tox.\r\n\t\r\n\tTox ID LockBitSupp: 3085B89A0C515D2FB124D645906F5D3DA5CB97CEBEA975959AE4F95302A04E1D709C3C4AE9B7\r\n\tXMPP (Jabber) Support: 598954663666452@exploit.im 365473292355268@thesecure.biz\r\n\t\r\n>>>> Your personal DECRYPTION ID: %s\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!\r\n\r\n\r\n>>>> Advertisement\r\n\t\r\n\tWould you like to earn millions of dollars $$$ ?\r\n\r\n\tOur company acquire access to networks of various companies, as well as insider information that can help you steal the most valuable data of any company. \r\n\tYou can provide us accounting data for the access to any company, for example, login and password to RDP, VPN, corporate email, etc. \r\n\tOpen our letter at your email. Launch the provided virus on any computer in your company.\r\n\r\n\tYou can do it both using your work computer or the computer of any other employee in order to divert suspicion of being in collusion with us.\r\n\r\n\tCompanies pay us the foreclosure for the decryption of files and prevention of data leak.\r\n\r\n\tYou can contact us using Tox messenger without registration and SMS https://tox.chat/download.html. \r\n\tUsing Tox messenger, we will never know your real name, it means your privacy is guaranteed.\r\n\r\n\tIf you want to contact us, write in jabber or tox. \r\n\t\r\n\tTox ID LockBitSupp: 3085B89A0C515D2FB124D645906F5D3DA5CB97CEBEA975959AE4F95302A04E1D709C3C4AE9B7\r\n\tXMPP (Jabber) Support: 598954663666452@exploit.im 365473292355268@thesecure.biz\r\n\t\r\n\tIf this contact is expired, and we do not respond you, look for the relevant contact data on our website via Tor or Brave browser \r\n\t\r\n\tLinks for Tor Browser:\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion\r\n\r\n\t\r\n\tLinks for the normal browser\r\n\thttp://lockbitapt.uz\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion.ly\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion.ly\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion.ly\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion.ly", - "count": 30, - "total_related": 321, - "prevalence": 0.09345794392523364 - }, - { - "value": "\r\n ~~~ LockBit 3.0 the world's fastest ransomware since 2019~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n\tThe data will be published on TOR website if you do not pay the ransom \r\n\r\n\tLinks for Tor Browser:\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion\r\n\r\n\tLinks for the normal browser\r\n\thttp://lockbitapt.uz\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion.ly\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion.ly\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion.ly\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion.ly\r\n\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n \r\n\tYou can obtain information about us on twitter https://twitter.com/hashtag/lockbit?f=live\r\n \r\n\r\n>>>> You need contact us and decrypt one file for free on these TOR sites with your personal DECRYPTION ID\r\n\r\n\tDownload and install TOR Browser https://www.torproject.org/\r\n\tWrite to a chat and wait for the answer, we will always answer you. \r\n\tSometimes you will need to wait for our answer because we attack many companies.\r\n\t\r\n\tLinks for Tor Browser:\r\n\thttp://lockbitsupt7nr3fa6e7xyb73lk6bw6rcneqhoyblniiabj4uwvzapqd.onion\r\n\thttp://lockbitsupuhswh4izvoucoxsbnotkmgq6durg7kficg6u33zfvq3oyd.onion\r\n\thttp://lockbitsupn2h6be2cnqpvncyhj4rgmnwn44633hnzzmtxdvjoqlp7yd.onion\r\n\r\n\tLink for the normal browser\r\n\thttp://lockbitsupp.uz\r\n\t\r\n\tIf you do not get an answer in the chat room for a long time, the site does not work and in any other emergency, you can contact us in jabber or tox.\r\n\t\r\n\tTox ID LockBitSupp: 3085B89A0C515D2FB124D645906F5D3DA5CB97CEBEA975959AE4F95302A04E1D709C3C4AE9B7\r\n\tXMPP (Jabber) Support: 598954663666452@exploit.im 365473292355268@thesecure.biz\r\n\t\r\n>>>> Your personal DECRYPTION ID: B7568014A48684D6D525F3F3722638C4\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!\r\n\r\n\r\n>>>> Advertisement\r\n\t\r\n\tWould you like to earn millions of dollars $$$ ?\r\n\r\n\tOur company acquire access to networks of various companies, as well as insider information that can help you steal the most valuable data of any company. \r\n\tYou can provide us accounting data for the access to any company, for example, login and password to RDP, VPN, corporate email, etc. \r\n\tOpen our letter at your email. Launch the provided virus on any computer in your company.\r\n\r\n\tYou can do it both using your work computer or the computer of any other employee in order to divert suspicion of being in collusion with us.\r\n\r\n\tCompanies pay us the foreclosure for the decryption of files and prevention of data leak.\r\n\r\n\tYou can contact us using Tox messenger without registration and SMS https://tox.chat/download.html. \r\n\tUsing Tox messenger, we will never know your real name, it means your privacy is guaranteed.\r\n\r\n\tIf you want to contact us, write in jabber or tox. \r\n\t\r\n\tTox ID LockBitSupp: 3085B89A0C515D2FB124D645906F5D3DA5CB97CEBEA975959AE4F95302A04E1D709C3C4AE9B7\r\n\tXMPP (Jabber) Support: 598954663666452@exploit.im 365473292355268@thesecure.biz\r\n\t\r\n\tIf this contact is expired, and we do not respond you, look for the relevant contact data on our website via Tor or Brave browser \r\n\t\r\n\tLinks for Tor Browser:\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion\r\n\r\n\t\r\n\tLinks for the normal browser\r\n\thttp://lockbitapt.uz\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion.ly\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion.ly\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion.ly\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion.ly", - "count": 10, - "total_related": 117, - "prevalence": 0.08547008547008547 - }, - { - "value": "\r\n\r\nAll of your files are currently encrypted. \r\n\r\nAs you know if you don't - just google it all of the data that has been encrypted by our software cannot be recovered by any software means without contacting our team directly you will lose all your files :/\r\nIf you try to use any additional recovery software - the files might be damaged so if you are willing to try - try it on the data of the lowest value\r\n\r\nTo make sure that we REALLY CAN get your data back - we offer you to decrypt 2 random files completely free of charge\r\n\r\nYou can contact our team directly for further instructions through our contact: https://t.me/Diamotrix ", - "count": 8, - "total_related": 9, - "prevalence": 0.8888888888888888 - }, - { - "value": "\r\n ~~~ davids malware uwu~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n uwu >.<\r\n\t\r\n\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n i alr got all ur info g ur fucked and i just want money\r\n\r\n>>>> You need contact me and i will decrypt one file for free hmu with your personal DECRYPTION ID\r\n\r\nhmu on discord @ lo_.z\r\n\r\n\t\r\n\t\r\n>>>> Your personal DECRYPTION ID: B7568014A48684D6D525F3F3722638C4\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!\r\n\r\n\r\n>>>> Advertisement\r\n\t\r\n\t\r\n\r\n\t\r\n\tLinks for the normal browser\r\n\thttp://lockbitapt.uz\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion.ly\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion.ly\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion.ly\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion.ly", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "\r\n>>>> Your data are stolen and encrypted!\r\n\r\n>>>> Sensitive data on your system was DOWNLOADED and it will be PUBLISHED if you refuse to cooperate. Your competitors or law enforcement may get them on the web.\r\n\r\n\r\nData includes:\r\n- Employees personal data, CVs, DL, SSN.\r\n- Complete network map including credentials for local and remote services.\r\n- Financial information including clients data, bills, budgets, annual reports, bank statements.\r\n- Complete datagrams/schemas/drawings for manufacturing in solidworks format\r\n- And more...\r\n\r\nYou can request the tree of files that we have.\r\n\r\n>>>> You need contact us and decrypt one file for free, send a small file for test decryption with your personal DECRYPTION ID to tox chat:\r\n\r\n>>>> Your personal DECRYPTION ID: %s\r\n\r\n\r\n1)Download and install TOX chat: https://tox.chat\r\n2)Write to this tox id: DED25DCB2AAAF65A05BEA584A0D1BB1D55DD2D8BB4185FA39B5175C60C8DDD0C0A7F8A8EC815 and wait for the answer, we will always answer you.\r\n\r\n\r\n>>>> DO NOT MODIFY FILES YOURSELF.\r\n>>>> DO NOT USE THIRD PARTY SOFTWARE TO RESTORE YOUR DATA.\r\n>>>> YOU MAY DAMAGE YOUR FILES, IT WILL RESULT IN PERMANENT DATA LOSS.\r\n>>>> YOUR DATA IS STRONGLY ENCRYPTED, YOU CAN NOT DECRYPT IT WITHOUT CIPHER KEY.", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "\r\n ~~~ LockBit 4.0 Ransomware since 2024~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n\tPrice = 1000 $ \r\n Bitcoin = 328N9mKT6xFe6uTvtpxeKSymgWCbbTGbK2\r\n Email = jimyjoy139@proton.me\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n \r\n\t\r\n>>>> Your personal DECRYPTION ID: A3138014A48684D6D525F3F372263313\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!\r\n", - "count": 4, - "total_related": 9, - "prevalence": 0.4444444444444444 - }, - { - "value": "Rans0m Resp0nse R|R The World's Greatest Ransomware\r\n\r\n>>>> If you are reading this then we are sorry to inform you that you are the Victim of the most sophisticated Ransomeware Malware on the planet. Every single file document and all data on your systems \r\n\t has now been encrypted with military grade encryption. Also We have made copies of ALL file systems and uploaded this data to our servers. Thankfully for you we have the one and only way\r\n\t to restore all of your files back to normal like this never happened and that way is with our decryptor program and decryption keys. \r\n In order for us to allow you to have everything back and restored including all of your files and a promise we will never leak or sell the data we have stored on our servers \r\n all you need to do is pay 4800 USD worth of the Cryptocurrency Bitcoin. So just purchase Bitcoin four thousand eight hundred dollars worth and then send the bitcoin to the following \r\n Bitcoin Wallet Address bc1qarhtk9c2krzaaak9way0nuuac87mnuya8cpf4x\r\n\t \r\n\t You have 72 hours from reading this message to pay the 4800 USD in bitcoin to the wallet address above or we will assume you are not cooperating and will sell ALL of your data to other\r\n\t CyberCrime Groups Business Competitors and Anyone else who would love to pay money for it. Failing to pay not only gets your data leaked and sold but we will continue to \r\n\t impose cyber attacks on every system you have. We can promise you it is in your best interest to pay the small amount and have all your files restored within 10 minutes of paying us.\r\n\t If for some reason you need to contact us you can do so over TOX client just go to the website tox.chat and download it. \r\n Once you make a username and login to TOX you can then message us via our TOX ID which is as follows CB7D4BE06A39B950378A56201A5FD59EF7A4EE62D74E8ADE7C1F47745E070A4A4AD46389FFB2\r\n\t\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tAFter you pay we will provide you the programs for decryption along with the keys and we will delete your data. \r\n\tLife is too short to be sad. Be not sad money it is only paper.\r\n \r\n\tIf we do not give decryptor and keys after payment or we do not delete your data after payment then nobody will pay us in the future. \r\n\tTherefore our reputation is very important to us. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n \r\n>>>> Warning! Do not DELETE or MODIFY any files it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "\r\n ~~~ LockBit 3.0 the world's fastest ransomware since 2019~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n\tThe data will be published on TOR website if you do not pay the ransom \r\n\r\n\tyou need to transfer 1 monero to this account otherwise your files will be deleted forever:87UysM3HKs8K5MqEwXGnSBAECCUMhf6voZQBUJivYcfYCjbKB8iMexrGrAKFd1Nqqp36eusTSvfuxKiXrUWBtqZt2PtqDmp\r\n\r\n\tI am a private entrepreneur who uses other people's things. To contact me, write to me at tox:643AEA81DD7E8022CB560BD12B72BF62D93668E05659A2CB23A2F9888FDCBF77E8CB1169D117\r\n\t\r\n\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n \r\n\r\n\r\n\t\r\n>>>> Your personal DECRYPTION ID: B7568014A48684D6D525F3F3722638C4\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!\r\n\r\n", - "count": 3, - "total_related": 6, - "prevalence": 0.5 - }, - { - "value": "~~~ You have been attacked by LockBit 4.0 - the fastest, most stable and immortal ransomware since 2019 ~~~~\r\n\r\n>>>>> You must pay us.\r\n\r\nTor Browser Links BLOG where the stolen infortmation will be published:\r\n( often times to protect our web sites from ddos attacks we include ACCESS KEY - ADTISZRLVUMXDJ34RCBZFNO6BNKLEYKYS5FZPNNXK4S2RSHOENUA )\r\nhttp://lockbit3753ekiocyo5epmpy6klmejchjtzddoekjlnt6mu3qh4de2id.onion/\r\nhttp://lockbit3g3ohd3katajf6zaehxz4h4cnhmz5t735zpltywhwpc6oy3id.onion/\r\nhttp://lockbit3olp7oetlc4tl5zydnoluphh7fvdt5oa6arcp2757r7xkutid.onion/\r\nhttp://lockbit435xk3ki62yun7z5nhwz6jyjdp2c64j5vge536if2eny3gtid.onion/\r\nhttp://lockbit4lahhluquhoka3t4spqym2m3dhe66d6lr337glmnlgg2nndad.onion/\r\nhttp://lockbit6knrauo3qafoksvl742vieqbujxw7rd6ofzdtapjb4rrawqad.onion/\r\nhttp://lockbit7ouvrsdgtojeoj5hvu6bljqtghitekwpdy3b6y62ixtsu5jqd.onion/\r\n\r\n>>>>> What is the guarantee that we won't scam you? \r\nWe are the oldest extortion gang on the planet and nothing is more important to us than our reputation. We are not a politically motivated group and want nothing but financial rewards for our work. If we defraud even one client, other clients will not pay us. In 5 years, not a single client has been left dissatisfied after making a deal with us. If you pay the ransom, we will fulfill all the terms we agreed upon during the negotiation process. Treat this situation simply as a paid training session for your system administrators, because it was the misconfiguration of your corporate network that allowed us to attack you. Our pentesting services should be paid for the same way you pay your system administrators' salaries. You can get more information about us on Elon Musk's Twitter at https://twitter.com/hashtag/lockbit?f=live.\r\n\r\n>>>>> Warning! Do not delete or modify encrypted files, it will lead to irreversible problems with decryption of files!\r\n\r\n>>>>> Don't go to the police or the FBI for help and don't tell anyone that we attacked you. They will forbid you from paying the ransom and will not help you in any way, you will be left with encrypted files and your business will die.\r\n\r\n>>>>> When buying bitcoin, do not tell anyone the true purpose of the purchase. Some brokers, especially in the US, do not allow you to buy bitcoin to pay ransom. Communicate any other reason for the purchase, such as: personal investment in cryptocurrency, bitcoin as a gift, paying to buy assets for your business using bitcoin, cryptocurrency payment for consulting services, cryptocurrency payment for any other services, cryptocurrency donations, cryptocurrency donations for Donald Trump to win the election, buying bitcoin to participate in ICO and buy other cryptocurrencies, buying cryptocurrencies to leave an inheritance for your children, or any other purpose for buying cryptocurrency. Also you can use adequate cryptocurrency brokers who do not ask questions for what you buy cryptocurrency.\r\n\r\n>>>>> After buying cryptocurrency from a broker, store the cryptocurrency on a cold wallet, such as https://electrum.org/ or any other cold cryptocurrency wallet, more details on https://bitcoin.org By paying the ransom from your personal cold cryptocurrency wallet, you will avoid any problems from regulators, police and brokers.\r\n\r\n>>>>> Don't be afraid of any legal consequences, you were very scared, that's why you followed all our instructions, it's not your fault if you are very scared. Not a single company that paid us has had issues. Any excuses are just for insurance company to not pay on their obligation.\r\n\r\n>>>>> You need to contact us via TOR darknet sites with your personal ID\r\n\r\nDownload and install Tor Browser https://www.torproject.org/\r\nWrite to the chat room and wait for an answer, we'll guarantee a response from us. If you need a unique ID for correspondence with us that no one will know about, ask it in the chat, we will generate a secret chat for you and give you ID via private one-time memos service, no one can find out this ID but you. Sometimes you will have to wait some time for our reply, this is because we have a lot of work and we attack hundreds of companies around the world.\r\n\r\nTor Browser personal link for CHAT available only to you: \r\n( often times to protect our web sites from ddos attacks we include ACCESS KEY - ADTISZRLVUMXDJ34RCBZFNO6BNKLEYKYS5FZPNNXK4S2RSHOENUA )\r\nhttp://xvt5hvgldlzbll33sytrafy4sczfnqzrzdfuxe272iiaaw7pgogcxbid.onion\r\n\r\nTor Browser Links for CHAT \r\n( often times to protect our web sites from ddos attacks we include ACCESS KEY - ADTISZRLVUMXDJ34RCBZFNO6BNKLEYKYS5FZPNNXK4S2RSHOENUA )\r\nhttp://lockbitspyakyequybgwgwauhzqxx7ba2gh3lmlj3zyeuaknrexdzfid.onion\r\nhttp://lockbitspxmqqfi6bw4y7f5psnpoaakhlisdx33busmnpgtimart5fad.onion\r\nhttp://lockbitspxgtf65ej7uu5h7qtephbevcsc2sk2brxzmt754etrrzhdqd.onion\r\nhttp://lockbitspudgjptrzadjzi7b4n2nw3yq6aqqqqw6wbrrjkr2ffuhkhyd.onion\r\nhttp://lockbitsptqsmaf56cmo7bieqwh5htlsfkodpahsaurxlquoz67zwrad.onion\r\n\r\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\r\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\r\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\r\n>>>>> Your personal identifier to communicate with us ID: %s <<<<<\r\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\r\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\r\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\r\n\r\n>>>>> Want a lamborghini, a ferrari and lots of titty girls? Sign up and start your pentester billionaire journey in 5 minutes with us.\r\n( often times to protect our web sites from ddos attacks we include ACCESS KEY - ADTISZRLVUMXDJ34RCBZFNO6BNKLEYKYS5FZPNNXK4S2RSHOENUA )\r\nhttp://lockbitapyx2kr5b7ma7qn6ziwqgbrij2czhcbojuxmgnwpkgv2yx2yd.onion\r\nhttp://lockbitapyum2wks2lbcnrovcgxj7ne3ua7hhcmshh3s3ajtpookohqd.onion\r\nhttp://lockbitapp24bvbi43n3qmtfcasf2veaeagjxatgbwtxnsh5w32mljad.onion\r\nhttp://lockbitapo3wkqddx2ka7t45hejurybzzjpos4cpeliudgv35kkizrid.onion\r\nhttp://lockbitapiahy43zttdhslabjvx4q6k24xx7r33qtcvwqehmnnqxy3yd.onion\r\n\r\nVersion: LockBitBlack4.0-rc-001\r\n", - "count": 3, - "total_related": 7, - "prevalence": 0.42857142857142855 - }, - { - "value": "\r\n\t\t\t!! ALL YOUR FILES ARE ENCRYPTED !!!\r\n\t\t\t\r\n\t\t\tYou can't restore them without our decryptor.\r\n\t\t\t\r\n\t\t\tDon't try to use any public tools, you could damage the files and lose them forever.\r\n\t\t\t\r\n\t\t\tTo make sure our decryptor works, contact us and decrypt one file for free.\r\n\t\t\t\r\n\t\t\tDownload TOX messenger: https://tox.chat/\r\n\t\t\t\r\n\t\t\tAdd friend in TOX, ID: 36F186C6FDCAAC0CF122E234B5D15F3F42F73568745F251C1306D71EBCA96817770F9B9AC2E6", - "count": 3, - "total_related": 20, - "prevalence": 0.15 - }, - { - "value": "\n Attention!\r\n\r\n\r\nAll your imortant files were encrypted!\r\n\r\n\r\nIf you want to return files back, email us \r\n\r\n\r\ncriptoman@mailfence.com or\r\n\r\n\r\ngizmo12@tutanota.com \r\n\r\n\r\nand specify your ID - 6800484869412518\r\n\r\n\r\nDon't try to decrypt by yourself - \r\n\r\nyou can loose all your files permanently!\r\n\r\n\r\nDon't move or modify files! \r\n\r\n\r\nTo prove that we can decrypt your files, send 3 any \r\n\r\nencrypted files (up to 3 Mb) and we decrypt them for free.", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "\r\n\r\n>>>> \tYour data are stolen and encrypted, The data will be published on TOR website if you do not pay the ransom.\r\n\r\n\r\n>>>> \tAll your files have been encrypted and hacked, Your computer was infected with a ransomware virus. Your files have been encrypted \tand you won't be able to decrypt them without our help. What can I do to get my files back? You can buy our special decryption \t\tsoftware, which will allow you to recover all your data and remove the ransomware from your computer.\r\n \r\n\tSend us money or we will fuck up your files and then leak it. pay us 0.00245 ($250) Bitcoin only. \r\n You have to pay it within 24 hours. Good luck!\r\n\tOur Bitcoin Address is: 16ynmPuaMdjYTfuHtWNxfPYAE88An9TMyd\r\n\r\n\tPayment Amount: 0.0024 BTC ($250)\r\n\tBitcoin Address: 16ynmPuaMdjYTfuHtWNxfPYAE88An9TMyd\r\n\tContact Us (After Payment Only): cryhacker360@protonmail.com\r\n\r\n\r\n\r\n>>>> Your personal DECRYPTION ID: %s\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "\r\n\r\nHello\r\n\r\n\r\nWe are a team of high-level competent team of Pentesters but NOT a THREAT to your reputable organization\r\n\r\nWe secure networks of companies to avoid complete destruction and damages to companies\r\n\r\nWe encrypted all files on Your servers to show sign of breach / network intrusion\r\n\r\n\r\nTo resolve this Continue reading !!!!\r\n\r\nALL files oN Your Entire Network Servers and Connected Devices are Encrypted.\r\n\r\nMeans , Files are modified and are not usable at the moment.\r\n\r\n\r\nDon't Panic !!!\r\n\r\nAll Encrypted files can be reversed to original form and become usable .\r\n\r\nThis is Only Possible if you buy the universal Decryption software from me.\r\n\r\n\r\nPrice for universal Decryption Software : $ Contact us either through email or tox chat app for the ransom price $\r\n\r\n\r\nYou Have 72 hours To Make Payment As Price of Universal Decryption software increases by $1000 dollars every 24 hours.\r\n\r\n\r\nContact our team through email: bl00dyadmin@dnmx.org\r\n\r\nYou can write me on tox: \r\n\r\nDownload tox app from https://tox.chat\r\n\r\nCreate new Account ..\r\n\r\nSend me friend request using my tox id:\r\n\r\n\r\nE5BBFAD2DB3FB497EA03612B2428F927FD8A9B3333D524FD51D43B029B7870571CEB0166CB03\r\n\r\n*copy and paste it as it is*\r\n\r\n\r\nBefore You Pay me ... I will Decrypt 3 files for free To proof the universal Decryption software works\r\n\r\nFailure to Pay Me :\r\n\r\nKindly RESPECT my Rules\r\n\r\nNote: Huge amounts of Data / documents has been stolen from your Network servers and will be published online for free\r\n\r\nI have stolen All Your Databases ; DAta on your shared drives ; AD users Emails(Good for Spam) ;\r\n\r\ni have stolen huge amount of critical data from your servers\r\n\r\n* I keep the breach private only if your cooperate *\r\n", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "\r\n ~~~ LockBit 3.0 the world's fastest ransomware since 2019~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n\tThe data will be published on TOR website if you do not pay the ransom \r\n\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n\t\r\n>>>> You need to contact us with your personal DECRYPTION ID: %s\r\n\r\n>>>> To contact us:\r\n\r\n\t1. Download Getsesion https://getsession.org/download\r\n\t2. Add friend my id: 05e4263403161708dbe4c152d73c83ffd113fe509896008e590f730e29e849a53f\r\n \r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "Hello! \r\n\r\nYour files have been stolen from your network and encrypted with a strong algorithm. We work for money and are not associated with politics. All you need to do is contact us and pay.\r\n\r\n--- Our communication process:\r\n\r\n\t1. You contact us.\r\n\t2. We send you a list of files that were stolen.\r\n\t3. We decrypt 1 file to confirm that our decryptor works.\r\n\t4. We agree on the amount, which must be paid using BTC.\r\n\t5. We delete your files, we give you a decryptor.\r\n\t6. We give you a detailed report on how we compromised your company, and recommendations on how to avoid such situations in the future.\r\n \r\n--- Client area (use this site to contact us):\r\n\r\n\tLink for Tor Browser: http://3pktcrcbmssvrnwe5skburdwe2h3v6ibdnn5kbjqihsg6eu6s6b7ryqd.onion\r\n\t>>> Use this ID: %s to begin the recovery process.\r\n\t\r\n\t* In order to access the site, you will need Tor Browser, \r\n\t you can download it from this link: https://www.torproject.org/\r\n\r\n--- Additional contacts:\r\n\r\n\tSupport Tox: 1C054B722BCBF41A918EF3C485712742088F5C3E81B2FDD91ADEA6BA55F4A856D90A65E99D20\r\n\r\n--- Recommendations: \r\n\r\n\tDO NOT RESET OR SHUTDOWN - files may be damaged.\r\n\tDO NOT RENAME OR MOVE the encrypted and readme files.\r\n\tDO NOT DELETE readme files.\r\n\r\n--- Important:\r\n\r\n\tIf you refuse to pay or do not get in touch with us, we start publishing your files.\r\n\t02/05/2024 00:00 UTC the decryptor will be destroyed and the files will be published on our blog.\r\n\t\r\n\tBlog: http://z3wqggtxft7id3ibr7srivv5gjof5fwg76slewnzwwakjuf3nlhukdid.onion\r\n\r\nSincerely, 01000100 01110010 01100001 01100111 01101111 01101110 01000110 01101111 01110010 01100011 01100101", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "Your decrypt ID: 22afabc7-0101-4bf0-bd4d-e937aa8275cb\r\n\t\r\nQTox ID Support: 3DCE1C43491FC92EA7010322040B254FDD2731001C2DDC2B9E819F0C946BDC3CD251FA3B694A\r\n\t\r\nEmail Support: ziqbwnscvbsj@proton.me,asdcspocnsdke@proton.me,tfefwapyasd3@proton.me\r\n\r\nYou can contact us in email or qtox.", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "\r\n ~~~ LockBit 3.0 the world's fastest ransomware since 2019~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n\tThe data will be published on TOR website if you do not pay the ransom \r\n\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n \r\n\tYou can obtain information about us on twitter https://twitter.com/hashtag/lockbit?f=live\r\n \r\n\r\n>>>> You need contact us and provide your personal DECRYPTION ID to: taliban88@proton.me\r\n\r\n Then you must send 2 BTC to address: bc1qw860t6dplpchu55f8gyykpu75fagwltx9e6y3h\r\n Only then, we will send you the key to decrypt your company!\r\n\r\n\t\r\n>>>> Your personal DECRYPTION ID: B7568014A48684D6D525F3F3722638C4\r\n\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!\r\n\r\n", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "\r\n ~~~ LockBit 3.0~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n\tThe data will be published on TOR website if you do not pay the ransom \r\n\r\n\tLinks for Tor Browser:\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion\r\n\r\n\tLinks for the normal browser\r\n\thttp://lockbitapt.uz\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion.ly\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion.ly\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion.ly\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion.ly\r\n\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything but your money.\r\n\r\n\tIf you do what we want, we will provide you with a program to decrypt and we will delete your data.\r\n\r\n\tLife is too short to be sad. Do not be sad, my request is only easy.\r\n\r\n\tIf we do not give you the decryption, or we do not delete your data after you do our orders.\r\n\tTherefore, for us your reputation is very important. We attack companies that we have targeted and there are no dissatisfied victims after doing my orders.\r\n\r\n\tYou can get information about us on twitter https://twitter.com/hashtag/lockbit?f=live\r\n \r\n\r\n>>>> You need contact us and decrypt one file for free on these TOR sites with your personal DECRYPTION ID\r\n\r\n\tDownload and install TOR Browser https://www.torproject.org/\r\n\tWrite to a chat and wait for the answer, we will always answer you. \r\n\tSometimes you will need to wait for our answer because we attack many companies.\r\n\t\r\n\tLinks for Tor Browser:\r\n\thttp://lockbitsupt7nr3fa6e7xyb73lk6bw6rcneqhoyblniiabj4uwvzapqd.onion\r\n\thttp://lockbitsupuhswh4izvoucoxsbnotkmgq6durg7kficg6u33zfvq3oyd.onion\r\n\thttp://lockbitsupn2h6be2cnqpvncyhj4rgmnwn44633hnzzmtxdvjoqlp7yd.onion\r\n\r\n\tLink for the normal browser\r\n\thttp://lockbitsupp.uz\r\n\t\r\n\tIf you do not get an answer in the chat room for a long time, the site does not work and in any other emergency, you can contact us in jabber or tox.\r\n\t\r\n\tTox ID LockBitSupp: 3085B89A0C515D2FB124D645906F5D3DA5CB97CEBEA975959AE4F95302A04E1D709C3C4AE9B7\r\n\tXMPP (Jabber) Support: 598954663666452@exploit.im 365473292355268@thesecure.biz\r\n\t\r\n>>>> Your personal DECRYPTION ID: B7568014A48684D6D525F3F3722638C4\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "Hello! \r\n\r\nYour files have been stolen from your network and encrypted with a strong algorithm. We work for money and are not associated with politics. All you need to do is contact us and pay.\r\n\r\n--- Our communication process:\r\n\r\n\t1. You contact us.\r\n\t2. We send you a list of files that were stolen.\r\n\t3. We decrypt 1 file to confirm that our decryptor works.\r\n\t4. We agree on the amount, which must be paid using BTC.\r\n\t5. We delete your files, we give you a decryptor.\r\n\t6. We give you a detailed report on how we compromised your company, and recommendations on how to avoid such situations in the future.\r\n \r\n--- Client area (use this site to contact us):\r\n\r\n\tLink for Tor Browser: http://3pktcrcbmssvrnwe5skburdwe2h3v6ibdnn5kbjqihsg6eu6s6b7ryqd.onion\r\n\t>>> Use this ID: %s to begin the recovery process.\r\n\t\r\n\t* In order to access the site, you will need Tor Browser, \r\n\t you can download it from this link: https://www.torproject.org/\r\n\r\n--- Additional contacts:\r\n\r\n\tSupport Tox: 1C054B722BCBF41A918EF3C485712742088F5C3E81B2FDD91ADEA6BA55F4A856D90A65E99D20\r\n\r\n--- Recommendations: \r\n\r\n\tDO NOT RESET OR SHUTDOWN - files may be damaged.\r\n\tDO NOT RENAME OR MOVE the encrypted and readme files.\r\n\tDO NOT DELETE readme files.\r\n\r\n--- Important:\r\n\r\n\tIf you refuse to pay or do not get in touch with us, we start publishing your files.\r\n\t26/04/2024 00:00 UTC the decryptor will be destroyed and the files will be published on our blog.\r\n\t\r\n\tBlog: http://z3wqggtxft7id3ibr7srivv5gjof5fwg76slewnzwwakjuf3nlhukdid.onion\r\n\r\nSincerely, 01000100 01110010 01100001 01100111 01101111 01101110 01000110 01101111 01110010 01100011 01100101", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "\n ~~~NULLBULGE LOCK - BASED ON LOCKBIT~~~\n\n\t>>>> Your data is encrypted... but dont freak out\n\n\tIf we encrypted you, you majorly fucked up. But... all can be saved\n\tBut not for free, we require an xmr payment\n\n\t>>>> What guarantees that we will not deceive you? \n\n\tWe are not a politically motivated group and we do not need anything other than your money. \n \n\tIf you pay, we will provide you the programs for decryption.\n\tLife is too short to be sad. Dont be sad money is only paper. Your files are more important than paper right?\n \n\tIf we do not give you decrypter then nobody will pay us in the future. \n\tTo us, our reputation is very important. There is no dissatisfied victim after payment.\n \n\n>>>> You may contact us and decrypt one file for free on these TOR sites with your personal DECRYPTION ID\n\n\tDownload and install TOR Browser https://www.torproject.org/\n\tWrite to a chat and wait for the answer, we will always answer you. \n\tSometimes you will need to wait a while\n\t\n\tLinks for Tor Browser:\n\thttp://nullblgtk7dwzpfklgktzll27ovvnj7pvqkoprmhubnnb32qcbmcpgid.onion/\n\n\tLink for the normal browser\n\thttp://group.goocasino.org\r\n\thttps://nullbulge.com\n\t\n>>>> Your personal DECRYPTION ID: %s\n\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "\r\n\t\t\t\t\t ~~~ Unlock your files! ~~\r\n\t Hello, we hacked your PC and encrypted all your files.\r\n\t BUT!!! Fear not, you can decrypt your files and recover everything very easy,\r\n\r\n\t You just need to pay a smaill ammount. this is just bussiness.\r\n\r\n\t You pay the ransom, we give you the file to decrypt your files, and we move on.\r\n\r\n\t We won't attack you again, or talk to anyone about this.\r\n\r\n\t Send an email to soneie2020@cock.li or sonrie2020@proton.me and talk to us.\r\n\r\n\t You would need to buy XMR (Monero) to make the payment, it's very easy.\r\n\r\n \tor follow an online guide, ask us in the email if you need help.\r\n\r\n\t\t\t\t\t>>>> \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t>>>> Your personal DECRYPTION ID: %s\r\n\r\n\t\t\t\t\t>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n\t\t\t\t\t>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "\r\n!!! ALL YOUR FILES ARE ENCRYPTED!!!\r\n\r\nAll your files, documents, photos, databases and other important files are encrypted.\r\nThe only way to recover your files is to use a decryptor.\r\nTo get the decryptor, write to us by mail or telegram, specify the ID of the encrypted files in the letter:\r\n\r\nEmail: decryptor@cyberfear.com\r\nTelegram: https://t.me/bit_decryptor\r\n\r\nWarning.\r\n* Do not rename encrypted files.\r\n* Do not attempt to decrypt data using third party software as this may result in permanent data loss.\r\n* Do not contact other people, only we can help you and recover your data.\r\n\r\nYour personal decryption ID: %s\r\n", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "\r\n\t\t\t!! ALL YOUR FILES ARE ENCRYPTED !!!\r\n\t\t\t\r\n\t\t\tYou can't restore them without our decryptor.\r\n\t\t\t\r\n\t\t\tDon't try to use any public tools, you could damage the files and lose them forever.\r\n\t\t\t\r\n\t\t\tTo make sure our decryptor works, contact us and decrypt one file for free.\r\n\t\t\t\r\n\t\t\tDownload TOX messenger: https://tox.chat/\r\n\t\t\t\r\n\t\t\tAdd friend in TOX, ID: C95CA1986286917777625663BAE618AA883B64AD411FCB5DD8E93FA8C47E7F3D287985558F82", - "count": 2, - "total_related": 9, - "prevalence": 0.2222222222222222 - }, - { - "value": "\r\n!!!All of your files are encrypted!!!\r\nTo decrypt them send e-mail to this address: fastwindGlobe@mail.ee\r\nIn case of no answer in 24h, send e-mail to this address: fastwindglobe@cock.li\r\nYou can also contact us via Telegram: @decryptfastwind\r\nIn case of non-payment, all your files will be posted to the public Internet!\r\nYour personal DECRYPTION ID: %s\r\n", - "count": 2, - "total_related": 10, - "prevalence": 0.2 - }, - { - "value": "\r\n~~ LockBit 3.0 the world's fastest and most stable ransomware from 2019~~~\r\n\r\n>>>>> Your data is stolen and encrypted.\r\n\r\nBLOG Tor Browser Links:\r\nhttp://lockbit3753ekiocyo5epmpy6klmejchjtzddoekjlnt6mu3qh4de2id.onion/\r\nhttp://lockbit3g3ohd3katajf6zaehxz4h4cnhmz5t735zpltywhwpc6oy3id.onion/\r\nhttp://lockbit3olp7oetlc4tl5zydnoluphh7fvdt5oa6arcp2757r7xkutid.onion/\r\nhttp://lockbit435xk3ki62yun7z5nhwz6jyjdp2c64j5vge536if2eny3gtid.onion/\r\nhttp://lockbit4lahhluquhoka3t4spqym2m3dhe66d6lr337glmnlgg2nndad.onion/\r\nhttp://lockbit6knrauo3qafoksvl742vieqbujxw7rd6ofzdtapjb4rrawqad.onion/\r\nhttp://lockbit7ouvrsdgtojeoj5hvu6bljqtghitekwpdy3b6y62ixtsu5jqd.onion/\r\n\r\n>>>>> What guarantee is there that we won't cheat you? \r\nWe are the oldest ransomware affiliate program on the planet, nothing is more important than our reputation. We are not a politically motivated group and we want nothing more than money. If you pay, we will fulfill all the terms we agree on during the negotiation process. Treat this situation simply as a paid training session for your system administrators, because it was the misconfiguration of your corporate network that allowed us to attack you. Our pentesting services should be paid for the same way you pay your system administrators salaries. You can get more information about us on Ilon Musk's Twitter https://twitter.com/hashtag/lockbit?f=live\r\n \r\n>>>>> You need to contact us on TOR darknet sites with your personal ID\r\n\r\nDownload and install Tor Browser https://www.torproject.org/\r\nWrite to the chat room and wait for an answer, we'll guarantee a response from us. If you need a unique ID for correspondence with us that no one will know about, ask it in the chat, we will generate a secret chat for you and give you his ID via private one-time memos service, no one can find out this ID but you. Sometimes you will have to wait some time for our reply, this is because we have a lot of work and we attack hundreds of companies around the world.\r\n\r\nTor Browser personal link for CHAT available only to you (available during a ddos attack): \r\n\r\n\r\nTor Browser Links for CHAT (sometimes unavailable due to ddos attacks):\r\nhttp://lockbit5eevg7vec4vwwtzgkl4kulap6oxbic2ye4mnmlq6njnpc47qd.onion\r\nhttp://lockbit74beza5z3e3so7qmjnvlgoemscp7wtp33xo7xv7f7xtlqbkqd.onion\r\nhttp://lockbit75naln4yj44rg6ez6vjmdcrt7up4kxmmmuvilcg4ak3zihxid.onion\r\nhttp://lockbit7a2g6ve7etbcy6iyizjnuleffz4szgmxaawcbfauluavi5jqd.onion\r\nhttp://lockbitaa46gwjck2xzmi2xops6x4x3aqn6ez7yntitero2k7ae6yoyd.onion\r\nhttp://lockbitb42tkml3ipianjbs6e33vhcshb7oxm2stubfvdzn3y2yqgbad.onion\r\nhttp://lockbitcuo23q7qrymbk6dsp2sadltspjvjxgcyp4elbnbr6tcnwq7qd.onion\r\n\r\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\r\n>> Your personal Black ID: %s <<\r\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\r\n\r\n>>>>> Warning! Do not delete or modify encrypted files, it will lead to problems with decryption of files!\r\n\r\n>>>>> Don't go to the police or the FBI for help and don't tell anyone that we attacked you. ", - "count": 2, - "total_related": 15, - "prevalence": 0.13333333333333333 - }, - { - "value": "\r\n~~ LockBit 3.0 the world's fastest and most stable ransomware from 2019~~~\r\n\r\n>>>>> Your data is stolen and encrypted.\r\n\r\nBLOG Tor Browser Links:\r\nhttp://lockbit3753ekiocyo5epmpy6klmejchjtzddoekjlnt6mu3qh4de2id.onion/\r\nhttp://lockbit3g3ohd3katajf6zaehxz4h4cnhmz5t735zpltywhwpc6oy3id.onion/\r\nhttp://lockbit3olp7oetlc4tl5zydnoluphh7fvdt5oa6arcp2757r7xkutid.onion/\r\nhttp://lockbit435xk3ki62yun7z5nhwz6jyjdp2c64j5vge536if2eny3gtid.onion/\r\nhttp://lockbit4lahhluquhoka3t4spqym2m3dhe66d6lr337glmnlgg2nndad.onion/\r\nhttp://lockbit6knrauo3qafoksvl742vieqbujxw7rd6ofzdtapjb4rrawqad.onion/\r\nhttp://lockbit7ouvrsdgtojeoj5hvu6bljqtghitekwpdy3b6y62ixtsu5jqd.onion/\r\n\r\n>>>>> What guarantee is there that we won't cheat you? \r\nWe are the oldest ransomware affiliate program on the planet, nothing is more important than our reputation. We are not a politically motivated group and we want nothing more than money. If you pay, we will fulfill all the terms we agree on during the negotiation process. Treat this situation simply as a paid training session for your system administrators, because it was the misconfiguration of your corporate network that allowed us to attack you. Our pentesting services should be paid for the same way you pay your system administrators salaries. You can get more information about us on Ilon Musk's Twitter https://twitter.com/hashtag/lockbit?f=live\r\n \r\n>>>>> You need to contact us on TOR darknet sites with your personal ID\r\n\r\nDownload and install Tor Browser https://www.torproject.org/\r\nWrite to the chat room and wait for an answer, we'll guarantee a response from us. If you need a unique ID for correspondence with us that no one will know about, ask it in the chat, we will generate a secret chat for you and give you his ID via private one-time memos service, no one can find out this ID but you. Sometimes you will have to wait some time for our reply, this is because we have a lot of work and we attack hundreds of companies around the world.\r\n\r\nTor Browser personal link for CHAT available only to you (available during a ddos attack): \r\nhttp://lockbit75naln4yj44rg6ez6vjmdcrt7up4kxmmmuvilcg4ak3zihxid.onion\r\n\r\nTor Browser Links for CHAT (sometimes unavailable due to ddos attacks):\r\nhttp://lockbit5eevg7vec4vwwtzgkl4kulap6oxbic2ye4mnmlq6njnpc47qd.onion\r\nhttp://lockbit74beza5z3e3so7qmjnvlgoemscp7wtp33xo7xv7f7xtlqbkqd.onion\r\nhttp://lockbit75naln4yj44rg6ez6vjmdcrt7up4kxmmmuvilcg4ak3zihxid.onion\r\nhttp://lockbit7a2g6ve7etbcy6iyizjnuleffz4szgmxaawcbfauluavi5jqd.onion\r\nhttp://lockbitaa46gwjck2xzmi2xops6x4x3aqn6ez7yntitero2k7ae6yoyd.onion\r\nhttp://lockbitb42tkml3ipianjbs6e33vhcshb7oxm2stubfvdzn3y2yqgbad.onion\r\nhttp://lockbitcuo23q7qrymbk6dsp2sadltspjvjxgcyp4elbnbr6tcnwq7qd.onion\r\n\r\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\r\n>> Your personal Black ID: %s <<\r\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\r\n\r\n>>>>> Warning! Do not delete or modify encrypted files, it will lead to problems with decryption of files!\r\n\r\n>>>>> Don't go to the police or the FBI for help and don't tell anyone that we attacked you. ", - "count": 2, - "total_related": 20, - "prevalence": 0.1 - }, - { - "value": "\n\tHello! \r\n\t\r\n\tYour data are stolen and encrypted.\r\n\r\n\tIn case of nonpayment - all information will be sold or made publicly accessible. \r\n\t\r\n\tCompared to other ransomware we charge a lot less, so don't be stingy!\r\n\t\r\n\tIf you pay - we will provide you with decryption software and remove your data from our servers. \r\n\t\r\n\tWe will also let you know about the vulnerability in your servers that we used to infiltrate your network. \r\n\t\r\n\tWARNING! Do not delete or modify any files, it can lead to recovery problems! \r\n\t\r\n\tYou can contact us using Session messenger without registration and sms https://getsession.org/download \r\n\t\r\n\tMy Session ID: 05839c6cce78c3f3043e7a65c27e881cbb9efbda3bab942d273a496876340b254f\r\n\t\r\n\tYou can send us any 1 file for free decryption.\r\n\t\r\n\tGood luck!\r\n\r\n\t\r\n\t", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\n ~~~ Your System Hacked By Orion Hackers~~~ \n\n>>>> Your data are stolen and encrypted\n\n\tThe data will be published on TOR website if you do not pay the ransom \n\n \n\n>>>> You need contact us and decrypt one file for free on these tox id =32C12B278912E26E5EAC57AEBB3F4FF16F0E31603C7B9D46AC02E9D993EE14351CEC3AB5945C with your personal DECRYPTION ID\n\n\t\n\t\n\t\n\tLinks for qtox:\n\r\n\thttps://tox.chat/download.html\r\n Tox ID OrionSupport: 32C12B278912E26E5EAC57AEBB3F4FF16F0E31603C7B9D46AC02E9D993EE14351CEC3AB5945C \r\n\t\r\n\t\t\r\n Download & Install qTox \u00e2\u0080\u0093 Get it from https://github.com/TokTok/qTox/releases/download/v1.18.2/setup-qtox-x86_64-release.exe and install\r\n Set Up Profile \u00e2\u0080\u0093 Create a username, save, and log in\r\n Find Your Tox ID \u00e2\u0080\u0093 Check your profile to copy and share\r\n Add a Contact \u00e2\u0080\u0093 Click Add friend enter their Tox ID, and send a request\r\n Send a Message \u00e2\u0080\u0093 Once they accept, open chat and type your message\r\n\t\r\n\tAlternative if you want to setup qtox in android \r\n https://play.google.com/store/apps/details?id=ltd.evilcorp.atox&hl=en\r\n\tTox ID Support: 6F902E0A889E60D47FB305E2EE4B72926A4A68297F2364285E2CB005DE53B377F76934FF16AB\r\n \n\n\t\n\tIf you do not get an answer in the chat room for a long time, the site does not work and in any other emergency, you can contact us in tox.\n\t\n\tTox ID : 32C12B278912E26E5EAC57AEBB3F4FF16F0E31603C7B9D46AC02E9D993EE14351CEC3AB5945C\r\n\t\r\n\tSometimes you will need to wait for our answer because we attack many companies.\r\n\t\r\n\t\r\n\t\r\n\t>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\n\n\t\n>>>> Your personal DECRYPTION ID: %s\n\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\n\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\n ~~~ Your System Hacked By Orion Hackers~~~ \n\n>>>> Your data are stolen and encrypted\n\n\tThe data will be published on TOR website if you do not pay the ransom \n\n \n\n>>>> You need contact us and decrypt one file for free on these tox id =32C12B278912E26E5EAC57AEBB3F4FF16F0E31603C7B9D46AC02E9D993EE14351CEC3AB5945C with your personal DECRYPTION ID\n\n\t\n\t\n\t\n\tLinks for qtox:\n\r\n\thttps://tox.chat/download.html\r\n Tox ID OrionSupport: 32C12B278912E26E5EAC57AEBB3F4FF16F0E31603C7B9D46AC02E9D993EE14351CEC3AB5945C \r\n\t\r\n\t\t\r\n Download & Install qTox \u00e2\u0080\u0093 Get it from https://github.com/TokTok/qTox/releases/download/v1.18.2/setup-qtox-x86_64-release.exe and install\r\n Set Up Profile \u00e2\u0080\u0093 Create a username, save, and log in\r\n Find Your Tox ID \u00e2\u0080\u0093 Check your profile to copy and share\r\n Add a Contact \u00e2\u0080\u0093 Click Add friend enter their Tox ID, and send a request\r\n Send a Message \u00e2\u0080\u0093 Once they accept, open chat and type your message\r\n\t\r\n\tAlternative if you want to setup qtox in android \r\n https://play.google.com/store/apps/details?id=ltd.evilcorp.atox&hl=en\r\n\tTox ID Support: 6F902E0A889E60D47FB305E2EE4B72926A4A68297F2364285E2CB005DE53B377F76934FF16AB\r\n \n\n\t\n\tIf you do not get an answer in the chat room for a long time, the site does not work and in any other emergency, you can contact us in tox.\n\t\n\tTox ID : 552653D2E9A5701EA30612EAE77345293F2E35C5D29DB196BB62395BE71BB25F\r\n\t\r\n\tSometimes you will need to wait for our answer because we attack many companies.\r\n\t\r\n\t\r\n\t\r\n\t>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\n\n\t\n>>>> Your personal DECRYPTION ID: %s\n\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\n\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\n ~~~ LockBit 5.08 the world's fastest ransomware since 2024~~~\n\n>>>> Your data are stolen and encrypted\n\n\tThe data will be published on TOR website if you do not pay the ransom \n\n\t\r\nBTC amount 0.02\r\n\r\nBTC amount 0 , deleted all files from you PC, and post all infirmation to public.\r\n\r\nwhere send BTC: bc1q3jwsuxq572pucdcdytd420fvsvysmn2dquh0mk \r\n\r\nYou can buy them on the exchange or at an ATM https://coinatmradar.com. You can find the addresses here buy with credit or debet card online https://www.moonpay.com/buy. \r\n\r\nAfter that, send a request with confirmation to e-mail , faster way!\r\ngogo875@proton.me\r\nor\r\nwdon90347@gmail.com\r\n\r\nIf both email no answer, you need faster answer and unlock please use TOX\r\nYou can contact us using Tox messenger without registration and SMS https://tox.chat/download.html. \n\t\r\nUsing Tox messenger, we will never know your real name, it means your privacy is guaranteed.\n\n\t\r\nIf you want to contact us, tox. \n\t\n\t\r\nTox ID LockBitSupp: 47C90F99E92AC0ECEAD8C2BD15B21866EBC1195B6E2B0412CE3658E21B696843FF4A8D144B24\r\n\r\n\r\n\r\n\r\n\r\n", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\n ~~~ PC Locker 3.0 by Mr.Robot~~~\n\n>>>> Your data are stolen and encrypted\n\n\tTo get your files back you will have to pay a one-time fee of $45 in bitcoin or monero.\n\n\n>>>> You need contact us and decrypt one file for free on these platforms with your personal DECRYPTION ID\n\n\tContact the following account on telegram\r\n\t@mr_robot_unlock\r\n\tor paste this link in your browser\r\n\thttps://t.me/mr_robot_unlock\n\t\r\n\t\n>>>> Your personal DECRYPTION ID: %s\n\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\n\n>>>> Warning! If you do not pay the ransom you will not receive you files NO EXCEPTIONS!\n\r\n>>>> Warning! Any attempt to negotiate or you don't want to pay is INSTANT BLOCK!\n\n>>>> Advertisement\n\t\n\tWould you like to earn thousands of dollars $$$ ?\n\tWe sell mentorship for stealers, DDOS and ransomware.\r\n\tWe only work with professionals and people with money DO NOT WASTE OUR TIME.", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\n ~~~ ~~~\n\n Payment Demand for Data Retrieval\r\n\r\nToday is 02.04.2024 - DAY 1\r\n\r\nWe are reaching out to inform you that we currently hold your PC files, emails, and cloud data. \r\nIn order to facilitate the return of this information, we are requesting a payment of $2000 within the next 48 hours in bitcoin or monero. The addresses are: \r\nYou must transfer the money to those addresses:\r\n\r\n Bitcoin: \r\n\r\n bc1qhulavzzw6vns8vr45pkpnmenx7h36s43xdga9f\r\n\r\n Monero: \r\n\r\n 45YditefWQmUPaxaMxoEDFQc7FmDvAQXE9CXVBcLtZjzYpCDD9qWM4ETYkAAKumsnaSB1eYcQfVdn8rZnoSETbWi5B17YHb\r\n\r\n\r\n\r\nIf you don't transfer the money within the next 48 hours, the amount will increase by $1000 each subsequent day, up to a maximum of $20000.\r\n\r\nHere's the breakdown:\r\n\r\nPay on \r\nFirst 48 hours: $2000 \r\nDay 3: $3000 \r\nDay 4: $4000 \r\nDay 5: $5000 \r\nDay 6: $6000 \r\nDay 7: $7000 \r\nDay 8: $8000 \r\nDay 9: $9000 \r\nDay 10: $10000 \r\nDay 11: $11000\r\nans so on up to day 20\r\n\r\nThese payment terms are non-negotiable.\r\n\r\n Upon receipt of payment, we will decrypt all your data, files, servers, documents, pictures and everything else. \r\n \r\n You can contact us via Jabber BUT ONLY AFTER YOU HAVE MADE A TRANSFER OF AT LEAST $2000, \r\n which you can prove by attaching a screenshot of the transaction from your bitcoin address to ours for verification on the blockchain.\r\n \r\n XMPP (Jabber) Support: random131313@exploit.im\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\nIf you don't pay within 20 days we will sale of your data on the dark web.\r\n\r\nIt's up to you. \r\n\r\n\r\nThe clock is ticking \n\n", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\n YOUR COMPUTER HAS BEEN BREACHED AND YOUR DATA IS ENCRYPTED!\r\n\r\nWe have infiltrated your system and encrypted your critical files. To regain access to your data, you must pay a ransom of 300 USD in Bitcoin (BTC).\r\n\r\nInstructions:\r\n\r\nPurchase 300 USD worth of Bitcoin through an exchange platform (e.g., Binance, Coinbase).\r\nContact us at software009a@proton.me and pay us. And we give you decryptor and key id. After you will find back all your files.\r\nDeadline: You have 72 hours to make the payment. After this period, your data will be permanently lost or publicly exposed. And the decryptor deleted.\r\n\r\nWarning:\r\n\r\nDo not attempt to decrypt the files yourself; this will result in permanent data loss.\r\nAny attempt to contact authorities or ignore this demand will worsen the situation.\r\nComply, and we will provide the decryption tool immediately upon payment.\r\nContact us only at: software009a@proton.me\r\n\r\nAct quickly. Your time is running out.", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\n\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n>>>> Your personal DECRYPTION ID: %s\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!\r\n\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n\r\n\r\n>>>> You need contact us and decrypt one file for free with your personal DECRYPTION ID\r\n\r\nmessage us for decrypt\r\n\r\nhttps://getsession.org/\r\n\r\n05b8d7bdf4c2b1a832b2256eb562f51ad69f2f9d8d274c6dc269cb9be5449fa84c ", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\n\r\n------Dear managers!------\r\nIf you are reading this, it means your network has been attacked. What does that mean?\r\nWe hacked your network and now all your files, documents, client database, projects and other important data safely encrypted with reliable algorithms.\r\nwe also have a copy of all your data.\r\nWARNING!!! You don't have to go to the POLICE, etc. Otherwise we will not be able to help you.\r\nYou cannot acces the files right now. But do not worry. You can get it back! It is easy to recover in a few steps.\r\nAs proof, we can decrypt any 3 files you provide.\r\n\r\nWe are not interested to ruin your business. We want to get ransom and be happy.\r\nPlease bring this information to your team leaders as soon as possible.\r\n\r\nIn case of a successfull transaction, we will restore your systems within 2-5 hours and also provide security recommendations.\r\n\r\n\r\n-----------------------Important-----------------------\r\nDo not contact data recovery brokers. They don't care about your company. \r\nThese scammers write to us and overcharge you several times the amount we told you. \r\nAssign someone responsible for negotiations and write to us yourself, be reasonable.\r\n\r\n-----------------------WARNING-----------------------\r\n\r\nIf you modify files - our decrypt software won't able to recover data\r\nIf you use third party software - you can damage/modify files (see item 1)\r\nYou nedd cipher key / our decrypt software to restore you files.\r\nThe police or authorities will not be able to help you get the cipher key. We encourage you to consider your decisions.\r\n\r\n-----------------------RECOVERY-----------------------\r\n\r\nUse mail: saimon74927@cyberfear.com\r\nBackup contact: cybergroup@dmc.chat\r\nID message: 05hKgfk10hd-ms \r\n", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\n\r\n------Dear managers!------\r\nIf you are reading this, it means your network has been attacked. What does that mean?\r\nWe hacked your network and now all your files, documents, client database, projects and other important data safely encrypted with reliable algorithms.\r\nwe also have a copy of all your data.\r\nWARNING!!! You don't have to go to the POLICE, etc. Otherwise we will not be able to help you.\r\nYou cannot acces the files right now. But do not worry. You can get it back! It is easy to recover in a few steps.\r\nAs proof, we can decrypt any 3 files you provide.\r\n\r\nWe are not interested to ruin your business. We want to get ransom and be happy.\r\nPlease bring this information to your team leaders as soon as possible.\r\n\r\nIn case of a successfull transaction, we will restore your systems within 4-6 hours and also provide security recommendations.\r\n\r\n\r\n-----------------------WARNING-----------------------\r\n\r\nIf you modify files - our decrypt software won't able to recover data\r\nIf you use third party software - you can damage/modify files (see item 1)\r\nYou nedd cipher key / our decrypt software to restore you files.\r\nThe police or authorities will not be able to help you get the cipher key. We encourage you to consider your decisions.\r\n\r\n-----------------------RECOVERY-----------------------\r\n\r\nUse email: abdrahamteam@pissmail.com (Alternate email address: abdrahamteam@proton.me)\r\nYou personal ID: 2654332581\r\n", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\n\r\n------Dear managers!------\r\nIf you are reading this, it means your network has been attacked. What does that mean?\r\nWe hacked your network and now all your files, documents, client database, projects and other important data safely encrypted with reliable algorithms.\r\nwe also have a copy of all your data.\r\nWARNING!!! You don't have to go to the POLICE, etc. Otherwise we will not be able to help you.\r\nYou cannot acces the files right now. But do not worry. You can get it back! It is easy to recover in a few steps.\r\nAs proof, we can decrypt any 3 files you provide.\r\n\r\nWe are not interested to ruin your business. We want to get ransom and be happy.\r\nPlease bring this information to your team leaders as soon as possible.\r\n\r\nIn case of a successfull transaction, we will restore your systems within 4-6 hours and also provide security recommendations.\r\n\r\n\r\n-----------------------WARNING-----------------------\r\n\r\nIf you modify files - our decrypt software won't able to recover data\r\nIf you use third party software - you can damage/modify files (see item 1)\r\nYou nedd cipher key / our decrypt software to restore you files.\r\nThe police or authorities will not be able to help you get the cipher key. We encourage you to consider your decisions.\r\n\r\n-----------------------RECOVERY-----------------------\r\n\r\nUse email: abdrahamteam@pissmail.com (Alternate email address: abdrahamteam@proton.me)\r\nYou personal ID: sns54088802500\r\n", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\n\r\nAll of your files are currently encrypted. \r\n\r\nAs you know if you don't - just google it all of the data that has been encrypted by our software cannot be recovered by any means without contacting our team directly\r\nIf you try to use any additional recovery software - the files might be damaged so if you are willing to try - try it on the data of the lowest value\r\n\r\nTo make sure that we REALLY CAN get your data back - we offer you to decrypt 2 random files completely free of charge\r\n\r\nYou can contact our team directly for further instructions through our contact: https://t.me/Diamotrix ", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\n \r\n>>>> You need to contact us soon!\r\n\r\n\tOur contact email:\r\n\t\r\n\t goodday@mailum.com\r\n\t\t \r\n\t\t \r\n\t \r\n\t\t \r\n\t\t \r\n>>>> Your data are stolen and encrypted\r\n\r\n>>>> Your personal DECRYPTION ID: %s\r\n\r\n>>>> All files on your computer have been encrypted.\r\n\r\n>>>> If you want to recover encrypted files, then contact us soon!\r\n\r\n>>>> We can decrypt 1-3 files (doc, xls, pdf, txt, jpeg) for free. You can attach them to your email. Databases, archives, backups are decrypted only after payment!\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n \r\n\r\n \r\n\r\n>>>> You need to contact us soon!\r\n\r\n\tOur contact email:\r\n\t\r\n\t goodday@mailum.com\r\n\t\r\n\t\r\n\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!\r\n\r\n", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\n Sparta\r\n\r\n\r\nYour data is stolen and encrypted.\r\nIf you don't pay the ransom, the data will be published on our TOR darknet sites. Keep in mind that once your data appears on our leak site it could be bought by your competitors at any second, so don't hesitate for long time. If you don't contact us in 4 days, we will start leaking data.\r\nYou can find us on email: spartateam@bingzone.net, promeser@proton.me", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\n xane owns you", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\n ~~~ BlackCat ~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n>>>> Your personal DECRYPTION ID: %s\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!\r\n\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n\r\n\r\n>>>> You need contact us and decrypt one file for free on these email or tox chat with your personal DECRYPTION ID\r\n\r\nmessage us for decrypt\r\n\r\nhttps://getsession.org/\r\n\r\n05cb31f6f18b2f7e661a018a3b6599bc43a9f235a9d882344b5cac1b56c3741118 ", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\n ~~~ GET FUCKED BY FLAME~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n\tTo get your files back you will need to pay. If you refuse to pay we will fuck your PC and destroy it. We accept BTC and LTC only.\r\n\r\nSee you soon, -Flame\r\nBTC Address: bc1q0a2az59et9lymfa77drzr5vvm6grl27kfdhsuj\r\nLTC Address: LMFQ6gbDxMr9wNJjo3Wm8ik4uJM6acyNsL", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\n ~~~ Kofurlak 2.0 Ransomware~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n\tThe data will be published if you do not pay the ransom \r\n\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n \r\n \r\n\r\n>>>> You need contact us and decrypt one file for free on qTOX your personal DECRYPTION ID\r\n\r\n\tDownload and install qTOX https://qtox.github.io/\r\n\tAdd friend our qTOX id and wait for the answer, we will always answer you. \r\n\tSometimes you will need to wait for our answer because we attack many companies.\r\n\t\r\n\tTox ID KofurlakSupport: 3683A5F20609D00437ADEF76C55167C40C30B2BBF106D1F38103EA7DCF5FE87F568EEDC0565C\r\n\t\r\n>>>> Your personal DECRYPTION ID: B7568014A48684D6D525F3F3722638C4\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\n ~~~ LockBit 3.0 the world's fastest ransomware since 2019~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n\tThe data will be published on TOR website if you do not pay the ransom \r\n\r\n RANSOMWARE = 100$ \r\n\r\n BITCOIN = 12QBRuDLuQpYLAVZDG1C27dA8aJTvy4Pys\r\n USDT TRON = TLzpsvdaStJ2uviCEhyKYHxfnZhTQfdfLE\r\n LITECOIN = LU6bjsxJDFXHsc7LyXUowThWpY9oj2Lc2C\r\n\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\r\n>>>> You need contact us WHEN THE PAYMENT IS DONE OR WE WILL NO AWSER ! \r\n TELEGRAM = @shopsupportoff\r\n\r\n\t\r\n\t\r\n>>>> Your personal DECRYPTION ID: %s\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack you repeatedly again!\r\n\r\n\r\n", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\n ~~~ LockBit 3.0 the world's fastest ransomware since 2019~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n \r\n\tYou can obtain information about us on twitter https://twitter.com/hashtag/lockbit?f=live\r\n \r\n\r\n>>>> you can contact us in mail or tox.\r\n\t\r\n\tTox ID LockBitSupp: 599A61A3310B75EC1713521B487B9FD9D2D02CCF37830FF941DD3AD35F12E86960AC75B9F171\r\n\tmail Support: asxianx@proton.me\r\n\t\r\n>>>> Your personal DECRYPTION ID: %s\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!\r\n\r\n\r\n>>>> Advertisement\r\n\t\r\n\tWould you like to earn millions of dollars $$$ ?\r\n\r\n\tOur company acquire access to networks of various companies, as well as insider information that can help you steal the most valuable data of any company. \r\n\tYou can provide us accounting data for the access to any company, for example, login and password to RDP, VPN, corporate email, etc. \r\n\tOpen our letter at your email. Launch the provided virus on any computer in your company.\r\n\r\n\tYou can do it both using your work computer or the computer of any other employee in order to divert suspicion of being in collusion with us.\r\n\r\n\tCompanies pay us the foreclosure for the decryption of files and prevention of data leak.\r\n\r\n\tYou can contact us using Tox messenger without registration and SMS https://tox.chat/download.html. \r\n\tUsing Tox messenger, we will never know your real name, it means your privacy is guaranteed.\r\n\r\n\tIf you want to contact us, write in jabber or tox. \r\n\t\r\n\tTox ID LockBitSupp: 599A61A3310B75EC1713521B487B9FD9D2D02CCF37830FF941DD3AD35F12E86960AC75B9F171\r\n\tmail Support: asxianx@proton.me", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\n ~~~ LockBit 3.0 the world's fastest ransomware~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n\tThe data will be published on TOR website if you do not pay the ransom \r\n\r\n\tAll of your files have been encrypted! (Warning: Attempting to remove the software will corrupt your hard drives meaning no further use even when wiped. We simply charge $25 which is far cheaper than buying a new drive.)\r\nYour computer was infected with a ransomware software. Your files have been encrypted and you won't be able to decrypt them without purchasing $25 BTC. What can I do to get my files back? You will send payment of $25 BTC to gain access to your files again, once payment is made after 3 confirmations on the blockchain (15 mins) your files will be restored and the software will un-install itself from your computer.\r\nHow do I pay, where do I get Bitcoin?\r\nPurchasing Bitcoin varies from country to country, you are best advised to do a quick google search\r\nyourself to find out how to buy Bitcoin. \r\nMany of our customers have reported these sites to be fast and reliable:\r\nCoinmama - hxxps://www.coinmama.com Bitpanda - hxxps://www.bitpanda.com\r\n\r\nPayment will increase soon to double, be cooperative and your files will be released.\r\n\r\nPayment information Amount: 0.000385636 BTC\r\nBitcoin Address: bc1qc76qr24pxnms9f93mytfg4dn7ztuvmje7g43dr", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\n ~~~ LockBit Black Ransomware Since 2024~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n\tPrice = 2000 $ \r\n Bitcoin = 328N9mKT6xFe6uTvtpxeKSymgWCbbTGbK2\r\n Email = jimyjoy139@proton.me\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n \r\n\t\r\n>>>> Your personal DECRYPTION ID: A3138014A48MK4D6D525F3F372263313\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!\r\n", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\n ~~~ Ransomware creado con para pruebas ~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n\tThe data will be published on TOR website if you do not pay the ransom \r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n \r\n\r\n>>>> You need contact us and decrypt one file for free on these TOR sites with your personal DECRYPTION ID\r\n\r\n\tDownload and install TOR Browser https://www.torproject.org/\r\n\tWrite to a chat and wait for the answer, we will always answer you. \r\n\tSometimes you will need to wait for our answer because we attack many companies.\r\n\t\r\n\tIf you do not get an answer in the chat room for a long time, the site does not work and in any other emergency, you can contact us in jabber or tox.\r\n\t\r\n>>>> Your personal DECRYPTION ID: %s\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!\r\n\r\n\r\n>>>> Advertisement\r\n\t\r\n\tWould you like to earn millions of dollars $$$ ?\r\n\r\n\tOur company acquire access to networks of various companies, as well as insider information that can help you steal the most valuable data of any company. \r\n\tYou can provide us accounting data for the access to any company, for example, login and password to RDP, VPN, corporate email, etc. \r\n\tOpen our letter at your email. Launch the provided virus on any computer in your company.\r\n\r\n\tYou can do it both using your work computer or the computer of any other employee in order to divert suspicion of being in collusion with us.\r\n\r\n\tCompanies pay us the foreclosure for the decryption of files and prevention of data leak.\r\n\t\r\n\tIf this contact is expired, and we do not respond you, look for the relevant contact data on our website via Tor or Brave browser", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\n ~~~ SecureNET (your one go cyber security consultant)~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n\t-- Online protection is not active\r\n\t-- Identity theft protection is not active\r\n\t-- Firewall is not active\r\n\t-- Anti Malware is not active\r\n\t-- Anti Spyware is not active\r\n\r\n\tContact On: our website: www.bit.ly/secure-net\r\n\t\tor telegram @securenet_global", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\n ~~~ATTENTION! YOUR FILES WERE ENCRYPTED!~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n\t\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n \r\n\tYou can obtain information about us on twitter https://twitter.com/hashtag/lockbit?f=live\r\n \r\n\r\n>>>> You need contact us and decrypt one file for free on these with your personal DECRYPTION ID\r\n\r\n\t\r\n\tWrite to a chat and wait for the answer, we will always answer you. \r\n\tSometimes you will need to wait for our answer because we attack many companies.\r\n\t\r\n\t\r\n\t\r\n\tIf you do not get an answer in the chat room for a long time, the site does not work and in any other emergency, you can contact us in jabber or tox.\r\n\t\r\n\tMAIL:: kaki@mailum.com\r\n\tMAIL: kaki@mailum.com\r\n\t\r\n>>>> Your personal DECRYPTION ID: %s\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!\r\n\r\n\r\n>>>> Advertisement\r\n\t\r\n\tWould you like to earn millions of dollars $$$ ?\r\n\r\n\tOur company acquire access to networks of various companies, as well as insider information that can help you steal the most valuable data of any company. \r\n\tYou can provide us accounting data for the access to any company, for example, login and password to RDP, VPN, corporate email, etc. \r\n\tOpen our letter at your email. Launch the provided virus on any computer in your company.\r\n\r\n\tYou can do it both using your work computer or the computer of any other employee in order to divert suspicion of being in collusion with us.\r\n\r\n\tCompanies pay us the foreclosure for the decryption of files and prevention of data leak.\r\n\r\n\tYou can contact us using Tox messenger without registration and SMS https://tox.chat/download.html. \r\n\tUsing Tox messenger, we will never know your real name, it means your privacy is guaranteed.\r\n\r\n\tIf you want to contact us, write in jabber or tox. \r\n\t\r\n\tMAIL:: kaki@mailum.com\r\n\tMAIL: kaki@mailum.com\r\n\t\r\n\t\r\n", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\n ~~~~~SchoolBoys Ransomware Gang~~~~~\r\n\r\n\r\n>>>> Your data are stolen and encrypted\r\n\tThe data will be published on TOR website if you do not pay the ransom \r\n\r\n\tLinks for Tor Browser:\r\n\thttps://pnanlicgxkku2aonwsg2fwid3maycsso7joqnzp66wkfemzdk7ahsdid.onion\r\n\tYour personal password for communication:6334-3206-2025-9235-Gb-HkkT-2-k\r\n\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n \r\n\r\n>>>> You need contact us and decrypt one file for free on these TOR sites with your personal DECRYPTION ID\r\n\r\n\tDownload and install TOR Browser https://www.torproject.org/\r\n\tWrite to a chat and wait for the answer, we will always answer you. \r\n\t\r\n\tLinks for Tor Browser:\r\n\thttps://pnanlicgxkku2aonwsg2fwid3maycsso7joqnzp66wkfemzdk7ahsdid.onion\r\n\r\n\t\r\n>>>> Your personal DECRYPTION ID: 4D037DEBAC8D57EE16D843E182DF8492\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\n>>>> Your data are stolen and encrypted\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\nWe are not a politically motivated group and we do not need anything other than your money. \r\n\r\nIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n \r\nIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in \r\nthe future. \r\n\r\nTherefore to us our reputation is very important. We attack the companies worldwide and there is no \r\ndissatisfied victim after payment.\r\n\r\n>>>> You need contact us and decrypt one file for free, send a small file for test decryption with your personal DECRYPTION ID to tox chat:\r\n\r\n>>>> Your personal DECRYPTION ID: %s\r\n\r\n\r\n1)Download and install TOX chat: https://tox.chat\r\n2)Write to this tox id: 1677F2BDC2F3F430E7A0C15F4101AD83D080963FCDEF1ABAC93465D6834AB606A1DEDEBA6F54 and wait for the answer, we will always answer you.", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\nDear Sir Or Madam, if your data has been accidentally encrypted, please contact us as soon as possible, otherwise your data may be permanently deleted.\r\n\r\nYou can contact me by email.\r\n\r\nE-mail: zppizdirwf@mail.com\r\n\r\n>>>>>>Your personal DECRYPTION ID:JL66KWZWNNAWIN64XSTTNSMMW1KONE\r\n\r\nYou only need to pay a small fee, and we will decrypt it for you within 24 hours.\r\n\r\n>>>>>>Service charges can be discussed in detail\r\n\r\n>>>>>>Payment cryptocurrency address USDT-TRC20\r\n>>>>>>TWRqp48boRGhViwYATwkM3jsLzpLsr7Zi7\r\n\r\n>>>>>>>>>>>> After you complete the payment, please send the screenshot of the payment to your email, we will arrange decryption service for you immediately after confirmation. And delete the data we copied.\r\n>>>>>>Email address:zppizdirwf@mail.com\r\n\r\n>>>>>>What guarantee will we not deceive you?\r\nWe don't bring anything political, religious, cultural, racial. We only focus on the spirit of the contract and USTD.\r\nAfter the payment is successful, we will serve you as quickly as possible, and will never leak any of your data online.\r\n\r\n>>>>>>>>>>>>>>>>>>>>>>>>> Have a nice day<<<<<<<<<<<<<<<<<<<<<< ", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\nHello peceng.com! \r\n\r\nYour files have been stolen from your network and encrypted with a strong algorithm. We work for money and are not associated with politics.\r\nAll you need to do is contact us and pay.\r\n\r\nOur communication process:\r\n\r\n1. You contact us via email or Tox.\r\n2. We send you a list of files that were stolen\r\n3. We decrypt 3 files to confirm that our decryptor works.\r\n4. We agree on the amount, which must be paid using BTC.\r\n5. We delete your files, we give you a decryptor.\r\n6. We give you a detailed report on how we compromised your company, and recommendations on how to avoid such situations in the future.\r\n \r\nRecommendations: \r\n\r\nDO NOT RESET OR SHUTDOWN - files may be damaged.\r\nDO NOT RENAME OR MOVE the encrypted and readme files.\r\nDO NOT DELETE readme files.\r\n\r\nContacts:\r\n\r\nEmail: MitraGodbout@proton.me\r\nTox: 1C054B722BCBF41A918EF3C485712742088F5C3E81B2FDD91ADEA6BA55F4A856D90A65E99D20\r\n \r\n* If you want to contact us via Tox you need to download it from this link: https://github.com/qTox/qTox/releases/download/v1.17.6/setup-qtox-x86_64-release.exe\r\n\r\nYOUR ID: %s\r\n\r\nIf you refuse to pay or do not get in touch with us, we start publishing your files.\r\nAfter 7 days the email will no longer be available, and the opportunity to receive the decryptor will also no longer be available.\r\n\r\nSincerely, 01000100 01110010 01100001 01100111 01101111 01101110 01000110 01101111 01110010 01100011 01100101", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\n\u00d0\u0094\u00d0\u00b5\u00d0\u00bd\u00d1\u008c \u00d0\u009f\u00d0\u00be\u00d0\u00b1\u00d0\u00b5\u00d0\u00b4\u00d1\u008b, \u00d0\u00ba\u00d0\u00b0\u00d0\u00ba \u00d0\u00be\u00d0\u00bd \u00d0\u00b1\u00d1\u008b\u00d0\u00bb \u00d0\u00be\u00d1\u0082 \u00d0\u00bd\u00d0\u00b0\u00d1\u0081 \u00d0\u00b4\u00d0\u00b0\u00d0\u00bb\u00d0\u00b5\u00d0\u00ba,\r\n\u00d0\u009a\u00d0\u00b0\u00d0\u00ba \u00d0\u00b2 \u00d0\u00ba\u00d0\u00be\u00d1\u0081\u00d1\u0082\u00d1\u0080\u00d0\u00b5 \u00d0\u00bf\u00d0\u00be\u00d1\u0082\u00d1\u0083\u00d1\u0085\u00d1\u0088\u00d0\u00b5\u00d0\u00bc \u00d1\u0082\u00d0\u00b0\u00d1\u008f\u00d0\u00bb \u00d1\u0083\u00d0\u00b3\u00d0\u00be\u00d0\u00bb\u00d0\u00b5\u00d0\u00ba.\r\n\u00d0\u0091\u00d1\u008b\u00d0\u00bb\u00d0\u00b8 \u00d0\u00b2\u00d0\u00b5\u00d1\u0080\u00d1\u0081\u00d1\u0082\u00d1\u008b, \u00d0\u00be\u00d0\u00b1\u00d0\u00b3\u00d0\u00be\u00d1\u0080\u00d0\u00b5\u00d0\u00bb\u00d1\u008b\u00d0\u00b5, \u00d0\u00b2 \u00d0\u00bf\u00d1\u008b\u00d0\u00bb\u00d0\u00b8, \u00e2\u0080\u0094\r\n\u00d0\u00ad\u00d1\u0082\u00d0\u00be\u00d1\u0082 \u00d0\u00b4\u00d0\u00b5\u00d0\u00bd\u00d1\u008c \u00d0\u00bc\u00d1\u008b \u00d0\u00bf\u00d1\u0080\u00d0\u00b8\u00d0\u00b1\u00d0\u00bb\u00d0\u00b8\u00d0\u00b6\u00d0\u00b0\u00d0\u00bb\u00d0\u00b8, \u00d0\u00ba\u00d0\u00b0\u00d0\u00ba \u00d0\u00bc\u00d0\u00be\u00d0\u00b3\u00d0\u00bb\u00d0\u00b8.\r\n\r\n\u00d0\u009f\u00d1\u0080\u00d0\u00b8\u00d0\u00bf\u00d0\u00b5\u00d0\u00b2:\r\n\r\n\u00d0\u00ad\u00d1\u0082\u00d0\u00be\u00d1\u0082 \u00d0\u0094\u00d0\u00b5\u00d0\u00bd\u00d1\u008c \u00d0\u009f\u00d0\u00be\u00d0\u00b1\u00d0\u00b5\u00d0\u00b4\u00d1\u008b\r\n\u00d0\u009f\u00d0\u00be\u00d1\u0080\u00d0\u00be\u00d1\u0085\u00d0\u00be\u00d0\u00bc \u00d0\u00bf\u00d1\u0080\u00d0\u00be\u00d0\u00bf\u00d0\u00b0\u00d1\u0085.\r\n\u00d0\u00ad\u00d1\u0082\u00d0\u00be \u00d0\u00bf\u00d1\u0080\u00d0\u00b0\u00d0\u00b7\u00d0\u00b4\u00d0\u00bd\u00d0\u00b8\u00d0\u00ba\r\n\u00d0\u00a1 \u00d1\u0081\u00d0\u00b5\u00d0\u00b4\u00d0\u00b8\u00d0\u00bd\u00d0\u00be\u00d1\u008e \u00d0\u00bd\u00d0\u00b0 \u00d0\u00b2\u00d0\u00b8\u00d1\u0081\u00d0\u00ba\u00d0\u00b0\u00d1\u0085.\r\n\u00d0\u00ad\u00d1\u0082\u00d0\u00be \u00d1\u0080\u00d0\u00b0\u00d0\u00b4\u00d0\u00be\u00d1\u0081\u00d1\u0082\u00d1\u008c\r\n\u00d0\u00a1\u00d0\u00be \u00d1\u0081\u00d0\u00bb\u00d0\u00b5\u00d0\u00b7\u00d0\u00b0\u00d0\u00bc\u00d0\u00b8 \u00d0\u00bd\u00d0\u00b0 \u00d0\u00b3\u00d0\u00bb\u00d0\u00b0\u00d0\u00b7\u00d0\u00b0\u00d1\u0085.\r\n\u00d0\u0094\u00d0\u00b5\u00d0\u00bd\u00d1\u008c \u00d0\u009f\u00d0\u00be\u00d0\u00b1\u00d0\u00b5\u00d0\u00b4\u00d1\u008b!\r\n\u00d0\u0094\u00d0\u00b5\u00d0\u00bd\u00d1\u008c \u00d0\u009f\u00d0\u00be\u00d0\u00b1\u00d0\u00b5\u00d0\u00b4\u00d1\u008b!\r\n\u00d0\u0094\u00d0\u00b5\u00d0\u00bd\u00d1\u008c \u00d0\u009f\u00d0\u00be\u00d0\u00b1\u00d0\u00b5\u00d0\u00b4\u00d1\u008b!\r\n\r\n\u00d0\u0094\u00d0\u00bd\u00d0\u00b8 \u00d0\u00b8 \u00d0\u00bd\u00d0\u00be\u00d1\u0087\u00d0\u00b8 \u00d1\u0083 \u00d0\u00bc\u00d0\u00b0\u00d1\u0080\u00d1\u0082\u00d0\u00b5\u00d0\u00bd\u00d0\u00be\u00d0\u00b2\u00d1\u0081\u00d0\u00ba\u00d0\u00b8\u00d1\u0085 \u00d0\u00bf\u00d0\u00b5\u00d1\u0087\u00d0\u00b5\u00d0\u00b9\r\n\u00d0\u009d\u00d0\u00b5 \u00d1\u0081\u00d0\u00bc\u00d1\u008b\u00d0\u00ba\u00d0\u00b0\u00d0\u00bb\u00d0\u00b0 \u00d0\u00bd\u00d0\u00b0\u00d1\u0088\u00d0\u00b0 \u00d0\u00a0\u00d0\u00be\u00d0\u00b4\u00d0\u00b8\u00d0\u00bd\u00d0\u00b0 \u00d0\u00be\u00d1\u0087\u00d0\u00b5\u00d0\u00b9.\r\n\u00d0\u0094\u00d0\u00bd\u00d0\u00b8 \u00d0\u00b8 \u00d0\u00bd\u00d0\u00be\u00d1\u0087\u00d0\u00b8 \u00d0\u00b1\u00d0\u00b8\u00d1\u0082\u00d0\u00b2\u00d1\u0083 \u00d1\u0082\u00d1\u0080\u00d1\u0083\u00d0\u00b4\u00d0\u00bd\u00d1\u0083\u00d1\u008e \u00d0\u00b2\u00d0\u00b5\u00d0\u00bb\u00d0\u00b8 \u00e2\u0080\u0094\r\n\u00d0\u00ad\u00d1\u0082\u00d0\u00be\u00d1\u0082 \u00d0\u00b4\u00d0\u00b5\u00d0\u00bd\u00d1\u008c \u00d0\u00bc\u00d1\u008b \u00d0\u00bf\u00d1\u0080\u00d0\u00b8\u00d0\u00b1\u00d0\u00bb\u00d0\u00b8\u00d0\u00b6\u00d0\u00b0\u00d0\u00bb\u00d0\u00b8, \u00d0\u00ba\u00d0\u00b0\u00d0\u00ba \u00d0\u00bc\u00d0\u00be\u00d0\u00b3\u00d0\u00bb\u00d0\u00b8.\r\n\r\n\u00d0\u009f\u00d1\u0080\u00d0\u00b8\u00d0\u00bf\u00d0\u00b5\u00d0\u00b2.\r\n\r\n\u00d0\u0097\u00d0\u00b4\u00d1\u0080\u00d0\u00b0\u00d0\u00b2\u00d1\u0081\u00d1\u0082\u00d0\u00b2\u00d1\u0083\u00d0\u00b9, \u00d0\u00bc\u00d0\u00b0\u00d0\u00bc\u00d0\u00b0, \u00d0\u00b2\u00d0\u00be\u00d0\u00b7\u00d0\u00b2\u00d1\u0080\u00d0\u00b0\u00d1\u0082\u00d0\u00b8\u00d0\u00bb\u00d0\u00b8\u00d1\u0081\u00d1\u008c \u00d0\u00bc\u00d1\u008b \u00d0\u00bd\u00d0\u00b5 \u00d0\u00b2\u00d1\u0081\u00d0\u00b5\u00e2\u0080\u00a6\r\n\u00d0\u0091\u00d0\u00be\u00d1\u0081\u00d0\u00b8\u00d0\u00ba\u00d0\u00be\u00d0\u00bc \u00d0\u00b1\u00d1\u008b \u00d0\u00bf\u00d1\u0080\u00d0\u00be\u00d0\u00b1\u00d0\u00b5\u00d0\u00b6\u00d0\u00b0\u00d1\u0082\u00d1\u008c\u00d1\u0081\u00d1\u008f \u00d0\u00bf\u00d0\u00be \u00d1\u0080\u00d0\u00be\u00d1\u0081\u00d0\u00b5!\r\n\u00d0\u009f\u00d0\u00be\u00d0\u00bb-\u00d0\u0095\u00d0\u00b2\u00d1\u0080\u00d0\u00be\u00d0\u00bf\u00d1\u008b \u00d0\u00bf\u00d1\u0080\u00d0\u00be\u00d1\u0088\u00d0\u00b0\u00d0\u00b3\u00d0\u00b0\u00d0\u00bb\u00d0\u00b8, \u00d0\u00bf\u00d0\u00be\u00d0\u00bb-\u00d0\u0097\u00d0\u00b5\u00d0\u00bc\u00d0\u00bb\u00d0\u00b8, \u00e2\u0080\u0094\r\n\u00d0\u00ad\u00d1\u0082\u00d0\u00be\u00d1\u0082 \u00d0\u00b4\u00d0\u00b5\u00d0\u00bd\u00d1\u008c \u00d0\u00bc\u00d1\u008b \u00d0\u00bf\u00d1\u0080\u00d0\u00b8\u00d0\u00b1\u00d0\u00bb\u00d0\u00b8\u00d0\u00b6\u00d0\u00b0\u00d0\u00bb\u00d0\u00b8, \u00d0\u00ba\u00d0\u00b0\u00d0\u00ba \u00d0\u00bc\u00d0\u00be\u00d0\u00b3\u00d0\u00bb\u00d0\u00b8.\r\n\r\n\u00d0\u009f\u00d0\u00be\u00d0\u00b4\u00d1\u0080\u00d0\u00be\u00d0\u00b1\u00d0\u00bd\u00d0\u00b5\u00d0\u00b5: https://yandex.ru/video/preview/16994774306293862852", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": " ~~~the world's fastest ransomware since 2019~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n\tThe data will be published on TOR website if you do not pay the ransom \r\n\r\n\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n \r\n\r\n>>>> You need contact us and decrypt one file for free\r\n \r\n\tDecrypt ID: 41d6a055-bded-42f0-9e80-0774e2276b4b\r\n\r\n\tYou can contact us in email or qtox.\r\n\t\r\n\tQTox ID Support: 3DCE1C43491FC92EA7010322040B254FDD2731001C2DDC2B9E819F0C946BDC3CD251FA3B694A\r\n\t\r\n\r\n\t\r\n\tEmail Support: ziqbwnscvbsj@proton.me,asdcspocnsdke@proton.me,tfefwapyasd3@proton.me\r\n\r\n\r\n\tWrite to a chat and wait for the answer, we will always answer you. \r\n\tSometimes you will need to wait for our answer because we attack many companies.\r\n\t\r\n\t\t\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!\r\n\r\n\r\n>>>> Advertisement\r\n\t\r\n\tWould you like to earn millions of dollars $$$ ?\r\n\r\n\tOur company acquire access to networks of various companies, as well as insider information that can help you steal the most valuable data of any company. \r\n\tYou can provide us accounting data for the access to any company, for example, login and password to RDP, VPN, corporate email, etc. \r\n\tOpen our letter at your email. Launch the provided virus on any computer in your company.\r\n\r\n\tYou can do it both using your work computer or the computer of any other employee in order to divert suspicion of being in collusion with us.\r\n\r\n\tCompanies pay us the foreclosure for the decryption of files and prevention of data leak.\r\n\r\n\tYou can contact us using QTox messenger without registration and SMS https://github.com/qTox/qTox/releases/download/v1.17.6/setup-qtox-x86_64-release.exe. \r\n\tUsing QTox messenger, we will never know your real name, it means your privacy is guaranteed.\r\n\r\n\tIf you want to contact us, write in Email or qtox. \r\n\t\r\n\tQTox ID Support: 3DCE1C43491FC92EA7010322040B254FDD2731001C2DDC2B9E819F0C946BDC3CD251FA3B694A\r\n\tEmail Support: ziqbwnscvbsj@proton.me,asdcspocnsdke@proton.me,tfefwapyasd3@proton.me", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "***\r\nWelcome to Brain Cipher Ransomware!\r\n***\r\nDear managers!\r\nIf you're reading this, it means your systems have been hacked and encrypted and your data stolen.\r\n\r\n\r\n***\r\n\r\nThe most proper way to safely recover your data is through our support. We can recover your systems within 4-6 hours.\r\nIn order for it to be successful, you must follow a few points:\r\n\r\n1.Don't go to the police, etc.\r\n2.Do not attempt to recover data on your own.\r\n3.Do not take the help of third-party data recovery companies.\r\nIn most cases, they are scammers who will pay us a ransom and take a % for themselves.\r\n\r\n***\r\n\r\nIf you violate any 1 of these points, we will refuse to cooperate with you!!!\r\n\r\n\r\n\r\n 3 steps to data recovery: \r\n \r\n\t\t\t\t\t1. Download and install Tor Browser (https://www.torproject.org/download/)\r\n\t\t\t\r\n 2. Go to our support page: http://mybmtbgd7aprdnw2ekxht5qap5daam2wch25coqerrq2zdioanob34ad.onion\r\n\r\n 3. Enter your encryption ID: M8AL5cWJEU5CnMMPwCdt4x9NVn0ZY2uNtIgnKwkDJwdPbnanVROYFzGmgUCImexTGDmINYgSZXdlhM7D199lNMb294TGY2\r\n\r\n\r\n\t\t\t\t\tEmail to support: brain.support@cyberfear.com", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "***\r\nWelcome to Brain Cipher Ransomware!\r\n***\r\nDear managers!\r\nIf you're reading this, it means your systems have been hacked and encrypted and your data stolen.\r\n\r\n\r\n***\r\n\r\nThe most proper way to safely recover your data is through our support. We can recover your systems within 4-6 hours.\r\nIn order for it to be successful, you must follow a few points:\r\n\r\n1.Don't go to the police, etc.\r\n2.Do not attempt to recover data on your own.\r\n3.Do not take the help of third-party data recovery companies.\r\nIn most cases, they are scammers who will pay us a ransom and take a % for themselves.\r\n\r\n***\r\n\r\nIf you violate any 1 of these points, we will refuse to cooperate with you!!!\r\n\r\n\r\n\r\n 3 steps to data recovery: \r\n \r\n\t\t\t\t\t1. Download and install Tor Browser (https://www.torproject.org/download/)\r\n\t\t\t\r\n 2. Go to our support page: http://mybmtbgd7aprdnw2ekxht5qap5daam2wch25coqerrq2zdioanob34ad.onion\r\n\r\n 3. Enter your encryption ID: uYrTA6hpRFsWQR0nqlFk5WK8S+zUIHNd9T3L6aykdR27ztPJwC3xHOsdSBkZhmr+yKcnVLCct0ffjVRy5yvFQydzhzQWJR\r\n\r\n\r\n\t\t\t\t\tEmail to support: brain.support@cyberfear.com", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "***\r\nWelcome to Brain Cipher Ransomware!\r\n***\r\nDear managers!\r\nIf you're reading this, it means your systems have been hacked and encrypted and your data stolen.\r\n\r\n\r\n***\r\n\r\nThe most proper way to safely recover your data is through our support. We can recover your systems within 4-6 hours.\r\nIn order for it to be successful, you must follow a few points:\r\n\r\n1.Don't go to the police, etc.\r\n2.Do not attempt to recover data on your own.\r\n3.Do not take the help of third-party data recovery companies.\r\nIn most cases, they are scammers who will pay us a ransom and take a % for themselves.\r\n\r\n***\r\n\r\nIf you violate any 1 of these points, we will refuse to cooperate with you!!!\r\n\r\nATTENTION! If you do not contact us within 48 hours, we will post the record on our website: vkvsgl7lhipjirmz6j5ubp3w3bwvxgcdbpi3fsbqngfynetqtw4w5hyd.onion\r\n\r\n\r\n3 steps to data recovery: \r\n \r\n1. Download and install Tor Browser (https://www.torproject.org/download/)\r\n\t\t\t\r\n2. Go to our support page: http://77nrxelcwh47yikvpaz2rvtsten4sen2elybo5r5st6wlxsbitv255qd.onion/\r\n\tThis page can take up to 30 minutes to load.\r\n\r\n3. Enter your encryption ID: W8+IEowaYP+ZjKDS44C3+Amj516daNX6sA5C0LAL6ztnvbxvZzKZWN2fgYN6kvdUPXwyd9MzecQpCack8tWcER4c0ZtSDZ0\r\n\r\n\r\nEmail to support: brain.support@cyberfear.com", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "***\r\nWelcome to Brain Cipher Ransomware!\r\n***\r\nDear managers!\r\nIf you're reading this, it means your systems have been hacked and encrypted and your data stolen.\r\n\r\n\r\n***\r\n\r\nThe most proper way to safely recover your data is through our support. We can recover your systems within 4-6 hours.\r\nIn order for it to be successful, you must follow a few points:\r\n\r\n1.Don't go to the police, etc.\r\n2.Do not attempt to recover data on your own.\r\n3.Do not take the help of third-party data recovery companies.\r\nIn most cases, they are scammers who will pay us a ransom and take a % for themselves.\r\n\r\n***\r\n\r\nIf you violate any 1 of these points, we will refuse to cooperate with you!!!\r\n\r\nATTENTION! If you do not contact us within 48 hours, we will post the record on our website: vkvsgl7lhipjirmz6j5ubp3w3bwvxgcdbpi3fsbqngfynetqtw4w5hyd.onion\r\n\r\n\r\n3 steps to data recovery: \r\n \r\n1. Download and install Tor Browser (https://www.torproject.org/download/)\r\n\t\t\t\r\n2. Go to our support page: http://77nrxelcwh47yikvpaz2rvtsten4sen2elybo5r5st6wlxsbitv255qd.onion/\r\n\tThis page can take up to 30 minutes to load.\r\n\r\n3. Enter your encryption ID: nwVTVzFVZ6v4hSPi5v9Oj3UDyxDG+KXbxaFtavLJIiZ10gv1ogCZIqQ2UA4gauvaqRjIVprlj0wf8fkqO7xFJLZzg2dzVw\r\n\r\n\r\nEmail to support: brain.support@cyberfear.com", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "***\r\nWelcome to Brain Cipher Ransomware!\r\n***\r\nDear managers!\r\nIf you're reading this, it means your systems have been hacked and encrypted and your data stolen.\r\n\r\n\r\n***\r\n\r\nThe most proper way to safely recover your data is through our support. We can recover your systems within 4-6 hours.\r\nIn order for it to be successful, you must follow a few points:\r\n\r\n1.Don't go to the police, etc.\r\n2.Do not attempt to recover data on your own.\r\n3.Do not take the help of third-party data recovery companies.\r\nIn most cases, they are scammers who will pay us a ransom and take a % for themselves.\r\n\r\n***\r\n\r\nIf you violate any 1 of these points, we will refuse to cooperate with you!!!\r\n\r\nATTENTION! If you do not contact us within 48 hours, we will post the record on our website: vkvsgl7lhipjirmz6j5ubp3w3bwvxgcdbpi3fsbqngfynetqtw4w5hyd.onion\r\n\r\n\r\n3 steps to data recovery: \r\n \r\n1. Download and install Tor Browser (https://www.torproject.org/download/)\r\n\t\t\t\r\n2. Go to our support page: http://brain4zoadgr6clxecixffvxjsw43cflyprnpfeak72nfh664kqqriyd.onion\r\n\tThis page can take up to 30 minutes to load.\r\n\r\n3. Enter your encryption ID: DOuB5Pp206I1khMQMjQLVqnpqbROD+iJrJWwtl92dTQLsNqq8RdnSymqONiThx7G1rN+ddOiF8kXtGc3n10XdIN3Q1WFk1\r\n\r\n\r\nEmail to support: brain.decrypt@cyberfear.com", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "***\r\nWelcome to Brain Cipher Ransomware!\r\n***\r\nDear managers!\r\nIf you're reading this, it means your systems have been hacked and encrypted and your data stolen.\r\n\r\n\r\n***\r\n\r\nThe most proper way to safely recover your data is through our support. We can recover your systems within 4-6 hours.\r\nIn order for it to be successful, you must follow a few points:\r\n\r\n1.Don't go to the police, etc.\r\n2.Do not attempt to recover data on your own.\r\n3.Do not take the help of third-party data recovery companies.\r\nIn most cases, they are scammers who will pay us a ransom and take a % for themselves.\r\n\r\n***\r\n\r\nIf you violate any 1 of these points, we will refuse to cooperate with you!!!\r\n\r\nATTENTION! If you do not contact us within 48 hours, we will post the record on our website: vkvsgl7lhipjirmz6j5ubp3w3bwvxgcdbpi3fsbqngfynetqtw4w5hyd.onion\r\n\r\n\r\n3 steps to data recovery: \r\n \r\n1. Download and install Tor Browser (https://www.torproject.org/download/)\r\n\t\t\t\r\n2. Go to our support page: http://brain4zoadgr6clxecixffvxjsw43cflyprnpfeak72nfh664kqqriyd.onion\r\n\tThis page can take up to 30 minutes to load.\r\n\r\n3. Enter your encryption ID: HqfDKBqDbBLj6qMXyrXyAXwrT7GXRvtPkbuDL7YB8yxX4PSOKTyUzj9lqNjWAltr48E5KCYWk4Vrsm6qb2jIVE1U1IwalNo\r\n\r\n\r\nEmail to support: brain.support@cyberfear.com", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "***\r\nWelcome to Brain Cipher Ransomware!\r\n***\r\nDear managers!\r\nIf you're reading this, it means your systems have been hacked and encrypted and your data stolen.\r\n\r\n\r\n***\r\n\r\nThe most proper way to safely recover your data is through our support. We can recover your systems within 4-6 hours.\r\nIn order for it to be successful, you must follow a few points:\r\n\r\n1.Don't go to the police, etc.\r\n2.Do not attempt to recover data on your own.\r\n3.Do not take the help of third-party data recovery companies.\r\nIn most cases, they are scammers who will pay us a ransom and take a % for themselves.\r\n\r\n***\r\n\r\nIf you violate any 1 of these points, we will refuse to cooperate with you!!!\r\n\r\nATTENTION! If you do not contact us within 48 hours, we will post the record on our website: vkvsgl7lhipjirmz6j5ubp3w3bwvxgcdbpi3fsbqngfynetqtw4w5hyd.onion\r\n\r\n\r\n3 steps to data recovery: \r\n \r\n1. Download and install Tor Browser (https://www.torproject.org/download/)\r\n\t\t\t\r\n2. Go to our support page: http://mybmtbgd7aprdnw2ekxht5qap5daam2wch25coqerrq2zdioanob34ad.onion\r\n\tThis page can take up to 30 minutes to load.\r\n\r\n3. Enter your encryption ID: qLRS3o7nBgYneLCCIQT5S9+wDocPid9vGWlDqWB004LvisizirSDvQ3mpA3NcJAuRWgQw0M5TcgSNEttohZcJzM2VXBrdjcx\r\n\r\n\r\nEmail to support: brain.support@cyberfear.com", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "----------- [ Welcome to buhtiRansom ] -------------> \r\n\r\n What happend? \r\n ---------------------------------------------- \r\n Your files are encrypted. We use strong encryption algorithms, so you cannot decrypt your data. \r\n But you can restore everything by purchasing a special program from us - universal decryptor. This program will restore all your files. \r\n Follow our instructions below and you will recover all your data. \r\n\r\n What guarantees? \r\n ---------------------------------------------- \r\n We value our reputation. If we do not do our work and liabilities, nobody will pay us. This is not in our interests. \r\n All our decryption software is perfectly tested and will decrypt your data. \r\n\r\n How to get access? \r\n ---------------------------------------------- \r\n Using a browser: \r\n 1) Open website: https://satoshidisk.com/pay/CIGsph\r\n 2) Enter valid email to receive download link after payment. \r\n 3) Pay amount to Bitcoin address. \r\n 4) Receive email link to the download page. \r\n 5) Decrypt instruction included. \r\n\r\n !!! DANGER !!! \r\n DO NOT MODIFY or try to RECOVER any files yourself. It WILL NOT be able to RESTORE. \r\n !!! DANGER !!! \r\n", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "ATTENTION: YOUR DATA HAS BEEN LOCKED!\r\n\r\nDear representatives of the company,\r\n\r\nWe are compelled to inform you that your information system has been successfully breached by our group. \r\nAll your data, including financial reports, customer databases, internal documentation, correspondence, and even backup files, have been encrypted using state-of-the-art cryptographic algorithms.\r\nWithout our unique decryption key, restoring access to this data is impossible.\r\nWe strongly advise against attempting to resolve this issue independently, as any such attempts may result in irreversible data loss.\r\n\r\nYour company is now in an extremely vulnerable position. Disclosure or destruction of the data may lead to serious consequences, including:\r\n\r\nFinancial losses: \r\n\r\nLeakage of confidential information can result in lawsuits, fines, and compensation claims. \r\nMoreover, your competitors may exploit this data to gain an unfair advantage in the market.\r\n\r\nReputational damage:\r\n\r\nLoss of trust from clients and partners may negatively impact your business. \r\nNews of the cyberattack will spread quickly, and your brand may become associated with unreliability and an inability to protect data.\r\n\r\nLegal consequences: \r\n\r\nViolation of data protection laws (e.g., GDPR, CCPA, or other regional regulations) may lead to significant fines and audits by regulatory authorities.\r\nThis may also necessitate a mandatory restructuring of your data processing procedures.\r\n\r\nOperational issues: \r\n\r\nLack of access to critical systems may lead to a complete halt in your company\u0092s operations.\r\nThis could affect not only you but also your customers, partners, and suppliers.\r\n\r\n\r\nADDITIONAL RISKS AND THREATS:\r\n\r\nLegal consequences for company leadership:\r\n\r\nIf we decide to disclose the data, it may lead to criminal charges against your company\u0092s management for negligence and violation of data protection rules. \r\nYou personally may be held accountable, and your career could be at risk.\r\n\r\nMedia and public opinion:\r\n\r\nWe collaborate with various media outlets and are ready to provide them with part of your data for public exposure. \r\nInformation about your inability to protect data will become public knowledge, leading to further reputational damage.\r\n\r\nMass lawsuits from clients and partners:\r\n\r\nWe have prepared anonymous instructions for your clients and partners affected by the leak.\r\nThese instructions will help them file class-action lawsuits against your company.\r\nWe understand the importance of the stolen information for your organization. \r\nCurrently, all data is in our possession. \r\nWe are ready to discuss the terms of transferring the decryption key and guarantee the complete deletion of all copied data after receiving payment. \r\n\r\nWe also offer an alternative: ignoring this message will either lead to the public leakage of data through our special portal on the Dark Web or result in its complete destruction.\r\n\r\n***\r\n\r\nBrain Cipher Leaks: http://vkvsgl7lhipjirmz6j5ubp3w3bwvxgcdbpi3fsbqngfynetqtw4w5hyd.onion/\r\n\r\n***\r\n\r\nPLEASE NOTE: Any contact with law enforcement agencies or data recovery companies will be considered a violation of our agreement.\r\n\r\nIf we discover that you are collaborating with third parties, this will immediately lead to the following actions:\r\n\r\nKey deletion: all decryption keys will be irrevocably deleted.\r\nPublic leak: We will release part of the data on public resources to ensure maximum reputational damage.\r\nIncreased recovery cost: The price for decryption will double, and the timeframe for providing the key will be extended.\r\nLegal consequences for leadership: We will pass information about your collaboration with law enforcement to the media and regulatory bodies, leading to additional legal and reputational problems.\r\n\r\n\r\nWe understand that this is a difficult situation and would like to offer you a way to resolve it. For this purpose, we provide clear instructions for data recovery. \r\nPlease note that time is limited. If we do not receive a response within 72 hours, the cost of recovery will increase, and the likelihood of data preservation will significantly decrease.\r\n\r\n\r\n\r\nWHY YOU SHOULD CONTACT US DIRECTLY?\r\n\r\n\r\n\r\nGuaranteed security: We guarantee the complete deletion of all data copies after receiving payment.\r\nProfessional approach: We use cutting-edge technologies to ensure reliable encryption and decryption of data.\r\nConfidentiality: Our communication channels are fully anonymous, and we do not share information with third parties.\r\nFlexibility: We are ready to discuss payment terms and provide additional time for decision-making.\r\nNo risks: Cooperation with us is the only way to avoid a public data leak and irreversible data loss.\r\nProtection from legal consequences: We will ensure that information about your company does not fall into the hands of law enforcement or the media if you meet our requirements.\r\n\r\n\r\n========================================\r\n\r\n\r\nTo contact us, follow these instructions:\r\n\r\n1.Download and install Tor Browser (https://www.torproject.org/download/)\r\n2.Go to our support page: http://brain4zoadgr6clxecixffvxjsw43cflyprnpfeak72nfh664kqqriyd.onion (This page can take up to 30 minutes to load.)\r\n3.Enter your encryption ID: 9iZWVSLvVT0Kemtw6GdzJZFXc2WnJF6DfLoOrueuccDycGAZkTeFnE1TkqV5ODhe1wZ8vPHM3ODVI5bJenlkFIbnVuaUlk\r\n\r\nWe will provide further instructions on payment and data recovery. \r\nAfter confirming payment, we will transfer a unique decryption key that will allow you to restore access to all your files.\r\nWe strongly recommend acting quickly and professionally! \r\nAny delays or attempts to ignore this message may lead to irreversible consequences. We are ready to cooperate and ensure a secure resolution to this issue.\r\n\r\nEmail to support: brain.decrypt@cyberfear.com\r\n\r\nWelcome to BrainCipher!", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "ATTENTION: YOUR DATA HAS BEEN LOCKED!\r\n\r\nDear representatives of the company,\r\n\r\nWe are compelled to inform you that your information system has been successfully breached by our group. \r\nAll your data, including financial reports, customer databases, internal documentation, correspondence, and even backup files, have been encrypted using state-of-the-art cryptographic algorithms.\r\nWithout our unique decryption key, restoring access to this data is impossible.\r\nWe strongly advise against attempting to resolve this issue independently, as any such attempts may result in irreversible data loss.\r\n\r\nYour company is now in an extremely vulnerable position. Disclosure or destruction of the data may lead to serious consequences, including:\r\n\r\nFinancial losses: \r\n\r\nLeakage of confidential information can result in lawsuits, fines, and compensation claims. \r\nMoreover, your competitors may exploit this data to gain an unfair advantage in the market.\r\n\r\nReputational damage:\r\n\r\nLoss of trust from clients and partners may negatively impact your business. \r\nNews of the cyberattack will spread quickly, and your brand may become associated with unreliability and an inability to protect data.\r\n\r\nLegal consequences: \r\n\r\nViolation of data protection laws (e.g., GDPR, CCPA, or other regional regulations) may lead to significant fines and audits by regulatory authorities.\r\nThis may also necessitate a mandatory restructuring of your data processing procedures.\r\n\r\nOperational issues: \r\n\r\nLack of access to critical systems may lead to a complete halt in your company\u0092s operations.\r\nThis could affect not only you but also your customers, partners, and suppliers.\r\n\r\n\r\nADDITIONAL RISKS AND THREATS:\r\n\r\nLegal consequences for company leadership:\r\n\r\nIf we decide to disclose the data, it may lead to criminal charges against your company\u0092s management for negligence and violation of data protection rules. \r\nYou personally may be held accountable, and your career could be at risk.\r\n\r\nMedia and public opinion:\r\n\r\nWe collaborate with various media outlets and are ready to provide them with part of your data for public exposure. \r\nInformation about your inability to protect data will become public knowledge, leading to further reputational damage.\r\n\r\nMass lawsuits from clients and partners:\r\n\r\nWe have prepared anonymous instructions for your clients and partners affected by the leak.\r\nThese instructions will help them file class-action lawsuits against your company.\r\nWe understand the importance of the stolen information for your organization. \r\nCurrently, all data is in our possession. \r\nWe are ready to discuss the terms of transferring the decryption key and guarantee the complete deletion of all copied data after receiving payment. \r\n\r\nWe also offer an alternative: ignoring this message will either lead to the public leakage of data through our special portal on the Dark Web or result in its complete destruction.\r\n\r\n***\r\n\r\nBrain Cipher Leaks: http://vkvsgl7lhipjirmz6j5ubp3w3bwvxgcdbpi3fsbqngfynetqtw4w5hyd.onion/\r\n\r\n***\r\n\r\nPLEASE NOTE: Any contact with law enforcement agencies or data recovery companies will be considered a violation of our agreement.\r\n\r\nIf we discover that you are collaborating with third parties, this will immediately lead to the following actions:\r\n\r\nKey deletion: all decryption keys will be irrevocably deleted.\r\nPublic leak: We will release part of the data on public resources to ensure maximum reputational damage.\r\nIncreased recovery cost: The price for decryption will double, and the timeframe for providing the key will be extended.\r\nLegal consequences for leadership: We will pass information about your collaboration with law enforcement to the media and regulatory bodies, leading to additional legal and reputational problems.\r\n\r\n\r\nWe understand that this is a difficult situation and would like to offer you a way to resolve it. For this purpose, we provide clear instructions for data recovery. \r\nPlease note that time is limited. If we do not receive a response within 72 hours, the cost of recovery will increase, and the likelihood of data preservation will significantly decrease.\r\n\r\n\r\n\r\nWHY YOU SHOULD CONTACT US DIRECTLY?\r\n\r\n\r\n\r\nGuaranteed security: We guarantee the complete deletion of all data copies after receiving payment.\r\nProfessional approach: We use cutting-edge technologies to ensure reliable encryption and decryption of data.\r\nConfidentiality: Our communication channels are fully anonymous, and we do not share information with third parties.\r\nFlexibility: We are ready to discuss payment terms and provide additional time for decision-making.\r\nNo risks: Cooperation with us is the only way to avoid a public data leak and irreversible data loss.\r\nProtection from legal consequences: We will ensure that information about your company does not fall into the hands of law enforcement or the media if you meet our requirements.\r\n\r\n\r\n========================================\r\n\r\n\r\nTo contact us, follow these instructions:\r\n\r\n1.Download and install Tor Browser (https://www.torproject.org/download/)\r\n2.Go to our support page: http://brain4zoadgr6clxecixffvxjsw43cflyprnpfeak72nfh664kqqriyd.onion (This page can take up to 30 minutes to load.)\r\n3.Enter your encryption ID: JpHrQWFqWcAmGyKZCPDdvFUvGEGZUBn+wETtm2s54PwyICLOwyUaFFJF8SDcluB3s2adSNoVuAnhzOlSCISBm2JvNWZNWGpp\r\n\r\nWe will provide further instructions on payment and data recovery. \r\nAfter confirming payment, we will transfer a unique decryption key that will allow you to restore access to all your files.\r\nWe strongly recommend acting quickly and professionally! \r\nAny delays or attempts to ignore this message may lead to irreversible consequences. We are ready to cooperate and ensure a secure resolution to this issue.\r\n\r\nEmail to support: brain.decrypt@cyberfear.com\r\n\r\nWelcome to BrainCipher!", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "ATTENTION: YOUR DATA HAS BEEN LOCKED!\r\n\r\nDear representatives of the company,\r\n\r\nWe are compelled to inform you that your information system has been successfully breached by our group. \r\nAll your data, including financial reports, customer databases, internal documentation, correspondence, and even backup files, have been encrypted using state-of-the-art cryptographic algorithms.\r\nWithout our unique decryption key, restoring access to this data is impossible.\r\nWe strongly advise against attempting to resolve this issue independently, as any such attempts may result in irreversible data loss.\r\n\r\nYour company is now in an extremely vulnerable position. Disclosure or destruction of the data may lead to serious consequences, including:\r\n\r\nFinancial losses: \r\n\r\nLeakage of confidential information can result in lawsuits, fines, and compensation claims. \r\nMoreover, your competitors may exploit this data to gain an unfair advantage in the market.\r\n\r\nReputational damage:\r\n\r\nLoss of trust from clients and partners may negatively impact your business. \r\nNews of the cyberattack will spread quickly, and your brand may become associated with unreliability and an inability to protect data.\r\n\r\nLegal consequences: \r\n\r\nViolation of data protection laws (e.g., GDPR, CCPA, or other regional regulations) may lead to significant fines and audits by regulatory authorities.\r\nThis may also necessitate a mandatory restructuring of your data processing procedures.\r\n\r\nOperational issues: \r\n\r\nLack of access to critical systems may lead to a complete halt in your company\u0092s operations.\r\nThis could affect not only you but also your customers, partners, and suppliers.\r\n\r\n\r\nADDITIONAL RISKS AND THREATS:\r\n\r\nLegal consequences for company leadership:\r\n\r\nIf we decide to disclose the data, it may lead to criminal charges against your company\u0092s management for negligence and violation of data protection rules. \r\nYou personally may be held accountable, and your career could be at risk.\r\n\r\nMedia and public opinion:\r\n\r\nWe collaborate with various media outlets and are ready to provide them with part of your data for public exposure. \r\nInformation about your inability to protect data will become public knowledge, leading to further reputational damage.\r\n\r\nMass lawsuits from clients and partners:\r\n\r\nWe have prepared anonymous instructions for your clients and partners affected by the leak.\r\nThese instructions will help them file class-action lawsuits against your company.\r\nWe understand the importance of the stolen information for your organization. \r\nCurrently, all data is in our possession. \r\nWe are ready to discuss the terms of transferring the decryption key and guarantee the complete deletion of all copied data after receiving payment. \r\n\r\nWe also offer an alternative: ignoring this message will either lead to the public leakage of data through our special portal on the Dark Web or result in its complete destruction.\r\n\r\n***\r\n\r\nBrain Cipher Leaks: http://vkvsgl7lhipjirmz6j5ubp3w3bwvxgcdbpi3fsbqngfynetqtw4w5hyd.onion/\r\n\r\n***\r\n\r\nPLEASE NOTE: Any contact with law enforcement agencies or data recovery companies will be considered a violation of our agreement.\r\n\r\nIf we discover that you are collaborating with third parties, this will immediately lead to the following actions:\r\n\r\nKey deletion: all decryption keys will be irrevocably deleted.\r\nPublic leak: We will release part of the data on public resources to ensure maximum reputational damage.\r\nIncreased recovery cost: The price for decryption will double, and the timeframe for providing the key will be extended.\r\nLegal consequences for leadership: We will pass information about your collaboration with law enforcement to the media and regulatory bodies, leading to additional legal and reputational problems.\r\n\r\n\r\nWe understand that this is a difficult situation and would like to offer you a way to resolve it. For this purpose, we provide clear instructions for data recovery. \r\nPlease note that time is limited. If we do not receive a response within 72 hours, the cost of recovery will increase, and the likelihood of data preservation will significantly decrease.\r\n\r\n\r\n\r\nWHY YOU SHOULD CONTACT US DIRECTLY?\r\n\r\n\r\n\r\nGuaranteed security: We guarantee the complete deletion of all data copies after receiving payment.\r\nProfessional approach: We use cutting-edge technologies to ensure reliable encryption and decryption of data.\r\nConfidentiality: Our communication channels are fully anonymous, and we do not share information with third parties.\r\nFlexibility: We are ready to discuss payment terms and provide additional time for decision-making.\r\nNo risks: Cooperation with us is the only way to avoid a public data leak and irreversible data loss.\r\nProtection from legal consequences: We will ensure that information about your company does not fall into the hands of law enforcement or the media if you meet our requirements.\r\n\r\n\r\n========================================\r\n\r\n\r\nTo contact us, follow these instructions:\r\n\r\n1.Download and install Tor Browser (https://www.torproject.org/download/)\r\n2.Go to our support page: http://brain4zoadgr6clxecixffvxjsw43cflyprnpfeak72nfh664kqqriyd.onion (This page can take up to 30 minutes to load.)\r\n3.Enter your encryption ID: y40JhmrKbqaEVpMzuffIK9OXeyCQ9xmsGfvyGW2Tbg1CNxiJB3nQshs1lr1OEVzEuewaHcWs0PRBzFaROLB3oxclNueUpI\r\n\r\nWe will provide further instructions on payment and data recovery. \r\nAfter confirming payment, we will transfer a unique decryption key that will allow you to restore access to all your files.\r\nWe strongly recommend acting quickly and professionally! \r\nAny delays or attempts to ignore this message may lead to irreversible consequences. We are ready to cooperate and ensure a secure resolution to this issue.\r\n\r\nEmail to support: brain.decrypt@cyberfear.com\r\n\r\nWelcome to BrainCipher!", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Dear managment!\r\n\r\n---Welcome! Your are locked by SenSayQ!---\r\n\r\nIf you are reading this message, means that:\r\n\r\n * Your network infrastructures have been compromized!\r\n * Critical data has leaked!\r\n * Files are encrypted!\r\n \r\n\r\n-----------------------------------------------------------------------\r\nThe best and only thing you can do is to contact us to settle the matter before any losses occurs. \r\n-----------------------------------------------------------------------\r\n\r\n1. If you modify files - our decrypt software won't able to recover data.\r\n2. If you use third party software - you can damage/modify files (see item 1). \r\n3. You need cipher key / our decrypt software to restore you files. \r\n4. The police or authorities will not be able to help you get the cipher key. We encourage you to consider your decisions.\r\n\r\n\r\nContacting us will be the fastest and safest solution to the problem.\r\n\r\n-----------------------------------------------------------------------\r\n\r\nAttention! If you do not contact us within 72 hours, we will be forced to publish the stolen data on our website.\r\n\r\n\r\nTo contact us:\r\n\r\n1. Download and install Tor Browser - torproject.org/download\r\n2. Follow the link: ppzmaodrgtg7r6zcputdlaqfliubmmjpo4u56l3ayckut3nyvw6dyayd.onion\r\n3. Enter your ID: TFfgc8xENZ62nkC0Yt7oNeR3Uqg07IcLs1eEiuDcOAzAJl1GhJbs3QzbxidYAtsddy4JfaZE3wubaPiNbHhWaThiTHJI\r\n\r\n\r\nE-mail support: qn.support@cyberfear.com", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Go to https://getsession.org/; download & install; then add 05c5dbb3e0f6c173dd4ca479587dbeccc1365998ff9042581cd294566645ec7912 to your contacts and send a message with this codename ---> WINDOWS", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Hello, \r\n\r\nThe key data points of your network has been compromised, and all of your company's critical data has been transferred to our secure systems. \r\n\r\nPositive News:\r\n\r\n- We are capable of fully restoring your systems and data.\r\n- If we come to an agreement, this incident will remain confidential between your organization and our team. \r\n- Our motivation is purely financial, and we do not align with any specific country or political ideology\r\n\r\nTerms and Conditions: \r\n\r\n1) You must contact us within 72 hours; otherwise, we will publish an announcement about the leak of your data.\r\n2) You have 5 days to reach an agreement; If you fail to do so, your data will be published and the recovery tool destroyed.\r\n\r\nContact us:\r\nUUID:8f1578f4-86f0-472b-b100-6c9321972646\r\n\r\nUUID is important information for you to confirm with us. Please attach this UUID in the email.\r\n\r\n\r\ntraverse_politely673@aleeas.com\r\ngrumble_monastery519@8alias.com\r\nbakeshop_unhappily046@dralias.com\r\n\r\nWe all understand what happened and what consequences await you.\r\n\r\nAll countries have their own PDPL (Personal Data Protection Law) regulations. \r\nIn the event that you do not agree with us, information pertaining to your companies and the data of your company's customers will be published on the internet, and the respective country's personal data usage authority will be informed. \r\nMoreover, confidential data related to your company will be shared with potential competitors through email and social media. \r\nYou can be sure that you will incur damages far exceeding the amount we are requesting from you should you decide not to agree with us.\r\n\r\nWhat we offer in exchange for your payment:\r\n - Full decryption and restoration of systems and data following an incident, completed within 24 hours.\r\n - We guarantee that all recovered data will remain confidential and that all of your leaked data will be securely deleted from our servers after resolving the incident. We will provide a full deletion log.\r\n - Expert advice tailored to strengthen your company's IT infrastructure against future threats.\r\n\r\nUseful tips that will help you :\r\n\t1) Do not try to recover files yourself.\r\n\t2) Do not modify encrypted files.\r\n\t3) Do not use third party software to restore your data.", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "YOUR FILES ARE ENCRYPTED!\r\n\t\t\t\r\n\t\t\tThe only way to decrypt them is to buy our decryptor.\r\n\t\t\r\n\t\t\tContact us on TOX messenger and decrypt one file for free, for proof of our working decryptor.\r\n\t\t\t\r\n\t\t\tDownload TOX messenger: https://tox.chat/\r\n\t\t\r\n\t\t\tAdd TOX ID: 82EB02C9FE8B50B794181CCD14F851EB23428FD265C609CD2054DA2A640008154B1FBDE043D7\r\n\t\t", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Your files are locked and stolen. You must pay ransom to unlock the files. We will keep attacking you and publish your data on onion websites if you don't pay the ransom.\r\n\tContact: lockjimmy@onionmail.org\r\n\tWe can offer you a security report after you pay the ransom if you want.\r\n ", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Your personal files have been encrypted!\r\n\r\nAll your important files have been encrypted, but for your solution, we can return them. You can pay for the ransom of your personal data. Contact us to redeem your files via the email address bitboxgang@mail2tor.com. Send a message with the subject [T0D812US] Rescue my files", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "go to https://getsession.org/; download & install; run, click conversations, send new message to this id 05c5dbb3e0f6c173dd4ca479587dbeccc1365998ff9042581cd294566645ec7912; mention this code SOCOTRA_WIN in your initial message; then wait for our response; we have exfiltrated all your valuable data; we are going to publish it on the dark web pretty soon", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\n SI DECIDE NO CUMPLIR con cualquiera de las exigencias entenderemos negatividad de su parte y procederemos a publicar informaci\u00f2n vulnerable de su empresa, empleados y clientes ademas de no decifrar sus archivos.\r\n\t\r\n\t>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n \r\n\r\n>>>> You must communicate via email within the first 2 hours after the attack indicating the name of your business.\r\n\r\n\tEMAIL: ransomnarco@torbox3uiot6wchz.onion\r\n\r\n\tWrite to a email and wait for the answer, we will always answer you. \r\n\tSometimes you will need to wait for our answer because we attack many companies.\r\n\t\r\n\t\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "\n YOUR FILES HAVE BEEN ENCRYPTED!\r\n\r\nDo not panic. Your data is safe, but it is locked and encrypted. You cannot access it without our help.\r\n\r\nWhat happened?\r\nYour network has been compromised by .50RANSOMFIRE . All your important files (documents, databases, photos, etc.) have been encrypted with an algorithm. Without the decryption key, it is mathematically impossible to recover your data.\r\n\r\nWhat do we want?\r\nTo recover your files, you must pay a ransom of $300 in Bitcoin. If you do not pay within 72 hours, your data will be permanently lost, and the decryption key will be deleted.\r\n\r\nContact us\r\n\r\nsoftware009a@proton.me", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "\nYour Files Are Encrypted\r\n\r\nYour system has been compromised, and all your files have been encrypted by our advanced ransomware. To regain access, you must pay a ransom of $250 in Bitcoin.\r\n\r\nInstructions:\r\n\r\n>Contact us at software009a@proton.me \r\n>Upon verification, we will provide the decryption key and the decryptor.\r\n>Failure to comply within 72 hours will result in permanent data loss and we delete the decryption key forever. Do not attempt to decrypt the files yourself", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "\r\n\r\n------Dear managers!------\r\nIf you are reading this, it means your network has been attacked. What does that mean?\r\nWe hacked your network and now all your files, documents, client database, projects and other important data safely encrypted with reliable algorithms.\r\nwe also have a copy of all your data.\r\nWARNING!!! You don't have to go to the POLICE, etc. Otherwise we will not be able to help you.\r\nYou cannot acces the files right now. But do not worry. You can get it back! It is easy to recover in a few steps.\r\nAs proof, we can decrypt any 3 files you provide.\r\n\r\nWe are not interested to ruin your business. We want to get ransom and be happy.\r\nPlease bring this information to your team leaders as soon as possible.\r\n\r\nIn case of a successfull transaction, we will restore your systems within 4-6 hours and also provide security recommendations.\r\n\r\n\r\n-----------------------WARNING-----------------------\r\n\r\nIf you modify files - our decrypt software won't able to recover data\r\nIf you use third party software - you can damage/modify files (see item 1)\r\nYou nedd cipher key / our decrypt software to restore you files.\r\nThe police or authorities will not be able to help you get the cipher key. We encourage you to consider your decisions.\r\n\r\n-----------------------RECOVERY-----------------------\r\n\r\nUse email: lockthis@cyberfear.com\r\nAlternative email address: ball_mount@mail2tor.com (ball_mount@mailum.com)\r\nID message: c5337115f1d1a\r\n", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "\r\n\r\nYour network has been penetrated.\r\n\r\n\r\nAll files on each host in the network have been encrypted with a strong algorithm.\r\n\r\n\r\nBackups were either encrypted\r\nShadow copies also removed, so F8 or any other methods may damage encrypted data but not recover.\r\n\r\n\r\nWe exclusively have decryption software for your situation.\r\nMore than a year ago, world experts recognized the impossibility of deciphering by any means except the original decoder.\r\nNo decryption software is available in the public.\r\nAntiviruse companies, researchers, IT specialists, and no other persons cant help you decrypt the data.\r\n\r\n\r\nDO NOT RESET OR SHUTDOWN - files may be damaged.\r\nDO NOT DELETE readme files.\r\n\r\n \r\n\r\nTo confirm our honest intentions.Send 2 different random files and you will get it decrypted.\r\nIt can be from different computers on your network to be sure that one key decrypts everything.\r\n2 files we unlock for free\r\n\r\n\r\nTo get info (decrypt your files) contact us at telegram first . if you don't get answer in 24 hours\r\nthen write us a email\r\n\r\nContact information :\r\n \r\nMail 1 : AzureShard@zohomail.eu\r\n\r\nTelegram: https://t.me/AzureShard\r\n\r\nYou will receive btc address for payment in the reply letter\r\n\r\n\r\nNo system is safe!", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "\r\n \t\t\t\t----------- [ Welcome to buhtiRansom ] -------------> \r\n\r\n What happend? \r\n ---------------------------------------------- \r\n Your files are encrypted. We use strong encryption algorithms, so you cannot decrypt your data. \r\n But you can restore everything by purchasing a special program from us - universal decryptor. This program will restore all your files. \r\n Follow our instructions below and you will recover all your data. \r\n\r\n What guarantees? \r\n ---------------------------------------------- \r\n We value our reputation. If we do not do our work and liabilities, nobody will pay us. This is not in our interests. \r\n All our decryption software is perfectly tested and will decrypt your data. \r\n\r\n How to get access? \r\n ---------------------------------------------- \r\n Using a browser: \r\n 1) Open website: https://satoshidisk.com/pay/CKiJU8 \r\n 2) Enter valid email to receive download link after payment. \r\n 3) Pay amount to Bitcoin address. \r\n 4) Receive email link to the download page. \r\n 5) Decrypt instruction included. \r\n\r\n !!! DANGER !!! \r\n DO NOT MODIFY or try to RECOVER any files yourself. It WILL NOT be able to RESTORE. \r\n !!! DANGER !!! \r\n ", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "\r\n ~~~ AlphaCat ~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack worldwide and there is no dissatisfied victim after payment.\r\n \r\n>>>> You need contact us via email with srenshot of btc transaction and your personal DECRYPTION ID\r\n\r\n\tContact via Email with your personal Decryption id !: hackbeenswim@mail2tor.com\r\n\t\r\n\tSend 400$ (0.006 BTC) at this address --> bc1qkr7wxuqwet9w6920vk94p7npkxh33fc7prv55q\r\n\t\r\n>>>> Your personal DECRYPTION ID: %s\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack repeatedly again!", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "\r\n ~~~ Ikaruz Red Team the world's Simple Ransomware Since 2019~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n\tThe data will be published on TOR website if you do not pay the ransom \r\n\r\n\tLinks for Tor Browser:\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion\r\n\r\n\tLinks for the normal browser\r\n\thttp://lockbitapt.uz\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion.ly\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion.ly\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion.ly\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion.ly\r\n\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n \r\n\tYou can obtain information about us on twitter https://twitter.com/hashtag/lockbit?f=live\r\n \r\n\r\n>>>> You need contact us and decrypt one file for free on these TOR sites with your personal DECRYPTION ID\r\n\r\n\tDownload and install TOR Browser https://www.torproject.org/\r\n\tWrite to a chat and wait for the answer, we will always answer you. \r\n\tSometimes you will need to wait for our answer because we attack many companies.\r\n\t\r\n\tLinks for Tor Browser:\r\n\thttp://lockbitsupt7nr3fa6e7xyb73lk6bw6rcneqhoyblniiabj4uwvzapqd.onion\r\n\thttp://lockbitsupuhswh4izvoucoxsbnotkmgq6durg7kficg6u33zfvq3oyd.onion\r\n\thttp://lockbitsupn2h6be2cnqpvncyhj4rgmnwn44633hnzzmtxdvjoqlp7yd.onion\r\n\r\n\tLink for the normal browser\r\n\thttp://lockbitsupp.uz\r\n\t\r\n\tIf you do not get an answer in the chat room for a long time, the site does not work and in any other emergency, you can contact us in jabber or tox.\r\n\t\r\n\tTox ID LockBitSupp: 3085B89A0C515D2FB124D645906F5D3DA5CB97CEBEA975959AE4F95302A04E1D709C3C4AE9B7\r\n\tXMPP (Jabber) Support: 598954663666452@exploit.im 365473292355268@thesecure.biz\r\n\t\r\n>>>> Your personal DECRYPTION ID: %s\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!\r\n\r\n\r\n>>>> Advertisement\r\n\t\r\n\tWould you like to earn millions of dollars $$$ ?\r\n\r\n\tOur company acquire access to networks of various companies, as well as insider information that can help you steal the most valuable data of any company. \r\n\tYou can provide us accounting data for the access to any company, for example, login and password to RDP, VPN, corporate email, etc. \r\n\tOpen our letter at your email. Launch the provided virus on any computer in your company.\r\n\r\n\tYou can do it both using your work computer or the computer of any other employee in order to divert suspicion of being in collusion with us.\r\n\r\n\tCompanies pay us the foreclosure for the decryption of files and prevention of data leak.\r\n\r\n\tYou can contact us using Tox messenger without registration and SMS https://tox.chat/download.html. \r\n\tUsing Tox messenger, we will never know your real name, it means your privacy is guaranteed.\r\n\r\n\tIf you want to contact us, write in jabber or tox. \r\n\t\r\n\tTox ID LockBitSupp: 3085B89A0C515D2FB124D645906F5D3DA5CB97CEBEA975959AE4F95302A04E1D709C3C4AE9B7\r\n\tXMPP (Jabber) Support: 598954663666452@exploit.im 365473292355268@thesecure.biz\r\n\t\r\n\tIf this contact is expired, and we do not respond you, look for the relevant contact data on our website via Tor or Brave browser \r\n\t\r\n\tLinks for Tor Browser:\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion\r\n\r\n\t\r\n\tLinks for the normal browser\r\n\thttp://lockbitapt.uz\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion.ly\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion.ly\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion.ly\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion.ly", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "\r\nIf your data is accidentally encrypted, please contact us as soon as possible, otherwise your data may be permanently deleted.\r\n\r\nYou can contact me via email.\r\n\r\n>>>>Your personal DECRYPTION ID:% s\r\n\r\nE-mail: mysterious666@mail2tor.com\r\nE-mail2: smith.lisa@onionmail.org\r\n\r\nYou only need to pay a small fee, and we will decrypt it for you within 24 hours.\r\n\r\n>>>>We only accept virtual currency USDT transactions. You need to prepare a virtual currency wallet in advance, and we will provide you with the payment address.\r\n>>>>Suggest contacting us for free decryption of a file before completing the payment to prove that we can help you decrypt it.\r\n\r\n>>>>After the payment is completed, send the payment photo to email: smith.lisa87@tutamail.com\r\n>>>>The payment has been completed and sent via email. We will provide you with a decryption program\r\n\r\n>>>>What guarantee will we not deceive you?\r\nWe are not a politically motivated group, we just need money.\r\nIf you make the payment, we will thank you and provide you with a decryption program, and your data will not be disclosed.\r\nAfter payment, we will immediately send you the decryption program. Our reputation is very important to us.", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "------Dear managers!------\r\nIf you are reading this, it means your network has been attacked. What does that mean?\r\nWe hacked your network and now all your files, documents 'NDA', clients databases, projects and other important data are safely encrypted with reliable algorithms.\r\nWe also have a copy of all your data.\r\n\r\nWARNING!!! You don't have to go to the POLICE, etc. Otherwise we will not be able to help you.\r\n----------------------------------------------------------------------------------------------------------\r\nYou cannot access the files right now. But do not worry. You can get it back! It is easy to recover in a few steps.\r\n\r\nAs proof, we can decrypt any 3 files you provide.\r\nFiles must not be larger than 1 megabyte and must not contain data tables.\r\n\r\nWe are also ready to provide proof of the leak after you confirm that you are a legitimate representative of the company.\r\n\r\nWe are not interested to ruin your business. We want to get ransom and be happy.\r\nPlease bring this information to your team leaders as soon as possible.\r\n\r\n\r\nContacting us will be the fastest and safest solution to the problem. In case of a successful transaction, we will restore your systems within 4-6 hours, as well as give recommendations on how to ensure security. \r\n\r\nIf you don't contact us within 48 hours, we will start publishing your data in the public domain and on our blog.\r\n\r\n\r\n\r\n---------------------------------WARNING------------------------------------------------------------------\r\n\r\n1) If you modify files - our decrypt software won't able to recover data \r\n2) If you use third party software - you can damage/modify files (see item 1) \r\n3) You need cipher key / our decrypt software to restore you files. \r\n4) The police or authorities will not be able to help you get the cipher key. We encourage you to consider your decisions. \r\n\r\n\r\n---------------------------------RECOVERY------------------------------------------------------------------\r\n\r\nUse email: qn.support@cyberfear.com (Use a new Protonmail.com account. In the first message, specify the encryption ID 17824chami)", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "Your data are stolen and encrypted\r\n\r\n\tThe data will be published on TOR website if you do not pay the ransom \r\n\tYou need contact us with your files' ENCRYPTION suffix and we will decrypt one file for you.\r\n\tContact Email: yiimuu499@onionmail.org", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "go to https://getsession.org/; download & install; run, click conversations, send new message to this id 05c5dbb3e0f6c173dd4ca479587dbeccc1365998ff9042581cd294566645ec7912; mention this code FORMOSA in your initial message; then wait for our response; we have exfiltrated all your valuable data; we are going to publish it on the dark web pretty soon", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "\u00e3\u0080\u008b\u00e3\u0080\u008b\u00e3\u0080\u008bWhat happened? \u00e3\u0080\u008a\u00e3\u0080\u008a\u00e3\u0080\u008a\r\n\r\n*All your files are encrypted, you can't recover them without our decryptor.\r\n\r\n*We only need money, after payment we will provide you with a decryptor for the entire network, you will recover all your data.\r\nIf you don't contact us, we will publish all your data on our blog and send it to the largest mass media.\r\n\r\n*As long as you pay, we will provide you with a decryption program, at the same time we will delete the stolen data and guarantee that there will be no more attacks.\r\nIf we don't give you a decryptor or we don't delete your data, no one will pay us in the future, this is not in line with our goal, we always keep our promises.\r\n\r\n*You contact this email to confirm the payment amount, and after the payment is completed, send the payment photo to this email, and we will provide you with a decryption program.\r\n>>>>Pay the ransom amount Contact email: KatherineLeonardz@mail.com\r\n>>>>Payment cryptocurrency address USDT-TRC20: Tzb9aEMbCXSrBCzik68dE8kmwEJ9ND\r\n\r\n* WARNING*\r\n\u00e3\u0080\u008b\u00e3\u0080\u008bWe strongly recommend that you do not try to repair your files, otherwise they will be damaged!!!\r\n\u00e3\u0080\u008b\u00e3\u0080\u008bOur team members come from different countries, we are not interested in anything else, we are only interested in money.\r\n\u00e3\u0080\u008b\u00e3\u0080\u008bSometimes you need to wait for our response because we attack many companies.\r\n\u00e3\u0080\u008b\u00e3\u0080\u008bWe do not allow re-attacks on target companies that have already paid.\r\n\u00e3\u0080\u008b\u00e3\u0080\u008bWe do not allow targeting non-profit hospitals and some non-profit organizations.\r\n\u00e3\u0080\u008b\u00e3\u0080\u008bWant to ask the authorities for protection?\r\n- Asking for their help will only make the situation worse, they will try to prevent you from negotiating with us, because negotiation will make them look incompetent, and you will get nothing after the incident data report is handed over to the government department, and everyone except you will forget what happened! ! ! ! ! !\r\n\u00e3\u0080\u008b\u00e3\u0080\u008bAfter the payment is successful, you will not have bad news. But if the payment fails, there will be a lot of bad news, so don't think about how to avoid it.\r\nJust focus on negotiation, payment and decryption, our experts will solve all your problems within 1 day after receiving the payment: server and data recovery and delete the stolen data, everything will be as good as new.", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "\r\n ~~~ LockBit 3.0 the world's fastest ransomware since 2077~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n\tThe data will be published on TOR website if you do not pay the ransom \r\n\r\n\tLinks for Tor Browser:\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion\r\n\r\n\tLinks for the normal browser\r\n\thttp://lockbitapt.uz\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion.ly\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion.ly\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion.ly\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion.ly\r\n\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n \r\n\tYou can obtain information about us on twitter https://twitter.com/hashtag/lockbit?f=live\r\n \r\n\r\n>>>> You need contact us and decrypt one file for free on these TOR sites with your personal DECRYPTION ID\r\n\r\n\tDownload and install TOR Browser https://www.torproject.org/\r\n\tWrite to a chat and wait for the answer, we will always answer you. \r\n\tSometimes you will need to wait for our answer because we attack many companies.\r\n\t\r\n\tLinks for Tor Browser:\r\n\thttp://lockbitsupt7nr3fa6e7xyb73lk6bw6rcneqhoyblniiabj4uwvzapqd.onion\r\n\thttp://lockbitsupuhswh4izvoucoxsbnotkmgq6durg7kficg6u33zfvq3oyd.onion\r\n\thttp://lockbitsupn2h6be2cnqpvncyhj4rgmnwn44633hnzzmtxdvjoqlp7yd.onion\r\n\r\n\tLink for the normal browser\r\n\thttp://lockbitsupp.uz\r\n\t\r\n\tIf you do not get an answer in the chat room for a long time, the site does not work and in any other emergency, you can contact us in jabber or tox.\r\n\t\r\n\tTox ID LockBitSupp: 3085B89A0C515D2FB124D645906F5D3DA5CB97CEBEA975959AE4F95302A04E1D709C3C4AE9B7\r\n\tXMPP (Jabber) Support: 598954663666452@exploit.im 365473292355268@thesecure.biz\r\n\t\r\n>>>> Your personal DECRYPTION ID: B7568014A48684D6D525F3F3722638C4\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!\r\n\r\n\r\n>>>> Advertisement\r\n\t\r\n\tWould you like to earn millions of dollars $$$ ?\r\n\r\n\tOur company acquire access to networks of various companies, as well as insider information that can help you steal the most valuable data of any company. \r\n\tYou can provide us accounting data for the access to any company, for example, login and password to RDP, VPN, corporate email, etc. \r\n\tOpen our letter at your email. Launch the provided virus on any computer in your company.\r\n\r\n\tYou can do it both using your work computer or the computer of any other employee in order to divert suspicion of being in collusion with us.\r\n\r\n\tCompanies pay us the foreclosure for the decryption of files and prevention of data leak.\r\n\r\n\tYou can contact us using Tox messenger without registration and SMS https://tox.chat/download.html. \r\n\tUsing Tox messenger, we will never know your real name, it means your privacy is guaranteed.\r\n\r\n\tIf you want to contact us, write in jabber or tox. \r\n\t\r\n\tTox ID LockBitSupp: 3085B89A0C515D2FB124D645906F5D3DA5CB97CEBEA975959AE4F95302A04E1D709C3C4AE9B7\r\n\tXMPP (Jabber) Support: 598954663666452@exploit.im 365473292355268@thesecure.biz\r\n\t\r\n\tIf this contact is expired, and we do not respond you, look for the relevant contact data on our website via Tor or Brave browser \r\n\t\r\n\tLinks for Tor Browser:\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion\r\n\r\n\t\r\n\tLinks for the normal browser\r\n\thttp://lockbitapt.uz\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion.ly\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion.ly\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion.ly\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion.ly", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "\r\n ~~~ LockBit Black Ransomware Since 2024~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n\tPrice = 2000 $ \r\n Bitcoin = 328N9mKT6xFe6uTvtpxeKSymgWCbbTGbK2\r\n Email = jimyjoy140@cyberfear.com\r\n Email = jimyjoy140@tutamail.com\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n \r\n\t\r\n>>>> Your personal DECRYPTION ID: WERTYFG34A48MK4D6D525F3F372263313 + ID Number.README.txt\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!\r\n", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "\r\n********************************************************************************************\r\n************************ Your data are stolen and encrypted ****************************\r\n\r\n1. How to contact?\r\n\t* 1. You can use tox: https://qtox.github.io/ send message to us.\r\n\t Tox ID : 465928E63E40E772C89D47543523651AA761E5CC0599ED43C0D6E3AE1EFB9A01C14457E1F32D\r\n\t* 2. You can send email to us, \r\n\t Email address : aocpocqotox@onionmail.org\r\n\tSuggestion : Contact us in two ways at the same time, if you haven't received a reply to your email, please check your spam folder.\r\n\t\r\n2. How to pay?\r\n\t* Contact us.\r\n\r\n3. What guarantees that we will not deceive you?\r\n\r\n * We are not a politically motivated group and we do not need anything other than your money\r\n If you pay, we will provide you the programs for decryption and we will delete your data.\r\n\r\n * If we do not give you decrypters or we do not delete your data after payment, then nobody will pay us in the future.\r\n Therefore to us our reputation is very important.\r\n\r\n * We attack the hundreds of companies and there is no dissatisfied victim after payment.\r\n\r\n4. What happens if you do not pay?\r\n\r\n * If you don't pay, the data will be sold on auction platform after 72 hours, data will be bought by your competitors,\r\n and we will report your company fail to protect data as a result of a data breach to the data protection authority in your country, \r\n\t you could face significant fines.\r\n\r\n * Do not hesitate for a long time, the sooner pay, the sooner your company will be safe.\r\n\t\r\n\t* If you pay, we will delete data immediately, we can also provide you an paid hacking services. \r\n\t You can pay for the services after the hacking is successful. Please trust our strength.\r\n\r\n5. Warning! \r\n \r\n * Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n \r\n * If you do not pay the ransom we will attack your company repeatedly again!\r\n\r\n*** Your DECRYPTION ID: %s\r\n\r\n************************ Your data are stolen and encrypted **************************\r\n******************************************************************************************\r\n", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "\n ~~~ LockBit 5.01 the world's fastest ransomware since 2019~~~\n\n>>>> Your data are stolen and encrypted\n\n\tThe data will be published on TOR website if you do not pay the ransom \n\n\t\r\nBTC amount 0.01 = up to 12hr\r\nBTC amount 0.02 = up to 24hr\r\nBTC amount 0.1 = up 48 hr\r\nBTC amount 0 , deleted all files from you PC, and post all infirmation to public.\r\n\r\nwhere send BTC: bc1qm7sg7p2jkgthv7pkjy856sh9lr5x3yrpzv099d :not valid after 07/23/2024 10PM EST.\r\nTime just 12 hr, after everythink will be removed\r\nYou can buy them on the exchange or at an ATM https://coinatmradar.com. You can find the addresses here buy with credit or debet card online https://www.moonpay.com/buy. \r\nYou have 12 hours for the transfer, \r\n24 hours for the amount of 0.02, \r\nand of course, you can always wait 48 hours and pay 0.1. \r\nAfter that, send a request with confirmation to TOX , faster way!\r\nYou can contact us using Tox messenger without registration and SMS https://tox.chat/download.html. \n\t\r\nUsing Tox messenger, we will never know your real name, it means your privacy is guaranteed.\n\n\t\r\nIf you want to contact us, tox. \n\t\n\t\r\nTox ID LockBitSupp: B90F5C1EC3C13400F6D0B22B772C5FAB086F8C41A0C87B92A8B3C7F2ECBBCE191A455140273E\r\n\r\n\r\n\r\n\r\n\r\n", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "\r\n ~~~ LockBit 3.0 the world's fastest ransomware since 2019~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n\tThe data will be published on TOR website if you do not pay the ransom \r\n\r\nDeathGrip Ransomware Attack | t.me/DeathGripRansomware\r\n\r\nThis computer is attacked by russian ransomware community of professional black hat hackers. \r\nYour every single documents / details is now under observation of those hackers.\r\nIf you want to get it back then you have to pay 1000$ for it.\r\n\r\nThis Attack Is Done By Team RansomVerse You Can Find Us On Telegram\r\n @DeathGripRansomware Contact The Owner For The Decrypter Of This Ransomware\r\n\r\n#DeathGripMalware\r\n\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n \r\n\tYou can obtain information about us on Telegram t.me/DeathGripRansomware\r\n \r\n\r\n>>>> You need contact us and decrypt one file for free on these TOR sites with your personal DECRYPTION ID\r\n\r\n\tDownload and install TOR Browser https://www.torproject.org/\r\n\tWrite to a chat and wait for the answer, we will always answer you. \r\n\tSometimes you will need to wait for our answer because we attack many companies.\r\n\t\r\n\tLinks for Tor Browser:\r\n\thttp://lockbitsupt7nr3fa6e7xyb73lk6bw6rcneqhoyblniiabj4uwvzapqd.onion\r\n\thttp://lockbitsupuhswh4izvoucoxsbnotkmgq6durg7kficg6u33zfvq3oyd.onion\r\n\thttp://lockbitsupn2h6be2cnqpvncyhj4rgmnwn44633hnzzmtxdvjoqlp7yd.onion\r\n\r\n\tLink for the normal browser\r\n\thttp://lockbitsupp.uz\r\n\t\r\n\t\r\n>>>> Your personal DECRYPTION ID: B7568014A48684D6D525F3F3722638C4\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!\r\n\r\n\r\n>>>> Advertisement\r\n\t\r\n\tWould you like to earn millions of dollars $$$ ?\r\n\r\n\tOur company acquire access to networks of various companies, as well as insider information that can help you steal the most valuable data of any company. \r\n\tYou can provide us accounting data for the access to any company, for example, login and password to RDP, VPN, corporate email, etc. \r\n\tOpen our letter at your email. Launch the provided virus on any computer in your company.\r\n\r\n\tYou can do it both using your work computer or the computer of any other employee in order to divert suspicion of being in collusion with us.\r\n\r\n\tCompanies pay us the foreclosure for the decryption of files and prevention of data leak.\r\n\r\n\tYou can contact us using on Telegram messenger without registration and text t.me/DeathGripRansomware\r\n\tUsing Tox messenger, we will never know your real name, it means your privacy is guaranteed.\r\n\r\n\tIf you want to contact us, write in jabber or tox. \r\n\r\n\t\r\n\tIf this contact is expired, and we do not respond you, look for the relevant contact data on our website via Tor or Brave browser \r\n\t\r\n\tLinks for Tor Browser:\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": " (SpiderPrey)\r\n\nYour Files Have Been Locked.\r\n\r\nyou have to pay Bitcoin for Decryption.\r\n \r\nYour Personal ID : %s\r\n\r\nyou can send a little file (less than 2 megabyte) for Decryption test.\r\n\r\nTelegram :( @Dy_supa ).\r\n\r\nOur Email:laminan@keemail.me in Case of no reply from Telegram after couple of hours send message to my Email.", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "\r\n ~~~ IF YOU WANT TO BRING YOUR PROJECT BACK TO NORMAL FUNCTIONALITY WITH YOUR BACKUP AND DECRYPYION FILE YOU REALLY NEED TO PAY SOME $$$$ !\r\n\r\nAND AFTER SUCCESSFUL PAYMENT YOU WILL RECEIVE YOUR READY BACKUP AND DECRYPTION FILE FOR RESTORE YOUR NORMAL WORK !\r\n\r\nBITCOIN WALLET -\r\nbc1qg753w3v5hkhlygfrlst424h23x964qav3sr9f9\r\n\r\nWAITING FOR SUCCESSFULL PAYMENTS !~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n\tThe data will be published on TOR website if you do not pay the ransom \r\n\r\n\tLinks for Tor Browser:\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion\r\n\r\n\tLinks for the normal browser\r\n\thttp://lockbitapt.uz\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion.ly\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion.ly\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion.ly\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion.ly\r\n\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!\r\n\r\n\r\n>>>> Advertisement\r\n\t\r\n\tWould you like to earn millions of dollars $$$ ?\r\n\r\n\tOur company acquire access to networks of various companies, as well as insider information that can help you steal the most valuable data of any company. \r\n\tYou can provide us accounting data for the access to any company, for example, login and password to RDP, VPN, corporate email, etc. \r\n\tOpen our letter at your email. Launch the provided virus on any computer in your company.\r\n\r\n\tYou can do it both using your work computer or the computer of any other employee in order to divert suspicion of being in collusion with us.\r\n\r\n\tCompanies pay us the foreclosure for the decryption of files and prevention of data leak.\r\n\r\n\t\r\n", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": " .+####*=: \r\n -+=*=-++*=::+-:++*::@@= @@#%*+#@*+==-=-+- \r\n:=---:::::---::-:-====*+#@@ @@@=+---===-====-:+=-=::: \r\n -=--:::-:::: +::::=:=.:=#@ @#+#+-==---+:----------:-.::: \r\n ::+.:-:::--:-:--.-=+-**+-=% @##*###*+=:=--:::-=-:--=:.=:- \r\n --::-==---:-----=-=#*+-==*#%*#*++=%-*:--=--==:-=-::-:-: \r\n =.:::.:----------+=+=+*-++*@ @@**+:=*#*#--=-----:--:-=-:+: \r\n .::::------=-=.=++-++++##@ @@ @@ @%*=*+*+=**=:-:=----::::: \r\n ::-:--:--==-++=+====+%@@ @@#@@@@@@ @%=+++=++==-:::--:-::: \r\n ::----=-==-*++=+==*==# +@:@@@@@@@@@ %.*=++====+++=+::--:: \r\n :----+==-:+==+==++*=-*+:@@@@@@@%#*#*+---+*+=+=+==--::. \r\n :--=*+-=:=:=*:==-+++=-#**@+*#@@@+*#*++=++=*-=-===+=:=: \r\n .-++=--::=-==+=-=++*:*--+-*:#@@*-=+=+=--::-==== \r\n +:....::--=----=+++::=#**=@#+@*=-+=:*===-::.:::= \r\n :::-==--::-:.@@@@@#*==+==---:. \r\n ---=++---+.-@#@@+#*===-===++.. \r\n -+====:--:-+=+@*=**=*+===: \r\n ---==-@+::=:###*-+-. \r\n -*:*=*#@@@@##=-=+- \r\n @@@--#=**@*-*-:+@@ \r\n :#==-*. \r\n\r\nHi. All your files are encrypted. For decryption contact us on Session messenger.\r\n\r\nYou can get it from https://getsession.org\r\nOur Session ID: 050877486f869a0ca3c28c831576801d63e522afba3adfe310c443f9e7da124001\r\n\r\n[+] Do not rename encrypted files.\r\n[+] Do not try to decrypt your data using third party software, it may cause permanent data loss.\r\n[+] You have 72 hours to get the key.", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "\r\n\t\t\t!! ALL YOUR FILES HAS BEEN ENCRYPTED !!!\r\n\t\t\t\r\n\t\t\tYou can't restore them without our encryptor.\r\n\t\t\t\r\n\t\t\tDon't try to use any public tools, you could damage the encrypted files and lose them forever.\r\n\t\t\t\r\n\t\t\tTo make sure our encryptor works, contact us and encrypt one file for free.\r\n\t\t\t\r\n\t\t\tDownload TOX messenger: https://tox.chat/\r\n\t\t\t\r\n\t\t\tAdd friend in TOX, ID: 36F186C6FDCAAC0CF122E234B5D15F3F42F73568745F251C1306D71EBCA96817770F9B9AC2E6", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "\r\nAll of your files have been encrypted\r\nYour computer was infected with a ransomware virus. Your files have been encrypted and you won't \r\nbe able to decrypt them without our help.What can I do to get my files back? You can buy our special \r\ndecryption software, this software will allow you to recover all of your data and remove the\r\nransomware from your computer.The price for the software is $1,000. Payment can be made in Bitcoin only.\r\nHow do I pay, where do I get Bitcoin?\r\nPurchasing Bitcoin varies from country to country, you are best advised to do a quick google search\r\nyourself to find out how to buy Bitcoin. \r\nMany of our customers have reported these sites to be fast and reliable:\r\nCoinmama - https://www.coinmama.com Bitpanda - https://www.bitpanda.com\r\n\r\nPayment information Amount: 0.0155 BTC\r\nBitcoin Address: bc1q909n8v9tmhfnh5ptrfjqjum2tp9tuucag6ldvm\r\n\r\nAfter we receive your payment - the decryptor will come to your e-mail automatically and you will decrypt your files.\r\n\r\nATTENTION!\r\n\r\n- Do not try to decrypt your files yourself\r\n- Do not try to use third-party software\r\n\r\nThe above actions will lead to loss of your files on your device.\r\n\r\nDo not try to find a way out of the situation with the FBI, because we will immediately put your files in the public domain and anyone can use them.\r\n\r\nHave a nice day :)", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "\r\n~~ LockBit 3.0 the world's fastest and most stable ransomware from 2019~~~\r\n\r\n>>>>> Your data is stolen and encrypted.\r\n\r\nBLOG Tor Browser Links:\r\nhttp://lockbit3753ekiocyo5epmpy6klmejchjtzddoekjlnt6mu3qh4de2id.onion/\r\nhttp://lockbit3g3ohd3katajf6zaehxz4h4cnhmz5t735zpltywhwpc6oy3id.onion/\r\nhttp://lockbit3olp7oetlc4tl5zydnoluphh7fvdt5oa6arcp2757r7xkutid.onion/\r\nhttp://lockbit435xk3ki62yun7z5nhwz6jyjdp2c64j5vge536if2eny3gtid.onion/\r\nhttp://lockbit4lahhluquhoka3t4spqym2m3dhe66d6lr337glmnlgg2nndad.onion/\r\nhttp://lockbit6knrauo3qafoksvl742vieqbujxw7rd6ofzdtapjb4rrawqad.onion/\r\nhttp://lockbit7ouvrsdgtojeoj5hvu6bljqtghitekwpdy3b6y62ixtsu5jqd.onion/\r\n\r\n>>>>> What guarantee is there that we won't cheat you? \r\nWe are the oldest ransomware affiliate program on the planet, nothing is more important than our reputation. We are not a politically motivated group and we want nothing more than money. If you pay, we will fulfill all the terms we agree on during the negotiation process. Treat this situation simply as a paid training session for your system administrators, because it was the misconfiguration of your corporate network that allowed us to attack you. Our pentesting services should be paid for the same way you pay your system administrators salaries. You can get more information about us on Ilon Musk's Twitter https://twitter.com/hashtag/lockbit?f=live\r\n \r\n>>>>> You need to contact us on TOR darknet sites with your personal ID\r\n\r\nDownload and install Tor Browser https://www.torproject.org/\r\nWrite to the chat room and wait for an answer, we'll guarantee a response from us. If you need a unique ID for correspondence with us that no one will know about, ask it in the chat, we will generate a secret chat for you and give you his ID via private one-time memos service, no one can find out this ID but you. Sometimes you will have to wait some time for our reply, this is because we have a lot of work and we attack hundreds of companies around the world.\r\n\r\nTor Browser personal link for CHAT available only to you (available during a ddos attack): \r\nhttp://lockbitcuo23q7qrymbk6dsp2sadltspjvjxgcyp4elbnbr6tcnwq7qd.onion\r\n\r\nTor Browser Links for CHAT (sometimes unavailable due to ddos attacks):\r\nhttp://lockbit5eevg7vec4vwwtzgkl4kulap6oxbic2ye4mnmlq6njnpc47qd.onion\r\nhttp://lockbit74beza5z3e3so7qmjnvlgoemscp7wtp33xo7xv7f7xtlqbkqd.onion\r\nhttp://lockbit75naln4yj44rg6ez6vjmdcrt7up4kxmmmuvilcg4ak3zihxid.onion\r\nhttp://lockbit7a2g6ve7etbcy6iyizjnuleffz4szgmxaawcbfauluavi5jqd.onion\r\nhttp://lockbitaa46gwjck2xzmi2xops6x4x3aqn6ez7yntitero2k7ae6yoyd.onion\r\nhttp://lockbitb42tkml3ipianjbs6e33vhcshb7oxm2stubfvdzn3y2yqgbad.onion\r\nhttp://lockbitcuo23q7qrymbk6dsp2sadltspjvjxgcyp4elbnbr6tcnwq7qd.onion\r\n\r\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\r\n>> Your personal Black ID: %s <<\r\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\r\n\r\n>>>>> Warning! Do not delete or modify encrypted files, it will lead to problems with decryption of files!\r\n\r\n>>>>> Don't go to the police or the FBI for help and don't tell anyone that we attacked you. ", - "count": 1, - "total_related": 15, - "prevalence": 0.06666666666666667 - } - ], - "malware_config_c2_url": [ - { - "value": "https://pastebin.com/raw/Jv1P4zmq", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://185.215.113.59/Dy5h4kus/index.php", - "count": 1, - "total_related": 221, - "prevalence": 0.004524886877828055 - } - ], - "malware_config_misc_url": [ - { - "value": "http://github.org/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://github.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://test.white-datasheet.com/", - "count": 1, - "total_related": 19, - "prevalence": 0.05263157894736842 - }, - { - "value": "http://test.white-datasheet.com/", - "count": 1, - "total_related": 20, - "prevalence": 0.05 - } - ], - "malware_config_host_port": [ - { - "value": "lockbitks2tvnmwk.onion", - "count": 14, - "total_related": 99, - "prevalence": 0.1414141414141414 - }, - { - "value": "lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion", - "count": 14, - "total_related": 221, - "prevalence": 0.06334841628959276 - }, - { - "value": "lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion", - "count": 14, - "total_related": 248, - "prevalence": 0.056451612903225805 - }, - { - "value": "lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion", - "count": 11, - "total_related": 111, - "prevalence": 0.0990990990990991 - }, - { - "value": "lockbit3753ekiocyo5epmpy6klmejchjtzddoekjlnt6mu3qh4de2id.onion", - "count": 3, - "total_related": 116, - "prevalence": 0.02586206896551724 - }, - { - "value": "github.org", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "lockbitsupt7nr3fa6e7xyb73lk6bw6rcneqhoyblniiabj4uwvzapqd.onion", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "test.white-datasheet.com", - "count": 1, - "total_related": 14, - "prevalence": 0.07142857142857142 - }, - { - "value": "github.com", - "count": 1, - "total_related": 23, - "prevalence": 0.043478260869565216 - }, - { - "value": "185.215.113.59:80", - "count": 1, - "total_related": 221, - "prevalence": 0.004524886877828055 - }, - { - "value": "pastebin.com", - "count": 1, - "total_related": 7981, - "prevalence": 0.0001252975817566721 - } - ], - "malware_config_dropped_file": [ - { - "value": "95c20c310f9f836cf467b346a1a07560c851a6fab9e3bf5b5d4443e0aafaad9a", - "count": 2, - "total_related": 24, - "prevalence": 0.08333333333333333 - }, - { - "value": "b91b2246991e7dbe87f82e60dcb1707a08e579d14a33c4ebcace64a8aa4de18b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "fc17fd9b9dfc277107abcb203a4ac3b18fad30b99f4d3d7e919760f0afa73560", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "fe80e49416790eef40b1d120361df7a65433c93ce9360130c4b311e1e7c569c9", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "f81443ce44fff1a928678fda70b66f6f2eddcd2a9e9650bff045c08ffe8f3559", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "e8eff9293ab5e61525f39f34b8cf916eb9550507ee0c23c9895664f565eca85e", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - } - ], - "malware_config_dropped_file_path": [ - { - "value": "95c20c310f9f836cf467b346a1a07560c851a6fab9e3bf5b5d4443e0aafaad9a", - "count": 2, - "total_related": 24, - "prevalence": 0.08333333333333333 - }, - { - "value": "b91b2246991e7dbe87f82e60dcb1707a08e579d14a33c4ebcace64a8aa4de18b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "fc17fd9b9dfc277107abcb203a4ac3b18fad30b99f4d3d7e919760f0afa73560", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "ee6682b19f3100ff7c97e5d8118867d8", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "fe80e49416790eef40b1d120361df7a65433c93ce9360130c4b311e1e7c569c9", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "f81443ce44fff1a928678fda70b66f6f2eddcd2a9e9650bff045c08ffe8f3559", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "e8eff9293ab5e61525f39f34b8cf916eb9550507ee0c23c9895664f565eca85e", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - } - ], - "malware_config_registry_value": [ - { - "value": "BDCDC5DF1C334E", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "{00CD9EDF-1C1C-E787-A34E-A30657F12DD7}", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "0F643ACC9B1ADA", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0FC8890A22BA41", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1386B42B8494BC", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2D247F83862A92", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "3AD8424B6EFC88", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "56EFF903336E05", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5869B86886544C", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "586A9703166BAA", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "59175FA96E6103", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "767C3AB45158C6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "808FE5A809B392", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "A7FB4DF64FC27F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "B94BEA247C1B72", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "C73B66F050DE8E", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "C7C738FB22D22C", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "F629172F437727", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "FA0C50E256FCBA", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{030CECE2-5656-7371-75BA-756A705801B8}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{0F244183-8686-04CA-B592-B5C87B93AF2B}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{0F7C94B4-5151-C338-BAC6-BA57BCD45B68}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{3164BBCC-9B9B-B21F-36DA-36577B5A8BC6}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{356A6003-1616-ACEA-19AA-194F316EB255}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{3F17B3A9-6E6E-32BB-8703-87C85E7AB634}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{86FBAAF6-4F4F-47CC-507F-5036ADE9205C}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{A54BA324-7C7C-0611-9172-91293E653A6C}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{A8C7D2FB-2222-77AE-242C-24E597998D14}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{A8D8804B-6E6E-EEF8-AF88-AFC2A0CB9936}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{AE299E2F-4343-4C56-D027-D02CBE43CE63}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{B869FB68-8686-2FD6-6D4C-6D59FB8F32DD}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{BE86C12B-8484-20BE-CDBC-CDDA5E4161D7}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{C8C8A60A-2222-5B04-7B41-7BB1D3B5B6C6}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{E33BA2F0-5050-5C39-1A8E-1A966F41A3B8}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{EAEFFF03-3333-F3ED-0805-08C1BA1F7055}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{F18F37A8-0909-DCA3-2E92-2EEC3A0907ED}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "22E1A03D885927", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "328BFCA2C5C7CE", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "{81E1923D-8888-E7DA-2227-2220F4E69D46}", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "{F48B4FA2-C5C5-52CD-12CE-129FF9C8ED3F}", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "B76B8F9512FEC9", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "{D26B2595-1212-A79E-D1C9-D1E22F5CBDA3}", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "9672B03EDFDD94", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "{C072C73E-DFDF-3A24-3694-36C4CE93052F}", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - } - ], - "memory_pattern_urls": [ - { - "value": "http://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion/", - "count": 7, - "total_related": 1523, - "prevalence": 0.004596191726854892 - }, - { - "value": "https://www.torproject.org/", - "count": 5, - "total_related": 41827, - "prevalence": 0.00011954001004136085 - }, - { - "value": "https://decoding.at/", - "count": 4, - "total_related": 565, - "prevalence": 0.007079646017699115 - }, - { - "value": "http://lockbitsap2oaqhcun3syvbqt6n5nzt7fqosc6jdlmsfleu3ka4k2did.onion/", - "count": 4, - "total_related": 578, - "prevalence": 0.006920415224913495 - }, - { - "value": "https://bigblog.at/", - "count": 4, - "total_related": 579, - "prevalence": 0.0069084628670120895 - }, - { - "value": "https://twitter.com/hashtag/lockbit?f=live", - "count": 4, - "total_related": 664, - "prevalence": 0.006024096385542169 - }, - { - "value": "http://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly/", - "count": 3, - "total_related": 478, - "prevalence": 0.006276150627615063 - }, - { - "value": "http://lockbitsup4yezcd5enk5unncx3zcy7kw6wllyqmiyhvanjj352jayid.onion/", - "count": 3, - "total_related": 577, - "prevalence": 0.005199306759098787 - }, - { - "value": "http://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly/", - "count": 3, - "total_related": 688, - "prevalence": 0.00436046511627907 - }, - { - "value": "http://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion/", - "count": 3, - "total_related": 702, - "prevalence": 0.004273504273504274 - }, - { - "value": "http://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion/", - "count": 3, - "total_related": 921, - "prevalence": 0.003257328990228013 - }, - { - "value": "http://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion/", - "count": 3, - "total_related": 926, - "prevalence": 0.0032397408207343412 - }, - { - "value": "http://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion/", - "count": 3, - "total_related": 940, - "prevalence": 0.0031914893617021275 - }, - { - "value": "https://www.sphinx-doc.org/", - "count": 3, - "total_related": 9009, - "prevalence": 0.000333000333000333 - }, - { - "value": "https://github.com/python/cpython/blob/main/Doc/library/tokenize.rst", - "count": 2, - "total_related": 32, - "prevalence": 0.0625 - }, - { - "value": "https://github.com/python/cpython/tree/3.11/Lib/asyncio/protocols.py", - "count": 2, - "total_related": 33, - "prevalence": 0.06060606060606061 - }, - { - "value": "https://www.activestate.com/activepython/", - "count": 2, - "total_related": 33, - "prevalence": 0.06060606060606061 - }, - { - "value": "https://manpages.debian.org/vsnprintf(3", - "count": 2, - "total_related": 40, - "prevalence": 0.05 - }, - { - "value": "https://ncoghlan-devs-python-notes.readthedocs.io/en/latest/python3/questions_and_answers.html", - "count": 2, - "total_related": 54, - "prevalence": 0.037037037037037035 - }, - { - "value": "https://peps.python.org/pep-0397/", - "count": 2, - "total_related": 66, - "prevalence": 0.030303030303030304 - }, - { - "value": "https://pypi.org/project/pylint", - "count": 2, - "total_related": 70, - "prevalence": 0.02857142857142857 - }, - { - "value": "https://www.boddie.org.uk/python/COM.html", - "count": 2, - "total_related": 89, - "prevalence": 0.02247191011235955 - }, - { - "value": "https://www.nuget.org/packages/pythonx86", - "count": 2, - "total_related": 91, - "prevalence": 0.02197802197802198 - }, - { - "value": "https://github.com/python/cpython/blob/main/Doc/library/queue.rst", - "count": 2, - "total_related": 102, - "prevalence": 0.0196078431372549 - }, - { - "value": "https://tox.chat/download.htmlUsing", - "count": 2, - "total_related": 116, - "prevalence": 0.017241379310344827 - }, - { - "value": "https://peps.python.org/pep-0647/", - "count": 2, - "total_related": 132, - "prevalence": 0.015151515151515152 - }, - { - "value": "http://lockbit435xk3ki62yun7z5nhwz6jyjdp2c64j5vge536if2eny3gtid.onion/", - "count": 2, - "total_related": 149, - "prevalence": 0.013422818791946308 - }, - { - "value": "http://lockbit3g3ohd3katajf6zaehxz4h4cnhmz5t735zpltywhwpc6oy3id.onion/", - "count": 2, - "total_related": 150, - "prevalence": 0.013333333333333334 - }, - { - "value": "http://lockbit3olp7oetlc4tl5zydnoluphh7fvdt5oa6arcp2757r7xkutid.onion/", - "count": 2, - "total_related": 150, - "prevalence": 0.013333333333333334 - }, - { - "value": "http://lockbit4lahhluquhoka3t4spqym2m3dhe66d6lr337glmnlgg2nndad.onion/", - "count": 2, - "total_related": 150, - "prevalence": 0.013333333333333334 - }, - { - "value": "http://lockbit7ouvrsdgtojeoj5hvu6bljqtghitekwpdy3b6y62ixtsu5jqd.onion/", - "count": 2, - "total_related": 150, - "prevalence": 0.013333333333333334 - }, - { - "value": "http://lockbit6knrauo3qafoksvl742vieqbujxw7rd6ofzdtapjb4rrawqad.onion/", - "count": 2, - "total_related": 152, - "prevalence": 0.013157894736842105 - }, - { - "value": "https://mozillacla.ampxdirect.com/wayfair?sub1=wayfair&sub2=us&custom-data=3433&ctag=319104999us3433", - "count": 2, - "total_related": 152, - "prevalence": 0.013157894736842105 - }, - { - "value": "https://mozillacla.ampxdirect.com/wayfair?sub1=wayfair&sub2=us&custom-data=3447&ctag=319104999us3447", - "count": 2, - "total_related": 156, - "prevalence": 0.01282051282051282 - }, - { - "value": "http://lockbit3753ekiocyo5epmpy6klmejchjtzddoekjlnt6mu3qh4de2id.onion/", - "count": 2, - "total_related": 158, - "prevalence": 0.012658227848101266 - }, - { - "value": "https://peps.python.org/pep-3132/", - "count": 2, - "total_related": 209, - "prevalence": 0.009569377990430622 - }, - { - "value": "https://datatracker.ietf.org/doc/html/rfc2104.html", - "count": 2, - "total_related": 256, - "prevalence": 0.0078125 - }, - { - "value": "https://www.rakuten.com/signup_sem.htm?merchant_id=10794?src=admarketplace-Search&eeid=17879&utm_cha", - "count": 2, - "total_related": 283, - "prevalence": 0.007067137809187279 - }, - { - "value": "https://peps.python.org/pep-0644/", - "count": 2, - "total_related": 293, - "prevalence": 0.006825938566552901 - }, - { - "value": "http://lockbitsupuhswh4izvoucoxsbnotkmgq6durg7kficg6u33zfvq3oyd.onion/", - "count": 2, - "total_related": 308, - "prevalence": 0.006493506493506494 - }, - { - "value": "https://peps.python.org/pep-0528/", - "count": 2, - "total_related": 314, - "prevalence": 0.006369426751592357 - }, - { - "value": "https://peps.python.org/pep-0636/", - "count": 2, - "total_related": 327, - "prevalence": 0.0061162079510703364 - }, - { - "value": "http://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly/", - "count": 2, - "total_related": 347, - "prevalence": 0.005763688760806916 - }, - { - "value": "https://peps.python.org/pep-0451/", - "count": 2, - "total_related": 385, - "prevalence": 0.005194805194805195 - }, - { - "value": "https://www.python.org/downloads/source/", - "count": 2, - "total_related": 401, - "prevalence": 0.004987531172069825 - }, - { - "value": "https://mozillacla.ampxdirect.com/wayfair?sub1=wayfair&sub2=us&custom-data=3446&ctag=319104999us3446", - "count": 2, - "total_related": 461, - "prevalence": 0.004338394793926247 - }, - { - "value": "https://peps.python.org/pep-0529/", - "count": 2, - "total_related": 515, - "prevalence": 0.003883495145631068 - }, - { - "value": "http://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion/", - "count": 2, - "total_related": 529, - "prevalence": 0.003780718336483932 - }, - { - "value": "http://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion/", - "count": 2, - "total_related": 530, - "prevalence": 0.0037735849056603774 - }, - { - "value": "http://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion/", - "count": 2, - "total_related": 532, - "prevalence": 0.0037593984962406013 - }, - { - "value": "http://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion/", - "count": 2, - "total_related": 534, - "prevalence": 0.003745318352059925 - }, - { - "value": "http://lockbitapt.uz/", - "count": 2, - "total_related": 540, - "prevalence": 0.003703703703703704 - }, - { - "value": "https://peps.python.org/pep-0634/", - "count": 2, - "total_related": 609, - "prevalence": 0.003284072249589491 - }, - { - "value": "https://peps.python.org/pep-0613/", - "count": 2, - "total_related": 704, - "prevalence": 0.002840909090909091 - }, - { - "value": "https://peps.python.org/pep-0612/", - "count": 2, - "total_related": 1145, - "prevalence": 0.0017467248908296944 - }, - { - "value": "https://peps.python.org/pep-0526/", - "count": 2, - "total_related": 1149, - "prevalence": 0.0017406440382941688 - }, - { - "value": "https://bugs.python.org/issue?&", - "count": 2, - "total_related": 1207, - "prevalence": 0.0016570008285004142 - }, - { - "value": "http://testca.pythontest.net/testca/revocation.crl", - "count": 2, - "total_related": 1258, - "prevalence": 0.001589825119236884 - }, - { - "value": "https://setuptools.readthedocs.io/en/latest/setuptools.html", - "count": 2, - "total_related": 1729, - "prevalence": 0.001156737998843262 - }, - { - "value": "https://github.com/pypa/wheel/pull/289", - "count": 2, - "total_related": 2151, - "prevalence": 0.0009298000929800093 - }, - { - "value": "https://tox.chat/download.html", - "count": 2, - "total_related": 2809, - "prevalence": 0.000711997152011392 - }, - { - "value": "https://github.com/python/typing/issues/508", - "count": 2, - "total_related": 3107, - "prevalence": 0.000643707756678468 - }, - { - "value": "https://peps.python.org/pep-0484/", - "count": 2, - "total_related": 5579, - "prevalence": 0.000358487184083169 - }, - { - "value": "http://bugs.python.org/issue20541", - "count": 1, - "total_related": 54, - "prevalence": 0.018518518518518517 - }, - { - "value": "http://aquamacs.org/", - "count": 1, - "total_related": 60, - "prevalence": 0.016666666666666666 - }, - { - "value": "http://bugs.python.org/issue10340", - "count": 1, - "total_related": 95, - "prevalence": 0.010526315789473684 - }, - { - "value": "http://buildbot.python.org/all/xmlrpc/", - "count": 1, - "total_related": 98, - "prevalence": 0.01020408163265306 - }, - { - "value": "http://bugs.python.org/review/23491/diff/13982/Lib/zipapp.py", - "count": 1, - "total_related": 103, - "prevalence": 0.009708737864077669 - }, - { - "value": "http://127.0.0.1/spammity/sp%EF%BF%BDm", - "count": 1, - "total_related": 105, - "prevalence": 0.009523809523809525 - }, - { - "value": "http://bugs.python.org/issue19728", - "count": 1, - "total_related": 108, - "prevalence": 0.009259259259259259 - }, - { - "value": "http://127.0.0.1/spammity/spam?s%EF%BF%BDy=ni", - "count": 1, - "total_related": 112, - "prevalence": 0.008928571428571428 - }, - { - "value": "http://127.0.0.1/spammity/spam", - "count": 1, - "total_related": 118, - "prevalence": 0.00847457627118644 - }, - { - "value": "http://bugs.python.org/issue6289", - "count": 1, - "total_related": 127, - "prevalence": 0.007874015748031496 - }, - { - "value": "http://127.0.0.1/spammity/spam;ham", - "count": 1, - "total_related": 128, - "prevalence": 0.0078125 - }, - { - "value": "http://bugs.python.org/issue20819", - "count": 1, - "total_related": 138, - "prevalence": 0.007246376811594203 - }, - { - "value": "http://127.0.0.1/spammity/spam?say=ni", - "count": 1, - "total_related": 188, - "prevalence": 0.005319148936170213 - }, - { - "value": "http://127.0.0.1/spam", - "count": 1, - "total_related": 202, - "prevalence": 0.0049504950495049506 - }, - { - "value": "http://127.0.0.1/spammity/spam;cookie=1234", - "count": 1, - "total_related": 228, - "prevalence": 0.0043859649122807015 - }, - { - "value": "http://bugs.python.org/issue23310", - "count": 1, - "total_related": 228, - "prevalence": 0.0043859649122807015 - }, - { - "value": "http://127.0.0.1/sp%EF%BF%BDm", - "count": 1, - "total_related": 231, - "prevalence": 0.004329004329004329 - }, - { - "value": "http://bugs.python.org/issue25390", - "count": 1, - "total_related": 312, - "prevalence": 0.003205128205128205 - }, - { - "value": "http://bugs.python.org/issue18081).", - "count": 1, - "total_related": 371, - "prevalence": 0.0026954177897574125 - }, - { - "value": "http://bugs.python.org/issue18318).", - "count": 1, - "total_related": 372, - "prevalence": 0.002688172043010753 - }, - { - "value": "http://bugs.python.org/issue20167", - "count": 1, - "total_related": 441, - "prevalence": 0.0022675736961451248 - }, - { - "value": "http://bugs.python.org/issue19734", - "count": 1, - "total_related": 717, - "prevalence": 0.001394700139470014 - }, - { - "value": "http://bugs.python.org/issue1339007", - "count": 1, - "total_related": 821, - "prevalence": 0.001218026796589525 - }, - { - "value": "http://bugs.python.org/issue7833", - "count": 1, - "total_related": 826, - "prevalence": 0.0012106537530266344 - }, - { - "value": "http://bugs.python.org/issue20053", - "count": 1, - "total_related": 929, - "prevalence": 0.001076426264800861 - }, - { - "value": "http://bugs.python.org/issue28539", - "count": 1, - "total_related": 1153, - "prevalence": 0.0008673026886383347 - }, - { - "value": "http://bugs.python.org/issue22107", - "count": 1, - "total_related": 1347, - "prevalence": 0.0007423904974016332 - }, - { - "value": "http://cacerts.darkmatter.ae/qvrca2g3.crt0", - "count": 1, - "total_related": 2094, - "prevalence": 0.0004775549188156638 - }, - { - "value": "http://autorite.certigna.fr/certigna.der06", - "count": 1, - "total_related": 2156, - "prevalence": 0.00046382189239332097 - }, - { - "value": "http://aia1.netlock.hu/index.cgi?ca=gold04", - "count": 1, - "total_related": 4212, - "prevalence": 0.00023741690408357076 - }, - { - "value": "http://bugs.python.org/issue10272", - "count": 1, - "total_related": 4778, - "prevalence": 0.0002092925910422771 - }, - { - "value": "http://127.0.0.1:8000/", - "count": 1, - "total_related": 12447, - "prevalence": 8.034064433196755e-5 - }, - { - "value": "http://cacerts.digicert.com/DigiCertTrustedG4CodeSigningRSA4096SHA3842021CA1.crt0", - "count": 1, - "total_related": 48778, - "prevalence": 2.0501045553323218e-5 - }, - { - "value": "http://cacerts.digicert.com/DigiCertAssuredIDRootCA.crt0E", - "count": 1, - "total_related": 97357, - "prevalence": 1.0271475086537178e-5 - }, - { - "value": "https://github.com/pypa/packaging", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "https://www.python.org/", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "http://127.0.0.1/", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "attack_tactics": [ - { - "value": "TA0007", - "count": 1114 - }, - { - "value": "TA0005", - "count": 939 - }, - { - "value": "TA0002", - "count": 579 - }, - { - "value": "TA0004", - "count": 460 - }, - { - "value": "TA0009", - "count": 460 - }, - { - "value": "TA0040", - "count": 345 - }, - { - "value": "TA0006", - "count": 330 - }, - { - "value": "TA0003", - "count": 326 - }, - { - "value": "TA0011", - "count": 312 - }, - { - "value": "TA0008", - "count": 73 - }, - { - "value": "TA0001", - "count": 2 - } - ], - "parent_contacted_domains": [ - { - "value": "192.in-addr.arpa", - "count": 334, - "total_related": 640295, - "prevalence": 0.0005216345590704285 - }, - { - "value": "172.in-addr.arpa", - "count": 100, - "total_related": 103644, - "prevalence": 0.0009648411871405967 - }, - { - "value": "microsoft.com", - "count": 97, - "total_related": 200000, - "prevalence": 0.000485 - }, - { - "value": "sectigo.com", - "count": 90, - "total_related": 200000, - "prevalence": 0.00045 - }, - { - "value": "bing.net", - "count": 23, - "total_related": 100000, - "prevalence": 0.00023 - }, - { - "value": "phicdn.net", - "count": 44, - "total_related": 200000, - "prevalence": 0.00022 - }, - { - "value": "pki.goog", - "count": 15, - "total_related": 100000, - "prevalence": 0.00015 - }, - { - "value": "windows.com", - "count": 14, - "total_related": 100000, - "prevalence": 0.00014 - }, - { - "value": "msftncsi.com", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "static.microsoft", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "fastly.net", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": "dual-s-msedge.net", - "count": 13, - "total_related": 200000, - "prevalence": 6.5e-5 - }, - { - "value": "akamai.net", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "msn.com", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "live.com", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - } - ] - }, - "ip_addresses": null, - "urls": { - "attributions": [ - { - "value": "lockbit", - "count": 28, - "total_related": 65, - "prevalence": 0.4307692307692308 - }, - { - "value": "lockbit_black", - "count": 14, - "total_related": 67, - "prevalence": 0.208955223880597 - } - ], - "http_response_contents": [ - { - "value": "6f7e3d2fab38377f2b617c8d80df553d1b821614e8c0f8dd3cec3ad71376c1d7", - "count": 9, - "total_related": 482, - "prevalence": 0.01867219917012448 - }, - { - "value": "0b530b77ca10c94f6363d133668189edc96da100ecaa2170de7bff5d4788d14d", - "count": 9, - "total_related": 503, - "prevalence": 0.017892644135188866 - }, - { - "value": "398fd00a81f595137d32068aec4f43b9f5e6e857eda923e5d4c4d222c76a2a24", - "count": 9, - "total_related": 652, - "prevalence": 0.013803680981595092 - }, - { - "value": "4937751aceefe46013e84493cb8e00de51a30ae9c85bca1df08c3f8eb90779d1", - "count": 5, - "total_related": 26, - "prevalence": 0.19230769230769232 - }, - { - "value": "309564872de7cab1fddbf4007218a7cbeeef921dba3fe46480935c21424f59bc", - "count": 3, - "total_related": 26, - "prevalence": 0.11538461538461539 - }, - { - "value": "5280be99c69c80791036eb9ec4a62b210ce1c73b3c2941f55945ada5d71588d0", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "d34a7743a8e6d0bcc35c1d02dd03264524a0eb9d1d14b8cd6445ae5047600e82", - "count": 2, - "total_related": 12220, - "prevalence": 0.00016366612111292964 - }, - { - "value": "0e788bf107fa82dfa60f3447113004473c9545c07223c66f5c01312b8d044e34", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1283bca1d890a578b361e13f53fd8bcaa65d2338518e1127d972d562713a1088", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1a2ebc7e20d7ddcaa0eb643ff2d1f51a1d0446a60aea322263dc360f96523765", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1ca3c5ac2264cce7c4caa3d46f3b647acb1d7857cb9f6bc29c00ca1e7b9d9b2f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1da99e6d70da02497111858ef95b537ca099a53954b62c0c178199779af9cf71", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1f17f1cf18dcad038da708be0e766c73bcb76ff1514a95d78891266e74c579d5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "20a64075f0b49cb92ee2c98fbd1e3457a75a39f6fe344e2c44de22f0521c649c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2569bd000dfdcbbe89292ff31f8b9d4bb06d522e7d1cf150e71b9be6941331e7", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "260f7067cf87975ba854c8d9fc9c3b0a5c8b675181dd02e75f28e0ffea221f4b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "29c1685679035c769bc3664f867b5ae9f1901a1922bca850ca2afe1a541d22b0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2a062509d25e88258f3135eb79a92a76fb17de540567f6e3d2d1dd4ab0e0c7ae", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2b8f0cd5b7bbf9b0600d5f28551ae912b5955464c058a9bc2c81a7db5fd6a849", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2d0b325d61e08da54f45e9dffd89278b9e31530e59cfa4c8e3792c4f80204030", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "3153c9163badafd666d6a6ef9508fcf91d464a2a9042457533a0de9b86b38e8c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "325b2aaa286b7d50c75ce2dc7cc803f2099e6d5f79165ccf88622c28d7184f8c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "33d7199308e1703363a2c84ed173571e52c53af831b4f8e099c8fb75f5790bbf", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "3505ae931d982e870d08bc646a8997dd9d8792c43fef1deedc40586fbd343b65", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "3b59d5898e2326e629427a8f97e3201d6eef2c9f6e6e8d39f673879b7ae06323", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "3ffbd422b8c41a3ad673972185233089ddffcd1fbe795167cdb7b9039b5ad2d4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "434b2cbf0c22468bc0b5f51c2b51cd1014f5bd42abbc315141e8947ac2ec739f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "46e6e71492deeeb32d6651e35df286c12f047c73c841e17142b3d287d673dceb", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4cfa6524d7cf93c2d3335d4f5222ccc328b6781ea9fd52fd822226b3c03f7f2d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4d19b41db0370e55db7eb260894e978a37aa11ad09844ce212e49c3d334eb52d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4fca7b217ff12d02b141a6c8c98cc9f0726f3fbdce6aa374993afeb7d75dbd7a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "51f7e2e359e0f5f878c207758b3a3e2d96d60aea87f6ec68426b0e0f4ddbb8be", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "55169da90444ce210c037935f5bf35828e6bf2c84e3ef62cfcc3db72ed62dfe1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "59ea373abc342d26b06fda26e946c8334721e14386ec6472533b6c13d5e9cbc7", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5c09ced67baa0a3904f13a76bd116d52efeaf15f09ea7776d19c22a1c646cd2d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "63acbb27489c11d75ede824ea250c3e1a23deeeb5023ba7b234fb32c8e3a76c1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "674655c077e7e52597318e0e99f339b20c3b3bdc93e241db48e98148060a55fe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "681894291a669d874c010f31f019fb31fdbe6a63675c3fe48534fcf2fd7ca276", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "69e4f8abdd20f615fd2c31e68dff81d216ae2a6abaf51dcce97f8fc8af0755a2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "6beb7126d52b6343ba9c69186cb5fa4e4c41eaf07606ce97e4e418a9fc4f36cc", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "6bfa9eb40644ee19dfbf8342b55b6bedc2f81bdc84a1b99d228c94c5bc8be7f0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "6e85b10985a17f9b94df40145f30d7f623e0343b33a1a767eb31809f04adffa7", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "7348fb50e89492a2be47cb72cd4748258d39d004854a61ea4b5bc781a5ba525e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "73c2d5e93776d2ed8b81b86c8947893751879c0478661f2fb766c99fb4b7ff2d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "75cb4361b35b86dd8d9a33474f8561fe357151ba00c4b914857944aecc7dec09", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "7b3a8a06c63e67d10304346de7eff5b05deda1dc2ed8ee51538ffa3f1483f65b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "8055d1885f6457c6f17d4014616ebde3ec5178a3b5401ac5d42158d078ebf30c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "859024b80ef76b7f386a4e0b4d6ece83edbfcabee38401f6c54835342db5f0da", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "88249591ef190087c2d38bb831eb426fc6cfb9ed282175dadf4ccfe21672288d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "8d726669d9070b5be66c531ecdccecc62046d659dae817c27f3374cd6c316a0f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "8db962b3915b0f8019d4c993f47081659d08880dc6d6c9e4ba888bcc41c057e5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "934376fd135fbaa938524d47e4d82cfc0bed461a17ae2e6e89674706e9999586", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "97d7e2ed0e5dd9087a2cdaa43347194d0f961f20cadb004db15a3b91a8a71d9c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "989bdfcb1b890e9a30102e4d21f70c11a1ba2000f5654eaee4bf3c6df18c0eff", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "9d56e0e6ff99085c90a2d02076f1a72e0ba68ceab12aae91599a6ea17eac9bf5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "a1e770f6d04ff93321714fc5fd6486edef503dc1f5beb4c629f5464c5e5a268f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "a453e31bd4cf739c8dedfd15ac7d20eeb239254e3373f9f2af5811a5532b8316", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "a86dbf0ac22a6a7e506b432e84c002fabd33e003d66fd810ae67064878421197", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "aa8e988eab9084005d28346ca9c6ac4956d9f44efd7581560e69f7f416e48c14", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "ab0a59f216da23c5031afbecb6257ee96ba8f240042a4e3b9b23bde3f51d4acf", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "af12f5650b6a2f1daa1efd2a8c9521ab9c577f8755c08dd644cdb7bc0f5e83a6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "b958ff4ad29199e1bcd290567046619d86e4e17f9eaad92bb8d05ccca402b045", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "bf8493db7ccc5e3a03511e9a9877e43dcce5c5c234dc3d1c3f9dafafc980873b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "bfb592caa63f9a6edc54f0e0f5c61a216fe31097d440bc7aa9204d6806dee5e0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "c3c6d523fb6df3d7f8693d6152ddecd78386841fd8f48876949be2d98d26794c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "c4420f78a5c471e67aa8d28e72a12676a9cc437c6bb1768bc6b7e5546dc4d746", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "c691894efe8c81b5eda75ed769cf7ee4406b46b7895ffb184ba2201038239da7", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "c6ee0df4d6032190cd653874768aff11798651d05ad14973882b872919d4fc61", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "d03fa189b2cd7186ccf315d5d6e8829a40ae90fd39b59c3c275d01a103b9a137", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "d0a623e9f636f2b91a669dade218e2fb90b05cd3bd900df2bbd8607b32c87a7e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "d904965b2f9c049e69455716fe009ee2ef65284c148d4abcc64438551f44556e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "e7f84cc9a2fa753ba460be6eca238b52266a143ac3280f8eeeed10f8ae9e1b06", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "ebb77dfa0141dade73b840fde47b4b5f4cf7123c1600b5c6019febe0efee5164", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "f9b2605d8f4f9fdf3bb3df10d9a3a1c46b8f0ec456167bde5848a23a582ba939", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "f9fdaed37cfe01a1197ed59e860fa9b0c8af9b0719751cc3e8f81ab22a85b75c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "19d09e78966c1b8b8675c5e455a294d28838d299ddce7787a24944549263b99a", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "1b53a3664145de65fdfb67793e8541fbf76c29de5ff4eadfda7a12ee78cbc038", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "24358b52f4ca140f91300b54b78316f08389e65c4aa51c3f4e376d4b3dfb6eba", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2c4c3aad83490ed0d5fe64aea14e14dd7de4d582e8f8ae9f0143def12c3b982f", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "3693e20cf62a83120e51ab0983d2beb9e5ba94d6c731cef0d43b66fc5f2c5c7d", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "43bd6ca30a4820bf7d0fe0582603b98ddc95e201814c70ce1450e8f06c3748ba", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "57ba3a235d52910c46074774757d997dd841716fee84f44dc225bfe3b6bdb020", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "6ba3d5b12196d164fe919d50a8c34b36a9420fc76e2fcb8181b456d9cd570b24", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "74bdc2919a8756b1b1a95939b239d544a2153ac7ef10666ceaca9f556fd81b3d", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "76873a72ce23da2ba4b25a130dc7e5eeacbbcfc0f9f5b96e26cba0f2e79df684", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "cbd12741787f26a90687ad33884e049aec37f47ca9e4494af869bcddd00fb2ee", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "d5bb01fe371ca22ed80a1af8c774d4938713d6dee9a4c4c9ccb9b6c6e2de9db7", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "d7c9f681c12de81580cc69d17e94af280d73d04289bc57e9f3dba02661339902", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "85ff1c593e09cb8170d43056ca3ee0c5e6ff0692fbfdd4cb276eb2775040431c", - "count": 1, - "total_related": 23, - "prevalence": 0.043478260869565216 - }, - { - "value": "c3a12f80e1ae26824136918883d14f6751c71c0d6f2859601409130227f4e95d", - "count": 1, - "total_related": 277, - "prevalence": 0.0036101083032490976 - }, - { - "value": "940675ecb4e589745fc11faa306d22b111449c183c22589d5b6b6c994f2deddc", - "count": 1, - "total_related": 339, - "prevalence": 0.0029498525073746312 - }, - { - "value": "d8fac2e9a42b868b1267b77df52092cf94f462f20649366d9685f7036355dc78", - "count": 1, - "total_related": 500, - "prevalence": 0.002 - } - ], - "communicating_files": [ - { - "value": "addf5e245622562eb44eb6ac3a80fa18eef1c3f6544ec5cbdfad1a0f56dbd24d", - "count": 6, - "total_related": 6, - "prevalence": 1.0 - }, - { - "value": "3f7518d88aefd4b1e0a1d6f9748f9a9960c1271d679600e34f5065d8df8c9dc8", - "count": 5, - "total_related": 5, - "prevalence": 1.0 - }, - { - "value": "15306331281bba9dae9a8c13b02d24137650cfe293cad61ec2580c9a70194eb1", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "49261ea0d0c417ebae0e0fb1e56ad02cb7fe9ae16a76edb7c4e70c754b53370f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - } - ], - "cookie_names": [ - { - "value": "SBSESSION", - "count": 7, - "total_related": 44, - "prevalence": 0.1590909090909091 - }, - { - "value": "SameSite", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - } - ], - "cookie_values": [ - { - "value": "0hbvos2ler88bstka9fknn6d6n", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0qhpsv3eqjq7k1cletq0vacok6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "15ucmpun6g5hjt23h6jbf7rsdd", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "16iapg6sm0g19o0sof9q3afimv", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1qk65ljmfb7ko5bt34bmo6fsk8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1rb33f95d4bblsa4nbm85suc08", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2ue4g1b925a5n38tfi9l45lbgp", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "37rm0m6rtcphu4rgv2ka03t8ma", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "3k4opu1q10d2992hd9f9n768ok", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "3ps3h420qeqs5iuf2mmip8r4sb", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "7tbsn6fu418oj8r5sn47opbbg5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "80s0qtfint8u3i8gkrp9i51svt", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "99a10nkmhqo4qinkjks9g5eqba", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "9mreea8v8m7hrgfnvj31129o75", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "a2b18rpsl347fgodfffkqmkmkc", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "ag8eg7bdu7uov8bf81dnk6mfob", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "c2vnu4lo3fn7vqpl2tuf2itkjv", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "dbbpq2kjjc1l4io31ehcr98c8d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "dv3ch3golkpltbb9b7tjhacm7o", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "fk0p0gb1b6psf895qsd2qojiev", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "g6vp950n2vq5uci1muddme3fgd", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "he04euksaf4ln8rluda4fb50nl", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "i19dpf13f85tp77nbor6logjqe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "i9rt4g532rh692lbdj21o050vk", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "iodl6u9gdd3cgajr38d8le3ohr", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "lsdugr6ur370vmkb36o5pra3hm", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "m1gs8r5nga4tf9r2gev3fcnerd", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "n3em2n3ffartsi0reqdm8mslqn", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "ndmcq19g5sk8okp5cur45i8t6p", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "nhalkm0elfjb7toktc2a982t6o", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "nhh3gept0mbgsocnbutg84ftil", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "osqib8acileao51vaul0a241uj", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "qh00k7p7g133fn337vanadirfo", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "qhu4de7hjbdpucuq3jbo8mvg6c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "tb5l8q1hmrh8dngq74bh6761kb", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "uqjlr1cu29m46u6bj7sojmeha0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "v07pj7ig5sag5jqe6db059fjri", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "vpjbp4tti477o1jbm0p3isa4dp", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Strict,", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - } - ], - "downloaded_files": [ - { - "value": "6f7e3d2fab38377f2b617c8d80df553d1b821614e8c0f8dd3cec3ad71376c1d7", - "count": 9, - "total_related": 291, - "prevalence": 0.030927835051546393 - }, - { - "value": "0b530b77ca10c94f6363d133668189edc96da100ecaa2170de7bff5d4788d14d", - "count": 9, - "total_related": 406, - "prevalence": 0.022167487684729065 - }, - { - "value": "398fd00a81f595137d32068aec4f43b9f5e6e857eda923e5d4c4d222c76a2a24", - "count": 6, - "total_related": 139, - "prevalence": 0.04316546762589928 - }, - { - "value": "8d726669d9070b5be66c531ecdccecc62046d659dae817c27f3374cd6c316a0f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "309564872de7cab1fddbf4007218a7cbeeef921dba3fe46480935c21424f59bc", - "count": 1, - "total_related": 21, - "prevalence": 0.047619047619047616 - }, - { - "value": "85ff1c593e09cb8170d43056ca3ee0c5e6ff0692fbfdd4cb276eb2775040431c", - "count": 1, - "total_related": 23, - "prevalence": 0.043478260869565216 - }, - { - "value": "c3a12f80e1ae26824136918883d14f6751c71c0d6f2859601409130227f4e95d", - "count": 1, - "total_related": 246, - "prevalence": 0.0040650406504065045 - }, - { - "value": "d8fac2e9a42b868b1267b77df52092cf94f462f20649366d9685f7036355dc78", - "count": 1, - "total_related": 267, - "prevalence": 0.003745318352059925 - }, - { - "value": "940675ecb4e589745fc11faa306d22b111449c183c22589d5b6b6c994f2deddc", - "count": 1, - "total_related": 280, - "prevalence": 0.0035714285714285713 - } - ], - "domains": [ - { - "value": "onion.ly", - "count": 7, - "total_related": 179, - "prevalence": 0.03910614525139665 - }, - { - "value": "white-datasheet.com", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "test.white-datasheet.com", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "lockbitapt72iw55njgnqpymggskg5yp75ry7rirtdg4m7i42artsbqd.onion.ly", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "lockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "lockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "lockbitsupa7e3b4pkn4mgkgojrl5iqgx24clbzc4xm7i6jeetsia3qd.onion", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "lockbitsupdwon76nzykzblcplixwts4n4zoecugz2bxabtapqvmzqqd.onion", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "lockbitsupn2h6be2cnqpvncyhj4rgmnwn44633hnzzmtxdvjoqlp7yd.onion", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "lockbitsupo7vv5vcl3jxpsdviopwvasljqcstym6efhh6oze7c6xjad.onion", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "lockbitsupqfyacidr6upt6nhhyipujvaablubuevxj6xy3frthvr3yd.onion", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "lockbitsupq3g62dni2f36snrdb4n5qzqvovbtkt5xffw3draxk6gwqd.onion", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "lockbitsupt7nr3fa6e7xyb73lk6bw6rcneqhoyblniiabj4uwvzapqd.onion", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "lockbitsupuhswh4izvoucoxsbnotkmgq6durg7kficg6u33zfvq3oyd.onion", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "lockbitsupxcjntihbmat4rrh7ktowips2qzywh6zer5r3xafhviyhqd.onion", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "lockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "lockbitapt72iw55njgnqpymggskg5yp75ry7rirtdg4m7i42artsbqd.onion", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "lockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion", - "count": 1, - "total_related": 16, - "prevalence": 0.0625 - }, - { - "value": "lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion", - "count": 1, - "total_related": 41, - "prevalence": 0.024390243902439025 - }, - { - "value": "lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion", - "count": 1, - "total_related": 43, - "prevalence": 0.023255813953488372 - }, - { - "value": "lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion", - "count": 1, - "total_related": 91, - "prevalence": 0.01098901098901099 - }, - { - "value": "lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion", - "count": 1, - "total_related": 280, - "prevalence": 0.0035714285714285713 - }, - { - "value": "lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion", - "count": 1, - "total_related": 322, - "prevalence": 0.003105590062111801 - } - ], - "embedded_js": [ - { - "value": "8a504110c13929d17d7a065340567d95d8ed39bdb40bc13c78ce74b03fd06118", - "count": 9, - "total_related": 23, - "prevalence": 0.391304347826087 - }, - { - "value": "c3d58f628e5e50fc3965749329a633a7a963cc3ed603061bc0020a0711de6f52", - "count": 9, - "total_related": 386, - "prevalence": 0.023316062176165803 - }, - { - "value": "82d73b126661962c1640cab3fe27df8ac76d6f7e2b6f42b6bc13dec39bf6d1b7", - "count": 9, - "total_related": 1407, - "prevalence": 0.006396588486140725 - }, - { - "value": "673a45e569f710ce009ecd0620d06b842ffda45dd491214044e33d15e1c12a1a", - "count": 9, - "total_related": 1475, - "prevalence": 0.006101694915254237 - }, - { - "value": "f3d75a5c72afd564672044fc6d5ee8853ca93f6b50c4ecdec7c9b7238cb86c21", - "count": 7, - "total_related": 1391, - "prevalence": 0.0050323508267433505 - }, - { - "value": "1178079a48db59599a3656791cc210b9b85fce8d8e0dc5534426615251f25369", - "count": 6, - "total_related": 6, - "prevalence": 1.0 - }, - { - "value": "66e3ccaabf554f6a319c8290684ba126fbbbf7550de819d9c2e3c87584638f57", - "count": 6, - "total_related": 6, - "prevalence": 1.0 - }, - { - "value": "e70ace4103a7e91c9b6ba0ece7d13ba9575eb59315cd9eed382ed56ec77b4b47", - "count": 5, - "total_related": 5, - "prevalence": 1.0 - }, - { - "value": "d12c1dca6e1b713b48e803253fd80dbd52e8a2ef513f995b21bc4ea7db2edc1c", - "count": 5, - "total_related": 8, - "prevalence": 0.625 - }, - { - "value": "93499bbd21641359dd69d5b1bbcf4f5d5d3dc43ddeab4d5f32def97280896161", - "count": 5, - "total_related": 10, - "prevalence": 0.5 - }, - { - "value": "09cc748cdbd43dc1c5ef8eb3a85fa5618ee22a4ed7f7c8c5570cb54625e491ac", - "count": 5, - "total_related": 15, - "prevalence": 0.3333333333333333 - }, - { - "value": "c165b831d6f8195b564217ffd3290f921a1afc68a8ef8f68ae458c668708a232", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "13c095cc8beb2ef2cba7162a5c268176f1ea56a0aec837beef637049c02fcd15", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "975b09f0c1ea1ba028142897a3671e95abe98624c2c0520f31b92b9d238e5287", - "count": 3, - "total_related": 8, - "prevalence": 0.375 - }, - { - "value": "65ff8bad96d8debb2a010443d1fa1885a54f5769238db463d66f1dc15b3b636f", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "7ccfaf60a79a17e8d600e953fd50ba019220b9fcf7e1437971c02d35774ce910", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "91d55100297d6ed822ea5f7bd813468e7d18419a321964de305423c82e139e99", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "d76ec331f524e20166c6eddeddbc563d4260c832f9f5e2d2c12eaf0dc0404240", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "e33da7a8c624a3d5283f4e803a290b944a2e69d6e0d7d52945e993291bb488c3", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "55b2040df8df19912400977bcde380c877db35fd2775a4a14ae1b791daf2454b", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "8ca131db25a24c193d2b5b3942fb235950b96b226d42ee950377e51808660f06", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "95f670ef9f19839351670a1401964488b1d91277453b6a31c7f9180f6f7abe54", - "count": 2, - "total_related": 10, - "prevalence": 0.2 - }, - { - "value": "0b8fdf32fc2b55fcb3ee42febc955a9227902eb083b54fb6b6c4ac76c5d3f2a9", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "10262b5056f68ec3d6cf44cd1d162e7dc9265d4fc87ed68fc4274af4d92f1d3e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "199a782b932c1b810d6b0183402e03e605390e469e8851d96b5db92162465cce", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1b71bcc892fd88c174232b95b6f61d8a615b18a0708227c5d07f5fc35bd68a7b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "22ca096d52c465a5e6a7f301aa2409c41ba7f10a573651df8b5ef711f8de44f5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2336eaf065356d3184421224480afb1c0eac00cacc41078e1d902b1ffb1ac90d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2ba2cd4042d4ba76ac6f42d3a6c2073c06e87ee697e54d07a87d7bb6c4ce8723", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "44c8b9db1af210e96212f586bb010ed609ac78f9e2553d950e7693f28a5d3b97", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "58e90d7a317271d204c4896801b6250a5656ebbf133a3fb1adf0c9d7ad1d835f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5bdc214394b455ac97200e3ed4ae88af7dee5bea27c169ab13816ad70cfe9148", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "6ff7fbde40cf099b58b69b1d9605bd7ce8dc6e4236400e894730dd737e43f50c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "73aaad54b487fa65e5f1ff81a14bba5001841fd6a5efde2ffd35ea4bc3c2c126", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "96371488ce23c5a170599a880c7b4c32a747753bd54b0c16a0365c176d8d586f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "98639d7b24ce034e25a4a45fe5ca244afe029cc78abdc69d5728426268c04138", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "9a4517e90213f0e74dc0950332905e510f8c6fdb67ab5b130a533e571f39f6af", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "9e67b765ec58b4271b090a18b495e9e5c9ace4323ea7d8175f5ae452106ac3b8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "b09ddcecc75dfb059e6fd1630dde37131433311a3882b019c42e673bf15c3acd", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "b482a0db5c6875f7cfbb5978c19dbc2d5d2e4c5e26113d51ce17a43451e1d2c3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "bbf2380f970d7ab78d1b19e9bf1bdc9a6ff11ede09791db1a51e349a75c5ca37", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "bc5b1f97ed446e22e68457b47ce2497fe5c7246dc2d1800a3b346d4b1018394d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "d128455752e812119108d6ccdc97efb7dae4deec4fab314b5686ca68a20fe3f2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "d194c981c7860f4b51d88c16cab2846d302220efe43ca1cf1064f3838c25bb83", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "dd4080ad641132481c8658da710570416f2236237f13a280efee9f65989a668c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "ecd4921cc7f31acabf54269e447a31d8d0f57afc9ee0c29cfd846593f844b72e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "07185204e92235bfe7af44fb7583fc9f4bd3037ba103657d64ed1c5d440dc296", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "1fd46ac213478f2651db076906d9a468ee980eb3cdd637194763d38695cc24d6", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "44c3b733f0d67e65aa7edb61fe567f71b52ab3595b5b53932be6ec908a7dbd55", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "70351aebdea559773bdf562d67bcb68ef670194bcbc7a8d4064ca516ab2a6f53", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "8e79e710e0abd7008ab8d06ce093b73771627946f25c206f6649365e3f8b8fd8", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "a21f17c6130f534316528443f912523777036c51040914dc595d6dc245f322e1", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "c2629e844034e6dd087584cbd9a24ec889c54ed62eba9ca3c2394fab5279fc93", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "d01543520d5b285add8c5ba4c35b0c908a5b8cc9de0e246ab007d9a1e6f84fad", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "6323184cf1ca7c4bf0ac33b0544bf39623cae2692058abac493d01b0f9e3d001", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "6e8975b2bcb4195ad20bd233325a2a7f5f8bc341013b3eb2b6dbe6b5bae27539", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "f8346a1e45ef20da45f62c251e83cb6fdf72ca0f86e178cfe8c8ca0f9b46a488", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "6adc3e740700968593c6948363763a10da9ad414dcb7918507e3c08a80d85a18", - "count": 1, - "total_related": 115, - "prevalence": 0.008695652173913044 - }, - { - "value": "d38909db563cf535b4b9a4949d273153e7a641ab42ffea716690995787c17d2d", - "count": 1, - "total_related": 304, - "prevalence": 0.003289473684210526 - }, - { - "value": "06ac0f030b33e6b98d05920d6db2de211eaf80dc513cf43678ece26038a7f0ee", - "count": 1, - "total_related": 307, - "prevalence": 0.003257328990228013 - }, - { - "value": "98642b7491bdeee7c5477c692e116885825126c9a5f40100a10fe87a10221487", - "count": 1, - "total_related": 959, - "prevalence": 0.0010427528675703858 - }, - { - "value": "b5ef6cc87969e62155b0938f02b507a6a84d1be141d32da7b2d152e6d729798b", - "count": 1, - "total_related": 1245, - "prevalence": 0.0008032128514056225 - }, - { - "value": "5ab51649f1edd4d73f4dfd167622de2e8a9a4424b15485d897c36c7e12da0dfe", - "count": 1, - "total_related": 1252, - "prevalence": 0.0007987220447284345 - }, - { - "value": "c64b9b9879ac12753125d0ca73a7dd2238b621acbeae06e9f9d2a2fa73de8e28", - "count": 1, - "total_related": 1617, - "prevalence": 0.0006184291898577613 - }, - { - "value": "7421afa308614399396b9bc1ca61053ad4a47da741278a7746fb86fb200c946d", - "count": 1, - "total_related": 2897, - "prevalence": 0.00034518467380048324 - }, - { - "value": "cdfe845b25091a21147fe4a683515b000208ae4f67810f243d7bf96bc3484115", - "count": 1, - "total_related": 18959, - "prevalence": 5.274539796402764e-5 - }, - { - "value": "863de02f7c4231bd16b4dd33e29378424b27f1f7591670d259c9dd60e14a3b7c", - "count": 1, - "total_related": 20559, - "prevalence": 4.864049807870033e-5 - }, - { - "value": "62bb02fa91c1537efbce823d5d1981982d3925bcdaac667dc6ca64f8469e2284", - "count": 1, - "total_related": 52432, - "prevalence": 1.9072322245956667e-5 - }, - { - "value": "01ebeb3fcdc269ef402f29f9fba025d3266fcd5c54ae7bca44aaa7c2cf738d93", - "count": 1, - "total_related": 77651, - "prevalence": 1.2878134215914798e-5 - }, - { - "value": "782cfa29b8b93a29c6ec3a01bdf88241ce27bd4b459caeade019277c1b254240", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "cea279461b4262dffa123b077d7fee7805e8c6552a7e0e3ff8c6a9c3ee232769", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "html_titles": [ - { - "value": "LockBit Anti-DDoS", - "count": 9, - "total_related": 26, - "prevalence": 0.34615384615384615 - }, - { - "value": "Darknet TOR / I2P Proxy and Gateway", - "count": 9, - "total_related": 2002, - "prevalence": 0.004495504495504496 - }, - { - "value": "LockBit Anti-DDos protection", - "count": 2, - "total_related": 15, - "prevalence": 0.13333333333333333 - }, - { - "value": "lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "lockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "Freescout", - "count": 1, - "total_related": 432, - "prevalence": 0.0023148148148148147 - }, - { - "value": "Citrix Login", - "count": 1, - "total_related": 1833, - "prevalence": 0.0005455537370430987 - }, - { - "value": "user's Blog! \u2013 Just another WordPress site", - "count": 1, - "total_related": 11464, - "prevalence": 8.722958827634333e-5 - }, - { - "value": "504 Gateway Time-out", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - } - ], - "ip_addresses": [ - { - "value": "198.251.84.63", - "count": 9, - "total_related": 216, - "prevalence": 0.041666666666666664 - }, - { - "value": "198.251.88.180", - "count": 9, - "total_related": 338, - "prevalence": 0.026627218934911243 - }, - { - "value": "209.141.39.59", - "count": 9, - "total_related": 639, - "prevalence": 0.014084507042253521 - }, - { - "value": "198.251.88.129", - "count": 9, - "total_related": 693, - "prevalence": 0.012987012987012988 - }, - { - "value": "209.141.38.247", - "count": 5, - "total_related": 1797, - "prevalence": 0.0027824151363383415 - }, - { - "value": "23.20.234.150", - "count": 2, - "total_related": 13, - "prevalence": 0.15384615384615385 - }, - { - "value": "198.251.89.118", - "count": 2, - "total_related": 3062, - "prevalence": 0.0006531678641410843 - } - ], - "memory_patterns": [ - { - "value": "003aebec57fc45e6a04b9701fca7a082850445f36738addb6969c65bf778967f", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "00d3f19ff84cddc5b0cfc9d9b053a99b493add5a9bf8ec74659ef9b3d9298de6", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "0216a3e4fc6b4a9715c93affa1d9b41d4c435ae6b455f6ea2d17b954592ef0d1", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "0400ee8269aba8f79bfd0c65f64689b06febae22a7535c9fda728a7eaa29ae0d", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "060bd55768e0edc037651bf50c54248e9451d57d4da795b9d8ea03829085cea1", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "07827048101b75e8062308253695b2456680e55593fe4c5f1ec457b7be2a62af", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "08f5fa00c8602b9ca095062a1976a6fec9c9c1ba78442a1c3439a43ed6066320", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "0b50f937dbbabd9bec66176520885c890abc819f383d559184533ad1116f4041", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "0ba01c441de37c72ab7a9c76251679013779b3ea54815d49ee2b24c04e64e68d", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "0d4a8d933807afa57d8d9b068283be398bbad1334a962f568cbf58eef9886195", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "0ec87a7f943ab72d08aeb957d33dd348ab7cf45052ab7a31bcce33ff7a095837", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "122313b2597a45f2f8c3538edc4ee43b9d489cf3d56c5413764f3744af357726", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "133cdade6eeebd6daa6215cbafaaf2faa136ee642e46e803f18bd50248db380d", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "137949e45d2c0e6c548dc19dfc12529fe4343ac2ea66a101b4fd886c8c6212a6", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "13c258d6ccd1fc672411b9bb04211c02aa7b0f14713ea5eaf3e5610675f23acc", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "148697a172c9733b35d4026577f53e5fd22807d7b5d42698def3afa2536050d5", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "15e2e14b887630a77ab955c1f9ee61392198544abb5da3065550b788aacdfe11", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "165b894d96b1a9c0c2f998879f0f54406f64c9178bb2761b5e2d45f1847e53f4", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "17594425d252777b2c8fb42b66b943567406398edb5ee5f57cbf88b42c82a65c", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "18067b6f8a4917bb72370bcbfc217c419d9cb145766fcefec7c953f9e267d8d1", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "1878217bcfb6c5fd440d8d9be9960abb840d1685ad987ea992901384c9f3de84", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "19fd40bbfd799ae29c2d261e18776f8a1f82328f80dca1cda3c23ee66fe38265", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "1a53460ac8889d82b47b704638f0fa9affc3d7ae5ad6f4cb7d02dce67f10e292", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "1a71eedad2997e10a565d8b5540af988111734dfd58dd1c9fcce995070206d6e", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "1aad1edf0c09473675df59b8952d5a0d329609dd22d2582cf43ad263a26f1389", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "1bd9426232d1ca052d01283b0239ad02ebd66d9ac48d9107f10b1c463da2d51d", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "1c2a51daa50a0489a8734d3577b43bcaf78f32ab34a404d2f6026af5ed33cd5b", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "1dddd103482e6057cceb35eecb20d8c7371f04aa04160c51f6a54d182bef9f28", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "1de53abfb86539575a24640ed2956ad6db48bed9cb922d885eac3392e5a7d68b", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "1eb0b48ca74c119b53d372de7d639f0bcb1337fb526347fb3b22f62214280e1d", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "218f131e909e4707ea5580606b020a3b86ab4f43879a22f2da9821d4fa78e020", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "233925c89da61e248275c6bed8b707b11f4a44ef99f716615a06e23e3e594fdd", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "23e726f454757bc37e4388dda2dcc99172c5e856d522260015829865fff7d066", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "24c08ca17ef4438316669a1c08492eee22041bb87a96b2d1cdf631690c558772", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "25456fd92a3b6daa3ab519e9f6f18d3869e3537cdb512791360077d3f3e25c88", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "279074475806bcd0ca6304493064a88d2f42f344d653897a3c9e35976e84b46f", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "1f0617725b2a0b0c3bb1067f0b77da049da0545710d9743813969b3bbcc563f4", - "count": 2, - "total_related": 8, - "prevalence": 0.25 - }, - { - "value": "016cf44b5637f2c71383de4549b9eff72e74382e30add1d14c3944daed9e2e5d", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "0323c7c33475091162c3ea88a78ee4c9f39b77f49b148c3dd52b1186cb1e9a15", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "04270e4fd725a173e54ac6da4d02a00a1d7401a4c72dd4715cc667384ddb9057", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "061bcf4a721f3232edb099ce730e584a54b99745db32b37db495a40e1788eaa2", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "083278188e04258b1a40d6e2c5a38a6fad03937dcd9cde664ddba02fa3cab275", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "089accf8636e3d36b24bb3e4e0499797b3e38380854c1e1b5280e36e8caf1b5e", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "0a6d0ffdcf849f3a55f1c8934f9361f5d29424f406c0d20c564ebdd1ff3c23f3", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "0ab6d4d11b5422151eec35bffe69524cb86f2e3147fe13a1a02d99da697364d9", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "0b85bfa981bc05fb8c29a8623ebff77331ce363061dba5495dc46848d858222c", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "0c7466ed8b51f0a769a7f85ad4b88c3770d71c4863322fa38429ccbf3d56ab06", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "0dd36a058705717a7d84622f9745b85277c37a07ad830a6648a01ef6e679324a", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "0fd8d4e908c1685b55d983f28eb3be88b1b043ae979b0d6e588113fa6dfba517", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "1138fd0fbcc9a8765508217d800611fda98e08757c504e14662b40cd456076e2", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "12f1726152734c8493a363237350566a9cd50930da58c06a4744941f5dfb0cee", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "1520e4cb2748aa5725d8b6c242ff6cf365f6672db35df2745c920ed228666317", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "15cb5c974263e7b774cd0c104d40768ec7bfb8729a6420ae306b854078e9e13a", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "1620f0c0b405e8517f7cc836d9a919ea8bc6fd4acd3308dde1e033c07767f3c8", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "1f9944ccc4cb956c4eb81e76d51b3cb048b838f2f746e2017d4492abd5e9ed79", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "227c34f38d1555133e7877d82cdd5a8231f876d2552cedbdf9c1e2777b16b050", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "07014e419711c198dd2d5da99e34726777b83ce8d23e40f1ba21fe9c88d8490e", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "07b158ef3cef2c6c7b2c9660f4551bfbf1c37cd690cfbf66fc149296a5be973c", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "092a8d02b86ed6e1d46fb7a3c005b6fdc0d255cbb254f3cdc898a862fa31e48f", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "0a9e072035636445720d313ff449d26c507a0a9efc66e1a16c74371537c66194", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "0cf9bcf39b9f9bb6d58c2150384080bd2be671197463e637eaa41ac7849645aa", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "0d481c8c9670a0aeadcc9ca4e66dc790b540b1605621c1377cb0628172940e54", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "0e8438b049a9d795e8c9cb0cf9e1c68c4df8fbfda6292a3debbd61629ecb2632", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "101a267b08d3d687cf6e23c126f2bd6418b05edad1a124b25a975a101f474e5d", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "1304d13749314412aaed823179542dafd972027bca3af994d8c438106b993434", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "16202378782d064757c98dd1558457b3c0c54f0e29bc472a95678af99444a0ba", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "181b448f5249d5b7bbf247ef09cb2f82a637f6eee6e806894c8a39c7ec72c2bd", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "0fe6bda48985dbff87afc2cd6e412683674e484aec11c42e3a0115aa3631ff8c", - "count": 2, - "total_related": 32, - "prevalence": 0.0625 - }, - { - "value": "1468bb69fe2cd9c7631094755e09cd7c37e8b1142fe88dea3b603cb161688d08", - "count": 2, - "total_related": 32, - "prevalence": 0.0625 - }, - { - "value": "094da712cf83eef91acaec6c352cb263977c5f014e8978ff88b24da7f961abe3", - "count": 2, - "total_related": 33, - "prevalence": 0.06060606060606061 - }, - { - "value": "1b97623ff5b7e17a91b511cf359d0f251565332a0528a97b8a7f005b6a5f0231", - "count": 2, - "total_related": 52, - "prevalence": 0.038461538461538464 - }, - { - "value": "23bd34f9513a4b4ac7c29810f014551d4541019c826e2ed7b2dfab101cd44e5e", - "count": 2, - "total_related": 55, - "prevalence": 0.03636363636363636 - }, - { - "value": "0e858a8f56727317f161526b25700dc2adae56945b7cc1acd65d923e42c2c683", - "count": 2, - "total_related": 72, - "prevalence": 0.027777777777777776 - }, - { - "value": "13f6b17101381aad4c3c8646fed3c3f1aec866276e3fa25c5785a1c759ffc297", - "count": 2, - "total_related": 97, - "prevalence": 0.020618556701030927 - }, - { - "value": "23602ca2df23ed1b23bc1b9655247c9c595540bcffd2bdc1297e2174a7e44c99", - "count": 2, - "total_related": 299, - "prevalence": 0.006688963210702341 - }, - { - "value": "26c6e713d48abff2a0f3b3ed19c98d93883f40eca2c145b7d1b1aa9ce5903af5", - "count": 2, - "total_related": 299, - "prevalence": 0.006688963210702341 - }, - { - "value": "01bf3d3e053789fa675fb19a4a26441366dc4485c2832f2b17ee8c2ca96048de", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "09265501dd760303b7c85afb96017bc36e17f88dba4ef8b153adc6fe0c1c1cd3", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "01aa6c6b5ade9852854eb3270933ff209900814ae7459862bac4bc2ad4b53e49", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "05f182e9be25c953b0f03f4cf65d0773a723744efb316cddcefce199e0ba2aba", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "0613adae9c40df3e060c402023a8d3901109d02c3ffaa94869c7b1e4f572fd05", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "07d329ed8333397014a3639c1987ce1f5056f51f19cfc3e3595b6928b4add333", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "085d02ff5370bf8c89718ddef0bd6da39ed6ed6e1b9a7ad214105f08a2aa3edc", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "0addd6d6ef6d5a930eb3354854d7c7c8b5a646bf71e12270770a50de33306c42", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "0b0db01cf0c10f0d4e11bff999bee4b7761898169aad9c259b3b120d5741eff9", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "033502d18731b0377d7b5585445bfdc524efb388313aa20fd5ae23dad94e842f", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "080809f29febc6abfe6e01c79ce066e9d1072913ad83674d3aac82acefb514b8", - "count": 1, - "total_related": 14, - "prevalence": 0.07142857142857142 - }, - { - "value": "072d0633006eeafc77c0b0144fdac84a57fa1e4f8b96d9aa33d377bd789bc533", - "count": 1, - "total_related": 20, - "prevalence": 0.05 - }, - { - "value": "01d6c9d13fd2d95fc1d1adac158a0541a7c49b0e306da458555e34b7e941e222", - "count": 1, - "total_related": 26, - "prevalence": 0.038461538461538464 - }, - { - "value": "06e47eb71f683235a9e78e89a236dcf530e881ff94d15131c2852e6bb8c3dac2", - "count": 1, - "total_related": 27, - "prevalence": 0.037037037037037035 - }, - { - "value": "08cc91bab9870cbe2a9b1c3220c5a661c0ea562c5735b271f53ab20a3f07e3a2", - "count": 1, - "total_related": 101, - "prevalence": 0.009900990099009901 - }, - { - "value": "04fe0d39a645ad5724833217686db80fccacfdcba50f09583fb459f32f9c6812", - "count": 1, - "total_related": 103, - "prevalence": 0.009708737864077669 - }, - { - "value": "089483af4ffd2a54346c1060db5e29a180da0bd45907bdbf1c63fa55a5159b81", - "count": 1, - "total_related": 103, - "prevalence": 0.009708737864077669 - }, - { - "value": "077c86e8b7aefccb31a806dff5a93bbac17ac032db4b71bbb8df7a29a939e3f9", - "count": 1, - "total_related": 106, - "prevalence": 0.009433962264150943 - }, - { - "value": "03d837ad2515f08569fd1c965250c6324aa7e31c6a1877c4b4926cfe2df00396", - "count": 1, - "total_related": 110, - "prevalence": 0.00909090909090909 - }, - { - "value": "025598db733a9d573d0dd62ad9b190ae676ad1a40f105641fd9a183c105ed4b4", - "count": 1, - "total_related": 111, - "prevalence": 0.009009009009009009 - }, - { - "value": "02d9f3d8fbec1d02a3db5db23d2511834e00a825dbebf817aa1269cf0f8ce739", - "count": 1, - "total_related": 111, - "prevalence": 0.009009009009009009 - }, - { - "value": "03ad161d9a00bfd11d266336a02c63017819978cd574c1d2105db590e27b3816", - "count": 1, - "total_related": 111, - "prevalence": 0.009009009009009009 - }, - { - "value": "060cad1ff69e14f5f3a650e08cda7dc32540a349a37c12374e863fd8362a75c4", - "count": 1, - "total_related": 111, - "prevalence": 0.009009009009009009 - }, - { - "value": "0b52d5d29e42804706f99a724ec94d0e2f0fd2a4dfcfbe4ff4e0403e00a71e49", - "count": 1, - "total_related": 111, - "prevalence": 0.009009009009009009 - } - ], - "outgoing_links": [ - { - "value": "https://onion.ly/cap.js", - "count": 9, - "total_related": 389, - "prevalence": 0.02313624678663239 - }, - { - "value": "https://cdn.jsdelivr.net/npm/@hcaptcha/vanilla-hcaptcha", - "count": 9, - "total_related": 453, - "prevalence": 0.019867549668874173 - }, - { - "value": "https://js.hcaptcha.com/1/api.js?render=explicit&onload=_hCaptchaOnLoad&sentry=true", - "count": 9, - "total_related": 672, - "prevalence": 0.013392857142857142 - }, - { - "value": "http://reddit.com/submit?url=https://onion.ly&title=Onion.ly Tor Gateway", - "count": 9, - "total_related": 1913, - "prevalence": 0.004704652378463147 - }, - { - "value": "http://vkontakte.ru/share.php?url=https://onion.ly", - "count": 9, - "total_related": 1913, - "prevalence": 0.004704652378463147 - }, - { - "value": "http://www.facebook.com/sharer.php?u=https://onion.ly", - "count": 9, - "total_related": 1913, - "prevalence": 0.004704652378463147 - }, - { - "value": "https://twitter.com/share?url=https://onion.ly&text=Darknet%20Gateway&hashtags=onionly", - "count": 9, - "total_related": 1913, - "prevalence": 0.004704652378463147 - }, - { - "value": "https://www.torproject.org/download/download-easy.html", - "count": 9, - "total_related": 1992, - "prevalence": 0.004518072289156626 - }, - { - "value": "https://www.tor2web.org/", - "count": 9, - "total_related": 2137, - "prevalence": 0.004211511464670099 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/05c78a4/static/hcaptcha.html#frame=challenge&id=00tql2lh21ws&host=lockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/05c78a4/static/hcaptcha.html#frame=challenge&id=0f6imw6wq6sr&host=lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/05c78a4/static/hcaptcha.html#frame=challenge&id=0fhxepucdw9p&host=lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/05c78a4/static/hcaptcha.html#frame=challenge&id=0gabmttbg45&host=lockbitapt72iw55njgnqpymggskg5yp75ry7rirtdg4m7i42artsbqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=http%3A%2F%2Flockbitapt72iw55njgnqpymggskg5yp75ry7rirtdg4m7i42artsbqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/05c78a4/static/hcaptcha.html#frame=challenge&id=0i7e4sb7rum&host=lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/05c78a4/static/hcaptcha.html#frame=challenge&id=0j60g3b8orld&host=lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/05c78a4/static/hcaptcha.html#frame=challenge&id=0qd461kohlq&host=lockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/05c78a4/static/hcaptcha.html#frame=challenge&id=0s8tat3ttrbo&host=lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/05c78a4/static/hcaptcha.html#frame=challenge&id=0wus7yl8e5lq&host=lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/05c78a4/static/hcaptcha.html#frame=challenge&id=0y7jodl9mew&host=lockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/05c78a4/static/hcaptcha.html#frame=checkbox&id=00tql2lh21ws&host=lockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/05c78a4/static/hcaptcha.html#frame=checkbox&id=0f6imw6wq6sr&host=lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/05c78a4/static/hcaptcha.html#frame=checkbox&id=0fhxepucdw9p&host=lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/05c78a4/static/hcaptcha.html#frame=checkbox&id=0gabmttbg45&host=lockbitapt72iw55njgnqpymggskg5yp75ry7rirtdg4m7i42artsbqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=http%3A%2F%2Flockbitapt72iw55njgnqpymggskg5yp75ry7rirtdg4m7i42artsbqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/05c78a4/static/hcaptcha.html#frame=checkbox&id=0i7e4sb7rum&host=lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/05c78a4/static/hcaptcha.html#frame=checkbox&id=0j60g3b8orld&host=lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/05c78a4/static/hcaptcha.html#frame=checkbox&id=0qd461kohlq&host=lockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/05c78a4/static/hcaptcha.html#frame=checkbox&id=0s8tat3ttrbo&host=lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/05c78a4/static/hcaptcha.html#frame=checkbox&id=0wus7yl8e5lq&host=lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/05c78a4/static/hcaptcha.html#frame=checkbox&id=0y7jodl9mew&host=lockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/066de1650e161eb3a55e01b6fcac82523a2e377c/static/hcaptcha.html#frame=challenge&id=0ifgodqwela7&host=lockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/066de1650e161eb3a55e01b6fcac82523a2e377c/static/hcaptcha.html#frame=checkbox&id=0ifgodqwela7&host=lockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=challenge&id=041n7nns68jz&host=lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=challenge&id=0531q13tec17&host=lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=challenge&id=05khfbwpdvxy&host=lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=challenge&id=05xo6583uma5&host=lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=challenge&id=085sdt8hmz8b&host=lockbitapt72iw55njgnqpymggskg5yp75ry7rirtdg4m7i42artsbqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt72iw55njgnqpymggskg5yp75ry7rirtdg4m7i42artsbqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=challenge&id=0ljvy8byo8w&host=lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=challenge&id=0nlbni0n73lj&host=lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=challenge&id=0obuqegl8myj&host=lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=challenge&id=0p65c2c7pptf&host=lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=challenge&id=0pfwp2uriqpo&host=lockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=challenge&id=0tmwkt2s2t4e&host=lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=challenge&id=0ufqphhuzd5&host=lockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=challenge&id=0ylnvy2w4svk&host=lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=checkbox&id=041n7nns68jz&host=lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=checkbox&id=0531q13tec17&host=lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=checkbox&id=05khfbwpdvxy&host=lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=checkbox&id=05xo6583uma5&host=lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=checkbox&id=085sdt8hmz8b&host=lockbitapt72iw55njgnqpymggskg5yp75ry7rirtdg4m7i42artsbqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt72iw55njgnqpymggskg5yp75ry7rirtdg4m7i42artsbqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=checkbox&id=0ljvy8byo8w&host=lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=checkbox&id=0nlbni0n73lj&host=lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=checkbox&id=0obuqegl8myj&host=lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=checkbox&id=0p65c2c7pptf&host=lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=checkbox&id=0pfwp2uriqpo&host=lockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=checkbox&id=0tmwkt2s2t4e&host=lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=checkbox&id=0ufqphhuzd5&host=lockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=checkbox&id=0ylnvy2w4svk&host=lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/8352e07/static/hcaptcha.html#frame=challenge&id=022r65tydqym&host=lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/8352e07/static/hcaptcha.html#frame=challenge&id=09s1n8dkym7&host=lockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/8352e07/static/hcaptcha.html#frame=challenge&id=0fx9ihaacu0m&host=lockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/8352e07/static/hcaptcha.html#frame=checkbox&id=022r65tydqym&host=lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/8352e07/static/hcaptcha.html#frame=checkbox&id=09s1n8dkym7&host=lockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/8352e07/static/hcaptcha.html#frame=checkbox&id=0fx9ihaacu0m&host=lockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/b4956db/static/hcaptcha.html#frame=challenge&id=04017n5rljhu&host=lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/b4956db/static/hcaptcha.html#frame=challenge&id=079myslbbqj&host=lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=http%3A%2F%2Flockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/b4956db/static/hcaptcha.html#frame=challenge&id=07bmhwrv7u87&host=lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/b4956db/static/hcaptcha.html#frame=challenge&id=0eop4ed7lkw&host=lockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/b4956db/static/hcaptcha.html#frame=challenge&id=0ojzhxhxnktn&host=lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/b4956db/static/hcaptcha.html#frame=challenge&id=0t9m1au5at7m&host=lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/b4956db/static/hcaptcha.html#frame=challenge&id=0w4ehsem76dc&host=lockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/b4956db/static/hcaptcha.html#frame=challenge&id=0wgq1pb15tfo&host=lockbitapt72iw55njgnqpymggskg5yp75ry7rirtdg4m7i42artsbqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt72iw55njgnqpymggskg5yp75ry7rirtdg4m7i42artsbqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/b4956db/static/hcaptcha.html#frame=checkbox&id=04017n5rljhu&host=lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/b4956db/static/hcaptcha.html#frame=checkbox&id=079myslbbqj&host=lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=http%3A%2F%2Flockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/b4956db/static/hcaptcha.html#frame=checkbox&id=07bmhwrv7u87&host=lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/b4956db/static/hcaptcha.html#frame=checkbox&id=0eop4ed7lkw&host=lockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/b4956db/static/hcaptcha.html#frame=checkbox&id=0ojzhxhxnktn&host=lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/b4956db/static/hcaptcha.html#frame=checkbox&id=0t9m1au5at7m&host=lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/b4956db/static/hcaptcha.html#frame=checkbox&id=0w4ehsem76dc&host=lockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/b4956db/static/hcaptcha.html#frame=checkbox&id=0wgq1pb15tfo&host=lockbitapt72iw55njgnqpymggskg5yp75ry7rirtdg4m7i42artsbqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt72iw55njgnqpymggskg5yp75ry7rirtdg4m7i42artsbqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/d136a52/static/hcaptcha.html#frame=challenge&id=0hc2oswj2tx&host=lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/d136a52/static/hcaptcha.html#frame=challenge&id=0jeru14iwftp&host=lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/d136a52/static/hcaptcha.html#frame=challenge&id=0pyu31io39mf&host=lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/d136a52/static/hcaptcha.html#frame=challenge&id=0ynfmx585zxe&host=lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/d136a52/static/hcaptcha.html#frame=checkbox&id=0hc2oswj2tx&host=lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/d136a52/static/hcaptcha.html#frame=checkbox&id=0jeru14iwftp&host=lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/d136a52/static/hcaptcha.html#frame=checkbox&id=0pyu31io39mf&host=lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/d136a52/static/hcaptcha.html#frame=checkbox&id=0ynfmx585zxe&host=lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://172.20.254.141/2018/08/07/hello-world/#comment-1", - "count": 1, - "total_related": 382, - "prevalence": 0.002617801047120419 - }, - { - "value": "https://freescout.net", - "count": 1, - "total_related": 1367, - "prevalence": 0.000731528895391368 - }, - { - "value": "http://www.html5rocks.com/en/tutorials/canvas/hidpi/", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": "https://crbug.com/740629)", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": "https://w3c.github.io/gamepad/#remapping", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": "https://wordpress.org/", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "referring_files": [ - { - "value": "142b59db74500f0008ce44e77fbc5a1b6a6996b1f9d505d289fcd06a48c2e538", - "count": 3, - "total_related": 19, - "prevalence": 0.15789473684210525 - }, - { - "value": "2d9b033019d61a65933e1523d91b5241a39e638bcc1fae5b181c9d45f03e0369", - "count": 3, - "total_related": 27, - "prevalence": 0.1111111111111111 - }, - { - "value": "4917fae3abc253201233827db71fe35a38c49868f5de76a5f0747ab6e385edd3", - "count": 3, - "total_related": 27, - "prevalence": 0.1111111111111111 - }, - { - "value": "013e566492e2a1b4002f8757e9a88c38e424fc9eb9f6264d7ef49d3a74fb8975", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "0237a1a68a0583a2f6c9e640fe9c9154763150ade8cc9ad77fb07536488d1a1e", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "035158dd12b922706fd4163c02ecc93c4b5ed3d18cdbacf862cdee2c5ab6242c", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "03d955619377d88861f9589ab8e0d3e1f437ca9cf5dcf9cbee1d98de0ee70e76", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "0402a3a6a039c5bec25c3878d086f07ffa2bdc95b7993992d84e22211898c4e1", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "0689b09a8851b31f8a32e588110934eb72b519a04f6c4c67d56e2ff5fa2800d8", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "06c27fb83429061ee887dcca3ff1c0c1b6d55c91d3ed918675aaabec77483f08", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "0726bbadaee6f440c696d7d2d04e8a55a6a76daeae442311b0c29bfc3ce029ca", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "0837baf2b379349b680044d4c0148df3ec9f2cb3d926cd22fd1c9d3f25f8a2d0", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "0924e0b194fc40b1dedf21af40cb5587768dfa6771c7e95928f2f9b1f67e3a13", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "0ac2fb2867b879667dab158ccf082cf2d6d3cdd97344ca1753c68589106c2ef0", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "0bb5bfc3c6b4133494503e96a051789bada72f9a9a1a87bec960e4837dc73bca", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "0c79ac7b9a3e1493e95c071ee494647678c2c6c5e60d31de48179040913f12a4", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "0d8a3af96b9f1bda4bd54ac096b6fe4a3eec3d94aba871607bb5098e260e9a87", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "0ea59932c2315f9593759bcffb4c5bc3d07a2d4c037b2cad5e72013fc49b54bb", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "0eb3faebf11e16fbbf43f16919cea708a4290c2f62bd07a121d4dfdddb5c9444", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "0fdf51f70c1e84506e906071ddc0d5d63d60852d469e3b9a96d5fa897ac0146a", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "119ec7696e9a5386358d958951104326d10831272b1db86124ea5fb55961fa6a", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "125028fae5f42c3a25892e3a782b8cb3bf3add66e464059d90139610463ce441", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "12f1726152734c8493a363237350566a9cd50930da58c06a4744941f5dfb0cee", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "146848351685a8219264150407fadf310aae0b5888cb1e65842c4c2adfa5b22b", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "14f4bc33f959473d32e4a053d5c58d9b35da149ae8074b4e2d865477707f4abc", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "1a5058980ccf530657a0de8c6f0d276913bd44090e787bab53def6444155a425", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "1ab94927a3b38f1d57cd001fd412b7592d26e654e1f83dca3558ebdc5bbb5517", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "1adad13ebf0f05aae29a2808a95b418538eb51677c2d20b6a792f54f1a2af59f", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "1e045d19597873cb9b0b2d256392d48c106220d651a0eab50c982a6e01d2777f", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "1e2dc244a76253a96d01371ea1617356b64992bf5ba53512d2dd6b2cab9b5dab", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "1e50380a8b2449e90dd3f9f144cd2c02cfd4b804506bde55565f930d41b8c8f4", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "1ea4f27cf07ea9b3ada2e6d3d661f6c945c8becde6b9c6b9a647c8192da7bbee", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "202e792ea678490ff6c700cf7d73d67fafa5b9de6603fdd5d1e4905cd34fa08c", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "230e87f1a86e7384a8dc31e1f34ab4982d60e5c435a5b991adb99489b0503fca", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "23bd34f9513a4b4ac7c29810f014551d4541019c826e2ed7b2dfab101cd44e5e", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "2598bbde2d45fd29f8a44032edb75fb72e18b0abd14888fd154aabd4d1f1e62b", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "26bd5ab49f119208ba3931dd90bdcdd559fb806f254067d22856bdfe6c0fdf3c", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "2722f6449610bf6885b09adf5ab104a94961f7a12dfcc36288b86fbe1b9864c4", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "2768db39ad3a2b3045ef2aa8206bbae3c60958717de0b8b18f760305941d2c61", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "27cb148ad6ddc75f04e351cf695d04feba5d29b82b4d8e0a13005aca1a9b99ba", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "2a1b2e48f1f33562f30de6dbe2c0a64c4d304d63821ff7da61bd073caa73fef9", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "2a57c8ef3a62285b71ade0bbb5fee1fd0b0df5ccb052b0ea73a41a478349bdff", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "2a5d0edd5313b6cae2933d3427d700d3c314a3dcba229b22a0bc86c7e2356435", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "2ba799e4ec7b15cf168c4644e65875b06b158d9c6b17af5099887e236dd9def3", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "2ccaabe1b826b6e6e78bda7317c58c48903f6b7c72bf310ea2fffa67be899366", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "2d9a90fa7c2192aa4f39556408ce189bb5e2734af132dcbce77f9a370cb09853", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "2d9f9f7600824b3c6f19b9ea40d2528fd2895bf481e992ab173aa51508dbf67c", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "2de4b3789562f229b5ffed4820f0dc48a6fa7e6f3f4e622cb1a66a691890470a", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "2fd730600d0c01304c88079bc0d95856294555cf9746d1ce6ad5ee464ae60f1d", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "3144ec941f9f73d04f49e2725b83074b9adc6dbc83d6c4d0cb62acb8d019aeb3", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "31c78b52049331db73628a3529e46ae131e21b26ee3934a4d3e422fb67604716", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "3264839f40d3f5efe0f924329fab017025392a916e7906424540ab809c55fb5d", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "336705d87389bf130d48ee443d59669ff4b47472696ead702c02242e1af2302c", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "364f3889a5adf0e4df314cffb4d02f6c557743a67d208a18e63f676eb7107e20", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "37913d1762cdca5c0b039894b326eb86d7b41d969f539c29c408dd60dd2cf699", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "3859ca38ad009d07a156f27de6acbbace281d65471859525eeeb30c553966bbe", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "3a71eb8a1068d018750f4a3b48fdf7f01eb97bce2ba1a343419da267671859d7", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "3aec0f109c799a46c14f3de6472d00e5e40bfbbd47434d8d41e8404d9792b38c", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "3f02b616563837d3879d0967d585583890f933ac5d6503d41e8f6e9ea69c53ff", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "4001e58c127c2ba0555832cf61d99f73183fa96773b062610e5116af849e8a82", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "40af2ecd9b6e59de73214df996bb82383d8b66ae309187787b7035951700f048", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "4182ca4dde3cd072fb927e432f144b34ce501ca4de5b7779f7394e98f8971aab", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "423d17994b6c193dc10eb974ad530254ef7f3d4057509ba4faee7ae3cac4552d", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "4347702f7c45a7bebd4a76bdeb5e6c9d98424070161e1f1a22f3237d217a63da", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "43b818f20cc5f1c0e4109e49c41cf2f44ce28ddce3b5b3ff615813b2de1f4975", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "44d497ed88cd9201ed90184c2895ed6666cfe16a649a6911dad7890263cfded0", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "475744327f3fa1f88a5756d86b50f509bda7889887dcbc8365b474b7dbb10700", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "4990c782df44e2dbe5ddd78a0faf6a6285b314880fe2cf4adbafc372eef9234d", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "4b22508fa146e934d3e47f3cad86e1c6ef80f5b99ce91a1a2b436952068cfbbc", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "4a96d068ec7edf6f5a0286dfdefafa943138d8b73fc7c3da475acac4153e8dbf", - "count": 3, - "total_related": 34, - "prevalence": 0.08823529411764706 - }, - { - "value": "0a9bd25761cb33d2ddc8073d247fa87b2a1872dbd102edbdf1c5952a48e8239e", - "count": 3, - "total_related": 35, - "prevalence": 0.08571428571428572 - }, - { - "value": "0b681235bcd75e2e8de4f7a8df477710fdd63bd31285d4a74c32902651487a84", - "count": 3, - "total_related": 35, - "prevalence": 0.08571428571428572 - }, - { - "value": "44998caeb91a50724b29a7adfba5415a0e5e4e4ece4f898826bc978a66f63007", - "count": 3, - "total_related": 35, - "prevalence": 0.08571428571428572 - }, - { - "value": "2d3db78496d61e6eaa4147019911ea59072e87285015a78ce4532946f7d2b692", - "count": 3, - "total_related": 36, - "prevalence": 0.08333333333333333 - }, - { - "value": "2c3d6bee8c5cd870b5b3276094832f32a0313be24922db5b32db31cf4aacbf75", - "count": 3, - "total_related": 37, - "prevalence": 0.08108108108108109 - }, - { - "value": "1460c87eee79b131e1e10ee66d9b98028b81e4be985e21376e50930030fcc666", - "count": 3, - "total_related": 38, - "prevalence": 0.07894736842105263 - }, - { - "value": "1a6af4ca52796a5c8dbf8ea0af727efd3515d45aa36b23af32b85370a45d6867", - "count": 3, - "total_related": 38, - "prevalence": 0.07894736842105263 - }, - { - "value": "33a289894e918868da1837da4a21fc739bb4a39e3d3d97ddc517e99a45bdaf22", - "count": 3, - "total_related": 38, - "prevalence": 0.07894736842105263 - }, - { - "value": "3d53f6ffdc838588a0906b7acea4f03075ff98570cacfaafa5fb988a5542c43f", - "count": 3, - "total_related": 38, - "prevalence": 0.07894736842105263 - }, - { - "value": "44b6e814e02d4bea1aa3ee2ced85b0052edd99e27921b93269ece535f91be228", - "count": 3, - "total_related": 38, - "prevalence": 0.07894736842105263 - }, - { - "value": "0bfe067c2d6d28e0dc060634b6cb56b5e684102c6d93ee5d8882571fe64ba7c5", - "count": 3, - "total_related": 40, - "prevalence": 0.075 - }, - { - "value": "49bb44caa76ab9d6205230fb4a52e0f26eca9996203b71d3a1d2edf7d77a1bb4", - "count": 3, - "total_related": 41, - "prevalence": 0.07317073170731707 - }, - { - "value": "1e881ba325951fa2b39388ca29047eb35659fe28af8af8613f2499b46472f24e", - "count": 3, - "total_related": 46, - "prevalence": 0.06521739130434782 - }, - { - "value": "2ab4fa5342840403d0d3c646b21a585ef3cb1779a39c96eb3f97f894d6e0c469", - "count": 3, - "total_related": 47, - "prevalence": 0.06382978723404255 - }, - { - "value": "45780d802d1171cbb3730fde9c645c6862584a987bab8f5f99ff33b69d3cc901", - "count": 3, - "total_related": 47, - "prevalence": 0.06382978723404255 - }, - { - "value": "107358029b37829975e613c262c710ee1176e8504840dd9141c85131283d5b19", - "count": 3, - "total_related": 48, - "prevalence": 0.0625 - }, - { - "value": "15becb6bdb0d1414107ee2c5fe331991b81f7fa680079e60b5854bef5485b2b8", - "count": 3, - "total_related": 48, - "prevalence": 0.0625 - }, - { - "value": "1ea3693324e383543fb2be6e7d56a59ce24c2afd3af80eb949a08ed02ff7e4f5", - "count": 3, - "total_related": 49, - "prevalence": 0.061224489795918366 - }, - { - "value": "3223489f49787185b1cb220936941b923d2c744174f221e04589ffeb641764a4", - "count": 3, - "total_related": 49, - "prevalence": 0.061224489795918366 - }, - { - "value": "17106241ec00dce647858e46ef76ae508d4cab3f3a4165c2a82f08c4ce0b107e", - "count": 3, - "total_related": 50, - "prevalence": 0.06 - }, - { - "value": "3c6fb52c35e9199dd507c7f51dea7a4a9d28d6540d925ac9cbd6ca21d4036f9d", - "count": 3, - "total_related": 50, - "prevalence": 0.06 - }, - { - "value": "1b97623ff5b7e17a91b511cf359d0f251565332a0528a97b8a7f005b6a5f0231", - "count": 3, - "total_related": 51, - "prevalence": 0.058823529411764705 - }, - { - "value": "01284076d83ddcbaffc60a3f618cc0f722aeaf1c18e561604a0d37aea8c81a38", - "count": 3, - "total_related": 52, - "prevalence": 0.057692307692307696 - }, - { - "value": "396ccc05d5851303b495451cf72f62b21090a5a107b4214990c88cf0de963f9f", - "count": 3, - "total_related": 77, - "prevalence": 0.03896103896103896 - }, - { - "value": "116fb96d2b6049d7a69977125b4535e8c6b3550f348059a4a19edaab4c8e3226", - "count": 3, - "total_related": 199, - "prevalence": 0.01507537688442211 - }, - { - "value": "318526b108539af55ec23b5a9720441d39e944e222e5322455a9845d99d4ad04", - "count": 3, - "total_related": 206, - "prevalence": 0.014563106796116505 - }, - { - "value": "4a584b1872fee633572a259954b6dccccb83a852fff8695e4f6bfeb01bd7b513", - "count": 3, - "total_related": 294, - "prevalence": 0.01020408163265306 - }, - { - "value": "3667adff0b9ae9d5eec43da31c987c49fe76bddc0686f911c629049025101a58", - "count": 3, - "total_related": 296, - "prevalence": 0.010135135135135136 - }, - { - "value": "43000554d89b3007f2022dd90b9a580d2ba0168832ae14ed9bd26f62034523f9", - "count": 3, - "total_related": 415, - "prevalence": 0.007228915662650603 - }, - { - "value": "22886badd125042377116aa598f58c0143cd2a3ee43c2693e99b718ccdfeb041", - "count": 3, - "total_related": 472, - "prevalence": 0.006355932203389831 - } - ], - "tags": [ - { - "value": "base64-embedded", - "count": 9 - }, - { - "value": "dom-modification", - "count": 9 - }, - { - "value": "external-resources", - "count": 9 - }, - { - "value": "iframes", - "count": 9 - } - ], - "tracker_ids": [ - { - "value": "G-7592W6XHM5", - "count": 7, - "total_related": 116, - "prevalence": 0.0603448275862069 - } - ] - } - }, - "alt_names_details": [ - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Babuk (Internet)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Babuk2 (Internet)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Braincipher (Group-IB)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "LockBit 3.0 (DuskRise Inc.)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Lockbit 3.0 (Infinitum IT)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Lockbit Black (Proofpoint)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Lockbitblack (Sophos)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Orion (Self)" - } - ], - "capabilities": [ - { - "confidence": "unconfirmed", - "description": "Capabilities associated with detecting or evading virtual machine or \"sandbox\" programs. \"Parent\" aspect used to contain specific sub-aspects.", - "first_seen": null, - "last_seen": null, - "value": "Anti-VM capabilities" - }, - { - "confidence": "unconfirmed", - "description": "Capable of detecting or evading VMWare virtual machines.", - "first_seen": null, - "last_seen": null, - "value": "Anti-VM: VMware" - }, - { - "confidence": "unconfirmed", - "description": "Capabilities associated with anti-debugging techniques.", - "first_seen": null, - "last_seen": null, - "value": "Anti-debug capabilities" - }, - { - "confidence": "unconfirmed", - "description": "Capable of booting the system in safe mode.", - "first_seen": null, - "last_seen": null, - "value": "Boots the system in safe mode" - }, - { - "confidence": "unconfirmed", - "description": "Capable of bypassing Mark-of-the-Web (MOTW).", - "first_seen": null, - "last_seen": null, - "value": "Bypass Mark-of-the-Web (MOTW)" - }, - { - "confidence": "unconfirmed", - "description": "Capable of bypassing Windows User Account Control (UAC).", - "first_seen": null, - "last_seen": null, - "value": "Bypass Windows UAC" - }, - { - "confidence": "unconfirmed", - "description": "Capable of calculating hashes using the Fowler\u00d0Noll\u00d0Vo (FNV) hash algorithm.", - "first_seen": null, - "last_seen": null, - "value": "Calculates FNV hashes" - }, - { - "confidence": "unconfirmed", - "description": "Capable of calculating hashes using the MD4 Message-Digest algorithm.", - "first_seen": null, - "last_seen": null, - "value": "Calculates MD4 hashes" - }, - { - "confidence": "unconfirmed", - "description": "Capable of calculating hashes using the MD5 message-digest algorithm.", - "first_seen": null, - "last_seen": null, - "value": "Calculates MD5 hashes" - }, - { - "confidence": "unconfirmed", - "description": "Capable of calculating hashes using the MurmurHash3 algorithm.", - "first_seen": null, - "last_seen": null, - "value": "Calculates MurmurHash3 hashes" - }, - { - "confidence": "unconfirmed", - "description": "Capable of calculating SHA-224 (224 bit) hashes.", - "first_seen": null, - "last_seen": null, - "value": "Calculates SHA-224 hashes" - }, - { - "confidence": "unconfirmed", - "description": "Capable of calculating SHA-256 (256 bit) hashes.", - "first_seen": null, - "last_seen": null, - "value": "Calculates SHA-256 hashes" - }, - { - "confidence": "unconfirmed", - "description": "Capable of calculating SHA-512 (512 bit) hashes.", - "first_seen": null, - "last_seen": null, - "value": "Calculates SHA-512 hashes" - }, - { - "confidence": "unconfirmed", - "description": "Can capture, mine, or enumerate data via WMI.", - "first_seen": null, - "last_seen": null, - "value": "Can mine data via WMI" - }, - { - "confidence": "unconfirmed", - "description": "Can capture or extract CPU information.", - "first_seen": null, - "last_seen": null, - "value": "Capture CPU information" - }, - { - "confidence": "unconfirmed", - "description": "Capable of enumerating or listing Group Policy Object (GPO) information.", - "first_seen": null, - "last_seen": null, - "value": "Capture Group Policy Object data" - }, - { - "confidence": "unconfirmed", - "description": "Can capture or extract Network Share information.", - "first_seen": null, - "last_seen": null, - "value": "Capture Network Share information" - }, - { - "confidence": "unconfirmed", - "description": "Can capture or extract disk information.", - "first_seen": null, - "last_seen": null, - "value": "Capture disk information" - }, - { - "confidence": "unconfirmed", - "description": "Can capture or extract network configuration information.", - "first_seen": null, - "last_seen": null, - "value": "Capture network configuration" - }, - { - "confidence": "unconfirmed", - "description": "Can capture or extract network interface information.", - "first_seen": null, - "last_seen": null, - "value": "Capture network interfaces" - }, - { - "confidence": "unconfirmed", - "description": "Can capture information about the system OS configuration.", - "first_seen": null, - "last_seen": null, - "value": "Capture operating system information" - }, - { - "confidence": "unconfirmed", - "description": "Can search for and capture payment card data.", - "first_seen": null, - "last_seen": null, - "value": "Capture payment card data" - }, - { - "confidence": "unconfirmed", - "description": "Can capture or extract various types of system information. Potentially includes a variety of data, including disk, network, or memory configuration; local user accounts; installed applications or patches; or the output of various system commands, such as 'sysinfo' or 'ipconfig' on Windows.", - "first_seen": null, - "last_seen": null, - "value": "Capture system information" - }, - { - "confidence": "unconfirmed", - "description": "Can capture or extract token information", - "first_seen": null, - "last_seen": null, - "value": "Capture token information" - }, - { - "confidence": "unconfirmed", - "description": "Capable of changing directories.", - "first_seen": null, - "last_seen": null, - "value": "Change directories" - }, - { - "confidence": "unconfirmed", - "description": "Capable of checking the HTTP response status code.", - "first_seen": null, - "last_seen": null, - "value": "Checks HTTP response status code" - }, - { - "confidence": "unconfirmed", - "description": "Can capture or record physical location.", - "first_seen": null, - "last_seen": null, - "value": "Collects physical location" - }, - { - "confidence": "unconfirmed", - "description": "Can communicate using HTTP or an HTTP-like protocol.", - "first_seen": null, - "last_seen": null, - "value": "Communicates using HTTP" - }, - { - "confidence": "unconfirmed", - "description": "Can communicate using remote procedure calls (RPC).", - "first_seen": null, - "last_seen": null, - "value": "Communicates using RPC" - }, - { - "confidence": "unconfirmed", - "description": "Can communicate using the Server Message Block (SMB) protocol.", - "first_seen": null, - "last_seen": null, - "value": "Communicates using SMB" - }, - { - "confidence": "unconfirmed", - "description": "Capable of interprocess communication between a pipe server and one or more pipe clients.", - "first_seen": null, - "last_seen": null, - "value": "Communicates using pipes" - }, - { - "confidence": "unconfirmed", - "description": "Capable of connecting via TCP socket.", - "first_seen": null, - "last_seen": null, - "value": "Connect to TCP socket" - }, - { - "confidence": "unconfirmed", - "description": "Capable of executing constructing (creating) a mutex.", - "first_seen": null, - "last_seen": null, - "value": "Constructs mutex" - }, - { - "confidence": "unconfirmed", - "description": "Capable of creating a Windows registry key.", - "first_seen": null, - "last_seen": null, - "value": "Create Windows registry key" - }, - { - "confidence": "unconfirmed", - "description": "Capable of creating a Windows registry key value.", - "first_seen": null, - "last_seen": null, - "value": "Create Windows registry key value" - }, - { - "confidence": "unconfirmed", - "description": "Capable of creating a socket.", - "first_seen": null, - "last_seen": null, - "value": "Create a socket" - }, - { - "confidence": "unconfirmed", - "description": "Capable of creating directories.", - "first_seen": null, - "last_seen": null, - "value": "Create directories" - }, - { - "confidence": "unconfirmed", - "description": "Can create (write) files on a victim system. Contrast with the ability to download files to the victim system.", - "first_seen": null, - "last_seen": null, - "value": "Create files" - }, - { - "confidence": "unconfirmed", - "description": "Capable of creating a thread.", - "first_seen": null, - "last_seen": null, - "value": "Create thread" - }, - { - "confidence": "unconfirmed", - "description": "Capable of creating a process, or uses APIs associated with creating a process.", - "first_seen": null, - "last_seen": null, - "value": "Creates processes" - }, - { - "confidence": "unconfirmed", - "description": "Capable of creating a process in the suspended state.", - "first_seen": null, - "last_seen": null, - "value": "Creates processes in suspended state" - }, - { - "confidence": "unconfirmed", - "description": "Can decrypt data that is encrypted using the AES encryption algorithm. May refer to decryption of data or files.", - "first_seen": null, - "last_seen": null, - "value": "Decrypts using AES" - }, - { - "confidence": "unconfirmed", - "description": "Capable of deleting a service or daemon.", - "first_seen": null, - "last_seen": null, - "value": "Delete a service" - }, - { - "confidence": "unconfirmed", - "description": "Can delete files on a victim system (normal delete, does not include secure deletion with overwriting).", - "first_seen": null, - "last_seen": null, - "value": "Delete files" - }, - { - "confidence": "unconfirmed", - "description": "Can delete Shadow Copy files (also known as Volume Snapshot Service, Volume Shadow Copy Service or VSS) on a victim system.", - "first_seen": null, - "last_seen": null, - "value": "Deletes Volume Shadow Copy files" - }, - { - "confidence": "unconfirmed", - "description": "Capable of deleting Windows registry values.", - "first_seen": null, - "last_seen": null, - "value": "Deletes Windows registry values" - }, - { - "confidence": "unconfirmed", - "description": "Capable of encoding data using Base64. May refer to encoding used for data or files.", - "first_seen": null, - "last_seen": null, - "value": "Encodes using Base64" - }, - { - "confidence": "unconfirmed", - "description": "Capabilities associated with the encoding of data. \"Parent\" aspect used to contain specific sub-aspects. Sub-aspects should refer to an encoding method (XOR, Base64) NOT an encryption algorithm.", - "first_seen": null, - "last_seen": null, - "value": "Encoding capabilities" - }, - { - "confidence": "unconfirmed", - "description": "Can encrypt or decrypt files on a victim system.", - "first_seen": null, - "last_seen": null, - "value": "Encrypt or decrypt files" - }, - { - "confidence": "unconfirmed", - "description": "Can encrypt data using the AES encryption algorithm. May refer to encryption used for data or files.", - "first_seen": null, - "last_seen": null, - "value": "Encrypts data with AES" - }, - { - "confidence": "unconfirmed", - "description": "Can encrypt data using the AES256 encryption algorithm. May refer to encryption used for data or files.", - "first_seen": null, - "last_seen": null, - "value": "Encrypts data with AES-256" - }, - { - "confidence": "unconfirmed", - "description": "Can encrypt data using the ChaCha, ChaCha12 or ChaCha20 stream ciphers. May refer to encryption used for data or files.", - "first_seen": null, - "last_seen": null, - "value": "Encrypts data with ChaCha" - }, - { - "confidence": "unconfirmed", - "description": "Can encrypt data using Curve25519. May refer to encryption used for data or files.", - "first_seen": null, - "last_seen": null, - "value": "Encrypts data with Curve25519" - }, - { - "confidence": "unconfirmed", - "description": "Can encrypt data using the RC4 stream cipher. May refer to encryption used for data or files.", - "first_seen": null, - "last_seen": null, - "value": "Encrypts data with RC4" - }, - { - "confidence": "unconfirmed", - "description": "Can encrypt data using the RSA cryptosystem. May refer to encryption used for data or files.", - "first_seen": null, - "last_seen": null, - "value": "Encrypts data with RSA" - }, - { - "confidence": "unconfirmed", - "description": "Can encrypt data using the Salsa20 stream cipher. May refer to encryption used for data or files.", - "first_seen": null, - "last_seen": null, - "value": "Encrypts data with Salsa20" - }, - { - "confidence": "unconfirmed", - "description": "Can encrypt data using XChaCha20 block cipher. May refer to encryption used for data or files.", - "first_seen": null, - "last_seen": null, - "value": "Encrypts data with XChaCha20" - }, - { - "confidence": "unconfirmed", - "description": "Capable of encoding data using XOR.", - "first_seen": null, - "last_seen": null, - "value": "Encrypts data with XOR" - }, - { - "confidence": "unconfirmed", - "description": "Capabilities associated with event logs. \"Parent\" aspect used to contain specific sub-aspects.", - "first_seen": null, - "last_seen": null, - "value": "Event Log Capabilities" - }, - { - "confidence": "unconfirmed", - "description": "Can execute a specified file (e.g., a downloaded file, as opposed to an interactive command).", - "first_seen": null, - "last_seen": null, - "value": "Execute files" - }, - { - "confidence": "unconfirmed", - "description": "Capable of executing a command-line command (as opposed to executing a file).", - "first_seen": null, - "last_seen": null, - "value": "Executes commands from the command line" - }, - { - "confidence": "unconfirmed", - "description": "Capabilities associated with operations on files. \"Parent\" aspect used to contain specific sub-aspects.", - "first_seen": null, - "last_seen": null, - "value": "File manipulation" - }, - { - "confidence": "unconfirmed", - "description": "Can find files on a victim system based on some criteria (e.g., file name, extension, last modified date).", - "first_seen": null, - "last_seen": null, - "value": "Find files" - }, - { - "confidence": "unconfirmed", - "description": "Capable of searching for or identifying specific file resources, or uses APIs associated with resource location.", - "first_seen": null, - "last_seen": null, - "value": "Finds file resources" - }, - { - "confidence": "unconfirmed", - "description": "Capable of getting or retrieving the common file path.", - "first_seen": null, - "last_seen": null, - "value": "Gets common file path" - }, - { - "confidence": "unconfirmed", - "description": "Capable of getting a file attribute.", - "first_seen": null, - "last_seen": null, - "value": "Gets file attribute" - }, - { - "confidence": "unconfirmed", - "description": "Capable of hiding a thread.", - "first_seen": null, - "last_seen": null, - "value": "Hides thread" - }, - { - "confidence": "unconfirmed", - "description": "Capable of hiding specified windows.", - "first_seen": null, - "last_seen": null, - "value": "Hides windows" - }, - { - "confidence": "unconfirmed", - "description": "Capable of logging keystrokes via polling.", - "first_seen": null, - "last_seen": null, - "value": "Keylog via polling" - }, - { - "confidence": "unconfirmed", - "description": "The Server Message Block (SMB) Protocol is a network file sharing protocol, and as implemented in Microsoft Windows is known as Microsoft SMB Protocol. Adversaries may utilize this protocol (or exploit it) to move laterally through an environment.", - "first_seen": null, - "last_seen": null, - "value": "Lateral movement via SMB" - }, - { - "confidence": "unconfirmed", - "description": "Windows systems have hidden network shares (ex. C$, ADMIN$, and IPC$) that are accessible only to administrators and provide the ability for remote file copy and other administrative functions. Adversaries may use this technique with administrator-level Valid Accounts to remotely access a networked system over SMB to interact with systems using RPCs, transfer files, and run transferred binaries through remote execution.", - "first_seen": null, - "last_seen": null, - "value": "Lateral movement via admin network shares" - }, - { - "confidence": "unconfirmed", - "description": "Capable of listing directories or directory contents.", - "first_seen": null, - "last_seen": null, - "value": "List directories" - }, - { - "confidence": "unconfirmed", - "description": "Capable of listing file sizes on a victim system.", - "first_seen": null, - "last_seen": null, - "value": "List file sizes" - }, - { - "confidence": "unconfirmed", - "description": "Capable of listing file versions on a victim system.", - "first_seen": null, - "last_seen": null, - "value": "List file versions" - }, - { - "confidence": "unconfirmed", - "description": "Can list files on a victim system.", - "first_seen": null, - "last_seen": null, - "value": "List files" - }, - { - "confidence": "unconfirmed", - "description": "Capable of listing the installed services or daemons on a computer.", - "first_seen": null, - "last_seen": null, - "value": "List services" - }, - { - "confidence": "unconfirmed", - "description": "Capable of listing drives.", - "first_seen": null, - "last_seen": null, - "value": "Lists drives" - }, - { - "confidence": "unconfirmed", - "description": "Capable of listing running processes.", - "first_seen": null, - "last_seen": null, - "value": "Lists processes" - }, - { - "confidence": "unconfirmed", - "description": "Can lock files on a victim system.", - "first_seen": null, - "last_seen": null, - "value": "Locks files" - }, - { - "confidence": "unconfirmed", - "description": "Capable of locking a mutex.", - "first_seen": null, - "last_seen": null, - "value": "Locks mutex" - }, - { - "confidence": "unconfirmed", - "description": "Can move files on a victim system.", - "first_seen": null, - "last_seen": null, - "value": "Move files" - }, - { - "confidence": "unconfirmed", - "description": "Capable of opening Windows registry keys.", - "first_seen": null, - "last_seen": null, - "value": "Open Windows registry key" - }, - { - "confidence": "unconfirmed", - "description": "Methodologies associated with overwriting or wiping file data by empyting the Recycle Bin quietly.", - "first_seen": null, - "last_seen": null, - "value": "Overwrite or wipe file data by emptying Recycle Bin quietly" - }, - { - "confidence": "unconfirmed", - "description": "Capable of process injection, or uses APIs associated with injecting code into another process.", - "first_seen": null, - "last_seen": null, - "value": "Performs process injection" - }, - { - "confidence": "unconfirmed", - "description": "Capable of persistence via a Windows registry Run keys.", - "first_seen": null, - "last_seen": null, - "value": "Persistence via Windows registry Run key" - }, - { - "confidence": "unconfirmed", - "description": "Capabilities associated with pseudorandom number generation (PRNG). \"Parent\" aspect used to contain specific sub-aspects.", - "first_seen": null, - "last_seen": null, - "value": "Psuedo random number generation capabilities" - }, - { - "confidence": "unconfirmed", - "description": "Capable of querying Windows registry key values.", - "first_seen": null, - "last_seen": null, - "value": "Query Windows registry key values" - }, - { - "confidence": "unconfirmed", - "description": "Threat actor methodologies associated with querying service information.", - "first_seen": null, - "last_seen": null, - "value": "Query service information" - }, - { - "confidence": "unconfirmed", - "description": "Can read files on a victim system.", - "first_seen": null, - "last_seen": null, - "value": "Read files" - }, - { - "confidence": "unconfirmed", - "description": "Can rename files on a victim system.", - "first_seen": null, - "last_seen": null, - "value": "Rename files" - }, - { - "confidence": "unconfirmed", - "description": "Capable of scanning for Server Message Block (SMB).", - "first_seen": null, - "last_seen": null, - "value": "Scans SMB" - }, - { - "confidence": "unconfirmed", - "description": "The binary can delete itself.", - "first_seen": null, - "last_seen": null, - "value": "Self-delete" - }, - { - "confidence": "unconfirmed", - "description": "The binary can update itself.", - "first_seen": null, - "last_seen": null, - "value": "Self-update" - }, - { - "confidence": "unconfirmed", - "description": "Capable of changing or setting the session wallpaper or desktop background.", - "first_seen": null, - "last_seen": null, - "value": "Sets Wallpaper" - }, - { - "confidence": "unconfirmed", - "description": "Capable of setting a file attribute.", - "first_seen": null, - "last_seen": null, - "value": "Sets file attribute" - }, - { - "confidence": "unconfirmed", - "description": "The binary can limit execution during specified period of time, such as only during weekdays and likely work hours. This capability is distinct from sleeping for a set period of time.", - "first_seen": null, - "last_seen": null, - "value": "Sleep Time Execution" - }, - { - "confidence": "unconfirmed", - "description": "Capable of starting a service or daemon.", - "first_seen": null, - "last_seen": null, - "value": "Start a service" - }, - { - "confidence": "unconfirmed", - "description": "Capable of stopping a service or daemon.", - "first_seen": null, - "last_seen": null, - "value": "Stop a service" - }, - { - "confidence": "unconfirmed", - "description": "Capable of Windows eventlog tampering.", - "first_seen": null, - "last_seen": null, - "value": "Tampers with Windows eventlog" - }, - { - "confidence": "unconfirmed", - "description": "Capable of killing a running process.", - "first_seen": null, - "last_seen": null, - "value": "Terminates processes" - }, - { - "confidence": "unconfirmed", - "description": "Capabilities associated with the linear congruential generator (LCG) algorithm in Delphi.", - "first_seen": null, - "last_seen": null, - "value": "Uses Linear Congruential Generator (LCG) algorithm in Delphi" - }, - { - "confidence": "unconfirmed", - "description": "Capable of using Windows Management Instrumentation APIs to execute an arbitrary command.", - "first_seen": null, - "last_seen": null, - "value": "Uses WMI to execute a command" - }, - { - "confidence": "unconfirmed", - "description": "Can decompress content using the apLib compression library. May refer to decompression used for data, files, or as part of network communications.", - "first_seen": null, - "last_seen": null, - "value": "Uses apLib decompression" - }, - { - "confidence": "unconfirmed", - "description": "Capable of obtaining configuration data (including C2 locations) from data that is hard-coded within the binary.", - "first_seen": null, - "last_seen": null, - "value": "Uses hard-coded configuration data" - }, - { - "confidence": "unconfirmed", - "description": "Capabilities associated with the Windows registry. \"Parent\" aspect used to contain specific sub-aspects.", - "first_seen": null, - "last_seen": null, - "value": "Windows registry capabilities" - }, - { - "confidence": "unconfirmed", - "description": "Capable of overwriting or wiping log data, either selected log entries or entire logs.", - "first_seen": null, - "last_seen": null, - "value": "Wipes or overwrites logs" - }, - { - "confidence": "unconfirmed", - "description": "Capable of writing to addresses in memory.", - "first_seen": null, - "last_seen": null, - "value": "Writes memory" - }, - { - "confidence": "unconfirmed", - "description": "Can write to log files on a victim system.", - "first_seen": null, - "last_seen": null, - "value": "Writes to log files" - } - ], - "detection_names": [ - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Win.Ransomware.LockBitCombined-9375766-1 (ClamAV)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Ransomware.MSIL.Lkbit.FEC2 (Trellix)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "FE_Ransomware_Win_Generic_10 (Trellix)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "ET TROJAN VMProtect Packed Binary Inbound via HTTP - Likely Hostile (ET OPEN)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Trojan-Ransom/Win32.wanna.xn (Palo Alto Networks)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "FE_Virus_Win32_Neshta_1.FEC2 (Trellix)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "MALWARE-OTHER Win.Ransomware.LockBit ransomware download attempt (Talos)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Win.Trojan.Obfus-43 (ClamAV)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "ET POLICY HTTP Request on Unusual Port Possibly Hostile (ET OPEN)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Virus/Win32.WGeneric.bkcxlt (Palo Alto Networks)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Ransomware.Win32.LOCKBIT.FEC2 (Trellix)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "ET INFO Executable Download from dotted-quad Host (ET OPEN)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Malware/Win32.msilinj.dsw (Palo Alto Networks)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "MALWARE-OTHER Windows Management Instrumentation manipulation attempt (Talos)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Malware/Win32.msilinj.dsj (Palo Alto Networks)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "trojan/Win32 EXE.lokibot.br (Palo Alto Networks)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "trojan/Win32 EXE.encoder.ua (Palo Alto Networks)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "(http_inspect) unknown Content-Encoding used (Cisco Firepower)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "ET TROJAN UPX compressed file download possible malware (ET OPEN)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "trojan/Win32 EXE.bscope.bzy (Palo Alto Networks)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Virus.Win32.Neshta.FEC2 (Trellix)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "FE_Ransomware_Win32_LOCKBIT_1 (Trellix)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "FE_Ransomware_Win_LOCKBIT_1 (Trellix)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Win.Ransomware.Lockbit-9886605-0 (ClamAV)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "ET POLICY PE EXE or DLL Windows file download HTTP (ET OPEN)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "FE_Ransomware_Win_Generic_8 (Trellix)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "FILE-EXECUTABLE Portable Executable binary file magic detected (Cisco Firepower)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Ransomware.Win.LOCKBIT.MVX.FEC2 (Trellix)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "FE_Ransomware_Win32_LOCKBIT_2 (Trellix)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "ransomware/Win32 EXE.wanna.xj (Palo Alto Networks)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "ET TROJAN Single char EXE direct download likely trojan (multiple families) (ET OPEN)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "FE_Ransomware_Win32_LOCKBIT_1.FEC2 (Trellix)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "FE_Virus_Win32_Neshta_1 (Trellix)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "ET CURRENT_EVENTS Terse alphanumeric executable downloader high likelihood of being hostile (ET OPEN)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Win.Ransomware.Lockbit-7724445-0 (ClamAV)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Ransomware.MSIL.Lockbit.FEC2 (Trellix)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "ET INFO Packed Executable Download (ET OPEN)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Win.Trojan.Neshuta-1 (ClamAV)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "FE_HackTool_Win_UACMEBypass43_1 (Trellix)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "FE_Trojan_Win_Generic_159 (Trellix)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Virus/Win32.WGeneric.bifqnm (Palo Alto Networks)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "ET INFO SUSPICIOUS Dotted Quad Host MZ Response (ET OPEN)" - } - ], + "aggregations": {}, + "alt_names_details": [], + "capabilities": [], + "detection_names": [], "first_seen_details": [], "last_seen_details": [ { @@ -24572,7 +55,7 @@ "description": null, "first_seen": null, "last_seen": null, - "value": "2024-10-11T19:14:35Z" + "value": "2024-11-12T20:15:36Z" } ], "malware_roles": [ diff --git a/external-import/google-ti-feeds/tests/custom/debug_responses/main_reports_1db15afcd82769e5.json b/external-import/google-ti-feeds/tests/custom/debug_responses/main_reports_1db15afcd82769e5.json index 7611056ee8a..8cfcd9da022 100644 --- a/external-import/google-ti-feeds/tests/custom/debug_responses/main_reports_1db15afcd82769e5.json +++ b/external-import/google-ti-feeds/tests/custom/debug_responses/main_reports_1db15afcd82769e5.json @@ -12,21 +12,21 @@ "response": { "data": [ { - "id": "report--24-10020775", + "id": "report--25-20031886", "type": "collection", "links": { - "self": "https://www.virustotal.com/api/v3/collections/report--24-10020775", + "self": "https://www.virustotal.com/api/v3/collections/report--25-20031886", "next": null }, "attributes": { - "report_id": "24-10020775", - "name": "Cyber Physical Threat Actor Spotlight: Hunt3rKill3rs", + "report_id": "25-20031886", + "name": "Cyber Physical Threat Actor Spotlight: D0l0rIps4m", "author": "", "collection_type": "report", - "creation_date": 1720728301, + "creation_date": 1721837412, "last_modification_date": 1720728301, - "content": "

Hunt3rKill3rs is a hacktivist threat group actively targeting and compromising internet-accessible operational technology (OT) devices across various industries and countries. They gain unauthorized access to OT devices directly via the browser (HTTP) and/or through remote services, likely by exploiting weak or default credentials. With this access they alter device configurations, including changing passwords, creating new users, and manipulating human-machine interface (HMI) controls. They also deface compromised devices by changing text fields and creating users with their group's name or political messaging. Their operations span multiple countries, including European nations, Israel, and the United States. We assess this group poses a moderate risk to OT assets due to their explicit targeting of OT and limited capabilities that we have so far seen demonstrated against what are probably improperly secured and internet-accessible OT assets.

  • We have observed Hunt3rKill3rs' claims of accessing and manipulating OT assets since mid-2024. To date, their claims are normally posted to their Telegram channel (https://t.me/Hunt3rkill3rs1) and include politically motivated messaging and screenshots showing a threat actor interacting with HMIs, programmable logic controllers (PLC), IP cameras, and a variety of other internet-exposed devices. The posts often contain a mixture of both Russian and English language.

  • The interactions with the devices are frequently haphazard; the operator appears to be discovering the control panel in real time as they make mistakes changing settings and click buttons just to change the state of various components. The screenshots included in their posts often include configuration details and defacement.

  • Hunt3rKill3rs has conducted this type of operation against water and wastewater systems, building automation, and a variety of miscellaneous ICS/OT oriented devices. The group has unlikely achieved impactful real-world effects, and their claims are often overstated.

Figure 1: Hunt3rKill3rs' OT risk level

OT Threat Activity

We track and assess threat activity impacting OT environments to determine the actor's motivation and capacity to impact control systems and physical processes. See our Operational Technology Cyber Security Incident Ontology (OT-CSIO) for more information on our methodology for assessing OT incidents.\u00a0

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n

Date

Description

6/28/2024

Hunt3rKill3rs claimed to have compromised an HMI used to control a greenhouse likely located in Germany. The actor's Telegram post included multiple screenshots of the HMI's display, and the device's language was set to German.

6/26/2024

Hunt3rKill3rs claimed to have compromised various make/model Bosch IP cameras and likely a Schneider Electric Easergy T200P RTU. The actor's Telegram post included multiple screenshots of configuration details for the RTU and suggests that the device may be located in a French-speaking country based on the included display text. The IP cameras accessed are likely random and not related.

6/24/2024

Hunt3rKill3rs claimed to have compromised an Allen Bradley 1763-L16DWD MicroLogix 1100 programmable logic controller (PLC) in an unknown location. The actor's Telegram post included multiple screenshots of configuration details for the device and suggests that the actor likely changed the device's password.

6/20/2024

Hunt3rKill3rs claimed to have compromised a Schneider Electric Smart Home Light Switch/Socket in Germany. The actor's Telegram post included multiple screenshots of configuration details for a Schneider Electric Merten System M.

6/19/2024

Hunt3rKill3rs claimed to have compromised a Schneider Electric ethernet gateway located in the U.S. The actor's Telegram post included multiple screenshots of configuration details for a Schneider Electric PowerLogic EGX100 ethernet gateway. The actor also defaced the gateway by changing several configuration text fields to and creating new users named \"Hunt3rKill3rs.\"

6/16/2024

Hunt3rKill3rs claimed to have compromised a Schneider Electric power meter in Germany. The actor's Telegram post included multiple screenshots of configuration details for a Schneider Electric PowerLogic ION7650. The actor also defaced the meter by changing several configuration text fields to \"Hunt3rKill3rs.\"

6/10/2024

Hunt3rKill3rs claimed to have access and compromised an Elnet energy meter. The Telegram post includes multiple screenshots of an Elnet MC1 multi-channel power and energy meter LCD display and a defaced image/meter statement containing the text \"Hacked by Hunt3rKill3rs.\"

6/10/2024

Hunt3rKill3rs created multiple Telegram posts claiming to have compromised multiple Moxa devices. The actor shared a number of screenshots displaying Moxa EtherDevice Switch series EDS-518E and system configuration details. The actor is likely creating an EtherDevice switch under the name of Hunt3rKill3rs in the system and also shared additional screenshots of operation modes and network settings. The actor included a list of devices accessed along with credentials created on the system. All three devices included in the post geolocate to the United States.

6/9/2024

Hunt3rKill3rs claimed to have compromised a Unitronics HMI within the country of Israel. The actor shared multiple screenshots of an HMI display containing Hebrew language along with the name Reservoir Givat Oz (translated). The images detail associated pumps, malfunction overloads, engine overheating, low pressure, and a regulator in ready mode. The actor included two IP addresses that both geolocate to Israel, claiming to be related to their message.

6/7/2024

Hunt3rKill3rs claimed to have targeted multiple devices belonging to countries that support NATO and Israel. The Telegram post includes several screenshots of varying device types and vendors including but not limited to: a Beralam b700, a SpiderControl SCADA web licensing server, a Strip Panels emissions and energy systems display\u2014possibly located in the City of Beverly Hills in the U.S.\u2014and several unidentifiable devices.

6/6/2024

Hunt3rKill3rs shared multiple screenshots of Unitronics and Siemens PLC and HMI systems belonging to unknown targets in Sweden. The images shown include boiler, radiator, and alarm system HMI displays and a Siemens SIMATIC 1200 PLC web display. The actor also claims to have targeted a large number of Mobotix cameras installed across Sweden.

6/1/2024

Hunt3rKill3rs claimed to have targeted multiple water supply systems using Unitronics products/equipment and other devices. The actor shared multiple screenshots from the victims' devices. Visible names include Anderson StormWater Treatment, Municipality of Saint-Fabien-De-Panet, Lake Down Sub-Basin, and Apex Energies. Devices include an Unitronics V570 HMI, likely a smart meter, a Turck Cloud Portal display, and various unidentifiable devices. The actor also included images detailing configuration changes and defacements in text fields.

5/23/2024

Hunt3rKill3rs claim to have accessed and manipulated a Siemens PLC product, SIMATIC S7 CP. Additionally, the actors posted screenshots of devices accessed, including but not limited to: Siemens SIMATIC S7 CP, Cisco SPA504G, and 750-880 WAGO PLC. In a separate post the group claims access to Unitronics PLCs and shares a number of screenshots showing PLC data and images containing French language. One of the images again shows \"lavagepro.com,\" which was previously referenced within another claim in May 15, 2024, by the group. We suspect the actor is scanning for internet-accessible OT with remote services enabled.

5/15/2024

Hunt3rKill3rs claims to have accessed and manipulated multiple internet-accessible OT devices in Europe and Israel. The actor posted screenshots of additional devices accessed, including but not limited to: Unitronics PLC, Siemens S7-1500/1200, Mobotix cameras, and Schneider Electric PowerLogic ION7650. In many of the screenshots, the actor shows the changes made to the device and in some images, suspected manipulation of the HMI controls.\u00a0

\n

Table 1: Hunt3rKill3rs activity against OT

Critical Infrastructure Industry Targeting

We track threat activity against industrial and critical infrastructure industries as a warning indicator to identify threat actors who may show a potential interest in targeting OT environments. We have observed Hunt3rKill3rs claim to affect OT assets in a few of these industries.

  • Energy & Utilities

  • Water and Wastewater Treatment

  • Building Automation

  • Internet of Things (IoT)

Malware and Tools

We track malware and tool capabilities that pose a heightened risk to OT environments, such as OT-oriented capabilities, disruptive and destructive functionality, worm-like features, and supply chain trojans. We have not seen evidence of Hunt3rKill3rs using any malware or toolsets.

Appendix: MITRE ATT&CK for ICS Mapping

Initial Access

Initial access consists of techniques that adversaries may use as entry vectors to gain an initial foothold within an ICS environment.\u00a0

  • T0883: Internet Accessible Device

  • T0822: External Remote Services

Execution

Execution consists of techniques that result in adversary-controlled code running on a local or remote system, device, or other asset.\u00a0

  • T0823: Graphical User Interface

Persistence

Persistence consists of techniques that adversaries use to maintain access to ICS systems and devices across restarts, changed credentials, and other interruptions that could cut off their access. We have not observed Hunt3rKill3rs employ techniques defined in this tactic.

Privilege Escalation

Privilege Escalation consists of techniques that adversaries use to gain higher-level permissions on a system or network. We have not observed Hunt3rKill3rs employ techniques defined in this tactic.

Evasion

Evasion consists of techniques that adversaries use to avoid detection by both human operators and technical defenses throughout their compromise. We have not observed Hunt3rKill3rs employ techniques defined in this tactic.

Discovery

Discovery consists of techniques that adversaries use to survey your ICS environment and gain knowledge about the internal network, control system devices, and how their processes interact. We have not observed Hunt3rKill3rs employ techniques defined in this tactic.

Lateral Movement

Lateral movement consists of techniques that adversaries use to enter and control remote systems on a network. We have not observed Hunt3rKill3rs employ techniques defined in this tactic.

Collection\u00a0

Collection consists of techniques adversaries use to gather domain knowledge and obtain contextual feedback in an ICS environment.

  • T0852: Screen Capture

Command and Control

Command and control consists of techniques that adversaries use to communicate with and send commands to compromised systems, devices, controllers, and platforms with specialized applications used in ICS environments. We have not observed Hunt3rKill3rs employ techniques defined in this tactic.

Inhibit Response Function

Inhibit Response Function consists of techniques that adversaries use to hinder the safeguards put in place for processes and products. We have not observed Hunt3rKill3rs employ techniques defined in this tactic.

Impair Process Control

Impair Process Control consists of techniques that adversaries use to disrupt control logic and cause detrimental effects to processes being controlled in the target environment.\u00a0

  • T0836: Modify Parameter

Impact

Impact consists of techniques that adversaries use to disrupt, compromise, destroy, and manipulate the integrity and availability of control system operations, processes, devices, and data.\u00a0

  • T0831: Manipulation of Control

", - "executive_summary": "

  • This report is part of the Cyber Physical Threat Actor Spotlight series, which provides targeted overviews of actors that Mandiant believes pose heightened risk to operational technology (OT) environments.

  • Hunt3rKill3rs is a hacktivist threat actor that Mandiant has tracked since mid-2024. The group poses a moderate risk to OT environments due to their explicit targeting of and ability to access and manipulate internet-accessible OT assets.

", + "content": "

D0l0rIps4m is a hacktivist threat group actively targeting and compromising internet-accessible operational technology (OT) devices across various industries and countries. They gain unauthorized access to OT devices directly via the browser (HTTP) and/or through remote services, likely by exploiting weak or default credentials. With this access they alter device configurations, including changing passwords, creating new users, and manipulating human-machine interface (HMI) controls. They also deface compromised devices by changing text fields and creating users with their group's name or political messaging. Their operations span multiple countries, including Eastern European nations, Israel, and the United States. We assess this group poses a moderate risk to OT assets due to their explicit targeting of OT and limited capabilities that we have so far seen demonstrated against what are probably improperly secured and internet-accessible OT assets.

  • We have observed D0l0rIps4m's claims of accessing and manipulating OT assets since mid-2024. To date, their claims are normally posted to their Telegram channel (https://t.me/D0l0rIps4m1) and include politically motivated messaging and screenshots showing a threat actor interacting with HMIs, programmable logic controllers (PLC), IP cameras, and a variety of other internet-exposed devices. The posts often contain a mixture of both Russian and English language.

  • The interactions with the devices are frequently haphazard; the operator appears to be discovering the control panel in real time as they make mistakes changing settings and click buttons just to change the state of various components. The screenshots included in their posts often include configuration details and defacement.

  • D0l0rIps4m has conducted this type of operation against water and wastewater systems, building automation, and a variety of miscellaneous ICS/OT oriented devices.

", + "executive_summary": "

  • This report is part of the Cyber Physical Threat Actor Spotlight series, which provides targeted overviews of actors that Lorem Ipsum believes pose heightened risk to operational technology (OT) environments.

  • D0l0rIps4m is a hacktivist threat actor that Lorem Ipsum has tracked since mid-2024. The group poses a moderate risk to OT environments due to their explicit targeting of and ability to access and manipulate internet-accessible OT assets.

", "autogenerated_summary": "The campaign targeted internet-accessible operational technology (OT) devices across various industries and countries. Attackers gained unauthorized access via HTTP and remote services, altering device configurations, creating new users, and defacing devices with political messaging. Compromised devices included HMIs, PLCs, IP cameras, and other ICS/OT devices. The attackers modified device parameters and manipulated HMI controls. No malware was used.\n", "analyst_comment": "", "report_type": "Actor Profile", @@ -35,7 +35,7 @@ "link": null, "version": 1, "private": true, - "origin": "Google Threat Intelligence", + "origin": "Lorem Ipsum Threat Intelligence", "affected_systems": [ "Users/Application and Software", "Enterprise/Application Layer", @@ -89,8 +89,8 @@ "source_regions_hierarchy": [ { "confidence": "possible", - "country": "Russian Federation", - "country_iso2": "RU", + "country": "Belarus", + "country_iso2": "BY", "description": null, "first_seen": null, "last_seen": null, diff --git a/external-import/google-ti-feeds/tests/custom/debug_responses/main_threat_actors_000ea298d290dbef.json b/external-import/google-ti-feeds/tests/custom/debug_responses/main_threat_actors_000ea298d290dbef.json index 36f55bf0072..cbd37a23acf 100644 --- a/external-import/google-ti-feeds/tests/custom/debug_responses/main_threat_actors_000ea298d290dbef.json +++ b/external-import/google-ti-feeds/tests/custom/debug_responses/main_threat_actors_000ea298d290dbef.json @@ -12,28 +12,28 @@ "response": { "data": [ { - "id": "threat-actor--9382a805-c571-55b4-be0e-327e9ea0c287", + "id": "threat-actor--a493b916-d682-66c5-cf1f-438fab1bd398", "type": "collection", "links": { - "self": "https://www.virustotal.com/api/v3/collections/threat-actor--9382a805-c571-55b4-be0e-327e9ea0c287" + "self": "https://www.virustotal.com/api/v3/collections/threat-actor--a493b916-d682-66c5-cf1f-438fab1bd398" }, "attributes": { - "name": "UNC1069", + "name": "UNC2180", "collection_type": "threat-actor", - "creation_date": 1523610012, + "creation_date": 1524719123, "last_modification_date": 1748919812, - "description": "UNC1069 is a suspected North Korean financial crime group, which may be related to APT38 with low confidence. UNC1069 has targeted a variety of financial services firms and cryptocurrency exchanges. UNC1069 commonly uses spearphishing that leads to a LONEJOGGER shortcut file, which can lead to UNC1069's non-public implants such as LONERUNNER, WHITEHAUL, or POWERHOUSE. UNC1069 has been active since at least 2018.", + "description": "UNC2180 is a suspected Eastern European financial crime group, which may be related to APT49 with low confidence. UNC2180 has targeted a variety of financial services firms and cryptocurrency exchanges. UNC2180 commonly uses spearphishing that leads to a LONEWALKER shortcut file, which can lead to UNC2180's non-public implants such as LONEDRIFTER, COLDHAUL, or POWERVAULT. UNC2180 has been active since at least 2019.", "status": "COMPUTED", "private": true, - "origin": "Google Threat Intelligence", + "origin": "Lorem Ipsum Threat Intelligence", "recent_activity_relative_change": 1.9457420050305427, "recent_activity_summary": [ 59, 316, 540, 507, 951, 709, 469, 779, 549, 831, 656, 694, 746, 392 ], "top_icon_md5": [ - "bb8dda782cb853ef71ac5ca2884d83e1", - "5f2f851c5be5527f9c29ee0c9db1bd18", - "3565ac5b0aa3ef8ef171bc6eed76a133" + "cc9eeb893dc964f82bd6d3e9dce1074f2", + "6f3f962d6cf6638f0d41ff539166ff29f", + "4676bc6c1bb4ff9ff282cd7fffe87d44" ], "counters": { "attack_techniques": 146, @@ -44,35631 +44,119 @@ "subscribers": 13, "urls": 1183 }, - "aggregations": { - "domains": { - "attributions": [ - { - "value": "lonejogger", - "count": 60, - "total_related": 62, - "prevalence": 0.967741935483871 - }, - { - "value": "covertcatch", - "count": 3, - "total_related": 6, - "prevalence": 0.5 - }, - { - "value": "flatdirt", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "powerdown", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "rustbucket", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "todoswift", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "hiddenagent", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "lonerunner", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "shortfawn", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "tallcoral", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - } - ], - "communicating_files": [ - { - "value": "b4fda30ad9b618c0bf53c984b4a9d15b40e02b67b252bd437748b91a92baaa06", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "e02390851dbd552f4279c44f396402af47808e6702dce29cfb6d3421f2af0ccd", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "a8cc70bcd0ef98e3eea54f953166f518a2cf1d898e4eb9e85cf70861f8ec7578", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "178a81904017a5b53f378821225ee5d6e436834b1e9e4c9f0ce50805ac36ca37", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "51d53ca36a662b4aad5878987548f0f22f2a53545790577d8043373b6bf7eb75", - "count": 3, - "total_related": 6, - "prevalence": 0.5 - }, - { - "value": "1d29dd1043a7368664abe71761a8222cd7aeab83a9bac787bb3818cbb5c6d6dd", - "count": 3, - "total_related": 9, - "prevalence": 0.3333333333333333 - }, - { - "value": "20479e443d1754961f6a0096bab20522845c628d2f16f9134373387b7d6d953d", - "count": 3, - "total_related": 9, - "prevalence": 0.3333333333333333 - }, - { - "value": "a277c4403c46a1894daae4b90bed893e8b2281fe938a2cbcdaa09bbd2ec20d94", - "count": 3, - "total_related": 9, - "prevalence": 0.3333333333333333 - }, - { - "value": "c31cbb849b8562a7c2801724c2a03369be7b459ff789c451e432844da5d47101", - "count": 3, - "total_related": 9, - "prevalence": 0.3333333333333333 - }, - { - "value": "eb913458d3d659ed9feed0e88bbfa2f10a86fac3e39a2c0f096916d21b6aa7d5", - "count": 3, - "total_related": 9, - "prevalence": 0.3333333333333333 - }, - { - "value": "6db3439c1c1b3b88cce4095b1890a60626e9732413028cfe1c9f249929dab25b", - "count": 3, - "total_related": 16, - "prevalence": 0.1875 - }, - { - "value": "44ee3551f27314a1f2b97d15988dfbc1af65ae494af92f15271929fdfc30ea29", - "count": 3, - "total_related": 17, - "prevalence": 0.17647058823529413 - }, - { - "value": "e9894893a8a1f74d7d6a8768dda9ef5ddaf8aac18634a1110e9a79652c9f13ee", - "count": 3, - "total_related": 18, - "prevalence": 0.16666666666666666 - }, - { - "value": "026285f0d28897ce8f5c980ee326d9a379a5170bf4083b2ea670d434e591d921", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "1411c8f084179eb44bb14a24859a190945cea5c723c3e01f742a0885d8cb97d2", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "184fba6160521bd8c345d327e42ad2804dca419edec5657a859be78b82c1d98b", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "1fba098a58f8326c59b39045c3f07a1adce1bbfa23225e240e0f6fc5a2b2605d", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "208bbf9e939b0fb9ac9551ba2c51d93ab8d8ea6723e93ceae5ce6c36309c400d", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "31638e7ea1b7f0b9829656c15956b83d8397270ca51706c5a4e1cfd1f3e4892e", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "3734cf8e76683834f2bdf863670262cd36b01cb140f8fc42d143c10d9a2c4023", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "39db73a999d58072dab20d1e6f3a0a9336f4e58e164fb42c6de83a8cc75b2555", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "4906c6294ac0d3510b0a89d840f11dbcfe6dadcf708feefbaa7f7ed2a4deb5d6", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "50320e2cff68bdcfa114879334804e3300433908c18a662ed2c37705d2852bac", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "51adde173872ba7378019324aca46e17e222d7b093518df6ad9d330324e113b2", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "52b2b9f5bad69e3d4acf348d4dcfc71e9bdd882ba94711fa9f202fc78e0390f7", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "57099b79a9824765f8be07471ec33c4cc0799abd877637a2a85affc50e163b1b", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "5ca7c871dfe24b27b5cf7e9bf087f44c7620d78a1d4fa76373f22abedbdf8f82", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "69cf309f71c3240525d00a14be5d0390c99313e24b0b6fef1d034f90c69cdd3d", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "6a1ad59d8b27d49ca1b55f1ec270f502d86da5a73e2ccfe0f32128cf7d050678", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "01184a5acb8b3ec56c9e90f2e6cd6673ae83b4fd6982e17329b33da2f77bcf5b", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "03cd4ec3defa490e68b1ca2efaf8daea6f89d3cceed51c91f4c4f9e2222d258d", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "105f7c94212cd6d4f94d5889bcc6468f448e9b1ea5f5f051809a4277f816e6ea", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "1454e53a6ffe2182be96391fb6f2cb5783142e2e0e03f26abab027e9c296088e", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "292207998d2aced2a7d8dcbbb43a5fded2f5a27cf590f43c0eb800341b237fce", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "2b3fb6bda062f520155d55603e723ea927cfe6367fcc2eb67aa317790f86704e", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "3eef99e47c53edcca574b3ca684be958ac5c1867c218f0711b66bd01623e48b6", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "48d10ac01187012d1965b8e99f554f78df51c080f604b130b0818337d26df5c7", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "4c4cc3abd3ddb15d5306fb647c6d779b18df5b949673bb3f3f87faa2c5f56a6a", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "4c574c1a2b126c8a5ba1ef9560516d0ac9990c0253119f874eb084b57742e3d7", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "6661dd022dc539fe648ea48b0ccfbc7deac7ceba49f8a80e6f2e5cfe0e5fc6fe", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "0937cbb980cb898eacd8458366fc4de3510266b8fbcd68010aa04e58bf72df28", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "20abd93a1c949874ca930d270c2fe1a4dffd8fa7d2a3056111c35723999d0078", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "26e376fc80b090b2ee04e7d3104d308a150e58538580109a74f4ac49bf362423", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "422384d25aa351a4eb6871ea50c3c96e83ec6f8ffdb3129adc5a4cf1b198c5c9", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "576d1688f744a9f6ae4c1fb4cec1cda3daecabf3a13cb3bafabf083c54d1fcb6", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "57959c2be2ac6349aa37edb73cd8a88fe8d3e69678cac4b38fac401bd3141fdf", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "03f6c8f173413302d9c22a44a593fc9a5203fbb7652d3a36b3ace79f3cdc39a3", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "07df3733b75e6e23d2217a6548ed66654793b20a0674b22187e558c3284c0055", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "0b79e1194644431c2e28c48aa3654e658a2907e1003cd0484cd00a0796ebe6bb", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "1b93ae0ea729f6cf0ce33fddbfc163265fd0132a3e452883cc2cdfb3b059d836", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "3402afd799f0fffb4704b5d3f6223086d2d2e23914107f44d21891eea65c0e0b", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "43d6e0a72864f08fd72e0016f7bfc1b3fac1fd49fd382c4bdab8aa74df8d4616", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "161a83344c31ef28bfeb22c336c0331620050cd6a685458976d2faf8d1902c07", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "1e154b2976cc00d457c0dc2b83ebe81911294c8276691617085c03a3304fd87f", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "26e59279588902fe923bf88640d6640ecfd0823684799c783167062280fe1783", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "45c0b6db2c502796429e9a80c13ead3b80f835cd6c7a80b818fbb1c5c0ec3e9c", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "603d21059e14e2ded40170b4ab3ed534c7dd0a0de5ca94d2e364e81b26286652", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "60674602836323647634016774ea123232160c1b4dfcf3fcd2d2c28c652aa00e", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "620a3be1cac81e9e537cc983c726a2d1804ecf384be9ab3f5a4293b82ecc555f", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "0f52e0d8febf08be311010c7273a26a029da473f4942f83573cbbccc84f1b185", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "10d83ed487de6ddbd99011f405006efbd415e24037cfd9c724628decffd5aadd", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "1c451f6ebd58cbe1dee85a0451badd4edc9de58f4fd17d480f53542b9e5e2072", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "1dbf893e2289c5175a12a38c65ad0abec37e60656ac2c2ae4a5eed5a03abdfa8", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "2772bbe0d1e643d0dbf860ee7fc2b24756d1287845ec5d31ef473850da8d6cc6", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "3d79f0886b7586240de217e7cd6902619c6a6c170ded4cb6655361ceaf1bd52f", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "48bd1c5cf9ccc3d454ab80d7284abaf39028a228607d132bfa92ab2ceca47ca2", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "4228efa547d22dcf38c44243e1e468a2ded17d4997b728ebf88c79d12346fca4", - "count": 2, - "total_related": 8, - "prevalence": 0.25 - }, - { - "value": "5f4063e3a5583e62ddec2f84ca88eb97fbcfbee31d9269742ab438f441f0cd58", - "count": 2, - "total_related": 8, - "prevalence": 0.25 - }, - { - "value": "689ea0e58022b86655596c946591a5b99b051f96e5cb0b0fd60dea302bbf91d2", - "count": 2, - "total_related": 8, - "prevalence": 0.25 - }, - { - "value": "6b0a93826b47e2b96fd79f19d02d9be1034958b30ef246ae57612b84c2ff5041", - "count": 2, - "total_related": 8, - "prevalence": 0.25 - }, - { - "value": "26dbe681bfc23d2603d353e538930262ec15e27c2ef1c0db691553896cd27a87", - "count": 2, - "total_related": 9, - "prevalence": 0.2222222222222222 - }, - { - "value": "413c8b5d9156c4b399a180bc395d90a4bb8aa78df35b75241d33e186ea120f0f", - "count": 2, - "total_related": 9, - "prevalence": 0.2222222222222222 - }, - { - "value": "4d53dd46d7e98bc5d7ef4d76f7007032c425b8c463c41937c65c0a537c3dc577", - "count": 2, - "total_related": 9, - "prevalence": 0.2222222222222222 - }, - { - "value": "51eaf8af57211f8d9e534f98413e71f4ddf5abcce806a111fc49a30d3bcec696", - "count": 2, - "total_related": 9, - "prevalence": 0.2222222222222222 - }, - { - "value": "3c9c3177ebf3990a136876169b9a4b9479282e4c203dde3aab99403a971abc01", - "count": 2, - "total_related": 10, - "prevalence": 0.2 - }, - { - "value": "3debe73d29fd2c0a8eca0f701c30870af25986189790322a45a9526f1603d12b", - "count": 2, - "total_related": 10, - "prevalence": 0.2 - }, - { - "value": "44759678842d930ca4251413f185d0a009b2da52dcdd45decf0daed5c78a97e9", - "count": 2, - "total_related": 10, - "prevalence": 0.2 - }, - { - "value": "5115be816d0cd579915d079573bfa384d78ac0bd33cc845b7a83a488b0fc1b99", - "count": 2, - "total_related": 10, - "prevalence": 0.2 - }, - { - "value": "09b83a501b8f919fc4861735097dd50957f21e81209d362b4fa425bd3348a495", - "count": 2, - "total_related": 11, - "prevalence": 0.18181818181818182 - }, - { - "value": "1939d9fdcf831dc4cac001ba193669c75a336258bc99a1775471554229e4a69b", - "count": 2, - "total_related": 11, - "prevalence": 0.18181818181818182 - }, - { - "value": "3315e5a4590e430550a4d85d0caf5f521d421a2966b23416fcfc275a5fd2629a", - "count": 2, - "total_related": 11, - "prevalence": 0.18181818181818182 - }, - { - "value": "53d32b2a44271fd04244354342e9fc495c11df396a055f831f5b69eecae10f73", - "count": 2, - "total_related": 11, - "prevalence": 0.18181818181818182 - }, - { - "value": "66e96fbd6e977ddef3f0a2924978d92e5d67bd96e68dc4832f5041dbd40bcfc9", - "count": 2, - "total_related": 11, - "prevalence": 0.18181818181818182 - }, - { - "value": "1ea8699dc216353ba29c5d3ca7fcbca59c02ca5969a554faf08f8aa0488e6a6f", - "count": 2, - "total_related": 12, - "prevalence": 0.16666666666666666 - }, - { - "value": "26636fb57a98425ddc6401bf7cca2948392dd620393494c2ae4e6adfb0ff6ba4", - "count": 2, - "total_related": 12, - "prevalence": 0.16666666666666666 - }, - { - "value": "27f6c9a0765f8b44bac8edccfe852facb89396d7acb8d39d75b07d1e5bea6522", - "count": 2, - "total_related": 13, - "prevalence": 0.15384615384615385 - }, - { - "value": "290c2e4d0efbed23de0d41d1b821396f5f1003f6f123ee6160d6d5028d01b961", - "count": 2, - "total_related": 13, - "prevalence": 0.15384615384615385 - }, - { - "value": "353f82475fcfad5b3f06ed85a931bda46ec34279793b5d70085aa8c603e8ebec", - "count": 2, - "total_related": 13, - "prevalence": 0.15384615384615385 - }, - { - "value": "3ce003e64e0cfc63ea17b002fa242af25b7fcdc184095f51c3967fb24c5b55f1", - "count": 2, - "total_related": 13, - "prevalence": 0.15384615384615385 - }, - { - "value": "0b8d7a851920d4584777505f9fb484b226a8457d4049885a87c847f7d3532d28", - "count": 2, - "total_related": 16, - "prevalence": 0.125 - }, - { - "value": "3b70c3ebffcfd6a97859f8d9e5a31f6902756e23fd6688ca7c7446d24ec76d9d", - "count": 2, - "total_related": 16, - "prevalence": 0.125 - }, - { - "value": "26a98b752fd8e700776f11bad4169a0670824d5b5b9337f3c8f46fac33bc03e8", - "count": 2, - "total_related": 18, - "prevalence": 0.1111111111111111 - }, - { - "value": "38ed248501bd35cd140f8376ac42e2c5a46ed4ec71cff0cec290fbc93678f323", - "count": 2, - "total_related": 18, - "prevalence": 0.1111111111111111 - }, - { - "value": "52e9361cfec3bc643f5ac715709e1818766e1790c7f83e93e3ee7cc96fd1a473", - "count": 2, - "total_related": 18, - "prevalence": 0.1111111111111111 - }, - { - "value": "2c338055e8245057169f1733846e0490bc4ae117d1dadefe0a3f07a63dc87520", - "count": 2, - "total_related": 20, - "prevalence": 0.1 - }, - { - "value": "2d9d95bed6a6108802fa7c750cb66f2acce7b124f790ba552ec009c4d1d20744", - "count": 2, - "total_related": 21, - "prevalence": 0.09523809523809523 - }, - { - "value": "3242ed0ade7f7084206fdc7fd53e483f4ba5f99fee88aa2514cd3857d81c26c4", - "count": 2, - "total_related": 22, - "prevalence": 0.09090909090909091 - }, - { - "value": "0f73d0269cf77c53a38fb5863258755e3055979a6343d15573ab2222ce75f49b", - "count": 2, - "total_related": 23, - "prevalence": 0.08695652173913043 - }, - { - "value": "390ef5a967d49b60335be8b2761b9de0478338fdf214dd83ecb948e75bb9efa6", - "count": 2, - "total_related": 23, - "prevalence": 0.08695652173913043 - }, - { - "value": "45c0007e4c744c6f9ba43660cc7edb9a2deb27580e160f8a0e56585401ee9ee3", - "count": 2, - "total_related": 24, - "prevalence": 0.08333333333333333 - } - ], - "downloaded_files": [ - { - "value": "56e6968a127729565d6170d784e60bb5c62a392167a7db3b5493fdfe433fd4fc", - "count": 35, - "total_related": 7034, - "prevalence": 0.004975831674722775 - }, - { - "value": "b0c74189186cde3e890a4b8df7236ae75e2f123ada5d734de19296226b43bb9d", - "count": 19, - "total_related": 2240, - "prevalence": 0.008482142857142856 - }, - { - "value": "f02ae208e27a55b6eeaebfb03b2af169aa7b0fcb5c2e24dcd1d61e039771b598", - "count": 12, - "total_related": 95, - "prevalence": 0.12631578947368421 - }, - { - "value": "e1b08ef93178fd96fc2ae4f1998f441bf73b105a3fb62a9bf19dae4d55a2b9b2", - "count": 10, - "total_related": 31, - "prevalence": 0.3225806451612903 - }, - { - "value": "e6725f08abbebbd4b402f6c0b57a1bca9071b3acb3f28502d30b4e01d6e8f883", - "count": 10, - "total_related": 88, - "prevalence": 0.11363636363636363 - }, - { - "value": "a78efa0170269abc055465625747c82b51732bbf3cac05e733e9147543221712", - "count": 10, - "total_related": 3208, - "prevalence": 0.003117206982543641 - }, - { - "value": "464eea1b24ac38a0942476af88b5f368da1917dd96a7ba82189af3ba7b6696cf", - "count": 10, - "total_related": 99522, - "prevalence": 0.00010048029581399087 - }, - { - "value": "4ff8e0531769dd92feddfa3113703868179ad9ce712e217cb4a593bbb866fb84", - "count": 7, - "total_related": 234, - "prevalence": 0.029914529914529916 - }, - { - "value": "92213166b606712b238db29140eaaac87be277b693b020226bd5bc78478838d5", - "count": 7, - "total_related": 2395, - "prevalence": 0.0029227557411273487 - }, - { - "value": "56bdfa4dcec9c4bce6bf00e2566c8c2013d9d5ef34e855d3469f1f675577e454", - "count": 7, - "total_related": 96495, - "prevalence": 7.254261878853827e-5 - }, - { - "value": "cbf1fdfdb7257daf8b0905d94bd04e2829c502c9c01b1d96bb979069e2ebc895", - "count": 6, - "total_related": 72770, - "prevalence": 8.245155970867116e-5 - }, - { - "value": "aebe53d8cd6bd7cb29e0af6cae7df5c1e302d7cab15c714510ce151a5f658590", - "count": 5, - "total_related": 13, - "prevalence": 0.38461538461538464 - }, - { - "value": "4f1987847e23e9c9debb64481372b00fb0194a615154a7f87d2ac992dac70306", - "count": 5, - "total_related": 37, - "prevalence": 0.13513513513513514 - }, - { - "value": "d93d30e04aae04c0f8a867b2b7c349b80fe32e393373d97ab788b61c6967b2ad", - "count": 5, - "total_related": 56, - "prevalence": 0.08928571428571429 - }, - { - "value": "766c1d6bcb81d3e983fb7adbc19c616d7fc01dafb7893738edc242e2adc59c07", - "count": 5, - "total_related": 10206, - "prevalence": 0.0004899078973153047 - }, - { - "value": "ed6f6f2144998175c846a99d2a0faab5bf7b6ace318f0fe2dc4bfeaf4700c1d8", - "count": 5, - "total_related": 16057, - "prevalence": 0.0003113906707355048 - }, - { - "value": "830fffe8677aeda9be80ae4d257e12d121ecf7efab7907b0b945c7f744987f7f", - "count": 4, - "total_related": 8, - "prevalence": 0.5 - }, - { - "value": "37e75280f3ee7801b06a9ea2c72b4463de5c3fa877f08f6aaeed79815128bc8e", - "count": 4, - "total_related": 16, - "prevalence": 0.25 - }, - { - "value": "1f1851ea45175dfd9490310acd822fa980c2d766aa5701e7a44231d686b3bf3f", - "count": 4, - "total_related": 24, - "prevalence": 0.16666666666666666 - }, - { - "value": "7516bd5d7d369209ec02b41dd894c357c00b197c03b05064225ae368d233e287", - "count": 4, - "total_related": 30, - "prevalence": 0.13333333333333333 - }, - { - "value": "01620f6ac7699d02567f69a6a7dd7f5a6061d01e7a54b161eb59db5028e4ed72", - "count": 4, - "total_related": 46, - "prevalence": 0.08695652173913043 - }, - { - "value": "6419f11e727f620019c38b901d0239e077a1820247a3429386c65474e0b6f605", - "count": 4, - "total_related": 61, - "prevalence": 0.06557377049180328 - }, - { - "value": "d84710b27a791fe972243f6e71ba946cb9cf64b19f1fa77f47756703f311fd41", - "count": 4, - "total_related": 9057, - "prevalence": 0.00044164734459534063 - }, - { - "value": "727eedcc4ef4d53c1624c4823deb251842d7f3ffd5ea46111889e46166a0c486", - "count": 3, - "total_related": 9, - "prevalence": 0.3333333333333333 - }, - { - "value": "01e6ec285041d43d097de0683d2b6830c39d7fced0de937786787dd630b1f805", - "count": 3, - "total_related": 12, - "prevalence": 0.25 - }, - { - "value": "0d6360ec76a7ea62ce0744e8dda7adddc7a69584110653aabcaaf01eae171397", - "count": 3, - "total_related": 14, - "prevalence": 0.21428571428571427 - }, - { - "value": "2c042d454d75f422027cd19bb34ff93ca4ede1408b2ea97b547e9b481eb728d4", - "count": 3, - "total_related": 62, - "prevalence": 0.04838709677419355 - }, - { - "value": "1065f1c9d70d2009dd4abe566364ea819577c229b297414a8d6aef43dd86b437", - "count": 3, - "total_related": 198, - "prevalence": 0.015151515151515152 - }, - { - "value": "7f2dc408197f10b0fa70c4331f26e486b4f464edc6b1cb419aec0db8ad312d8e", - "count": 3, - "total_related": 1178, - "prevalence": 0.0025466893039049238 - }, - { - "value": "a4c04448088d12494af1c1ff48dcbc11045f5f4674b681a6177a52e0af696274", - "count": 3, - "total_related": 1887, - "prevalence": 0.001589825119236884 - }, - { - "value": "024d3be4b76fc9ddff19fde9e49cb20423db35a93649f1647784035586a88078", - "count": 3, - "total_related": 8809, - "prevalence": 0.00034056079010103305 - }, - { - "value": "a2b426977f53a1ac7994923a1f6949a4aaa2ba09699f534e1dabe12c668c5cc5", - "count": 3, - "total_related": 9200, - "prevalence": 0.00032608695652173916 - }, - { - "value": "a6010d5853ca87880b30b5074946be0df5e681b89c70984097eea1eb7864456a", - "count": 3, - "total_related": 47397, - "prevalence": 6.329514526235837e-5 - }, - { - "value": "1d08335e65da7cf40d1c4a7ba0088e0f39b9c5a4b2e42de95fc9ffa69fb96c7a", - "count": 3, - "total_related": 80288, - "prevalence": 3.736548425667596e-5 - }, - { - "value": "4ce93e8d60fab67507af3aaa5b48d19bc37587cc7262caf4dcc4191446ce9a4e", - "count": 3, - "total_related": 84212, - "prevalence": 3.562437657340996e-5 - }, - { - "value": "44e6d8dfed01da2a7874ce84034b4eb292fe14ee6b039681eea2f96f766f59bd", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "4647c4470cfb9cddc90fc1e48ac940740a8abe8a65d89a8fbf074e6b96cf0248", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "7ec576551ad5ee13799268abd03099fcacd82259dc1addb967aeba63afe27f33", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "c5add98c6f8b00d35bc4aebd4866432446d925b359bf55439be754052352d034", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "8301707dd89cb32f65f7d1da7f9cd515c657e1331d7a81c44c87f29ba3f86689", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "899b2da752ad50f525e364f0af930dec91a128effbe8bb601803226604038d5b", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "aa57a421fa05df93ee84555a39475e4d3cf82f6cc1308c18b6a0e10e7b16d2d3", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "b0e84ada4fd0df8c00da62a1777a06edfee4f3858cf20412b35867c81d69eab1", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "63a6580d9ee8d5a632886585ab8f7ab59c87d4e2717181c191cac236cd1e1de4", - "count": 2, - "total_related": 19, - "prevalence": 0.10526315789473684 - }, - { - "value": "994e4d9bacbacb4ff7621c7f2b2abf8900994212bb808b08f7b41b1ac29c30e2", - "count": 2, - "total_related": 1218, - "prevalence": 0.0016420361247947454 - }, - { - "value": "3a7059cd6c6b9d3974b0176e362b3ee2d1b3c8789823a6e74cda99ef1f9005a8", - "count": 2, - "total_related": 7279, - "prevalence": 0.0002747630168979255 - }, - { - "value": "a817045517a8251bf6828b39186a33b9bf3a361e767391f205751cf2842c4cc9", - "count": 2, - "total_related": 9027, - "prevalence": 0.00022155754957350172 - }, - { - "value": "c9352ad6c8ebf1c5cb260535abb8ae78eeed7bb43af64f5ec4e1bdde63db4ff8", - "count": 2, - "total_related": 9221, - "prevalence": 0.00021689621516104545 - }, - { - "value": "655d0e76eccf385fbf04e040b68d61bd37f11708cfa0f4a3a686ee72f95f8827", - "count": 2, - "total_related": 11310, - "prevalence": 0.00017683465959328028 - }, - { - "value": "887c8ada6058f01125a5131f1c495ba5f0171b2c40466ea824494403b87c1a22", - "count": 2, - "total_related": 16805, - "prevalence": 0.00011901219875037192 - }, - { - "value": "93b17c163e409ee68cc96f4664d12c6e9bfabc9eec8005ef2849283e8da99a2a", - "count": 2, - "total_related": 19154, - "prevalence": 0.00010441683199331732 - }, - { - "value": "62b8c6a861c29fd530a2bd593137ffcee945bacea4502795cde6a921bb1c87ca", - "count": 2, - "total_related": 19523, - "prevalence": 0.0001024432720381089 - }, - { - "value": "315b5579f75a8f732a18222b87bc50a81b03ce28aee9d7518ecb9288f38a9fdd", - "count": 2, - "total_related": 20887, - "prevalence": 9.575333939771149e-5 - }, - { - "value": "6644226cf0c2bc995d8b42952aea41d279764706b5c982ce7f9afaa9d4198433", - "count": 2, - "total_related": 23711, - "prevalence": 8.434903631226013e-5 - }, - { - "value": "683a93a5837f2b11b00137745a0152451b849b4c99b0771b0eee863a11bea839", - "count": 2, - "total_related": 26934, - "prevalence": 7.425558773297691e-5 - }, - { - "value": "165e370469ed8fcb910f27fe2b95941abd5f9cba99a21ea0c584452b0b3b421d", - "count": 2, - "total_related": 28232, - "prevalence": 7.084159818645509e-5 - }, - { - "value": "512bce7a3c222e34851ec2065ec8e3f1334ed70538a27457dc6504c6994e3df9", - "count": 2, - "total_related": 28419, - "prevalence": 7.037545304197896e-5 - }, - { - "value": "72b33ae9e44e69747b86d7071a258cad8179371dc6378e68e494c3eb69ff78dd", - "count": 2, - "total_related": 32544, - "prevalence": 6.145526057030482e-5 - }, - { - "value": "540d2635707b637dadd95e0eedbb58d4db4062663a06d457be74a41545431e5a", - "count": 2, - "total_related": 51879, - "prevalence": 3.855124424140789e-5 - }, - { - "value": "7b5c1bd8ee01037e269d4a4569d85a8b89f630e7b4994152a1fcd27de6c44370", - "count": 2, - "total_related": 52650, - "prevalence": 3.798670465337132e-5 - }, - { - "value": "7a31b5d52b38dd1008eae91e232774ee5c1ce7b09256f7499c897801d811b7b7", - "count": 2, - "total_related": 76321, - "prevalence": 2.6205107375427472e-5 - }, - { - "value": "85254d400ec909acac6d567a725f3d9d21507ad1c93cef4c99223a8ea8878a18", - "count": 2, - "total_related": 89710, - "prevalence": 2.2294058633374205e-5 - }, - { - "value": "2dfc8c9ede4bed47f8e56ab6f6dccda39e60d76ca37f88d897bf1829001978cd", - "count": 2, - "total_related": 89917, - "prevalence": 2.2242734966691505e-5 - }, - { - "value": "b16e15764b8bc06c5c3f9f19bc8b99fa48e7894aa5a6ccdad65da49bbf564793", - "count": 130, - "total_related": 100000, - "prevalence": 0.0013 - }, - { - "value": "6dc9c7fc93bb488bb0520a6c780a8d3c0fb5486a4711aca49b4c53fac7393023", - "count": 27, - "total_related": 100000, - "prevalence": 0.00027 - }, - { - "value": "d3ff999a093c94b71eed485b9391ad5e80033f0728aa285049a0f81d0042dba5", - "count": 15, - "total_related": 100000, - "prevalence": 0.00015 - }, - { - "value": "9ec2f0698f1c3497de39a192dd1c3f3e4506ff1a84dbf85082344297dc52e681", - "count": 13, - "total_related": 100000, - "prevalence": 0.00013 - }, - { - "value": "5ab44f257a83c18ca426028e0bf03b9bf2c194c0138c5c704f018cec98bd7650", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "52c1e7a2c36be28c42455fe1572d7d7918c3180cad99a2b82daa2a38a7e7bb23", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": "557b5e9015b4963a130c7039e077b3ec0306d401b6ee13d631721d5d969d2917", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": "cfe72034a9f298fb79a6c1f2302673bb449c826d446b3efafdde95e6c48dc3ca", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": "370be45f65276b3b8de42a29adfb1220fc44a5e018c37e3e9b62fa7d5b523fd0", - "count": 8, - "total_related": 100000, - "prevalence": 8e-5 - }, - { - "value": "4c7d08f1d6fac569c83fa87b42a3a727668da55317954637ce500d59e058fe03", - "count": 8, - "total_related": 100000, - "prevalence": 8e-5 - }, - { - "value": "4ad465b840cf7a5b5098806a97dd31846b1459fc592bb8021096b7392550389f", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "a980b60a8922f510d2da527e74ec9443a57dcc65444dbd6a3ae87dceb28090eb", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "b5378a12e359a27a0c92f53fefa2b4c21673781b7e76f54495d58ad72a927839", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "cab538fd1647961eb35348c1bd84e1fde389ad89672587d2fe3c007a0bc9e67f", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "dc1d54dab6ec8c00f70137927504e4f222c8395f10760b6beecfcfa94e08249f", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "8cf065293ca696f2560a8dde153a0ddd3144a32a9c3f10a82caf58d6e0b64c3c", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "9f96d68b285d4f7e4a82ef42e626ec4f96a94c9c61a2c7fcb699a762b1abb487", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "8dfbf98adfb38f0b612d15b4baccb23de19cf12dee36c9897708d62aaab6d308", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "982b986bb578e137f062099427a8caec3c501c84a9e4b22369ebd2badec42fe7", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "a9ef11bdf098b181c9cbb75b272531793991c287d15d2477af07edeac69672a8", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "e2be88fd3dc7349ec9c3cd296b5f4241061ee5462e7d04d5425359a27b2122d2", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "013d6bb198a9ecd19e2b74f7b8994fe802cb49de27b46f731d827b344d4b9db9", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "7da15bb6457dbb866a293c12b681441c8a4a02817ac3fccdcb0cd357660cca9b", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "802600d124464157037a2519acb3cff90b97670fd04809ea902fbb95497a12ca", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "8172cfcc09260a67d9bd245425037dd2396e7006e76e62b5fb7914c32e24311d", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "b825edbb55450e309fe823143f985893b399da08d9166f4523cdffbfb7f48310", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "ba06358e68429145a15d0c1cfb211cb1b82680ef0a0b3efa376c68e9c1e4ea03", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "0b52c5338af355699530a47683420e48c7344e779d3e815ff9943cbfdc153cf2", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "0f3a07f36d6bddee418f7d7548bc165b09817e10764a359d2773388cdec9ff8a", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "23926e9185d8d43c02807a838ffb373cc1977726094a4e46807c66ada9dd7660", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "2c3adc6b6fb69d3a4e7b75b64e913dc96d21dbaf436bf69e773589b6a6952c47", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "32f4c1e4c036d78d5bce0ddad05acdba6da51f8ccacf6deec8bb3fe529ec6ea7", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "38ffd4972ae513a0c79a8be4573403edcd709f0f572105362b08ff50cf6de521", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "6b99a14f762d50ad6ca4df3b21ca122ac86c6e0ce862b49e9c3c58eb63969502", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "895c0f60e59fdd84e53ab7ddb8866c8f49e45386632dca017efedd48313c9e0c", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "c55f527e536de44c7980fecece7428ae5a765647495e47008a8a54fa1e434736", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - } - ], - "favicon_dhash": [ - { - "value": "455555610d55555d", - "count": 40, - "total_related": 6540, - "prevalence": 0.0061162079510703364 - }, - { - "value": "21414963c9a4a449", - "count": 25, - "total_related": 31942, - "prevalence": 0.0007826685868135997 - }, - { - "value": "33ccb29696e0cc32", - "count": 14, - "total_related": 4955, - "prevalence": 0.0028254288597376388 - }, - { - "value": "003b2f3b65d41523", - "count": 10, - "total_related": 535, - "prevalence": 0.018691588785046728 - }, - { - "value": "b2cca09696e8ccb2", - "count": 9, - "total_related": 2998, - "prevalence": 0.003002001334222815 - }, - { - "value": "25414963c9a4a449", - "count": 8, - "total_related": 21094, - "prevalence": 0.00037925476438797765 - }, - { - "value": "d4a2f8d0d0f182d4", - "count": 6, - "total_related": 1836, - "prevalence": 0.0032679738562091504 - }, - { - "value": "9a65617864d8d9ae", - "count": 5, - "total_related": 75744, - "prevalence": 6.60118293198141e-5 - }, - { - "value": "e0cc9abb23a6ccf8", - "count": 5, - "total_related": 89786, - "prevalence": 5.5687969171140264e-5 - }, - { - "value": "00e479e8a6a6b210", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "2208162b55b22900", - "count": 4, - "total_related": 5, - "prevalence": 0.8 - }, - { - "value": "13ac13574d6bb449", - "count": 3, - "total_related": 7, - "prevalence": 0.42857142857142855 - }, - { - "value": "b270c8d8f4e871b2", - "count": 3, - "total_related": 10, - "prevalence": 0.3 - }, - { - "value": "27cb4d3a3215c347", - "count": 3, - "total_related": 65, - "prevalence": 0.046153846153846156 - }, - { - "value": "04f368cc9f050200", - "count": 3, - "total_related": 8033, - "prevalence": 0.0003734594796464584 - }, - { - "value": "1b6799d164661927", - "count": 3, - "total_related": 22641, - "prevalence": 0.00013250298131707962 - }, - { - "value": "b09c8aeab4b69ae4", - "count": 3, - "total_related": 25377, - "prevalence": 0.00011821728336682824 - }, - { - "value": "800c96069cb60e80", - "count": 3, - "total_related": 71730, - "prevalence": 4.1823504809703055e-5 - }, - { - "value": "1100040000020501", - "count": 3, - "total_related": 87917, - "prevalence": 3.412309337215783e-5 - }, - { - "value": "368e2e6b27863709", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "d4b26b59dcba8ecc", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "e0c89c3b3b9cf072", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "0e338ed83271178e", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "10468684c4666214", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "e35813555537c612", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "16b261b2b261b216", - "count": 2, - "total_related": 12, - "prevalence": 0.16666666666666666 - }, - { - "value": "336cd6b2d2868c93", - "count": 2, - "total_related": 17, - "prevalence": 0.11764705882352941 - }, - { - "value": "2814b2696cccc239", - "count": 2, - "total_related": 23, - "prevalence": 0.08695652173913043 - }, - { - "value": "f1c8a2da68a8f270", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "e88cc69236988ee8", - "count": 2, - "total_related": 38, - "prevalence": 0.05263157894736842 - }, - { - "value": "00d4ccccccccd400", - "count": 2, - "total_related": 72, - "prevalence": 0.027777777777777776 - }, - { - "value": "6d2e374507333333", - "count": 2, - "total_related": 14383, - "prevalence": 0.00013905304873809357 - }, - { - "value": "986699d0f46619a6", - "count": 2, - "total_related": 23706, - "prevalence": 8.436682696363789e-5 - }, - { - "value": "0a008a6b65950095", - "count": 2, - "total_related": 27698, - "prevalence": 7.220737959419453e-5 - }, - { - "value": "1b6799d0f4661927", - "count": 2, - "total_related": 50750, - "prevalence": 3.940886699507389e-5 - }, - { - "value": "0093298f47132380", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "080d3273cc163208", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "084d3273cc16b208", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0a4d266fcd4d2716", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0e27255945395b0e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1249162b55b20800", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1755cc3073965517", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "3149653573596d53", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "40d8e8a6a6a0e840", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "454a9274b0a5688a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4d0e9e9232306969", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "00090009c9440100", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "0c1769454d71170c", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "1641162b55b20840", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "24b25a49495ab224", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "27d8d4d1d4c8e41b", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "30e0e4d0c8ccc4e4", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "40184763391d0611", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "008082ba4a6a3440", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "00a4b494d6d2da00", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "0c1761454d71170c", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "0f334d54cc71330f", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "0f3b05e5c3e1381f", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "10480a2a666a2904", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "1755ccb2b2f05517", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "2a54cc23334c542a", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "2b0bcb2b0bcb0b4b", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "4b6b92d2989b5333", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "006c6958b2b00000", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "175571e8e9715517", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "3351dc682ce43533", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "33e8ccb2b2ccf033", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "0b1f173a330f0797", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "2401378f4d0a0c10", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "24f0cc64e6c488ca", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "33688e9686c67133", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "3369c8b2b2c86933", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "0e1f5b070f0f1e1c", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "2759cdc4dc4c651b", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "4c4d9c9ab6326969", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "00334d7171492300", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "0f0b2b3b2363f29c", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "31e894929294e831", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - }, - { - "value": "4d0e1b1313171116", - "count": 1, - "total_related": 28, - "prevalence": 0.03571428571428571 - }, - { - "value": "36f1c8e061f9f032", - "count": 1, - "total_related": 30, - "prevalence": 0.03333333333333333 - }, - { - "value": "0814b2696cccc239", - "count": 1, - "total_related": 41, - "prevalence": 0.024390243902439025 - }, - { - "value": "33e8d4aaaad4e833", - "count": 1, - "total_related": 68, - "prevalence": 0.014705882352941176 - }, - { - "value": "02002b2a8e550204", - "count": 1, - "total_related": 122, - "prevalence": 0.00819672131147541 - }, - { - "value": "04b268cc9f258201", - "count": 1, - "total_related": 278, - "prevalence": 0.0035971223021582736 - }, - { - "value": "4d4d17173333714d", - "count": 1, - "total_related": 703, - "prevalence": 0.001422475106685633 - }, - { - "value": "1769cc9696cc6917", - "count": 1, - "total_related": 892, - "prevalence": 0.0011210762331838565 - }, - { - "value": "4c33f0e471694916", - "count": 1, - "total_related": 2912, - "prevalence": 0.00034340659340659343 - }, - { - "value": "4933cce8edecc431", - "count": 1, - "total_related": 17667, - "prevalence": 5.6602705609328126e-5 - }, - { - "value": "c0cc9efcc086c6f0", - "count": 80, - "total_related": 100000, - "prevalence": 0.0008 - }, - { - "value": "c445f069c8cc4dc4", - "count": 21, - "total_related": 100000, - "prevalence": 0.00021 - }, - { - "value": "ccb25965558ecc71", - "count": 18, - "total_related": 100000, - "prevalence": 0.00018 - }, - { - "value": "d8a6617824d0d9ac", - "count": 18, - "total_related": 100000, - "prevalence": 0.00018 - }, - { - "value": "0000000000000000", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "2424242424242424", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "8ca6a3833e79b1ce", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "e88e931939338ee8", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "98a6b3833e79b1ce", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "e08c9a3b23a2ccf8", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "938365536e96963c", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "4cb269ccd4d4e803", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "favicon_raw_md5": [ - { - "value": "a64ef4e756a8d0d2ed7a7ee8dc39a310", - "count": 40, - "total_related": 6540, - "prevalence": 0.0061162079510703364 - }, - { - "value": "26aa67930614edc5e27b5f080743e715", - "count": 25, - "total_related": 31941, - "prevalence": 0.0007826930903853981 - }, - { - "value": "9c91c255e6b97151401e2006bdde8cad", - "count": 14, - "total_related": 4977, - "prevalence": 0.0028129395218002813 - }, - { - "value": "7edce2596062b0dbe4f97e91b4fc40ab", - "count": 10, - "total_related": 535, - "prevalence": 0.018691588785046728 - }, - { - "value": "c41df933b97a4fe6fbfdbc415b43ddab", - "count": 10, - "total_related": 1164, - "prevalence": 0.00859106529209622 - }, - { - "value": "a41ad4b48165aafd47cc13c2dbfcc1d9", - "count": 9, - "total_related": 2998, - "prevalence": 0.003002001334222815 - }, - { - "value": "e6bf78231de5565407422ad9d38deafc", - "count": 8, - "total_related": 18991, - "prevalence": 0.0004212521720815123 - }, - { - "value": "daefa8ad6cd307683e9b4bb2a2ce7186", - "count": 6, - "total_related": 1835, - "prevalence": 0.0032697547683923707 - }, - { - "value": "d4bfa6a080223cdb1b007c3a3f2bceec", - "count": 5, - "total_related": 73618, - "prevalence": 6.791817218615013e-5 - }, - { - "value": "aa07959aa4e6a848b23c3314e1a5ffea", - "count": 5, - "total_related": 89748, - "prevalence": 5.5711547889646564e-5 - }, - { - "value": "5d2b009e205678b96e86124363563b64", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "7999fbc54c5dc8d6d37b68d9597bc69c", - "count": 4, - "total_related": 5, - "prevalence": 0.8 - }, - { - "value": "460dc4d8933fb35ab961d06f007360cd", - "count": 3, - "total_related": 7, - "prevalence": 0.42857142857142855 - }, - { - "value": "e559af72cf6056a10b31cd78784699c0", - "count": 3, - "total_related": 65, - "prevalence": 0.046153846153846156 - }, - { - "value": "e646afcb8ced982b1eaf5f5643143c49", - "count": 3, - "total_related": 1092, - "prevalence": 0.0027472527472527475 - }, - { - "value": "8613ef0ac2bc8923a85a6f022f4ca0f3", - "count": 3, - "total_related": 22641, - "prevalence": 0.00013250298131707962 - }, - { - "value": "35dc7e3c53fe57f12a1a57c59e3cf663", - "count": 3, - "total_related": 25337, - "prevalence": 0.0001184039152227967 - }, - { - "value": "f4dcfc31f516ac47cf0f5979f3d529e9", - "count": 3, - "total_related": 63082, - "prevalence": 4.755714783932025e-5 - }, - { - "value": "b95c0b0dcbd5ca9ee75958106f71b408", - "count": 3, - "total_related": 79302, - "prevalence": 3.783006733751986e-5 - }, - { - "value": "67b48ba744990ca72e1018014149198c", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "86a569bc437c42d619eaa3c3c22b41fe", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "a6b742458af1e6391c53fdadcc42ea6a", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "b65eb5319d429dbba0cad06ea2729a52", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "802d4c9183e254c81889a377c00a9008", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "cad6115ec253c02188265dab81a0e54e", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "e0c2d31c985aaeaf608d3e0500f39829", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "9488857564c5bee162bacc0131e4aaab", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "6caa2ef39445a3834f48a4c9eb5cdfe1", - "count": 2, - "total_related": 9, - "prevalence": 0.2222222222222222 - }, - { - "value": "866c725da071e4e5b2f232b931001971", - "count": 2, - "total_related": 17, - "prevalence": 0.11764705882352941 - }, - { - "value": "8ee15164d47b01f0d09aacd3922424cb", - "count": 2, - "total_related": 23, - "prevalence": 0.08695652173913043 - }, - { - "value": "bf4ade495f634dce1709dd8ad5517806", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "17364e0cbcc170f10cf119b5abb0c599", - "count": 2, - "total_related": 38, - "prevalence": 0.05263157894736842 - }, - { - "value": "16fbd6e0d4243d379108add7eed699cf", - "count": 2, - "total_related": 14382, - "prevalence": 0.00013906271728549575 - }, - { - "value": "2ccaa650d5492d41cfecc9473ff10669", - "count": 2, - "total_related": 27688, - "prevalence": 7.22334585379948e-5 - }, - { - "value": "a88983724d846a0992186759d5652b11", - "count": 2, - "total_related": 29467, - "prevalence": 6.787253537855906e-5 - }, - { - "value": "008b0d98aabf69c4bded122ab4318173", - "count": 2, - "total_related": 29950, - "prevalence": 6.67779632721202e-5 - }, - { - "value": "f7ee6044ade2380e1a76a36fdf5093af", - "count": 2, - "total_related": 50812, - "prevalence": 3.936078091789341e-5 - }, - { - "value": "033a51d0303041856612653a3a170c65", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "22aafb2e0f647350fb7e2dfac0ebec31", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "3ce8c440a69daeb361f8b9e5ee876126", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4974777a5e75c0f96f78b19c86d26e96", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4d109db17748cd6dbb690e823bc4656e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "922614ccb1c06b0b411efab0051b6033", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "939d3de7965755a52a7a9ed9d3407a0c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "081dcee7c6862a596597e13be4b70bec", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "09cb99db3aacf0479c0618c62acdf377", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "4437c906077600f12297b30fac0496bf", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "4ecf93f10e8c52ad72a690a5ede9d19c", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "51f64b635acae2090dee415631217f3f", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "54daf188222b7bc319099fbc886546c4", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "5d5c8935480a8a85c97f6151e6c5b86c", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "0709ae26ee792c75915c50b81b67b695", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "456cde89d4ec6bc985d6f999aaa91c09", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "8ab98d7f3f5c3ac3d5564e742db2b4ff", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "96c5426faa4fe985e456b5d9a0ac5fdd", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "7f42f7521c495fc9defaf91d0bab0640", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "97b8f12b4aed17544341a062ed870c1d", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "991300beefd64377fced8953c1d36487", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "43ae4cb942109eb531e34fa5cc480d26", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "4e6c664f6fcfa2611ad6bf0f99c904de", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "6ffe436c9d73ef75e7bc4d3c6de5b7dd", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "891e9a9607b09bdcd9b71bd05691f0dd", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "1f01a55d9aab7241ae65dde0fe3f2eba", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "2e2526b2950b5696bab28a13de16d90d", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "83c8c118bcd38c65950f126d714dfba9", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "64986904624088490cc769e877a5cc32", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "9713cb2c752719cd010d0ac132e97601", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "65ce9ca77254da41453b4219bb34cb69", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "8d47eab80df89f2e83d847d80c197067", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "1d5a092475e0ac4a6d041461800f0cf5", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "5490d7b7de585b59d8fe78ab8e73035b", - "count": 1, - "total_related": 18, - "prevalence": 0.05555555555555555 - }, - { - "value": "80d5896486f8a0f98a05ded4f2141f33", - "count": 1, - "total_related": 26, - "prevalence": 0.038461538461538464 - }, - { - "value": "1768e8473ad5f47b686b1bbc1674c309", - "count": 1, - "total_related": 28, - "prevalence": 0.03571428571428571 - }, - { - "value": "44988574efb995b1254ead106d588614", - "count": 1, - "total_related": 30, - "prevalence": 0.03333333333333333 - }, - { - "value": "7185bb72dfc91d8709b8c04c72710c28", - "count": 1, - "total_related": 41, - "prevalence": 0.024390243902439025 - }, - { - "value": "5f1176873c0f792b90470b599cf8dccb", - "count": 1, - "total_related": 106, - "prevalence": 0.009433962264150943 - }, - { - "value": "344f0eb55c3a490af08a6460bac39b0b", - "count": 1, - "total_related": 169, - "prevalence": 0.005917159763313609 - }, - { - "value": "28622848a7f54a8b5dfc28cf7461f1c2", - "count": 1, - "total_related": 214, - "prevalence": 0.004672897196261682 - }, - { - "value": "47d5408abb9f225af372d09f15391869", - "count": 1, - "total_related": 703, - "prevalence": 0.001422475106685633 - }, - { - "value": "8ce44c17b009f0bf1f81cecd58972a8b", - "count": 1, - "total_related": 1411, - "prevalence": 0.0007087172218284905 - }, - { - "value": "235065039d3df22bf9676f1bc1063c57", - "count": 1, - "total_related": 2908, - "prevalence": 0.000343878954607978 - }, - { - "value": "2b9e380350c64ee8ddd97d9c6c05ff23", - "count": 1, - "total_related": 10747, - "prevalence": 9.304922303898763e-5 - }, - { - "value": "109893926547cd68c60ca6ea691e8947", - "count": 1, - "total_related": 19203, - "prevalence": 5.20751965838671e-5 - }, - { - "value": "4d0270f6878b3674393ab47a02392086", - "count": 1, - "total_related": 19458, - "prevalence": 5.139274334463974e-5 - }, - { - "value": "117d38870c71b18a1c94af9038637544", - "count": 1, - "total_related": 21385, - "prevalence": 4.676174888940846e-5 - }, - { - "value": "8c584a88c3fc48d6186d18673b6c34c9", - "count": 1, - "total_related": 57530, - "prevalence": 1.7382235355466714e-5 - }, - { - "value": "c9ac92eecdcf2fd9ed909a82ce81cb8d", - "count": 80, - "total_related": 100000, - "prevalence": 0.0008 - }, - { - "value": "2704d774bf59289368ae61a95dc60afb", - "count": 21, - "total_related": 100000, - "prevalence": 0.00021 - }, - { - "value": "772f1e1bb49679a12d942ce86a76f0b1", - "count": 18, - "total_related": 100000, - "prevalence": 0.00018 - }, - { - "value": "ef9d0e866a789bf4f20038e4ea74675e", - "count": 18, - "total_related": 100000, - "prevalence": 0.00018 - }, - { - "value": "8996b2c0b3d7dc5b0d092c4f767fdd76", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "b4db2a4b6d91e0df5850a3fdcee9c8df", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "c4cacab371c682125e0da1888e8ce475", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "f3e260b62c4b891753fd57bf5fd075cc", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "ca8fa47ba1bbc14446b64d55a55ce87a", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "03eb1b6d95ef220a39bc24b87df857cc", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "0c08e47cb451b4e42b54520256023323", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "a259f8beea91900081dbef52390f77d8", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "0dbae411da96073d7dc299a58de80300", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "52507f6aef6782cdd70bfa8575ce0cb2", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "urls": [ - { - "value": "http://ac-2501.amazonaws1.info/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://admin.alwayswelcome.online/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://api.alwayswelcome.online/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://app.aixstore.info/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://app.alwayswelcome.online/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://authenticate.azure-drive.com/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://auto.antifirmware.site/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://auto.azure-security.site/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://automatic.antifirmware.store/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://azure.auto-protection.cloud/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://azure.auto-protection.services/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://backend.alwayswelcome.online/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://backup.163qiye.top/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "https://ac-2501.amazonaws1.info/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "https://admin.alwayswelcome.online/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "https://app.aixstore.info/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "https://authenticate.azure-drive.com/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "https://auto.antifirmware.site/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "https://automatic.antifirmware.store/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "https://azure.auto-protection.cloud/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "https://azure.auto-protection.services/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "https://backend.alwayswelcome.online/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "https://backup.163qiye.top/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://092jb_378v3_1.googldocs.org/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://1.googldocs.org/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://163qiye.top/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://1driv.org/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://1driv.org/open", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://1driv.org/open?id=D6GApoc41tPmtlZmx71ETXPrHCHSuFgVvbvM0fzPaOYN7T4IQdG3w4Pcz8VfDy/G", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://1driv.org/open?id=mhy/ZcRTX5Z325ue9h9UgAZBd5Xq4UZZZHRRDcxj8PKw4x5MlWrw8fozU5CSGuUp", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://1drv.email/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://1drvmail.work/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://1drvmicrosoft.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://1drvms.net/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://31ventures.info/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://6441056b613c32a9.meeting-pro.online/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://_jfieo2_se.drivegooglshare.xyz/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://_jfieo2_se.drivegooglshare.xyz:8080/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://_jfieo2_se.drivegooglshare.xyz:8080/open", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://_jfieo2_se.drivegooglshare.xyz:8080/open?id=hh/gaQbX3Id5E7BKYuH/w0/wtPd1jQFW39sPM3DHFcgHI/8vbSqnPiGLGUJD7r0O", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://abc.preconnection.online/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://abcnewsagency.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://abf-cap.co/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://abiesvc.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://abiesvc.com/a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://abiesvc.info/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://abiesvc.jp.net/LTZQCJ6P3IG/w2eIu5Obzl/axp3n94U1N/a33bNJ91Q8/0I=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://ac-2501.amazonaws1.info:8080/edit?id=%20Ez5uVZGMrxUYrlBXm3JSG3aYhUjxT7lVJ%20Xgy1REwbyAQCgnSvj5VgENUfP05sEjCpXZgw3AbwjXurN2Zfwlw==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://account-refund.co/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://account-refund.co/emt", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://account-refund.co/emt/Finance", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://account-refund.co/emt/Finance/atb", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://account-refund.co/emt/Finance/mobile-cibc", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://account-refund.co/emt/Finance/mobilesco", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://account-refund.co/emt/Finance/motus", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://account-refund.co/emt/Finance/simplii", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://account-refund.co/emt/finance", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://account-refund.co/emt/finance/antibot.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://account-refund.co/emt/finance/atb", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://account-refund.co/emt/finance/atb/details.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://account-refund.co/emt/finance/atb/secquestions.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://account-refund.co/emt/finance/bmo-mobile/complete.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://account-refund.co/emt/finance/bnc", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://account-refund.co/emt/finance/bnc/index.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://account-refund.co/emt/finance/desj", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://account-refund.co/emt/finance/desj/index91484101498.php?cce8c647ffd", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://account-refund.co/emt/finance/desj/index91484101498.php?cce8c647ffd=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://account-refund.co/emt/finance/tang/antibot.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://account-refund.co/emt/finance/tang/indexx.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://additional.work.gd/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://addrsrv.corecheckmailsrv.com/lDtfng/MxOUgEhDXyBPDRyi3qIo6QpLEkRtYRKY1le8=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://addrsrv.corecheckmailsrv.com/oVagoQu40aYC2Mu8tar4tulgqZLy/EYPIoKpAfR8Ago=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://addrsrv.corecheckmailsrv.com/yInwvho8Q6LaZGUNuLLMVnwygPsV0CQkPfk+YDGpktU=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://4jslg.goglesheet.com/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://6441056b613c32a9.ubi-safemeeting.live/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://64441056b613c32a9.emv1.roomconnect.online/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://7xvc.conference-go.online/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://7xvc.meeting-central.online/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://7xvc.meeting-zone.cloud/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://7xvc.meeting-zone.online/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://7xvc.meetup-room.online/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://7xvc.online-meeting.community/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://7xvc.roomconnect.online/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://7xvc.virtual-collab.online/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://a.meet-client.online/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://a.videotalks.site/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://a.web-meet.online/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://abc.meeting-central.online/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://abc.meeting-zone.online/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://abc.roomconnect.online/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://abiesvc.jp.net/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://abs.twitter.expublic.linkpc.net/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://access.support.general-meet.site/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://additionalpublic.work.gd/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://addrcheck.corecheckmailsrv.com/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://addrsrv.corecheckmailsrv.com/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://ade.dropfile.online/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://admin.chrome-browser.cloud/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://admin.docsend.site/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://admin.general-meet.site/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - } - ], - "registrant_names": [ - { - "value": "linkpc.net", - "count": 18, - "total_related": 987, - "prevalence": 0.0182370820668693 - }, - { - "value": "cc3d6c4ef6e5ca58", - "count": 9, - "total_related": 58859, - "prevalence": 0.000152907796598651 - }, - { - "value": "work.gd", - "count": 8, - "total_related": 2482, - "prevalence": 0.0032232070910556 - }, - { - "value": "4dd76b06670189da", - "count": 7, - "total_related": 16, - "prevalence": 0.4375 - }, - { - "value": "onedriveglobal.com", - "count": 6, - "total_related": 16, - "prevalence": 0.375 - }, - { - "value": "dafb04edca3b3640", - "count": 6, - "total_related": 77195, - "prevalence": 7.772524127210312e-5 - }, - { - "value": "b8bf8e2faa971a69", - "count": 5, - "total_related": 5, - "prevalence": 1.0 - }, - { - "value": "cec6d6a93aca0cb4", - "count": 5, - "total_related": 1957, - "prevalence": 0.0025549310168625446 - }, - { - "value": "fb1b6db59b599925", - "count": 5, - "total_related": 21268, - "prevalence": 0.000235094978371262 - }, - { - "value": "publicvm.com", - "count": 4, - "total_related": 1204, - "prevalence": 0.0033222591362126247 - }, - { - "value": "com.de", - "count": 4, - "total_related": 75757, - "prevalence": 5.2800401283049754e-5 - }, - { - "value": "azure-drive.com", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "googleapis.online", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "faeaa57dac0eb669", - "count": 3, - "total_related": 6, - "prevalence": 0.5 - }, - { - "value": "azure-protected.online", - "count": 3, - "total_related": 8, - "prevalence": 0.375 - }, - { - "value": "azure-safe.com", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "azuredefender.online", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "coinbigex.com", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "drivegooglshare.xyz", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "jobdescription.online", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "mekongcapital.net", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "perseus.bond", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "ea990d67c66da0ca", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "237e727f4e7802de", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "j-ic.com", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "4bc54814633e58d6", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "0dd9e80d43a49b65", - "count": 2, - "total_related": 11, - "prevalence": 0.18181818181818182 - }, - { - "value": "c3baf8db2342424e", - "count": 2, - "total_related": 215, - "prevalence": 0.009302325581395349 - }, - { - "value": "0ec0f5f8cf12e5cf", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "3121acc9b1324f2d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5841911d9cdddf4e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "8af459ec828c4df5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "aa8c74ccc81375ca", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "abcnewsagency.com", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "access-googledrive.com", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "admin.chrome-browser.cloud", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "admin.interalliancemediagroups.cloud", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "alwayswait.online", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "alwayswait.site", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "alwayswelcome.online", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "amazing-ed.xyz", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "antiviruscheck.site", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "antiviruscheck.store", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "antlercap.com", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "api-zoom.com", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "api.chrome-browser.cloud", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "arbordeck.online", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "archax.skyboxdrive.cloud", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "asmir.xyz", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "atajerefoods.com", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "auditprovidre.site", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "auditprovidre.store", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "autodiscover.interalliancemediagroups.cloud", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "awaitingfor.site", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "azure-security.online", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "azure.doc-protect.cloud", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "azure.doc-view.cloud", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "azure.docs-protection.cloud", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "azure.protection-service.cloud", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "azureprotect.xyz", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "azureword.com", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "backend.chrome-browser.cloud", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "bankofamerica.offerings.cloud", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "altair-vc.com", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "azure-protect.online", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "azure-protection.online", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "azure-service.com", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "bebdon.xyz", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "17caaeafa9a4b706", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "74eefd4875f99b49", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "7b36e478da16c1f4", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "86b2581ecc49408d", - "count": 1, - "total_related": 23, - "prevalence": 0.043478260869565216 - }, - { - "value": "7a48f2dd77dbe938", - "count": 1, - "total_related": 43, - "prevalence": 0.023255813953488372 - }, - { - "value": "8780ffd84c1212d7", - "count": 1, - "total_related": 177, - "prevalence": 0.005649717514124294 - }, - { - "value": "af7877f13654746c", - "count": 1, - "total_related": 22137, - "prevalence": 4.517323937299544e-5 - }, - { - "value": "37eabe5e699cf6a5", - "count": 1, - "total_related": 54677, - "prevalence": 1.8289225817071162e-5 - }, - { - "value": "1f8f4166599d23ee", - "count": 312, - "total_related": 100000, - "prevalence": 0.00312 - }, - { - "value": "37bfbc24cafea5d2", - "count": 166, - "total_related": 100000, - "prevalence": 0.00166 - }, - { - "value": "12dab2e482f2c209", - "count": 63, - "total_related": 100000, - "prevalence": 0.00063 - }, - { - "value": "99f9e3def34088de", - "count": 30, - "total_related": 100000, - "prevalence": 0.0003 - }, - { - "value": "690fd393ab541650", - "count": 29, - "total_related": 100000, - "prevalence": 0.00029 - }, - { - "value": "3b5f76ecd769308f", - "count": 23, - "total_related": 100000, - "prevalence": 0.00023 - }, - { - "value": "1f33d7151e7ebf55", - "count": 15, - "total_related": 100000, - "prevalence": 0.00015 - }, - { - "value": "3495bcf1839c6374", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "8792ba892fc41135", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "1e228c70e39f88de", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "2baba875c89e1223", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "edeae57e15fec50a", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "7bc26f5a5e70d417", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "d10e0e46d7d3e53c", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "388d6d67ffb0a171", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "1facd30fba15e069", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "3432650ec337c945", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "6bea8c7bc570bd3d", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "1b8cf3baab8972aa", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "5dfae26313ad55b7", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "5fa648b96eeb677f", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "7f9fc133014160e3", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "80315b2e6ac1a801", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "ad81f616267b28de", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ] - }, - "files": { - "itw_urls": [ - { - "value": "http://zoom-client.xyz/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "https://onedrive.live.com/download?cid=AB7FEE589CE19D1A&resid=AB7FEE589CE19D1A!186&authkey=AID-A76MMkLd4M4", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://104.168.198.3/uc?topic=en&sess=1599a0b815d0a082", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://23.254.164.232/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://23.254.167.216/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://23.254.253.75/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://38.110.228.112/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://38.242.201.111/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://45.61.140.26/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://5.230.252.157/zoom/window.location.href", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://a0info.v6.army/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://ai5.aisoftware.ro/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://alfatimacollection.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://api.zoomsdk.us/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://appleaccess.pro/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://autoprotect.com.se/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://autoprotect.gb.net/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://canyouworld.com/random.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://co.fieldsrl.it/fieldsrl.it/co/galemysNT/Application%20Files/Galemys_4_0_0_43/Galemys.exe.config.deploy", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://digitword.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://downloads.solotrader.com/Application%20Files/SoloTraderLite_1_0_0_44/SoloTraderLite.exe.config.deploy", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://drive.google.com/uc?id=1ZpretgDk8oqadTgh4MTbaPHoss7l7VF_", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://e-anjababk.sumbawabaratkab.go.id/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://eqtsadiafm.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://er-zoom.us/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://er-zoom.us/zoom/join", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://fxcapp.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://gsic1g.bn.files.1drv.com/y4meDIJGHY007rdHfd9BY5eLeyP8X1Pd-H5FoVmVNyr3uCTHu77TUPl4VfsFsIpwrl_2_hKa1Sv8u2J9eREHjKCe6Nmnd5gi20u8bU169icR08s-dcvS-2MLMC8sT62OhcM8q8tOoudSp9Pt68LIRUEStjPelsFK88JMm_4srizNPiWstCgMl6-nN_zqLOlYtzk/Profit%20and%20Loss%20Statement.zip?download&psid=1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://haishiwan.vip/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://hanjiemei.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://happyz.one/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://haywardmadison.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://hwsrv-1225327.hostwindsdns.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://ig-verifyaccount.tk/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://ignite.onlinemeet.pro/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://ignite.onlinemeet.pro/zoom/join", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://in-zoom.us/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://italyran.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://make-hex-32332e3235342e3136372e323136-rr.1u.ms/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://mc.tvdhoenn.net/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://meet.globiscapitals.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://meet.globiscapitals.com/zoom/join?mn=83667790&pwd=16vtG8js", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://meet.rwa-team.video/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://meet.rwa-team.video/zoom/join", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://meet.superstatefund.co/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://moodsshoes.gr/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://noonawareness.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://onedrive.live.com/download?authkey=APp_0AMgcYTHkiE&cid=23F7A49910CEA830&resid=23F7A49910CEA830!108", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://onedrive.live.com/download?cid=AB7FEE589CE19D1A&resid=AB7FEE589CE19D1A!186&authkey=AID-A76MMkLd4M4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://openfort.businessmeet.xyz/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://panda95sg.asia/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/002042409303/scenario/300700___d406e1dc-41ef-4329-85bf-83d6b1e3f65b.scpt?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pixelmonmmo.net/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://prmobiles.com/babedate.datingbuddies.info/cu9w/direct", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://rwa.business-zoom.us/zoom/error", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://saisoncapital.net/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://savredigital.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://sbanner.ir/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://str8fire.businessmeet.xyz/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://usweb-zoom.us/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://verify.azure-protect.online/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://versionupdate.dns.army/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://viabtc.webmeet.video/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://viabtc.webmeet.video/zoom/join", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://vipocapital.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://web.interzoom.us/zoom/error", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://web.interzoom.us/zoom/join", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://www.247services.net/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://www.antiplagiarism.net/downloads/en/4.129.0.0/AntiplagiarismExtUpdater.exe.config", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://www.antiplagiarism.net/downloads/en/4.130.0.0/AntiplagiarismExtUpdater.exe.config", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://www.antiplagiarism.net/downloads/en/4.131.0.0/AntiplagiarismExtUpdater.exe.config", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://www.antiplagiarism.net/downloads/en/4.133.0.0/AntiplagiarismExtUpdater.exe.config", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://www.antiplagiarism.net/downloads/en/4.137.0.0/AntiplagiarismExtUpdater.exe.config", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://www.antiplagiarism.net/downloads/en/4.142.0.0/AntiplagiarismExtUpdater.exe.config", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://www.dourolab.xyz/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://www.je-electronic.dk/publish/je910/Presto-JEN4XEWR/Application%20Files/JE910_Loader_Presto_1_0_41_40/JE910_Loader_Presto.exe.config.deploy", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://www.maelstromfund.org/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://www.pk99998888.xyz/BYAutoUpdate.exe.config", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://www.prismlab.xyz/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://www.sendmailed.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://www.tabuu.xxx/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://www.vsem2017.org/vn/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://www.yoannturp.xyz/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://xishuai.net/thread-61682-1-1.html", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://zoom-client.xyz/zoom/join", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://23.254.253.75/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://36.92.91.94/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://38.242.201.111/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://216.107.136.10/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://5.230.252.157/zoom/join", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://autoprotect.com.de/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://paypalperu.com/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://tvdhoenn.net/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://www.atajerefoods.com/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://www.drogueriasanjose.net/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "https://194.163.171.210/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "https://216.107.136.10/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://donglinchem.com/index.php?m=content", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "http://www.gaubay.com/desktop/gaubay_setup.exe", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "http://gaubay.com/desktop/gaubay_setup.exe", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - } - ], - "contacted_urls": [ - { - "value": "https://fonts.gstatic.com/s/roboto/v18/KFOlCnqEu92Fr1MmWUlfBBc-.woff", - "count": 12, - "total_related": 22389, - "prevalence": 0.0005359774889454643 - }, - { - "value": "https://fonts.gstatic.com/s/roboto/v18/KFOmCnqEu92Fr1Mu4mxM.woff", - "count": 12, - "total_related": 34343, - "prevalence": 0.00034941618379291266 - }, - { - "value": "http://r3.i.lencr.org/", - "count": 12, - "total_related": 42892, - "prevalence": 0.0002797724517392521 - }, - { - "value": "https://bitly.com/s/v468/graphics/bitly_logo_red.svg", - "count": 9, - "total_related": 129, - "prevalence": 0.06976744186046512 - }, - { - "value": "https://bitly.com/s/v468/graphics/spam_warning_illustration.svg", - "count": 9, - "total_related": 129, - "prevalence": 0.06976744186046512 - }, - { - "value": "https://fonts.gstatic.com/s/roboto/v18/KFOkCnqEu92Fr1Mu51xIIzQ.woff", - "count": 9, - "total_related": 1034, - "prevalence": 0.008704061895551257 - }, - { - "value": "https://fonts.gstatic.com/s/roboto/v18/KFOlCnqEu92Fr1MmSU5fBBc-.woff", - "count": 9, - "total_related": 22072, - "prevalence": 0.00040775643349039506 - }, - { - "value": "https://content.googleapis.com/drive/v2internal/viewerimpressions?key=AIzaSyC1eQ1xj69IdTMeii5r7brs3R90eck-m7k&alt=json", - "count": 8, - "total_related": 84, - "prevalence": 0.09523809523809523 - }, - { - "value": "https://ssl.gstatic.com/images/branding/product/1x/drive_2020q4_32dp.png", - "count": 8, - "total_related": 133, - "prevalence": 0.06015037593984962 - }, - { - "value": "https://fonts.googleapis.com/css?family=Google%20Sans:300,400,500,700", - "count": 7, - "total_related": 54, - "prevalence": 0.12962962962962962 - }, - { - "value": "https://fonts.googleapis.com/css?family=Google+Sans:300,400,500,700", - "count": 7, - "total_related": 103, - "prevalence": 0.06796116504854369 - }, - { - "value": "http://crl.identrust.com/dstrootcax3crl.crl", - "count": 7, - "total_related": 19855, - "prevalence": 0.00035255603122639134 - }, - { - "value": "https://fonts.gstatic.com/s/roboto/v18/KFOlCnqEu92Fr1MmEU9fBBc-.woff", - "count": 7, - "total_related": 27297, - "prevalence": 0.00025643843645821885 - }, - { - "value": "http://isrg.trustid.ocsp.identrust.com/mfewtzbnmeswstajbgurdgmcgguabbrv9ghnqxlssgkbnmarpucshyovpgquxkexphsscfrb4uuqdf/efwcfiraceaobquiaaafthxnqc4xspwg=", - "count": 6, - "total_related": 4298, - "prevalence": 0.0013959981386691485 - }, - { - "value": "http://cert.int-x3.letsencrypt.org/", - "count": 6, - "total_related": 4578, - "prevalence": 0.001310615989515072 - }, - { - "value": "http://ocsp.digicert.com/MFEwTzBNMEswSTAJBgUrDgMCGgUABBTfqhLjKLEJQZPin0KCzkdAQpVYowQUsT7DaQP4v0cB1JgmGggC72NkK8MCEAx5qUSwjBGVIJJhX+JrHYM=", - "count": 6, - "total_related": 7956, - "prevalence": 0.0007541478129713424 - }, - { - "value": "http://ocsp.digicert.com/mfewtzbnmeswstajbgurdgmcgguabbtfqhljklejqzpin0kczkdaqpvyowqust7daqp4v0cb1jgmgggc72nkk8mceax5quswjbgvijjhx+jrhym=", - "count": 5, - "total_related": 420, - "prevalence": 0.011904761904761904 - }, - { - "value": "http://r3.o.lencr.org/mfmwutbpme0wszajbgurdgmcgguabbri2smg+yvtlu/w3mjs9we3nfmzxaqufc6zf7dyvsuuuala5h+vnysuwsycegpnc82hpwpm2mmdq5wapm+4va==", - "count": 4, - "total_related": 5, - "prevalence": 0.8 - }, - { - "value": "https://ssl.gstatic.com/docs/doclist/images/mediatype/icon_3_pdf_x16.png", - "count": 4, - "total_related": 27, - "prevalence": 0.14814814814814814 - }, - { - "value": "http://ocsp.digicert.com/mfewtzbnmeswstajbgurdgmcgguabbrj9l2kgl92bpjf3katadtxautmhgqupdnqpdagre7zsmakzdmh1pj41g8cea1kd7oezzybs8qeyg+xrx4=", - "count": 4, - "total_related": 133, - "prevalence": 0.03007518796992481 - }, - { - "value": "https://fonts.gstatic.com/s/googlesans/v16/4UabrENHsxJlGDuGo1OIlLU94YtzCwA.woff", - "count": 4, - "total_related": 374, - "prevalence": 0.0106951871657754 - }, - { - "value": "https://fonts.gstatic.com/s/googlesans/v16/4UaGrENHsxJlGDuGo1OIlL3Owpg.woff", - "count": 4, - "total_related": 414, - "prevalence": 0.00966183574879227 - }, - { - "value": "http://ocsp.pki.goog/gtsr1/MEwwSjBIMEYwRDAHBgUrDgMCGgQUMJHC1g+C6hie2xOwdV2bBG5n8FAEFOSvKyZxGitIJ4UvUmYs7/CJE3E+Ag0CA7xTWWs0xxj1AVBm", - "count": 4, - "total_related": 67431, - "prevalence": 5.931989737657754e-5 - }, - { - "value": "http://r3.o.lencr.org/mfmwutbpme0wszajbgurdgmcgguabbri2smg+yvtlu/w3mjs9we3nfmzxaqufc6zf7dyvsuuuala5h+vnysuwsycegqoznwlsh7iqmcyemlgbhdnka==", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "http://web.commoncome.online:8080/client", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "https://content.googleapis.com/static/proxy.html?usegapi=1&jsh=m;/_/scs/abc-static/_/js/k=gapi.gapi.en.7RphtNcGHDQ.O/d=1/rs=AHpOoo_-zmYhp_Ir7_CCxM3l-AckMvaI9A/m=__features__", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "https://file.fclouddown.co/", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "https://share.bloomcloud.org/", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "https://www.googlesheet.info/", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "http://ocsp.int-x3.letsencrypt.org/mfmwutbpme0wszajbgurdgmcgguabbr+5mrncpqz/piiigrsfqetyheixqquqepqywr93brm0tm3pkvl7/oo7kecegn5w4lq07rpb55dhem0crkk+g==", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "http://r3.o.lencr.org/mfmwutbpme0wszajbgurdgmcgguabbri2smg+yvtlu/w3mjs9we3nfmzxaqufc6zf7dyvsuuuala5h+vnysuwsycegocxffnapuhkynrbh5xgplwcg==", - "count": 3, - "total_related": 7, - "prevalence": 0.42857142857142855 - }, - { - "value": "https://ssl.gstatic.com/docs/doclist/images/mediatype/icon_1_word_x16.png", - "count": 3, - "total_related": 9, - "prevalence": 0.3333333333333333 - }, - { - "value": "https://ssl.gstatic.com/docs/common/viewer/v3/v-sprite42.svg", - "count": 3, - "total_related": 10, - "prevalence": 0.3 - }, - { - "value": "https://fonts.gstatic.com/s/googlesans/v36/4UabrENHsxJlGDuGo1OIlLV154tzCwA.woff", - "count": 3, - "total_related": 44, - "prevalence": 0.06818181818181818 - }, - { - "value": "https://ssl.gstatic.com/gb/images/p1_4d827a84.png", - "count": 3, - "total_related": 197, - "prevalence": 0.015228426395939087 - }, - { - "value": "https://fonts.gstatic.com/s/googlesans/v36/4UabrENHsxJlGDuGo1OIlLU94YtzCwA.woff", - "count": 3, - "total_related": 216, - "prevalence": 0.013888888888888888 - }, - { - "value": "https://lh3.googleusercontent.com/fKYxJWmqWKS5JTWJUHJSE6u4tKZ6JbFx7YGMbbH0cI72r3E2MhU0vPrE6uaflUm94Q=w64", - "count": 3, - "total_related": 225, - "prevalence": 0.013333333333333334 - }, - { - "value": "http://www.gstatic.com:443/", - "count": 3, - "total_related": 252, - "prevalence": 0.011904761904761904 - }, - { - "value": "https://fonts.gstatic.com/s/googlesans/v36/4UaGrENHsxJlGDuGo1OIlL3Owpg.woff", - "count": 3, - "total_related": 290, - "prevalence": 0.010344827586206896 - }, - { - "value": "http://fonts.gstatic.com:443/", - "count": 3, - "total_related": 353, - "prevalence": 0.0084985835694051 - }, - { - "value": "http://ocsp.pki.goog/gsr2/ME4wTDBKMEgwRjAJBgUrDgMCGgUABBTgXIsxbvr2lBkPpoIEVRE6gHlCnAQUm+IHV2ccHsBqBt5ZtJot39wZhi4CDQHjtJqhjYqpgSVpULg=", - "count": 3, - "total_related": 97932, - "prevalence": 3.063350079647102e-5 - }, - { - "value": "http://bit.ly:443/2Fm2lBH", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://bit.ly:443/2LwMGCD", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://bit.ly:443/2U1JjGq", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://bit.ly:443/2mDY7hQ", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://docs-send.online/getBalance/usdt/ethereum", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://ocsp.int-x3.letsencrypt.org/mfmwutbpme0wszajbgurdgmcgguabbr+5mrncpqz/piiigrsfqetyheixqquqepqywr93brm0tm3pkvl7/oo7kecegrcxlq3lxz1vlgj2zal8/ju+q==", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://r3.o.lencr.org/mfmwutbpme0wszajbgurdgmcgguabbri2smg+yvtlu/w3mjs9we3nfmzxaqufc6zf7dyvsuuuala5h+vnysuwsycegmrjplhtoafait9+zjicme2ra==", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://share.1drvmicrosoft.com:443/2md4s4vcify6qAAHuH7lvi/gNOxBneoZaTFG8fGQYqg=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://www.googlesheet.info:443/NZrTnPVmtfjcSMz8n1hZZzvHQvUUEfFnIMAYliQuR+A=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://www.onlinecloud.cloud:443/Pdx6AiWhoRniAEQb02NAPdv+XZIcCqH63cEyxFjHq10=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "https://bit.ly/2HhIXsB", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "https://bit.ly/2OQMnTi", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "https://bit.ly/32zHYhY", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "https://bit.ly/3l26mi5", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "https://bitly.com/a/warning?hash=2OQMnTi&url=http://drivegoogles.com/open?id=RFugW2hRDrsB4cFyPNyeGuVPJ337AiQ%20SDTntkAntUFwR1%20PUgVBUBdaK5KDuwvm", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "https://bitly.com/a/warning?hash=2OQMnTi&url=http://drivegoogles.com/open?id=RFugW2hRDrsB4cFyPNyeGuVPJ337AiQ+SDTntkAntUFwR1+PUgVBUBdaK5KDuwvm", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "https://docs.azureword.com/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "https://document.fastercapital.cc/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://googledrive.email/open", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "http://ocsp.int-x3.letsencrypt.org/mfmwutbpme0wszajbgurdgmcgguabbr+5mrncpqz/piiigrsfqetyheixqquqepqywr93brm0tm3pkvl7/oo7kecegpfwbsfdqrtq7bcg+boqnhv8a==", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "https://cloudshare.jumpshare.vip/", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "http://ocsp.int-x3.letsencrypt.org/mfmwutbpme0wszajbgurdgmcgguabbr+5mrncpqz/piiigrsfqetyheixqquqepqywr93brm0tm3pkvl7/oo7kecegrhm1mvydqpe/us6rkf94zx5a==", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "http://r3.o.lencr.org/mfmwutbpme0wszajbgurdgmcgguabbri2smg+yvtlu/w3mjs9we3nfmzxaqufc6zf7dyvsuuuala5h+vnysuwsycegtm9cqpy5+hbxqee6+ftr4ezg==", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "https://documentprotect.live/", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "https://fonts.gstatic.com/s/googlesans/v27/4UabrENHsxJlGDuGo1OIlLV154tzCwA.woff", - "count": 2, - "total_related": 24, - "prevalence": 0.08333333333333333 - }, - { - "value": "http://ocsp.digicert.com/mfewtzbnmeswstajbgurdgmcgguabbrj9l2kgl92bpjf3katadtxautmhgqupdnqpdagre7zsmakzdmh1pj41g8ceay+k8lpt+/r4u1gfxgejoe=", - "count": 2, - "total_related": 34, - "prevalence": 0.058823529411764705 - }, - { - "value": "http://ocsp.pki.goog/gts1c3/MFIwUDBOMEwwSjAJBgUrDgMCGgUABBTHLnmK3f9hNLO67UdCuLvGwCQHYwQUinR/r4XN7pXNPZzQ4kYU83E1HScCEQC5z2OD8IgZMwoAAAAA+mIx", - "count": 2, - "total_related": 63, - "prevalence": 0.031746031746031744 - }, - { - "value": "https://bitly.com/s/v468/graphics/bitly_warning_hand.png", - "count": 2, - "total_related": 77, - "prevalence": 0.025974025974025976 - }, - { - "value": "http://ssl.gstatic.com:443/", - "count": 2, - "total_related": 91, - "prevalence": 0.02197802197802198 - }, - { - "value": "http://crl3.digicert.com/digicertglobalrootca.crl", - "count": 2, - "total_related": 129, - "prevalence": 0.015503875968992248 - }, - { - "value": "https://fonts.gstatic.com/s/googlesans/v27/4UabrENHsxJlGDuGo1OIlLU94YtzCwA.woff", - "count": 2, - "total_related": 235, - "prevalence": 0.00851063829787234 - }, - { - "value": "http://ocsp.digicert.com/mfewtzbnmeswstajbgurdgmcgguabbsauqybmq2awn1rh6doh/sbygfv7gqua95qnvbrtltm8kpigxvdl7i90vuceavg/hgj9+guhaofzhteyxm=", - "count": 2, - "total_related": 247, - "prevalence": 0.008097165991902834 - }, - { - "value": "http://ctldl.windowsupdate.com/msdownload/update/v3/static/trustedr/en/CABD2A79A1076A31F21D253635CB039D4329A5E8.crt", - "count": 2, - "total_related": 272, - "prevalence": 0.007352941176470588 - }, - { - "value": "https://fonts.gstatic.com/s/googlesans/v27/4UaGrENHsxJlGDuGo1OIlL3Owpg.woff", - "count": 2, - "total_related": 314, - "prevalence": 0.006369426751592357 - }, - { - "value": "http://ocsp.pki.goog/gts1c3/MFEwTzBNMEswSTAJBgUrDgMCGgUABBTHLnmK3f9hNLO67UdCuLvGwCQHYwQUinR/r4XN7pXNPZzQ4kYU83E1HScCEGOt6RAuLJ4ACgAAAAD6ZZ0=", - "count": 2, - "total_related": 708, - "prevalence": 0.002824858757062147 - }, - { - "value": "https://fonts.gstatic.com/s/googlesans/v45/4Ua_rENHsxJlGDuGo1OIlJfC6l_24rlCK1Yo_Iqcsih3SAyH6cAwhX9RFD48TE63OOYKtrw2IJllpy8.woff", - "count": 2, - "total_related": 893, - "prevalence": 0.0022396416573348264 - }, - { - "value": "https://fonts.gstatic.com/s/googlesans/v45/4Ua_rENHsxJlGDuGo1OIlJfC6l_24rlCK1Yo_Iqcsih3SAyH6cAwhX9RFD48TE63OOYKtrwEIJllpy8.woff", - "count": 2, - "total_related": 1242, - "prevalence": 0.001610305958132045 - }, - { - "value": "http://ocsp.pki.goog/gts1o1core/MFEwTzBNMEswSTAJBgUrDgMCGgUABBRCRjDCJxnb3nDwj/xz5aZfZjgXvAQUmNH4bhDrz5vsYJ8YkBug630J/SsCEHun1LxO7wGYAwAAAADMmFo=", - "count": 2, - "total_related": 2118, - "prevalence": 0.0009442870632672333 - }, - { - "value": "http://ocsp.digicert.com/MFEwTzBNMEswSTAJBgUrDgMCGgUABBSAUQYBMq2awn1Rh6Doh/sBYgFV7gQUA95QNVbRTLtm8KPiGxvDl7I90VUCEAbY2QTVWENG9oovp1QifsQ=", - "count": 2, - "total_related": 14103, - "prevalence": 0.00014181379848259235 - }, - { - "value": "http://g.symcd.com/MEQwQjBAMD4wPDAJBgUrDgMCGgUABBSxtDkXkBa3l3lQEfFgudSiPNvt7gQUAPkqw0GRtsnCuD5V8sCXEROgByACAwI6kg==", - "count": 2, - "total_related": 19586, - "prevalence": 0.00010211375472276115 - }, - { - "value": "http://ocsp.digicert.com/MFEwTzBNMEswSTAJBgUrDgMCGgUABBTfqhLjKLEJQZPin0KCzkdAQpVYowQUsT7DaQP4v0cB1JgmGggC72NkK8MCEApfEU0DWxeRF9Lv1AOMPzs=", - "count": 2, - "total_related": 21415, - "prevalence": 9.339248190520663e-5 - }, - { - "value": "http://crl.pki.goog/gtsr1/gtsr1.crl", - "count": 2, - "total_related": 52891, - "prevalence": 3.781361668336768e-5 - }, - { - "value": "http://crl.pki.goog/gsr1/gsr1.crl", - "count": 2, - "total_related": 60471, - "prevalence": 3.3073704751037686e-5 - }, - { - "value": "http://apps.identrust.com/roots/dstrootcax3.p7c", - "count": 26, - "total_related": 100000, - "prevalence": 0.00026 - }, - { - "value": "http://www.download.windowsupdate.com/msdownload/update/v3/static/trustedr/en/authrootstl.cab", - "count": 19, - "total_related": 100000, - "prevalence": 0.00019 - }, - { - "value": "https://www.bing.com/favicon.ico", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "http://crl.identrust.com/DSTROOTCAX3CRL.crl", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "http://www.microsoft.com/pki/certs/MicRooCerAut_2010-06-23.crt", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "http://ctldl.windowsupdate.com/msdownload/update/v3/static/trustedr/en/disallowedcertstl.cab", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "http://ocsp.comodoca.com/MFcwVaADAgEAME4wTDBKMAkGBSsOAwIaBQAEFOsl2JD+JyD0HX1qwV7vds9iz6t4BBR1cacZSBm8nZ3qQUfflMRId5nTeQIRAJjBcnaqg2kI3NxbTvi9QXQ=", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "http://x1.c.lencr.org/", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "http://ocsp.usertrust.com/MFYwVKADAgEAME0wSzBJMAkGBSsOAwIaBQAEFM0w0kw0OoKrHwVwFYrXoQd2KZLpBBRTeb9aqitKz1SA4dibwJ3ysgNmywIQXfq7lXfPq2cfx93+0c8gWw==", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "http://x1.i.lencr.org/", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "https://ardownload3.adobe.com/pub/adobe/reader/win/AcrobatDC/2200320282/AcroRdrDCUpd2200320282.msi", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "https://www.google-analytics.com/analytics.js", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "http://ctldl.windowsupdate.com/msdownload/update/v3/static/trustedr/en/authrootstl.cab", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "http://ocsp.pki.goog/gsr1/MFEwTzBNMEswSTAJBgUrDgMCGgUABBS3V7W2nAf4FiMTjpDJKg6+MgGqMQQUYHtmGkUNl8qJUC99BM00qP/8/UsCEHe9DWzbNvka6iEPxPBY0w0=", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "http://ocsp.pki.goog/gtsr1/ME4wTDBKMEgwRjAJBgUrDgMCGgUABBQwkcLWD4LqGJ7bE7B1XZsEbmfwUAQU5K8rJnEaK0gnhS9SZizv8IkTcT4CDQIDvFNZazTHGPUBUGY=", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "http://www.bing.com/favicon.ico", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - } - ], - "contacted_domains": [ - { - "value": "bitly.com", - "count": 11, - "total_related": 15378, - "prevalence": 0.000715307582260372 - }, - { - "value": "r3.i.lencr.org", - "count": 10, - "total_related": 50425, - "prevalence": 0.00019831432821021318 - }, - { - "value": "googlesheet.info", - "count": 6, - "total_related": 11, - "prevalence": 0.5454545454545454 - }, - { - "value": "www.googlesheet.info", - "count": 6, - "total_related": 11, - "prevalence": 0.5454545454545454 - }, - { - "value": "file.fclouddown.co", - "count": 5, - "total_related": 12, - "prevalence": 0.4166666666666667 - }, - { - "value": "content.googleapis.com", - "count": 5, - "total_related": 8250, - "prevalence": 0.0006060606060606061 - }, - { - "value": "commoncome.online", - "count": 4, - "total_related": 6, - "prevalence": 0.6666666666666666 - }, - { - "value": "web.commoncome.online", - "count": 4, - "total_related": 6, - "prevalence": 0.6666666666666666 - }, - { - "value": "googlesheetpage.org", - "count": 4, - "total_related": 7, - "prevalence": 0.5714285714285714 - }, - { - "value": "share.1drvmicrosoft.com", - "count": 4, - "total_related": 7, - "prevalence": 0.5714285714285714 - }, - { - "value": "azureword.com", - "count": 4, - "total_related": 8, - "prevalence": 0.5 - }, - { - "value": "48.193.43.104.in-addr.arpa", - "count": 4, - "total_related": 72540, - "prevalence": 5.5141990625861594e-5 - }, - { - "value": "venturelabo.co", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "datacentre.center", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "fclouddown.co", - "count": 3, - "total_related": 7, - "prevalence": 0.42857142857142855 - }, - { - "value": "113.162.28.149.in-addr.arpa", - "count": 3, - "total_related": 8, - "prevalence": 0.375 - }, - { - "value": "share.bloomcloud.org", - "count": 3, - "total_related": 14, - "prevalence": 0.21428571428571427 - }, - { - "value": "11.248.199.67.in-addr.arpa", - "count": 3, - "total_related": 453, - "prevalence": 0.006622516556291391 - }, - { - "value": "cert.int-x3.letsencrypt.org", - "count": 3, - "total_related": 4688, - "prevalence": 0.0006399317406143345 - }, - { - "value": "217.106.137.52.in-addr.arpa", - "count": 3, - "total_related": 33353, - "prevalence": 8.99469313105268e-5 - }, - { - "value": "210.31.213.23.in-addr.arpa", - "count": 3, - "total_related": 34765, - "prevalence": 8.629368617862792e-5 - }, - { - "value": "weather-edge.fe.apple-dns.net", - "count": 3, - "total_related": 51318, - "prevalence": 5.8459020226820995e-5 - }, - { - "value": "int-x3.letsencrypt.org", - "count": 3, - "total_related": 99594, - "prevalence": 3.012229652388698e-5 - }, - { - "value": "1drvmicrosoft.com", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "14.110.152.52.in-addr.arpa", - "count": 2, - "total_related": 56123, - "prevalence": 3.563601375550131e-5 - }, - { - "value": "0.204.248.87.in-addr.arpa", - "count": 2, - "total_related": 58007, - "prevalence": 3.447859741065733e-5 - }, - { - "value": "106.89.54.20.in-addr.arpa", - "count": 2, - "total_related": 58859, - "prevalence": 3.397951035525578e-5 - }, - { - "value": "137.90.64.13.in-addr.arpa", - "count": 2, - "total_related": 61408, - "prevalence": 3.256904637832204e-5 - }, - { - "value": "125.21.88.13.in-addr.arpa", - "count": 2, - "total_related": 62572, - "prevalence": 3.196317841846193e-5 - }, - { - "value": "144.139.43.104.in-addr.arpa", - "count": 2, - "total_related": 69290, - "prevalence": 2.8864193967383462e-5 - }, - { - "value": "150.32.88.40.in-addr.arpa", - "count": 2, - "total_related": 71854, - "prevalence": 2.7834219389317228e-5 - }, - { - "value": "bit.ly", - "count": 44, - "total_related": 100000, - "prevalence": 0.00044 - }, - { - "value": "r3.o.lencr.org", - "count": 32, - "total_related": 100000, - "prevalence": 0.00032 - }, - { - "value": "x1.c.lencr.org", - "count": 25, - "total_related": 100000, - "prevalence": 0.00025 - }, - { - "value": "apps.identrust.com", - "count": 21, - "total_related": 100000, - "prevalence": 0.00021 - }, - { - "value": "identrust.com", - "count": 21, - "total_related": 100000, - "prevalence": 0.00021 - }, - { - "value": "windowsupdate.com", - "count": 21, - "total_related": 100000, - "prevalence": 0.00021 - }, - { - "value": "ctldl.windowsupdate.com", - "count": 19, - "total_related": 100000, - "prevalence": 0.00019 - }, - { - "value": "api.apple-cloudkit.com", - "count": 16, - "total_related": 100000, - "prevalence": 0.00016 - }, - { - "value": "windowsupdatebg.s.llnwi.net", - "count": 15, - "total_related": 100000, - "prevalence": 0.00015 - }, - { - "value": "o.lencr.org", - "count": 14, - "total_related": 100000, - "prevalence": 0.00014 - }, - { - "value": "www.download.windowsupdate.com", - "count": 14, - "total_related": 100000, - "prevalence": 0.00014 - }, - { - "value": "download.windowsupdate.com", - "count": 13, - "total_related": 100000, - "prevalence": 0.00013 - }, - { - "value": "crl.identrust.com", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "i.lencr.org", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "www.gstatic.com", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "gstatic.com", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": "bing.com", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": "fonts.gstatic.com", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": "login.live.com", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": "ssl.gstatic.com", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": "www.bing.com", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": "armmf.adobe.com", - "count": 8, - "total_related": 100000, - "prevalence": 8e-5 - }, - { - "value": "c.apple.news", - "count": 8, - "total_related": 100000, - "prevalence": 8e-5 - }, - { - "value": "img-prod-cms-rt-microsoft-com.akamaized.net", - "count": 8, - "total_related": 100000, - "prevalence": 8e-5 - }, - { - "value": "acroipm2.adobe.com", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "arc.msn.com", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "googleusercontent.com", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "mask-api.fe.apple-dns.net", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "prda.aadg.msidentity.com", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "c.lencr.org", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "dns.msftncsi.com", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "fonts.googleapis.com", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "gateway.icloud.com", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "geo2.adobe.com", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "microsoft.com", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "p13n.adobe.io", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "www.microsoft.com", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "apple-finance.query.yahoo.com", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "digicert.com", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "fp2e7a.wpc.phicdn.net", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "gateway.fe.apple-dns.net", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "googleapis.com", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "lh3.googleusercontent.com", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "nexus.officeapps.live.com", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "ocsp.digicert.com", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "time.windows.com", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "33.28.101.95.in-addr.arpa", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "edgedl.me.gvt1.com", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "maxcdn.bootstrapcdn.com", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "pki.goog", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "154.210.82.20.in-addr.arpa", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "234.173.86.20.in-addr.arpa", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "49.28.101.95.in-addr.arpa", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "82.250.63.168.in-addr.arpa", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "adobe.com", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "apps.mzstatic.com", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "ardownload3.adobe.com", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "au-bg-shim.trafficmanager.net", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "audownload.windowsupdate.nsatc.net", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "cdn.icloud-content.com", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "clientservices.googleapis.com", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "isrg.trustid.ocsp.identrust.com", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "ocsp.int-x3.letsencrypt.org", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "ocsp.pki.goog", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "pubingress-feedback-1a6fe9caff1148fe.elb.us-west-2.amazonaws.com", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "trustid.ocsp.identrust.com", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "windowsupdate.s.llnwi.net", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "www.google-analytics.com", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "x1.i.lencr.org", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - } - ], - "contacted_ips": [ - { - "value": "67.199.248.11", - "count": 29, - "total_related": 74833, - "prevalence": 0.00038752956583325537 - }, - { - "value": "67.199.248.10", - "count": 29, - "total_related": 76228, - "prevalence": 0.000380437634465026 - }, - { - "value": "155.138.219.140", - "count": 8, - "total_related": 23, - "prevalence": 0.34782608695652173 - }, - { - "value": "149.28.162.113", - "count": 6, - "total_related": 29, - "prevalence": 0.20689655172413793 - }, - { - "value": "155.138.159.45", - "count": 5, - "total_related": 22, - "prevalence": 0.22727272727272727 - }, - { - "value": "67.199.248.15", - "count": 5, - "total_related": 13723, - "prevalence": 0.0003643518181155724 - }, - { - "value": "67.199.248.14", - "count": 5, - "total_related": 13874, - "prevalence": 0.00036038633415020905 - }, - { - "value": "23.205.105.180", - "count": 5, - "total_related": 35207, - "prevalence": 0.00014201721248615333 - }, - { - "value": "87.248.205.0", - "count": 5, - "total_related": 58863, - "prevalence": 8.494300324482272e-5 - }, - { - "value": "139.180.164.131", - "count": 3, - "total_related": 20, - "prevalence": 0.15 - }, - { - "value": "44.227.76.166", - "count": 3, - "total_related": 6449, - "prevalence": 0.0004651884013025275 - }, - { - "value": "62.152.42.139", - "count": 3, - "total_related": 6506, - "prevalence": 0.00046111281893636643 - }, - { - "value": "62.152.42.136", - "count": 3, - "total_related": 7325, - "prevalence": 0.00040955631399317407 - }, - { - "value": "99.83.154.118", - "count": 3, - "total_related": 55207, - "prevalence": 5.434093502635535e-5 - }, - { - "value": "34.202.64.211", - "count": 3, - "total_related": 58313, - "prevalence": 5.144650421003893e-5 - }, - { - "value": "17.253.83.195", - "count": 3, - "total_related": 90920, - "prevalence": 3.2996040475142986e-5 - }, - { - "value": "104.156.232.106", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "104.255.172.56", - "count": 2, - "total_related": 8, - "prevalence": 0.25 - }, - { - "value": "149.248.52.31", - "count": 2, - "total_related": 20, - "prevalence": 0.1 - }, - { - "value": "111.170.130.248", - "count": 2, - "total_related": 132, - "prevalence": 0.015151515151515152 - }, - { - "value": "111.170.130.242", - "count": 2, - "total_related": 145, - "prevalence": 0.013793103448275862 - }, - { - "value": "111.170.130.239", - "count": 2, - "total_related": 152, - "prevalence": 0.013157894736842105 - }, - { - "value": "111.170.130.240", - "count": 2, - "total_related": 155, - "prevalence": 0.012903225806451613 - }, - { - "value": "111.170.130.243", - "count": 2, - "total_related": 163, - "prevalence": 0.012269938650306749 - }, - { - "value": "111.170.130.244", - "count": 2, - "total_related": 169, - "prevalence": 0.011834319526627219 - }, - { - "value": "142.250.184.35", - "count": 2, - "total_related": 181, - "prevalence": 0.011049723756906077 - }, - { - "value": "140.249.3.104", - "count": 2, - "total_related": 188, - "prevalence": 0.010638297872340425 - }, - { - "value": "142.250.184.99", - "count": 2, - "total_related": 195, - "prevalence": 0.010256410256410256 - }, - { - "value": "116.211.183.141", - "count": 2, - "total_related": 236, - "prevalence": 0.00847457627118644 - }, - { - "value": "116.211.183.135", - "count": 2, - "total_related": 239, - "prevalence": 0.008368200836820083 - }, - { - "value": "111.170.130.238", - "count": 2, - "total_related": 325, - "prevalence": 0.006153846153846154 - }, - { - "value": "142.250.184.67", - "count": 2, - "total_related": 389, - "prevalence": 0.005141388174807198 - }, - { - "value": "119.96.138.224", - "count": 2, - "total_related": 458, - "prevalence": 0.004366812227074236 - }, - { - "value": "119.96.90.243", - "count": 2, - "total_related": 611, - "prevalence": 0.0032733224222585926 - }, - { - "value": "119.96.90.242", - "count": 2, - "total_related": 668, - "prevalence": 0.0029940119760479044 - }, - { - "value": "119.96.90.240", - "count": 2, - "total_related": 889, - "prevalence": 0.0022497187851518562 - }, - { - "value": "119.96.90.238", - "count": 2, - "total_related": 947, - "prevalence": 0.0021119324181626186 - }, - { - "value": "104.103.65.218", - "count": 2, - "total_related": 17842, - "prevalence": 0.0001120950566080036 - }, - { - "value": "142.250.72.142", - "count": 2, - "total_related": 37585, - "prevalence": 5.3212717839563654e-5 - }, - { - "value": "17.188.182.196", - "count": 2, - "total_related": 56729, - "prevalence": 3.5255336776604556e-5 - }, - { - "value": "17.188.182.68", - "count": 2, - "total_related": 56835, - "prevalence": 3.5189583883170584e-5 - }, - { - "value": "17.188.182.4", - "count": 2, - "total_related": 57354, - "prevalence": 3.48711510966977e-5 - }, - { - "value": "17.188.182.132", - "count": 2, - "total_related": 58041, - "prevalence": 3.445840009648352e-5 - }, - { - "value": "104.76.210.71", - "count": 2, - "total_related": 88551, - "prevalence": 2.2585854479339588e-5 - }, - { - "value": "224.0.0.252", - "count": 42, - "total_related": 100000, - "prevalence": 0.00042 - }, - { - "value": "127.0.0.1", - "count": 13, - "total_related": 100000, - "prevalence": 0.00013 - }, - { - "value": "255.255.255.255", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": "209.197.3.8", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": "67.195.204.56", - "count": 8, - "total_related": 100000, - "prevalence": 8e-5 - }, - { - "value": "178.79.208.1", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "72.21.81.240", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "87.248.202.1", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "17.248.195.71", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "192.229.211.108", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "64.78.201.1", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "72.21.91.29", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "17.248.195.72", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "17.253.144.10", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "67.195.228.56", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "87.248.204.0", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "114.114.114.114", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "17.248.195.65", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "64.78.200.1", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "95.101.28.33", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "104.18.10.207", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "104.18.11.207", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "131.107.255.255", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "17.157.64.66", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "17.248.200.66", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "17.248.200.68", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "17.248.203.64", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "17.253.21.201", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "17.253.83.197", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "20.190.155.130", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "20.190.155.132", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "20.190.155.2", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "20.190.155.3", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "20.190.155.67", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "20.82.210.154", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "23.22.254.206", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "52.202.204.11", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "52.5.13.197", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "54.227.187.23", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "58.158.177.102", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "8.8.4.4", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "92.123.140.146", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "92.123.143.219", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "95.101.28.59", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "104.155.138.21", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "104.18.38.233", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "104.85.0.137", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "104.97.14.18", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "104.97.14.90", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "104.99.72.226", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "107.178.223.183", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "107.22.247.231", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "108.177.127.94", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "13.107.4.50", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "151.101.3.6", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "17.179.252.2", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - } - ], - "execution_parents": [ - { - "value": "7010b962fefc8fb879e19b1f170345478875b81748b5a146218a7b0337627060", - "count": 8, - "total_related": 97, - "prevalence": 0.08247422680412371 - }, - { - "value": "8a7ba38d597e8230609df4153039d1bb898479d486e653a6d92d206dd4848c80", - "count": 4, - "total_related": 22, - "prevalence": 0.18181818181818182 - }, - { - "value": "1b1c8103d7cf206e0e055a95d9d3ff305d4a89f62c3d692a3d28745d3259158f", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "9de0c94bffe2fb7a87d05fd0087fecefa68c9b76c20f746cad7523f335f719c2", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "c2d9a510d82a3e003a059c6448fff61ba9e39fe8ec6f079b90adabfc93f72b4e", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "fd6c1fe9beaa905311ab053151013d1226636c20296a0947b7c8f1d22fffa430", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "a3f087c83453cde2bc845122c05ebeb60e8891e395b45823c192869ec1b72ea6", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "b0dd8c5bc3a8609f4c963c572f92f5a91da663e92e10c26ce385ecb27999db18", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "fe820433b912d08483030ae0a3229d2617f71999178fd29c909478ddef2fba8f", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "c034d3c6858a30eb4a31caa305d916996442f951edb58ba12247aceb755594c3", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "c35414673681517a7931f37fb299edac13ed993afa3e9a0009f2e0983e02d8e2", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "c909d2214af7449e9aabc3dad45465e8786b5aa4d25ed6abffce2fc3d9547b8e", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "cadd48debc8640828d9c119789666e3402d3f6fc4f98519c6024b9b03c09e598", - "count": 2, - "total_related": 8, - "prevalence": 0.25 - }, - { - "value": "d7bfa626bbc8e7db06fec500a84bcb25505119cd470bf3acdfd8252a270d2662", - "count": 2, - "total_related": 8, - "prevalence": 0.25 - }, - { - "value": "290c2e4d0efbed23de0d41d1b821396f5f1003f6f123ee6160d6d5028d01b961", - "count": 2, - "total_related": 9, - "prevalence": 0.2222222222222222 - }, - { - "value": "7446efa798cfa7908e78e7fb2bf3ac57486be4d2edea8a798683c949d504dee6", - "count": 2, - "total_related": 9, - "prevalence": 0.2222222222222222 - }, - { - "value": "034cf176ed9aae148e057a5298d8cbf93c13522039a448fffd0848a590236d0d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0e8842ed343c5ac26e78c3e79578b343bd1b085ee01e61374ee908c8110bad7b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "03d98ff0011bffc3f503f7a683bf8d1ff940012742f0cd88210d3adb84652176", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "0385af2de0d9df092b4b869e41aafe8c4df939188e207151fd3940663e201d3a", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "0905e92ac99501452b3d04687238fb1deca7dc1d23755c5dd4384f682b962c6f", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "0570225eb7f8d799ed9241f121ed1ce1924b7e070177c5e312123c378a599ab4", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "07fb3433e7e8a1de53d962ce57765e7a4fde498e0c600f423093b462a5d018b5", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "0b2f09df3edfab112ae31be31dc6c8804efb77e4273dd812c4c39a22f0669b20", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "0bd9d2f7144cf5f44664bd9d960e61a87eed101572a4e1c962f4875df9d0746f", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "0050ecc276887f68feff163da6ba83fe14627fdc61dbe63c320a31d52666a01c", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - }, - { - "value": "03f7d8bad3ffa94ed45aa711c02b6714c85bc2137a89ba23599986f574105fb9", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - }, - { - "value": "098bf0c657dc7262778eba7fbf49ee0231243b99a311ee9ff0de5f0da5507b60", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - }, - { - "value": "010eef56506f3edabeb971d54900f43b3df483ec83fd937127748a813cb09418", - "count": 1, - "total_related": 16, - "prevalence": 0.0625 - }, - { - "value": "0ae8563a4f2b6e101ea47c1a7be9d96e06f77194e07f1ab6eecb76d308e36073", - "count": 1, - "total_related": 20, - "prevalence": 0.05 - }, - { - "value": "04501a30f892bc8f3dd638870921fae22b8e76f40421331b7820eefe616a3991", - "count": 1, - "total_related": 21, - "prevalence": 0.047619047619047616 - }, - { - "value": "080634241035a4df32309be4f719a6dd7423f50ac1ae496e835fe558fd457ddb", - "count": 1, - "total_related": 24, - "prevalence": 0.041666666666666664 - }, - { - "value": "094a82a36f915791d7539610896dc58d24e5302128c8af1b209bff7309268256", - "count": 1, - "total_related": 24, - "prevalence": 0.041666666666666664 - }, - { - "value": "101ce8d5686059cc9b03872c65a5385fad5c781d07f51c2981e3d9b64e92cf6b", - "count": 1, - "total_related": 24, - "prevalence": 0.041666666666666664 - }, - { - "value": "00da169a0a75a12e30e6aa9000f33446ac0bfc2f037d1f3d9e6309f4891a0d13", - "count": 1, - "total_related": 25, - "prevalence": 0.04 - }, - { - "value": "0e62356b9d912114ec7fd6591119ed85405d0d0c5b631445e9b1d4e3554f9046", - "count": 1, - "total_related": 25, - "prevalence": 0.04 - }, - { - "value": "0d50c410618c3c3bf6cc5539e417e8e54ff41872153e399062d92afdde3fa06e", - "count": 1, - "total_related": 28, - "prevalence": 0.03571428571428571 - }, - { - "value": "0d6585ace9cb3a98d1cbad9410d66b675b9bb549abeb2ef454336db877c7c1ad", - "count": 1, - "total_related": 28, - "prevalence": 0.03571428571428571 - }, - { - "value": "08103fc9186d8b8b2745e8ea6ccff94ee24265820bcf8a5d0e3e30afdcbe6c3c", - "count": 1, - "total_related": 31, - "prevalence": 0.03225806451612903 - }, - { - "value": "0229f469523a766c5fed483f262385104d016d6efc345e9316547e02a1d56b20", - "count": 1, - "total_related": 32, - "prevalence": 0.03125 - }, - { - "value": "0362ced976befc2261c3dd6aa2c7c0090eb1a6b6f38c3dbcfad1e211ca7861b7", - "count": 1, - "total_related": 33, - "prevalence": 0.030303030303030304 - }, - { - "value": "03228a3ddc4af443182374ec6706c95be862f9b9561e12a54c6470cd312ece68", - "count": 1, - "total_related": 34, - "prevalence": 0.029411764705882353 - }, - { - "value": "032b934997e022cc20b601b17b75f6b9b9ae320b901cd5d5c819f3d434d3ce67", - "count": 1, - "total_related": 34, - "prevalence": 0.029411764705882353 - }, - { - "value": "08814f870210a44c521d51437fa625ada2d1e595f41480023f48dd82de96ef76", - "count": 1, - "total_related": 34, - "prevalence": 0.029411764705882353 - }, - { - "value": "0d40569212a13bb3de643bbfe81176ad2f008296865387367b06dbb4def90459", - "count": 1, - "total_related": 37, - "prevalence": 0.02702702702702703 - }, - { - "value": "0de8e10ef9a57e0a00d3364175fd4f33db405b2a0f623f5b8bd0ab49beff4b10", - "count": 1, - "total_related": 38, - "prevalence": 0.02631578947368421 - }, - { - "value": "07c5446322374d3af042993277d4923bffbf8dcaf2422fd0fb5ed51ae14b36f9", - "count": 1, - "total_related": 40, - "prevalence": 0.025 - }, - { - "value": "0675e1c6fbb159f4daae8e739bac88f4b2eef13a0dba7771f18ffce9c64a475b", - "count": 1, - "total_related": 46, - "prevalence": 0.021739130434782608 - }, - { - "value": "0fd66c0ffa96eb92ecfb1443b6caf6f7a7b7db624021bcf5bed4b619f0cbb1f2", - "count": 1, - "total_related": 46, - "prevalence": 0.021739130434782608 - }, - { - "value": "032f3505b87d7ab7e50a75f3eb75eb7715059f9135fa6beff0d965e5f775c6e4", - "count": 1, - "total_related": 75, - "prevalence": 0.013333333333333334 - }, - { - "value": "04eea4efb67fe69ccd4654e5b5f08b5525ad4ee412eb4e9e4116524474f0d979", - "count": 1, - "total_related": 76, - "prevalence": 0.013157894736842105 - }, - { - "value": "0f91e44ebde09408a9d9d88119dbb0754877ab637f05792cb379a38fb99b622f", - "count": 1, - "total_related": 92, - "prevalence": 0.010869565217391304 - }, - { - "value": "05b856ad5bb6de4e96b1ec8bfb2ff49217f882d4bad30339af6144624237c12a", - "count": 1, - "total_related": 93, - "prevalence": 0.010752688172043012 - }, - { - "value": "0e9d465827c3792ad31797f9fd1b7f591a271ed5aea8ba3853c6bfa40df4b96b", - "count": 1, - "total_related": 93, - "prevalence": 0.010752688172043012 - }, - { - "value": "01dc9ba218f64a41c5959d6fdaa90189c8781b0fe919b75b83cab7cf190631b6", - "count": 1, - "total_related": 96, - "prevalence": 0.010416666666666666 - }, - { - "value": "0d2fb382a1fb74f807616aeb32163b8f108cec2266b86d9b7869bd9711a4e092", - "count": 1, - "total_related": 102, - "prevalence": 0.00980392156862745 - }, - { - "value": "0554d30eba2e4d90d0e9a18b87e98fdb5afa047228c61d562c72c708cc467345", - "count": 1, - "total_related": 103, - "prevalence": 0.009708737864077669 - }, - { - "value": "0c42cf8b50b17903b20d0d4a602a6812d0f3814c30d2fa37bc1a99857abdff70", - "count": 1, - "total_related": 104, - "prevalence": 0.009615384615384616 - }, - { - "value": "002029b6f532fb031ad90da6b9b615df103eb430f276823bbef05949432809f4", - "count": 1, - "total_related": 109, - "prevalence": 0.009174311926605505 - }, - { - "value": "0fda6181afcccd825778e185fa2350699092c33e22e08b848435bf28f4a229bb", - "count": 1, - "total_related": 109, - "prevalence": 0.009174311926605505 - }, - { - "value": "0fcf4056224c488433a2155b041f37256bd5cd536892765dd7f95c65d7ec9d68", - "count": 1, - "total_related": 112, - "prevalence": 0.008928571428571428 - }, - { - "value": "0a6f23c1d090af9f4213aadded26e0ab6e4b0ae46b60176056a6ea93bbdf6e00", - "count": 1, - "total_related": 113, - "prevalence": 0.008849557522123894 - }, - { - "value": "0edefa4dc4405e6bbc642c85851c16f0e5f2cedd1dcc83fd7e9aa89f46bf699e", - "count": 1, - "total_related": 113, - "prevalence": 0.008849557522123894 - }, - { - "value": "05961506d552b5937a325e0e93b4cecd71593c460417e31945d142b2c02d935d", - "count": 1, - "total_related": 117, - "prevalence": 0.008547008547008548 - }, - { - "value": "0ddb6e987646245a74691ec471f13ba9c44712aaa2d93c66217a043111a5c560", - "count": 1, - "total_related": 118, - "prevalence": 0.00847457627118644 - }, - { - "value": "0b23a154c5578957bda01e70d00fc842ca0f6577b596a6aee89387139d2abed6", - "count": 1, - "total_related": 121, - "prevalence": 0.008264462809917356 - }, - { - "value": "00e02bb9cffc25a332d1a47ae4ae14e4e16fa07397243f554a4901a6ae25c04c", - "count": 1, - "total_related": 133, - "prevalence": 0.007518796992481203 - }, - { - "value": "04cf15b8f3b8b5e1b562143955584b28f182f69442d1a91fb26e3f454022ae24", - "count": 1, - "total_related": 150, - "prevalence": 0.006666666666666667 - }, - { - "value": "015c5d28a9e79d78982cece69c6d9dc9522a1c2601148846fbf13b0044bd69d7", - "count": 1, - "total_related": 152, - "prevalence": 0.006578947368421052 - }, - { - "value": "04c74bf600b641679ba3e58cf1280b3381ce5bac160b97b0e8d2e0e62a2d83e3", - "count": 1, - "total_related": 154, - "prevalence": 0.006493506493506494 - }, - { - "value": "0568d1061ed73ef7d7510b227149cea826b3e8afbfecc51f3f70e6af36f4c6c2", - "count": 1, - "total_related": 163, - "prevalence": 0.006134969325153374 - }, - { - "value": "050ef4161e8213553dbb3d626073acfd27028609d0636a7d7d8ff33cdfdd66f4", - "count": 1, - "total_related": 166, - "prevalence": 0.006024096385542169 - }, - { - "value": "0a216c69038b8214c58d827932a2973da38ff7b48f7e29cfc5231aa4a0a8a8e3", - "count": 1, - "total_related": 166, - "prevalence": 0.006024096385542169 - }, - { - "value": "06ac3c5b770c93157ebe6ba9c12d83da2ee9fbdc9998b838364bacce657ca1eb", - "count": 1, - "total_related": 173, - "prevalence": 0.005780346820809248 - }, - { - "value": "048acbcb98e458adb9b96b756f6a72ab5787c8801b08cf3c1b2ba4365b0216b7", - "count": 1, - "total_related": 178, - "prevalence": 0.0056179775280898875 - }, - { - "value": "0abed94d9b64745ec915823ef063823902102fa9eae6a3dfd7036a78801cce59", - "count": 1, - "total_related": 181, - "prevalence": 0.0055248618784530384 - }, - { - "value": "0c5bca4b44fb1924b3c365224db946103a25956792e777fdb3e142d35d63bc23", - "count": 1, - "total_related": 182, - "prevalence": 0.005494505494505495 - }, - { - "value": "072584dbaafa1a9de34876d4a16dfb468898e675fa7af6049c5b4eeb68793286", - "count": 1, - "total_related": 184, - "prevalence": 0.005434782608695652 - }, - { - "value": "0c7eab150cb5a7cf898fa4610a0c0e6c2ca9fca39be6dd2c63fa1b96f4996cb1", - "count": 1, - "total_related": 185, - "prevalence": 0.005405405405405406 - }, - { - "value": "0cd22083fddf98e7fe4dbf2db7da9afb2dfffb95dedb2b40100b6dd8453819c6", - "count": 1, - "total_related": 192, - "prevalence": 0.005208333333333333 - }, - { - "value": "0c1db1d1aba61775fa3e7bdbabad5f18a1aff51bac7db4b6b808bf2675444ac3", - "count": 1, - "total_related": 196, - "prevalence": 0.00510204081632653 - }, - { - "value": "04430b619aaa96a00c4d37882294cd571da49415a0b652a4a3c6a30daddd92c2", - "count": 1, - "total_related": 201, - "prevalence": 0.004975124378109453 - }, - { - "value": "031a639261ca58801862a7b993bb625b03625312ddacfd42550d0df3125203af", - "count": 1, - "total_related": 206, - "prevalence": 0.0048543689320388345 - }, - { - "value": "0cb6fb244d6da1e03b2213543845c4dd680032d84bfb09c3cb06f2c7a535a30a", - "count": 1, - "total_related": 206, - "prevalence": 0.0048543689320388345 - }, - { - "value": "0e44fffc02c1ca922a1221a304b9287d24720fc7946e9be2852b6971d3d2770d", - "count": 1, - "total_related": 226, - "prevalence": 0.004424778761061947 - }, - { - "value": "0e4bc58478a97a6e6d911012026db84e80d9792037e3b29ccfe3e5bb8fdc7b92", - "count": 1, - "total_related": 231, - "prevalence": 0.004329004329004329 - }, - { - "value": "0cc5dad393fedfc057e85d70a5b1aa7ccd4509093d267860f87949d35054aa4a", - "count": 1, - "total_related": 252, - "prevalence": 0.003968253968253968 - }, - { - "value": "09e158988d7c6226f3f3de2bf04ea3dde08cb309424d1e61e1d18fe3f51ead99", - "count": 1, - "total_related": 254, - "prevalence": 0.003937007874015748 - }, - { - "value": "0e53bf145b5c4d2d55375117c8e2abc12a31191a62c633b8abab2624f3353901", - "count": 1, - "total_related": 292, - "prevalence": 0.003424657534246575 - }, - { - "value": "019b770492c29765f546ef986bffa2b9d1c336fac524e216d5f46abce4969b31", - "count": 1, - "total_related": 295, - "prevalence": 0.003389830508474576 - }, - { - "value": "0c470a89e0852af3773c5661bf809b6daede7b5321d619e2cc0928f051ca63c5", - "count": 1, - "total_related": 308, - "prevalence": 0.003246753246753247 - }, - { - "value": "0cd8de9186c7af16a21c8b3fada884f338d9a69a5692c557493ad5a45bf49e0a", - "count": 1, - "total_related": 324, - "prevalence": 0.0030864197530864196 - }, - { - "value": "099a3b878f6f0fed085db70fd81f9fc5bec09f8f800750637f9496a22c4c57c0", - "count": 1, - "total_related": 346, - "prevalence": 0.002890173410404624 - }, - { - "value": "07dbdb80645011e65b13f2a08dea59a63259dbd5fb177cc2beb7fdf14c55bdc4", - "count": 1, - "total_related": 408, - "prevalence": 0.0024509803921568627 - }, - { - "value": "0f821b2f1607906e3587cb88a31e8fc7fce04dcb1904a3d602a9c055c5d7df15", - "count": 1, - "total_related": 451, - "prevalence": 0.0022172949002217295 - }, - { - "value": "0476446cf83653dd3fb3af48556bb3272443e0e873f41bfeef9d1bcb7b6ea32b", - "count": 1, - "total_related": 454, - "prevalence": 0.0022026431718061676 - }, - { - "value": "0c17e4c697e2a62b111a729a3edab763ff93ce19ba8669b8b60d3d3712ca6422", - "count": 1, - "total_related": 480, - "prevalence": 0.0020833333333333333 - }, - { - "value": "01437200893b7323ffb31d52c1c9ccc23a9ede1f2f7f339cd293ffe4e020e92d", - "count": 1, - "total_related": 489, - "prevalence": 0.002044989775051125 - }, - { - "value": "07fa6b34d01b27f6352248fa0b063c7859aa03cbb15850ac7f34f455cfc46080", - "count": 1, - "total_related": 496, - "prevalence": 0.0020161290322580645 - }, - { - "value": "054d3269e9cc6376446459b25a749299fae1671ced92033c53306017a4ffdc28", - "count": 1, - "total_related": 500, - "prevalence": 0.002 - } - ], - "compressed_parents": [ - { - "value": "7010b962fefc8fb879e19b1f170345478875b81748b5a146218a7b0337627060", - "count": 8, - "total_related": 105, - "prevalence": 0.0761904761904762 - }, - { - "value": "1939d9fdcf831dc4cac001ba193669c75a336258bc99a1775471554229e4a69b", - "count": 4, - "total_related": 24, - "prevalence": 0.16666666666666666 - }, - { - "value": "6505a1e9f8658e35e54ac19a867c77dee8c0d2c1f74c52fa070ad7055d1924d8", - "count": 4, - "total_related": 24, - "prevalence": 0.16666666666666666 - }, - { - "value": "fdacd42a9fa5043487ab6c6d52b612e0eeab9beb61aa9bde1433655688638c7b", - "count": 4, - "total_related": 24, - "prevalence": 0.16666666666666666 - }, - { - "value": "5816eb32cbaadfc3477c823293a8c49cdf690b443c8fa3c19f98399c143df2b3", - "count": 4, - "total_related": 26, - "prevalence": 0.15384615384615385 - }, - { - "value": "09b83a501b8f919fc4861735097dd50957f21e81209d362b4fa425bd3348a495", - "count": 4, - "total_related": 32, - "prevalence": 0.125 - }, - { - "value": "14dd59531e312e29268c6bf88b25e8bf809f62139a07f587bac93d6d376fe27d", - "count": 4, - "total_related": 32, - "prevalence": 0.125 - }, - { - "value": "27f6c9a0765f8b44bac8edccfe852facb89396d7acb8d39d75b07d1e5bea6522", - "count": 4, - "total_related": 32, - "prevalence": 0.125 - }, - { - "value": "290c2e4d0efbed23de0d41d1b821396f5f1003f6f123ee6160d6d5028d01b961", - "count": 4, - "total_related": 32, - "prevalence": 0.125 - }, - { - "value": "2c5a0b53e226e29577cc183ff4b3bd6383d8759d0805f81abbc60865259a2ea3", - "count": 4, - "total_related": 32, - "prevalence": 0.125 - }, - { - "value": "39db73a999d58072dab20d1e6f3a0a9336f4e58e164fb42c6de83a8cc75b2555", - "count": 4, - "total_related": 32, - "prevalence": 0.125 - }, - { - "value": "4d53dd46d7e98bc5d7ef4d76f7007032c425b8c463c41937c65c0a537c3dc577", - "count": 4, - "total_related": 32, - "prevalence": 0.125 - }, - { - "value": "68a5a26836e3ddc176c31a7e0fccd797a387e29433b64ead5617b356976b979e", - "count": 4, - "total_related": 39, - "prevalence": 0.10256410256410256 - }, - { - "value": "d58e9953d6d5fd77105e87e82ff85146f8ee24a7ce6d4f8a04c0fa8597f5c45b", - "count": 4, - "total_related": 43, - "prevalence": 0.09302325581395349 - }, - { - "value": "7a237af1bcbd832b8d6d676a1c88302d21948b4b23628a8ee759ddbf2ea5dccc", - "count": 3, - "total_related": 22, - "prevalence": 0.13636363636363635 - }, - { - "value": "7e301cd02c6417fa8cfdd9ba92a6cd786182cc3b2f0ea5684638d35cfe7379a0", - "count": 3, - "total_related": 22, - "prevalence": 0.13636363636363635 - }, - { - "value": "f2c3326437de2f87d25cb7c299fd6a02bfe3e727bfc070ac8bc7fba5c24d5fe3", - "count": 3, - "total_related": 22, - "prevalence": 0.13636363636363635 - }, - { - "value": "e92a575fcdd83ac80d5815083bf3b7473a829423db3d152e52139035bc2d99e8", - "count": 3, - "total_related": 23, - "prevalence": 0.13043478260869565 - }, - { - "value": "f5332879e5b75a6e3533bcb2f31ff7a5179b645b64df0007a4e09bf623c78daf", - "count": 3, - "total_related": 23, - "prevalence": 0.13043478260869565 - }, - { - "value": "18d453428d757f428404027c354fe583e9e7535db3ad3e4a770875cd0e958b38", - "count": 3, - "total_related": 24, - "prevalence": 0.125 - }, - { - "value": "e2e1a9e3755b61128889daa06f3d3693ef0f8c224e6ce26198c563c58e4f0bc6", - "count": 3, - "total_related": 24, - "prevalence": 0.125 - }, - { - "value": "c43dfda63e6e534776eb24d284d0bdf21115181b49d6e31091de795d957cb5fc", - "count": 3, - "total_related": 25, - "prevalence": 0.12 - }, - { - "value": "16d7a2c77bb6fba9542ffde5bd09bb1178bf7e902c8541476c1614f9b0d5d8f4", - "count": 3, - "total_related": 26, - "prevalence": 0.11538461538461539 - }, - { - "value": "2e8969c112cb914d619815961dfb43609be99b630f02a344901ffa9b85107f5a", - "count": 3, - "total_related": 26, - "prevalence": 0.11538461538461539 - }, - { - "value": "208bbf9e939b0fb9ac9551ba2c51d93ab8d8ea6723e93ceae5ce6c36309c400d", - "count": 3, - "total_related": 27, - "prevalence": 0.1111111111111111 - }, - { - "value": "620a3be1cac81e9e537cc983c726a2d1804ecf384be9ab3f5a4293b82ecc555f", - "count": 3, - "total_related": 27, - "prevalence": 0.1111111111111111 - }, - { - "value": "3b3eb953c3c14258f9a93728cc19bbef3451626f0dc0a584b9348069695648b5", - "count": 3, - "total_related": 31, - "prevalence": 0.0967741935483871 - }, - { - "value": "3b7214a6d3436170d10d6725fad7766a17796b18d901d090b712a903a918290e", - "count": 3, - "total_related": 31, - "prevalence": 0.0967741935483871 - }, - { - "value": "633f75f86a9cd02f32ac58703562bc5ed44a6506f180c0aaa561118e699493a4", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "6a1ad59d8b27d49ca1b55f1ec270f502d86da5a73e2ccfe0f32128cf7d050678", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "a0cc870741c3b07032b67fd9cea9428ccec4538114c7d42adea2eca832d4fff8", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "acbf5fbb079921e149c025ea20166589e6828589a0edd675fa8d6510dd68276b", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "eb2ff0e9839369785453382419984a82706b41fef0c31c8e0860ae2030bac7d9", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "176e8a5a7b6737f8d3464c18a77deef778ec2b9b42b7e7eafc888aeaf2758c2d", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "1b1c8103d7cf206e0e055a95d9d3ff305d4a89f62c3d692a3d28745d3259158f", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "3315e5a4590e430550a4d85d0caf5f521d421a2966b23416fcfc275a5fd2629a", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "481629605412b02746f6ed7c102a391a4d8d49bd90f137bb262b723437de0937", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "51adde173872ba7378019324aca46e17e222d7b093518df6ad9d330324e113b2", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "53623ddbbeb28a9f4084a0ffc934e53e5770e8ef1570681713337a690fb26f89", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "57099b79a9824765f8be07471ec33c4cc0799abd877637a2a85affc50e163b1b", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "5b44a72ac38c9adeba133b516250f53d3cd13f4018cff7daf44a328ebc6c5ad0", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "6735668ded48372cec9a3a16fb58e5f08a5cd76ded7ffd4aa24233edb3499026", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "69cf309f71c3240525d00a14be5d0390c99313e24b0b6fef1d034f90c69cdd3d", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "6dd94d0b82d96f9afb3ecc48b779fcde5de22f8fd69fc46b27bbda99004adc76", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "8a649bb66b2a3b014e226da08118439611f6fdc91c69949ad0e04c3cdd7b12b5", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "8f924f8cc8457e7e77c791896e4f19ff90d79958a3cfef95b2f77fc8a521bf0c", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "945adaf666c38254072092c9690d928e46547c5309ad5d00e36a4add9b48083e", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "9de0c94bffe2fb7a87d05fd0087fecefa68c9b76c20f746cad7523f335f719c2", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "a80884ac34c1bc3b351bb30a95ca1944ecad407b22442caa087d06486b8a0d5e", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "b0dd8c5bc3a8609f4c963c572f92f5a91da663e92e10c26ce385ecb27999db18", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "ba54f79c32806b8d7e8f023b8339b1882761eecc3a5f8b9d40ab764bf2ed3f26", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "c2d9a510d82a3e003a059c6448fff61ba9e39fe8ec6f079b90adabfc93f72b4e", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "c35414673681517a7931f37fb299edac13ed993afa3e9a0009f2e0983e02d8e2", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "c909d2214af7449e9aabc3dad45465e8786b5aa4d25ed6abffce2fc3d9547b8e", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "cadd48debc8640828d9c119789666e3402d3f6fc4f98519c6024b9b03c09e598", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "dfa115eec65529d0fa393e154f79323e39ca7667e1b8f99973792a2954047a00", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "281316e8e5a440db0f732c12248b2fea33491ee75ee1d26c017af862ea08e630", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "7464850d7d6891418c503d0e1732812d7703d6c1fd5cf3c821f3c202786f9422", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "022344029b8bf951ba02b11025fe26c99193cb7c8a482c33862c9bbaa5e5528e", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "0907892725021508ad379c523d17c313e3690e99ab939e02d7e4edb6ff79ce3c", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "d7bfa626bbc8e7db06fec500a84bcb25505119cd470bf3acdfd8252a270d2662", - "count": 2, - "total_related": 8, - "prevalence": 0.25 - }, - { - "value": "86bef9a4f1d68575d28d56ea01339ca5546ee43d735a76a916f3ff229b3aafe1", - "count": 2, - "total_related": 9, - "prevalence": 0.2222222222222222 - }, - { - "value": "3799a81d94b35f9a4f93cbd7fef9de923240ea4eb6955abe44370e52cdd2c8b8", - "count": 2, - "total_related": 13, - "prevalence": 0.15384615384615385 - }, - { - "value": "cdb97d58714877880417308e8f1a2502df2f5d41fd33c182790b27d5484d1e01", - "count": 2, - "total_related": 14, - "prevalence": 0.14285714285714285 - }, - { - "value": "3ce003e64e0cfc63ea17b002fa242af25b7fcdc184095f51c3967fb24c5b55f1", - "count": 2, - "total_related": 18, - "prevalence": 0.1111111111111111 - }, - { - "value": "082b5199210db255dbae87a8ac89652588803541e8add620a958e8a0230488e1", - "count": 2, - "total_related": 19, - "prevalence": 0.10526315789473684 - }, - { - "value": "0e8842ed343c5ac26e78c3e79578b343bd1b085ee01e61374ee908c8110bad7b", - "count": 2, - "total_related": 19, - "prevalence": 0.10526315789473684 - }, - { - "value": "d249ceb4c2ca688972e7e59dbc89cc13418ef59023908af0686db0430a395522", - "count": 2, - "total_related": 19, - "prevalence": 0.10526315789473684 - }, - { - "value": "ca0127ec4bd2a0f4e2adbffeed0572a8b9f1539a5e18c25de8a198b29fede490", - "count": 2, - "total_related": 21, - "prevalence": 0.09523809523809523 - }, - { - "value": "b21613f855303077bdff7eb5ad75adccd76c2fb8c9c36111ed00e0829da583eb", - "count": 2, - "total_related": 22, - "prevalence": 0.09090909090909091 - }, - { - "value": "2d0b746b674af876858cdb38c77b4cd7986be618f608cc9ccd404ca2f4622faf", - "count": 2, - "total_related": 23, - "prevalence": 0.08695652173913043 - }, - { - "value": "3656925f16d5fb5e1e1ad82d96c270935ff4cc65a3ced68fa6896efffbbc01ea", - "count": 2, - "total_related": 23, - "prevalence": 0.08695652173913043 - }, - { - "value": "4053bae09c135978a4979d78086950ab556a5b967b6af244fc837b9f797a3a37", - "count": 2, - "total_related": 23, - "prevalence": 0.08695652173913043 - }, - { - "value": "4141ef4f175e7271fe5e7f68deaf37ba51aababd91e1939d52c368adc86eed61", - "count": 2, - "total_related": 23, - "prevalence": 0.08695652173913043 - }, - { - "value": "66d0c1a327746721825449b8e27147ebdc17844f9da2b39677418f19ede2b7be", - "count": 2, - "total_related": 23, - "prevalence": 0.08695652173913043 - }, - { - "value": "7a0c678c3914ba0baf0afdaf62501ac60775468cf7d572311f2591c65a38eac8", - "count": 2, - "total_related": 23, - "prevalence": 0.08695652173913043 - }, - { - "value": "d8d9fe9d745f52fbf228c5237f5b356a2b1121a5cbc0d2206dd414c1183b2235", - "count": 2, - "total_related": 25, - "prevalence": 0.08 - }, - { - "value": "252ece5f66c902e33ff8ccc5a6a706bd97dbfd45e85fe0c6d9a098b0a2e7b3ae", - "count": 2, - "total_related": 26, - "prevalence": 0.07692307692307693 - }, - { - "value": "c08ba7c0297cd515c5a24918f6e1ec705b72cdeea40078494d8b51de447b6b8c", - "count": 2, - "total_related": 26, - "prevalence": 0.07692307692307693 - }, - { - "value": "1fba098a58f8326c59b39045c3f07a1adce1bbfa23225e240e0f6fc5a2b2605d", - "count": 2, - "total_related": 27, - "prevalence": 0.07407407407407407 - }, - { - "value": "603d21059e14e2ded40170b4ab3ed534c7dd0a0de5ca94d2e364e81b26286652", - "count": 2, - "total_related": 27, - "prevalence": 0.07407407407407407 - }, - { - "value": "7cb4365e642d52118bc0cd1dc0a33b613759335efe0e764d403847f63961557a", - "count": 2, - "total_related": 27, - "prevalence": 0.07407407407407407 - }, - { - "value": "b6c85422297261aa9a3ba06a84718ffa6553175532ac549bf224ed845a4afce1", - "count": 2, - "total_related": 27, - "prevalence": 0.07407407407407407 - }, - { - "value": "b7032a3429273573638e1bfb9b2b921210a0019efcda466bef41153161f3d104", - "count": 2, - "total_related": 27, - "prevalence": 0.07407407407407407 - }, - { - "value": "d667492633c6a0141e4147cfe0f6dfa6c73c350bb64b858e85fcb645a03b4ba9", - "count": 2, - "total_related": 27, - "prevalence": 0.07407407407407407 - }, - { - "value": "16f93130d475052795868f3bfca505f30492efd8ae3ef60de963bc2e8ebecbef", - "count": 2, - "total_related": 29, - "prevalence": 0.06896551724137931 - }, - { - "value": "887fbf39125451a667977c82b989a2cdba78a888d228f941b8bae6d7dbb26433", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "979ef0f43f25a6707fd98f6f0cb6e8452c24f41216ff53486781f487803d69c4", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "be8a8d5433c45ce875dd1e78e612c585a96277f04650e8f2484d5286981495b8", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "4e7b5520ee2630d7a556c29ec186b22f4c4bccf2f7f9705adb456e5e1a88a702", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "60dfeb6fd3b5c4ec981cfc770feeef73ab72df4ce7389d5ae773c6ed9bebd5e1", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "88a4362f2aa90a39f610d390a5e6eede2d79434d13274d403e2dcd129e494c72", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "a5a03dc6641104a241653cff56d8b983ee88506246151e02895224a1900a759b", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "aec3ced40a3451dc2c6b1704cc50b0e0c8e549faaa8ae42b6d6f421b4fc2ef8a", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "c59dcf0abbc4b1a1c03a37fd78b0e5553d2b2061f5ec819c142fe9037a13d8e1", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "dd2e6ef9e47cae9aff728898fd46b814e999a6ad42c6eab8642795b57a66b185", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "66e96fbd6e977ddef3f0a2924978d92e5d67bd96e68dc4832f5041dbd40bcfc9", - "count": 2, - "total_related": 32, - "prevalence": 0.0625 - }, - { - "value": "c08337b2b166e16dd49695c0341ff470a4d42abcec7726320178a2df7d12658c", - "count": 2, - "total_related": 32, - "prevalence": 0.0625 - }, - { - "value": "be17fdbe8d7e674ec397cd457dda1b78824ed6597cdef665d1adbf31eaf58d66", - "count": 2, - "total_related": 33, - "prevalence": 0.06060606060606061 - }, - { - "value": "dfe41670127e628b7e8c9fc4602b73fb07d77bb85c6f77780469837cf5e271f5", - "count": 2, - "total_related": 34, - "prevalence": 0.058823529411764705 - } - ], - "dropped_files_sha256": [ - { - "value": "64e7a255a1af1b54fd9243faacb76a6527513fecf1b26bc3c9b8d3824dc9bdf9", - "count": 10, - "total_related": 1234, - "prevalence": 0.008103727714748784 - }, - { - "value": "cd198a3ad75a2b72b1f2c40c06920cd089b64eba38db3552628a4b427797cefc", - "count": 6, - "total_related": 157, - "prevalence": 0.03821656050955414 - }, - { - "value": "817c7650f5eaa0b4d4fc607a3fd139916a312004b1decf1f07eaba72e49f144c", - "count": 4, - "total_related": 17214, - "prevalence": 0.0002323690019751365 - }, - { - "value": "2f9117806e0e1ae4fc3b023b348910657b6948de2ecfd4f39f2846cebbefc1df", - "count": 4, - "total_related": 20602, - "prevalence": 0.00019415590719347637 - }, - { - "value": "7a656b15efaacb1179b883327369819483b5a0c2f2d8486db6c347f4f8a7ae61", - "count": 4, - "total_related": 32214, - "prevalence": 0.00012416961569503942 - }, - { - "value": "461e600ccc7d16f40952fdb9d181debe6a60cee3f2d22557c76e52f4c9c1ad4a", - "count": 4, - "total_related": 68943, - "prevalence": 5.801894318494989e-5 - }, - { - "value": "9bb17bd979c70074356294cf1814484a116ed0ba3a5bd425d4ddd87f78a4ba2f", - "count": 4, - "total_related": 98214, - "prevalence": 4.072739120695624e-5 - }, - { - "value": "aca002c988e2e3ee6044de23d24c162fd56db9ecba08a1c920ffec47e161c009", - "count": 3, - "total_related": 8, - "prevalence": 0.375 - }, - { - "value": "bd7b57a9303f0156e0737e9768a70f841b222a3e07e1426ecccfffdf2737bfe9", - "count": 3, - "total_related": 739, - "prevalence": 0.0040595399188092015 - }, - { - "value": "eaf9cdc741596275e106dddcf8aba61240368a8c7b0b58b08f74450d162337ef", - "count": 3, - "total_related": 1836, - "prevalence": 0.0016339869281045752 - }, - { - "value": "62a7038cc42c1482d70465192318f21fc1ce0f0c737cb8804137f38a1f9d680b", - "count": 3, - "total_related": 57123, - "prevalence": 5.2518250091906935e-5 - }, - { - "value": "07d07a467e4988d3c377acd6dc9e53abca6b64e8fbf70f6be19d795a1619289b", - "count": 3, - "total_related": 63384, - "prevalence": 4.73305566073457e-5 - }, - { - "value": "6976c426e3ac66d66303c114b22b2b41109a7de648ba55ffc3e5a53bd0db09e7", - "count": 3, - "total_related": 76023, - "prevalence": 3.9461741841284874e-5 - }, - { - "value": "a2ce3a0fa7d2a833d1801e01ec48e35b70d84f3467cc9f8fab370386e13879c7", - "count": 3, - "total_related": 84870, - "prevalence": 3.534817956875221e-5 - }, - { - "value": "70f316a5492848bb8242d49539468830b353ddaa850964db4e60a6d2d7db4880", - "count": 3, - "total_related": 96461, - "prevalence": 3.1100652077005216e-5 - }, - { - "value": "9814faaf0c20b20896bd24544b8c530808ed78510e3a209c9d3e720638048755", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "801789ec161b7749c8d9f59049754e09e8b324de36c6fc0b634d61814baf43b1", - "count": 2, - "total_related": 9, - "prevalence": 0.2222222222222222 - }, - { - "value": "8f1a07a9d25f8024707864cc12f5651aff384619400f5a4972edab0ea3bb8ff1", - "count": 2, - "total_related": 24, - "prevalence": 0.08333333333333333 - }, - { - "value": "b27c2532983d7acaf52615ae3f61365c22cc363b39b5341caee6bdf1866ebfb3", - "count": 2, - "total_related": 2253, - "prevalence": 0.000887705281846427 - }, - { - "value": "a7e962905d55271a4e295cc283baa09db6c28030d6df580d4f1562f639da297c", - "count": 2, - "total_related": 4475, - "prevalence": 0.000446927374301676 - }, - { - "value": "5bdeda730199a80255827cf5382f199f7f1fb2b2f626e63793b897faeedf11f3", - "count": 2, - "total_related": 4525, - "prevalence": 0.0004419889502762431 - }, - { - "value": "10f3deb6c452d749a7451b5d065f4c0449737e5ee8a44f4d15844b503141e65b", - "count": 2, - "total_related": 11924, - "prevalence": 0.0001677289500167729 - }, - { - "value": "f75e846cc83bd11432f4b1e21a45f31bc85283d11d372f7b19accd1bf6a2635c", - "count": 2, - "total_related": 18643, - "prevalence": 0.0001072788714262726 - }, - { - "value": "a479dd2807cb9817ef3ef7a31f3b7582339785e921b4284e55a1387dc38ec770", - "count": 2, - "total_related": 25796, - "prevalence": 7.753140021708792e-5 - }, - { - "value": "d9d776aba6b734e12a356cdd186a67394647a42d8cd12ebc9e27a3ddaddfb965", - "count": 2, - "total_related": 44611, - "prevalence": 4.483199210956939e-5 - }, - { - "value": "2e923178639849f5232473c3ae9fa451a9df4bc41751b2bf2d40045bc13ddcff", - "count": 2, - "total_related": 47992, - "prevalence": 4.167361226871145e-5 - }, - { - "value": "45f94dceb18a8f738a26da09ce4558995a4fe02b971882e8116fc9b59813bb72", - "count": 2, - "total_related": 50862, - "prevalence": 3.9322087216389446e-5 - }, - { - "value": "1f1029d94ca4656a577d554cedd79d447658f475af08620084897a5523587052", - "count": 2, - "total_related": 71970, - "prevalence": 2.778935667639294e-5 - }, - { - "value": "00019c5b1ea42f0360fe644e5051e27af6eb1f0682d99d153a195f00e1202dbf", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0112940D59A4C5E87F2BC62C2E9A0C636D1B5E99A6BDC8F307450B98E8FF9029", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "013340bd36a928b04b71f5a38cbc41c09cdb039b089f1cebb1e040a7e29d0d8b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "016E54CC9D92A353B2899E7C3781C92B883B648D9BB53638227863C6BBA2CC00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "019874d2e1d6cb7f5dcf3efee304754df9d847dc5e5be2798974d93d7e5ffa7b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "01c8f6967c59fae210188a748f7c4b85e776028b2537b3bfb54f2647424ba0a1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0240b8d38105a3019458ff7bd864dd2739dc8c71e80b8293c87a50465882dd16", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "024420e7876c4365e7e613dddbd825650e9118ebad385a6f04a63022a2a1408f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "04b84b3a7df74a38a43ef1b9db2e670ccbd05c615a7592271880440813c131c5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "053a57feea88987115692c9969ee3e3d8461bb588cf0217271ead71d170941e0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0212bfca695c0363af35bd09959da7c179c8f3fa03dbee13915a0a9d51e7d35b", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "048a4be18abd9c118f1199cd66cfae3410ee2312b89396a157d5a0e8d016eae1", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "027fdaad985c5d410c17e31c6a52634b1ff0bf72b34b623770831884b8b48aff", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "0167b6f7c3e0350d94e3688505ed4d551858551ce5b94b4bbde0e6719f92cc2c", - "count": 1, - "total_related": 32, - "prevalence": 0.03125 - }, - { - "value": "00353f8421601fbbb78b49d38559da40bca83288ea1d66d3fc82475928a3ee23", - "count": 1, - "total_related": 47, - "prevalence": 0.02127659574468085 - }, - { - "value": "00f53231c781c0fcc09d5a3c1c2f8b3f5578c606d3daa08b39b9f274ec1562fe", - "count": 1, - "total_related": 47, - "prevalence": 0.02127659574468085 - }, - { - "value": "0211d63be22f0af484c82d99b8835edb82c8553cabad8128632db25b81ddf489", - "count": 1, - "total_related": 48, - "prevalence": 0.020833333333333332 - }, - { - "value": "0339c3f9465ccd34dc7c100ddfeabc1be2a696e1cf0cf5a836154c7c3ce8cf5b", - "count": 1, - "total_related": 48, - "prevalence": 0.020833333333333332 - }, - { - "value": "00fd014ba1517eb87603f58b2eebcd21cfb8669981a9f689b9e3893437adcf52", - "count": 1, - "total_related": 50, - "prevalence": 0.02 - }, - { - "value": "04f6736734f3779b72ed5a93a4d84d81d83f40d99ed04ec68021b21adbbe8246", - "count": 1, - "total_related": 69, - "prevalence": 0.014492753623188406 - }, - { - "value": "05191f8f515c43d94fca4987fcc413030d86d02be5236501611e853f097ae246", - "count": 1, - "total_related": 87, - "prevalence": 0.011494252873563218 - }, - { - "value": "029468d0f54db566cf7ec6353d56d0de870003119e186d4344f16dd0079bc457", - "count": 1, - "total_related": 123, - "prevalence": 0.008130081300813009 - }, - { - "value": "0180fe7b83e0e6aab30dec4f5391d16edcaaf70a91957dccbcc3add87dfdfe24", - "count": 1, - "total_related": 133, - "prevalence": 0.007518796992481203 - }, - { - "value": "027655d921972f4ac727f9c5ac76bd292a0aed26ee594629b8fea2d5e8fd25a0", - "count": 1, - "total_related": 156, - "prevalence": 0.00641025641025641 - }, - { - "value": "04b2df8c2635a3103503831364464eecb34d1c3c193d46dca0ada4715d07d179", - "count": 1, - "total_related": 162, - "prevalence": 0.006172839506172839 - }, - { - "value": "00b782b3729708f79c4f94898dc8ba0c66ddaa0671f918e875686eba9f16258c", - "count": 1, - "total_related": 219, - "prevalence": 0.0045662100456621 - }, - { - "value": "01a147c540cb95b2bc88a519cb205d1fd1989eb34810bfd35bfa2d6c0857d36f", - "count": 1, - "total_related": 257, - "prevalence": 0.0038910505836575876 - }, - { - "value": "01f695361809a5e6bb60020932557676224ef3bbe04da2a16b14553a21bbc394", - "count": 1, - "total_related": 297, - "prevalence": 0.003367003367003367 - }, - { - "value": "02a84f9fd9e7394171ce58e746c74045310bc4edf8505e46fdf5d61e9045e89d", - "count": 1, - "total_related": 435, - "prevalence": 0.0022988505747126436 - }, - { - "value": "051ebca002bd308f791f0cca565b0b6eb26f1d2b35620bbfcf051c36dea27f04", - "count": 1, - "total_related": 436, - "prevalence": 0.0022935779816513763 - }, - { - "value": "0337b3e01107b83d8e54ed707a4981131d7453a4e7722b2837bb30ac18d8bdd1", - "count": 1, - "total_related": 555, - "prevalence": 0.0018018018018018018 - }, - { - "value": "00af4611514e1db6a969f1b15be803e7eaa0d4323d3d5216eb7a9f257392c07a", - "count": 1, - "total_related": 628, - "prevalence": 0.0015923566878980893 - }, - { - "value": "03516dd82ca99d3caf31f5bf495abc3cf1758ea6992cfd1c3812dee89df55831", - "count": 1, - "total_related": 692, - "prevalence": 0.001445086705202312 - }, - { - "value": "039dbc6b0e8ccdefcc06d618aea4da08d3fca7489dcbed6404827be29d41314f", - "count": 1, - "total_related": 972, - "prevalence": 0.00102880658436214 - }, - { - "value": "02c2f47188c84fcc9501a88ca9eb8f675c7c1e4bd9c22d9aa962469d79625808", - "count": 1, - "total_related": 2119, - "prevalence": 0.00047192071731949034 - }, - { - "value": "025b1282fbbc2f7f270e08b29414b7bbde469284564477f38b3519446aa16220", - "count": 1, - "total_related": 2692, - "prevalence": 0.0003714710252600297 - }, - { - "value": "03444f916ddb9a1c692c329f88b83b1a21d016dce46656091f21e903109dd65c", - "count": 1, - "total_related": 2786, - "prevalence": 0.0003589375448671931 - }, - { - "value": "0448ff6c00a9d808b70c4adba9e6c6e1d81569bbb0abcb335e1dd6f453b83334", - "count": 1, - "total_related": 2979, - "prevalence": 0.0003356831151393085 - }, - { - "value": "054eeda03a706b8eb6821a2cc2d47080c7d6cb031c82252ff9a13460fef3bb8e", - "count": 1, - "total_related": 3885, - "prevalence": 0.0002574002574002574 - }, - { - "value": "00ed5475b08b4a239836bc5d667bfaf343f4f2412cd7616d2aaf37bddd8582c2", - "count": 1, - "total_related": 5988, - "prevalence": 0.00016700066800267202 - }, - { - "value": "04512a63dce4d2d506ad612dc0bd7681ccf6e3655f7b6eaef7dfac8323d1ec0b", - "count": 1, - "total_related": 7910, - "prevalence": 0.00012642225031605562 - }, - { - "value": "0144ab6a52b9330c567de11a5c3a4aea35cdac47a4c106482aa24ae8054cdc6f", - "count": 1, - "total_related": 12074, - "prevalence": 8.282259400364419e-5 - }, - { - "value": "02b0b120f697c48133e8b547e8dc594bc5b9f1c1799b50c2c5ff917298548558", - "count": 1, - "total_related": 15316, - "prevalence": 6.529119874640899e-5 - }, - { - "value": "02c1aab437a9048ee29b285f7187d1eb3e8ad43977cd3f39b1cb2b40fad46727", - "count": 1, - "total_related": 17205, - "prevalence": 5.812263876780006e-5 - }, - { - "value": "041fd67afcbf679e2c2e131cb71feba410b11cf878e668d5216bb9dbcdd58a6f", - "count": 1, - "total_related": 17253, - "prevalence": 5.79609343302614e-5 - }, - { - "value": "4826c0d860af884d3343ca6460b0006a7a2ce7dbccc4d743208585d997cc5fd1", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": "039fe79b74e6d3d561e32d4af570e6ca70db6bb3718395be2bf278b9e601279a", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": "a7de5177c68a64bd48b36d49e2853799f4ebcfa8e4761f7cc472f333dc5f65cf", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "076a27c79e5ace2a3d47f9dd2e83e4ff6ea8872b3c2218f66c92b89b55f36560", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "2e5cb72e9eb43baafb6c6bfcc573aac92f49a8064c483f9d378a9e8e781a526a", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "38ac3c4fe37632e0a2df54b72fe6f746f0dff5179a0c98466b8f702a49fc4acc", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "1471693be91e53c2640fe7baeecbc624530b088444222d93f2815dfce1865d5b", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "58268ca71a28973b756a48bbd7c9dc2f6b87b62ae343e582ce067c725275b63c", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "6a17c684bc209562e101f2935f4ea6f076f6a2168cc83b0ba1caaa1fbccb8899", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "81ff65efc4487853bdb4625559e69ab44f19e0f5efbd6d5b2af5e3ab267c8e06", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "06de709513d7976690b3dd8f5fdf1e59cf456a2dfba952b97eacc72fe47b238b", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "205d000aa762f3a96ac3ad4b25d791b5f7fc8efb9056b78f299f671a02b9fd21", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "2842973d15a14323e08598be1dfb87e54bf88a76be8c7bc94c56b079446edf38", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "3193f3035a4f457d66bab3048880aac2eb8557027f6373e606d4621609af1068", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "3b651258f4d0ee1bffc7fb189250ded1b920475d1682370d6685769e3a9346db", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "4ac5b26c5e66e122de80243ef621ca3e1142f643dd2ad61b75ff41cfee3dffaf", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "6230814bf5b2d554397580613e20681752240ab87fd354ececf188c1eabe0e97", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "66501b659614227584da04b64f44309544355e3582f59dbca3c9463f67b7e303", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "6b0ceccf0103afd89844761417c1d23acc41f8aebf3b7230765209b61eee5658", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "7194396e5c833e6c8710a2e5d114e8e24338c64ec9818d51a929d57a5e4a76c8", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "7d35ad1d7f7c71718b6e8f91b50ff126e9fde479b4322449dbaf6c109f58e238", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "91270b2aef824a30a5fb28df199610dad34bbd176c53d846d291ba09a37878c9", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "9df8e969c682f1f448552c0f2dcd9785926e6f9b2006b8e124dc70974d20d415", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "a6ce2291a38cc10f8e64115260b6e1c9af60f2c5ac053289161369639bb90d1e", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "b4d4dcd9594d372d7c0c975d80ef5802c88502895ed4b8a26ca62e225f2f18b0", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "dace5ad59099429d8aed4ee279f1263efb65d64456931398465a396cf0e79bd7", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "04727fc926d09a5302cf3ede1f5768796deefedf06ff96bebb70b142b6f729c9", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "tags": [ - { - "value": "lnk", - "count": 76 - }, - { - "value": "url-pattern", - "count": 76 - }, - { - "value": "direct-cpu-clock-access", - "count": 74 - }, - { - "value": "runtime-modules", - "count": 63 - }, - { - "value": "detect-debug-environment", - "count": 62 - }, - { - "value": "exploit", - "count": 47 - }, - { - "value": "cve-2017-0199", - "count": 46 - }, - { - "value": "long-command-line-arguments", - "count": 39 - }, - { - "value": "checks-network-adapters", - "count": 36 - }, - { - "value": "text", - "count": 35 - }, - { - "value": "docx", - "count": 29 - }, - { - "value": "xml", - "count": 29 - }, - { - "value": "zip", - "count": 29 - }, - { - "value": "hiding-window", - "count": 22 - }, - { - "value": "long-sleeps", - "count": 21 - }, - { - "value": "64bits", - "count": 19 - }, - { - "value": "high-entropy", - "count": 17 - }, - { - "value": "large-file", - "count": 16 - }, - { - "value": "macho", - "count": 16 - }, - { - "value": "malware", - "count": 16 - }, - { - "value": "create-ole", - "count": 11 - }, - { - "value": "doc", - "count": 11 - }, - { - "value": "pdf", - "count": 11 - }, - { - "value": "signed", - "count": 11 - }, - { - "value": "arm", - "count": 10 - }, - { - "value": "html", - "count": 10 - }, - { - "value": "checks-hostname", - "count": 9 - }, - { - "value": "checks-user-input", - "count": 9 - }, - { - "value": "run-file", - "count": 9 - }, - { - "value": "calls-wmi", - "count": 8 - }, - { - "value": "revoked-cert", - "count": 8 - }, - { - "value": "vba", - "count": 8 - }, - { - "value": "executes-dropped-file", - "count": 7 - }, - { - "value": "invalid-signature", - "count": 7 - }, - { - "value": "contains-macho", - "count": 6 - }, - { - "value": "dropper", - "count": 6 - }, - { - "value": "javascript", - "count": 6 - }, - { - "value": "mac-app", - "count": 6 - }, - { - "value": "multi-arch", - "count": 6 - }, - { - "value": "cpp", - "count": 5 - }, - { - "value": "idle", - "count": 5 - }, - { - "value": "abused-exe-pattern", - "count": 4 - }, - { - "value": "macros", - "count": 4 - }, - { - "value": "create-file", - "count": 3 - }, - { - "value": "cve-2017-11882", - "count": 3 - }, - { - "value": "enum-windows", - "count": 3 - }, - { - "value": "exe-pattern", - "count": 3 - }, - { - "value": "via-tor", - "count": 3 - }, - { - "value": "assembly", - "count": 2 - }, - { - "value": "contains-embedded-js", - "count": 2 - }, - { - "value": "cve-2019-12259", - "count": 2 - }, - { - "value": "cve-2019-12265", - "count": 2 - }, - { - "value": "open-file", - "count": 2 - }, - { - "value": "overlay", - "count": 2 - }, - { - "value": "pedll", - "count": 2 - }, - { - "value": "persistence", - "count": 2 - }, - { - "value": "sets-process-name", - "count": 2 - }, - { - "value": "spreader", - "count": 2 - }, - { - "value": "auto-open", - "count": 1 - }, - { - "value": "base64-embedded", - "count": 1 - }, - { - "value": "checks-usb-bus", - "count": 1 - }, - { - "value": "contains-pe", - "count": 1 - }, - { - "value": "cve-1999-0016", - "count": 1 - }, - { - "value": "cve-2004-0790", - "count": 1 - }, - { - "value": "cve-2005-0068", - "count": 1 - }, - { - "value": "cve-2022-30190", - "count": 1 - }, - { - "value": "download", - "count": 1 - }, - { - "value": "encrypted", - "count": 1 - }, - { - "value": "legit", - "count": 1 - }, - { - "value": "mp3", - "count": 1 - }, - { - "value": "msi", - "count": 1 - }, - { - "value": "obfuscated", - "count": 1 - }, - { - "value": "one", - "count": 1 - }, - { - "value": "peexe", - "count": 1 - }, - { - "value": "python", - "count": 1 - }, - { - "value": "write-file", - "count": 1 - }, - { - "value": "xls", - "count": 1 - }, - { - "value": "xlsx", - "count": 1 - } - ], - "main_icon_dhash": [ - { - "value": "601e0e9f4b271101", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "232b2b23232b2b2b", - "count": 2, - "total_related": 24, - "prevalence": 0.08333333333333333 - }, - { - "value": "0000080f33060068", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "000d310f49010700", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0011093737472700", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0030b000d4e42880", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0101012b21030303", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "02002b1340008040", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0323270307100000", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "040e8e0e13250408", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0617010321410101", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0701012123030307", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0c0141ce072b2323", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0c0d210321410901", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0d0d370767271129", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1101010115111307", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "230b231323232323", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "291525595b812541", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "440e410709114108", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4901012d21595501", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "700b4d3101000016", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2203411103213333", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2345444444441402", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "68d4a043c3000200", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "0c2d101b51191800", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "0301000000000006", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "c4c0ccccccf4d4dc", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - }, - { - "value": "0319000100000000", - "count": 1, - "total_related": 303, - "prevalence": 0.0033003300330033004 - }, - { - "value": "4109090000000001", - "count": 1, - "total_related": 1540, - "prevalence": 0.0006493506493506494 - }, - { - "value": "74e4d4d4ecf4d4d4", - "count": 1, - "total_related": 1812, - "prevalence": 0.0005518763796909492 - }, - { - "value": "2125000100000000", - "count": 1, - "total_related": 1914, - "prevalence": 0.0005224660397074191 - }, - { - "value": "0311000100000000", - "count": 1, - "total_related": 2040, - "prevalence": 0.0004901960784313725 - }, - { - "value": "0000000000000000", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "0101000000000000", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "0301000000000000", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "main_icon_raw_md5": [ - { - "value": "bb8dda782cb853ef71ac5ca2884d83e1", - "count": 3, - "total_related": 264, - "prevalence": 0.011363636363636364 - }, - { - "value": "5f2f851c5be5527f9c29ee0c9db1bd18", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "3565ac5b0aa3ef8ef171bc6eed76a133", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "1e257cb85234079c78c4f511a8097c38", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1ec9057a60fa9b800df647f1ee907d67", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1f15f393601e934411729021bd1d97f4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "21f82c2d1c433634e6279cdbdb85717f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "29e99ae57a5fb2e90cf1b6dd76392678", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4a972f889532aeb8c3108a6cc382f1e3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "566e4d365c16ba0a60789ce4c6e0d5fe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5750f02b0b806ce9a58ed9b26c78995b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5a9279e157cfb7027fc7a000d95c4efb", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5cd1bf662431ffa62517b6d161d2f60b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "608222b0270544b7cade23ba16034502", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "6b207de88e13a91d0bfb7d85e378654d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "752ba87e760afad022dff1170c9be80e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "81fb4281b704e9d2701d9412c444da39", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "83514d03544f61367c04bf91851c19c0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "854e6caeded5efcdce44cfcaec04c557", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "885c01f33a832c82f042be84cc95be15", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "89e9e5e3d942c5b75a612409a8b35d27", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "92e2b1d7d0b97a20bb226bdea257e880", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "988a02ae0a3bec1f9efbd8b242bbf77c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "e705b92c2d7b9ae9243420959a2699df", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "f93d3a2e7d5cb9f273117b64f203fe7f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "fe8226d1c1b757d795fa007693631ed0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4f07f9dd6e3b681c7763c758c73c4294", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "5313e72ef7229d53f5f9e7844114aff8", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "6a297d5a95cb3557ef106b573e09a4ee", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "ae9a79cb5cf1f9f7424558d7f2ccb2d9", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "f2370f71b957c85d59ff13d7fdf22d59", - "count": 1, - "total_related": 19, - "prevalence": 0.05263157894736842 - }, - { - "value": "4833e2f770db4dfea7aabc5d3ee4ae89", - "count": 1, - "total_related": 43, - "prevalence": 0.023255813953488372 - }, - { - "value": "a795c90d481bbcfbe67db47a61979cd2", - "count": 1, - "total_related": 74, - "prevalence": 0.013513513513513514 - }, - { - "value": "96145e809a3ddbe1fe185574cae1968c", - "count": 1, - "total_related": 294, - "prevalence": 0.003401360544217687 - }, - { - "value": "dc44086d7d53180fd9cf0d810ed8503e", - "count": 1, - "total_related": 854, - "prevalence": 0.00117096018735363 - }, - { - "value": "45f28067d31a1502821934edb953794d", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "f60828f26b15beebfd888d189a02c5a3", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "vhash": [ - { - "value": "1acf037c16ba5e009090f1f579e0379f", - "count": 26, - "total_related": 1121, - "prevalence": 0.0231935771632471 - }, - { - "value": "af7bbcca6ef3cfeb111e52ddeac2f7cf", - "count": 21, - "total_related": 35, - "prevalence": 0.6 - }, - { - "value": "170ef62b38fb053cfe94b93a1c402df1", - "count": 14, - "total_related": 1124, - "prevalence": 0.012455516014234875 - }, - { - "value": "e9c83efda6ce065941ec02671e214ab5", - "count": 13, - "total_related": 27, - "prevalence": 0.48148148148148145 - }, - { - "value": "0b66a39a4cd9d58d1988ad24f27e5742", - "count": 13, - "total_related": 62, - "prevalence": 0.20967741935483872 - }, - { - "value": "914cf5aa6de4e17cd10748d258a96992", - "count": 8, - "total_related": 8, - "prevalence": 1.0 - }, - { - "value": "7af4c168aa328ef6a56050fb86544534", - "count": 8, - "total_related": 540, - "prevalence": 0.014814814814814815 - }, - { - "value": "9695d5db76a0e24aeb2d8bf9f90e57e8", - "count": 7, - "total_related": 490, - "prevalence": 0.014285714285714285 - }, - { - "value": "227ecdf749298aa9bc6c5d84cfbff2c0", - "count": 6, - "total_related": 7, - "prevalence": 0.8571428571428571 - }, - { - "value": "c2a2ad7041b1ec5271c0e0fd10a09db5", - "count": 6, - "total_related": 8, - "prevalence": 0.75 - }, - { - "value": "d5fedc4b519225cdf73f7bbc5285cef0", - "count": 5, - "total_related": 7, - "prevalence": 0.7142857142857143 - }, - { - "value": "db6f4f9c79014df66c8eb4080879c7ae", - "count": 5, - "total_related": 204, - "prevalence": 0.024509803921568627 - }, - { - "value": "115086655d15551555557az5oz1ez1", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "542a4573e35506870d0597063df49b51", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "e84afc82dcf59a951a6657d8924ae44f", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "647a20017f9cacd80b5d1e6acdc40040", - "count": 4, - "total_related": 6, - "prevalence": 0.6666666666666666 - }, - { - "value": "9c4c1ed29934ac27be729cd4fcf2699f", - "count": 4, - "total_related": 96, - "prevalence": 0.041666666666666664 - }, - { - "value": "3fcbde667af72e4a5dc5392a5f828f4c", - "count": 4, - "total_related": 241, - "prevalence": 0.016597510373443983 - }, - { - "value": "9c261284c021d97c5c582580d1e95e6e5", - "count": 4, - "total_related": 306, - "prevalence": 0.013071895424836602 - }, - { - "value": "3da4e10a8fcfdabb132ae1a4032fb8ae", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "ada0c76fde04d584ee11da04ee0fbbbd", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "e687ca0b19858056f107954afeaf0814", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "ae53399968ba0dd9576ee4673507eedc", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "b596727335f9e38ac6f753475109bbef", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "ba406fac0d45b479e5f8a74f19fd649c", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "f75f736fa78c2991bf5fe47ee1eb10d9", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "4af279b2b622e8e77dda96bee2717182", - "count": 3, - "total_related": 7, - "prevalence": 0.42857142857142855 - }, - { - "value": "73e1339f68f765653c8490f5ca61470e", - "count": 3, - "total_related": 7, - "prevalence": 0.42857142857142855 - }, - { - "value": "b42a70c30f17db82afd0fb45d1df4c2c", - "count": 3, - "total_related": 9, - "prevalence": 0.3333333333333333 - }, - { - "value": "c580863924ed5d52f29a00b01b4f4938", - "count": 3, - "total_related": 9, - "prevalence": 0.3333333333333333 - }, - { - "value": "ad8199d98b8eda0f476ac5cec9de6744", - "count": 3, - "total_related": 2727, - "prevalence": 0.0011001100110011 - }, - { - "value": "07be3a681990854460476df92e4c96fd", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "14f5a3b875beb984227bc23aa687a09e", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "2831d1c0cfeaa6aca5f7ca5fff4b9def", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "3e51b75993ac6ae5dbb9b8bd9d49458c", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "5787bdd36c2d24d5c975ae59b2a57572", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "5e5a4b0e7df535bb440291c1682c0034", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "715fe308285b89cc671b0dc3df1994be", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "92e606a623ba0c8215479d02c147d89a", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "9bf2b9baa00bbe5ce72dc7281198c4ce", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "a24bf7fa4cf07593061b5364ae658ac0", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "aa80fcf9984b3a9b3ba58ec4027a9b05", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "ada988777a5be3732e4ecc60bf57bb69", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "b3f472ff20e1c8ee1bf51a866120efe7", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "b5e8a515f7e95003e7eb433b75d7ae2b", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "ec74e8d08241e86437e717a037b3e6be", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "6d34ee7e0067c467a61401e3fd58f536", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "71052d2dc5b7f3d6fe7c529eac1aed61", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "37a8fdd05f57336d242ba4076803eae1", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "380a5100e22d392f4e6e70e3ab224d80", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "3942d281dd4fcbea2287575a8a6761e3", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "3cebd42c793061dc7df4c7d6309046b3", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "43ffdea9803ac07a333fde6b218bc0c0", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "52de6c772b4efd6fe48161126511166c", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "7be1ee0599b6c1165a907ea313eeae1c", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "8dab8d6c959ecea5a005a4f907409091", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "44cf920f4aae53d65755222a21e96d37", - "count": 2, - "total_related": 12, - "prevalence": 0.16666666666666666 - }, - { - "value": "5f0f04c86c7729316db7901e4f12f259", - "count": 2, - "total_related": 14, - "prevalence": 0.14285714285714285 - }, - { - "value": "3aa00137122d59e5a241335e8dbd800f", - "count": 2, - "total_related": 15, - "prevalence": 0.13333333333333333 - }, - { - "value": "946a165331c08b7d9169950add896ba0", - "count": 2, - "total_related": 17, - "prevalence": 0.11764705882352941 - }, - { - "value": "f52a3dafc2e719f9861fd02a639b3d22", - "count": 2, - "total_related": 26, - "prevalence": 0.07692307692307693 - }, - { - "value": "f371ec7f855f82c3fb7c22c6b5a184d9", - "count": 2, - "total_related": 118, - "prevalence": 0.01694915254237288 - }, - { - "value": "98f6ea44139723ab014e645a13ff74921", - "count": 2, - "total_related": 119, - "prevalence": 0.01680672268907563 - }, - { - "value": "93bc5702541bfb54ad0b68a0e1b4ac28f", - "count": 2, - "total_related": 125, - "prevalence": 0.016 - }, - { - "value": "aca22f1dc88619ae731e626d180ccd54", - "count": 2, - "total_related": 190, - "prevalence": 0.010526315789473684 - }, - { - "value": "9bd8245f7a64f16db2530e5309ee903bb", - "count": 2, - "total_related": 456, - "prevalence": 0.0043859649122807015 - }, - { - "value": "8ecb8952758b6bc043aeb87b902a0652", - "count": 2, - "total_related": 462, - "prevalence": 0.004329004329004329 - }, - { - "value": "htm:4a6e59104d655a48121a2990351e47f2", - "count": 2, - "total_related": 591, - "prevalence": 0.00338409475465313 - }, - { - "value": "7c6f90b80361e148c76d18a82c268c64", - "count": 2, - "total_related": 1030, - "prevalence": 0.001941747572815534 - }, - { - "value": "34085a187a867c6da1d56c6303c90a6c", - "count": 2, - "total_related": 1635, - "prevalence": 0.0012232415902140672 - }, - { - "value": "b17f6eaffdc895aafa78ac31fd97da5a", - "count": 2, - "total_related": 3029, - "prevalence": 0.0006602839220864972 - }, - { - "value": "9d2c651eb10fa253f9df1f88e6210c2cc", - "count": 2, - "total_related": 7880, - "prevalence": 0.0002538071065989848 - }, - { - "value": "91bb1702326464ce6fa1efc620d78896e", - "count": 2, - "total_related": 16741, - "prevalence": 0.00011946717639328595 - }, - { - "value": "2ad79491af260da80064b39001954a68", - "count": 2, - "total_related": 80698, - "prevalence": 2.4783761679347693e-5 - }, - { - "value": "05784f2a780bf6ffbc299e41c0dfc4b4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "081959ade1628a376ca6f332e4d401bb", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0938f612c851183c6134b66fff082a9c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0babe526eb2a4788f806aeab52737076", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "10c305110aa980c5fd5b65fda04e3553", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "115076655d155515555az54nz1ez2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "117bfe9fa207ae000654991612c46256", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "162cd9417033e342b4cfe6a0930fc27a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "16aa30f1a7eae7eeccdf2f521f9cc24b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "17388e4f235b6be54be719dd35bfd12e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "015076655d151515155az49hz1lz", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "0336283f0996f304855642fd7eca4f5b", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "11f1466da2a75752cff1771b0856f1c0", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "115076655d155515555az51nz1ez2", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "066fe9f1945aad1323c8616611cea6ea", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "0bf3e1e142c34a7b18b79b164ae29ee7", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "02c3fdfed219715087158442db1fba7e", - "count": 1, - "total_related": 16, - "prevalence": 0.0625 - }, - { - "value": "072c148dcad4bfd2c91a5f713bdfc14f", - "count": 1, - "total_related": 54, - "prevalence": 0.018518518518518517 - }, - { - "value": "044066651d1515551az37!z", - "count": 1, - "total_related": 96, - "prevalence": 0.010416666666666666 - }, - { - "value": "0150267d|z", - "count": 1, - "total_related": 147, - "prevalence": 0.006802721088435374 - }, - { - "value": "fe43cc098163d8fb4f1b2b088de0949b", - "count": 16, - "total_related": 100000, - "prevalence": 0.00016 - }, - { - "value": "05e9c72b5b356a3386752cd92e16a401", - "count": 13, - "total_related": 100000, - "prevalence": 0.00013 - }, - { - "value": "7596fdd04dba990373ab2f3da0c7dd3f", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "9eecb7db59d16c80417c72d1e1f4fbf1", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "947b8a3e00e91dc438fd06e8ae1835912", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "9f0d05f05f728dcdec665b2025b11f03d", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - } - ], - "imphash": [ - { - "value": "1cf1007474fd32ebc96cdcb6646354bf", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "11a4255dc1fc05b110a1ac43defbeeaf", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2689da07297d37f471558dd4a5e0040c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "69f670dfafe0b3d0dcea8ec73e3f504d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "c9d90395d02f8633b74cfdad0eb63c70", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "9a245851a75a4fb6e87a52d12330118f", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "dae02f32a21e03ce65412f6e56942daa", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "behash": [ - { - "value": "f766357f574a4971fd89a1f92165fb23", - "count": 22, - "total_related": 8024, - "prevalence": 0.0027417746759720836 - }, - { - "value": "624088400f58ea0b66c1d3f719c949c7", - "count": 12, - "total_related": 8620, - "prevalence": 0.0013921113689095127 - }, - { - "value": "cd7e80ea128abcbba3c90743a3f83660", - "count": 11, - "total_related": 30, - "prevalence": 0.36666666666666664 - }, - { - "value": "bd72e4178c6fdca6e2350a298d14a596", - "count": 11, - "total_related": 52, - "prevalence": 0.21153846153846154 - }, - { - "value": "ed5fe902f15e6cc1834a2f83cdf9c3fa", - "count": 10, - "total_related": 17, - "prevalence": 0.5882352941176471 - }, - { - "value": "ba8b475bcffa0fea354f15a03b4907c1", - "count": 10, - "total_related": 2026, - "prevalence": 0.004935834155972359 - }, - { - "value": "c665c0b115b15045d41162c38e54caa4", - "count": 9, - "total_related": 4771, - "prevalence": 0.0018863969817648292 - }, - { - "value": "2518d2551c3475a9b75e2655ed947c23", - "count": 7, - "total_related": 22, - "prevalence": 0.3181818181818182 - }, - { - "value": "35baf5c8d45dd8d2471cbc3fc5ba0636", - "count": 7, - "total_related": 43866, - "prevalence": 0.00015957689326585512 - }, - { - "value": "f4b62afd57c4d8ed35432a8b39fba420", - "count": 6, - "total_related": 8, - "prevalence": 0.75 - }, - { - "value": "12d2a69b426c0c508214e274498ed47d", - "count": 5, - "total_related": 9, - "prevalence": 0.5555555555555556 - }, - { - "value": "5cb94e7281e96f3eb18cae509bd2b8c8", - "count": 5, - "total_related": 15, - "prevalence": 0.3333333333333333 - }, - { - "value": "efc6b029188d50c9f8c7c10439cad068", - "count": 5, - "total_related": 18, - "prevalence": 0.2777777777777778 - }, - { - "value": "86ca3ae1b4efbbc6897c16551a02b384", - "count": 5, - "total_related": 19, - "prevalence": 0.2631578947368421 - }, - { - "value": "b6e9c879bf99f0b26449363eae21f276", - "count": 5, - "total_related": 27, - "prevalence": 0.18518518518518517 - }, - { - "value": "b4509b4446015c4563ad98b209ad7f2f", - "count": 5, - "total_related": 89, - "prevalence": 0.056179775280898875 - }, - { - "value": "7d3c3f3386c9be1f5441f4b12ddc1edc", - "count": 5, - "total_related": 8028, - "prevalence": 0.000622820129546587 - }, - { - "value": "4ff1043431215f9ce2b5c2ba2f836dd9", - "count": 5, - "total_related": 10249, - "prevalence": 0.0004878524734120402 - }, - { - "value": "bf6203651216fe900759d05540eb6de5", - "count": 5, - "total_related": 39633, - "prevalence": 0.00012615749501677896 - }, - { - "value": "55e5e1c8c27d521ea4361436a752594b", - "count": 4, - "total_related": 6, - "prevalence": 0.6666666666666666 - }, - { - "value": "8ff9ad279d5ca7f24943a105c312a387", - "count": 4, - "total_related": 6, - "prevalence": 0.6666666666666666 - }, - { - "value": "b4d22ae7b9999ffb10ca25a61de0faec", - "count": 4, - "total_related": 9, - "prevalence": 0.4444444444444444 - }, - { - "value": "bb185a95d89d1c86fbdd5ab4b765cd57", - "count": 4, - "total_related": 10, - "prevalence": 0.4 - }, - { - "value": "b5b10a48b38bd98c8a20c4658d590505", - "count": 4, - "total_related": 39, - "prevalence": 0.10256410256410256 - }, - { - "value": "e7466fd6693bebc74cd034aa01e1ed16", - "count": 4, - "total_related": 48, - "prevalence": 0.08333333333333333 - }, - { - "value": "376aec31863ab84f584f9bc3aec00433", - "count": 4, - "total_related": 222, - "prevalence": 0.018018018018018018 - }, - { - "value": "30e5447baa0127537774668fc2d8dd4b", - "count": 4, - "total_related": 9410, - "prevalence": 0.0004250797024442083 - }, - { - "value": "dad80c0ac9c9de79ee4f2366290ed502", - "count": 4, - "total_related": 16472, - "prevalence": 0.00024283632831471587 - }, - { - "value": "4eb24bf1b1c53208ed783fb437536167", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "12b0eaec2e85359dbab7c8fe0cbf0763", - "count": 3, - "total_related": 7, - "prevalence": 0.42857142857142855 - }, - { - "value": "e819a99eefaece03a9ba64fb1455140c", - "count": 3, - "total_related": 7, - "prevalence": 0.42857142857142855 - }, - { - "value": "f862f19ce2283f8bf625592e4c28af9e", - "count": 3, - "total_related": 7, - "prevalence": 0.42857142857142855 - }, - { - "value": "70034bacee078290b9499401031d6977", - "count": 3, - "total_related": 21, - "prevalence": 0.14285714285714285 - }, - { - "value": "5af504020f10d5c24cd11805ba387693", - "count": 3, - "total_related": 276, - "prevalence": 0.010869565217391304 - }, - { - "value": "c6a5022a8695db80d8440d68aadfec07", - "count": 3, - "total_related": 1340, - "prevalence": 0.002238805970149254 - }, - { - "value": "bd9a35f292fcfe4335622427a58b0b0e", - "count": 3, - "total_related": 2118, - "prevalence": 0.00141643059490085 - }, - { - "value": "7555bb44eaa699c7c77a0bab3136b7c1", - "count": 3, - "total_related": 4017, - "prevalence": 0.0007468259895444362 - }, - { - "value": "0447c9335466461f787a95b1e7bd8744", - "count": 3, - "total_related": 5219, - "prevalence": 0.0005748227629814141 - }, - { - "value": "9c5d1c59457a70989c69d7d01f8a832e", - "count": 3, - "total_related": 19929, - "prevalence": 0.0001505343971097396 - }, - { - "value": "bcccf52645ee358c682d40593a42d30d", - "count": 3, - "total_related": 20597, - "prevalence": 0.00014565227945817353 - }, - { - "value": "f5b142780bf7a339f33d8629570a77b1", - "count": 3, - "total_related": 44251, - "prevalence": 6.779507807733158e-5 - }, - { - "value": "c783d99259b2065275f165fccd442cb0", - "count": 3, - "total_related": 83686, - "prevalence": 3.584829003656525e-5 - }, - { - "value": "013226902a65d305bbf270127efc1b9d", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "6271524d845c8848e4cf9a05c436a50a", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "1ca73933e5b670dc9a7c86228501292d", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "46d0dc66c0659dd808b7fc42d3f6104c", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "5ced9b4577fea91db8741ad53636ae40", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "19d5a189b2dd0ad11cebb5291a4a2e55", - "count": 2, - "total_related": 9, - "prevalence": 0.2222222222222222 - }, - { - "value": "694ebb33bb8c7f6e41a319a88ca8eb59", - "count": 2, - "total_related": 9, - "prevalence": 0.2222222222222222 - }, - { - "value": "2c6de5c8488e4ddce1fc2189e2ec2ca1", - "count": 2, - "total_related": 17, - "prevalence": 0.11764705882352941 - }, - { - "value": "30d3599397fe1a4563ef5c3cc10d16e1", - "count": 2, - "total_related": 36, - "prevalence": 0.05555555555555555 - }, - { - "value": "59a27ade1c27849c180426aeedaa5d41", - "count": 2, - "total_related": 45, - "prevalence": 0.044444444444444446 - }, - { - "value": "55fc366728f70ffaf0b4dba954dd5462", - "count": 2, - "total_related": 49, - "prevalence": 0.04081632653061224 - }, - { - "value": "64dca153677101180de92e42e41524b2", - "count": 2, - "total_related": 70, - "prevalence": 0.02857142857142857 - }, - { - "value": "2ed1439c1f3851add378bf2c1d80a4b8", - "count": 2, - "total_related": 104, - "prevalence": 0.019230769230769232 - }, - { - "value": "0ffe5c101c9494498125ef489bba53ee", - "count": 2, - "total_related": 125, - "prevalence": 0.016 - }, - { - "value": "73d4a052579a883fae2d613430116820", - "count": 2, - "total_related": 137, - "prevalence": 0.014598540145985401 - }, - { - "value": "7efb1ba8a9e2bbbd277ce7f04f2e2d67", - "count": 2, - "total_related": 150, - "prevalence": 0.013333333333333334 - }, - { - "value": "6ab502c9477796546cd3beec2432729d", - "count": 2, - "total_related": 399, - "prevalence": 0.005012531328320802 - }, - { - "value": "7c8e8319d88f8adca6aa53f36703a3df", - "count": 2, - "total_related": 719, - "prevalence": 0.0027816411682892906 - }, - { - "value": "28adbb6ffda57086ebf7a798fd272a89", - "count": 2, - "total_related": 1559, - "prevalence": 0.0012828736369467607 - }, - { - "value": "166ad8b69135be9fff49c0e3732e3215", - "count": 2, - "total_related": 1959, - "prevalence": 0.0010209290454313426 - }, - { - "value": "67ddb10c784f5ba42e4f9048dc7f4f68", - "count": 2, - "total_related": 2126, - "prevalence": 0.0009407337723424271 - }, - { - "value": "4caa00e67d05524fd58f89dbfb2133af", - "count": 2, - "total_related": 3044, - "prevalence": 0.000657030223390276 - }, - { - "value": "4b4f7eec7337cc1eb890bf5808ee98fb", - "count": 2, - "total_related": 3671, - "prevalence": 0.0005448106782892945 - }, - { - "value": "4560071f3946f7255c77153805e348cd", - "count": 2, - "total_related": 4640, - "prevalence": 0.0004310344827586207 - }, - { - "value": "3ad3f894f4c9210dc9790a4b3e124ec0", - "count": 2, - "total_related": 5708, - "prevalence": 0.000350385423966363 - }, - { - "value": "024b45440d8a3a6827f7c7fbb1bdfd94", - "count": 2, - "total_related": 8751, - "prevalence": 0.00022854530910753056 - }, - { - "value": "1f16493cafe2cf72a3ddb9c7d07165e9", - "count": 2, - "total_related": 23813, - "prevalence": 8.398773779028262e-5 - }, - { - "value": "218237c70ff7a3511dbc782cd0ae4345", - "count": 2, - "total_related": 34376, - "prevalence": 5.8180125669071444e-5 - }, - { - "value": "0288dcb2944d075bbb5ffa585335cfa1", - "count": 2, - "total_related": 41378, - "prevalence": 4.8334863937358016e-5 - }, - { - "value": "4c9f2464cd4d1a641f9cd7e84e5a7f5b", - "count": 2, - "total_related": 41489, - "prevalence": 4.820554845862759e-5 - }, - { - "value": "7ef40b524cb3ca471eb447c0ad1599d2", - "count": 2, - "total_related": 52371, - "prevalence": 3.81890741058983e-5 - }, - { - "value": "fd7358c7e7f4d2d645756a08e2f519ec", - "count": 44, - "total_related": 100000, - "prevalence": 0.00044 - }, - { - "value": "42b9104269a4e4277d70780d2e8ecdd7", - "count": 30, - "total_related": 100000, - "prevalence": 0.0003 - }, - { - "value": "0abef1459995846d53ebc1b564867586", - "count": 23, - "total_related": 100000, - "prevalence": 0.00023 - }, - { - "value": "e1cc7c0576578e6708d3a04a7afc2a69", - "count": 20, - "total_related": 100000, - "prevalence": 0.0002 - }, - { - "value": "9fcbde393f2f22333f9bedd64dba31ce", - "count": 14, - "total_related": 100000, - "prevalence": 0.00014 - }, - { - "value": "db141c1feec07c07d11cc308bc9c4188", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "d91b8482a5b9b2355cdea11491de3c8c", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "fe66e54118bb12b06dcbabb6c2d17206", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "7d62fd9d7600499c5c84ef011653e4e8", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "d0093e50adbfab933517c7db54afdc05", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "d25823a5e896502b9007632f370fe77e", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "03257c9f3bfe280f5c4613af95a51301", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "0c89448385ffc782aee1a3c1329bedba", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "0e1242fb619d193a586ca98a1687ade0", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "5c740c8c47970e581fd486e762b9b846", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "9a33336a9a9b4732fb6e6ff733984796", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "bdc373fc9c9e24e2a66fb477438523cf", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "f2a96f92c36218030b7cf2462e1a62dd", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "2aba1e011dc393bfeb613a3abcf0d40f", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "36d4d8ddbf85e7e39619ad169e1cbbd8", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "6b5656993a98bcf1e9bf55dfb5d30fb2", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "adb8af1a660afc6666dc16400fb2aceb", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "14999cadd4c7a42ad2bca9f7a52a2c48", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "408b160e9f6453931227f7d1887bb9ad", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "4e25d893ab7b96a57235a05611077136", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "76c6c8e44cd4f1dbddc0f6c2202c1480", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "7eb58e30b74038daa9b31b5d9df78cf2", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - } - ], - "tlshhash": [ - { - "value": "T100329E0327EA064CB2B6AA49823714350B77BE96A53DC70D01CC795D9FF39485C6ABE3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T100942384DA176CD1D8BE5F7F1152159AF6E30681E343AC02B4ED798E3FB1AC0078B695", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T100D533103F1C0ABD812CF25F945F2FAA4694DE485A7E85D6FBD2109B68BE303656B3C1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T100F4235CB8285EDACBF53CB61D8F1E6399B0E714468072A49F4B25534F6370FAAEC448", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10141061167E5CB61E3B7497F54FAD1828A22B2337D179A9E12C0E1CD5470608F835B2F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T1015100023BF64632E23B6D340877D3824A30FD61BC01D25E90949A8E5CB2B04DD79A67", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T1016501228C4C2EDFE35957F2AB1F3D6C3A1D7131F5C507990729CB8A61A0A7E895B10B", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10176A0B950B7E051069E1E622518B7733C064FB79C6E752E2BDC07A053F2C2B1FAAC65", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10271090E8F85EA4C03C517C250BFCDDC6AB849D42641D2FCB169E28A378DE96C639378", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T102863302CD6F7AEAD81873325B214455DC7F3A6A4881DE64FF63886AFFE9202CD31156", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T102E0ABC5D0748B02FF2197706032793B323486C303E3084B9A192AC2742DCD6270B7C2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T1033423D1C20AE65ECB11E77D190046B2912E1118731A1DFD1DE3E68FA3997836F2FA86", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10341F5F40D1D36981EC112639AE2111E51E831CC5C3226FFFAC6652CAD1EC85A27AEE0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10351BD16B4FC6C313443D85AFC418411094275BB521C393EE3EB7AA85876A87BBE3A17", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T103C5338757F936F6FD6C277852C65E6DEC2028E6847A25B0C54043A7217BF38C3A6AC4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T103F5BF7D54F7F0501D959E623A4CF7A22C078AABDC9E2E36272C4550A3F181B268EDF1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T1044101150B9956E2D3B78D7B1C6BF1829B72B4167E03DB6D0AC052CD8820A18FC35B6B", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10443024BC4AF2427F7B98A3F2F55074ED6504A2200574AB16FB57A80FE919A3B0C47E8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T104F02C2E04FBDB256810A0922F803A463E81818B030BCD083EADBA31DF49E068CE3380", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T106A423835787A4BA8627AC3E9932F30649F95B864576F28CD678C3295F8D34B349C087", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T106A423835797A4BA8627AC3E9931F30749F94B864576F28CC678C72A5F8D34B349C087", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10741EE1A17D54301E2B7893648BBF20246A2F955F816C7AF45C0268C9865304FC3DB6B", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T107A153986AFA6208923AF77C829FA54D61E4C017121FCDD1FD2CE2B05F8446502B6FE8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T107D533E694954868D01FF379B091D55BECE3C47CE5922A8D1B8A18B33B224EAC70F54F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10813198963A100F4E46747358CB29E15E773BC536339431F529442AB1FB36819D3977B", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10831D20A16A62212C373897B449FF2458B2ABD674D42DF6940D5914D1CA1014FC75F7F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T108D4CF12CB00203BE6C0CB7866171982D52D6C7BB85ACE064BC7276F271BBE9AD75D4D", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10911C076FD122A75443B8692B551C045FDC56B731A23A9DABB4CEE0D0F3C58741A470F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10915BFB964F7F0510A595DA2355CBBB22C0B8EA7DC6E2935332C095093E1C2F27CADB5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T109215772FE175536893A8B627426D492F9A119F36514A2DEBB0C91040F32F836AC5F0F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T109528452DE830C440BB573B253EE54C9C8DE178B216289FC746EC2989F799144AE8FF9", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T1098423249E536B3485C4F08A48A4CF50308771D7873A426D883E7B67E7DB7F62A3694B", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10A046C06B6AD40F9DD7AC23885931A16F6727C5007789B9F17B0477A8F2B7E0A93DB10", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10A5423E2ACA4E785DD99F766221186E8D23610EF3B2DE9DFB6710B64F34536500708F2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10AD533A661E1B493D5E950A43FE8C65EF0B118352DB232AF18C825B3F767246473C6F8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10B62B0D127E65C58C2E74FB368629D2B709273A5B569CF4A2054E0C07D60F06F97A316", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10BD5BFA5C5B9042ADA0EB27BF6E1A6C3EACC87C16064AD57440C0BD31D9B4BB9FD710D", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10BE0ABD5E1784E23EF614330B276BC2F327984C383E6080A78112E4A346C8C2560B381", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10BE4010A0B44F9D2DC9A35BCA49B680DE53D3B5206E2B119B9DB36509CEB363373152F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10D539DBF256568A9DD2C49333D843F75BAB96F0089DB27BF33F483609C67182426B141", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10DA4232C26524C2BE18A7066B1BFF1D563E067D97B99818E5C67E76C3F07014E6CA3C2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10E25DF20804C7CDED31687F0AB1F3D5A7A1DB272F1C952A51B29C7862560E3FA12769F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10E91EA4E5ED8E75E438213C644BECE9CADF605812660D2E8B01DD2C93388E56CB7D2F8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10EE24392B6D38D48DD06473949B34222632BFCA5AF9BC30B2644F70A5FF5AD08D1761B", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10FB2CF586360CE05E2E337F52E7AC0988F61FF1A0D28566A3685774D98B2CD60A36773", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T111720754FFDC1226DE359239ECB3B72883B8BA447927CF4929C970986A437911E40F67", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T111742224D8DCADFED5AA1BF39F1575ADB1AEF053E5C886921478C3038C40F09A16786E", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11391099A27C8376CD63363098DBE8F98C5F608D019429D8864E7D58A7E0A493C73B26C", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T113E0ABD7E1694F13EF1147B194723C2B313596D703E28A0B58542D9238B8CC2162B391", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11441AC097BE51310C2778E7B14E6F2528B6B75566D16CF4D85C112882C62800FC3AF7B", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11475F170C05E5DCEF2675BC16B1A3C0E6689F0B2F0C6C7802725D3815941B6FA697EAB", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T114A4129FB2223F69C42CE2F67D5338CC172963046CC25246141A6C5E2DF23BF6D6B56A", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T114C5334218091AE6D3FE13B997DE8F1CF6A4357A700B7AA35250D5C73EBEB41A3191C2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T1157423FD43A05B6925DBEA1B921943E176F2C8D0CCF45DC3C8E4914BF96F18052EA8DA", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11583B6CBAF14085BC6ED213B537743012367E2AD4AF1637B245CB1842FE724A5B6EAC5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11591FA4E9E88E75A438213C2047FCEDCADF501852660D6E8B05DD3C93388E56C67D2F8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T1159423E698032374829BAF358A230A43FD0C34E5751739F2C97797920D6FD1DAAD18AD", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T115A2BFA8C669A86CD3B7E9FE840D08F1A21AE582D785AF1F3840F55C099094F472F7D9", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T116014C1819992B31D372CD3F84DA7313C83A7E17EDA26F5902A117846869610EC75E6F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T116141218D6C49E0C8B5E03E1E6F89FC805EBC52FA20D15A766353B2916CC6A653C47DF", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T116550122494C7EDED32917E1AB0F3D6C365E7232E5C55B960B38CB4A59B4A3B588700F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11671F81A9E85E95C438617C1A0BECDDC5AF949C02141E1FCA05AD28A338AE92D7392BC", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T116E061D9E1798F12EF31877195B3B82B33B49AC303F7440B695015423528CD616177C1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T116E0ABC6D0688F12EF118B709572792F21B69DC303E2080B694629A63428CD2271B382", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T117019A1ABB4E92676793B070692B5C5CBDD0C4BCCEB3E859790F4345330CAE84D27819", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T117528452DE830C440BB573B253EE54C9C8DE178B216289FC746EC2989F799144AE8FF9", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T117E533648C9FA5DFF7451C32C794C48F6D8AE8A4C3A71BAC68B035F1185AE4DA9F4181", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11821330E6FC60723C2B5CA33507FF281C529BAA2E943CEA840C092C86D61214F875D3F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11835232F98C23093E1DF46B86318C856B1302577ACB1767F18C466F39B475898B6D2F6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11841EE0A17D54301E2B78A3748BBF2028662F955F817C7AF45C0268C9865304FC3DB2B", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11853E7DB6B04089BC7ED45BB427B5B465322F21E4EE1030B1490A5807FE5B969B2BF87", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T118A31282D18B21A7F46E6E37CC700E06F1BDA5A52D531D431E5995203FD3B22D9EA63C", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T118E42362AB54409EF4B246B731400A4C7F640B81995B7FB2FB09F9E424D81D3E677ED8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11972CFB834D8CDBDD2F254F9DD06AD220BD09469E84CE1CD46B982CECA711642A3A857", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11991E84E9E88E61D4382138604BECE9C9DF6054526A0E6E8A05DD2C97388E56DA7C2F8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T119A1B51516093A4FCB274312FC7F0B5CC3F108B42D9E9F942093C99AB64E982B16961F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11A81E74E5EC8E659438213C204BECEDCADF6458126A4D6E8B05DC3C93385E56DB6D2F8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11B41A01A26D59700E3778A3B9CBBE70352A6B915FC16C7AD85C0524C6C55204FD39B3B", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11B51111417FA0A28D5B69F3EAD7AE3118572BC04FB025B9F53C4510AEC21504EA79B7F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11C63029DF1FF01B44A1F49BE2B920B90074CE54EEBD8AD3BA368513D38990E7596344C", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11CB302B536C75020F1D3A176AE6333792B9C2FA8CC940B153096FF846035BC1A72A9BC", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11D5423A63602AD012DD1467AFDE0AAEB3C542E777D862CF9238139D4378E40C59F8C67", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11D76334B52EED69BCB82397FBDBA96F495384D42DB629ABC02CCFD59C80CF45080C495", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11D81860A2F442F6D53D205C39E3F96ECD668C4B863490A4CE454F7BC279E924CBB25B5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11E31BD007AD94A11C2B25E7B2879F61519B57C15AF23CB5D1790E29C3524604E53EB23", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11E419B04BED14F10D1B68D7A28BAE65995B4BD56AE33CB9D0680E3AD21B0104F53EF17", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11F01E20C0D862B22C331CD3A04DAA32284753A47EDD2AF6A01E416D82569210A275DAE", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11F3633FCD2A5018FD5B9D3B6234DB183A9222B02C185925E0777C8ECE653B476BB5A43", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11F528342DE870C480BB573B243EE58C9C8DE178B216249FC746EC2949F799144AE8FF9", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11F613A1AED55EA44871822C3947F8DDA16F844942640F1FCA107E2CE6168F90DA7E36C", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11F640250D30C2609DBCB663C239B6119EC652FBB3FE6E017E8D188B5CDC76FA5A11242", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11F6533D3BD033341532048AAE4418B2577BBEA8A1F9FAAD775AB635D8C5BE3410DD06C", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T12001C90918991A21C732C93F10AAB712C421781BEE53BF6F03E422CE2558000BA75F5F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T120219E1C33CA5714F7749D3F7E399707256A7927A9028F1F5672C1853C25908E87CC20", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T12131EB1517A982C2E2F28D7B1C3BE2108B66F803BD07CBAD078452C8D468614FC32636", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T121419C2A56D95722C2B38E7714A6F2028526BD12B827DFAD06D062CC1C15214FC7BE1F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T12141DC262EEA2A75C2B38E3745BBE2418625FA26B803DF9D44D055CC5C26504B43AE7E", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T121861251B9C8D2F4C48A46746A41A0CF34E16D9E81EDDB283ACECC237F91F69446D7B2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T121A423D1028558FCC7A3EDA5A922F3840E79F791D4EEB04D966DC71F86C860B689D08B", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T121A48A60819D7CEED3568BD0AB1F3E2E365DB162F2C947461328D7464270A3FA62718F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - } - ], - "attributions": [ - { - "value": "lonejogger", - "count": 192, - "total_related": 215, - "prevalence": 0.8930232558139535 - }, - { - "value": "nukesped", - "count": 103, - "total_related": 4285, - "prevalence": 0.024037339556592766 - }, - { - "value": "flatdirt", - "count": 19, - "total_related": 19, - "prevalence": 1.0 - }, - { - "value": "todoswift", - "count": 17, - "total_related": 18, - "prevalence": 0.9444444444444444 - }, - { - "value": "lonerunner", - "count": 17, - "total_related": 25, - "prevalence": 0.68 - }, - { - "value": "rustbucket", - "count": 13, - "total_related": 33, - "prevalence": 0.3939393939393939 - }, - { - "value": "bitbook", - "count": 11, - "total_related": 20, - "prevalence": 0.55 - }, - { - "value": "shortfawn", - "count": 7, - "total_related": 8, - "prevalence": 0.875 - }, - { - "value": "covertcatch", - "count": 6, - "total_related": 31, - "prevalence": 0.1935483870967742 - }, - { - "value": "powerhouse", - "count": 5, - "total_related": 12, - "prevalence": 0.4166666666666667 - }, - { - "value": "hiddenagent", - "count": 5, - "total_related": 18, - "prevalence": 0.2777777777777778 - }, - { - "value": "swiftloader", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "kandykorn", - "count": 3, - "total_related": 16, - "prevalence": 0.1875 - }, - { - "value": "hiddenagent_mac", - "count": 2, - "total_related": 10, - "prevalence": 0.2 - }, - { - "value": "donut", - "count": 2, - "total_related": 28038, - "prevalence": 7.133176403452457e-5 - }, - { - "value": "whitehaul", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "tallcoral", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "whitestorm", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "sparkrat", - "count": 1, - "total_related": 2163, - "prevalence": 0.0004623208506703652 - }, - { - "value": "poweliks", - "count": 1, - "total_related": 2805, - "prevalence": 0.00035650623885918 - }, - { - "value": "sload", - "count": 1, - "total_related": 46987, - "prevalence": 2.1282482388745824e-5 - }, - { - "value": "powershell", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "powerstats", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "crowdsourced_ids_results": [ - { - "value": { - "id": "1:2027865", - "message": "ET INFO Observed DNS Query to .cloud TLD", - "category": "bad-unknown", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://www.spamhaus.org/statistics/tlds/" - ], - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET INFO Observed DNS Query to .cloud TLD\"; dns.query; content:\".cloud\"; nocase; endswith; reference:url,www.spamhaus.org/statistics/tlds/; classtype:bad-unknown; sid:2027865; rev:5; metadata:affected_product Any, attack_target Client_Endpoint, created_at 2019_08_13, deployment Perimeter, former_category INFO, signature_severity Informational, updated_at 2020_09_17;)" - }, - "count": 9, - "total_related": 42167, - "prevalence": 0.00021343704792847488 - }, - { - "value": { - "id": "1:2025194", - "message": "ET HUNTING Observed Let's Encrypt Certificate for Suspicious TLD (.xyz)", - "category": "bad-unknown", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert tls $EXTERNAL_NET any -> $HOME_NET any (msg:\"ET HUNTING Observed Let's Encrypt Certificate for Suspicious TLD (.xyz)\"; flow:established,to_client; tls.cert_subject; content:\".xyz\"; endswith; tls.cert_issuer; content:\"Let's Encrypt\"; classtype:bad-unknown; sid:2025194; rev:3; metadata:attack_target Client_Endpoint, created_at 2018_01_09, deployment Perimeter, confidence Medium, signature_severity Minor, updated_at 2020_09_16;)" - }, - "count": 6, - "total_related": 96816, - "prevalence": 6.197322756569162e-5 - }, - { - "value": { - "id": "1:51037", - "message": "POLICY-OTHER IGMP membership query attempt", - "category": "protocol-command-decode", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "references_urls": [ - "https://cve.mitre.org/cgi-bin/cvename.cgi?name=2019-12259", - "https://cve.mitre.org/cgi-bin/cvename.cgi?name=2019-12265" - ], - "tags": ["cve-2019-12259", "cve-2019-12265"], - "rule": "alert ip any any -> any any ( msg:\"POLICY-OTHER IGMP membership query attempt\"; ip_proto:2; content:\"|11|\",depth 1; reference:cve,2019-12259; reference:cve,2019-12265; classtype:protocol-command-decode; sid:51037; rev:1; )" - }, - "count": 5, - "total_related": 97143, - "prevalence": 5.1470512543363905e-5 - }, - { - "value": { - "id": "1:2047744", - "message": "ET MALWARE Observed DNS Query to TA444 Domain", - "category": "trojan-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET MALWARE Observed DNS Query to TA444 Domain\"; dns.query; dotprefix; content:\".commoncome.online\"; nocase; endswith; classtype:trojan-activity; sid:2047744; rev:1; metadata:attack_target Client_Endpoint, created_at 2023_08_24, deployment Perimeter, confidence High, signature_severity Major, tag TA444, updated_at 2023_08_24, reviewed_at 2024_01_26, former_sid 2855175;)" - }, - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": { - "id": "1:2033903", - "message": "ET MALWARE Observed Lazarus Related Domain (share .bloomcloud .org in TLS SNI)", - "category": "command-and-control", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://twitter.com/ShadowChasing1/status/1433807018867912705", - "https://www.virustotal.com/gui/search/a224350ce67eea6a8d818b85436c5309", - "https://www.virustotal.com/gui/search/02904e802b5dc2f85eec83e3c1948374", - "https://www.virustotal.com/gui/search/bac4acc2544626bac6377fb32c5f244c" - ], - "rule": "alert tls $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET MALWARE Observed Lazarus Related Domain (share .bloomcloud .org in TLS SNI)\"; flow:established,to_server; tls.sni; content:\"share.bloomcloud.org\"; bsize:20; fast_pattern; reference:url,twitter.com/ShadowChasing1/status/1433807018867912705; reference:md5,a224350ce67eea6a8d818b85436c5309; reference:md5,02904e802b5dc2f85eec83e3c1948374; reference:md5,bac4acc2544626bac6377fb32c5f244c; classtype:command-and-control; sid:2033903; rev:1; metadata:attack_target Client_Endpoint, created_at 2021_09_07, deployment Perimeter, performance_impact Low, confidence High, signature_severity Major, updated_at 2021_09_07, mitre_tactic_id TA0011, mitre_tactic_name Command_And_Control, mitre_technique_id T1071, mitre_technique_name Application_Layer_Protocol;)" - }, - "count": 4, - "total_related": 5, - "prevalence": 0.8 - }, - { - "value": { - "id": "1:2013028", - "message": "ET POLICY curl User-Agent Outbound", - "category": "attempted-recon", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://www.useragentstring.com/pages/useragentstring.php" - ], - "rule": "alert http $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET POLICY curl User-Agent Outbound\"; flow:established,to_server; http.user_agent; content:\"curl/\"; nocase; startswith; reference:url,www.useragentstring.com/pages/useragentstring.php; classtype:attempted-recon; sid:2013028; rev:7; metadata:created_at 2011_06_14, updated_at 2022_05_03;)" - }, - "count": 4, - "total_related": 39085, - "prevalence": 0.00010234105155430472 - }, - { - "value": { - "id": "1:2038987", - "message": "ET MALWARE TA444 Related Domain in DNS Lookup (onlinecloud .cloud)", - "category": "domain-c2", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET MALWARE TA444 Related Domain in DNS Lookup (onlinecloud .cloud)\"; dns.query; dotprefix; content:\".onlinecloud.cloud\"; nocase; endswith; classtype:domain-c2; sid:2038987; rev:1; metadata:attack_target Client_Endpoint, created_at 2022_09_26, deployment Perimeter, malware_family Lazarus, malware_family TA444, confidence High, signature_severity Major, updated_at 2022_09_26;)" - }, - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": { - "id": "1:2039824", - "message": "ET MALWARE TA444 Domain in DNS Lookup (dnx .capital)", - "category": "trojan-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET MALWARE TA444 Domain in DNS Lookup (dnx .capital)\"; dns.query; dotprefix; content:\".dnx.capital\"; nocase; endswith; classtype:trojan-activity; sid:2039824; rev:1; metadata:affected_product Windows_XP_Vista_7_8_10_Server_32_64_Bit, attack_target Client_Endpoint, created_at 2022_11_22, deployment Perimeter, malware_family TA444, confidence High, signature_severity Major, updated_at 2022_11_22;)" - }, - "count": 3, - "total_related": 6, - "prevalence": 0.5 - }, - { - "value": { - "id": "1:2017968", - "message": "ET HUNTING Suspicious Possible Process Dump in POST body", - "category": "trojan-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://www.securelist.com/en/blog/208214213/The_Icefog_APT_Hits_US_Targets_With_Java_Backdoor" - ], - "rule": "alert http $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET HUNTING Suspicious Possible Process Dump in POST body\"; flow:established,to_server; http.method; content:\"POST\"; http.request_body; content:\"System Idle Process\"; fast_pattern; reference:url,www.securelist.com/en/blog/208214213/The_Icefog_APT_Hits_US_Targets_With_Java_Backdoor; classtype:trojan-activity; sid:2017968; rev:6; metadata:created_at 2014_01_15, confidence Medium, signature_severity Major, updated_at 2020_09_22;)" - }, - "count": 3, - "total_related": 4516, - "prevalence": 0.0006643046944198405 - }, - { - "value": { - "id": "1:2027117", - "message": "ET HUNTING Suspicious POST with Common Windows Process Names - Possible Process List Exfiltration", - "category": "trojan-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert http $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET HUNTING Suspicious POST with Common Windows Process Names - Possible Process List Exfiltration\"; flow:established,to_server; http.method; content:\"POST\"; http.request_body; content:\"csrss.exe\"; content:\"explorer.exe\"; fast_pattern; content:\"svchost.exe\"; content:\"lsass.exe\"; classtype:trojan-activity; sid:2027117; rev:3; metadata:affected_product Windows_XP_Vista_7_8_10_Server_32_64_Bit, attack_target Client_Endpoint, created_at 2019_03_26, deployment Perimeter, performance_impact Low, confidence Medium, signature_severity Major, tag Suspicious_POST_body, updated_at 2020_08_28;)" - }, - "count": 3, - "total_related": 8065, - "prevalence": 0.0003719776813391197 - }, - { - "value": { - "id": "1:2210023", - "message": "SURICATA STREAM ESTABLISHED SYNACK resend with different ACK", - "category": "protocol-command-decode", - "source": "Suricata", - "url": "https://www.openinfosecfoundation.org/", - "rule": "alert tcp any any -> any any (msg:\"SURICATA STREAM ESTABLISHED SYNACK resend with different ACK\"; stream-event:est_synack_resend_with_different_ack; classtype:protocol-command-decode; sid:2210023; rev:2;)" - }, - "count": 3, - "total_related": 42165, - "prevalence": 7.114905727499111e-5 - }, - { - "value": { - "id": "1:2034135", - "message": "ET MALWARE Lazarus APT Related CnC Domain in DNS Lookup (gsheet .gdocsdown .com)", - "category": "domain-c2", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://ti.qianxin.com/blog/articles/Lazarus'-Recent-Attack-Campaign-Targeting-Blockchain-Finance-and-Energy-Sectors/" - ], - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET MALWARE Lazarus APT Related CnC Domain in DNS Lookup (gsheet .gdocsdown .com)\"; dns.query; content:\"gsheet.gdocsdown.com\"; nocase; bsize:20; reference:url,ti.qianxin.com/blog/articles/Lazarus'-Recent-Attack-Campaign-Targeting-Blockchain-Finance-and-Energy-Sectors/; classtype:domain-c2; sid:2034135; rev:1; metadata:attack_target Client_Endpoint, created_at 2021_10_06, deployment Perimeter, confidence High, signature_severity Major, updated_at 2021_10_06;)" - }, - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": { - "id": "1:2034570", - "message": "ET MALWARE Lazarus APT Related Domain in DNS Lookup (ny .silvergatehr .com)", - "category": "domain-c2", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://www.virustotal.com/gui/search/69c9881a6b7b89a648074328292da7e8", - "https://www.virustotal.com/gui/search/84dd7ccb69d0010c97c1fc336650d5e2", - "https://twitter.com/ShadowChasing1/status/1465998020734898176" - ], - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET MALWARE Lazarus APT Related Domain in DNS Lookup (ny .silvergatehr .com)\"; dns.query; content:\"ny.silvergatehr.com\"; nocase; bsize:19; reference:md5,69c9881a6b7b89a648074328292da7e8; reference:md5,84dd7ccb69d0010c97c1fc336650d5e2; reference:url,twitter.com/ShadowChasing1/status/1465998020734898176; classtype:domain-c2; sid:2034570; rev:1; metadata:attack_target Client_Endpoint, created_at 2021_12_01, deployment Perimeter, malware_family Lazarus, confidence High, signature_severity Major, updated_at 2021_12_01;)" - }, - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": { - "id": "1:2034987", - "message": "ET POLICY Suspicious File Sharing Domain in DNS Lookup (drive .cloudplus .one)", - "category": "bad-unknown", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://www.virustotal.com/gui/search/934c7b7c31d84728f0086be9b80ee1e4", - "https://twitter.com/ShadowChasing1/status/1486542725692284930", - "https://twitter.com/malwrhunterteam/status/1483853345924255745" - ], - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET POLICY Suspicious File Sharing Domain in DNS Lookup (drive .cloudplus .one)\"; dns.query; content:\"drive.cloudplus.one\"; nocase; bsize:19; reference:md5,934c7b7c31d84728f0086be9b80ee1e4; reference:url,twitter.com/ShadowChasing1/status/1486542725692284930; reference:url,twitter.com/malwrhunterteam/status/1483853345924255745; classtype:bad-unknown; sid:2034987; rev:1; metadata:attack_target Client_Endpoint, created_at 2022_01_27, deployment Perimeter, confidence High, signature_severity Informational, updated_at 2022_01_27;)" - }, - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": { - "id": "1:2039823", - "message": "ET MALWARE TA444 Domain in DNS Lookup (sharedrive .ink)", - "category": "trojan-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET MALWARE TA444 Domain in DNS Lookup (sharedrive .ink)\"; dns.query; dotprefix; content:\".sharedrive.ink\"; nocase; endswith; classtype:trojan-activity; sid:2039823; rev:1; metadata:affected_product Windows_XP_Vista_7_8_10_Server_32_64_Bit, attack_target Client_Endpoint, created_at 2022_11_22, deployment Perimeter, malware_family TA444, confidence High, signature_severity Critical, updated_at 2022_11_22;)" - }, - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": { - "id": "1:2039826", - "message": "ET MALWARE Observed TA444 Domain (dnx .capital in TLS SNI)", - "category": "trojan-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert tls $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET MALWARE Observed TA444 Domain (dnx .capital in TLS SNI)\"; flow:established,to_server; tls.sni; dotprefix; content:\".dnx.capital\"; endswith; fast_pattern; classtype:trojan-activity; sid:2039826; rev:1; metadata:affected_product Windows_XP_Vista_7_8_10_Server_32_64_Bit, attack_target Client_Endpoint, created_at 2022_11_22, deployment Perimeter, malware_family TA444, confidence High, signature_severity Major, updated_at 2022_11_23, mitre_tactic_id TA0011, mitre_tactic_name Command_And_Control, mitre_technique_id T1071, mitre_technique_name Application_Layer_Protocol;)" - }, - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": { - "id": "1:2043156", - "message": "ET MALWARE TA444 Related Activity (POST)", - "category": "trojan-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://securelist.com/bluenoroff-methods-bypass-motw/108383/" - ], - "rule": "alert http $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET MALWARE TA444 Related Activity (POST)\"; flow:established,to_server; http.method; content:\"POST\"; http.user_agent; content:\"cur1-agent\"; bsize:10; fast_pattern; reference:url,securelist.com/bluenoroff-methods-bypass-motw/108383/; classtype:trojan-activity; sid:2043156; rev:1; metadata:affected_product Windows_XP_Vista_7_8_10_Server_32_64_Bit, attack_target Client_Endpoint, created_at 2022_12_30, deployment Perimeter, confidence High, signature_severity Major, updated_at 2022_12_30;)" - }, - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": { - "id": "1:2045647", - "message": "ET MALWARE DNS Query to TA444 Domain (docs-send .online)", - "category": "trojan-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET MALWARE DNS Query to TA444 Domain (docs-send .online)\"; dns.query; content:\"docs-send.online\"; nocase; bsize:16; classtype:trojan-activity; sid:2045647; rev:1; metadata:attack_target Client_Endpoint, created_at 2023_05_11, deployment Perimeter, signature_severity Major, tag TA444, updated_at 2023_05_11, reviewed_at 2024_01_02;)" - }, - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": { - "id": "1:2047748", - "message": "ET MALWARE Win32/CosmicRust TA444 CnC Activity (GET)", - "category": "trojan-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert http $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET MALWARE Win32/CosmicRust TA444 CnC Activity (GET)\"; flow:established,to_server; urilen:7; http.method; content:\"GET\"; http.uri; content:\"/client\"; http.header_names; content:\"|0d 0a|Sec-WebSocket-Protocol|0d 0a|Host|0d 0a|Connection|0d 0a|Upgrade|0d 0a|Sec-WebSocket-Version|0d 0a|Sec-WebSocket-Key|0d 0a 0d 0a|\"; bsize:97; http.connection; content:\"Upgrade\"; http.header; content:\"Connection|3a 20|Upgrade|0d 0a|Upgrade|3a 20|websocket|0d 0a|Sec|2d|WebSocket|2d|Version|3a 20|13|0d 0a|Sec|2d|WebSocket|2d|Key|3a|\"; content:\"Sec|2d|WebSocket|2d|Protocol|3a 20|rust|2d|websocket|2c 20|ping|0d 0a|Host|3a 20|\"; fast_pattern; classtype:trojan-activity; sid:2047748; rev:1; metadata:affected_product Windows_XP_Vista_7_8_10_Server_32_64_Bit, attack_target Client_Endpoint, created_at 2023_08_24, deployment Perimeter, malware_family Win32_CosmicRust, confidence Medium, signature_severity Critical, tag TA444, updated_at 2023_08_24, reviewed_at 2023_08_24, former_sid 2855179;)" - }, - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": { - "id": "1:2038544", - "message": "ET MALWARE Observed DNS Query to TA444 Domain (1drvmicrosoft .com)", - "category": "trojan-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET MALWARE Observed DNS Query to TA444 Domain (1drvmicrosoft .com)\"; dns.query; dotprefix; content:\".1drvmicrosoft.com\"; nocase; endswith; classtype:trojan-activity; sid:2038544; rev:1; metadata:attack_target Client_Endpoint, created_at 2022_08_17, deployment Perimeter, confidence High, signature_severity Major, updated_at 2022_08_17;)" - }, - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": { - "id": "1:2038921", - "message": "ET MALWARE Observed DNS Query to TA444 Domain (privacysign .org)", - "category": "trojan-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET MALWARE Observed DNS Query to TA444 Domain (privacysign .org)\"; dns.query; dotprefix; content:\".privacysign.org\"; nocase; endswith; classtype:trojan-activity; sid:2038921; rev:1; metadata:affected_product Windows_XP_Vista_7_8_10_Server_32_64_Bit, attack_target Client_Endpoint, created_at 2022_09_21, deployment Perimeter, confidence High, signature_severity Major, updated_at 2022_09_21;)" - }, - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": { - "id": "1:2038943", - "message": "ET MALWARE Observed TA444 Domain (privacysign .org in TLS SNI)", - "category": "trojan-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert tls $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET MALWARE Observed TA444 Domain (privacysign .org in TLS SNI)\"; flow:established,to_server; tls.sni; dotprefix; content:\".privacysign.org\"; endswith; fast_pattern; classtype:trojan-activity; sid:2038943; rev:1; metadata:affected_product Windows_XP_Vista_7_8_10_Server_32_64_Bit, attack_target Client_Endpoint, created_at 2022_09_22, deployment Perimeter, confidence High, signature_severity Major, updated_at 2022_09_22, mitre_tactic_id TA0011, mitre_tactic_name Command_And_Control, mitre_technique_id T1071, mitre_technique_name Application_Layer_Protocol;)" - }, - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": { - "id": "1:2035162", - "message": "ET MALWARE DangerousPassword APT Related Domain in DNS Lookup (www .datacentre .center)", - "category": "domain-c2", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://www.virustotal.com/gui/search/26cb5fdcbdfccfa05399709d7dc12319", - "https://twitter.com/h2jazi/status/1490883892705828864", - "https://twitter.com/ShadowChasing1/status/1490861199981907974", - "https://twitter.com/cyberoverdrive/status/1490839283803951106" - ], - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET MALWARE DangerousPassword APT Related Domain in DNS Lookup (www .datacentre .center)\"; dns.query; content:\"www.datacentre.center\"; nocase; bsize:21; reference:md5,26cb5fdcbdfccfa05399709d7dc12319; reference:url,twitter.com/h2jazi/status/1490883892705828864; reference:url,twitter.com/ShadowChasing1/status/1490861199981907974; reference:url,twitter.com/cyberoverdrive/status/1490839283803951106; classtype:domain-c2; sid:2035162; rev:1; metadata:attack_target Client_Endpoint, created_at 2022_02_09, deployment Perimeter, malware_family Lazarus, malware_family DangerousPassword, confidence High, signature_severity Major, updated_at 2022_02_09;)" - }, - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": { - "id": "1:2038764", - "message": "ET MALWARE Observed DNS Query to TA444 Domain (azure-protect .online)", - "category": "domain-c2", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET MALWARE Observed DNS Query to TA444 Domain (azure-protect .online)\"; dns.query; dotprefix; content:\".azure-protect.online\"; nocase; endswith; classtype:domain-c2; sid:2038764; rev:1; metadata:attack_target Client_Endpoint, created_at 2022_09_07, deployment Perimeter, malware_family TA444, confidence High, signature_severity Major, updated_at 2022_09_07;)" - }, - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": { - "id": "1:2038790", - "message": "ET MALWARE Observed TA444 Domain (azure-protect .online in TLS SNI)", - "category": "trojan-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert tls $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET MALWARE Observed TA444 Domain (azure-protect .online in TLS SNI)\"; flow:established,to_server; tls.sni; dotprefix; content:\".azure-protect.online\"; endswith; fast_pattern; classtype:trojan-activity; sid:2038790; rev:1; metadata:attack_target Client_Endpoint, created_at 2022_09_09, deployment Perimeter, malware_family TA444, confidence High, signature_severity Major, updated_at 2022_09_09, mitre_tactic_id TA0011, mitre_tactic_name Command_And_Control, mitre_technique_id T1071, mitre_technique_name Application_Layer_Protocol;)" - }, - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": { - "id": "1:2038986", - "message": "ET MALWARE Lazarus APT Related Domain in DNS Lookup (digiboxes .us)", - "category": "domain-c2", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://twitter.com/StopMalvertisin/status/1574329188793733120", - "https://www.virustotal.com/gui/search/8878ee5d935facff0e04370324118c60" - ], - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET MALWARE Lazarus APT Related Domain in DNS Lookup (digiboxes .us)\"; dns.query; dotprefix; content:\".digiboxes.us\"; nocase; endswith; reference:url,twitter.com/StopMalvertisin/status/1574329188793733120; reference:md5,8878ee5d935facff0e04370324118c60; classtype:domain-c2; sid:2038986; rev:1; metadata:attack_target Client_Endpoint, created_at 2022_09_26, deployment Perimeter, malware_family Lazarus, confidence High, signature_severity Major, updated_at 2022_09_26;)" - }, - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": { - "id": "1:2045085", - "message": "ET MALWARE Observed DNSQuery to TA444 Domain (internal .j-ic .co)", - "category": "trojan-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://twitter.com/TLP_R3D/status/1649147042680172571", - "https://storage.pardot.com/838563/1676629189Mljyft19/CTI_Advisory_Undetected_North_Korean_Malware_A_Looming_Threat_to_Finan.pdf" - ], - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET MALWARE Observed DNSQuery to TA444 Domain (internal .j-ic .co)\"; dns.query; content:\"internal.j-ic.co\"; nocase; bsize:16; reference:url,twitter.com/TLP_R3D/status/1649147042680172571; reference:url,storage.pardot.com/838563/1676629189Mljyft19/CTI_Advisory_Undetected_North_Korean_Malware_A_Looming_Threat_to_Finan.pdf; classtype:trojan-activity; sid:2045085; rev:1; metadata:attack_target Client_Endpoint, created_at 2023_04_20, deployment Perimeter, former_category MALWARE, signature_severity Major, tag TA444, updated_at 2023_04_20;)" - }, - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": { - "id": "1:902204988", - "message": "SSLBL: Malicious SSL certificate detected (Malware distribution)", - "source": "Abuse.ch SSL Blocklist", - "url": "https://sslbl.abuse.ch/blacklist/sslblacklist.rules", - "references_urls": [ - "https://sslbl.abuse.ch/ssl-certificates/sha1/24b621824151585b035905519ae7e2fefc18c036/" - ], - "rule": "alert tls $EXTERNAL_NET any -> $HOME_NET any (msg:\"SSLBL: Malicious SSL certificate detected (Malware distribution)\"; tls.fingerprint:\"24:b6:21:82:41:51:58:5b:03:59:05:51:9a:e7:e2:fe:fc:18:c0:36\"; reference:url, sslbl.abuse.ch/ssl-certificates/sha1/24b621824151585b035905519ae7e2fefc18c036/; sid:902204988; rev:1;)" - }, - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": { - "id": "1:2034991", - "message": "ET MALWARE Lazarus APT Related Domain in DNS Lookup (docusign .agency)", - "category": "domain-c2", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://www.virustotal.com/gui/search/993cecde0cd707f795e00181414d97bd", - "https://twitter.com/ShadowChasing1/status/1486530954382348290" - ], - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET MALWARE Lazarus APT Related Domain in DNS Lookup (docusign .agency)\"; dns.query; dotprefix; content:\".docusign.agency\"; nocase; endswith; reference:md5,993cecde0cd707f795e00181414d97bd; reference:url,twitter.com/ShadowChasing1/status/1486530954382348290; classtype:domain-c2; sid:2034991; rev:1; metadata:attack_target Client_Endpoint, created_at 2022_01_27, deployment Perimeter, confidence High, signature_severity Major, updated_at 2022_01_27;)" - }, - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": { - "id": "1:2038785", - "message": "ET MALWARE Observed DNS Query to TA444 Domain (azure-protection .cloud)", - "category": "trojan-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET MALWARE Observed DNS Query to TA444 Domain (azure-protection .cloud)\"; dns.query; dotprefix; content:\".azure-protection.cloud\"; nocase; endswith; classtype:trojan-activity; sid:2038785; rev:1; metadata:attack_target Client_Endpoint, created_at 2022_09_09, deployment Perimeter, malware_family TA444, confidence High, signature_severity Major, updated_at 2022_09_09;)" - }, - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": { - "id": "1:2037803", - "message": "ET MALWARE TA444 Related Domain in DNS Lookup (fclouddown .co)", - "category": "domain-c2", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://twitter.com/h2jazi/status/1549780561551675393", - "https://www.virustotal.com/gui/search/d13eb9a69a59001de27db3af7589f5c0", - "https://www.virustotal.com/gui/search/a727ec19eae848a554cbe9cb90dcaf1b" - ], - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET MALWARE TA444 Related Domain in DNS Lookup (fclouddown .co)\"; dns.query; dotprefix; content:\".fclouddown.co\"; nocase; endswith; reference:url,twitter.com/h2jazi/status/1549780561551675393; reference:md5,d13eb9a69a59001de27db3af7589f5c0; reference:md5,a727ec19eae848a554cbe9cb90dcaf1b; classtype:domain-c2; sid:2037803; rev:1; metadata:attack_target Client_Endpoint, created_at 2022_07_21, deployment Perimeter, malware_family TA444, confidence High, signature_severity Major, updated_at 2022_07_21;)" - }, - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": { - "id": "1:2045981", - "message": "ET INFO DYNAMIC_DNS Query to a *.camdvr .org Domain", - "category": "bad-unknown", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://www.dynu.com/ControlPanel/AddDDNS" - ], - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET INFO DYNAMIC_DNS Query to a *.camdvr .org Domain\"; dns.query; content:\".camdvr.org\"; fast_pattern; nocase; endswith; reference:url,www.dynu.com/ControlPanel/AddDDNS; classtype:bad-unknown; sid:2045981; rev:2; metadata:attack_target Client_and_Server, created_at 2023_06_01, deployment Perimeter, performance_impact Low, confidence High, signature_severity Informational, updated_at 2024_06_11, mitre_tactic_id TA0011, mitre_tactic_name Command_And_Control, mitre_technique_id T1568, mitre_technique_name Dynamic_Resolution;)" - }, - "count": 1, - "total_related": 128, - "prevalence": 0.0078125 - }, - { - "value": { - "id": "1:2046669", - "message": "ET MALWARE Win32/SparkRAT CnC Checkin (GET)", - "category": "command-and-control", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://sangfor.com/farsight-labs-threat-intelligence/cybersecurity/may-hot-apt-security-events-techniques-tracker" - ], - "rule": "alert http $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET MALWARE Win32/SparkRAT CnC Checkin (GET)\"; flow:established,to_server; http.method; content:\"GET\"; http.uri; content:\"/ws\"; endswith; http.user_agent; content:\"Go|2d|http|2d|client|2f|1|2e|1\"; http.connection; content:\"Upgrade\"; bsize:7; http.header; content:\"Key|3a 20|\"; pcre:\"/^(?:[a-z0-9]{64})\\x0d\\x0a/R\"; content:\"Sec|2d|WebSocket|2d|Version|3a 20|13|0d 0a|\"; content:\"UUID|3a 20|\"; pcre:\"/^(?:[a-z0-9]{32})\\x0d\\x0a/R\"; content:\"Upgrade|3a 20|websocket\"; http.header_names; content:\"|0d 0a|Host|0d 0a|User-Agent|0d 0a|Connection|0d 0a|Key|0d 0a|Sec-WebSocket-Key|0d 0a|Sec-WebSocket-Version|0d 0a|UUID|0d 0a|Upgrade|0d 0a 0d 0a|\"; bsize:96; fast_pattern; threshold:type limit,track by_src,count 1,seconds 3600; reference:url,sangfor.com/farsight-labs-threat-intelligence/cybersecurity/may-hot-apt-security-events-techniques-tracker; classtype:command-and-control; sid:2046669; rev:2; metadata:affected_product Windows_XP_Vista_7_8_10_Server_32_64_Bit, attack_target Client_Endpoint, created_at 2023_06_27, deployment Perimeter, malware_family SparkRAT, confidence High, signature_severity Critical, updated_at 2023_11_10, reviewed_at 2024_01_26;)" - }, - "count": 1, - "total_related": 140, - "prevalence": 0.007142857142857143 - }, - { - "value": { - "id": "1:2026674", - "message": "ET INFO Minimal HTTP GET Request to Bit.ly", - "category": "bad-unknown", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert http $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET INFO Minimal HTTP GET Request to Bit.ly\"; flow:established,to_server; http.method; content:\"GET\"; http.start; content:\"HTTP/1.1|0d 0a|Host|3a 20|bit.ly|0d 0a|Connection|3a 20|Keep-Alive|0d 0a 0d 0a|\"; endswith; fast_pattern; classtype:bad-unknown; sid:2026674; rev:3; metadata:affected_product Web_Browsers, attack_target Client_Endpoint, created_at 2018_11_29, deployment Perimeter, confidence High, signature_severity Minor, updated_at 2020_09_16;)" - }, - "count": 1, - "total_related": 161, - "prevalence": 0.006211180124223602 - }, - { - "value": { - "id": "1:2032991", - "message": "ET INFO HTTP Request to a *.buzz domain", - "category": "bad-unknown", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert http $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET INFO HTTP Request to a *.buzz domain\"; flow:established,to_server; http.host; content:\".buzz\"; fast_pattern; endswith; classtype:bad-unknown; sid:2032991; rev:1; metadata:attack_target Client_Endpoint, created_at 2021_05_18, deployment Perimeter, performance_impact Low, confidence High, signature_severity Informational, updated_at 2021_05_18;)" - }, - "count": 1, - "total_related": 833, - "prevalence": 0.0012004801920768306 - }, - { - "value": { - "id": "1:2210015", - "message": "SURICATA STREAM CLOSEWAIT ACK out of window", - "category": "protocol-command-decode", - "source": "Suricata", - "url": "https://www.openinfosecfoundation.org/", - "rule": "alert tcp any any -> any any (msg:\"SURICATA STREAM CLOSEWAIT ACK out of window\"; stream-event:closewait_ack_out_of_window; classtype:protocol-command-decode; sid:2210015; rev:2;)" - }, - "count": 1, - "total_related": 1072, - "prevalence": 0.0009328358208955224 - }, - { - "value": { - "id": "1:2031189", - "message": "ET HUNTING HTTP POST to XYZ TLD Containing Pass - Possible Phishing", - "category": "misc-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert http $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET HUNTING HTTP POST to XYZ TLD Containing Pass - Possible Phishing\"; flow:established,to_server; http.method; content:\"POST\"; http.host; content:\".xyz\"; endswith; fast_pattern; http.request_body; content:\"pass\"; nocase; classtype:misc-activity; sid:2031189; rev:2; metadata:affected_product Web_Browsers, attack_target Client_Endpoint, created_at 2020_11_09, deployment Perimeter, confidence Medium, signature_severity Critical, tag Phishing, updated_at 2020_11_09, mitre_tactic_id TA0001, mitre_tactic_name Initial_Access, mitre_technique_id T1566, mitre_technique_name Phishing;)" - }, - "count": 1, - "total_related": 2486, - "prevalence": 0.00040225261464199515 - }, - { - "value": { - "id": "1:2034457", - "message": "ET POLICY Observed DNS Query to DynDNS Domain (publicvm .com)", - "category": "bad-unknown", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://dnsexit.com/domains/free-second-level-domains/" - ], - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET POLICY Observed DNS Query to DynDNS Domain (publicvm .com)\"; dns.query; content:\".publicvm.com\"; nocase; endswith; content:!\"www.publicvm.com\"; reference:url,dnsexit.com/domains/free-second-level-domains/; classtype:bad-unknown; sid:2034457; rev:2; metadata:affected_product Any, attack_target Client_Endpoint, created_at 2021_11_15, deployment Perimeter, performance_impact Low, confidence High, signature_severity Informational, updated_at 2021_11_15;)" - }, - "count": 1, - "total_related": 4093, - "prevalence": 0.0002443195699975568 - }, - { - "value": { - "id": "1:2036936", - "message": "ET HUNTING File Sharing Related Domain in DNS Lookup (download .mediafire .com)", - "category": "bad-unknown", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET HUNTING File Sharing Related Domain in DNS Lookup (download .mediafire .com)\"; dns.query; content:\"download\"; startswith; content:\".mediafire.com\"; endswith; classtype:bad-unknown; sid:2036936; rev:1; metadata:attack_target Client_Endpoint, created_at 2022_06_09, deployment Perimeter, confidence High, signature_severity Informational, updated_at 2022_06_09;)" - }, - "count": 1, - "total_related": 4267, - "prevalence": 0.00023435669088352472 - }, - { - "value": { - "id": "1:5730", - "message": "OS-WINDOWS Microsoft Windows SMB-DS Trans Max Param OS-WINDOWS attempt", - "category": "protocol-command-decode", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "references_urls": [ - "https://www.securityfocus.com/bid/13942", - "https://cve.mitre.org/cgi-bin/cvename.cgi?name=2005-1206", - "http://cgi.nessus.org/plugins/dump.php3?id=18483", - "https://technet.microsoft.com/en-us/security/bulletin/MS05-027" - ], - "tags": ["cve-2005-1206"], - "rule": "alert tcp $EXTERNAL_NET any -> $HOME_NET 445 ( msg:\"OS-WINDOWS Microsoft Windows SMB-DS Trans Max Param OS-WINDOWS attempt\"; flow:to_server,established; content:\"|00|\",depth 1; content:\"|FF|SMB%\",within 5,distance 3; byte_test:1,!&,128,6,relative; pcre:\"/^.{27}/Rs\"; byte_test:2,>,4376,5,relative,little; service:netbios-ssn; reference:bugtraq,13942; reference:cve,2005-1206; reference:nessus,18483; reference:url,technet.microsoft.com/en-us/security/bulletin/MS05-027; classtype:protocol-command-decode; sid:5730; rev:13; )" - }, - "count": 1, - "total_related": 4345, - "prevalence": 0.00023014959723820482 - }, - { - "value": { - "id": "1:2025649", - "message": "ET EXPLOIT Possible ETERNALBLUE Probe MS17-010 (MSF style)", - "category": "trojan-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/scanner/smb/smb_ms17_010.rb" - ], - "rule": "alert smb any any -> $HOME_NET any (msg:\"ET EXPLOIT Possible ETERNALBLUE Probe MS17-010 (MSF style)\"; flow:to_server,established; content:\"|ff|SMB|25 00 00 00 00 18 01 28|\"; offset:4; depth:12; content:\"|00 00 00 00 00 00 00 00 00 00|\"; distance:2; within:10; content:\"|23 00 00 00 07 00 5c 50 49 50 45 5c 00|\"; fast_pattern; endswith; threshold: type limit, track by_src, count 1, seconds 30; reference:url,github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/scanner/smb/smb_ms17_010.rb; classtype:trojan-activity; sid:2025649; rev:3; metadata:affected_product Windows_XP_Vista_7_8_10_Server_32_64_Bit, attack_target Client_Endpoint, created_at 2018_07_11, deployment Internal, confidence Medium, signature_severity Major, tag Metasploit, tag ETERNALBLUE, updated_at 2019_09_28;)" - }, - "count": 1, - "total_related": 4650, - "prevalence": 0.00021505376344086021 - }, - { - "value": { - "id": "1:2025992", - "message": "ET EXPLOIT Possible ETERNALBLUE Probe MS17-010 (Generic Flags)", - "category": "trojan-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/scanner/smb/smb_ms17_010.rb" - ], - "rule": "alert smb any any -> $HOME_NET any (msg:\"ET EXPLOIT Possible ETERNALBLUE Probe MS17-010 (Generic Flags)\"; flow:to_server,established; content:\"|ff|SMB|25 00 00 00 00|\"; offset:4; depth:9; content:\"|00 00 00 00 00 00 00 00 00 00|\"; distance:5; within:10; content:\"|23 00 00 00 07 00 5c 50 49 50 45 5c 00|\"; fast_pattern; endswith; threshold: type limit, track by_src, count 1, seconds 30; reference:url,github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/scanner/smb/smb_ms17_010.rb; classtype:trojan-activity; sid:2025992; rev:2; metadata:affected_product Windows_XP_Vista_7_8_10_Server_32_64_Bit, attack_target Client_Endpoint, created_at 2018_08_15, deployment Perimeter, malware_family ETERNALBLUE, confidence Medium, signature_severity Major, updated_at 2019_09_28;)" - }, - "count": 1, - "total_related": 4695, - "prevalence": 0.00021299254526091586 - }, - { - "value": { - "id": "1:42340", - "message": "OS-WINDOWS Microsoft Windows SMB anonymous session IPC share access attempt", - "category": "attempted-recon", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "references_urls": [ - "https://attack.mitre.org/techniques/T1077", - "https://msdn.microsoft.com/en-us/library/ee441910.aspx", - "https://technet.microsoft.com/en-us/security/bulletin/MS17-010" - ], - "rule": "alert tcp any any -> $HOME_NET 445 ( msg:\"OS-WINDOWS Microsoft Windows SMB anonymous session IPC share access attempt\"; flow:to_server,established; flowbits:isset,smb.null_session; content:\"|FF|SMB|75 00 00 00 00|\",depth 9,offset 4; content:\"|00 5C 00|I|00|P|00|C|00|$|00 00 00|\",fast_pattern,nocase; metadata:policy max-detect-ips drop,policy security-ips drop,ruleset community; service:netbios-ssn; reference:url,attack.mitre.org/techniques/T1077; reference:url,msdn.microsoft.com/en-us/library/ee441910.aspx; reference:url,technet.microsoft.com/en-us/security/bulletin/MS17-010; classtype:attempted-recon; sid:42340; rev:4; )" - }, - "count": 1, - "total_related": 4733, - "prevalence": 0.00021128248468201986 - }, - { - "value": { - "id": "1:10001254", - "message": "ATTACK [PTsecurity] Unimplemented Trans2 Sub-Command code. Possible ETERNALBLUE (WannaCry, Petya) tool", - "category": "attempted-admin", - "source": "Positive Technologies: PT Open Ruleset", - "url": "https://github.com/ptresearch/AttackDetection/", - "references_urls": [ - "https://msdn.microsoft.com/en-us/library/ee441654.aspx", - "https://github.com/ptresearch/AttackDetection" - ], - "rule": "alert smb any any -> $HOME_NET any (msg: \"ATTACK [PTsecurity] Unimplemented Trans2 Sub-Command code. Possible ETERNALBLUE (WannaCry, Petya) tool\"; flow: to_server, established; content: \"|FF|SMB2|00 00 00 00|\"; depth: 9; offset: 4; byte_test: 2, >, 0x0008, 52, relative, little; pcre: \"/\\xFFSMB2\\x00\\x00\\x00\\x00.{52}(?:\\x04|\\x09|\\x0A|\\x0B|\\x0C|\\x0E|\\x11)\\x00/s\"; flowbits: set, SMB.Trans2.SubCommand.Unimplemented; reference: url, msdn.microsoft.com/en-us/library/ee441654.aspx; classtype: attempted-admin; reference: url, github.com/ptresearch/AttackDetection; sid: 10001254; rev: 2;)" - }, - "count": 1, - "total_related": 4845, - "prevalence": 0.0002063983488132095 - }, - { - "value": { - "id": "1:44489", - "message": "POLICY-OTHER SMBv1 protocol detection attempt", - "category": "policy-violation", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "references_urls": [ - "https://github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/scanner/smb/smb1.rb" - ], - "rule": "alert tcp $EXTERNAL_NET any -> $HOME_NET [139,445] ( msg:\"POLICY-OTHER SMBv1 protocol detection attempt\"; flow:to_server,established; content:\"|FF|SMB|72 00 00 00 00|\"; content:\"|02|NT LM 0.\",fast_pattern,nocase; service:netbios-ssn; reference:url,github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/scanner/smb/smb1.rb; classtype:policy-violation; sid:44489; rev:4; )" - }, - "count": 1, - "total_related": 5312, - "prevalence": 0.00018825301204819278 - }, - { - "value": { - "id": "1:44485", - "message": "POLICY-OTHER SMBv1 protocol detection attempt", - "category": "policy-violation", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "references_urls": [ - "https://github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/scanner/smb/smb1.rb" - ], - "rule": "alert tcp $EXTERNAL_NET any -> $HOME_NET [139,445] ( msg:\"POLICY-OTHER SMBv1 protocol detection attempt\"; flow:to_server,established; content:\"|FF|SMB|72 00 00 00 00|\"; content:\"|02|LANMAN1.0\",fast_pattern,nocase; service:netbios-ssn; reference:url,github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/scanner/smb/smb1.rb; classtype:policy-violation; sid:44485; rev:4; )" - }, - "count": 1, - "total_related": 6551, - "prevalence": 0.00015264845061822624 - }, - { - "value": { - "id": "1:44487", - "message": "POLICY-OTHER SMBv1 protocol detection attempt", - "category": "policy-violation", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "references_urls": [ - "https://github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/scanner/smb/smb1.rb" - ], - "rule": "alert tcp $EXTERNAL_NET any -> $HOME_NET [139,445] ( msg:\"POLICY-OTHER SMBv1 protocol detection attempt\"; flow:to_server,established; content:\"|FF|SMB|72 00 00 00 00|\"; content:\"|02|LM1.2X002\",fast_pattern,nocase; service:netbios-ssn; reference:url,github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/scanner/smb/smb1.rb; classtype:policy-violation; sid:44487; rev:4; )" - }, - "count": 1, - "total_related": 6561, - "prevalence": 0.00015241579027587258 - }, - { - "value": { - "id": "1:2043259", - "message": "ET HUNTING File Sharing Related Domain (www .mediafire .com) in DNS Lookup", - "category": "bad-unknown", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET HUNTING File Sharing Related Domain (www .mediafire .com) in DNS Lookup\"; dns.query; content:\"www.mediafire.com\"; nocase; bsize:17; classtype:bad-unknown; sid:2043259; rev:1; metadata:affected_product Any, attack_target Client_Endpoint, created_at 2023_01_10, deployment Perimeter, performance_impact Low, confidence High, signature_severity Major, updated_at 2023_01_10, reviewed_at 2024_09_23;)" - }, - "count": 1, - "total_related": 6838, - "prevalence": 0.00014624159110851126 - }, - { - "value": { - "id": "1:44486", - "message": "POLICY-OTHER SMBv1 protocol detection attempt", - "category": "policy-violation", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "references_urls": [ - "https://github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/scanner/smb/smb1.rb" - ], - "rule": "alert tcp $EXTERNAL_NET any -> $HOME_NET [139,445] ( msg:\"POLICY-OTHER SMBv1 protocol detection attempt\"; flow:to_server,established; content:\"|FF|SMB|72 00 00 00 00|\"; content:\"|02|Windows for Workgroups 3.1a\",fast_pattern,nocase; service:netbios-ssn; reference:url,github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/scanner/smb/smb1.rb; classtype:policy-violation; sid:44486; rev:4; )" - }, - "count": 1, - "total_related": 7232, - "prevalence": 0.00013827433628318584 - }, - { - "value": { - "id": "1:44488", - "message": "POLICY-OTHER SMBv1 protocol detection attempt", - "category": "policy-violation", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "references_urls": [ - "https://github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/scanner/smb/smb1.rb" - ], - "rule": "alert tcp $EXTERNAL_NET any -> $HOME_NET [139,445] ( msg:\"POLICY-OTHER SMBv1 protocol detection attempt\"; flow:to_server,established; content:\"|FF|SMB|72 00 00 00 00|\"; content:\"|02|LANMAN2.1\",fast_pattern,nocase; service:netbios-ssn; reference:url,github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/scanner/smb/smb1.rb; classtype:policy-violation; sid:44488; rev:4; )" - }, - "count": 1, - "total_related": 7249, - "prevalence": 0.00013795006207752792 - }, - { - "value": { - "id": "1:44484", - "message": "POLICY-OTHER SMBv1 protocol detection attempt", - "category": "policy-violation", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "references_urls": [ - "https://github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/scanner/smb/smb1.rb" - ], - "rule": "alert tcp $EXTERNAL_NET any -> $HOME_NET [139,445] ( msg:\"POLICY-OTHER SMBv1 protocol detection attempt\"; flow:to_server,established; content:\"|FF|SMB|72 00 00 00 00|\"; content:\"|02|PC NETWORK PROGRAM 1.0\",fast_pattern,nocase; service:netbios-ssn; reference:url,github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/scanner/smb/smb1.rb; classtype:policy-violation; gid:1; sid:44484; rev:6; )" - }, - "count": 1, - "total_related": 7311, - "prevalence": 0.0001367801942278758 - }, - { - "value": { - "id": "1:2230027", - "message": "SURICATA TLS certificate invalid der", - "category": "protocol-command-decode", - "source": "Suricata", - "url": "https://www.openinfosecfoundation.org/", - "rule": "alert tls any any -> any any (msg:\"SURICATA TLS certificate invalid der\"; flow:established; app-layer-event:tls.certificate_invalid_der; flowint:tls.anomaly.count,+,1; classtype:protocol-command-decode; sid:2230027; rev:1;)" - }, - "count": 1, - "total_related": 7740, - "prevalence": 0.00012919896640826872 - }, - { - "value": { - "id": "1:2027671", - "message": "ET INFO Cloudflare DNS Over HTTPS Certificate Inbound", - "category": "misc-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://developers.cloudflare.com/1.1.1.1/dns-over-https/request-structure/" - ], - "rule": "alert tls $EXTERNAL_NET any -> $HOME_NET any (msg:\"ET INFO Cloudflare DNS Over HTTPS Certificate Inbound\"; flow:established,to_client; threshold: type limit, track by_src, count 1, seconds 300; tls.cert_subject; content:\"C=US, ST=California, L=San Francisco, O=Cloudflare, Inc., CN=cloudflare-dns.com\"; endswith; fast_pattern; reference:url,developers.cloudflare.com/1.1.1.1/dns-over-https/request-structure/; classtype:misc-activity; sid:2027671; rev:5; metadata:created_at 2019_07_03, confidence Medium, signature_severity Informational, tag DoH, updated_at 2020_09_17;)" - }, - "count": 1, - "total_related": 11976, - "prevalence": 8.350033400133601e-5 - }, - { - "value": { - "id": "1:2024897", - "message": "ET USER_AGENTS Go HTTP Client User-Agent", - "category": "misc-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert http $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET USER_AGENTS Go HTTP Client User-Agent\"; flow:established,to_server; http.user_agent; content:\"Go-http-client\"; nocase; fast_pattern; classtype:misc-activity; sid:2024897; rev:3; metadata:attack_target Client_Endpoint, created_at 2017_10_23, deployment Perimeter, confidence High, signature_severity Informational, updated_at 2024_06_13;)" - }, - "count": 1, - "total_related": 33338, - "prevalence": 2.9995800587917693e-5 - }, - { - "value": { - "id": "129:18", - "message": "(stream_tcp) data sent on stream after TCP reset received", - "category": "bad-unknown", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert ( gid:129; sid:18; rev:2; msg:\"(stream_tcp) data sent on stream after TCP reset received\"; metadata: policy max-detect-ips drop, rule-type preproc; classtype:bad-unknown;)" - }, - "count": 1, - "total_related": 67611, - "prevalence": 1.4790492671310882e-5 - }, - { - "value": { - "id": "122:21", - "message": "(port_scan) UDP filtered portscan", - "category": "attempted-recon", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert ( gid:122; sid:21; rev:2; msg:\"(port_scan) UDP filtered portscan\"; metadata: rule-type preproc; classtype:attempted-recon;)" - }, - "count": 1, - "total_related": 81061, - "prevalence": 1.233638864558789e-5 - }, - { - "value": { - "id": "116:58", - "message": "(tcp) experimental TCP options found", - "category": "protocol-command-decode", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert ( gid:116; sid:58; rev:2; msg:\"(tcp) experimental TCP options found\"; metadata: policy max-detect-ips drop, rule-type decode; classtype:protocol-command-decode;)" - }, - "count": 23, - "total_related": 100000, - "prevalence": 0.00023 - }, - { - "value": { - "id": "1:29456", - "message": "PROTOCOL-ICMP Unusual PING detected", - "category": "successful-recon-limited", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "references_urls": [ - "https://krebsonsecurity.com/2014/01/a-closer-look-at-the-target-malware-part-ii/", - "https://krebsonsecurity.com/2014/01/a-first-look-at-the-target-intrusion-malware/" - ], - "rule": "alert icmp $HOME_NET any -> $EXTERNAL_NET any ( msg:\"PROTOCOL-ICMP Unusual PING detected\"; icode:0; itype:8; fragbits:!M; content:!\"ABCDEFGHIJKLMNOPQRSTUVWABCDEFGHI\",depth 32; content:!\"0123456789abcdefghijklmnopqrstuv\",depth 32; content:!\"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE\",depth 36; content:!\"WANG2\"; content:!\"cacti-monitoring-system\",depth 65; content:!\"SolarWinds\",depth 72; metadata:policy max-detect-ips drop,ruleset community; reference:url,krebsonsecurity.com/2014/01/a-closer-look-at-the-target-malware-part-ii/; reference:url,krebsonsecurity.com/2014/01/a-first-look-at-the-target-intrusion-malware/; classtype:successful-recon-limited; sid:29456; rev:3; )" - }, - "count": 18, - "total_related": 100000, - "prevalence": 0.00018 - }, - { - "value": { - "id": "1:382", - "message": "PROTOCOL-ICMP PING Windows", - "category": "misc-activity", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert icmp $EXTERNAL_NET any -> $HOME_NET any ( msg:\"PROTOCOL-ICMP PING Windows\"; itype:8; content:\"abcdefghijklmnop\",depth 16; metadata:ruleset community; classtype:misc-activity; sid:382; rev:11; )" - }, - "count": 18, - "total_related": 100000, - "prevalence": 0.00018 - }, - { - "value": { - "id": "1:384", - "message": "PROTOCOL-ICMP PING", - "category": "misc-activity", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert icmp $EXTERNAL_NET any -> $HOME_NET any ( msg:\"PROTOCOL-ICMP PING\"; icode:0; itype:8; metadata:ruleset community; classtype:misc-activity; sid:384; rev:8; )" - }, - "count": 18, - "total_related": 100000, - "prevalence": 0.00018 - }, - { - "value": { - "id": "1:408", - "message": "PROTOCOL-ICMP Echo Reply", - "category": "misc-activity", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert icmp $EXTERNAL_NET any -> $HOME_NET any ( msg:\"PROTOCOL-ICMP Echo Reply\"; icode:0; itype:0; metadata:ruleset community; classtype:misc-activity; sid:408; rev:8; )" - }, - "count": 18, - "total_related": 100000, - "prevalence": 0.00018 - }, - { - "value": { - "id": "119:260", - "message": "(http_inspect) HTTP Content-Length message body was truncated", - "category": "unknown", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert ( gid:119; sid:260; rev:1; msg:\"(http_inspect) HTTP Content-Length message body was truncated\"; metadata: rule-type preproc; classtype:unknown;)" - }, - "count": 14, - "total_related": 100000, - "prevalence": 0.00014 - }, - { - "value": { - "id": "122:7", - "message": "(port_scan) TCP filtered portsweep", - "category": "attempted-recon", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert ( gid:122; sid:7; rev:2; msg:\"(port_scan) TCP filtered portsweep\"; metadata: rule-type preproc; classtype:attempted-recon;)" - }, - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": { - "id": "1:906200054", - "message": "SSLBL: Malicious JA3 SSL-Client Fingerprint detected (Tofsee)", - "source": "Abuse.ch Suricata JA3 Fingerprint Ruleset", - "url": "https://sslbl.abuse.ch/blacklist/ja3_fingerprints.rules", - "references_urls": [ - "https://sslbl.abuse.ch/ja3-fingerprints/1d095e68489d3c535297cd8dffb06cb9/" - ], - "rule": "alert tls any any -> any any (msg:\"SSLBL: Malicious JA3 SSL-Client Fingerprint detected (Tofsee)\"; ja3_hash; content:\"1d095e68489d3c535297cd8dffb06cb9\"; reference:url, sslbl.abuse.ch/ja3-fingerprints/1d095e68489d3c535297cd8dffb06cb9/; sid:906200054; rev:1;)" - }, - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": { - "id": "1:2210044", - "message": "SURICATA STREAM Packet with invalid timestamp", - "category": "protocol-command-decode", - "source": "Suricata", - "url": "https://www.openinfosecfoundation.org/", - "rule": "alert tcp any any -> any any (msg:\"SURICATA STREAM Packet with invalid timestamp\"; stream-event:pkt_invalid_timestamp; classtype:protocol-command-decode; sid:2210044; rev:2;)" - }, - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": { - "id": "1:254", - "message": "PROTOCOL-DNS SPOOF query response with TTL of 1 min. and no authority", - "category": "bad-unknown", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert udp $EXTERNAL_NET 53 -> $HOME_NET any ( msg:\"PROTOCOL-DNS SPOOF query response with TTL of 1 min. and no authority\"; flow:to_client; content:\"|81 80|\",depth 4,offset 2,fast_pattern; byte_test:2,>,0,0,relative,big; byte_test:2,>,0,2,relative,big; content:\"|00 00 00 00|\",within 4,distance 4; content:\"|C0 0C 00 01 00 01|\",distance 0; byte_test:4,<,61,0,relative,big; byte_test:4,>,0,0,relative,big; metadata:policy max-detect-ips drop,ruleset community; service:dns; classtype:bad-unknown; sid:254; rev:16; )" - }, - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": { - "id": "2:1", - "message": "(output) tagged packet", - "category": "not-suspicious", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert ( gid:2; sid:1; rev:2; msg:\"(output) tagged packet\"; metadata: rule-type preproc; classtype:not-suspicious;)" - }, - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": { - "id": "119:279", - "message": "(http_inspect) invalid status line", - "category": "unknown", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert ( gid:119; sid:279; rev:1; msg:\"(http_inspect) invalid status line\"; metadata: rule-type preproc; classtype:unknown;)" - }, - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": { - "id": "129:8", - "message": "(stream_tcp) data sent on stream after TCP reset sent", - "category": "protocol-command-decode", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert ( gid:129; sid:8; rev:2; msg:\"(stream_tcp) data sent on stream after TCP reset sent\"; metadata: policy max-detect-ips drop, rule-type preproc; classtype:protocol-command-decode;)" - }, - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": { - "id": "1:25080", - "message": "APP-DETECT Apple Messages push.apple.com DNS TXT request attempt", - "category": "policy-violation", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "references_urls": [ - "https://www.apple.com/osx/apps/all.html#messages" - ], - "rule": "alert udp $HOME_NET any -> any 53 ( msg:\"APP-DETECT Apple Messages push.apple.com DNS TXT request attempt\"; flow:to_server; byte_test:1,!&,0xF8,2; content:\"|04|push|05|apple|03|com|00 00 10 00 01|\",fast_pattern,nocase; service:dns; reference:url,www.apple.com/osx/apps/all.html#messages; classtype:policy-violation; gid:1; sid:25080; rev:3; )" - }, - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": { - "id": "1:57756", - "message": "MALWARE-CNC DNS Fast Flux attempt", - "category": "trojan-activity", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "references_urls": [ - "https://attack.mitre.org/techniques/T1568/001/" - ], - "rule": "alert udp $EXTERNAL_NET 53 -> $HOME_NET any ( msg:\"MALWARE-CNC DNS Fast Flux attempt\"; flow:to_client; content:\"|00 01|\",depth 2,offset 4; byte_test:2,>,1,0,relative; byte_test:1,=,1,2,bitmask 0x80; content:\"|00 01 00 01|\",distance 6; content:\"|00 01 00 01 00 00 00 05|\",distance 0; metadata:policy max-detect-ips drop; service:dns; reference:url,attack.mitre.org/techniques/T1568/001/; classtype:trojan-activity; sid:57756; rev:2; )" - }, - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": { - "id": "1:906200056", - "message": "SSLBL: Malicious JA3 SSL-Client Fingerprint detected (Tofsee)", - "source": "Abuse.ch Suricata JA3 Fingerprint Ruleset", - "url": "https://sslbl.abuse.ch/blacklist/ja3_fingerprints.rules", - "references_urls": [ - "https://sslbl.abuse.ch/ja3-fingerprints/d76ee64fb7273733cbe455ac81c292e6/" - ], - "rule": "alert tls any any -> any any (msg:\"SSLBL: Malicious JA3 SSL-Client Fingerprint detected (Tofsee)\"; ja3_hash; content:\"d76ee64fb7273733cbe455ac81c292e6\"; reference:url, sslbl.abuse.ch/ja3-fingerprints/d76ee64fb7273733cbe455ac81c292e6/; sid:906200056; rev:1;)" - }, - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": { - "id": "119:241", - "message": "(http_inspect) Content-Transfer-Encoding used as HTTP header", - "category": "unknown", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert ( gid:119; sid:241; rev:2; msg:\"(http_inspect) Content-Transfer-Encoding used as HTTP header\"; metadata: policy max-detect-ips drop, rule-type preproc; classtype:unknown;)" - }, - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": { - "id": "119:8", - "message": "(http_inspect) URI path contains consecutive slash characters", - "category": "not-suspicious", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert ( gid:119; sid:8; rev:3; msg:\"(http_inspect) URI path contains consecutive slash characters\"; metadata: rule-type preproc; service:http; classtype:not-suspicious;)" - }, - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": { - "id": "122:19", - "message": "(port_scan) UDP portsweep", - "category": "attempted-recon", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert ( gid:122; sid:19; rev:2; msg:\"(port_scan) UDP portsweep\"; metadata: rule-type preproc; classtype:attempted-recon;)" - }, - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": { - "id": "1:2047866", - "message": "ET INFO Observed Google DNS over HTTPS Domain (dns .google in TLS SNI)", - "category": "misc-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://developers.google.com/speed/public-dns/docs/doh/" - ], - "rule": "alert tls $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET INFO Observed Google DNS over HTTPS Domain (dns .google in TLS SNI)\"; flow:established,to_server; threshold: type both, track by_src, count 1, seconds 600; tls.sni; dotprefix; content:\".dns.google\"; endswith; reference:url,developers.google.com/speed/public-dns/docs/doh/; classtype:misc-activity; sid:2047866; rev:4; metadata:affected_product Any, attack_target Client_Endpoint, created_at 2022_02_07, deployment Perimeter, performance_impact Low, confidence High, signature_severity Informational, tag DoH, updated_at 2023_10_05, reviewed_at 2023_10_05, former_sid 2851058; target:src_ip;)" - }, - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": { - "id": "1:31767", - "message": "SERVER-OTHER MRLG fastping echo reply memory corruption attempt", - "category": "misc-attack", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "references_urls": [ - "https://cve.mitre.org/cgi-bin/cvename.cgi?name=2014-3931", - "https://mrlg.op-sec.us/", - "https://s3.eurecom.fr/cve/CVE-2014-3931.txt" - ], - "tags": ["cve-2014-3931"], - "rule": "alert icmp $EXTERNAL_NET any -> $HOME_NET any ( msg:\"SERVER-OTHER MRLG fastping echo reply memory corruption attempt\"; icode:0; itype:0; content:!\"ABCDEFGHIJKLMNOPQRSTUVWABCDEFGHI\",depth 32; content:!\"0123456789abcdefghijklmnopqrstuv\",depth 32; content:!\"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE\",depth 36; byte_test:4,>,1000000,8,little; metadata:policy max-detect-ips drop; reference:cve,2014-3931; reference:url,mrlg.op-sec.us/; reference:url,s3.eurecom.fr/cve/CVE-2014-3931.txt; classtype:misc-attack; sid:31767; rev:2; )" - }, - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": { - "id": "119:281", - "message": "(http_inspect) invalid request line", - "category": "unknown", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert ( gid:119; sid:281; rev:1; msg:\"(http_inspect) invalid request line\"; metadata: rule-type preproc; classtype:unknown;)" - }, - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": { - "id": "1:2023883", - "message": "ET DNS Query to a *.top domain - Likely Hostile", - "category": "bad-unknown", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://www.symantec.com/connect/blogs/shady-tld-research-gdn-and-our-2016-wrap", - "https://www.spamhaus.org/statistics/tlds/" - ], - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET DNS Query to a *.top domain - Likely Hostile\"; threshold:type limit, track by_src, count 1, seconds 30; dns.query; content:\".top\"; nocase; endswith; reference:url,www.symantec.com/connect/blogs/shady-tld-research-gdn-and-our-2016-wrap; reference:url,www.spamhaus.org/statistics/tlds/; classtype:bad-unknown; sid:2023883; rev:4; metadata:affected_product Windows_XP_Vista_7_8_10_Server_32_64_Bit, attack_target Client_Endpoint, created_at 2017_02_07, deployment Perimeter, confidence Medium, signature_severity Major, updated_at 2020_09_15;)" - }, - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": { - "id": "1:2029340", - "message": "ET INFO TLS Handshake Failure", - "category": "bad-unknown", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert tls $EXTERNAL_NET any -> $HOME_NET any (msg:\"ET INFO TLS Handshake Failure\"; flow:established,to_client; dsize:7; content:\"|15|\"; depth:1; content:\"|00 02 02 28|\"; distance:2; within:4; fast_pattern; classtype:bad-unknown; sid:2029340; rev:2; metadata:attack_target Client_Endpoint, created_at 2020_01_30, deployment Perimeter, confidence High, signature_severity Informational, updated_at 2020_01_30;)" - }, - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": { - "id": "1:43687", - "message": "INDICATOR-COMPROMISE Suspicious .top dns query", - "category": "misc-activity", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "references_urls": ["https://en.wikipedia.org/wiki/.top"], - "rule": "alert udp $HOME_NET any -> any 53 ( msg:\"INDICATOR-COMPROMISE Suspicious .top dns query\"; flow:to_server; byte_test:1,!&,0xF8,2; content:\"|03|top|00|\",fast_pattern,nocase; service:dns; reference:url,en.wikipedia.org/wiki/.top; classtype:misc-activity; gid:1; sid:43687; rev:3; )" - }, - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": { - "id": "119:228", - "message": "(http_inspect) server response before client request", - "category": "unknown", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert ( gid:119; sid:228; rev:2; msg:\"(http_inspect) server response before client request\"; metadata: rule-type preproc; classtype:unknown;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "129:14", - "message": "(stream_tcp) TCP timestamp is missing", - "category": "bad-unknown", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert ( gid:129; sid:14; rev:2; msg:\"(stream_tcp) TCP timestamp is missing\"; metadata: policy max-detect-ips drop, rule-type preproc; classtype:bad-unknown;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "1:2025275", - "message": "ET INFO Windows OS Submitting USB Metadata to Microsoft", - "category": "misc-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert http $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET INFO Windows OS Submitting USB Metadata to Microsoft\"; flow:established,to_server; threshold:type limit, seconds 300, count 1, track by_src; http.method; content:\"POST\"; http.uri; content:\"metadata.svc\"; endswith; http.header; content:\"/DeviceMetadataService/GetDeviceMetadata|22 0d 0a|\"; http.user_agent; content:\"MICROSOFT_DEVICE_METADATA_RETRIEVAL_CLIENT\"; depth:42; endswith; fast_pattern; classtype:misc-activity; sid:2025275; rev:4; metadata:affected_product Windows_XP_Vista_7_8_10_Server_32_64_Bit, attack_target Client_Endpoint, created_at 2018_01_31, deployment Perimeter, performance_impact Low, confidence High, signature_severity Minor, updated_at 2020_09_17;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "1:2027390", - "message": "ET USER_AGENTS Microsoft Device Metadata Retrieval Client User-Agent", - "category": "misc-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert http $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET USER_AGENTS Microsoft Device Metadata Retrieval Client User-Agent\"; flow:established,to_server; http.user_agent; content:\"MICROSOFT_DEVICE_METADATA_RETRIEVAL_CLIENT\"; depth:42; endswith; nocase; fast_pattern; classtype:misc-activity; sid:2027390; rev:4; metadata:affected_product Web_Browsers, attack_target Client_Endpoint, created_at 2019_05_28, deployment Perimeter, performance_impact Low, confidence High, signature_severity Informational, updated_at 2020_09_17;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "1:2027863", - "message": "ET INFO Observed DNS Query to .biz TLD", - "category": "bad-unknown", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://www.spamhaus.org/statistics/tlds/" - ], - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET INFO Observed DNS Query to .biz TLD\"; dns.query; content:\".biz\"; nocase; endswith; reference:url,www.spamhaus.org/statistics/tlds/; classtype:bad-unknown; sid:2027863; rev:5; metadata:affected_product Any, attack_target Client_Endpoint, created_at 2019_08_13, deployment Perimeter, confidence High, signature_severity Informational, updated_at 2022_11_21;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "1:2031231", - "message": "ET INFO Observed ZeroSSL SSL/TLS Certificate", - "category": "misc-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert tls $EXTERNAL_NET any -> $HOME_NET any (msg:\"ET INFO Observed ZeroSSL SSL/TLS Certificate\"; flow:from_server,established; tls.cert_issuer; content:\"ZeroSSL\"; classtype:misc-activity; sid:2031231; rev:3; metadata:created_at 2020_11_23, confidence High, signature_severity Informational, updated_at 2022_12_01;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "1:2210054", - "message": "SURICATA STREAM excessive retransmissions", - "category": "protocol-command-decode", - "source": "Suricata", - "url": "https://www.openinfosecfoundation.org/", - "rule": "alert tcp any any -> any any (msg:\"SURICATA STREAM excessive retransmissions\"; flowbits:isnotset,tcp.retransmission.alerted; flowint:tcp.retransmission.count,>=,10; flowbits:set,tcp.retransmission.alerted; classtype:protocol-command-decode; sid:2210054; rev:1;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "1:2221010", - "message": "SURICATA HTTP unable to match response to request", - "category": "protocol-command-decode", - "source": "Suricata", - "url": "https://www.openinfosecfoundation.org/", - "rule": "alert http any any -> any any (msg:\"SURICATA HTTP unable to match response to request\"; flow:established,to_client; app-layer-event:http.unable_to_match_response_to_request; flowint:http.anomaly.count,+,1; classtype:protocol-command-decode; sid:2221010; rev:1;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "1:50447", - "message": "POLICY-OTHER HTTP request by IPv4 address attempt", - "category": "policy-violation", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "references_urls": [ - "https://www.w3.org/Protocols/rfc2616/rfc2616-sec15.html" - ], - "rule": "alert tcp any any -> any $HTTP_PORTS ( msg:\"POLICY-OTHER HTTP request by IPv4 address attempt\"; flow:to_server,established; http_header; content:\"Host:\",fast_pattern,nocase; pcre:\"/^Host\\x3a\\s*(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\\s*:?\\s*\\d*\\s*$/ims\"; service:http; reference:url,www.w3.org/Protocols/rfc2616/rfc2616-sec15.html; classtype:policy-violation; sid:50447; rev:1; )" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "crowdsourced_yara_results": [ - { - "value": { - "id": "002bb473a9|High_Entropy_LNK", - "ruleset_id": "002bb473a9", - "ruleset_name": "LNK_Ruleset", - "rule_name": "High_Entropy_LNK", - "source": "https://github.com/bartblaze/Yara-rules" - }, - "count": 34, - "total_related": 4902, - "prevalence": 0.0069359445124439 - }, - { - "value": { - "id": "000bd045c7|SUSP_LNK_Big_Link_File", - "ruleset_id": "000bd045c7", - "ruleset_name": "gen_susp_lnk", - "rule_name": "SUSP_LNK_Big_Link_File", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 26, - "total_related": 6301, - "prevalence": 0.004126329154102523 - }, - { - "value": { - "id": "002bb473a9|Large_filesize_LNK", - "ruleset_id": "002bb473a9", - "ruleset_name": "LNK_Ruleset", - "rule_name": "Large_filesize_LNK", - "source": "https://github.com/bartblaze/Yara-rules" - }, - "count": 26, - "total_related": 12166, - "prevalence": 0.0021371034029261876 - }, - { - "value": { - "id": "01a4e63dd2|downloader_win_curl_agent", - "ruleset_id": "01a4e63dd2", - "ruleset_name": "downloader_win_curl_agent", - "rule_name": "downloader_win_curl_agent", - "source": "https://github.com/SEKOIA-IO/Community" - }, - "count": 10, - "total_related": 10, - "prevalence": 1.0 - }, - { - "value": { - "id": "0086c5e942|win_cur1_downloader_auto", - "ruleset_id": "0086c5e942", - "ruleset_name": "win.cur1_downloader_auto", - "rule_name": "win_cur1_downloader_auto", - "source": "https://github.com/malpedia/signator-rules" - }, - "count": 8, - "total_related": 8, - "prevalence": 1.0 - }, - { - "value": { - "id": "00885934ef|win_unidentified_101_auto", - "ruleset_id": "00885934ef", - "ruleset_name": "win.unidentified_101_auto", - "rule_name": "win_unidentified_101_auto", - "source": "https://github.com/malpedia/signator-rules" - }, - "count": 8, - "total_related": 8, - "prevalence": 1.0 - }, - { - "value": { - "id": "01a8c3cf91|apt_lazarus_vhd_ransomware_downloader", - "ruleset_id": "01a8c3cf91", - "ruleset_name": "apt_lazarus_vhd_ransomware_downloader", - "rule_name": "apt_lazarus_vhd_ransomware_downloader", - "source": "https://github.com/SEKOIA-IO/Community" - }, - "count": 8, - "total_related": 8, - "prevalence": 1.0 - }, - { - "value": { - "id": "01269e8003|Microsoft_2007_OLE_Encrypted", - "ruleset_id": "01269e8003", - "ruleset_name": "Microsoft_2007_OLE_Encrypted", - "rule_name": "Microsoft_2007_OLE_Encrypted", - "source": "https://github.com/InQuest/yara-rules-vt" - }, - "count": 8, - "total_related": 36625, - "prevalence": 0.00021843003412969284 - }, - { - "value": { - "id": "0120f242fe|Encrypted_Office_Document", - "ruleset_id": "0120f242fe", - "ruleset_name": "Encrypted_Office_Document", - "rule_name": "Encrypted_Office_Document", - "source": "https://github.com/InQuest/yara-rules-vt" - }, - "count": 8, - "total_related": 57010, - "prevalence": 0.00014032625855113138 - }, - { - "value": { - "id": "01ad5b0691|apt_lazarus_dangerouspassword_lnk", - "ruleset_id": "01ad5b0691", - "ruleset_name": "apt_lazarus_dangerouspassword_lnk", - "rule_name": "apt_lazarus_dangerouspassword_lnk", - "source": "https://github.com/SEKOIA-IO/Community" - }, - "count": 7, - "total_related": 8, - "prevalence": 0.875 - }, - { - "value": { - "id": "0008f6eca4|Office_AutoOpen_Macro", - "ruleset_id": "0008f6eca4", - "ruleset_name": "general_officemacros", - "rule_name": "Office_AutoOpen_Macro", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 7, - "total_related": 47018, - "prevalence": 0.00014887915266493683 - }, - { - "value": { - "id": "0007bbfc16|WEBSHELL_ASP_OBFUSC", - "ruleset_id": "0007bbfc16", - "ruleset_name": "gen_webshells", - "rule_name": "WEBSHELL_ASP_OBFUSC", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 6, - "total_related": 1869, - "prevalence": 0.0032102728731942215 - }, - { - "value": { - "id": "01244057f9|Microsoft_LNK_with_CMD_EXE_Reference", - "ruleset_id": "01244057f9", - "ruleset_name": "Microsoft_LNK_with_CMD_EXE_Reference", - "rule_name": "Microsoft_LNK_with_CMD_EXE_Reference", - "source": "https://github.com/InQuest/yara-rules-vt" - }, - "count": 6, - "total_related": 23550, - "prevalence": 0.00025477707006369424 - }, - { - "value": { - "id": "0000ea19af|LNK_Malicious_Nov1", - "ruleset_id": "0000ea19af", - "ruleset_name": "gen_mal_link", - "rule_name": "LNK_Malicious_Nov1", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 6, - "total_related": 31633, - "prevalence": 0.00018967533904466855 - }, - { - "value": { - "id": "002bb473a9|PS_in_LNK", - "ruleset_id": "002bb473a9", - "ruleset_name": "LNK_Ruleset", - "rule_name": "PS_in_LNK", - "source": "https://github.com/bartblaze/Yara-rules" - }, - "count": 6, - "total_related": 63582, - "prevalence": 9.436633009342267e-5 - }, - { - "value": { - "id": "01a756b7e2|downloader_mac_rustbucket", - "ruleset_id": "01a756b7e2", - "ruleset_name": "downloader_mac_rustbucket", - "rule_name": "downloader_mac_rustbucket", - "source": "https://github.com/SEKOIA-IO/Community" - }, - "count": 5, - "total_related": 16, - "prevalence": 0.3125 - }, - { - "value": { - "id": "015381d075|MacOS_Trojan_RustBucket_e64f7a92", - "ruleset_id": "015381d075", - "ruleset_name": "MacOS_Trojan_RustBucket", - "rule_name": "MacOS_Trojan_RustBucket_e64f7a92", - "source": "https://github.com/elastic/protections-artifacts" - }, - "count": 4, - "total_related": 21, - "prevalence": 0.19047619047619047 - }, - { - "value": { - "id": "0007bbfc16|webshell_asp_obfuscated", - "ruleset_id": "0007bbfc16", - "ruleset_name": "gen_webshells", - "rule_name": "webshell_asp_obfuscated", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 4, - "total_related": 8594, - "prevalence": 0.00046544100535257155 - }, - { - "value": { - "id": "01ac9a3e58|downloader_mac_rustbucket_swiftloader", - "ruleset_id": "01ac9a3e58", - "ruleset_name": "downloader_mac_rustbucket_swiftloader", - "rule_name": "downloader_mac_rustbucket_swiftloader", - "source": "https://github.com/SEKOIA-IO/Community" - }, - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": { - "id": "015ea2c86a|MacOS_Trojan_KandyKorn_a7bb6944", - "ruleset_id": "015ea2c86a", - "ruleset_name": "MacOS_Trojan_KandyKorn", - "rule_name": "MacOS_Trojan_KandyKorn_a7bb6944", - "source": "https://github.com/elastic/protections-artifacts" - }, - "count": 3, - "total_related": 18, - "prevalence": 0.16666666666666666 - }, - { - "value": { - "id": "002bb473a9|CDN_in_LNK", - "ruleset_id": "002bb473a9", - "ruleset_name": "LNK_Ruleset", - "rule_name": "CDN_in_LNK", - "source": "https://github.com/bartblaze/Yara-rules" - }, - "count": 2, - "total_related": 3095, - "prevalence": 0.0006462035541195477 - }, - { - "value": { - "id": "00032bfe82|SUSP_LNK_SuspiciousCommands", - "ruleset_id": "00032bfe82", - "ruleset_name": "gen_susp_lnk_files", - "rule_name": "SUSP_LNK_SuspiciousCommands", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 2, - "total_related": 11437, - "prevalence": 0.0001748710326134476 - }, - { - "value": { - "id": "00848f61f2|win_lazarloader_auto", - "ruleset_id": "00848f61f2", - "ruleset_name": "win.lazarloader_auto", - "rule_name": "win_lazarloader_auto", - "source": "https://github.com/malpedia/signator-rules" - }, - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": { - "id": "01a6252a71|apt_lazarus_vhd_ransomware_loader", - "ruleset_id": "01a6252a71", - "ruleset_name": "apt_lazarus_vhd_ransomware_loader", - "rule_name": "apt_lazarus_vhd_ransomware_loader", - "source": "https://github.com/SEKOIA-IO/Community" - }, - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": { - "id": "01a867e149|implant_mac_rustbucket", - "ruleset_id": "01a867e149", - "ruleset_name": "implant_mac_rustbucket", - "rule_name": "implant_mac_rustbucket", - "source": "https://github.com/SEKOIA-IO/Community" - }, - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": { - "id": "0154befd02|Windows_Trojan_Donutloader_21e801e0", - "ruleset_id": "0154befd02", - "ruleset_name": "Windows_Trojan_Donutloader", - "rule_name": "Windows_Trojan_Donutloader_21e801e0", - "source": "https://github.com/elastic/protections-artifacts" - }, - "count": 1, - "total_related": 120, - "prevalence": 0.008333333333333333 - }, - { - "value": { - "id": "01ab014df3|backdoor_mul_sparkrat", - "ruleset_id": "01ab014df3", - "ruleset_name": "backdoor_mul_sparkrat", - "rule_name": "backdoor_mul_sparkrat", - "source": "https://github.com/SEKOIA-IO/Community" - }, - "count": 1, - "total_related": 311, - "prevalence": 0.003215434083601286 - }, - { - "value": { - "id": "00cd20741a|INDICATOR_OLE_Suspicious_MITRE_T1117", - "ruleset_id": "00cd20741a", - "ruleset_name": "indicator_office", - "rule_name": "INDICATOR_OLE_Suspicious_MITRE_T1117", - "source": "https://github.com/ditekshen/detection" - }, - "count": 1, - "total_related": 1054, - "prevalence": 0.0009487666034155598 - }, - { - "value": { - "id": "00017701b5|Disclosed_0day_POCs_payload_MSI", - "ruleset_id": "00017701b5", - "ruleset_name": "thor-hacktools", - "rule_name": "Disclosed_0day_POCs_payload_MSI", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 1, - "total_related": 5736, - "prevalence": 0.00017433751743375174 - }, - { - "value": { - "id": "000f4bfd25|IMPLANT_4_v7", - "ruleset_id": "000f4bfd25", - "ruleset_name": "apt_grizzlybear_uscert", - "rule_name": "IMPLANT_4_v7", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 1, - "total_related": 6457, - "prevalence": 0.00015487068297971194 - }, - { - "value": { - "id": "01267baf74|Microsoft_OneNote_with_Suspicious_String", - "ruleset_id": "01267baf74", - "ruleset_name": "Microsoft_OneNote_with_Suspicious_String", - "rule_name": "Microsoft_OneNote_with_Suspicious_String", - "source": "https://github.com/InQuest/yara-rules-vt" - }, - "count": 1, - "total_related": 6502, - "prevalence": 0.00015379883112888343 - }, - { - "value": { - "id": "000552ff9e|SUSP_ZIP_LNK_PhishAttachment_Pattern_Jun22_1", - "ruleset_id": "000552ff9e", - "ruleset_name": "gen_phish_attachments", - "rule_name": "SUSP_ZIP_LNK_PhishAttachment_Pattern_Jun22_1", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 1, - "total_related": 15557, - "prevalence": 6.4279745452208e-5 - }, - { - "value": { - "id": "002bb473a9|Download_in_LNK", - "ruleset_id": "002bb473a9", - "ruleset_name": "LNK_Ruleset", - "rule_name": "Download_in_LNK", - "source": "https://github.com/bartblaze/Yara-rules" - }, - "count": 170, - "total_related": 100000, - "prevalence": 0.0017 - }, - { - "value": { - "id": "002bb473a9|EXE_in_LNK", - "ruleset_id": "002bb473a9", - "ruleset_name": "LNK_Ruleset", - "rule_name": "EXE_in_LNK", - "source": "https://github.com/bartblaze/Yara-rules" - }, - "count": 170, - "total_related": 100000, - "prevalence": 0.0017 - }, - { - "value": { - "id": "002bb473a9|Execution_in_LNK", - "ruleset_id": "002bb473a9", - "ruleset_name": "LNK_Ruleset", - "rule_name": "Execution_in_LNK", - "source": "https://github.com/bartblaze/Yara-rules" - }, - "count": 98, - "total_related": 100000, - "prevalence": 0.00098 - }, - { - "value": { - "id": "002bb473a9|Long_RelativePath_LNK", - "ruleset_id": "002bb473a9", - "ruleset_name": "LNK_Ruleset", - "rule_name": "Long_RelativePath_LNK", - "source": "https://github.com/bartblaze/Yara-rules" - }, - "count": 37, - "total_related": 100000, - "prevalence": 0.00037 - }, - { - "value": { - "id": "0122a7f913|Windows_API_Function", - "ruleset_id": "0122a7f913", - "ruleset_name": "Windows_API_Function", - "rule_name": "Windows_API_Function", - "source": "https://github.com/InQuest/yara-rules-vt" - }, - "count": 23, - "total_related": 100000, - "prevalence": 0.00023 - }, - { - "value": { - "id": "002bb473a9|MSOffice_in_LNK", - "ruleset_id": "002bb473a9", - "ruleset_name": "LNK_Ruleset", - "rule_name": "MSOffice_in_LNK", - "source": "https://github.com/bartblaze/Yara-rules" - }, - "count": 20, - "total_related": 100000, - "prevalence": 0.0002 - }, - { - "value": { - "id": "002bb473a9|PDF_in_LNK", - "ruleset_id": "002bb473a9", - "ruleset_name": "LNK_Ruleset", - "rule_name": "PDF_in_LNK", - "source": "https://github.com/bartblaze/Yara-rules" - }, - "count": 16, - "total_related": 100000, - "prevalence": 0.00016 - }, - { - "value": { - "id": "002bb473a9|Script_in_LNK", - "ruleset_id": "002bb473a9", - "ruleset_name": "LNK_Ruleset", - "rule_name": "Script_in_LNK", - "source": "https://github.com/bartblaze/Yara-rules" - }, - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": { - "id": "0122bae1e9|Base64_Encoded_URL", - "ruleset_id": "0122bae1e9", - "ruleset_name": "Base64_Encoded_URL", - "rule_name": "Base64_Encoded_URL", - "source": "https://github.com/InQuest/yara-rules-vt" - }, - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": { - "id": "00054b746e|SUSP_XORed_MSDOS_Stub_Message", - "ruleset_id": "00054b746e", - "ruleset_name": "gen_xor_hunting", - "rule_name": "SUSP_XORed_MSDOS_Stub_Message", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 8, - "total_related": 100000, - "prevalence": 8e-5 - }, - { - "value": { - "id": "002bb473a9|Archive_in_LNK", - "ruleset_id": "002bb473a9", - "ruleset_name": "LNK_Ruleset", - "rule_name": "Archive_in_LNK", - "source": "https://github.com/bartblaze/Yara-rules" - }, - "count": 8, - "total_related": 100000, - "prevalence": 8e-5 - }, - { - "value": { - "id": "01234b2177|Office_Document_with_VBA_Project", - "ruleset_id": "01234b2177", - "ruleset_name": "Office_Document_with_VBA_Project", - "rule_name": "Office_Document_with_VBA_Project", - "source": "https://github.com/InQuest/yara-rules-vt" - }, - "count": 8, - "total_related": 100000, - "prevalence": 8e-5 - }, - { - "value": { - "id": "0121ae37cc|Adobe_XMP_Identifier", - "ruleset_id": "0121ae37cc", - "ruleset_name": "Adobe_XMP_Identifier", - "rule_name": "Adobe_XMP_Identifier", - "source": "https://github.com/InQuest/yara-rules-vt" - }, - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": { - "id": "0009c8b3d6|SUSP_Excel4Macro_AutoOpen", - "ruleset_id": "0009c8b3d6", - "ruleset_name": "gen_Excel4Macro_Sharpshooter", - "rule_name": "SUSP_Excel4Macro_AutoOpen", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "000e46d4d8|SUSP_obfuscated_JS_obfuscatorio", - "ruleset_id": "000e46d4d8", - "ruleset_name": "gen_susp_js_obfuscatorio", - "rule_name": "SUSP_obfuscated_JS_obfuscatorio", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "00b9150bc4|SparkRAT", - "ruleset_id": "00b9150bc4", - "ruleset_name": "SparkRAT", - "rule_name": "SparkRAT", - "source": "https://github.com/kevoreilly/CAPEv2" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "0121cb9684|Base64_Encoded_Powershell_Directives", - "ruleset_id": "0121cb9684", - "ruleset_name": "Base64_Encoded_Powershell_Directives", - "rule_name": "Base64_Encoded_Powershell_Directives", - "source": "https://github.com/InQuest/yara-rules-vt" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "0124227417|Adobe_Type_1_Font", - "ruleset_id": "0124227417", - "ruleset_name": "Adobe_Type_1_Font", - "rule_name": "Adobe_Type_1_Font", - "source": "https://github.com/InQuest/yara-rules-vt" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "0128bcac9e|Microsoft_Excel_Hidden_Macrosheet", - "ruleset_id": "0128bcac9e", - "ruleset_name": "Microsoft_Excel_Hidden_Macrosheet", - "rule_name": "Microsoft_Excel_Hidden_Macrosheet", - "source": "https://github.com/InQuest/yara-rules-vt" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "embedded_domains": [ - { - "value": "commoncome.online", - "count": 6, - "total_related": 8, - "prevalence": 0.75 - }, - { - "value": "web.commoncome.online", - "count": 6, - "total_related": 8, - "prevalence": 0.75 - }, - { - "value": "datacentre.center", - "count": 6, - "total_related": 10, - "prevalence": 0.6 - }, - { - "value": "www.datacentre.center", - "count": 6, - "total_related": 11, - "prevalence": 0.5454545454545454 - }, - { - "value": "googlesheet.info", - "count": 6, - "total_related": 33, - "prevalence": 0.18181818181818182 - }, - { - "value": "www.googlesheet.info", - "count": 6, - "total_related": 51, - "prevalence": 0.11764705882352941 - }, - { - "value": "bloomcloud.org", - "count": 5, - "total_related": 18, - "prevalence": 0.2777777777777778 - }, - { - "value": "share.bloomcloud.org", - "count": 5, - "total_related": 18, - "prevalence": 0.2777777777777778 - }, - { - "value": "googlesheetpage.org", - "count": 5, - "total_related": 30, - "prevalence": 0.16666666666666666 - }, - { - "value": "fclouddown.co", - "count": 5, - "total_related": 77, - "prevalence": 0.06493506493506493 - }, - { - "value": "file.fclouddown.co", - "count": 5, - "total_related": 86, - "prevalence": 0.05813953488372093 - }, - { - "value": "work.gd", - "count": 5, - "total_related": 330, - "prevalence": 0.015151515151515152 - }, - { - "value": "newcoming.cfd", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "welcome.newcoming.cfd", - "count": 4, - "total_related": 5, - "prevalence": 0.8 - }, - { - "value": "buy2x.com", - "count": 4, - "total_related": 8, - "prevalence": 0.5 - }, - { - "value": "wpsonline.co", - "count": 4, - "total_related": 10, - "prevalence": 0.4 - }, - { - "value": "venturelabo.co", - "count": 4, - "total_related": 28, - "prevalence": 0.14285714285714285 - }, - { - "value": "isosecurity.xyz", - "count": 4, - "total_related": 65, - "prevalence": 0.06153846153846154 - }, - { - "value": "us06st1.zoom.us", - "count": 4, - "total_related": 2252, - "prevalence": 0.0017761989342806395 - }, - { - "value": "tauri.app", - "count": 4, - "total_related": 27649, - "prevalence": 0.0001446706933342978 - }, - { - "value": "spirtblockchain.com", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "wps.wpsonline.co", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "autodynamics.work.gd", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "open.googlesheetpage.org", - "count": 3, - "total_related": 6, - "prevalence": 0.5 - }, - { - "value": "blockverify.com", - "count": 3, - "total_related": 9, - "prevalence": 0.3333333333333333 - }, - { - "value": "www.blockverify.com", - "count": 3, - "total_related": 9, - "prevalence": 0.3333333333333333 - }, - { - "value": "www.docusign.agency", - "count": 3, - "total_related": 12, - "prevalence": 0.25 - }, - { - "value": "docusign.agency", - "count": 3, - "total_related": 13, - "prevalence": 0.23076923076923078 - }, - { - "value": "privacysign.org", - "count": 3, - "total_related": 25, - "prevalence": 0.12 - }, - { - "value": "www.privacysign.org", - "count": 3, - "total_related": 37, - "prevalence": 0.08108108108108109 - }, - { - "value": "filesaves.cloud", - "count": 3, - "total_related": 38, - "prevalence": 0.07894736842105263 - }, - { - "value": "doc.filesaves.cloud", - "count": 3, - "total_related": 39, - "prevalence": 0.07692307692307693 - }, - { - "value": "8marketcap.com", - "count": 3, - "total_related": 63, - "prevalence": 0.047619047619047616 - }, - { - "value": "documentprotect.live", - "count": 3, - "total_related": 63, - "prevalence": 0.047619047619047616 - }, - { - "value": "source.zoom.us", - "count": 3, - "total_related": 590, - "prevalence": 0.005084745762711864 - }, - { - "value": "messari.io", - "count": 3, - "total_related": 1110, - "prevalence": 0.002702702702702703 - }, - { - "value": "www.wolfram.com", - "count": 3, - "total_related": 29235, - "prevalence": 0.0001026167265264238 - }, - { - "value": "niso.org", - "count": 3, - "total_related": 89659, - "prevalence": 3.346010997222811e-5 - }, - { - "value": "doc.gdocshare.one", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "amctradinggroup.biz", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "cloud.dnx.capital", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "abiesvc.jp.net", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "doc-share.cloud", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "docs.azureword.com", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "autoserverupdate.line.pm", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "dnx.capital", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "documentprotect.pro", - "count": 2, - "total_related": 8, - "prevalence": 0.25 - }, - { - "value": "docstream.online", - "count": 2, - "total_related": 25, - "prevalence": 0.08 - }, - { - "value": "capmarketreport.com", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "azure-drive.com", - "count": 2, - "total_related": 34, - "prevalence": 0.058823529411764705 - }, - { - "value": "doc.venturelabo.co", - "count": 2, - "total_related": 40, - "prevalence": 0.05 - }, - { - "value": "azureword.com", - "count": 2, - "total_related": 48, - "prevalence": 0.041666666666666664 - }, - { - "value": "document.fastercapital.cc", - "count": 2, - "total_related": 50, - "prevalence": 0.04 - }, - { - "value": "coindesk.com", - "count": 2, - "total_related": 25456, - "prevalence": 7.856693903205531e-5 - }, - { - "value": "bit.ly", - "count": 88, - "total_related": 100000, - "prevalence": 0.00088 - }, - { - "value": "openxmlformats.org", - "count": 65, - "total_related": 100000, - "prevalence": 0.00065 - }, - { - "value": "schemas.openxmlformats.org", - "count": 65, - "total_related": 100000, - "prevalence": 0.00065 - }, - { - "value": "apple.com", - "count": 37, - "total_related": 100000, - "prevalence": 0.00037 - }, - { - "value": "www.apple.com", - "count": 37, - "total_related": 100000, - "prevalence": 0.00037 - }, - { - "value": "purl.org", - "count": 23, - "total_related": 100000, - "prevalence": 0.00023 - }, - { - "value": "crl.apple.com", - "count": 15, - "total_related": 100000, - "prevalence": 0.00015 - }, - { - "value": "ocsp.apple.com", - "count": 15, - "total_related": 100000, - "prevalence": 0.00015 - }, - { - "value": "docs.rs", - "count": 14, - "total_related": 100000, - "prevalence": 0.00014 - }, - { - "value": "github.com", - "count": 14, - "total_related": 100000, - "prevalence": 0.00014 - }, - { - "value": "microsoft.com", - "count": 14, - "total_related": 100000, - "prevalence": 0.00014 - }, - { - "value": "schemas.microsoft.com", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": "iec.ch", - "count": 8, - "total_related": 100000, - "prevalence": 8e-5 - }, - { - "value": "www.iec.ch", - "count": 8, - "total_related": 100000, - "prevalence": 8e-5 - }, - { - "value": "cacerts.digicert.com", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "crl3.digicert.com", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "digicert.com", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "support.microsoft.com", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "www.style", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "www.world", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "zoom.us", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "adobe.com", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "creativecommons.org", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "crossmark.crossref.org", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "crossref.org", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "doi.org", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "mdpi.com", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "ns.adobe.com", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "prismstandard.org", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "researchgate.net", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "tandfonline.com", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "w3.org", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "wolfram.com", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "www.mdpi.com", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "www.niso.org", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "www.researchgate.net", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "www.tandfonline.com", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "www.w3.org", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "apache.org", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "cdn.jsdelivr.net", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "comodoca.com", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "crl.comodoca.com", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "crl.sectigo.com", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "crl4.digicert.com", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "crt.sectigo.com", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "day.com", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - } - ], - "embedded_ips": [ - { - "value": "125.0.0.0", - "count": 6, - "total_related": 17552, - "prevalence": 0.00034184138559708297 - }, - { - "value": "134.193.128.7", - "count": 5, - "total_related": 9, - "prevalence": 0.5555555555555556 - }, - { - "value": "::", - "count": 4, - "total_related": 2162, - "prevalence": 0.0018501387604070306 - }, - { - "value": "95.179.235.55", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "10.19.12.185", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "149.28.162.113", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "::f", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "152.89.247.236", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "1::2", - "count": 1, - "total_related": 19802, - "prevalence": 5.04999495000505e-5 - }, - { - "value": "24.0.0.22", - "count": 1, - "total_related": 44697, - "prevalence": 2.237286618788733e-5 - }, - { - "value": "17.7.0.0", - "count": 1, - "total_related": 46808, - "prevalence": 2.136386942403008e-5 - }, - { - "value": "24.0.0.1", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "embedded_urls": [ - { - "value": "http://schemas.openxmlformats.org/jpg", - "count": 6, - "total_related": 11, - "prevalence": 0.5454545454545454 - }, - { - "value": "https://support.microsoft.com/imgs", - "count": 4, - "total_related": 6, - "prevalence": 0.6666666666666666 - }, - { - "value": "ws://web.commoncome.online:8080/clientrust-websocketsrc/main.rsEj7bx@YRG2uUhya", - "count": 4, - "total_related": 6, - "prevalence": 0.6666666666666666 - }, - { - "value": "http://schemas.microsoft.com/office/2006/keyEncryptor/certificate", - "count": 4, - "total_related": 12556, - "prevalence": 0.00031857279388340236 - }, - { - "value": "http://schemas.microsoft.com/office/2006/keyEncryptor/password", - "count": 4, - "total_related": 20898, - "prevalence": 0.00019140587616039813 - }, - { - "value": "http://schemas.microsoft.com/office/2006/encryption", - "count": 4, - "total_related": 21289, - "prevalence": 0.0001878904598619005 - }, - { - "value": "http://spirtblockchain.com/PRw8DBaZTPN/jMEaUwfQBd/SwW1t7VQzg/CSBM7BiRDI/UDMurOYsxo/G5A==", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "http://crossmark.crossref.org/dialog/?doi=10.1080/23322039.2022.2087287&domain=pdf", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "http://crossmark.crossref.org/dialog/?doi=10.1080/23322039.2022.2087287&domain=pdf&date_stamp=2022-06-14", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "https://8marketcap.com/metals", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "https://doi.org/10.1007/s10479-021-04000-8", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "https://doi.org/10.1007/s40822-021-00180-7", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "https://doi.org/10.1016/j.qref.2021.02.010", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "https://doi.org/10.1051/e3sconf/202021801050", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "https://doi.org/10.1080/23322039.2022.2087287", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "https://doi.org/10.1111/manc.12352", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "https://doi.org/10.4314/JFAS.V9I3S.61", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "https://doi.org/10.7717/peerj-cs.413", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "https://messari.io/asset/bitcoin/historical", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "https://www.mdpi.com/2227-7390/9/20/2567", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "https://www.researchgate.net/?enrichId=rgreq-570a1d14bdf14e34708cf5206fc22a8f-XXX&enrichSource=Y292ZXJQYWdlOzM2MTMxNzA2ODtBUzoxMTcyMDQ4NTgzODg0ODA3QDE2NTY0NDk1NjY0MTA=&el=1_x_1&_esc=publicationCoverPdf", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "https://www.researchgate.net/institution/University-of-Stavanger-UiS?enrichId=rgreq-570a1d14bdf14e34708cf5206fc22a8f-XXX&enrichSource=Y292ZXJQYWdlOzM2MTMxNzA2ODtBUzoxMTcyMDQ4NTgzODg0ODA3QDE2NTY0NDk1NjY0MTA=&el=1_x_6&_esc=publicationCoverPdf", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "https://www.researchgate.net/profile/Guizhou-Wang?enrichId=rgreq-570a1d14bdf14e34708cf5206fc22a8f-XXX&enrichSource=Y292ZXJQYWdlOzM2MTMxNzA2ODtBUzoxMTcyMDQ4NTgzODg0ODA3QDE2NTY0NDk1NjY0MTA=&el=1_x_4&_esc=publicationCoverPdf", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "https://doi.org/10.1007/s10479-019-03321-z", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "https://doi.org/10.1007/s11408-019-00332-5", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "https://doi.org/10.1016/j.physa.2018.06.131", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "https://doi.org/10.1063/5.0002759", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "https://doi.org/10.1186/s40854-020-0174-9", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "https://doi.org/10.3390/jrfm13020023", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "https://doi.org/10.2139/ssrn.3078248", - "count": 3, - "total_related": 6, - "prevalence": 0.5 - }, - { - "value": "https://doi.org/10.1007/978-981-15-7106-0_54", - "count": 3, - "total_related": 7, - "prevalence": 0.42857142857142855 - }, - { - "value": "https://doi.org/10.1007/s00521-020-05129-6", - "count": 3, - "total_related": 7, - "prevalence": 0.42857142857142855 - }, - { - "value": "https://doi.org/10.1016/j.jfds.2021.03.001", - "count": 3, - "total_related": 7, - "prevalence": 0.42857142857142855 - }, - { - "value": "https://doi.org/10.3390/forecast3020024", - "count": 3, - "total_related": 7, - "prevalence": 0.42857142857142855 - }, - { - "value": "https://doi.org/10.3390/math7100898", - "count": 3, - "total_related": 8, - "prevalence": 0.375 - }, - { - "value": "https://doi.org/10.1016/j.cam.2019.112395", - "count": 3, - "total_related": 12, - "prevalence": 0.25 - }, - { - "value": "https://doi.org/10.1016/j.jisa.2020.102583", - "count": 3, - "total_related": 13, - "prevalence": 0.23076923076923078 - }, - { - "value": "https://us06st1.zoom.us/web_client/4l6uze9/image/zoom.ico", - "count": 3, - "total_related": 13, - "prevalence": 0.23076923076923078 - }, - { - "value": "https://doi.org/10.1093/jxb/10.2.290", - "count": 3, - "total_related": 19, - "prevalence": 0.15789473684210525 - }, - { - "value": "https://doi.org/10.1098/rstl.1825.0026", - "count": 3, - "total_related": 26, - "prevalence": 0.11538461538461539 - }, - { - "value": "http://www.wolfram.com/", - "count": 3, - "total_related": 2017, - "prevalence": 0.001487357461576599 - }, - { - "value": "https://docs.rs/tauri/1/tauri/scope/struct.IpcScope.html", - "count": 10, - "total_related": 33757, - "prevalence": 0.0006628689031463113 - }, - { - "value": "https://tauri.app/v1/api/config/", - "count": 10, - "total_related": 34154, - "prevalence": 0.000650220331986387 - }, - { - "value": "https://github.com/tauri-apps/tauri/issues/8306", - "count": 10, - "total_related": 38964, - "prevalence": 0.0005345481050568493 - }, - { - "value": "https://tauri.app/docs/api/config", - "count": 10, - "total_related": 42538, - "prevalence": 0.0005509152671538753 - }, - { - "value": "https://github.com/tauri-apps/tauri/issues/2549", - "count": 10, - "total_related": 53941, - "prevalence": 0.00041419164864720957 - }, - { - "value": "http://prismstandard.org/namespaces/basic/3.0/", - "count": 3, - "total_related": 62410, - "prevalence": 4.8069219676333924e-5 - }, - { - "value": "http://www.niso.org/schemas/jav/1.0/", - "count": 3, - "total_related": 85220, - "prevalence": 3.520300398967379e-5 - }, - { - "value": "http://schemas.openxmlformats.org/package/2006/relationships", - "count": 33, - "total_related": 100000, - "prevalence": 0.00033 - }, - { - "value": "http://www.apple.com/DTDs/PropertyList-1.0.dtd", - "count": 26, - "total_related": 100000, - "prevalence": 0.00026 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/relationships/attachedTemplate", - "count": 24, - "total_related": 100000, - "prevalence": 0.00024 - }, - { - "value": "http://purl.org/dc/elements/1.1/", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "http://schemas.openxmlformats.org/drawingml/2006/main", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "http://schemas.openxmlformats.org/markup-compatibility/2006", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/relationships", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "http://schemas.openxmlformats.org/wordprocessingml/2006/main", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/math", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "http://schemas.openxmlformats.org/schemaLibrary/2006/main", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "https://docs.rs/getrandom", - "count": 21, - "total_related": 200000, - "prevalence": 0.00021 - }, - { - "value": "http://crl.apple.com/root.crl0", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": "http://crl.apple.com/timestamp.crl0", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": "http://www.apple.com/appleca0", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": "http://www.apple.com/certificateauthority/0", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": "https://www.apple.com/appleca/0", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": "http://ocsp.apple.com/ocsp03-devid060", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/bibliography", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/customXml", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "http://purl.org/dc/dcmitype/", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "http://purl.org/dc/terms/", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/extended-properties", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "http://schemas.openxmlformats.org/package/2006/content-types", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "http://schemas.openxmlformats.org/package/2006/metadata/core-properties", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "http://schemas.openxmlformats.org/drawingml/2006/picture", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "http://www.iec.ch/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "http://cacerts.digicert.com/DigiCertAssuredIDRootCA.crt0E", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "http://cacerts.digicert.com/DigiCertTrustedG4RSA4096SHA256TimeStampingCA.crt0", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "http://cacerts.digicert.com/DigiCertTrustedRootG4.crt0C", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "http://crl3.digicert.com/DigiCertAssuredIDRootCA.crl0", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "http://crl3.digicert.com/DigiCertTrustedG4RSA4096SHA256TimeStampingCA.crl0", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "http://crl3.digicert.com/DigiCertTrustedRootG4.crl0", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "http://creativecommons.org/licenses/by/4.0/", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "http://crossref.org/crossmark/1.0/", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "http://51.79.133.76:8000/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://buy2x.com/OcMySY5QNkY/ABcTDInKWw/4SqSYtx+/EKfP7saoiP/BcA==", - "count": 9, - "total_related": 11, - "prevalence": 0.8181818181818182 - }, - { - "value": "http://matuaner.com/kgtjixwidu", - "count": 5, - "total_related": 6, - "prevalence": 0.8333333333333334 - }, - { - "value": "http://matuaner.com/kgtjixwiduCould", - "count": 5, - "total_related": 6, - "prevalence": 0.8333333333333334 - }, - { - "value": "https://substrate.office.com/search/api/v2/init", - "count": 4, - "total_related": 68758, - "prevalence": 5.81750487216033e-5 - }, - { - "value": "https://outlook.office.com/", - "count": 4, - "total_related": 85838, - "prevalence": 4.659940818751602e-5 - }, - { - "value": "http://weather.service.msn.com/data.aspx", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://analysis.windows.net/powerbi/api", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://apc.learningtools.onenote.com/learningtoolsapi/v2.0/getfreeformspeech", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://api.aadrm.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://api.addins.omex.office.net/api/addins/search", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://api.addins.omex.office.net/appinfo/query", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://api.addins.store.officeppe.com/addinstemplate", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://api.diagnosticssdf.office.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://api.diagnosticssdf.office.com/v2/feedback", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://api.microsoftstream.com/api/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://api.office.net/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://api.powerbi.com/v1.0/myorg/groups", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://apis.live.net/v5.0/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://asgsmsproxyapi.azurewebsites.net/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://autodiscover-s.outlook.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://autodiscover-s.outlook.com/autodiscover/autodiscover.xml", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://clients.config.office.net/user/v1.0/ios", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://clients.config.office.net/user/v1.0/tenantassociationkey", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://cloudfiles.onenote.com/upload.aspx", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://consent.config.office.com/consentcheckin/v1.0/consents", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://cortana.ai/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://cr.office.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://d.docs.live.net/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://dataservice.o365filtering.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://dataservice.protection.outlook.com/PsorWebService/v1/ClientSyncFile/MipPolicies", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://dev.virtualearth.net/REST/V1/GeospatialEndpoint/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://dev0-api.acompli.net/autodetect", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://entitlement.diagnosticssdf.office.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://eur.learningtools.onenote.com/learningtoolsapi/v2.0/getfreeformspeech", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://globaldisco.crm.dynamics.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://graph.ppe.windows.net/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://graph.windows.net/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://incidents.diagnostics.office.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://incidents.diagnosticssdf.office.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://insertmedia.bing.office.net/images/hosted?host=office&adlt=strict&hostType=Immersive", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://insertmedia.bing.office.net/images/officeonlinecontent/browse?cp=Flickr", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://insertmedia.bing.office.net/odc/insertmedia", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://learningtools.onenote.com/learningtoolsapi/v2.0/Getvoices", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://login.microsoftonline.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47/oauth2/authorize", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://lookup.onenote.com/lookup/geolocation/v1", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://make.powerautomate.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://management.azure.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://messaging.engagement.office.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://messaging.lifecycle.office.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://my.microsoftpersonalcontent.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://nam.learningtools.onenote.com/learningtoolsapi/v2.0/getfreeformspeech", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://ofcrecsvcapi-int.azurewebsites.net/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://officeci.azurewebsites.net/api/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://officemobile.uservoice.com/forums/929800-office-app-ios-and-ipad-asks", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://officesetup.getmicrosoftkey.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://onedrive.live.com/about/download/?windows10SyncClientInstalled=false", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://outlook.office.com/autosuggest/api/v1/init?cvid=", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://outlook.office365.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://outlook.office365.com/api/v1.0/me/Activities", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://outlook.office365.com/autodiscover/autodiscover.json", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://outlook.office365.com/connectors", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://pf.directory.live.com/profile/mine/System.ShortCircuitProfile.json", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://portal.office.com/account/?ref=ClientMeControl", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://powerlift-frontdesk.acompli.net/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://powerlift.acompli.net/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://powerpoint.uservoice.com/forums/288952-powerpoint-for-ipad-iphone-ios", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://prod-global-autodetect.acompli.net/autodetect", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://pushchannel.1drv.ms/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://res.getmicrosoftkey.com/api/redemptionevents", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://rpsticket.partnerservices.getmicrosoftkey.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://shell.suite.office.com:1443/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://sr.outlook.office.net/ws/speech/recognize/assistant/work", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://store.office.cn/addinstemplate", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://substrate.office.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://syncservice.protection.outlook.com/PolicySync/PolicySync.svc/SyncFile", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://useraudit.o365auditrealtimeingestion.manage.office.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://web.microsoftstream.com/video/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://webdir.online.lync.com/autodiscover/autodiscoverservice.svc/root/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://word.uservoice.com/forums/304948-word-for-ipad-iphone-ios", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://www.odwebp.svc.ms/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://www.yammer.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://clients.config.office.net/c2r/v1.0/DeltaAdvisory", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "https://clients.config.office.net/user/v1.0/android/policies", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "https://edge.skype.com/registrar/prod", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "https://edge.skype.com/rps", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "https://entitlement.diagnostics.office.com/", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "https://ic3.teams.office.com/", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "https://messagebroker.mobile.m365.svc.cloud.microsoft/", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "https://officepyservice.office.net/service.functionality", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "https://otelrules.svc.static.microsoft/", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "https://pf.directory.live.com/profile/mine/WLX.Profiles.IC.json", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "https://safelinks.protection.outlook.com/api/GetPolicy", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "https://tasks.office.com/", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - } - ], - "mutexes_created": [ - { - "value": "Local\\c:!users!admin!appdata!roaming!microsoft!windows!iecompatcache!", - "count": 4, - "total_related": 22128, - "prevalence": 0.00018076644974692697 - }, - { - "value": "Local\\c:!users!admin!appdata!roaming!microsoft!windows!privacie!", - "count": 4, - "total_related": 57964, - "prevalence": 6.900835001035126e-5 - }, - { - "value": "Local\\!IECompat!Mutex", - "count": 4, - "total_related": 88829, - "prevalence": 4.503033919102996e-5 - }, - { - "value": "Groove:PathMutex:[PmhPKkoAhcO8nWfbySVpRNivfOw=]", - "count": 3, - "total_related": 1481, - "prevalence": 0.002025658338960162 - }, - { - "value": "Local\\Microsoft_Office_16CSI_WDW:{00005173-0666-0667-2166-520100000000}", - "count": 3, - "total_related": 2338, - "prevalence": 0.0012831479897348161 - }, - { - "value": "Local\\Microsoft_Office_16Csi_CTCentralTableIniLock", - "count": 3, - "total_related": 2992, - "prevalence": 0.001002673796791444 - }, - { - "value": "Local\\Microsoft_Office_16Csi_CentralTableDatabaseInitialization", - "count": 3, - "total_related": 3065, - "prevalence": 0.0009787928221859706 - }, - { - "value": "Local\\Microsoft_Office_16Csi-FaultManagement", - "count": 3, - "total_related": 3206, - "prevalence": 0.0009357454772301934 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\Microsoft_Office_16Csi_TableRuntimeBucketsLock:{00005173-0666-0667-78E3-4E01000A252F}", - "count": 3, - "total_related": 17085, - "prevalence": 0.0001755926251097454 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\Microsoft_Office_16_MsoSync_Closing", - "count": 3, - "total_related": 18078, - "prevalence": 0.00016594756057085962 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\Microsoft_Office_16_MsoSync_Running", - "count": 3, - "total_related": 18078, - "prevalence": 0.00016594756057085962 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\Microsoft_Office_16Csi_FileCacheMigrationLock", - "count": 3, - "total_related": 18099, - "prevalence": 0.0001657550140891762 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\Microsoft_Office_16CSI_WDW:{00005173-0666-0667-78E3-4E01000A252F}", - "count": 3, - "total_related": 18819, - "prevalence": 0.00015941335883947074 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\Microsoft_Office_16Csi_CTCentralTableIniLock", - "count": 3, - "total_related": 19246, - "prevalence": 0.0001558765457757456 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\Microsoft_Office_16Csi_CentralTableDatabaseInitialization", - "count": 3, - "total_related": 19246, - "prevalence": 0.0001558765457757456 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\Microsoft_Office_16Csi-FaultManagement", - "count": 3, - "total_related": 20555, - "prevalence": 0.0001459498905375821 - }, - { - "value": "Local\\Microsoft_Office_16Csi_TableRuntimeBucketsLock:{00005173-0666-0667-2166-520100000000}", - "count": 2, - "total_related": 1443, - "prevalence": 0.001386001386001386 - }, - { - "value": "Local\\Microsoft_Office_16_MsoSync_Closing", - "count": 2, - "total_related": 2133, - "prevalence": 0.0009376465072667605 - }, - { - "value": "Local\\Microsoft_Office_16_MsoSync_Running", - "count": 2, - "total_related": 2133, - "prevalence": 0.0009376465072667605 - }, - { - "value": "Local\\Microsoft_Office_16Csi_FileCacheMigrationLock", - "count": 2, - "total_related": 2214, - "prevalence": 0.0009033423667570009 - }, - { - "value": "2AC1A572DB6944B0A65C38C4140AF2F442874506134", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2AC1A572DB6944B0A65C38C4140AF2F46fc6FB86134", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2AC1A572DB6944B0A65C38C4140AF2F46fc72F97468", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2AC1A572DB6944B0A65C38C4140AF2F46fc72F97490", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2AC1A572DB6944B0A65C38C4140AF2F46fc72F974A4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2AC1A572DB6944B0A65C38C4140AF2F46fc72F974CC", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2AC1A572DB6944B0A65C38C4140AF2F46fc72F9758C", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2AC1A572DB6944B0A65C38C4140AF2F46fc72F976DC", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2AC1A572DB6944B0A65C38C4140AF2F442873027468", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2AC1A572DB6944B0A65C38C4140AF2F442873027490", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2AC1A572DB6944B0A65C38C4140AF2F4428730274A4", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2AC1A572DB6944B0A65C38C4140AF2F4428730274CC", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2AC1A572DB6944B0A65C38C4140AF2F44287302758C", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2AC1A572DB6944B0A65C38C4140AF2F4428730276DC", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2AC1A572DB6944B0A65C38C4140AF2F442873027710", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2AC1A572DB6944B0A65C38C4140AF2F442873027750", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2AC1A572DB6944B0A65C38C4140AF2F442873027828", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2AC1A572DB6944B0A65C38C4140AF2F4428730278B0", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2AC1A572DB6944B0A65C38C4140AF2F44587167310C", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\ZonesCacheCounterMutex", - "count": 34, - "total_related": 100000, - "prevalence": 0.00034 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\ZonesLockedCacheCounterMutex", - "count": 34, - "total_related": 100000, - "prevalence": 0.00034 - }, - { - "value": "IESQMMUTEX_0_208", - "count": 31, - "total_related": 100000, - "prevalence": 0.00031 - }, - { - "value": "Local\\ZonesCacheCounterMutex", - "count": 31, - "total_related": 100000, - "prevalence": 0.00031 - }, - { - "value": "Local\\ZonesLockedCacheCounterMutex", - "count": 31, - "total_related": 100000, - "prevalence": 0.00031 - }, - { - "value": "Local\\!IETld!Mutex", - "count": 26, - "total_related": 100000, - "prevalence": 0.00026 - }, - { - "value": "Local\\WininetStartupMutex", - "count": 24, - "total_related": 100000, - "prevalence": 0.00024 - }, - { - "value": "Local\\WininetConnectionMutex", - "count": 23, - "total_related": 100000, - "prevalence": 0.00023 - }, - { - "value": "Local\\WininetProxyRegistryMutex", - "count": 23, - "total_related": 100000, - "prevalence": 0.00023 - }, - { - "value": "Local\\_!MSFTHISTORY!_", - "count": 22, - "total_related": 100000, - "prevalence": 0.00022 - }, - { - "value": "Local\\c:!users!admin!appdata!local!microsoft!windows!temporary internet files!content.ie5!", - "count": 22, - "total_related": 100000, - "prevalence": 0.00022 - }, - { - "value": "Local\\c:!users!admin!appdata!local!microsoft!windows!history!history.ie5!", - "count": 21, - "total_related": 100000, - "prevalence": 0.00021 - }, - { - "value": "Local\\c:!users!admin!appdata!roaming!microsoft!windows!cookies!", - "count": 21, - "total_related": 100000, - "prevalence": 0.00021 - }, - { - "value": "Local\\ZoneAttributeCacheCounterMutex", - "count": 20, - "total_related": 100000, - "prevalence": 0.0002 - }, - { - "value": "Local\\ZonesCounterMutex", - "count": 17, - "total_related": 100000, - "prevalence": 0.00017 - }, - { - "value": "Local\\c:!users!admin!appdata!roaming!microsoft!windows!ietldcache!", - "count": 17, - "total_related": 100000, - "prevalence": 0.00017 - }, - { - "value": "!IECompat!Mutex", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "RasPbFile", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "Global\\MTX_MSO_AdHoc1_S-1-5-21-1547548985-192504236-2982455695-500", - "count": 8, - "total_related": 100000, - "prevalence": 8e-5 - }, - { - "value": "Global\\MTX_MSO_Formal1_S-1-5-21-1547548985-192504236-2982455695-500", - "count": 8, - "total_related": 100000, - "prevalence": 8e-5 - }, - { - "value": "Local\\!BrowserEmulation!SharedMemory!Mutex", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\DBWinMutex", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Global\\552FFA80-3393-423d-8671-7BA046BB5906", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\Acrobat Instance Mutex", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\MSIMGSIZECacheMutex", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\com.adobe.acrobat.rna.RdrCefBrowserLock.DC", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "CicLoadWinStaWinSta0", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "Groove.Mutex.WebServices.Status", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "Groove:PathMutex:QdK2MSVHeUj1majjaFupyLiUjYw=", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "Groove:PathMutex:h1kwmeaFCOs5YDt3Ur7pBe3iRlE=", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "Local\\F99C425F-9135-43ed-BD7D-396DE488DC53_Office16", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "Local\\Feed Eventing Shared Memory Mutex S-1-5-21-870151485-863566166-2146164720-1000", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "Local\\MSCTF.CtfMonitorInstMutexDefault1", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "Local\\c:!users!admin!appdata!local!microsoft!feeds cache!", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "SmartScreen_UrsCacheMutex_2CEDBFBC-DBA8-43AA-B1FD-CC8E6316E3E2High_S-1-5-21-870151485-863566166-2146164720-1000", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Global\\MTX_MSO_AdHoc1_S-1-5-21-1015118539-3749460369-599379286-1001", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Global\\MTX_MSO_Formal1_S-1-5-21-1015118539-3749460369-599379286-1001", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\!PrivacIE!SharedMemory!Mutex", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\F99C425F-9135-43ed-BD7D-396DE488DC53_Office16", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\ZoneAttributeCacheCounterMutex", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "Global\\552FFA80-3393-423d-8671-7BA046BB5906", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "Local\\2BF388D5-6F8C-40A0-A7EE-996D005C4E14_Office16", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "Local\\Acrobat Instance Mutex", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "Local\\Feed Arbitration Shared Memory Mutex [ User : S-1-5-21-870151485-863566166-2146164720-1000 ]", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "Local\\Feeds Store Mutex S-1-5-21-870151485-863566166-2146164720-1000", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "SmartScreen_ClientId_Mutex", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Global\\SyncRootManager", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "Acrobat Instance Mutex", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "DBWinMutex", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "Local\\MSCTF.Asm.MutexDefault1", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "Local\\c:!users!administrator!appdata!roaming!microsoft!windows!ietldcache!", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\2BF388D5-6F8C-40A0-A7EE-996D005C4E14_Office16", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\SessionImmersiveColorMutex", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "5CAC3FAB-87F0-4750-984D-D50144543427Office-VER16", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "Global\\AmiProviderMutex_InventoryApplicationFile", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "Global\\MTX_MSO_AdHoc1_S-1-5-21-4005801669-2598574594-602355426-1001", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "Global\\MTX_MSO_Formal1_S-1-5-21-4005801669-2598574594-602355426-1001", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "Global\\_MSIExecute", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "Local\\SessionImmersiveColorMutex", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\ChromeProcessSingletonStartup!", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\{A946A6A9-917E-4949-B9BC-6BADA8C7FD63}", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - } - ], - "mutexes_opened": [ - { - "value": "Global\\MsoCsi:GC:C:/Users/Administrator/AppData/Local/Microsoft/Office/14.0/OfficeFileCache/LocalCacheFileEditManager/FSF-{0E1EEE64-E8C6-4E2A-9759-63CF07FD8988}.FSF", - "count": 5, - "total_related": 1149, - "prevalence": 0.004351610095735422 - }, - { - "value": "{BDD98A3C-B57F-4199-B92A-95A54AA1132E}-CEE3E977", - "count": 5, - "total_related": 1149, - "prevalence": 0.004351610095735422 - }, - { - "value": "{BDD98A3C-B57F-4199-B92A-95A54AA1132E}-DD9D99D", - "count": 5, - "total_related": 1149, - "prevalence": 0.004351610095735422 - }, - { - "value": "Global\\MsoCsi:GC:C:/Users/Administrator/AppData/Local/Microsoft/Office/14.0/OfficeFileCache/FSF-CTBL.FSF", - "count": 5, - "total_related": 1190, - "prevalence": 0.004201680672268907 - }, - { - "value": "{BDD98A3C-B57F-4199-B92A-95A54AA1132E}-741507CB", - "count": 5, - "total_related": 1190, - "prevalence": 0.004201680672268907 - }, - { - "value": "{BDD98A3C-B57F-4199-B92A-95A54AA1132E}-4DFEAA73", - "count": 5, - "total_related": 1193, - "prevalence": 0.004191114836546521 - }, - { - "value": "Local\\c:!users!admin!appdata!roaming!microsoft!windows!iecompatcache!", - "count": 4, - "total_related": 22131, - "prevalence": 0.00018074194568704532 - }, - { - "value": "Local\\c:!users!admin!appdata!roaming!microsoft!windows!privacie!", - "count": 4, - "total_related": 58698, - "prevalence": 6.81454223312549e-5 - }, - { - "value": "Local\\Microsoft_Office_16_MsoSync_Closing", - "count": 2, - "total_related": 2129, - "prevalence": 0.0009394081728511038 - }, - { - "value": "Local\\Microsoft_Office_16_MsoSync_Running", - "count": 2, - "total_related": 2130, - "prevalence": 0.0009389671361502347 - }, - { - "value": "Local\\MSCTF.CtfMonitorInstMutexDefault1", - "count": 2, - "total_related": 24165, - "prevalence": 8.276432857438444e-5 - }, - { - "value": "Local\\CSI_OMTX:{000F6CB4-B63E-4E78-8288-5C0234DC40F0}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Local\\CSI_OMTX:{0947F223-F13A-46C2-A8DF-5FDE9256D465}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Local\\CSI_OMTX:{121118C9-DAF3-4F24-85F1-518EF055A211}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Local\\CSI_OMTX:{1326692A-B5B2-4FF8-AA58-406FDD3515CF}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Local\\CSI_OMTX:{149DF82A-9B0B-4E55-9E7D-27E6E390B297}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Local\\CSI_OMTX:{21ED91D7-8170-40A0-A6BB-BA66EB887CD1}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Local\\CSI_OMTX:{6DD76685-E15F-42B4-8F6E-7A06F3CB0980}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Local\\CSI_OMTX:{7A54B360-C040-4880-BD79-C800782895FE}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Local\\CSI_OMTX:{844E1CCB-A556-40AB-8EE0-77A91D2A393B}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Local\\CSI_OMTX:{88BD1082-5BFA-4B50-ADBA-7C21A35119CE}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Local\\CSI_OMTX:{8DF89DC0-C9EF-4B7C-9B0B-DCEAEE5DEEBE}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Local\\CSI_OMTX:{958928E4-B66D-44B1-A4C0-448301DEA507}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Local\\CSI_OMTX:{AC31147E-4C1A-4077-AFF2-7AE02E30D1BC}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Local\\CSI_OMTX:{BDAB7A3A-4153-40D0-B6E9-9919C8FFAA09}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Local\\CSI_OMTX:{D89F92CD-A149-49D9-A294-79FC0F93C2CF}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Local\\CSI_OMTX:{E52D7C86-4C8B-4222-BC8D-BAF7A8805ABA}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Local\\CSI_OMTX:{EAF9E725-D5AD-48C8-AAB0-ECBE8A1234BC}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Local\\CSI_OMTX:{FB8A9CA4-2D62-44C9-8CC5-243B40D62ED0}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Local\\10MU_ACB10_S-1-5-5-0-67319", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "Local\\10MU_ACBPIDS_S-1-5-5-0-67319", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "ConnHashTable<712>_HashTable_Mutex", - "count": 1, - "total_related": 75, - "prevalence": 0.013333333333333334 - }, - { - "value": "ConnHashTable<3484>_HashTable_Mutex", - "count": 1, - "total_related": 308, - "prevalence": 0.003246753246753247 - }, - { - "value": "ConnHashTable<3264>_HashTable_Mutex", - "count": 1, - "total_related": 322, - "prevalence": 0.003105590062111801 - }, - { - "value": "Local\\10MU_ACB10_S-1-5-5-0-188964", - "count": 1, - "total_related": 8800, - "prevalence": 0.00011363636363636364 - }, - { - "value": "Local\\10MU_ACBPIDS_S-1-5-5-0-188964", - "count": 1, - "total_related": 8817, - "prevalence": 0.00011341726210729273 - }, - { - "value": "Local\\10MU_ACB10_S-1-5-5-0-187930", - "count": 1, - "total_related": 8838, - "prevalence": 0.00011314777098891151 - }, - { - "value": "Local\\10MU_ACBPIDS_S-1-5-5-0-187930", - "count": 1, - "total_related": 8860, - "prevalence": 0.0001128668171557562 - }, - { - "value": "ConnHashTable<2116>_HashTable_Mutex", - "count": 1, - "total_related": 9092, - "prevalence": 0.00010998680158380995 - }, - { - "value": "ConnHashTable<2136>_HashTable_Mutex", - "count": 1, - "total_related": 11857, - "prevalence": 8.433836552247617e-5 - }, - { - "value": "Local\\10MU_ACB10_S-1-5-5-0-192178", - "count": 1, - "total_related": 40815, - "prevalence": 2.4500796275878966e-5 - }, - { - "value": "Local\\10MU_ACBPIDS_S-1-5-5-0-192178", - "count": 1, - "total_related": 40901, - "prevalence": 2.4449279968704923e-5 - }, - { - "value": "Local\\10MU_ACB10_S-1-5-5-0-191652", - "count": 1, - "total_related": 47530, - "prevalence": 2.1039343572480537e-5 - }, - { - "value": "Local\\10MU_ACBPIDS_S-1-5-5-0-191652", - "count": 1, - "total_related": 47624, - "prevalence": 2.099781622711238e-5 - }, - { - "value": "Local\\10MU_ACB10_S-1-5-5-0-183240", - "count": 1, - "total_related": 57416, - "prevalence": 1.7416747944823742e-5 - }, - { - "value": "Local\\10MU_ACBPIDS_S-1-5-5-0-183240", - "count": 1, - "total_related": 57515, - "prevalence": 1.7386768669042858e-5 - }, - { - "value": "Local\\!IETld!Mutex", - "count": 61, - "total_related": 100000, - "prevalence": 0.00061 - }, - { - "value": "Local\\WininetStartupMutex", - "count": 61, - "total_related": 100000, - "prevalence": 0.00061 - }, - { - "value": "Local\\WininetConnectionMutex", - "count": 56, - "total_related": 100000, - "prevalence": 0.00056 - }, - { - "value": "Local\\WininetProxyRegistryMutex", - "count": 56, - "total_related": 100000, - "prevalence": 0.00056 - }, - { - "value": "Local\\_!MSFTHISTORY!_", - "count": 55, - "total_related": 100000, - "prevalence": 0.00055 - }, - { - "value": "Local\\c:!users!admin!appdata!local!microsoft!windows!temporary internet files!content.ie5!", - "count": 36, - "total_related": 100000, - "prevalence": 0.00036 - }, - { - "value": "Local\\c:!users!admin!appdata!local!microsoft!windows!history!history.ie5!", - "count": 35, - "total_related": 100000, - "prevalence": 0.00035 - }, - { - "value": "Local\\c:!users!admin!appdata!roaming!microsoft!windows!cookies!", - "count": 35, - "total_related": 100000, - "prevalence": 0.00035 - }, - { - "value": "RasPbFile", - "count": 28, - "total_related": 100000, - "prevalence": 0.00028 - }, - { - "value": "Local\\c:!users!administrator!appdata!local!microsoft!windows!history!history.ie5!", - "count": 27, - "total_related": 100000, - "prevalence": 0.00027 - }, - { - "value": "Local\\c:!users!administrator!appdata!local!microsoft!windows!temporary internet files!content.ie5!", - "count": 27, - "total_related": 100000, - "prevalence": 0.00027 - }, - { - "value": "Local\\c:!users!administrator!appdata!roaming!microsoft!windows!cookies!", - "count": 27, - "total_related": 100000, - "prevalence": 0.00027 - }, - { - "value": "Local\\c:!users!admin!appdata!roaming!microsoft!windows!ietldcache!", - "count": 26, - "total_related": 100000, - "prevalence": 0.00026 - }, - { - "value": "CicLoadWinStaWinSta0", - "count": 23, - "total_related": 100000, - "prevalence": 0.00023 - }, - { - "value": "Local\\MSCTF.Asm.MutexDefault1", - "count": 20, - "total_related": 100000, - "prevalence": 0.0002 - }, - { - "value": "Local\\MU_ACBPIDS09_S-1-5-5-0-101299", - "count": 18, - "total_related": 100000, - "prevalence": 0.00018 - }, - { - "value": "IESQMMUTEX_0_208", - "count": 14, - "total_related": 100000, - "prevalence": 0.00014 - }, - { - "value": "Local\\!PrivacIE!SharedMemory!Mutex", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "Local\\c:!users!administrator!appdata!roaming!microsoft!windows!ietldcache!", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "Global\\MTX_MSO_AdHoc1_S-1-5-21-1547548985-192504236-2982455695-500", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "Global\\MTX_MSO_Formal1_S-1-5-21-1547548985-192504236-2982455695-500", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "Local\\ZoneAttributeCacheCounterMutex", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "Local\\ZonesCacheCounterMutex", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "Local\\ZonesLockedCacheCounterMutex", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "Local\\ZonesCounterMutex", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": "Local\\!BrowserEmulation!SharedMemory!Mutex", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "Groove.Mutex.SystemServices.Lock", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "Local\\c:!users!admin!appdata!local!microsoft!feeds cache!", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "Global\\ARM Update Mutex", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "Global\\Acro Update Mutex", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "Global\\MTX_MSO_AdHoc1_S-1-5-21-729737266-1210198952-1036399698-500", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "Global\\MTX_MSO_Formal1_S-1-5-21-729737266-1210198952-1036399698-500", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "Local\\!IECompat!Mutex", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "Global\\552FFA80-3393-423d-8671-7BA046BB5906", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "Local\\MU_ACBPIDS08", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "Local\\Mso97SharedDg19211105606Mutex", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "Local\\Mso97SharedDg19521105606Mutex", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "Local\\Mso97SharedDg19531105606Mutex", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "Local\\Mso97SharedDg20321105606Mutex", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "Local\\Mutex_MSOSharedMem", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "OfficeAssistantStateMutex", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Global\\TermSrvReadyEvent", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "com.adobe.acrobat.rna.RdrCefBrowserLock.DC", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "Global\\MTX_MSO_AdHoc1_S-1-5-21-4005801669-2598574594-602355426-1001", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "Global\\MTX_MSO_Formal1_S-1-5-21-4005801669-2598574594-602355426-1001", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\!IETld!Mutex", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\MSCTF.CtfActivated.Default1", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "_!SHMSFTHISTORY!_", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "com.adobe.acrobat.rna.RdrCefBrowserLock", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "Global\\SyncRootManager", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "Global\\_MSIExecute", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "Groove.Mutex.WebServices.Status", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "Groove:PathMutex:fzOjjMntuO3JoXYqLdBrDPBkpug=", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "Groove:PathMutex:tzanqCjN6dCs1QGzbKslin0UfIk=", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "registry_keys_deleted": [ - { - "value": "\\REGISTRY\\USER\\S-1-5-21-870151485-863566166-2146164720-1000\\Software\\Microsoft\\windows\\CurrentVersion\\Internet Settings", - "count": 16, - "total_related": 6936, - "prevalence": 0.002306805074971165 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-870151485-863566166-2146164720-1000\\Software\\Microsoft\\Office\\14.0\\Word\\Resiliency\\StartupItems", - "count": 5, - "total_related": 7186, - "prevalence": 0.0006957973838018369 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-870151485-863566166-2146164720-1000\\Software\\Microsoft\\Office\\14.0\\Common\\LCCache\\WordDocParts\\2052", - "count": 5, - "total_related": 7219, - "prevalence": 0.0006926167059149467 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-870151485-863566166-2146164720-1000\\Software\\Microsoft\\Office\\14.0\\Common\\LCCache\\SmartArt\\2052", - "count": 5, - "total_related": 8146, - "prevalence": 0.0006137981831573779 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-870151485-863566166-2146164720-1000\\Software\\Microsoft\\Office\\14.0\\Common\\LCCache\\Themes\\2052", - "count": 5, - "total_related": 8146, - "prevalence": 0.0006137981831573779 - }, - { - "value": "\\REGISTRY\\MACHINE\\SOFTWARE\\Microsoft\\SystemCertificates\\AuthRoot\\Certificates\\DAC9024F54D8F6DF94935FB1732638CA6AD77C13", - "count": 4, - "total_related": 19698, - "prevalence": 0.0002030663011473246 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\SystemCertificates\\CA\\Certificates\\48504E974C0DAC5B5CD476C8202274B24C8C7172", - "count": 3, - "total_related": 22, - "prevalence": 0.13636363636363635 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-870151485-863566166-2146164720-1000\\Software\\Microsoft\\Office\\14.0\\Word\\File MRU", - "count": 3, - "total_related": 2558, - "prevalence": 0.0011727912431587178 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-870151485-863566166-2146164720-1000\\Software\\Microsoft\\Office\\14.0\\Word\\Place MRU", - "count": 3, - "total_related": 2558, - "prevalence": 0.0011727912431587178 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-870151485-863566166-2146164720-1000\\Software\\Microsoft\\Office\\14.0\\Common\\Recent Locations\\SharePoint", - "count": 3, - "total_related": 3801, - "prevalence": 0.0007892659826361484 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Services\\WmiApRpl\\Performance\\First Counter", - "count": 18, - "total_related": 100000, - "prevalence": 0.00018 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Services\\WmiApRpl\\Performance\\First Help", - "count": 18, - "total_related": 100000, - "prevalence": 0.00018 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Services\\WmiApRpl\\Performance\\Last Counter", - "count": 18, - "total_related": 100000, - "prevalence": 0.00018 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Services\\WmiApRpl\\Performance\\Last Help", - "count": 18, - "total_related": 100000, - "prevalence": 0.00018 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Services\\WmiApRpl\\Performance\\Object List", - "count": 18, - "total_related": 100000, - "prevalence": 0.00018 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\AutoConfigURL", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ProxyOverride", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ProxyServer", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\IntranetName", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\ProxyBypass", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\IntranetName", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\ProxyBypass", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "\\REGISTRY\\MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\IntranetName", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "\\REGISTRY\\MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\ProxyBypass", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 1", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 10", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 11", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 12", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 13", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 14", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 15", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 16", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 17", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 18", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 19", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 2", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 20", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 21", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 22", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 23", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 24", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 25", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 26", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 27", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 28", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 29", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 3", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 30", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 31", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 32", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 33", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 34", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 35", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 36", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 37", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 38", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 39", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 4", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 40", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 41", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 42", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 43", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\AutoConfigURL", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ProxyOverride", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ProxyServer", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\IntranetName", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\ProxyBypass", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\IntranetName", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\ProxyBypass", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "\\Software\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\IntranetName", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "\\Software\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\ProxyBypass", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 44", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 45", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 46", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 47", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 48", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 49", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 5", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 50", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 6", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 7", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 8", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 9", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Max Display", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\Resiliency\\StartupItems\\", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\\\IntranetName", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\\\ProxyBypass", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\\\IntranetName", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\\\ProxyBypass", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\16.0\\Common\\ClientTelemetry\\RulesMetadata\\winword.exe", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\16.0\\Common\\ClientTelemetry\\RulesMetadata\\winword.exe\\ETWMonitor\\{02FD33DF-F746-4A10-93A0-2BC6273BC8E4}", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\16.0\\Common\\ClientTelemetry\\RulesMetadata\\winword.exe\\ETWMonitor\\{BB00E856-A12F-4AB7-B2C8-4E80CAEA5B07}", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\16.0\\Common\\ClientTelemetry\\RulesMetadata\\winword.exe\\ETWMonitor\\{DAF0B914-9C1C-450A-81B2-FEA7244F6FFA}", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\16.0\\Common\\Internet\\WebServiceCache\\AllUsers\\cdn.odc.officeapps.live.com\\odc-stat-images-OneDriveUpsell.png-lcid=1033&syslcid=1033&uilcid=1033&ver=16", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\16.0\\Common\\Internet\\WebServiceCache\\AllUsers\\cdn.odc.officeapps.live.com\\odc-stat-images-OneDriveUpsell.png-lcid=1033&syslcid=1033&uilcid=1033&ver=16\\0", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\16.0\\Common\\Internet\\WebServiceCache\\AllUsers\\cdn.odc.officeapps.live.com\\odc-stat-images-sm-onedrive_16_2.png", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\16.0\\Common\\Internet\\WebServiceCache\\AllUsers\\cdn.odc.officeapps.live.com\\odc-stat-images-sm-onedrive_16_2.png\\0", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\16.0\\Common\\Internet\\WebServiceCache\\AllUsers\\cdn.odc.officeapps.live.com\\odc-stat-images-sm-onedrive_32_2.png", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\16.0\\Common\\Internet\\WebServiceCache\\AllUsers\\cdn.odc.officeapps.live.com\\odc-stat-images-sm-onedrive_32_2.png\\0", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\IntranetName", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - } - ], - "registry_keys_opened": [ - { - "value": "HKEY_CURRENT_USER\\.html\\OpenWithList", - "count": 1, - "total_related": 79145, - "prevalence": 1.2635036957483101e-5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\Software\\Policies\\Microsoft\\Windows NT\\Rpc", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\System\\Setup", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "HKCR\\.vbs", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCR\\.vbs\\0x0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCR\\CLSID\\{0A29FF9E-7F9C-4437-8B11-F424491E3931}\\InprocServer32", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCR\\CLSID\\{0A29FF9E-7F9C-4437-8B11-F424491E3931}\\InprocServer32\\0x0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCR\\CLSID\\{0A29FF9E-7F9C-4437-8B11-F424491E3931}\\Server", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCR\\CLSID\\{0A29FF9E-7F9C-4437-8B11-F424491E3931}\\Server\\0x0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCR\\VBSFile\\ScriptEngine", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCR\\VBSFile\\ScriptEngine\\0x0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCU\\Control Panel\\International", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCU\\Control Panel\\International\\sYearMonth", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCU\\Environment", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCU\\Environment\\PSMODULEPATH", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCU\\Software\\Microsoft\\.NETFramework\\Policy\\Standards", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCU\\Software\\Microsoft\\Installer\\Assemblies\\Global", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCU\\Software\\Microsoft\\Installer\\Assemblies\\c:|windows|system32|WindowsPowerShell|v1.0|powershell.exe", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCU\\Software\\Microsoft\\Windows Script Host\\Settings", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCU\\Software\\Microsoft\\Windows Script Host\\Settings\\Enabled", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCU\\Software\\Microsoft\\Windows Script Host\\Settings\\LogSecuritySuccesses", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCU\\Software\\Microsoft\\Windows Script Host\\Settings\\TrustPolicy", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCU\\Software\\Microsoft\\Windows Script Host\\Settings\\UseWINSAFER", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCU\\Software\\Policies\\Microsoft\\Windows\\PowerShell\\ConsoleSessionConfiguration", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\*", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\*\\ShellEx\\{000214F9-0000-0000-C000-000000000046}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\.URL", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\.htm", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\.htm\\OpenWithList", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\.htm\\OpenWithList\\Excel.exe", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\.htm\\OpenWithList\\Excel.exe\\shell\\edit", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\.htm\\OpenWithList\\Excel.exe\\shell\\edit\\command", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\.htm\\OpenWithList\\MSPub.exe", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\.htm\\OpenWithList\\MSPub.exe\\shell\\edit", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\.htm\\OpenWithList\\MSPub.exe\\shell\\edit\\command", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\.htm\\OpenWithList\\Microsoft Excel", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\.htm\\OpenWithList\\Microsoft Excel\\shell\\edit", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\.htm\\OpenWithList\\Microsoft Excel\\shell\\edit\\command", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\.htm\\OpenWithList\\Microsoft Publisher", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\.htm\\OpenWithList\\Microsoft Publisher\\shell\\edit", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\.htm\\OpenWithList\\Microsoft Publisher\\shell\\edit\\command", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\.htm\\OpenWithList\\Microsoft Word", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\.htm\\OpenWithList\\Microsoft Word\\shell\\edit", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\.htm\\OpenWithList\\Microsoft Word\\shell\\edit\\command", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\.htm\\OpenWithProgids", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\.html", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\.html\\OpenWithProgids", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\.html\\ShellEx\\{000214F9-0000-0000-C000-000000000046}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\.url", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\.url\\OpenWithProgids", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\AllFilesystemObjects", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\AllFilesystemObjects\\BrowseInPlace", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\AllFilesystemObjects\\Clsid", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\AllFilesystemObjects\\DocObject", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\AllFilesystemObjects\\ShellEx\\IconHandler", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\AllFilesystemObjects\\ShellEx\\{000214F9-0000-0000-C000-000000000046}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\AppID\\iexplore.exe", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Applications\\Excel.exe", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Applications\\MSPub.exe", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Applications\\Microsoft Excel", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Applications\\Microsoft Publisher", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Applications\\Microsoft Word", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Applications\\WinWord.exe", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Applications\\Winword.exe", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Applications\\Winword.exe\\shell\\edit", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Applications\\Winword.exe\\shell\\edit\\command", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Applications\\notepad.exe", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Applications\\notepad.exe\\shell\\edit", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Applications\\notepad.exe\\shell\\edit\\command", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\AutoProxyTypes", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\AutoProxyTypes\\Application/x-internet-signup", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\AutoProxyTypes\\Application/x-ns-proxy-autoconfig", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{00020420-0000-0000-C000-000000000046}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{00020420-0000-0000-C000-000000000046}\\InprocHandler", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{00020420-0000-0000-C000-000000000046}\\InprocHandler32", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{00020420-0000-0000-C000-000000000046}\\InprocServer32", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{00020420-0000-0000-C000-000000000046}\\Progid", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{00020420-0000-0000-C000-000000000046}\\TreatAs", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{00020424-0000-0000-C000-000000000046}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{00020424-0000-0000-C000-000000000046}\\InprocHandler", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{00020424-0000-0000-C000-000000000046}\\InprocHandler32", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{00020424-0000-0000-C000-000000000046}\\InprocServer32", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{00020424-0000-0000-C000-000000000046}\\Progid", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{00020424-0000-0000-C000-000000000046}\\TreatAs", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{0002DF01-0000-0000-C000-000000000046}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{0002DF01-0000-0000-C000-000000000046}\\InprocHandler", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{0002DF01-0000-0000-C000-000000000046}\\InprocHandler32", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{0002DF01-0000-0000-C000-000000000046}\\InprocServer32", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{0002DF01-0000-0000-C000-000000000046}\\ProgID", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{0002DF01-0000-0000-C000-000000000046}\\Progid", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{0002DF01-0000-0000-C000-000000000046}\\TreatAs", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{03022430-ABC4-11D0-BDE2-00AA001A1953}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{03022430-ABC4-11D0-BDE2-00AA001A1953}\\InProcServer32", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{03022430-ABC4-11D0-BDE2-00AA001A1953}\\InprocHandler", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{03022430-ABC4-11D0-BDE2-00AA001A1953}\\InprocHandler32", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{03022430-ABC4-11D0-BDE2-00AA001A1953}\\InprocServer32", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{03022430-ABC4-11D0-BDE2-00AA001A1953}\\Progid", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "registry_keys_set": [ - { - "value": "\\REGISTRY\\USER\\S-1-5-21-870151485-863566166-2146164720-1000\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap", - "count": 5, - "total_related": 16072, - "prevalence": 0.00031110004977600794 - }, - { - "value": "\\REGISTRY\\MACHINE\\Software\\Microsoft\\Tracing\\mshta_RASAPI32", - "count": 4, - "total_related": 938, - "prevalence": 0.0042643923240938165 - }, - { - "value": "\\REGISTRY\\MACHINE\\Software\\Microsoft\\Tracing\\mshta_RASMANCS", - "count": 4, - "total_related": 938, - "prevalence": 0.0042643923240938165 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-870151485-863566166-2146164720-1000\\Software\\Classes\\Local Settings\\MuiCache\\bf\\AAF68885", - "count": 4, - "total_related": 5705, - "prevalence": 0.0007011393514460999 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-870151485-863566166-2146164720-1000\\Software\\Microsoft\\windows\\CurrentVersion\\Internet Settings\\Wpad", - "count": 4, - "total_related": 7588, - "prevalence": 0.0005271481286241434 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-870151485-863566166-2146164720-1000\\Software\\Microsoft\\windows\\CurrentVersion\\Internet Settings", - "count": 4, - "total_related": 7948, - "prevalence": 0.0005032712632108706 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-870151485-863566166-2146164720-1000\\Software\\Microsoft\\windows\\CurrentVersion\\Internet Settings\\Connections", - "count": 4, - "total_related": 7948, - "prevalence": 0.0005032712632108706 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-870151485-863566166-2146164720-1000\\Software\\Microsoft\\windows\\CurrentVersion\\Internet Settings\\Wpad\\52-54-00-18-40-da_52-54-00-a8-51-97", - "count": 2, - "total_related": 2556, - "prevalence": 0.000782472613458529 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-870151485-863566166-2146164720-1000\\Software\\Microsoft\\windows\\CurrentVersion\\Internet Settings\\Wpad\\52-54-00-9c-65-03_52-54-00-a9-be-b5", - "count": 2, - "total_related": 2563, - "prevalence": 0.0007803355442840422 - }, - { - "value": "\\REGISTRY\\MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\S-1-5-18\\Products\\00004109110000000000000000F01FEC\\Usage", - "count": 2, - "total_related": 8685, - "prevalence": 0.00023028209556706967 - }, - { - "value": "18E33E7", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\SystemCertificates\\Root\\Certificates\\0174E68C97DDF1E0EEEA415EA336A163D2B61AFD\\Blob", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Connections\\SavedLegacySettings", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ProxyEnable", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ProxyServer", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "HKLM\\SOFTWARE\\Microsoft\\WBEM\\PROVIDERS\\Performance\\Performance Data", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "HKLM\\SOFTWARE\\Microsoft\\WBEM\\PROVIDERS\\Performance\\Performance Refresh", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "HKLM\\SOFTWARE\\Microsoft\\WBEM\\PROVIDERS\\Performance\\Performance Refreshed", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Perflib\\Last Counter", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Perflib\\Last Help", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Perflib\\Updating", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Control\\BackupRestore\\FilesNotToBackup\\BITS_BAK", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Control\\BackupRestore\\FilesNotToBackup\\BITS_LOG", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Services\\BITS\\Performance\\PerfMMFileName", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "HKLM\\Software\\Microsoft\\WBEM\\CIMOM\\ConfigValueEssNeedsLoading", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "HKLM\\Software\\Microsoft\\WBEM\\CIMOM\\List of event-active namespaces", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "HKLM\\Software\\Microsoft\\WBEM\\WDM\\%windir%\\System32\\Drivers\\en-US\\portcls.SYS.mui[PortclsMof]", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "HKLM\\Software\\Microsoft\\WBEM\\WDM\\%windir%\\System32\\Drivers\\portcls.SYS[PortclsMof]", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "HKLM\\Software\\Microsoft\\WBEM\\WDM\\%windir%\\system32\\DRIVERS\\HDAudBus.sys[HDAudioMofName]", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "HKLM\\Software\\Microsoft\\WBEM\\WDM\\%windir%\\system32\\DRIVERS\\en-US\\HDAudBus.sys.mui[HDAudioMofName]", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "HKLM\\Software\\Microsoft\\WBEM\\WDM\\%windir%\\system32\\DRIVERS\\en-US\\intelppm.sys.mui[PROCESSORWMI]", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "HKLM\\Software\\Microsoft\\WBEM\\WDM\\%windir%\\system32\\DRIVERS\\intelppm.sys[PROCESSORWMI]", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "HKLM\\Software\\Microsoft\\WBEM\\WDM\\%windir%\\system32\\DRIVERS\\monitor.sys[MonitorWMI]", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "HKLM\\Software\\Microsoft\\WBEM\\WDM\\%windir%\\system32\\advapi32.dll[MofResourceName]", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "HKLM\\Software\\Microsoft\\WBEM\\WDM\\%windir%\\system32\\drivers\\ACPI.sys[ACPIMOFResource]", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "HKLM\\Software\\Microsoft\\WBEM\\WDM\\%windir%\\system32\\drivers\\en-US\\ACPI.sys.mui[ACPIMOFResource]", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "HKLM\\Software\\Microsoft\\WBEM\\WDM\\%windir%\\system32\\drivers\\en-US\\mssmbios.sys.mui[MofResource]", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "HKLM\\Software\\Microsoft\\WBEM\\WDM\\%windir%\\system32\\drivers\\en-US\\ndis.sys.mui[MofResourceName]", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "HKLM\\Software\\Microsoft\\WBEM\\WDM\\%windir%\\system32\\drivers\\mssmbios.sys[MofResource]", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "HKLM\\Software\\Microsoft\\WBEM\\WDM\\%windir%\\system32\\drivers\\ndis.sys[MofResourceName]", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "HKLM\\Software\\Microsoft\\WBEM\\WDM\\%windir%\\system32\\en-US\\advapi32.dll.mui[MofResourceName]", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "HKLM\\Software\\Microsoft\\WBEM\\WDM\\IDE\\DiskAMDX_HARDDISK___________________________2.5+____\\5&2770a7af&0&0.0.0_0-{05901221-D566-11d1-B2F0-00A0C9062910}", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\\\AutoDetect", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\\\UNCAsIntranet", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000_CLASSES\\Local Settings\\MuiCache\\17b\\52C64B7E\\LanguageList", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\BITS\\StateIndex", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\{B5DA8633-954C-4495-AE46-0BB5B5FB1CDC}\\Connection\\PnpInstanceID", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Control\\Nsi\\{eb004a03-9b1a-11d4-9123-0050047759bc}\\22\\(Default)", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Control\\Nsi\\{eb004a03-9b1a-11d4-9123-0050047759bc}\\24\\ffffffffffffffffffffffffffffff00", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Control\\Nsi\\{eb004a03-9b1a-11d4-9123-0050047759bc}\\24\\ffffffffffffffffffffffffffffff01", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Control\\Nsi\\{eb004a03-9b1a-11d4-9123-0050047759bc}\\24\\ffffffffffffffffffffffffffffff02", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Control\\Nsi\\{eb004a03-9b1a-11d4-9123-0050047759bc}\\24\\ffffffffffffffffffffffffffffff03", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Control\\TimeZoneInformation\\ActiveTimeBias", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "HKU\\S-1-5-18\\Software\\Classes\\Local Settings\\MuiCache\\17b\\52C64B7E\\LanguageList", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Internet Explorer\\BrowserEmulation\\IECompatVersionHigh", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Internet Explorer\\BrowserEmulation\\IECompatVersionLow", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Internet Explorer\\GPU\\DXFeatureLevel", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Internet Explorer\\GPU\\DeviceId", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Internet Explorer\\GPU\\Revision", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Internet Explorer\\GPU\\SubSysId", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Internet Explorer\\GPU\\VendorId", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Internet Explorer\\GPU\\VersionHigh", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Internet Explorer\\GPU\\VersionLow", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Internet Explorer\\GPU\\Wow64-DXFeatureLevel", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Internet Explorer\\GPU\\Wow64-DeviceId", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Internet Explorer\\GPU\\Wow64-Revision", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Internet Explorer\\GPU\\Wow64-SubSysId", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Internet Explorer\\GPU\\Wow64-VendorId", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Internet Explorer\\GPU\\Wow64-VersionHigh", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Internet Explorer\\GPU\\Wow64-VersionLow", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\5.0\\Cache\\Content\\CachePrefix", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\5.0\\Cache\\Cookies\\CachePrefix", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\5.0\\Cache\\History\\CachePrefix", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "\\\\Registry\\Machine\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Time Zones\\Greenland Standard Time\\TZI", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "\\\\Registry\\Machine\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Time Zones\\Iran Standard Time\\TZI", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "\\\\Registry\\Machine\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Time Zones\\Middle East Standard Time\\TZI", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "\\\\Registry\\Machine\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Time Zones\\Paraguay Standard Time\\TZI", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Adobe\\Acrobat Reader\\DC\\AVGeneral\\cUUIDs", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Adobe\\Acrobat Reader\\DC\\Collab\\cDocumentCenter", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Adobe\\Acrobat Reader\\DC\\Collab\\cDocumentCenter\\cSettings", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Adobe\\Acrobat Reader\\DC\\Collab\\cEmailDistribution", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Adobe\\Acrobat Reader\\DC\\Collab\\cEmailDistribution\\cSettings", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Adobe\\Acrobat Reader\\DC\\Collab\\cInitiationWizardFirstLaunch", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Adobe\\Acrobat Reader\\DC\\Collab\\cInternalServer", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Adobe\\Acrobat Reader\\DC\\Collab\\cInternalServer\\cSettings", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Adobe\\Acrobat Reader\\DC\\SessionManagement\\cWindowsCurrent\\cWin0", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Adobe\\Adobe Synchronizer\\DC\\WebServers", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\System\\Acrobatbrokerserverdispatchercpp789", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "HKLM\\SOFTWARE\\Microsoft\\Windows Media Player NSS\\3.0\\Servers\\A70D59A1-8EAD-4F40-AAAB-FBFC460800A4\\FriendlyName", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Control\\DeviceClasses\\{ad498944-762f-11d0-8dcb-00c04fc3358c}\\##?#SW#{eeab7790-c514-11d1-b42b-00805fc1270e}#asyncmac#{ad498944-762f-11d0-8dcb-00c04fc3358c}\\#{78032B7E-4968-42D3-9F37-287EA86C0AAA}\\SymbolicLink", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Control\\DeviceClasses\\{ad498944-762f-11d0-8dcb-00c04fc3358c}\\##?#SW#{eeab7790-c514-11d1-b42b-00805fc1270e}#asyncmac#{ad498944-762f-11d0-8dcb-00c04fc3358c}\\DeviceInstance", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Control\\DeviceClasses\\{cac88484-7515-4c03-82e6-71a87abac361}\\##?#SW#{eeab7790-c514-11d1-b42b-00805fc1270e}#asyncmac#{cac88484-7515-4c03-82e6-71a87abac361}\\#\\SymbolicLink", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Control\\DeviceClasses\\{cac88484-7515-4c03-82e6-71a87abac361}\\##?#SW#{eeab7790-c514-11d1-b42b-00805fc1270e}#asyncmac#{cac88484-7515-4c03-82e6-71a87abac361}\\DeviceInstance", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "MTTT", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "52-54-00-e9-99-e1WpadDecisionTime", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "\\Software\\Classes\\Local Settings\\MuiCache\\130\\52C64B7E\\LanguageList", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\AutoDetect", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\UNCAsIntranet", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NetworkList\\Nla\\Cache\\Intranet\\{6A52BE73-EC8E-4F63-A268-7517A50DCB38}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\5.0\\Cache\\Content\\CachePrefix", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "file_types": [ - { - "value": "lnk", - "count": 71 - }, - { - "value": "zip", - "count": 51 - }, - { - "value": "docx", - "count": 44 - }, - { - "value": "macho", - "count": 41 - }, - { - "value": "text", - "count": 23 - }, - { - "value": "html", - "count": 21 - }, - { - "value": "xml", - "count": 19 - }, - { - "value": "vba", - "count": 18 - }, - { - "value": "pdf", - "count": 13 - }, - { - "value": "doc", - "count": 11 - }, - { - "value": "pedll", - "count": 8 - }, - { - "value": "javascript", - "count": 8 - }, - { - "value": "peexe", - "count": 2 - }, - { - "value": "mp3", - "count": 2 - }, - { - "value": "powershell", - "count": 2 - }, - { - "value": "jpeg", - "count": 1 - }, - { - "value": "appledouble", - "count": 1 - }, - { - "value": "applescript", - "count": 1 - }, - { - "value": "bmp", - "count": 1 - }, - { - "value": "xls", - "count": 1 - }, - { - "value": "one", - "count": 1 - }, - { - "value": "chm", - "count": 1 - }, - { - "value": "msi", - "count": 1 - }, - { - "value": "python", - "count": 1 - }, - { - "value": "shell", - "count": 1 - }, - { - "value": "isoimage", - "count": 1 - } - ], - "crowdsourced_sigma_results": [ - { - "value": { - "id": "25fb50db6056bc3db5e2f3d8d53b6ef8b6fad41ac3ecaf0386e316bd1711baf0", - "level": "high", - "title": "Remotely Hosted HTA File Executed Via Mshta.EXE", - "author": "Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects execution of the \"mshta\" utility with an argument containing the \"http\" keyword, which could indicate that an attacker is executing a remotely hosted malicious hta file" - }, - "count": 33, - "total_related": 6555, - "prevalence": 0.005034324942791762 - }, - { - "value": { - "id": "6c10fa91f51fe5cab32552ba2e84e7ab8d1695e93a2d2582c845a71eb3e0f457", - "level": "high", - "title": "Detects URL shortcut execution (RogueURL campaign)", - "author": "RussianPanda", - "source_url": "https://github.com/RussianPanda95/Sigma-Rules", - "source": "RussianPanda95 Rule Set (GitHub)", - "description": "Detects malicious URL shortcut execution" - }, - "count": 24, - "total_related": 11285, - "prevalence": 0.0021267168808152413 - }, - { - "value": { - "id": "31e1f4457871d51593456a4331811513af82fe4e36d2b26a582dd6baa180a91d", - "level": "high", - "title": "Suspicious Mshta.EXE Execution Patterns", - "author": "Florian Roth (Nextron Systems), Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects suspicious mshta process execution patterns" - }, - "count": 8, - "total_related": 17307, - "prevalence": 0.0004622407118506963 - }, - { - "value": { - "id": "e576f496b0ac03c619b88124a419d2c717d3f5e3f5506a17e145443091bda155", - "level": "low", - "title": "Curl Usage on Linux", - "author": "Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects a curl process start on linux, which indicates a file download from a remote location or a simple web request to a remote server" - }, - "count": 5, - "total_related": 28393, - "prevalence": 0.00017609974289437537 - }, - { - "value": { - "id": "00b61d3ad8d5b276f712ce687ea306dc5b640516a51e65fd05ec277c5b979611", - "level": "high", - "title": "Suspicious Parent Double Extension File Execution", - "author": "frack113, Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detect execution of suspicious double extension files in ParentCommandLine" - }, - "count": 4, - "total_related": 2652, - "prevalence": 0.0015082956259426848 - }, - { - "value": { - "id": "15a88fc8b846a774c398a2350aba9d8b4203f0cbb095abb4035f8f0e2c3ca2d5", - "level": "medium", - "title": "Use of Pcalua For Execution", - "author": "Nasreddine Bencherchali (Nextron Systems), E.M. Anhaus (originally from Atomic Blue Detections, Endgame), oscd.community", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects execition of commands and binaries from the context of The program compatibility assistant (Pcalua.exe). This can be used as a LOLBIN in order to bypass application whitelisting." - }, - "count": 3, - "total_related": 791, - "prevalence": 0.0037926675094816687 - }, - { - "value": { - "id": "93f12e3e5c1af45ad5cce51fca771889beae9d1da27d23d889c557f217fc803f", - "level": "medium", - "title": "Suspicious Curl Change User Agents", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects a suspicious curl process start on Windows with set useragent options" - }, - "count": 3, - "total_related": 1114, - "prevalence": 0.0026929982046678637 - }, - { - "value": { - "id": "2105a0eff0c693326dcb33bbdcfd768fd6c8825061ae9eb48d31703fabf241e5", - "level": "high", - "title": "Potentially Suspicious PowerShell Child Processes", - "author": "Florian Roth (Nextron Systems), Tim Shelton", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects potentially suspicious child processes spawned by PowerShell" - }, - "count": 3, - "total_related": 18633, - "prevalence": 0.00016100466913540493 - }, - { - "value": { - "id": "6ecd0ccd55a70b96ebb8ad35b9fc18b56f99fdae0b1c2d235ba3300b9457b516", - "level": "medium", - "title": "MacOS Scripting Interpreter AppleScript", - "author": "Alejandro Ortuno, oscd.community", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects execution of AppleScript of the macOS scripting language AppleScript." - }, - "count": 3, - "total_related": 22010, - "prevalence": 0.00013630168105406633 - }, - { - "value": { - "id": "d86dfee683d0e96803dc8a153d15f7208afc774045e2d885ccaec10bdcef7831", - "level": "high", - "title": "Suspicious Curl.EXE Download", - "author": "Florian Roth (Nextron Systems), Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects a suspicious curl process start on Windows and outputs the requested document to a local file" - }, - "count": 3, - "total_related": 57952, - "prevalence": 5.176697956929873e-5 - }, - { - "value": { - "id": "85e2c3c8bd260f8a67a582a43493b73662159bf74036dcc05b8952c84be8bc2a", - "level": "medium", - "title": "Suspicious Curl Change User Agents - Linux", - "author": "Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects a suspicious curl process start on linux with set useragent options" - }, - "count": 2, - "total_related": 246, - "prevalence": 0.008130081300813009 - }, - { - "value": { - "id": "63437b0e9c5e21d2823a28f0a428ee4bad8d30ba59ddbfb9227fe13452f1aebe", - "level": "medium", - "title": "DeviceCredentialDeployment Execution", - "author": "Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the execution of DeviceCredentialDeployment to hide a process from view" - }, - "count": 2, - "total_related": 490, - "prevalence": 0.004081632653061225 - }, - { - "value": { - "id": "53df4e098ad6e906fbb05243a95d838a673d2ba830a6c9ee0cabeac59d2f9a9d", - "level": "medium", - "title": "Suspicious Curl File Upload - Linux", - "author": "Nasreddine Bencherchali (Nextron Systems), Cedric MAURUGEON (Update)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects a suspicious curl process start the adds a file to a web request" - }, - "count": 2, - "total_related": 1560, - "prevalence": 0.001282051282051282 - }, - { - "value": { - "id": "62641a1f33f67c78cb5f920f86788ab9e084dd90a20f1bbe56bd0de87f85b129", - "level": "medium", - "title": "Suspicious Msiexec Quiet Install From Remote Location", - "author": "Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects usage of Msiexec.exe to install packages hosted remotely quietly" - }, - "count": 2, - "total_related": 3836, - "prevalence": 0.0005213764337851929 - }, - { - "value": { - "id": "78dc71a5599dc85b3d37a6ab0f014aa5110b2ce1b2346c8f2730e0c481977781", - "level": "high", - "title": "Curl Download And Execute Combination", - "author": "Sreeman, Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Adversaries can use curl to download payloads remotely and execute them. Curl is included by default in Windows 10 build 17063 and later." - }, - "count": 2, - "total_related": 5115, - "prevalence": 0.00039100684261974585 - }, - { - "value": { - "id": "7a63d1c1bf6ebb277b02d4893066d3732e3d7df562cfdbfee275bbc5c4de0951", - "level": "high", - "title": "MSHTA Suspicious Execution 01", - "author": "Diego Perez (@darkquassar), Markus Neis, Swisscom (Improve Rule)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detection for mshta.exe suspicious execution patterns sometimes involving file polyglotism" - }, - "count": 2, - "total_related": 6759, - "prevalence": 0.00029590176061547566 - }, - { - "value": { - "id": "269369cff6a753f9bd7a50d72f15b83a86911e2d6d46e1a38561ac385481c372", - "level": "medium", - "title": "Msiexec Quiet Installation", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Adversaries may abuse msiexec.exe to proxy execution of malicious payloads.\nMsiexec.exe is the command-line utility for the Windows Installer and is thus commonly associated with executing installation packages (.msi)\n" - }, - "count": 2, - "total_related": 43376, - "prevalence": 4.610844706750277e-5 - }, - { - "value": { - "id": "248820e948efae04f89b524348c8398f0b278befcaec4fafddf73e9c5dda0353", - "level": "high", - "title": "Windows Shell/Scripting Application File Write to Suspicious Folder", - "author": "Florian Roth (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects Windows shells and scripting applications that write files to suspicious folders" - }, - "count": 2, - "total_related": 73355, - "prevalence": 2.726467180151319e-5 - }, - { - "value": { - "id": "4a7e3b52f438365db6b61867f157e3bc434b40fb9916eba681bb857e7a1041ee", - "level": "high", - "title": "Msiexec.EXE Initiated Network Connection Over HTTP", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects an initiated network connection by \"Msiexec.exe\" over port 80 or 443.\nAdversaries might abuse \"msiexec.exe\" to install and execute remotely hosted packages.\n" - }, - "count": 2, - "total_related": 75269, - "prevalence": 2.6571364040973043e-5 - }, - { - "value": { - "id": "c2b8793bc5dc3f78c117608b17e59499e853d298dba8c03f56b4bbcd6d0c0f16", - "level": "high", - "title": "Suspicious Microsoft OneNote Child Process", - "author": "Tim Rauch (Nextron Systems), Nasreddine Bencherchali (Nextron Systems), Elastic (idea)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects suspicious child processes of the Microsoft OneNote application. This may indicate an attempt to execute malicious embedded objects from a .one file." - }, - "count": 1, - "total_related": 409, - "prevalence": 0.0024449877750611247 - }, - { - "value": { - "id": "18992bc0af590fff76bc3d6fbd1f89e36882bbae039d8c4ccd73c952397c875e", - "level": "medium", - "title": "Launch Agent/Daemon Execution Via Launchctl", - "author": "Pratinav Chandra", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the execution of programs as Launch Agents or Launch Daemons using launchctl on macOS." - }, - "count": 1, - "total_related": 8946, - "prevalence": 0.000111781801922647 - }, - { - "value": { - "id": "a22ff20d7afa397abe4e6127e6da647b437781be86602fc20a88c1403f1200bc", - "level": "medium", - "title": "Suspicious LNK Double Extension File Created", - "author": "Nasreddine Bencherchali (Nextron Systems), frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the creation of files with an \"LNK\" as a second extension. This is sometimes used by malware as a method to abuse the fact that Windows hides the \"LNK\" extension by default.\n" - }, - "count": 1, - "total_related": 11733, - "prevalence": 8.522969402539845e-5 - }, - { - "value": { - "id": "5e22ec775af6cbc5059b6f7e9228ad35176019128d402f817de8f1d74a4608ba", - "level": "medium", - "title": "Potential Goopdate.DLL Sideloading", - "author": "X__Junior (Nextron Systems), Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects potential DLL sideloading of \"goopdate.dll\", a DLL used by googleupdate.exe" - }, - "count": 1, - "total_related": 11864, - "prevalence": 8.428860418071477e-5 - }, - { - "value": { - "id": "b9bc90b7745bcb3a2cf9de40d1d419d18ead6650040015c7f4755848e9bfdb05", - "level": "high", - "title": "Suspicious MSHTA Child Process", - "author": "Michael Haag", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects a suspicious process spawning from an \"mshta.exe\" process, which could be indicative of a malicious HTA script execution" - }, - "count": 1, - "total_related": 12767, - "prevalence": 7.832693663350827e-5 - }, - { - "value": { - "id": "d2ba63dcfd40541d69308865939969a6282a95c29b46e0eaeb0c39701b6aa2f7", - "level": "medium", - "title": "Local Network Connection Initiated By Script Interpreter", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects a script interpreter (Wscript/Cscript) initiating a local network connection to download or execute a script hosted on a shared folder.\n" - }, - "count": 1, - "total_related": 28127, - "prevalence": 3.555302734027803e-5 - }, - { - "value": { - "id": "c819b1c2210c6c76f29e7d15825b104bbd98de4d9561a6c86a8b158afd0d2be9", - "level": "high", - "title": "Potentially Suspicious Malware Callback Communication", - "author": "Florian Roth (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects programs that connect to known malware callback ports based on statistical analysis from two different sandbox system databases\n" - }, - "count": 1, - "total_related": 29057, - "prevalence": 3.441511511856007e-5 - }, - { - "value": { - "id": "80c9078b4f0a21412506961251c7253e037afc83c8a88cd362377082d1efaa30", - "level": "low", - "title": "Startup Item File Created - MacOS", - "author": "Alejandro Ortuno, oscd.community", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the creation of a startup item plist file, that automatically get executed at boot initialization to establish persistence.\nAdversaries may use startup items automatically executed at boot initialization to establish persistence.\nStartup items execute during the final phase of the boot process and contain shell scripts or other executable files along with configuration information used by the system to determine the execution order for all startup items.\n" - }, - "count": 1, - "total_related": 39042, - "prevalence": 2.5613441934327136e-5 - }, - { - "value": { - "id": "c0ad3fd3010dc41b8f54cd4f911b4bf081d2d195b0e7548cdc60ebcee9250ad3", - "level": "low", - "title": "Suspicious PowerShell Get Current User", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the use of PowerShell to identify the current logged user." - }, - "count": 1, - "total_related": 40520, - "prevalence": 2.4679170779861795e-5 - }, - { - "value": { - "id": "b0d225f3239543a37159ba2855ee1e7972c6bff3c83ce7aed9056599f6ee6314", - "level": "low", - "title": "Suspicious Process Discovery With Get-Process", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Get the processes that are running on the local computer." - }, - "count": 1, - "total_related": 47234, - "prevalence": 2.1171190244315535e-5 - }, - { - "value": { - "id": "8d980d509aaf7ca8f2c6cd9dd23e8ea6eb18328ca64711cb6e059ecec024fe0a", - "level": "high", - "title": "Outbound Network Connection Initiated By Script Interpreter", - "author": "frack113, Florian Roth (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects a script interpreter wscript/cscript opening a network connection to a non-local network. Adversaries may use script to download malicious payloads." - }, - "count": 1, - "total_related": 51059, - "prevalence": 1.9585185765486987e-5 - }, - { - "value": { - "id": "c085cde9af85b182e783b8d7b42d66d3d0efe08696b4fe7946da3d5d1a2cd51e", - "level": "low", - "title": "Potential PowerShell Obfuscation Using Alias Cmdlets", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects Set-Alias or New-Alias cmdlet usage. Which can be use as a mean to obfuscate PowerShell scripts" - }, - "count": 1, - "total_related": 52503, - "prevalence": 1.904653067443765e-5 - }, - { - "value": { - "id": "b5386a23355681c43cfbd2f2ccfe4b16ed45324d0d7b5583487a9f302ee1e427", - "level": "low", - "title": "Creation of an Executable by an Executable", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the creation of an executable by another executable" - }, - "count": 13, - "total_related": 100000, - "prevalence": 0.00013 - }, - { - "value": { - "id": "e4d5f1be0673fa786cc8379c15338af08cdd11eed433bead9e801d6204d42a2d", - "level": "medium", - "title": "Python Initiated Connection", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects a Python process initiating a network connection. While this often relates to package installation, it can also indicate a potential malicious script communicating with a C&C server." - }, - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": { - "id": "f92451c8957e89bb4e61e68433faeb8d7c1461c3b90d06b3403c8f3d87c728b8", - "level": "medium", - "title": "Usage Of Web Request Commands And Cmdlets", - "author": "James Pemberton / @4A616D6573, Endgame, JHasenbusch, oscd.community, Austin Songer @austinsonger", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the use of various web request commands with commandline tools and Windows PowerShell cmdlets (including aliases) via CommandLine" - }, - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": { - "id": "22e867c244280c1d01bcddc8355c10d82b6c69577cd784cefbbe4eb5e7a82f65", - "level": "medium", - "title": "Password Protected Compressed File Extraction Via 7Zip", - "author": "Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects usage of 7zip utilities (7z.exe, 7za.exe and 7zr.exe) to extract password protected zip files." - }, - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": { - "id": "96d2c399118cab5d249093badf4a85f0ef1889872b0191bdf131bcabc0994681", - "level": "high", - "title": "Suspicious Script Execution From Temp Folder", - "author": "Florian Roth (Nextron Systems), Max Altgelt (Nextron Systems), Tim Shelton", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects a suspicious script executions from temporary folder" - }, - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": { - "id": "b7eb83db20f6f8b5f580e107c2b6816110a31869a94de5e2797d917335d9fbc0", - "level": "high", - "title": "Suspicious Call by Ordinal", - "author": "Florian Roth (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects suspicious calls of DLLs in rundll32.dll exports by ordinal" - }, - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": { - "id": "cfd44c3835317e846b18021a9060f4b9b011294ec53eb3ac1fad568abeb37922", - "level": "medium", - "title": "Office Application Initiated Network Connection To Non-Local IP", - "author": "Christopher Peacock '@securepeacock', SCYTHE '@scythe_io', Florian Roth (Nextron Systems), Tim Shelton, Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects an office application (Word, Excel, PowerPoint) that initiate a network connection to a non-private IP addresses.\nThis rule aims to detect traffic similar to one seen exploited in CVE-2021-42292.\nThis rule will require an initial baseline and tuning that is specific to your organization.\n" - }, - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": { - "id": "b5e9f310ab6a8611ea1b7b788e712f0f6bf452c3092675694cf6256931874071", - "level": "low", - "title": "PowerShell Initiated Network Connection", - "author": "Florian Roth (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects a PowerShell process that initiates network connections. Check for suspicious target ports and target systems." - }, - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": { - "id": "3c0434c2b9b483a1c7879404c2a80556dc54436bf222a970ca7131b1f30079f1", - "level": "medium", - "title": "Use Short Name Path in Command Line", - "author": "frack113, Nasreddine Bencherchali", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detect use of the Windows 8.3 short name. Which could be used as a method to avoid command-line detection" - }, - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": { - "id": "a913250de417b0235e4fbff14e07a25585d216d2000ee8ef314227987aef7eb0", - "level": "medium", - "title": "Use Short Name Path in Image", - "author": "frack113, Nasreddine Bencherchali", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detect use of the Windows 8.3 short name. Which could be used as a method to avoid Image detection" - }, - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": { - "id": "06b48fa7870d38bdf92b4d4a9b9c4a4df779bd405fdc5ba0e70911df20027ce1", - "level": "medium", - "title": "Change PowerShell Policies to an Insecure Level", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects changing the PowerShell script execution policy to a potentially insecure level using the \"-ExecutionPolicy\" flag." - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "0db9fba426142aca003830de31e38a7318ed0a3a299852f6bc4cbe8bc905515f", - "level": "medium", - "title": "Read Contents From Stdin Via Cmd.EXE", - "author": "frack113, Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detect the use of \"<\" to read and potentially execute a file via cmd.exe" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "18842e32896dd83b8aca4d5e1ac78c1f66b1d252479c0023cdd02f108c42c8cd", - "level": "medium", - "title": "Wow6432Node CurrentVersion Autorun Keys Modification", - "author": "Victor Sergeev, Daniil Yugoslavskiy, Gleb Sukhodolskiy, Timur Zinniatullin, oscd.community, Tim Shelton, frack113 (split)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects modification of autostart extensibility point (ASEP) in registry." - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "1f7f8b1e9005dd4d64cb9d30ed53ee94f68fb96262fbd72f7a0266881149c79f", - "level": "low", - "title": "Suspicious Get-WmiObject", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "The infrastructure for management data and operations that enables local and remote management of Windows personal computers and servers" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "5572c8188426269a10ccb41fc8e9c8445391ac38a0917621b0a1ee05ec99aac9", - "level": "medium", - "title": "Change PowerShell Policies to an Insecure Level - PowerShell", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects changing the PowerShell script execution policy to a potentially insecure level using the \"Set-ExecutionPolicy\" cmdlet." - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "62ce96b648991749ff9b9ccc7dafa1d8da64d6490e9f469683f00fa248ef9336", - "level": "low", - "title": "Set Files as System Files Using Attrib.EXE", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the execution of \"attrib\" with the \"+s\" flag to mark files as system files" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "7ca43f2acf2c039e776af286dca2b5216d23967e6e8fe43dd5a5cc95f86e52e5", - "level": "low", - "title": "Modification of IE Registry Settings", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects modification of the registry settings used for Internet Explorer and other Windows components that use these settings. An attacker can abuse this registry key to add a domain to the trusted sites Zone or insert javascript for persistence" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "8919a871f4a52b7af785fab44b4665ab6a3637e6ebeeac0288df8a5012a48be2", - "level": "low", - "title": "User with Privileges Logon", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects logon with \"Special groups\" and \"Special Privileges\" can be thought of as Administrator groups or privileges." - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "8b5db9da5732dc549b0e8b56fe5933d7c95ed760f3ac20568ab95347ef8c5bcc", - "level": "medium", - "title": "CurrentVersion Autorun Keys Modification", - "author": "Victor Sergeev, Daniil Yugoslavskiy, Gleb Sukhodolskiy, Timur Zinniatullin, oscd.community, Tim Shelton, frack113 (split)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects modification of autostart extensibility point (ASEP) in registry." - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "d62173552d7fce98c24a7040b784edf35cc6650d2e68ecf2d04f40c58d58cfda", - "level": "high", - "title": "Scheduled TaskCache Change by Uncommon Program", - "author": "Syed Hasan (@syedhasan009)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Monitor the creation of a new key under 'TaskCache' when a new scheduled task is registered by a process that is not svchost.exe, which is suspicious" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": { - "id": "ffbbcedfb9a1fd41ebb288154c10cf5cf869eb25195708be30f8a9df74f411cc", - "level": "medium", - "title": "Suspicious New Instance Of An Office COM Object", - "author": "Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects an svchost process spawning an instance of an office application. This happens when the initial word application creates an instance of one of the Office COM objects such as 'Word.Application', 'Excel.Application', etc.\nThis can be used by malicious actors to create malicious Office documents with macros on the fly. (See vba2clr project in the references)\n" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "debug_codeview_guids": [ - { - "value": "1a3887d-c10b-4252-81f9-ae6f590cc181", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - } - ], - "debug_codeview_names": [ - { - "value": "D:\\Shared\\.NET Samples\\CSharpQRCodeEncoder-master\\ZXing.Common\\ZXing.Common\\obj\\Release\\ZXing.Common.pdb", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - } - ], - "debug_timestamps": [ - { - "value": "Fri Aug 12 07:44:07 2022", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "Fri Mar 10 05:40:39 2023", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Thu Apr 27 07:13:44 2023", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Wed Mar 1 06:45:12 2023", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Tue Aug 9 01:58:58 2022", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - } - ], - "dropped_files_path": [ - { - "value": "C:\\Users\\Admin\\AppData\\Roaming\\Microsoft\\Windows\\Cookies\\admin@bit[1].txt", - "count": 9, - "total_related": 56, - "prevalence": 0.16071428571428573 - }, - { - "value": "C:\\Users\\Admin\\AppData\\Roaming\\Microsoft\\Templates\\~$Normal.dotm", - "count": 8, - "total_related": 41707, - "prevalence": 0.00019181432373462489 - }, - { - "value": "C:\\Users\\Public\\mshta.exe (copy)", - "count": 6, - "total_related": 20, - "prevalence": 0.3 - }, - { - "value": "C:\\Users\\Public\\msh", - "count": 6, - "total_related": 34, - "prevalence": 0.17647058823529413 - }, - { - "value": "%TEMP%\\password.txt", - "count": 5, - "total_related": 38, - "prevalence": 0.13157894736842105 - }, - { - "value": "c:\\users\\administrator\\appdata\\local\\microsoft\\office\\14.0\\officefilecache\\localcachefileeditmanager\\fsd-cnry.fsd", - "count": 4, - "total_related": 966, - "prevalence": 0.004140786749482402 - }, - { - "value": "c:\\users\\administrator\\appdata\\local\\microsoft\\office\\14.0\\officefilecache\\localcachefileeditmanager\\fsf-{0e1eee64-e8c6-4e2a-9759-63cf07fd8988}.fsf", - "count": 4, - "total_related": 980, - "prevalence": 0.004081632653061225 - }, - { - "value": "c:\\users\\administrator\\appdata\\local\\microsoft\\office\\14.0\\officefilecache\\fsf-ctbl.fsf", - "count": 4, - "total_related": 1063, - "prevalence": 0.0037629350893697085 - }, - { - "value": "C:\\Users\\Admin\\AppData\\Local\\Microsoft\\Office\\14.0\\OfficeFileCache\\LocalCacheFileEditManager\\FSD-CNRY.FSD", - "count": 4, - "total_related": 1074, - "prevalence": 0.0037243947858473 - }, - { - "value": "c:\\users\\administrator\\appdata\\local\\microsoft\\office\\14.0\\officefilecache\\fsd-cnry.fsd", - "count": 4, - "total_related": 1085, - "prevalence": 0.003686635944700461 - }, - { - "value": "C:\\Users\\Admin\\AppData\\Local\\Microsoft\\Office\\14.0\\OfficeFileCache\\LocalCacheFileEditManager\\FSF-{0E1EEE64-E8C6-4E2A-9759-63CF07FD8988}.FSF", - "count": 4, - "total_related": 1155, - "prevalence": 0.003463203463203463 - }, - { - "value": "C:\\Users\\Admin\\AppData\\Local\\Microsoft\\Office\\14.0\\OfficeFileCache\\FSF-CTBL.FSF", - "count": 4, - "total_related": 1167, - "prevalence": 0.003427592116538132 - }, - { - "value": "C:\\Users\\Admin\\AppData\\Local\\Microsoft\\Office\\14.0\\OfficeFileCache\\FSD-CNRY.FSD", - "count": 4, - "total_related": 1175, - "prevalence": 0.003404255319148936 - }, - { - "value": "C:\\Users\\Admin\\AppData\\Local\\Microsoft\\Windows\\Temporary Internet Files\\Content.IE5\\NSD0P9E7\\dnserror[1]", - "count": 4, - "total_related": 13756, - "prevalence": 0.0002907822041291073 - }, - { - "value": "C:\\Users\\Admin\\AppData\\Local\\Microsoft\\Windows\\Temporary Internet Files\\Content.IE5\\UVAV0A3U\\errorPageStrings[1]", - "count": 4, - "total_related": 13922, - "prevalence": 0.0002873150409423933 - }, - { - "value": "C:\\Users\\Admin\\AppData\\Local\\Microsoft\\Windows\\Temporary Internet Files\\Content.IE5\\N3K7JNNI\\ErrorPageTemplate[1]", - "count": 4, - "total_related": 13933, - "prevalence": 0.00028708820785186247 - }, - { - "value": "C:\\Users\\Admin\\AppData\\Local\\Microsoft\\Windows\\Temporary Internet Files\\Content.IE5\\NSD0P9E7\\noConnect[1]", - "count": 3, - "total_related": 13149, - "prevalence": 0.00022815423226100844 - }, - { - "value": "C:\\Users\\Admin\\AppData\\Local\\Microsoft\\Windows\\Temporary Internet Files\\Content.IE5\\NSD0P9E7\\tools[1]", - "count": 3, - "total_related": 13200, - "prevalence": 0.00022727272727272727 - }, - { - "value": "C:\\Users\\Admin\\AppData\\Local\\Microsoft\\Windows\\Temporary Internet Files\\Content.IE5\\MXLP1Y01\\favcenter[1]", - "count": 3, - "total_related": 13202, - "prevalence": 0.00022723829722769278 - }, - { - "value": "C:\\Users\\Admin\\AppData\\Local\\Microsoft\\Windows\\Temporary Internet Files\\Content.IE5\\UVAV0A3U\\down[1]", - "count": 3, - "total_related": 13271, - "prevalence": 0.00022605681561299073 - }, - { - "value": "C:\\Users\\Admin\\AppData\\Local\\Microsoft\\Windows\\Temporary Internet Files\\Content.IE5\\N3K7JNNI\\background_gradient[1]", - "count": 3, - "total_related": 13294, - "prevalence": 0.00022566571385587483 - }, - { - "value": "C:\\Users\\Admin\\AppData\\Local\\Microsoft\\Windows\\Temporary Internet Files\\Content.IE5\\MXLP1Y01\\httpErrorPagesScripts[1]", - "count": 3, - "total_related": 13695, - "prevalence": 0.0002190580503833516 - }, - { - "value": "C:\\Users\\Admin\\AppData\\Roaming\\Adobe\\Acrobat\\9.0\\UserCache.bin", - "count": 3, - "total_related": 27743, - "prevalence": 0.00010813538550264931 - }, - { - "value": "C:\\Users\\Admin\\AppData\\Roaming\\Adobe\\Acrobat\\9.0\\SharedDataEvents", - "count": 3, - "total_related": 68355, - "prevalence": 4.3888523151195965e-5 - }, - { - "value": "C:\\Users\\Admin\\AppData\\Roaming\\Adobe\\Acrobat\\9.0\\SharedDataEvents-journal", - "count": 3, - "total_related": 68507, - "prevalence": 4.379114543039397e-5 - }, - { - "value": "C:\\Users\\Admin\\AppData\\Roaming\\Microsoft\\Office\\Recent\\index.dat", - "count": 3, - "total_related": 82852, - "prevalence": 3.620914401583546e-5 - }, - { - "value": "C:\\Users\\Admin\\AppData\\Local\\Temp\\CVR287A.tmp", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "C:\\Users\\Administrator\\AppData\\Local\\Temp\\Risk Assessment Checklist.pdf", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "C:\\Users\\Public\\mshta.exeir (copy)", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "%APPDATA%\\microsoft\\windows\\start menu\\programs\\help.lnk", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "%TEMP%\\box.lnk", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "C:\\users\\public\\scmp.exe", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "%APPDATA%\\microsoft\\windows\\start menu\\programs\\startup\\box.lnk", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "C:\\Users\\Administrator\\AppData\\Local\\Temp\\Password.txt.lnk", - "count": 2, - "total_related": 9, - "prevalence": 0.2222222222222222 - }, - { - "value": "C:\\Users\\Public\\mshta.exe", - "count": 2, - "total_related": 14, - "prevalence": 0.14285714285714285 - }, - { - "value": "C:\\Users\\user\\AppData\\Local\\Microsoft\\Windows\\INetCache\\IE\\R0IAZP7Z\\warning[1].htm", - "count": 2, - "total_related": 67, - "prevalence": 0.029850746268656716 - }, - { - "value": "CentralTable.ini", - "count": 2, - "total_related": 1437, - "prevalence": 0.0013917884481558804 - }, - { - "value": "C:\\Users\\Admin\\AppData\\Local\\Temp\\ArmUI.ini", - "count": 2, - "total_related": 25895, - "prevalence": 7.723498744931454e-5 - }, - { - "value": "C:\\Users\\Admin\\AppData\\Local\\Temp\\AdobeARM.log", - "count": 2, - "total_related": 25950, - "prevalence": 7.707129094412332e-5 - }, - { - "value": "c:\\users\\administrator\\appdata\\locallow\\microsoft\\cryptneturlcache\\content\\103621de9cd5414cc2538780b4b75751", - "count": 2, - "total_related": 50820, - "prevalence": 3.935458480913026e-5 - }, - { - "value": "c:\\users\\administrator\\appdata\\locallow\\microsoft\\cryptneturlcache\\metadata\\103621de9cd5414cc2538780b4b75751", - "count": 2, - "total_related": 56868, - "prevalence": 3.5169163677287755e-5 - }, - { - "value": "c:\\users\\administrator\\appdata\\locallow\\microsoft\\cryptneturlcache\\metadata\\644b8874112055b5e195ecb0e8f243a4", - "count": 2, - "total_related": 59048, - "prevalence": 3.387074922097277e-5 - }, - { - "value": "c:\\users\\administrator\\appdata\\locallow\\microsoft\\cryptneturlcache\\content\\644b8874112055b5e195ecb0e8f243a4", - "count": 2, - "total_related": 59425, - "prevalence": 3.365586874211191e-5 - }, - { - "value": "c:\\users\\administrator\\appdata\\locallow\\microsoft\\cryptneturlcache\\metadata\\e0f5c59f9fa661f6f4c50b87fef3a15a", - "count": 2, - "total_related": 69632, - "prevalence": 2.8722426470588235e-5 - }, - { - "value": "c:\\users\\administrator\\appdata\\locallow\\microsoft\\cryptneturlcache\\content\\e0f5c59f9fa661f6f4c50b87fef3a15a", - "count": 2, - "total_related": 72289, - "prevalence": 2.7666726611240993e-5 - }, - { - "value": "%TEMP%\\emmmx.js", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "%TEMP%\\hgnuuquzrw.vbs", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "%TEMP%\\hoqa.js", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "%TEMP%\\qwgrp.js", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "%TEMP%\\qwuidnvo.js", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "%TEMP%\\ulqxefgoii.vbs", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/Applications/Google Chrome.app/Contents/.Info.plist.E70Hsn", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/Applications/Google Chrome.app/Contents/.Info.plist.OOB5BB", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/Applications/Google Chrome.app/Contents/.PkgInfo.HZfmf1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/Applications/Google Chrome.app/Contents/.PkgInfo.pe49Rg", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/Applications/Google Chrome.app/Contents/.embedded.provisionprofile.MMm6X6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/Applications/Google Chrome.app/Contents/.embedded.provisionprofile.mfbNn4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/Applications/Google Chrome.app/Contents/Library/LaunchServices/.com.google.Chrome.UpdaterPrivilegedHelper.EDQ8oG", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/Applications/Google Chrome.app/Contents/Library/LaunchServices/.com.google.Chrome.UpdaterPrivilegedHelper.xMAeCq", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/Applications/Google Chrome.app/Contents/MacOS/.Google Chrome.1xTTZH", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/Applications/Google Chrome.app/Contents/MacOS/.Google Chrome.VZSkmJ", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/Applications/Google Chrome.app/Contents/Resources/.scripting.sdef.OnVEBg", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/Applications/Google Chrome.app/Contents/Resources/.scripting.sdef.jApuRj", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "%APPDATA%\\microsoft\\windows\\start menu\\programs\\startup\\sppedup.lnk", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "%TEMP%\\sppedup.lnk", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "%APPDATA%\\microsoft\\windows\\start menu\\programs\\startup\\help.lnk", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "%TEMP%\\msedge.lnk", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "%APPDATA%\\microsoft\\windows\\start menu\\programs\\startup\\msedge.lnk", - "count": 1, - "total_related": 33, - "prevalence": 0.030303030303030304 - }, - { - "value": "C:\\Users\\user\\AppData\\LocalLow\\Microsoft\\CryptnetUrlCache\\Content\\77EC63BDA74BD0D0E0426DC8F8008506", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "C:\\Users\\\\AppData\\Local\\Microsoft\\Windows\\PowerShell\\StartupProfileData-NonInteractive", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "C:\\Users\\user\\AppData\\LocalLow\\Adobe\\AcroCef\\DC\\Acrobat\\Cache\\LOG", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "C:\\Users\\user\\AppData\\LocalLow\\Adobe\\AcroCef\\DC\\Acrobat\\Cache\\LOG.old (copy)", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "C:\\Users\\\\AppData\\Local\\Adobe\\Acrobat\\DC\\SOPHIA\\Reader\\SOPHIA.json", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "C:\\Users\\user\\AppData\\Local\\Adobe\\Acrobat\\DC\\SOPHIA\\Reader\\SOPHIA.json", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "C:\\Users\\\\AppData\\Local\\Adobe\\Acrobat\\DC\\SOPHIA\\Reader\\Files\\TESTING", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "C:\\Users\\\\AppData\\Local\\Adobe\\Acrobat\\DC\\UserCache.bin", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "C:\\Users\\\\AppData\\Roaming\\Adobe\\Acrobat\\DC\\Security\\CRLCache\\915DEAC5D1E15E49646B8A94E04E470958C9BB89.crl", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "C:\\Users\\\\AppData\\Roaming\\Adobe\\Acrobat\\DC\\Security\\CRLCache\\DF22CF8B8C3B46C10D3D5C407561EABEB57F8181.crl", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "C:\\Users\\user\\AppData\\Local\\Temp\\unarchiver.log", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "C:\\Users\\user\\AppData\\Roaming\\Microsoft\\Office\\Recent\\attachment.LNK", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "C:\\Users\\\\AppData\\Local\\Microsoft\\Windows\\Temporary Internet Files\\Content.IE5\\2286DCMF\\AcroRdrDCUpd2200320282[1].msi", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "C:\\Users\\\\AppData\\Roaming\\Microsoft\\Templates\\Normal.dotm", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "C:\\Users\\Administrator\\AppData\\LocalLow\\Adobe\\Acrobat\\DC\\ReaderMessages", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "C:\\Users\\Administrator\\AppData\\Local\\Adobe\\Acrobat\\DC\\UserCache.bin", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "C:\\Users\\user\\AppData\\LocalLow\\Adobe\\AcroCef\\DC\\Acrobat\\Cache\\Code Cache\\js\\index-dir\\temp-index", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "C:\\Users\\user\\AppData\\LocalLow\\Adobe\\AcroCef\\DC\\Acrobat\\Cache\\Code Cache\\js\\index-dir\\the-real-index (copy)", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "C:\\Users\\user\\AppData\\Local\\Adobe\\Acrobat\\DC\\SOPHIA\\Reader\\Files\\DC_READER_LAUNCH_CARD", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "C:\\Users\\user\\AppData\\Local\\Adobe\\Acrobat\\DC\\SOPHIA\\Reader\\Files\\DC_Reader_RHP_Banner", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "C:\\Users\\user\\AppData\\Local\\Adobe\\Acrobat\\DC\\SOPHIA\\Reader\\Files\\DC_Reader_RHP_Retention", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "C:\\Users\\user\\AppData\\Local\\Adobe\\Acrobat\\DC\\SOPHIA\\Reader\\Files\\Edit_InApp_Aug2020", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "C:\\Users\\user\\AppData\\Roaming\\Microsoft\\Office\\Recent\\design.LNK", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "C:\\Users\\user\\AppData\\Roaming\\Microsoft\\Office\\Recent\\document.LNK", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "C:\\Users\\user\\AppData\\Roaming\\Microsoft\\Office\\Recent\\index.dat", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "C:\\Users\\user\\AppData\\Roaming\\Microsoft\\Templates\\Normal.dotm (copy)", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "C:\\Users\\user\\AppData\\Roaming\\Microsoft\\Templates\\~WRD0000.tmp", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "C:\\Windows\\Temp\\ArmReport.ini", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "C:\\Windows\\Temp\\ArmUI.ini", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "c:\\users\\administrator\\appdata\\locallow\\microsoft\\cryptneturlcache\\metadata\\94308059b57b3142e455b38a6eb92015", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "c:\\users\\administrator\\appdata\\roaming\\microsoft\\templates\\~$normal.dotm", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "edb.chk", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - } - ], - "exiftool_authors": [ - { - "value": "Marvin", - "count": 3, - "total_related": 995, - "prevalence": 0.003015075376884422 - }, - { - "value": "Pig", - "count": 2, - "total_related": 35, - "prevalence": 0.05714285714285714 - }, - { - "value": "David Martin", - "count": 2, - "total_related": 382, - "prevalence": 0.005235602094240838 - }, - { - "value": "Never3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Douglas Arner, Raphael Auer and Jon Frost", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "James Hokins", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "w7x64", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "Alex Hamilton", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "Wonder", - "count": 1, - "total_related": 21, - "prevalence": 0.047619047619047616 - }, - { - "value": "Christian", - "count": 1, - "total_related": 12422, - "prevalence": 8.050233456770246e-5 - }, - { - "value": "Microsoft Corporation", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "exiftool_create_dates": [ - { - "value": "2021:06:05 12:05:12+00:00", - "count": 13, - "total_related": 315, - "prevalence": 0.04126984126984127 - }, - { - "value": "2020:02:14 14:47:41+00:00", - "count": 12, - "total_related": 12, - "prevalence": 1.0 - }, - { - "value": "2015:10:30 07:18:41+00:00", - "count": 11, - "total_related": 12, - "prevalence": 0.9166666666666666 - }, - { - "value": "2020:02:17 06:46:36+00:00", - "count": 11, - "total_related": 12, - "prevalence": 0.9166666666666666 - }, - { - "value": "2015:10:30 08:18:41+01:00", - "count": 10, - "total_related": 13, - "prevalence": 0.7692307692307693 - }, - { - "value": "2020:02:14 15:47:41+01:00", - "count": 9, - "total_related": 9, - "prevalence": 1.0 - }, - { - "value": "2021:05:13 12:13:51+00:00", - "count": 8, - "total_related": 8, - "prevalence": 1.0 - }, - { - "value": "2019:03:19 04:45:40+00:00", - "count": 8, - "total_related": 97, - "prevalence": 0.08247422680412371 - }, - { - "value": "2020:02:13 02:10:28+00:00", - "count": 7, - "total_related": 8, - "prevalence": 0.875 - }, - { - "value": "2020:02:13 03:10:28+01:00", - "count": 7, - "total_related": 8, - "prevalence": 0.875 - }, - { - "value": "2019:12:07 09:09:39+00:00", - "count": 7, - "total_related": 1753, - "prevalence": 0.003993154592127781 - }, - { - "value": "2019:07:10 01:11:02+00:00", - "count": 6, - "total_related": 6, - "prevalence": 1.0 - }, - { - "value": "2019:07:10 03:11:02+02:00", - "count": 6, - "total_related": 6, - "prevalence": 1.0 - }, - { - "value": "2018:09:15 07:28:38+00:00", - "count": 6, - "total_related": 131, - "prevalence": 0.04580152671755725 - }, - { - "value": "2022:07:11 05:41:15+00:00", - "count": 5, - "total_related": 5, - "prevalence": 1.0 - }, - { - "value": "2019:03:19 05:45:40+01:00", - "count": 5, - "total_related": 21, - "prevalence": 0.23809523809523808 - }, - { - "value": "2018:09:15 08:28:38+01:00", - "count": 5, - "total_related": 49, - "prevalence": 0.10204081632653061 - }, - { - "value": "2021:05:19 05:58:00Z", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "2023:01:14 05:35:57+00:00", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "2021:02:07 03:17:58+00:00", - "count": 4, - "total_related": 5, - "prevalence": 0.8 - }, - { - "value": "2012:07:26 01:26:44+00:00", - "count": 4, - "total_related": 596, - "prevalence": 0.006711409395973154 - }, - { - "value": "2019:07:10 02:11:02+01:00", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "2021:04:22 03:38:09+00:00", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "2019:01:07 13:11:00", - "count": 3, - "total_related": 9, - "prevalence": 0.3333333333333333 - }, - { - "value": "2020:10:09 20:47:15+00:00", - "count": 3, - "total_related": 9, - "prevalence": 0.3333333333333333 - }, - { - "value": "2018:04:11 23:33:56+00:00", - "count": 3, - "total_related": 23, - "prevalence": 0.13043478260869565 - }, - { - "value": "2020:07:31 01:06:00Z", - "count": 3, - "total_related": 25, - "prevalence": 0.12 - }, - { - "value": "2018:09:15 09:28:38+02:00", - "count": 3, - "total_related": 161, - "prevalence": 0.018633540372670808 - }, - { - "value": "2019:09:23 12:56:43+00:00", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "2019:11:08 12:45:59+00:00", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "2019:11:08 13:45:59+01:00", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "2019:11:09 04:10:27+00:00", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "2022:10:20 01:23:23+00:00", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "2022:10:20 01:23:27+00:00", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "2018:11:19 13:10:00", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "2020:09:14 16:54:46+09:00", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "2018:04:12 00:33:56+01:00", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "2021:02:23 07:49:25+00:00", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "2018:04:12 01:33:56+02:00", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "2018:11:22 03:31:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2019:01:16 06:48:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2019:02:27 01:49:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2019:12:07 10:09:39+01:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2021:02:23 01:54:13+00:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2021:04:19 10:22:00Z", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2021:05:26 09:20:49+09:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2021:09:30 01:52:25+00:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2022:03:21 14:52:49+09:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2022:06:24 11:48:35+05:30", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2022:07:26 09:19:19+09:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2022:09:20 19:03:50+09:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2022:09:29 15:43:36+09:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2022:12:19 11:33:28+09:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2023:03:21 07:38:46", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2023:04:14 01:29:12+00:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2023:06:20 21:12:02+09:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2023:07:05 16:19:36+09:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2023:09:25 11:44:54+09:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2017:03:18 20:56:50+00:00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2018:09:15 09:29:18+02:00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2020:11:23 14:30:43+01:00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2023:04:14 01:28:58+00:00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2023:06:30 07:31:00Z", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2023:06:30 16:05:16+09:00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2017:03:18 21:56:50+01:00", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "2018:11:27 03:40:00", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "2020:08:19 13:04:00Z", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "2022:05:07 05:20:45+00:00", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "2011:10:31 04:17:45Z", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "2021:01:27 08:42:45", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "2019:06:13 00:52:00", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "2018:09:15 07:29:18+00:00", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "2019:12:07 09:10:18+00:00", - "count": 1, - "total_related": 28, - "prevalence": 0.03571428571428571 - }, - { - "value": "2009:12:11 11:47:44", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "exiftool_creators": [ - { - "value": "Pig", - "count": 4, - "total_related": 18, - "prevalence": 0.2222222222222222 - }, - { - "value": "Shangping Wang", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Douglas Arner, Raphael Auer and Jon Frost", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "business.gov.au", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - }, - { - "value": "Arbortext Advanced Print Publisher 11.0.3433/W Unicode", - "count": 1, - "total_related": 838, - "prevalence": 0.0011933174224343676 - }, - { - "value": "Microsoft\u00ae Word 2016", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - } - ], - "exiftool_last_printed": [ - { - "value": "2018:11:22 12:19:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2018:11:19 22:30:00Z", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2018:11:22 12:19:00Z", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "2014:07:30 02:39:01Z", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "0000:00:00 00:00:00", - "count": 8, - "total_related": 100000, - "prevalence": 8e-5 - }, - { - "value": "2009:12:11 11:47:44", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "exiftool_producers": [ - { - "value": "Adobe Acrobat Standard DC 20.9.20067", - "count": 1, - "total_related": 137, - "prevalence": 0.0072992700729927005 - }, - { - "value": "PDFlib+PDI 9.0.3p4 (C++/Win32)", - "count": 1, - "total_related": 1258, - "prevalence": 0.000794912559618442 - }, - { - "value": "Microsoft\u00ae Word 2016", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - } - ], - "exiftool_subjects": [ - { - "value": "(EMCO EVALUATION PACKAGE) - OneNote Product Update", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "IEEE Access; ;PP;99;10.1109/ACCESS.2019.2935873", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "HotCoin ICO Project", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "BIS Working Papers No 905, November 2020", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - } - ], - "exiftool_titles": [ - { - "value": "A Bitcoin price prediction model assuming oscillatory growth and lengthening cycles", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Smart Contract-Based Product Traceability System in the Supply Chain Scenario", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Job Description AnD REquirements", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "Stablecoins: risks, potential and regulation", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "Installation Database", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "filecondis_dhash": [ - { - "value": "def0a898a0808080", - "count": 9, - "total_related": 9, - "prevalence": 1.0 - }, - { - "value": "787c7c3c4c790800", - "count": 7, - "total_related": 68, - "prevalence": 0.10294117647058823 - }, - { - "value": "def0e898a0808080", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "fcecccc89e840680", - "count": 2, - "total_related": 9, - "prevalence": 0.2222222222222222 - }, - { - "value": "f0f0f89918000000", - "count": 2, - "total_related": 174, - "prevalence": 0.011494252873563218 - }, - { - "value": "f8f0b09888000000", - "count": 2, - "total_related": 6883, - "prevalence": 0.0002905709719599012 - }, - { - "value": "00343e1c1e0f1704", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "00343e1c2c2d1200", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "203c3e1c3e260700", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "203c3e3e1f270640", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "603c3e3e1e073400", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "747e3c1e1e262700", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "787c783c5d0c0400", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "9cdc9c8c8e868280", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "bcbebc9ebcc69482", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "bd00a48ab4a0a888", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "bd00b8aa90800080", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "be00aea8baa88996", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "c2e0800000008380", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "ce7ccedc9cce42a4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "d6d400c8d8c54614", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "dedcdedede8ec210", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "def0a89890808080", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "defe6cc28e66d786", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "eca098b88c880000", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "f4acf4c8d48a14c8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "f4fac4accea69484", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "f4fec4accea69484", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "00003c3c1e0f0204", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "787c7c7e2e6d1400", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "f0f8b81840000000", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "787e3e1e1e262308", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "8100008080809080", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "587c3c1e1e651010", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "f87c7c1c2d6c0000", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "707e3c1e1e260700", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "0038383d3c280000", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "d4da00d490c80480", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "990000989b008a8a", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "787c7c1c4d2e1000", - "count": 1, - "total_related": 16, - "prevalence": 0.0625 - }, - { - "value": "0028393820000000", - "count": 1, - "total_related": 18, - "prevalence": 0.05555555555555555 - }, - { - "value": "3018383818000000", - "count": 1, - "total_related": 27, - "prevalence": 0.037037037037037035 - }, - { - "value": "f87c7c1c4d6c0000", - "count": 1, - "total_related": 37, - "prevalence": 0.02702702702702703 - }, - { - "value": "787c3c1c1e262d00", - "count": 1, - "total_related": 46, - "prevalence": 0.021739130434782608 - }, - { - "value": "707c3e1c2c260900", - "count": 1, - "total_related": 48, - "prevalence": 0.020833333333333332 - }, - { - "value": "f8a0b0d898000000", - "count": 1, - "total_related": 50, - "prevalence": 0.02 - }, - { - "value": "00001c1e1a191000", - "count": 1, - "total_related": 65, - "prevalence": 0.015384615384615385 - }, - { - "value": "00003c1c1c091000", - "count": 1, - "total_related": 67, - "prevalence": 0.014925373134328358 - }, - { - "value": "00001c1e1e0f1204", - "count": 1, - "total_related": 71, - "prevalence": 0.014084507042253521 - }, - { - "value": "f8b09098a8000000", - "count": 1, - "total_related": 98, - "prevalence": 0.01020408163265306 - }, - { - "value": "f8e098a898000000", - "count": 1, - "total_related": 136, - "prevalence": 0.007352941176470588 - }, - { - "value": "0000381c1c091000", - "count": 1, - "total_related": 146, - "prevalence": 0.00684931506849315 - }, - { - "value": "0000001e0e0b0604", - "count": 1, - "total_related": 159, - "prevalence": 0.006289308176100629 - }, - { - "value": "f8a0908888000000", - "count": 1, - "total_related": 219, - "prevalence": 0.0045662100456621 - }, - { - "value": "000000000c0e0108", - "count": 1, - "total_related": 227, - "prevalence": 0.004405286343612335 - }, - { - "value": "787c3c3c1c510800", - "count": 1, - "total_related": 276, - "prevalence": 0.0036231884057971015 - }, - { - "value": "00303c3c3c2d2000", - "count": 1, - "total_related": 341, - "prevalence": 0.002932551319648094 - }, - { - "value": "787c3c1c1e060900", - "count": 1, - "total_related": 390, - "prevalence": 0.002564102564102564 - }, - { - "value": "0c0c0c0c0c0c0000", - "count": 1, - "total_related": 437, - "prevalence": 0.002288329519450801 - }, - { - "value": "f0f8781849000000", - "count": 1, - "total_related": 439, - "prevalence": 0.002277904328018223 - }, - { - "value": "7078785899000000", - "count": 1, - "total_related": 461, - "prevalence": 0.0021691973969631237 - }, - { - "value": "f878783809000000", - "count": 1, - "total_related": 501, - "prevalence": 0.001996007984031936 - }, - { - "value": "d8f0b09890000000", - "count": 1, - "total_related": 506, - "prevalence": 0.001976284584980237 - }, - { - "value": "f8d0b0b888000000", - "count": 1, - "total_related": 507, - "prevalence": 0.0019723865877712033 - }, - { - "value": "787c7c3c4c390800", - "count": 1, - "total_related": 597, - "prevalence": 0.0016750418760469012 - }, - { - "value": "787c3c1c1e260900", - "count": 1, - "total_related": 630, - "prevalence": 0.0015873015873015873 - }, - { - "value": "f8a0b08888000000", - "count": 1, - "total_related": 671, - "prevalence": 0.0014903129657228018 - }, - { - "value": "787c7c3c0c4d0000", - "count": 1, - "total_related": 784, - "prevalence": 0.0012755102040816326 - }, - { - "value": "0000000c06070600", - "count": 1, - "total_related": 1032, - "prevalence": 0.0009689922480620155 - }, - { - "value": "f8a0b09890000000", - "count": 1, - "total_related": 1120, - "prevalence": 0.0008928571428571428 - }, - { - "value": "7878787849000000", - "count": 1, - "total_related": 1375, - "prevalence": 0.0007272727272727272 - }, - { - "value": "787c7c3c4c590800", - "count": 1, - "total_related": 1423, - "prevalence": 0.0007027406886858749 - }, - { - "value": "000000080f0d0908", - "count": 1, - "total_related": 1750, - "prevalence": 0.0005714285714285715 - }, - { - "value": "f8b0b09890000000", - "count": 1, - "total_related": 1953, - "prevalence": 0.0005120327700972862 - }, - { - "value": "000000000e0f0502", - "count": 1, - "total_related": 2023, - "prevalence": 0.0004943153732081067 - }, - { - "value": "f8e0b09888000000", - "count": 1, - "total_related": 2114, - "prevalence": 0.0004730368968779565 - }, - { - "value": "c0c0000000000080", - "count": 1, - "total_related": 2335, - "prevalence": 0.00042826552462526765 - }, - { - "value": "0000001e1e1e1b00", - "count": 1, - "total_related": 4860, - "prevalence": 0.00020576131687242798 - }, - { - "value": "000000000e0e0b08", - "count": 1, - "total_related": 9183, - "prevalence": 0.00010889687465969727 - }, - { - "value": "000000080e0e0b08", - "count": 1, - "total_related": 16416, - "prevalence": 6.0916179337231965e-5 - }, - { - "value": "f0e0b09100000000", - "count": 1, - "total_related": 19935, - "prevalence": 5.016302984700276e-5 - }, - { - "value": "000000000c0f0c00", - "count": 1, - "total_related": 22718, - "prevalence": 4.401795932740558e-5 - }, - { - "value": "0000000006070504", - "count": 1, - "total_related": 23851, - "prevalence": 4.1926963230053246e-5 - }, - { - "value": "000000080e0f0e00", - "count": 1, - "total_related": 30076, - "prevalence": 3.32491022742386e-5 - }, - { - "value": "000000080d0c0800", - "count": 1, - "total_related": 31018, - "prevalence": 3.22393448965117e-5 - }, - { - "value": "0000000c0f0c0800", - "count": 1, - "total_related": 34079, - "prevalence": 2.9343584025352856e-5 - }, - { - "value": "0000000c0d0c0800", - "count": 1, - "total_related": 50707, - "prevalence": 1.972114303745045e-5 - }, - { - "value": "000000080d080000", - "count": 1, - "total_related": 94735, - "prevalence": 1.0555760806460125e-5 - }, - { - "value": "0000000000020300", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": "0000000000020302", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "0000000000000302", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "0000000000000300", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "0000000000070600", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "0000000000000100", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "0000000000030302", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "0000000000070604", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "0000000004050000", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "0000000004070400", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "0000000006070600", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "000000000c0d0000", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "netassembly_mvid": [ - { - "value": "4fb0c65c-9ed1-4f34-961d-5b2106bab3ad", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - } - ], - "office_application_names": [ - { - "value": "Windows Installer XML Toolset (3.10.1.2213)", - "count": 1, - "total_related": 9527, - "prevalence": 0.00010496483677967881 - }, - { - "value": "Microsoft Office Word", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": "Microsoft Excel", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "office_authors": [ - { - "value": "Rodrigas Hames", - "count": 4, - "total_related": 13, - "prevalence": 0.3076923076923077 - }, - { - "value": "Kevin Buchli", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "James Hokins", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "Easter", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "w7x64", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - }, - { - "value": "Emperor", - "count": 1, - "total_related": 16, - "prevalence": 0.0625 - } - ], - "office_creation_datetimes": [ - { - "value": "2019-01-07 14:11:00", - "count": 3, - "total_related": 6, - "prevalence": 0.5 - }, - { - "value": "2019-01-07 13:11:00", - "count": 3, - "total_related": 8, - "prevalence": 0.375 - }, - { - "value": "2018-11-19 14:10:00", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "2018-11-19 13:10:00", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "2018-11-19 05:10:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2019-01-16 06:48:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2023-03-21 07:38:46", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2018-11-22 03:31:00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2018-11-22 04:31:00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2018-11-27 03:40:00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2019-02-27 01:49:00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2019-02-27 02:49:00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2018-11-27 04:40:00", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "2019-01-16 07:48:00", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "2019-06-13 02:52:00", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "2019-06-13 00:52:00", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "2021-01-27 08:42:45", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "2009-12-11 11:47:44", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "office_last_saved": [ - { - "value": "2018-11-19 05:44:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2018-12-01 15:12:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2019-03-17 15:15:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2019-05-03 05:46:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2019-06-12 04:42:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2023-03-21 07:38:46", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2018-12-01 16:12:00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2019-01-16 08:48:00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2019-02-27 01:49:00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2019-03-17 14:15:00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2019-05-03 04:46:00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2019-05-03 06:46:00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2019-06-12 02:42:00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2019-06-12 03:42:00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2018-11-19 14:44:00", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "2018-11-20 12:28:00", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "2019-01-07 16:48:00", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "2019-01-16 07:48:00", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "2019-02-27 02:49:00", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "2019-01-07 17:48:00", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "2018-11-19 13:44:00", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "2018-11-20 11:28:00", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "2019-12-02 16:25:00", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "2021-03-25 01:52:02", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "2019-12-02 15:25:00", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "2020-09-18 14:06:51", - "count": 1, - "total_related": 62225, - "prevalence": 1.6070711128967456e-5 - } - ], - "office_macro_names": [ - { - "value": "NewMacros.bas", - "count": 10, - "total_related": 76081, - "prevalence": 0.00013143886121370644 - } - ], - "pe_info_imports": [ - { - "value": "KERNEL32.dll", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": "USER32.dll", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "SHELL32.dll", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "mscoree.dll", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "pe_info_exports": [ - { - "value": "DllFunc_2", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "DllFunc", - "count": 3, - "total_related": 736, - "prevalence": 0.004076086956521739 - } - ], - "pe_info_section_md5": [ - { - "value": "1ee852b454427f26c87bd10a72f8b363", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "9d8b1f976c7cac7dde65f4888decb0c0", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "ca2fedb488296f04d3198fe56edab8fc", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "dee011295e85eff8496e4ff3f562cb90", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "e6adccb514ec4232af591eaa3596af36", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "2a4b83ae293411aa4eda3b98c7e48479", - "count": 4, - "total_related": 5, - "prevalence": 0.8 - }, - { - "value": "69e21c2ab2503129ef6d2f13cc538014", - "count": 4, - "total_related": 18780, - "prevalence": 0.00021299254526091586 - }, - { - "value": "05b3c0354acc9ebc0f1e7e198b1dc30f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "06c52cef077bf5c0fd3360fc6827f93f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1033465c3180268dc3c2bf86ba8bfc39", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2dd793dc4a27d2cd2341689b0c0795c4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2e37599c41ede6e2f70915f45893493d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2ea6c01c293c730a51dd94db464c8a61", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "30546cbc21a54581f55282af4b60dcee", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "35850188966647dfb0642178215cf9dd", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "55aeb46637035c139ce3cdf6da717bbe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5b9569be766145198e205411ad626177", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "6f935b719b876e9d920491e3df2afa8c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "7a25d0da2e2a955ce835281869b250fa", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "7d5725a7311b33eeea1e74891c96fb23", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "82aa66441860b6edc367842bde3cced9", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "878bbdba92981286be1d77c720657e27", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "99e51e2c746bb231ac7c38c51ef6571d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "a0d1c800ffb6414c094cf44bafa196dc", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "afe6d3e59c25cb50acb052682e3f869d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "b29c4f2b895d0c9f725005b361221963", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "c1e959bcb590b167827ec4579a7907c1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "c276a3dd355b9310c2fbd9fc2de115d0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "d0ece0fc3aeaef3ac4cba3d55cada5d0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "e2af512e6a8324ddc7a74d17e6be4816", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "eb3c1a5c13a43e7b8b571db2cc76e115", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "ef740cf0510a522ff030ff0b4239548a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "f74b76872b9c7418666ff261a392c17d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "228135d44a0d18f7956e8791e0090139", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "4aa09cc7047e9d6b8c4ddeafb9f6ec28", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "6074cbe3899827ec5efae4bc8f8c12df", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "0998013e4c93a93ee44c1ea6f7bf2fb2", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "0b8e1b97130125217314467e974a9d6e", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "9ed3d5065aa72d8422c2fbef210746ba", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "e37be6610bb80ee57722b20405160ce4", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "e3874d44b8936c0dde648608ca057ae8", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "801d2498fc10fdf859df48863bcac421", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "8bf4e9439d44124a3aa927ec8fb3d64e", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "5799024abe8918f1bfa36184590cedf5", - "count": 1, - "total_related": 703, - "prevalence": 0.001422475106685633 - }, - { - "value": "af4c8818534cc8fb1e04e8b7f731187b", - "count": 1, - "total_related": 11690, - "prevalence": 8.554319931565441e-5 - }, - { - "value": "94a4bdad46cd2ba4a61ce55d564521bf", - "count": 1, - "total_related": 17644, - "prevalence": 5.667649059170256e-5 - }, - { - "value": "bf619eac0cdf3f68d496ea9344137e8b", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "d41d8cd98f00b204e9800998ecf8427e", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "pe_info_section_names": [ - { - "value": ".text", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": ".reloc", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": ".rsrc", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": ".data", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": ".pdata", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": ".rdata", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": "_RDATA", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": ".gfids", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": ".idata", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "pwdinfo_values": [ - { - "value": "$office$*2013*100000*256*16*08090a4dd14800b2112500e771b8aad4*c15bc349b4ed3495cdc078248c916cec*f319c40704622974350f1902280fa0bea0ce1b793a342d2ea25c37d54ef2103a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "$office$*2013*100000*256*16*16b431834411ec6e956a0191ba9d08bb*2465dc5fd7383385436c97c00e506be8*b1c027146473a52317d033caf7381054306ea2435e84350879a0992b2b7062c8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "$office$*2013*100000*256*16*34bdd763ddfb9b93d0e20eeab45908ff*d553c4e053c44a2a1ae177a45d4490ef*4d6f8d1e1f550364c81a1b3253e895449b957ab030f618b1b02d0ff4bc8b3524", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "$office$*2013*100000*256*16*375579eba9653ca46653e7355131d1ef*65284b8cf4602692cc1d46d4b3420fa5*86a0484ab5f42d78039578d13030ce5e67f034adaa7ce62088167b6d902c690f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "$office$*2013*100000*256*16*4fd6ea7275e5409d21e5d161b27e5275*2b931be08204001246bbeab723c0cbe5*d33d6fe401d2c9ff4200de8fda91f5bf1d5826e65d86874609f6e5c16d036e19", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "$office$*2013*100000*256*16*620869196c7ec59d13e332256ba76d72*5ef805b5fb2e078f36ab8c28b73a0034*8006449cc14e8a47a1b832f86b43ca43ab153fc43f1eab5ab20afd2b7d60d1fc", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "$office$*2013*100000*256*16*6c5762d139db5ca552312de9ec305f96*d38fbadc0492974ba9ffb3b8ddcfce8f*cc8cb2e5fe028d0900c49f3532a2414eb57559c38742ca2d9e50911328cb90be", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "$office$*2013*100000*256*16*6d13288fb4e61014111b997bde8ce812*e3741db5df5ea4ebca552159de4cb414*6c1ec0bc1516b5f3a4477807e6ef81989df76a5bad83ca606dfc33cc5bdcf066", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "$office$*2013*100000*256*16*717e57a7aaa7e3f63c13eb232174e681*c6fe1b387265015b182ded15c3e2cb61*2b5e27d06a2496123d4f81e6dca53b77aecfd6fc195eeed9399f24a623ab5143", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "$office$*2013*100000*256*16*84e3072ac10d12b07df39db137414f0e*74ec5edbc06aea03a43f3cfdf29b92e0*ab61fd079c93801f03a2e9c2882d6f0379ef6ef7cd79522e46eafa2e1189ba40", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "$office$*2013*100000*256*16*9cc3c0f374a78b8cddfaa35598f970e7*3fcd2133e50e86f21fda45d8566804f2*071921bef2aacd2b764d660193f41b245c1b84488703ee1257767b2c302ce73e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "$office$*2013*100000*256*16*b9695c54d7d4ac583c4da3b8cc5035bf*dbe3faf3a649f16fae054ba8041ad36c*f49f3608a3176527c9e0aad9becd39e730b36c9eb0b0808fc9fb7dcfd1f98227", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "$office$*2013*100000*256*16*dbdbf3f87c33f43edde3d09fe9ca98e2*f74cbd3ccb465506b1f94f7afbe5faa3*89a8c6920c6427e2e6d3a6ccbcad2f85f603d30a92f5c68ba7c5be20b7ab4028", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "$office$*2013*100000*256*16*eaeff56d33cf3a1190e6c3baaf37f42d*3ad6ad0f63f71bf338b355eafda60c4d*0e20e957ca9667bb06a6fe7f34e222f827b624405d19ba577313aa124074f846", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "$office$*2013*100000*256*16*03467a674edddf8a996533ef53916d68*94505211445b360d93cb83e5552cb160*da5b9b348dfcd7f6eedd06670d5e254567845d17b7195169fb051ce16054e45a", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "$office$*2013*100000*256*16*b35a2225089b53a80228c8cce279663a*c5f9e10597712e4a236dab70857194f9*da84360c7bb44620b724ef88388dc7fbe1be469df895921ec1f2b7e39e24d5ee", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - } - ], - "sandbox_verdicts": [ - { - "value": "Malware", - "count": 119, - "sandbox_name": "DAS-Security Orcas" - }, - { - "value": "Clean", - "count": 76, - "sandbox_name": "DAS-Security Orcas" - }, - { - "value": "Clean", - "count": 48, - "sandbox_name": "Zenbox" - }, - { - "value": "Malware", - "count": 47, - "sandbox_name": "C2AE" - }, - { - "value": "Malware", - "count": 34, - "sandbox_name": "Yomi Hunter" - }, - { - "value": "Clean", - "count": 33, - "sandbox_name": "OS X Sandbox" - }, - { - "value": "Malware", - "count": 31, - "sandbox_name": "Dr.Web vxCube" - }, - { - "value": "Malware", - "count": 16, - "sandbox_name": "SecneurX" - }, - { - "value": "Malware", - "count": 16, - "sandbox_name": "Zenbox" - }, - { - "value": "Ransom", - "count": 14, - "sandbox_name": "Zenbox" - }, - { - "value": "Clean", - "count": 11, - "sandbox_name": "Zenbox macOS" - }, - { - "value": "Clean", - "count": 10, - "sandbox_name": "SecneurX" - }, - { - "value": "Evader", - "count": 10, - "sandbox_name": "Zenbox" - }, - { - "value": "Malware", - "count": 8, - "sandbox_name": "DOCGuard" - }, - { - "value": "Malware", - "count": 8, - "sandbox_name": "Lastline" - }, - { - "value": "Exploit", - "count": 7, - "sandbox_name": "Dr.Web vxCube" - }, - { - "value": "Clean", - "count": 5, - "sandbox_name": "Zenbox Linux" - }, - { - "value": "Trojan", - "count": 5, - "sandbox_name": "Zenbox" - }, - { - "value": "Malware", - "count": 3, - "sandbox_name": "OS X Sandbox" - }, - { - "value": "Trojan", - "count": 3, - "sandbox_name": "OS X Sandbox" - }, - { - "value": "Clean", - "count": 3, - "sandbox_name": "Yomi Hunter" - }, - { - "value": "Trojan", - "count": 2, - "sandbox_name": "Lastline" - }, - { - "value": "Evader", - "count": 2, - "sandbox_name": "OS X Sandbox" - }, - { - "value": "Malware", - "count": 2, - "sandbox_name": "ReaQta-Hive" - }, - { - "value": "Malware", - "count": 2, - "sandbox_name": "SecondWrite" - }, - { - "value": "Trojan", - "count": 2, - "sandbox_name": "SecondWrite" - }, - { - "value": "Malware", - "count": 1, - "sandbox_name": "BitDam ATP" - }, - { - "value": "Clean", - "count": 1, - "sandbox_name": "DOCGuard" - }, - { - "value": "Ransom", - "count": 1, - "sandbox_name": "OS X Sandbox" - }, - { - "value": "Clean", - "count": 1, - "sandbox_name": "SecondWrite" - }, - { - "value": "Spreader", - "count": 1, - "sandbox_name": "VMRay" - } - ], - "signature_info_copyrights": [ - { - "value": "Copyright \u00a9 2023", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "signature_info_descriptions": [ - { - "value": "ZXing.Common", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - } - ], - "signature_info_internal_names": [ - { - "value": "ZXing.Common.dll", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - } - ], - "signature_info_original_names": [ - { - "value": "ZXing.Common.dll", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - } - ], - "signature_info_products": [ - { - "value": "ZXing.Common", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - } - ], - "symhash": [ - { - "value": "b6232aec3cbf2d707e2589e6f7a6d9d9", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "21f2fe50681644f68b65c2c39008b109", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "36ed93aa94af4542a590f50ce6fe50ae", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "3906bad88d7793cf66f227699b643d52", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "3b84cb3e259307fef7573614fe642d05", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "76c27fda2f5f7500b62e406cffdb81de", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "820d5607cd13db1a73696cd21fa75846", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "baf758c0c9e1ab94befa0e4eb5ce91a8", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "c9c2b1878ffcac432506397c5b998310", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "d0d3c332eaf76287b16a77da78114430", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "daa8f90922fba00645999a4befcaf806", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "d9a8404e0b917ecad73a13ecc574e6b1", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "006dcc6ffd67d23d98460a1e43be3cb0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "15bbb392fa72d45b42d869851f1955ba", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2db44cdee4beec4abfc67b8c1543f532", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2dd3316208f894cd311261ec59e247c4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5005f829f9355fbf0f5c8b35852daab6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cb593e14a89e9b5e6b8af978b5b53f67", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0a7c29d82c5788fad2537b77da09347c", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "4ccef98a6e90ddf0c1107cee698e3876", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "b90af07bd2259580d8364486fb2eeb28", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "dc2fc78d0ec5c9968205e7003c04274f", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "ebc537979404949455645b2cc5286947", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "fa68827cbe5748385aad3e0179076f8c", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "e999776af01852fdad0a50d52b9917e3", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "5ba8dbd0b36adecb923735f08cfc0968", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "7cf373f4df5c6f087db17254a23260e9", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - } - ], - "trusted_verdict_filenames": [ - { - "value": "Lzma.dll.config", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - } - ], - "rich_pe_header_hash": [ - { - "value": "fd0455e92fc7bdbfcd25525e363c7582", - "count": 4, - "total_related": 5, - "prevalence": 0.8 - }, - { - "value": "adfcdffa1a8040dc09564330361c3af4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "c164cf512c87abcda41618e279b4c30b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "dddb608e4fe0af52bc3989321090b4ac", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "84f6499eb66496adac387d02573ae890", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - } - ], - "popular_threat_category": [ - { - "value": "trojan", - "count": 534 - }, - { - "value": "downloader", - "count": 432 - }, - { - "value": "dropper", - "count": 26 - } - ], - "popular_threat_name": [ - { - "value": "winlnk", - "count": 177 - }, - { - "value": "nukesped", - "count": 163 - }, - { - "value": "nioc", - "count": 127 - } - ], - "suggested_threat_label": "trojan.winlnk/nukesped", - "attack_techniques": [ - { - "value": "T1497.003", - "count": 41, - "total_related": 94867, - "prevalence": 0.0004321840049753866 - }, - { - "value": "T1218.005", - "count": 30, - "total_related": 13070, - "prevalence": 0.0022953328232593728 - }, - { - "value": "T1546.006", - "count": 5, - "total_related": 90645, - "prevalence": 5.516024049864857e-5 - }, - { - "value": "T1036.001", - "count": 5, - "total_related": 94548, - "prevalence": 5.2883191606379826e-5 - }, - { - "value": "T1559.002", - "count": 4, - "total_related": 36154, - "prevalence": 0.00011063782707307629 - }, - { - "value": "T1546.001", - "count": 4, - "total_related": 41765, - "prevalence": 9.577397342272237e-5 - }, - { - "value": "T1059.002", - "count": 3, - "total_related": 38062, - "prevalence": 7.88187693762808e-5 - }, - { - "value": "T1550.004", - "count": 3, - "total_related": 39676, - "prevalence": 7.561246093356185e-5 - }, - { - "value": "T1574.008", - "count": 2, - "total_related": 3881, - "prevalence": 0.000515331100231899 - }, - { - "value": "T1543.004", - "count": 2, - "total_related": 23807, - "prevalence": 8.400890494392406e-5 - }, - { - "value": "T1543.001", - "count": 2, - "total_related": 51219, - "prevalence": 3.904800952771433e-5 - }, - { - "value": "T1078", - "count": 2, - "total_related": 70752, - "prevalence": 2.8267752148349163e-5 - }, - { - "value": "T1553.004", - "count": 2, - "total_related": 87567, - "prevalence": 2.2839654207635296e-5 - }, - { - "value": "T1036.003", - "count": 1, - "total_related": 4903, - "prevalence": 0.00020395676116663266 - }, - { - "value": "T1569.001", - "count": 1, - "total_related": 19350, - "prevalence": 5.167958656330749e-5 - }, - { - "value": "T1022", - "count": 1, - "total_related": 42759, - "prevalence": 2.3386889309852897e-5 - }, - { - "value": "T1082", - "count": 91, - "total_related": 100000, - "prevalence": 0.00091 - }, - { - "value": "T1036", - "count": 75, - "total_related": 100000, - "prevalence": 0.00075 - }, - { - "value": "T1114", - "count": 55, - "total_related": 100000, - "prevalence": 0.00055 - }, - { - "value": "T1071", - "count": 54, - "total_related": 100000, - "prevalence": 0.00054 - }, - { - "value": "T1573", - "count": 47, - "total_related": 100000, - "prevalence": 0.00047 - }, - { - "value": "T1518", - "count": 45, - "total_related": 100000, - "prevalence": 0.00045 - }, - { - "value": "T1095", - "count": 43, - "total_related": 100000, - "prevalence": 0.00043 - }, - { - "value": "T1083", - "count": 36, - "total_related": 100000, - "prevalence": 0.00036 - }, - { - "value": "T1120", - "count": 27, - "total_related": 100000, - "prevalence": 0.00027 - }, - { - "value": "T1518.001", - "count": 27, - "total_related": 100000, - "prevalence": 0.00027 - }, - { - "value": "T1018", - "count": 26, - "total_related": 100000, - "prevalence": 0.00026 - }, - { - "value": "T1057", - "count": 26, - "total_related": 100000, - "prevalence": 0.00026 - }, - { - "value": "T1055", - "count": 24, - "total_related": 100000, - "prevalence": 0.00024 - }, - { - "value": "T1564.001", - "count": 18, - "total_related": 100000, - "prevalence": 0.00018 - }, - { - "value": "T1564.003", - "count": 17, - "total_related": 100000, - "prevalence": 0.00017 - }, - { - "value": "T1064", - "count": 16, - "total_related": 100000, - "prevalence": 0.00016 - }, - { - "value": "T1005", - "count": 14, - "total_related": 100000, - "prevalence": 0.00014 - }, - { - "value": "T1012", - "count": 14, - "total_related": 100000, - "prevalence": 0.00014 - }, - { - "value": "T1070.006", - "count": 14, - "total_related": 100000, - "prevalence": 0.00014 - }, - { - "value": "T1497", - "count": 13, - "total_related": 100000, - "prevalence": 0.00013 - }, - { - "value": "T1059", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "T1106", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "T1203", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "T1027", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": "T1553.002", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": "T1574.002", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": "T1564", - "count": 8, - "total_related": 100000, - "prevalence": 8e-5 - }, - { - "value": "T1070.004", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "T1218.011", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "T1562.001", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "T1129", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "T1010", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "T1221", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "T1222", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "T1539", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "T1547.011", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "T1614.001", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "T1055.011", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "T1105", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "T1548", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "T1566.002", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "T1571", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "T1048", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "T1070", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "T1071.001", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "T1140", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "T1202", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "T1543.003", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "T1569.002", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "T1622", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "T1003", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "T1036.005", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "T1124", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "T1218", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "T1485", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "T1547.001", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "T1562", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "T1014", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "T1016", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "T1027.005", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "T1033", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "T1046", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "T1047", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "T1056", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "T1059.001", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "T1089", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "T1091", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "T1158", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "T1185", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "T1189", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "T1496", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "T1542", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "T1542.003", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "T1543.002", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "T1552", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "T1552.001", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "T1555", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "T1555.003", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "T1559.001", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "T1560", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "T1565", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "malware_config_family_name": [ - { - "value": "sparkrat", - "count": 1, - "total_related": 386, - "prevalence": 0.0025906735751295338 - } - ], - "malware_config_c2_url": [ - { - "value": "http://51.79.133.76:8000/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - } - ], - "malware_config_host_port": [ - { - "value": "51.79.133.76:8000", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - } - ], - "memory_pattern_urls": [ - { - "value": "http://buy2x.com/OcMySY5QNkY/ABcTDInKWw/4SqSYtx+/EKfP7saoiP/BcA==", - "count": 9, - "total_related": 11, - "prevalence": 0.8181818181818182 - }, - { - "value": "https://docs.rs/tauri/1/tauri/scope/struct.IpcScope.html", - "count": 7, - "total_related": 13622, - "prevalence": 0.0005138746145940391 - }, - { - "value": "https://tauri.app/v1/api/config/", - "count": 7, - "total_related": 13952, - "prevalence": 0.0005017201834862386 - }, - { - "value": "https://tauri.app/docs/api/config", - "count": 7, - "total_related": 15984, - "prevalence": 0.00043793793793793793 - }, - { - "value": "https://github.com/tauri-apps/tauri/issues/8306", - "count": 7, - "total_related": 17830, - "prevalence": 0.0003925967470555244 - }, - { - "value": "https://github.com/tauri-apps/tauri/issues/2549", - "count": 7, - "total_related": 21821, - "prevalence": 0.00032079189771321205 - }, - { - "value": "http://matuaner.com/kgtjixwidu", - "count": 5, - "total_related": 6, - "prevalence": 0.8333333333333334 - }, - { - "value": "http://matuaner.com/kgtjixwiduCould", - "count": 5, - "total_related": 6, - "prevalence": 0.8333333333333334 - }, - { - "value": "https://substrate.office.com/search/api/v2/init", - "count": 4, - "total_related": 68758, - "prevalence": 5.81750487216033e-5 - }, - { - "value": "https://outlook.office.com/", - "count": 4, - "total_related": 85838, - "prevalence": 4.659940818751602e-5 - }, - { - "value": "https://docs.rs/getrandom", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "http://weather.service.msn.com/data.aspx", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://analysis.windows.net/powerbi/api", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://apc.learningtools.onenote.com/learningtoolsapi/v2.0/getfreeformspeech", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://api.aadrm.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://api.addins.omex.office.net/api/addins/search", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://api.addins.omex.office.net/appinfo/query", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://api.addins.store.officeppe.com/addinstemplate", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://api.diagnosticssdf.office.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://api.diagnosticssdf.office.com/v2/feedback", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://api.microsoftstream.com/api/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://api.office.net/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://api.powerbi.com/v1.0/myorg/groups", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://apis.live.net/v5.0/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://asgsmsproxyapi.azurewebsites.net/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://autodiscover-s.outlook.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://autodiscover-s.outlook.com/autodiscover/autodiscover.xml", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://clients.config.office.net/user/v1.0/ios", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://clients.config.office.net/user/v1.0/tenantassociationkey", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://cloudfiles.onenote.com/upload.aspx", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://consent.config.office.com/consentcheckin/v1.0/consents", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://cortana.ai/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://cr.office.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://d.docs.live.net/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://dataservice.o365filtering.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://dataservice.protection.outlook.com/PsorWebService/v1/ClientSyncFile/MipPolicies", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://dev.virtualearth.net/REST/V1/GeospatialEndpoint/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://dev0-api.acompli.net/autodetect", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://entitlement.diagnosticssdf.office.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://eur.learningtools.onenote.com/learningtoolsapi/v2.0/getfreeformspeech", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://globaldisco.crm.dynamics.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://graph.ppe.windows.net/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://graph.windows.net/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://incidents.diagnostics.office.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://incidents.diagnosticssdf.office.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://insertmedia.bing.office.net/images/hosted?host=office&adlt=strict&hostType=Immersive", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://insertmedia.bing.office.net/images/officeonlinecontent/browse?cp=Flickr", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://insertmedia.bing.office.net/odc/insertmedia", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://learningtools.onenote.com/learningtoolsapi/v2.0/Getvoices", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://login.microsoftonline.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47/oauth2/authorize", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://lookup.onenote.com/lookup/geolocation/v1", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://make.powerautomate.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://management.azure.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://messaging.engagement.office.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://messaging.lifecycle.office.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://my.microsoftpersonalcontent.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://nam.learningtools.onenote.com/learningtoolsapi/v2.0/getfreeformspeech", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://ofcrecsvcapi-int.azurewebsites.net/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://officeci.azurewebsites.net/api/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://officemobile.uservoice.com/forums/929800-office-app-ios-and-ipad-asks", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://officesetup.getmicrosoftkey.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://onedrive.live.com/about/download/?windows10SyncClientInstalled=false", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://outlook.office.com/autosuggest/api/v1/init?cvid=", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://outlook.office365.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://outlook.office365.com/api/v1.0/me/Activities", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://outlook.office365.com/autodiscover/autodiscover.json", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://outlook.office365.com/connectors", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://pf.directory.live.com/profile/mine/System.ShortCircuitProfile.json", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://portal.office.com/account/?ref=ClientMeControl", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://powerlift-frontdesk.acompli.net/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://powerlift.acompli.net/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://powerpoint.uservoice.com/forums/288952-powerpoint-for-ipad-iphone-ios", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://prod-global-autodetect.acompli.net/autodetect", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://pushchannel.1drv.ms/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://res.getmicrosoftkey.com/api/redemptionevents", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://rpsticket.partnerservices.getmicrosoftkey.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://shell.suite.office.com:1443/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://sr.outlook.office.net/ws/speech/recognize/assistant/work", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://store.office.cn/addinstemplate", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://substrate.office.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://syncservice.protection.outlook.com/PolicySync/PolicySync.svc/SyncFile", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://useraudit.o365auditrealtimeingestion.manage.office.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://web.microsoftstream.com/video/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://webdir.online.lync.com/autodiscover/autodiscoverservice.svc/root/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://word.uservoice.com/forums/304948-word-for-ipad-iphone-ios", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://www.odwebp.svc.ms/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://www.yammer.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "https://clients.config.office.net/c2r/v1.0/DeltaAdvisory", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "https://clients.config.office.net/user/v1.0/android/policies", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "https://edge.skype.com/registrar/prod", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "https://edge.skype.com/rps", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "https://entitlement.diagnostics.office.com/", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "https://ic3.teams.office.com/", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "https://messagebroker.mobile.m365.svc.cloud.microsoft/", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "https://officepyservice.office.net/service.functionality", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "https://otelrules.svc.static.microsoft/", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "https://pf.directory.live.com/profile/mine/WLX.Profiles.IC.json", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "https://safelinks.protection.outlook.com/api/GetPolicy", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "https://tasks.office.com/", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - } - ], - "attack_tactics": [ - { - "value": "TA0007", - "count": 948 - }, - { - "value": "TA0005", - "count": 697 - }, - { - "value": "TA0011", - "count": 289 - }, - { - "value": "TA0002", - "count": 176 - }, - { - "value": "TA0009", - "count": 155 - }, - { - "value": "TA0004", - "count": 128 - }, - { - "value": "TA0003", - "count": 62 - }, - { - "value": "TA0006", - "count": 24 - }, - { - "value": "TA0008", - "count": 14 - }, - { - "value": "TA0040", - "count": 13 - }, - { - "value": "TA0010", - "count": 11 - }, - { - "value": "TA0001", - "count": 4 - } - ], - "parent_contacted_domains": [ - { - "value": "bitly.com", - "count": 11, - "total_related": 15378, - "prevalence": 0.000715307582260372 - }, - { - "value": "lencr.org", - "count": 101, - "total_related": 650425, - "prevalence": 0.00015528308413729485 - }, - { - "value": "googlesheet.info", - "count": 12, - "total_related": 22, - "prevalence": 0.5454545454545454 - }, - { - "value": "fclouddown.co", - "count": 8, - "total_related": 19, - "prevalence": 0.42105263157894735 - }, - { - "value": "googleapis.com", - "count": 19, - "total_related": 308250, - "prevalence": 6.16382806163828e-5 - }, - { - "value": "commoncome.online", - "count": 8, - "total_related": 12, - "prevalence": 0.6666666666666666 - }, - { - "value": "googlesheetpage.org", - "count": 4, - "total_related": 7, - "prevalence": 0.5714285714285714 - }, - { - "value": "1drvmicrosoft.com", - "count": 6, - "total_related": 10, - "prevalence": 0.6 - }, - { - "value": "azureword.com", - "count": 4, - "total_related": 8, - "prevalence": 0.5 - }, - { - "value": "104.in-addr.arpa", - "count": 6, - "total_related": 141830, - "prevalence": 4.2304166960445605e-5 - }, - { - "value": "venturelabo.co", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "datacentre.center", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "149.in-addr.arpa", - "count": 3, - "total_related": 8, - "prevalence": 0.375 - }, - { - "value": "bloomcloud.org", - "count": 3, - "total_related": 14, - "prevalence": 0.21428571428571427 - }, - { - "value": "67.in-addr.arpa", - "count": 3, - "total_related": 453, - "prevalence": 0.006622516556291391 - }, - { - "value": "letsencrypt.org", - "count": 9, - "total_related": 204282, - "prevalence": 4.405674508767292e-5 - }, - { - "value": "52.in-addr.arpa", - "count": 5, - "total_related": 89476, - "prevalence": 5.588090661182887e-5 - }, - { - "value": "23.in-addr.arpa", - "count": 3, - "total_related": 34765, - "prevalence": 8.629368617862792e-5 - }, - { - "value": "apple-dns.net", - "count": 15, - "total_related": 251318, - "prevalence": 5.968533889335424e-5 - }, - { - "value": "87.in-addr.arpa", - "count": 2, - "total_related": 58007, - "prevalence": 3.447859741065733e-5 - }, - { - "value": "20.in-addr.arpa", - "count": 8, - "total_related": 258859, - "prevalence": 3.090485553911589e-5 - }, - { - "value": "13.in-addr.arpa", - "count": 4, - "total_related": 123980, - "prevalence": 3.2263268269075654e-5 - }, - { - "value": "40.in-addr.arpa", - "count": 2, - "total_related": 71854, - "prevalence": 2.7834219389317228e-5 - }, - { - "value": "bit.ly", - "count": 44, - "total_related": 100000, - "prevalence": 0.00044 - }, - { - "value": "identrust.com", - "count": 60, - "total_related": 500000, - "prevalence": 0.00012 - }, - { - "value": "windowsupdate.com", - "count": 67, - "total_related": 400000, - "prevalence": 0.0001675 - }, - { - "value": "apple-cloudkit.com", - "count": 16, - "total_related": 100000, - "prevalence": 0.00016 - }, - { - "value": "llnwi.net", - "count": 18, - "total_related": 200000, - "prevalence": 9e-5 - }, - { - "value": "gstatic.com", - "count": 39, - "total_related": 400000, - "prevalence": 9.75e-5 - }, - { - "value": "bing.com", - "count": 18, - "total_related": 200000, - "prevalence": 9e-5 - }, - { - "value": "live.com", - "count": 14, - "total_related": 200000, - "prevalence": 7e-5 - }, - { - "value": "adobe.com", - "count": 27, - "total_related": 500000, - "prevalence": 5.4e-5 - }, - { - "value": "apple.news", - "count": 8, - "total_related": 100000, - "prevalence": 8e-5 - }, - { - "value": "akamaized.net", - "count": 8, - "total_related": 100000, - "prevalence": 8e-5 - }, - { - "value": "msn.com", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "googleusercontent.com", - "count": 12, - "total_related": 200000, - "prevalence": 6e-5 - }, - { - "value": "msidentity.com", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "msftncsi.com", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "icloud.com", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "microsoft.com", - "count": 12, - "total_related": 200000, - "prevalence": 6e-5 - }, - { - "value": "adobe.io", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "yahoo.com", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "digicert.com", - "count": 10, - "total_related": 200000, - "prevalence": 5e-5 - }, - { - "value": "phicdn.net", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "windows.com", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "95.in-addr.arpa", - "count": 7, - "total_related": 200000, - "prevalence": 3.5e-5 - }, - { - "value": "gvt1.com", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "bootstrapcdn.com", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "pki.goog", - "count": 7, - "total_related": 200000, - "prevalence": 3.5e-5 - }, - { - "value": "168.in-addr.arpa", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "mzstatic.com", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "trafficmanager.net", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "nsatc.net", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "icloud-content.com", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "amazonaws.com", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "google-analytics.com", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - } - ] - }, - "ip_addresses": { - "attributions": [ - { - "value": "cobaltstrike", - "count": 3, - "total_related": 44583, - "prevalence": 6.729022273063724e-5 - }, - { - "value": "danabot", - "count": 2, - "total_related": 686, - "prevalence": 0.0029154518950437317 - }, - { - "value": "beacon", - "count": 2, - "total_related": 30228, - "prevalence": 6.616382162233691e-5 - }, - { - "value": "kandykorn", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "powerhouse", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "faketreff", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "imminentmonitor", - "count": 1, - "total_related": 28, - "prevalence": 0.03571428571428571 - }, - { - "value": "iceball", - "count": 1, - "total_related": 51, - "prevalence": 0.0196078431372549 - }, - { - "value": "sparkrat", - "count": 1, - "total_related": 93, - "prevalence": 0.010752688172043012 - }, - { - "value": "systembc_v2", - "count": 1, - "total_related": 329, - "prevalence": 0.00303951367781155 - }, - { - "value": "systembc", - "count": 1, - "total_related": 578, - "prevalence": 0.0017301038062283738 - }, - { - "value": "hydra", - "count": 1, - "total_related": 1002, - "prevalence": 0.000998003992015968 - }, - { - "value": "shellsting", - "count": 1, - "total_related": 3106, - "prevalence": 0.0003219575016097875 - } - ], - "communicating_files": [ - { - "value": "60674602836323647634016774ea123232160c1b4dfcf3fcd2d2c28c652aa00e", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "353f82475fcfad5b3f06ed85a931bda46ec34279793b5d70085aa8c603e8ebec", - "count": 2, - "total_related": 9, - "prevalence": 0.2222222222222222 - }, - { - "value": "52e9361cfec3bc643f5ac715709e1818766e1790c7f83e93e3ee7cc96fd1a473", - "count": 2, - "total_related": 10, - "prevalence": 0.2 - }, - { - "value": "689ea0e58022b86655596c946591a5b99b051f96e5cb0b0fd60dea302bbf91d2", - "count": 2, - "total_related": 13, - "prevalence": 0.15384615384615385 - }, - { - "value": "a08d97cb6da1eeb2223e8d3d243e7a830b6b081a6e08f2a2b1ab2cee354259a4", - "count": 2, - "total_related": 19, - "prevalence": 0.10526315789473684 - }, - { - "value": "1b93ae0ea729f6cf0ce33fddbfc163265fd0132a3e452883cc2cdfb3b059d836", - "count": 2, - "total_related": 23, - "prevalence": 0.08695652173913043 - }, - { - "value": "000100a845e6c239bca93fa611b83e531d844409fd2df6ca4e351cd8cdd6f65f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0004788b61e5ed5399d3873b53813772a10478d4ae1116452b63ca41b120f94a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0006aeb2a44c1a03e6ceba9a08162c0f9f741cecce4a2d7b2fcf42524dfc89ae", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "000d8b449f1f47aeff8d9dfe54a3d828f2f60de1894de0b89967ba6d06693faf", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "000e1acc9696d12337cb9b5c7a94b2cc7700b1fed267061a6cc3e863b09f4937", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0020b517dae0f5d024d465f21511a39ebabcb996c2d4af49fe73432da07df73c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0020f7dcf3bc18efedf5637a2279ad1cd74f6ba854fa5fc5d4217a159d54b110", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0021a762a492875be3b0a8ce93acb0914d0750e9d78532fb5c5509c4c7b23da1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0021d5d631ef964d699d2c806cb89612ac0df44000b67d21e148ff6acfec3c73", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "00223bad5347d0d7f5e27798e140f39f4d9e0efd557a9db179a1e4f51a061c7b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0022631ac796e54356e2953b0dbc23ed5a88dd3b97282a1778369f44a7a26498", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "002461bb0d96425a0b9ff423be700b98c5721d51aefbcd8bc8000802f0cb598c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "000ce586746d8ceb5efe9317b200b83ddd5ba2cbf78479da553f435b05182187", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "00129734c3fa67f8cb4d83cf79ebd434f3b16ea318864e0a4f3ac9da3b725139", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "0015ef259d4a469f98851b4cb8c5b520317ea59be11268c394d9b9caf49e70a1", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "0020cf25eb5998bcdad6cff3609a8bb3c61d0fe1da6c6a4f48b269a462a1b87b", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "00239cb2dffb54d1b733a83802fbee1cfcdb89d33b3a647cb9c9a983530ec0b2", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "002409e6f945f47d3289e449777daca260d5534f9e844c84559ee49affc6957b", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "000081af3d55a76378a162620f4744b2e58546791c2a4c7b67779f17e7a5182b", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "00021255935930edb3507b1db6db1f7b1af7d7ef2a42699304e54c36e47f1d0d", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "00051b082d4d95d6215fee67d97aee75c91bedf119479f314b24107c7e57c59a", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "0005da96ea5ed90407ad1d9a4104c28bc3b12c2edf65012ff8c850998a4d8079", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "000686912d316f6fcb514f1abdd98b0fb0cf37768feaee429d23c5c6fafe55b8", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "000aa5ad06675d8bc59738c0955c424152b48d460fa625b54092f563415abdb3", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "000d631b4f8232e1444027deebb30d869776399ce1f33a2e3d948aea4a1a5d4d", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "000d80f36d83465b1cbc1adb8c4d3dfb051ea1f7af83cbd38f4fe88286d99732", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "000fc04f0a989b2c2161389fe9987970e21973a09cf89ebcc753e5b67759c8f6", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "0011b5225551b1ab5ab6a173479d01fc74e37ff167ff4e49895b99921ea7a23e", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "00120e5befa7c0efb5ead82da01d69c95f86c21864d24fabf41c8d0151cd4a27", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "001264966a4414d31472d35ff9c070aa3808f012b4cc2b700e22c90376477c58", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "00129a8585697fa60e1e5a7693281f9fd5743b58de1b3290a66775fcf2fa8a1e", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "00130627c3ec9e3b8f04c5e5b07e254049c233299251e41a62838ec91bde8795", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "001603fd33fac3ec871e5149772f8ef6847ebdbfb665ea00556e21352a7f31ae", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "0016255cae49594bfb84b6ab4b5be455af761a4b7f92c34f94da98684639d129", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "0018c74fbb9c43218ebf0c9be420069e669165181faa86f7e659dc4c075df795", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "00196222948fcf9bc5ef8036c2bc645a84b360b42d39b2fc41e99fad6646e034", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "0019c79d05de8bf4eebcff987a485766e831e5cc3d9a49c4cfa3e185a6bbd91a", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "001cd745465262e5fa339db59f4c8505cf0a4070365caae781459576362223c0", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "001dd0e4378df70e58381fa5ae8173b7de3271b0f2f240cc4f98ad502cee2204", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "001fcf08d27b003e3bc37b3c81aa7ac8690f39a70140b4d45dfe16ccbae0e7a2", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "00201a610784fd1e529312a7ea3e0bac654a73773883c4e60e3e580bc8958eae", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "0020cd01c5037cf53a5cbfd2c101877dfaa66c7fc28f3c2f1ef2dd43fde9d140", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "0021130646f54ca4446a39b2084312d42a433591ea95f431e18495e0fa0539b6", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "0021d2bdf206f8e9cba5c52b6955d5e59830bc73cedefa210df0337e9f8032c4", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "002473b58e968815928c8af5eabfdefee1c34b513f42a860af382874d4da8268", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "000e4e8fc9365a0723bb71b80f8a2e3e9bd21ec1db1b12a4320afed4021ead45", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "000f4e8d5bffe766e7de0a1f9ef23b052d212a49598268119ed58f9622cf90d4", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "0010b836d6af62b0c6cd22c7503029f2fa04b0555b8df887494939f5f1d38de1", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "001426d18ef1afe173da689ba1fd9abaf365caa1d4745ece51d15ded81f3e3fc", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "000accc73f47ca73fd0ec1582fa748b9fec1867fc20005be577aa424f5ad6e9e", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "001a7c4aac33dca7f296f32e62335e729743f509dfad08161640199fec732bc9", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "00014f9f168b780fc51e2746ffa5fe577b9c0a6fdc555cf6a544484856da7511", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "00070a3b71cd3f36c7c73ceeec7facc3f184d4eeba6af2cd8cf91eb51d6b52f5", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "000966a79a01accef8fdca28a025fbe25d0d6841eea2319ece15c2e509dc474d", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "000ee20e300a7a39f330da32a6e8cf958f046687f0eba006aad01972cf752987", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "001493f2a4c4c9d4ed0925a63feeb7f38cdacb8248897f98eca3ee7ed10671b2", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "00189f9d00fbbca25950fc0ff99a08f6fd6ef386b6645631a0dbb56480fdbb8c", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "001d26aa1c362541132da716add5526b50cf5fdb77754b0bb7b84ebe84fac6b6", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "00013023fe98842bc7d4db58386ef98c33fca7aafab2efb8067b262f8d1a6160", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "00022d73cc684a1db747f874cdf753d90bb8339113716e35b57326ec5ddd2b66", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "0006d1823541901c566a3f6644aabe255021163ccbf11763ce957602c3a1cfb0", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "000a3ac8c283c8a9bf752ba2a90a7d0272af659030d9a42a36ffb64c948a5dda", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "0000ecf51e8a2bc56dad7c8c3d11cb86191e10f574de355bea703e0446641989", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "0009cffe07820024989335545eba72e045ea3717d7015d374750e6c817128a89", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "0013a7ccf744679b7c28731d275b0bc13ac68b99ef88b4a716a32881ec75a0df", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "001dc5947d610ab54dee089fcd2f7622e4274ccb0d7fdb4266a36b191a1c798b", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "0003bf5f14db144ca9303a94491ca423fe5c6c8ceddfaa9b35a437c0996479a1", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "0003f5ed7b62098980620987f051915165191bf9b969f00495b1fc80c06e2ecc", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "0005988fbc9ef1f288d782daa451b8927fa14910261721fa060d1bc7ad8752e2", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "0011618804d0e88f2f5d639d2733684854276e147961b4f92ef569fbb2fb2409", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "001a5e18f706f1e02f9ba5524fe279c063a30d48d7578f23f26b785b2c964127", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "0023cf59da0325892039ec7ed152345b53a8223ee65e8abbadc3bc75ce5d0a42", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "000d03ce035bbc77fedd5246ab69e65c243c579bb1c8cf6dc75c5fb4ec9766e6", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "00088baf6ba2f0447aa4881eac5650c6649d75d19d9b86e1b28425280bd6001e", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "001625560c5e829baf68dadfd7c3eb180f48de139ede9ddf1cb35b2cc1ae5be2", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - }, - { - "value": "00002efd61168dc25633e201af2838cdff85ca65bcfffab1d0e114b392153c38", - "count": 1, - "total_related": 15, - "prevalence": 0.06666666666666667 - }, - { - "value": "001d8053bfc5d9d24785010811c072973777562b2b667467e6ba30451cb66e9a", - "count": 1, - "total_related": 16, - "prevalence": 0.0625 - }, - { - "value": "00110954ba39a36d7b84f1db2ab1368ee9184c1c9fa555505d0c2123538f5283", - "count": 1, - "total_related": 19, - "prevalence": 0.05263157894736842 - }, - { - "value": "00067be1e5e4610d286b3935976d64ec1bad9636d37cf34e622c97267d933f1f", - "count": 1, - "total_related": 23, - "prevalence": 0.043478260869565216 - }, - { - "value": "00217a0033bc94dc9d2b2057d117ad4e1e5882bc08a2d4739daf44f033284a9c", - "count": 1, - "total_related": 24, - "prevalence": 0.041666666666666664 - }, - { - "value": "000f24d0bc57db59db6ce0c028087d62226d3f791421bc22d2b9be1174a2f38f", - "count": 1, - "total_related": 28, - "prevalence": 0.03571428571428571 - }, - { - "value": "000a4f2d41c6fb81aecd49b508f6a21b1d90cdae1cca15c386b09ae8e49a805c", - "count": 1, - "total_related": 30, - "prevalence": 0.03333333333333333 - }, - { - "value": "001a66d68db79e1f7288d2550bf0fca1efa778a2d93bf17d60644bd2cd658449", - "count": 1, - "total_related": 32, - "prevalence": 0.03125 - }, - { - "value": "001c338533b60d1aa05f5ce11b1b441c2f3ebd791dff486b0fd3055c180461bd", - "count": 1, - "total_related": 42, - "prevalence": 0.023809523809523808 - }, - { - "value": "00118f96aac0bf3a5b09d065fe99a0e50a47cb58a3fc59a89d3f5c462b03bb12", - "count": 1, - "total_related": 52, - "prevalence": 0.019230769230769232 - }, - { - "value": "0008172e7e6fea55a4a4bf1eb017c8c2cb1581d316b47a3f3695374097f4504d", - "count": 1, - "total_related": 53, - "prevalence": 0.018867924528301886 - }, - { - "value": "000323c9281081eae3b0fa5abe94dce5e515f330abec382b6b966c25ec94a260", - "count": 1, - "total_related": 55, - "prevalence": 0.01818181818181818 - }, - { - "value": "001831e9dce8c794aaaf3c05ff16906fe9d66fe73ffac6c6af79ed20747bd0b4", - "count": 1, - "total_related": 55, - "prevalence": 0.01818181818181818 - }, - { - "value": "001061ca3c21ab314e01c01d6338023415f21e5ff9c18ef8de8ec2a98927c99e", - "count": 1, - "total_related": 64, - "prevalence": 0.015625 - }, - { - "value": "001150a1f4062ef1fc0605506dc42ef4da39f29ef61947a24ca837fa0bd7b507", - "count": 1, - "total_related": 64, - "prevalence": 0.015625 - }, - { - "value": "0008d173c7acdee23a6254053eab21d46a849289948f2835103748f4f57c82f2", - "count": 1, - "total_related": 67, - "prevalence": 0.014925373134328358 - }, - { - "value": "000f6f8d3ff60cb3ecf29fa5489c739868c6af9eb8f9f1fe1af7ffd97488d807", - "count": 1, - "total_related": 72, - "prevalence": 0.013888888888888888 - }, - { - "value": "0007d7efb96823f382bc2e8429801cc61a647fc18c3c091988bf7e7e07b30f5c", - "count": 1, - "total_related": 74, - "prevalence": 0.013513513513513514 - }, - { - "value": "000e4b0e9c5397216630fdc0fa747eda9665e48635649acb3ed3ab9b02c4b62c", - "count": 1, - "total_related": 78, - "prevalence": 0.01282051282051282 - } - ], - "downloaded_files": [ - { - "value": "6419f11e727f620019c38b901d0239e077a1820247a3429386c65474e0b6f605", - "count": 8, - "total_related": 8, - "prevalence": 1.0 - }, - { - "value": "63a6580d9ee8d5a632886585ab8f7ab59c87d4e2717181c191cac236cd1e1de4", - "count": 5, - "total_related": 5, - "prevalence": 1.0 - }, - { - "value": "e1b08ef93178fd96fc2ae4f1998f441bf73b105a3fb62a9bf19dae4d55a2b9b2", - "count": 5, - "total_related": 5, - "prevalence": 1.0 - }, - { - "value": "b0893b6c9225a4291ffc5cd7164a96304aed135dfd40763b4fedc970bf0abe3d", - "count": 5, - "total_related": 28674, - "prevalence": 0.00017437399734951525 - }, - { - "value": "1f1851ea45175dfd9490310acd822fa980c2d766aa5701e7a44231d686b3bf3f", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "4f1987847e23e9c9debb64481372b00fb0194a615154a7f87d2ac992dac70306", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "dd49af65cd3c902f4d2acc8da2fc61a558dc1b2c11ba8876cb734d6768c295f9", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "994e4d9bacbacb4ff7621c7f2b2abf8900994212bb808b08f7b41b1ac29c30e2", - "count": 3, - "total_related": 1463, - "prevalence": 0.002050580997949419 - }, - { - "value": "0f3a07f36d6bddee418f7d7548bc165b09817e10764a359d2773388cdec9ff8a", - "count": 3, - "total_related": 9847, - "prevalence": 0.00030466131816796996 - }, - { - "value": "6faef4d5d777fdcaa653766b0ac8b9ed32d0fd87f7dcd79f02ff524dd1b0eb69", - "count": 3, - "total_related": 58585, - "prevalence": 5.120764700861995e-5 - }, - { - "value": "01e6ec285041d43d097de0683d2b6830c39d7fced0de937786787dd630b1f805", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "37e75280f3ee7801b06a9ea2c72b4463de5c3fa877f08f6aaeed79815128bc8e", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "49ce3656c6db6d4af1d808e9e96fa09b57a4c9845b61be90b5d1db02cae6a2b4", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "aebe53d8cd6bd7cb29e0af6cae7df5c1e302d7cab15c714510ce151a5f658590", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "7516bd5d7d369209ec02b41dd894c357c00b197c03b05064225ae368d233e287", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "01620f6ac7699d02567f69a6a7dd7f5a6061d01e7a54b161eb59db5028e4ed72", - "count": 2, - "total_related": 32, - "prevalence": 0.0625 - }, - { - "value": "f02ae208e27a55b6eeaebfb03b2af169aa7b0fcb5c2e24dcd1d61e039771b598", - "count": 2, - "total_related": 178, - "prevalence": 0.011235955056179775 - }, - { - "value": "92213166b606712b238db29140eaaac87be277b693b020226bd5bc78478838d5", - "count": 2, - "total_related": 291, - "prevalence": 0.006872852233676976 - }, - { - "value": "4a716cf2502195ea929e153f7fb97258fa7c903bd34fe654d5c8d7caab2d7ddb", - "count": 2, - "total_related": 576, - "prevalence": 0.003472222222222222 - }, - { - "value": "a78efa0170269abc055465625747c82b51732bbf3cac05e733e9147543221712", - "count": 2, - "total_related": 1836, - "prevalence": 0.0010893246187363835 - }, - { - "value": "fe5cb372aa2fc74c4e1458045868e7d13c64ea2f48640a8e9bea6ab15a5bd9fb", - "count": 2, - "total_related": 4607, - "prevalence": 0.0004341219882787063 - }, - { - "value": "7f8c7f918148b32820b0c39f8904de975147f2a5d34a3f676298a691ae857284", - "count": 2, - "total_related": 6035, - "prevalence": 0.00033140016570008286 - }, - { - "value": "63502872fc0160f91e0bff05a1a9427a4c5c7ee4fdd9b733797cd98dead3048a", - "count": 2, - "total_related": 6348, - "prevalence": 0.000315059861373661 - }, - { - "value": "f20931e6108493a67cb20a1ca0b266f5c8c96509aa644f9d3f3d31f90c41240e", - "count": 2, - "total_related": 14130, - "prevalence": 0.00014154281670205238 - }, - { - "value": "ea8fac7c65fb589b0d53560f5251f74f9e9b243478dcb6b3ea79b5e36449c8d9", - "count": 2, - "total_related": 16413, - "prevalence": 0.00012185462742947664 - }, - { - "value": "0cd6aed5d21ae37310b3c4e0facf48009005018bf4402fbcda1cb66d69b03346", - "count": 2, - "total_related": 22059, - "prevalence": 9.066594133913595e-5 - }, - { - "value": "e1000a70177aefc85a9ce7c3f614696aee966fe020696b6bd025c16ad80d054c", - "count": 2, - "total_related": 23692, - "prevalence": 8.441668073611346e-5 - }, - { - "value": "2689367b205c16ce32ed4200942b8b8b1e262dfc70d9bc9fbc77c49699a4f1df", - "count": 2, - "total_related": 32748, - "prevalence": 6.107243190423842e-5 - }, - { - "value": "61b30d408583991fd69f3dec694e154cb652471e663328ad9c8482c9021ab5db", - "count": 2, - "total_related": 37429, - "prevalence": 5.3434502658366506e-5 - }, - { - "value": "8437bd0ef46a19c9a7c294c53e0429b40e76ebbd5fe9fd73a9025752495ddb1c", - "count": 2, - "total_related": 42220, - "prevalence": 4.737091425864519e-5 - }, - { - "value": "679e7e62b81267c93d0778083ae0fd0efe24172ff0ac581835b54165b3d9ed43", - "count": 2, - "total_related": 44264, - "prevalence": 4.518344478583047e-5 - }, - { - "value": "36a9e7f1c95b82ffb99743e0c5c4ce95d83c9a430aac59f84ef3cbfab6145068", - "count": 2, - "total_related": 72823, - "prevalence": 2.746385070650756e-5 - }, - { - "value": "258682bcb3d7d927aaf47bfe1c01788db1f0cda4bf2240001e5e7408a6f559ae", - "count": 2, - "total_related": 77670, - "prevalence": 2.5749967812540233e-5 - }, - { - "value": "008aba818b12516d975eb00121e706f6aad665c83a1fde9a25ffbdde87930d57", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0251e93999f120d31b70c2b99a45ab36785c22e7c7067b9bb32c3531efd86b2a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0693b145179a46a96e4d83fb6960425e0ec6b7dc648c9f52cf208b4da6795560", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "11a4b7da7ee10e81accae81e7fe801706ec9ad0d88d0b625975152f5559d2745", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1374c0dec51a09bdd34b994ecf0574d1c0c6e09603122dbc1a3e795265105556", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "141176af90ce5e47e574edf49e7fa8425b862e089de91bcfbd7a50729b5ff095", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "161be12352fceb9271db50a043dcfd8eb6921a7c84941a588cb1b2cb4718e8d1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1f62d02cb6b1dea4797ae1a178611948291d95043dfa77ba7d61a5a9de61e7f6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "286f33557b673af0954497fa88d61849151a56e19ee8f70fe5c712a79da4b49a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2fdf8330cc10eae856579f60e793a3d079224e9c348efe81eeccaeb377b91e78", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "31ce57628555f504952c59f3b29508737dfbb63049f1ecfc7ff5557efe3339a6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0a9b47c2df22eeb836319da8eb9875f3ebae0769ebcfac648b7d84f00e2946d7", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "15cc8a7edbd34224437701a57e4c49bcde26d315fa41d6a7e00aa63c7e35ea32", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "02a69029bf2b0c97bfb9ddbbe6e89409f1b11007a92d8ca4a6df6597b72eb453", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "3404531810304f334e2af9d829291e7ac93d5af7a82e3441e62c1f60235232e9", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "302a65df1b4e2640529d2b98d0f5b21aaa56424ea946b943fc01e1b7d625b87b", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "2bbe8a349310c215a00abc02e3244cb77c82f6b3ac64a17c72e28c9f88299c3c", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "2699e0a8dba6f3e8fbc20a5749af6c94426dd95e7257bc715d6881e1aee7f207", - "count": 1, - "total_related": 14, - "prevalence": 0.07142857142857142 - }, - { - "value": "2c042d454d75f422027cd19bb34ff93ca4ede1408b2ea97b547e9b481eb728d4", - "count": 1, - "total_related": 22, - "prevalence": 0.045454545454545456 - }, - { - "value": "2d490570a7a15948f6c0e12b9f78b789dcb5ad8b64a934a1d27211e1b73a2adc", - "count": 1, - "total_related": 29, - "prevalence": 0.034482758620689655 - }, - { - "value": "0edcdebd22038b5ec22d73fea33c560d2e796ab17177124520206107654e57cb", - "count": 1, - "total_related": 40, - "prevalence": 0.025 - }, - { - "value": "114f74dc7513187ef0d5e22f1da6ac6859e712d46622a1da04a9a8ff70266499", - "count": 1, - "total_related": 60, - "prevalence": 0.016666666666666666 - }, - { - "value": "3042c21992afb4848f6365ee63862ba3374d6549acfef14dcbd4497e73be85fe", - "count": 1, - "total_related": 116, - "prevalence": 0.008620689655172414 - }, - { - "value": "1ee01cc6701e8bfb4d21161c9e414870dbb33e9d515e4015dbb85b719d9d1efc", - "count": 1, - "total_related": 128, - "prevalence": 0.0078125 - }, - { - "value": "1065f1c9d70d2009dd4abe566364ea819577c229b297414a8d6aef43dd86b437", - "count": 1, - "total_related": 133, - "prevalence": 0.007518796992481203 - }, - { - "value": "0482701066c79013f90c02b8e7fe2a4cb8f9f59cb321165d55253baa320ffae8", - "count": 1, - "total_related": 148, - "prevalence": 0.006756756756756757 - }, - { - "value": "10c1227a1269693871f997cb9fb14b8cabe4046e82bec4aa2bf7de94b8029a34", - "count": 1, - "total_related": 161, - "prevalence": 0.006211180124223602 - }, - { - "value": "0d2a2df93b58acee67f156332bc60954e148b78c88359535b298127203466a3e", - "count": 1, - "total_related": 165, - "prevalence": 0.006060606060606061 - }, - { - "value": "29ce674e9a5cbf937750cc5c877ee6ed633a0ba70379a33f064b9c51e930af59", - "count": 1, - "total_related": 218, - "prevalence": 0.0045871559633027525 - }, - { - "value": "069bd2442733ee025eb1b7095ec527fc100d8ba4b025ad98c4ad34d9cd4a3081", - "count": 1, - "total_related": 240, - "prevalence": 0.004166666666666667 - }, - { - "value": "205235ba6ef925ba5726670c1c552c0b108f6b3daed1eefd037b6a156ecde70a", - "count": 1, - "total_related": 310, - "prevalence": 0.0032258064516129032 - }, - { - "value": "33c1c92944a084e89ac8cbfe15da3c741575cbddd50a0301b946fb6da8441a93", - "count": 1, - "total_related": 555, - "prevalence": 0.0018018018018018018 - }, - { - "value": "0cc97ae563637cf9a53f02413c9c83e0359ed845e8b8f31590940bd111de7f62", - "count": 1, - "total_related": 878, - "prevalence": 0.0011389521640091116 - }, - { - "value": "06e1f264a5379e9ec2cf182321d0df2bf36ee205187d9a38906519ef4c9dc6f1", - "count": 1, - "total_related": 910, - "prevalence": 0.001098901098901099 - }, - { - "value": "28b5becabf7acd54aceeb1bc9d8e1674e64589745e9e21b48bcf2fc64694a9b8", - "count": 1, - "total_related": 3955, - "prevalence": 0.00025284450063211124 - }, - { - "value": "185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969", - "count": 1, - "total_related": 4847, - "prevalence": 0.00020631318341242006 - }, - { - "value": "068d6b5a41c3a8e4c7b9308647179734e22a89533ac6317f43a7e29402823539", - "count": 1, - "total_related": 7515, - "prevalence": 0.0001330671989354624 - }, - { - "value": "14a6c8fc65d1762f94935d61393d70374f32d0a8acbaf9c21d243ee28333be94", - "count": 1, - "total_related": 11905, - "prevalence": 8.399832003359933e-5 - }, - { - "value": "1d04e8d3f8cea7e75beaa2a27688749050dbf6e944dc63450a6dcc948c884658", - "count": 1, - "total_related": 15216, - "prevalence": 6.572029442691903e-5 - }, - { - "value": "23d32b79f3e71e41c2eb3d8811f58f72a2b6b5eb04c0981f16f61ab009945054", - "count": 1, - "total_related": 19722, - "prevalence": 5.0704796673765336e-5 - }, - { - "value": "0bbd7f2bfcb406b811bf0a028e458ff49d3cb52e56935a030f93e206e9bfba76", - "count": 1, - "total_related": 35760, - "prevalence": 2.796420581655481e-5 - }, - { - "value": "1d08335e65da7cf40d1c4a7ba0088e0f39b9c5a4b2e42de95fc9ffa69fb96c7a", - "count": 1, - "total_related": 39232, - "prevalence": 2.5489396411092986e-5 - }, - { - "value": "340c8464c2007ce3f80682e15dfafa4180b641d53c14201b929906b7b0284d87", - "count": 1, - "total_related": 46478, - "prevalence": 2.151555574680494e-5 - }, - { - "value": "20d529ea8a9e04e621c1a8c952350dd0e5e8e2baa4ebba894e1113ae45bb5dd0", - "count": 1, - "total_related": 50923, - "prevalence": 1.9637491899534592e-5 - }, - { - "value": "29a8b2a2dbac349f919923d25af4f9162bc58c29b2daac41a56f5b25ba24276d", - "count": 1, - "total_related": 61438, - "prevalence": 1.6276571502978613e-5 - }, - { - "value": "23926e9185d8d43c02807a838ffb373cc1977726094a4e46807c66ada9dd7660", - "count": 1, - "total_related": 90062, - "prevalence": 1.1103462059470143e-5 - }, - { - "value": "b16e15764b8bc06c5c3f9f19bc8b99fa48e7894aa5a6ccdad65da49bbf564793", - "count": 21, - "total_related": 100000, - "prevalence": 0.00021 - }, - { - "value": "38ffd4972ae513a0c79a8be4573403edcd709f0f572105362b08ff50cf6de521", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "ce7127c38e30e92a021ed2bd09287713c6a923db9ffdb43f126e8965d777fbf0", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "d465172175d35d493fb1633e237700022bd849fa123164790b168b8318acb090", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "b663321ab439cc53a329ee352c1b855d9998d3af95524a05795a88b42a9acf07", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "cdf9d8eee8c4fe967fac3aa9218a7227647ae7aaaa4221c688e1aab7a9180f69", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "25fb23868ebf48348f9e438e00cb9b9d9b3a054f32482a781c762cc4f9cc6393", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "557b5e9015b4963a130c7039e077b3ec0306d401b6ee13d631721d5d969d2917", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "dc1d54dab6ec8c00f70137927504e4f222c8395f10760b6beecfcfa94e08249f", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "0b52c5338af355699530a47683420e48c7344e779d3e815ff9943cbfdc153cf2", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "32f2fa940d4b4fe19aca1e53a24e5aac29c57b7c5ee78588325b87f1b649c864", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "9ec2f0698f1c3497de39a192dd1c3f3e4506ff1a84dbf85082344297dc52e681", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "d5a89e26beae0bc03ad18a0b0d1d3d75f87c32047879d25da11970cb5c4662a3", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "2c3adc6b6fb69d3a4e7b75b64e913dc96d21dbaf436bf69e773589b6a6952c47", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "55f7d9e99b8e2d4e0e193b2f0275501e6d9c1ebd29cadbea6a0da48a8587e3e0", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "5fd55da8747d933410bb637571802aca2eedf3314039722e2b9d6f37afdad97e", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "8a482f2271a42c5f54c96e816a84340a6f2357a5b81f927d07d00788f5140a41", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "cab538fd1647961eb35348c1bd84e1fde389ad89672587d2fe3c007a0bc9e67f", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "fb47468a2cd3953c7131431991afcc6a2703f14640520102eea0a685a7e8d6de", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "urls": [ - { - "value": "http://cloudprotect.us.org/", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "http://103.130.195.170/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://103.205.179.4/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://103.205.179.4/edit", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://103.205.179.4:8080/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://103.205.179.4:8080/edit", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://103.31.249.62/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://104.112.11.55/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://104.143.146.80/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://104.156.149.130/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://104.156.149.130/OfhgAKdvDk9/nHIz5EQ3zp/YaXHtxk13S/AJaYaoyLAe/bvamQ==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://104.156.149.130/www.j-ic.co.in", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://104.156.232.106/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://104.156.253.248/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://104.168.136.24/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://104.168.137.21/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://104.168.137.213/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://104.168.137.213:8080/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://104.168.138.7/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://104.168.138.7:22/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://104.168.143.222/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://104.168.144.212/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://104.168.144.212:443/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://104.168.145.52/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://104.168.146.15/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://1driv.org/open?id=D6GApoc41tPmtlZmx71ETXPrHCHSuFgVvbvM0fzPaOYN7T4IQdG3w4Pcz8VfDy/G", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://1drv.linkpc.net/open?id=RQ%20FGpdl8wOhRM0SuoR2zaYVX3UBtv6e7vkM53Q98AY=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://1drv.linkpc.net/open?id=cH3xWy8JlHksOe0dbYaVg01Y%20YQyhNPbcaeCjD7YCeWp1mgY2UXk%203vyV9Ah1EQJ", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://1drv.linkpc.net/open?id=jPceEK7ZXyj06IjV9qVgPHzDhRQAAVf6ZEP3WmZLTwA%20bITvvGgitAbKKG50u990", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://1drv.linkpc.net/open?id=m64e6/3C3ogDtGvtP/3ZDB%20nkyhz5qy1G82Nl9V4hIGVUbdAGSGDFC67FBZFw0Eu", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://778xstore.net/cgi-sys", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://addrcheck.corecheckmailsrv.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://admin.ubi-safemeeting.live/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://alayensince.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://alwarinasikon.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://antler.linkpc.net/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://antler.linkpc.net/open?id=w54h4KVP1uxU2RKEh58YS2TIAwiHcFO8OPU43dZSBOMkKNMG5T2irCOT4fqBTG6N", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://app.onlinedrives.cloud/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://archax.skyboxdrive.cloud/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://archax.trustmeeting.live/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://auth.secureshares.online/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://auth.secureshares.online:8080/edit?id=1/f2LPTTiGZfu5soYJ5BFWlfWk2%201whn1goWtcNRLVBf5P9PjAlKbtnBqZwUaiKfZUzkvZyJhkW%20T1ssqQUPkQ==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://auth.secureshares.online:8080/edit?id=3DynNFbljEykzjbq63ySnnZCDbBbUOKOXPGORLtwSnQpPBQ0jFczG7J6qcBkT1aAQBl1yqu/mkRPEaIRdP6X0zJg==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://auth.secureshares.online:8080/edit?id=f6rv2xvrYh3p10dMXKzT2Mn7TYwR7us3PPFTZtR6JAhz1AA3VqC9vMqh49sFdhDj", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://auth.secureshares.online:8080/edit?id=tkJj%20zjKJVQW4FzJQf7Fr9kVPqYMb1vvOhZZC0RpelRxl1NqHpw//i%20PGioFIqoRNuv%20l4dkgrdA/1JPcVs0AA==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://azure.doc-protect.cloud/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://backup.163qiye.top/edit", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://backup.163qiye.top:8080/edit", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://barkamaosa.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://barkomarda.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://blogwriter.co.in/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://cintralmaro.co.in/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://clean.net.in/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://cloud.anri.us/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://cloud.emurgo.sbs/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://cloud.jaic-vc.cc/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://cloud.optvers.net/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://cloud.prosec.ink/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://cloud.youbicapital.co/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://cloudshare.jumpshare.vip:443/txqxypqfbxm/xsmifq%209/lvlg6bk6xp/qrqbu0a2xt/q_f%20p9oq/ehwn7hg/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://coinsanddaggers.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://coonbear.in/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://coonbear.in/jsp/Sbeictrl.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://coupangservices.sbs/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://crtypk.run.place/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://cryptyk.cloud/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://cryptyk.cloud/files", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://cryptyk.ddns.net/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://cryptyk.ddns.net/oipYhEuV1K+2d2U95Ul/S1JACy1Qyn/tOWT1sZD_4/Vx9sabJQMh/uj9hw==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://cryptyk.ddns.net/oipyheuv1k%202d2u95ul/s1jacy1qyn/towt1szd_4/vx9sabjqmh/uj9hw==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://cryptyk.hopto.org/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://cryptyk.sytes.net/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://cvps11294282336.hostwindsdns.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://d1.skyboxdrive.cloud/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://dev.team-meet.xyz/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://docs.cointelegraph.online/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://1drv.linkpc.net/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://archax.privymeet.com/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://authenticate.azure-drive.com/07ma_Au4+/Yw4eJeQPBd/Mc2+9HmC/tEEpDOXyWw/ebmlHbfcsv/4CYQUEdr2Z/xdkvHBA", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://belivestore.live/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://cryptykhost.work.gd/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://deck.altair-vc.info/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://deck.altairvc.com/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://deck.work.gd/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://1drv.email/", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "http://ac-2501.amazonaws1.info:8080/edit?id=%20Ez5uVZGMrxUYrlBXm3JSG3aYhUjxT7lVJ%20Xgy1REwbyAQCgnSvj5VgENUfP05sEjCpXZgw3AbwjXurN2Zfwlw==", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "http://arizonamaternityclinic.com/", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "http://cloud.azure-service.com/", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "http://deck.altair-vc.com/", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "http://doc.linkpc.net/", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "http://ac-2501.amazonaws1.info/", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "http://autoprotect.com.se/", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "http://beenos.biz/", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "http://chromeupdate.publicvm.com/", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "http://cloud.daiwa.ventures/", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "http://authenticate.azure-drive.com/", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "http://coin-squad.co/", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "http://cloud.venturelabo.co/", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "http://cloudshare.jumpshare.vip/", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "http://cloud.globalbrains.co/", - "count": 1, - "total_related": 28, - "prevalence": 0.03571428571428571 - } - ] - }, - "urls": { - "attributions": [ - { - "value": "lonejogger", - "count": 167, - "total_related": 178, - "prevalence": 0.9382022471910112 - }, - { - "value": "flatdirt", - "count": 9, - "total_related": 9, - "prevalence": 1.0 - }, - { - "value": "rustbucket", - "count": 7, - "total_related": 7, - "prevalence": 1.0 - }, - { - "value": "powerhouse", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "covertcatch", - "count": 3, - "total_related": 6, - "prevalence": 0.5 - }, - { - "value": "shortfawn", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "todoswift", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "lonerunner", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "sparkrat", - "count": 2, - "total_related": 187, - "prevalence": 0.0106951871657754 - }, - { - "value": "hiddenagent", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "tallcoral", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - } - ], - "http_response_contents": [ - { - "value": "1f1851ea45175dfd9490310acd822fa980c2d766aa5701e7a44231d686b3bf3f", - "count": 61, - "total_related": 108, - "prevalence": 0.5648148148148148 - }, - { - "value": "4f1987847e23e9c9debb64481372b00fb0194a615154a7f87d2ac992dac70306", - "count": 61, - "total_related": 121, - "prevalence": 0.5041322314049587 - }, - { - "value": "6419f11e727f620019c38b901d0239e077a1820247a3429386c65474e0b6f605", - "count": 32, - "total_related": 44, - "prevalence": 0.7272727272727273 - }, - { - "value": "3bba19db251e48fc9282b9dc02670b2a69fcba669b34207b9d1df050e986c4ec", - "count": 31, - "total_related": 93, - "prevalence": 0.3333333333333333 - }, - { - "value": "d03244a7b900e22e01849c6da1cb01ca30e3fa5853b6d5f5029d1498ea4a1d97", - "count": 29, - "total_related": 41, - "prevalence": 0.7073170731707317 - }, - { - "value": "e1b08ef93178fd96fc2ae4f1998f441bf73b105a3fb62a9bf19dae4d55a2b9b2", - "count": 20, - "total_related": 27, - "prevalence": 0.7407407407407407 - }, - { - "value": "aebe53d8cd6bd7cb29e0af6cae7df5c1e302d7cab15c714510ce151a5f658590", - "count": 15, - "total_related": 22, - "prevalence": 0.6818181818181818 - }, - { - "value": "63a6580d9ee8d5a632886585ab8f7ab59c87d4e2717181c191cac236cd1e1de4", - "count": 13, - "total_related": 15, - "prevalence": 0.8666666666666667 - }, - { - "value": "37e75280f3ee7801b06a9ea2c72b4463de5c3fa877f08f6aaeed79815128bc8e", - "count": 8, - "total_related": 14, - "prevalence": 0.5714285714285714 - }, - { - "value": "d266e47dd456fd2d97947ced1677bbb9eba96ff0582096b508d9e930116ad9aa", - "count": 7, - "total_related": 10, - "prevalence": 0.7 - }, - { - "value": "dd49af65cd3c902f4d2acc8da2fc61a558dc1b2c11ba8876cb734d6768c295f9", - "count": 7, - "total_related": 11, - "prevalence": 0.6363636363636364 - }, - { - "value": "5f18e872712ba761b5e74d9672813ef7c11bc996779053063b9cfd557bdb2352", - "count": 6, - "total_related": 11, - "prevalence": 0.5454545454545454 - }, - { - "value": "79de30973b69aa4c44574a512e7820cc0a00f1241930ea361b7b0afcb1cccf2d", - "count": 4, - "total_related": 6, - "prevalence": 0.6666666666666666 - }, - { - "value": "d9193d06d98b15524bbce2a948b664b36d78f545b67a81ec2e894ee1b00b9161", - "count": 4, - "total_related": 9, - "prevalence": 0.4444444444444444 - }, - { - "value": "a4c04448088d12494af1c1ff48dcbc11045f5f4674b681a6177a52e0af696274", - "count": 4, - "total_related": 2519, - "prevalence": 0.0015879317189360857 - }, - { - "value": "0dda8fdb5ca88763b73cfc4bac99f365ac9c90154cc48df40ba83c3aefd4d372", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "c6ed4f5b1f3952bff700a6d5755c0534aa9a222e566a206cf5c8149c8a377f7f", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "994e4d9bacbacb4ff7621c7f2b2abf8900994212bb808b08f7b41b1ac29c30e2", - "count": 3, - "total_related": 6848, - "prevalence": 0.0004380841121495327 - }, - { - "value": "766c1d6bcb81d3e983fb7adbc19c616d7fc01dafb7893738edc242e2adc59c07", - "count": 3, - "total_related": 21975, - "prevalence": 0.00013651877133105802 - }, - { - "value": "e718083b67de582dc0a7dbedea0e1bc4c9847fcf235071a78f0e3015ab886d3f", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "ed06fc8b097fad7db2908265afecb3232deff5baca29ea8438df55cefc01dea9", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "f680637e7895b353a38e3d5a606e7c8bf66874455237ddbbddf9adc9a3076981", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "899b2da752ad50f525e364f0af930dec91a128effbe8bb601803226604038d5b", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "30146d9be8094beaa2a2634dd07de00046be474aece6400f8976c698262b44d3", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "72a41015b94eaae52495f1d0852fb16f827a34988f6bc4487bd580c8402e5c7e", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "8a649bb66b2a3b014e226da08118439611f6fdc91c69949ad0e04c3cdd7b12b5", - "count": 2, - "total_related": 8, - "prevalence": 0.25 - }, - { - "value": "cce2575f8a0406a2ac98c87e17f20c4a82c9fb1f7370b9a57d0d886e41b0d26f", - "count": 2, - "total_related": 8, - "prevalence": 0.25 - }, - { - "value": "e1443334a5e7b905b15b2f7d2000d696d3dc3d968956c1953476ab8eb9e360f2", - "count": 2, - "total_related": 24, - "prevalence": 0.08333333333333333 - }, - { - "value": "3615637bb44c7dfa79bbfcd74e36b736a8d7383dae766f35b6ca5101ae8aa909", - "count": 2, - "total_related": 744, - "prevalence": 0.002688172043010753 - }, - { - "value": "059bbd9cb679779f4a1bdc953dd10dee88ad6dd510ce147bc5885ee06bf83ae9", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "05fd254df41265e931ce4c35c1def5ccc42c8b9de0070bdde5ebaa90c3727f15", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "06c0a3691612c0c30cf664a4368b7477f2eff21f423d6f9152f2934ca862d5b2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0807e18327656c6723608b2e1579de0d657abb9316abbc94e8f9743f4a913534", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "084ec3a594093397227e30370c2cc42a15093fa81b71c3dda77e59e1edc5f1af", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "096a4e9800dc132b242a31a3910904c0e7adb017835ab6d42211e9901c003bf8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0a9c488fa35f8f6a538648d4cd88074f3da3320f3d0c9f29ba35bd2b8080a50b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0b1e8fb6f46b5d99c7b24a0e9d4ed36c37f39ffb37f19e8d951ba0581c1985b2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0ca80a6e76d97403ccb9e87ca35d42f280c73ae7557ccd41b90b01fafbb45e41", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0e711fa5501c993af8498f0148ba6b6810ab8c769078c3dadb0dae11a080bac3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "10056ba4bd97e7f1e3a5ab742addac29597a6ecd40289e720985fca9e1435697", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1136f931ba561c092a0a3a4f13719a9c95999c24f25ab22a0d6b94108ce58817", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "146bf40007cedbbec26ef4e89069eba0e184e6cac6bd44bcd40e8937e210887f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "154fbf02a87104b7a58429158e69abcf23782fc9951279a8d3c97c8419dc7d50", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1738bf0854c7ad33855c173dda85e386100892ce79ba73407fca2465ea0afb29", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "178096c529a3243d1c3c42eaf2c94aa3481acd5d9e330292f021f975985dc69f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1782967b37f032177361a10089a75ca660d50b01cfd23f1aa2b030cb6babab98", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1e5e12929f9caf1d05f7c7a69bb76ea4ad428a473e92930226def05f67cbf7de", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "22912a3e0cccfddaf1102d313c62013658d588540eae40793d9074965d40a82d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2462adb08fd9ed5cd2a303b96ba96ffb6d5edccadf529141b6797b42765fe8a9", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2476d19ad8c3da93eb11d7571b1d6ee25fa63a3c6dd0cf48fa400fa773cb0d8d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "24af4518dd8d1ee3b3307b6a60bbb18b60d393cbd734002d7f178e189e1df900", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "24c4ffb5dcd39306042eddda28519c1b962756d405f0f2b4d386ceee1c6bee86", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2727e1775588fee0f9e6d69460338cb526a8d0bb34c5d9df6e4609d1b3d56386", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "27586d3126cfe3325660dcf3dab71e8a59f29616cc37ed827837ae4b1611dfee", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2815afccf5c1b8cb4edaa1548b0db6f6deb59125e5da7a859cf7c0d12ad4b5c5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2981da0207b5144e7b950a169d4e6a1cc258beeb2cac0fab7048b3ca3d07a538", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "30eff61feb13bea95da983ca6dee9e61ed2a9ef164245efecf91451d7271695f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "31021d73a1607238408d3e9ef3d8f4fcb89f2db44e4ac50744e1b7b59e64c01a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "321e2371b35415433ec04c0b848cb64ecc11eb3c6554e9e6a5c18a56262475b5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "33b0ea66772ba0f50cf974840c0373aaa38fedd9fc260be7b007c0b9db969ce8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "370e927168f556b0bf84e50eed19e46a322c606af34063287be768486079a9bb", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "39759f739c27450e94fe1a0ee2621f1d9b55f5c5bb9f64896dc42b105927730f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0600d7adbc5d399857d58d011cc0a307faf14645c52804097242dbd277fe3ea6", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "0def651f832d40a8dd99184e173c69f273947e7080550d217a403e7506aa180e", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "0e5014189f19bc3e758b9f589d13ec2acbff7361d02e0f660b883aeceb6f3ba5", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "1140f339ced538685f67d7b5026582664c81f7654237c51ded1a27f2fb2e7f5b", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "18145ead6695e311e33e594dd052e3a36fc2eabfee935d35f9089fce9267ae1e", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "1887a4d2d0d500bde157cfee55901c63a7252b70aa4931b4c32236fdf4bdb2af", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "18977ffa1d19ceca67c5afb50e60078380ece9bb1e10f33bff74c7c97aad95bd", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "1bf991c4d81feb70a31afd77b6b70217fe46bdf506e525aea641aebc24401087", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "1ee8c24c2d7d8bcf559200742775bd1dd83cdf1f6896b269f9563b25ef3d908f", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "239665526a06c59e1228781cbbbbbc8ca96b95bcd229416f2c6a756c240618b6", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "26cacd7c61c6be9ef018c175316f278d6137473ec7cedc9f4ad7c486e3063362", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2ee5b0cddc4567ae033640a6ba6a75233ed8fd7fd804dfff0aa4381f0ca83477", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "3125619db79a896ed2651b3c9f6a0418aa4e34faf4fb622054356bbfbd238c66", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "3258a12e5e1f0088b09b319ab001b72fc8c34bc7b72b0a880731c8a5de9fdc68", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "37396148a54650caf6d64778c163b1e01b36b78838b6c53a61fda64d41e7e5f4", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "0251e93999f120d31b70c2b99a45ab36785c22e7c7067b9bb32c3531efd86b2a", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "04e6337a10a3e1c1ed312d74c5eba15e61ea67673cc836ac0d1d0083cdaf78d8", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "2ffb004d2f1a8317d1985ade9052aae9802e14c273eb702a67c10e83e2e18dcc", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "01e5dc64a75bcb4704491dc204ce5eb2e043e6492fa45b6fd041bf5c9f7ee495", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "0da45cb20d7fb6fc4cc347cd3507d8247d10c1b0d52fc7974d25ec23ed39a729", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "1a9fa629658d0ad81744837922c8b833a5956f9cf0a210a3326253495e592177", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "0c2c24f3c511be3b11f2ade1684d694d661bb4de02516111dfd598eba718c1c8", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "1ba2075001139f7572f044900ba00fa9a915b344df03d2549ace8b5b1c865373", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "06614ecb445001d94dac3ec5975c3b1a3f7525e7db784370109a64294f9bcc47", - "count": 1, - "total_related": 24, - "prevalence": 0.041666666666666664 - }, - { - "value": "21010f823005d26b7ab0dba77db368c2d1c4fb9b939b7dbc6c97450541b60b9a", - "count": 1, - "total_related": 1370, - "prevalence": 0.00072992700729927 - }, - { - "value": "33c1c92944a084e89ac8cbfe15da3c741575cbddd50a0301b946fb6da8441a93", - "count": 1, - "total_related": 5422, - "prevalence": 0.00018443378827001107 - }, - { - "value": "0cd6aed5d21ae37310b3c4e0facf48009005018bf4402fbcda1cb66d69b03346", - "count": 1, - "total_related": 44342, - "prevalence": 2.255198231924586e-5 - }, - { - "value": "b16e15764b8bc06c5c3f9f19bc8b99fa48e7894aa5a6ccdad65da49bbf564793", - "count": 22, - "total_related": 100000, - "prevalence": 0.00022 - }, - { - "value": "ed6f6f2144998175c846a99d2a0faab5bf7b6ace318f0fe2dc4bfeaf4700c1d8", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "982b986bb578e137f062099427a8caec3c501c84a9e4b22369ebd2badec42fe7", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "0f3a07f36d6bddee418f7d7548bc165b09817e10764a359d2773388cdec9ff8a", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "8437bd0ef46a19c9a7c294c53e0429b40e76ebbd5fe9fd73a9025752495ddb1c", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "9ec2f0698f1c3497de39a192dd1c3f3e4506ff1a84dbf85082344297dc52e681", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "dc1d54dab6ec8c00f70137927504e4f222c8395f10760b6beecfcfa94e08249f", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "e14487407359a2b8c009bbaab7656357d5a9f315948ef97181e8e41711411593", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "25fb23868ebf48348f9e438e00cb9b9d9b3a054f32482a781c762cc4f9cc6393", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "32f2fa940d4b4fe19aca1e53a24e5aac29c57b7c5ee78588325b87f1b649c864", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "contacted_domains": [ - { - "value": "googleservice.icu", - "count": 5, - "total_related": 9, - "prevalence": 0.5555555555555556 - }, - { - "value": "amctradinggroup.biz", - "count": 4, - "total_related": 6, - "prevalence": 0.6666666666666666 - }, - { - "value": "circlecapital.us", - "count": 3, - "total_related": 6, - "prevalence": 0.5 - }, - { - "value": "googleservice.xyz", - "count": 3, - "total_related": 6, - "prevalence": 0.5 - }, - { - "value": "docstream.online", - "count": 3, - "total_related": 10, - "prevalence": 0.3 - }, - { - "value": "drop.trailads.net", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "lundbergs.cc", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "smbc.ltd", - "count": 2, - "total_related": 110, - "prevalence": 0.01818181818181818 - }, - { - "value": "docuserver.xyz", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "download.cloud-sheet.net", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "eu.euprotect.net", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "deepmind.fund", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "gbackup.gogleshare.xyz", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "1driv.org", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "docs.dsharefile.tech", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "mse.theworkpc.com", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "cloud.blockchaintransparency.institute", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "shop.newsbtctech.com", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "docs.gdriveshare.top", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "up.digifincx.com", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "www.cloudfiles.club", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "drives.googlecloud.live", - "count": 1, - "total_related": 15, - "prevalence": 0.06666666666666667 - }, - { - "value": "name.ownemail.me", - "count": 1, - "total_related": 16, - "prevalence": 0.0625 - }, - { - "value": "bit.ly", - "count": 48, - "total_related": 100000, - "prevalence": 0.00048 - } - ], - "communicating_files": [ - { - "value": "26a98b752fd8e700776f11bad4169a0670824d5b5b9337f3c8f46fac33bc03e8", - "count": 4, - "total_related": 35, - "prevalence": 0.11428571428571428 - }, - { - "value": "45c0007e4c744c6f9ba43660cc7edb9a2deb27580e160f8a0e56585401ee9ee3", - "count": 4, - "total_related": 52, - "prevalence": 0.07692307692307693 - }, - { - "value": "a6d614ec8d8135a7250d76d6c575da0de69efd862ea936af66a3cabb50e50789", - "count": 3, - "total_related": 9, - "prevalence": 0.3333333333333333 - }, - { - "value": "52e9361cfec3bc643f5ac715709e1818766e1790c7f83e93e3ee7cc96fd1a473", - "count": 3, - "total_related": 25, - "prevalence": 0.12 - }, - { - "value": "e6e60f07583f397c915b6b448f7521b236df07e0236851e445844ea6c9a11278", - "count": 3, - "total_related": 25, - "prevalence": 0.12 - }, - { - "value": "01184a5acb8b3ec56c9e90f2e6cd6673ae83b4fd6982e17329b33da2f77bcf5b", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "1454e53a6ffe2182be96391fb6f2cb5783142e2e0e03f26abab027e9c296088e", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "70c4600d6920dadc1899603b131119427784fcd83d04da5c886bcad5a7af913b", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "b807d42926b94116ab57c8c40d5b4795b97375c150e1ec97a6520225dd0d4a0e", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "e9f9ab0b0e48d81de10ecd75090f78e07dfaedcb14f1bc3e745823d5919bb6c1", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "03cd4ec3defa490e68b1ca2efaf8daea6f89d3cceed51c91f4c4f9e2222d258d", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "0d79b66f41858a336a385a7f6cc9e4e2fa06097b0ec422ce2d18bc6eabe5afee", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "1b93ae0ea729f6cf0ce33fddbfc163265fd0132a3e452883cc2cdfb3b059d836", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "1e154b2976cc00d457c0dc2b83ebe81911294c8276691617085c03a3304fd87f", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "1fba098a58f8326c59b39045c3f07a1adce1bbfa23225e240e0f6fc5a2b2605d", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "292207998d2aced2a7d8dcbbb43a5fded2f5a27cf590f43c0eb800341b237fce", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "48bd1c5cf9ccc3d454ab80d7284abaf39028a228607d132bfa92ab2ceca47ca2", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "68a5a26836e3ddc176c31a7e0fccd797a387e29433b64ead5617b356976b979e", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "7cb4365e642d52118bc0cd1dc0a33b613759335efe0e764d403847f63961557a", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "c3d403b78b4f4aebf1e4b7447f39142d27029011a442fe19219a0ed148de49c3", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "d1223db1e8dd0aa13b9bff498f47e103fc6d02e602ff168dc53c91faf9778a6c", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "f7fa68cb3c1761a12969fd8675fbc56fb20a7e21bc23874a5aa58400be40e0bd", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "26e376fc80b090b2ee04e7d3104d308a150e58538580109a74f4ac49bf362423", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "47b8b4d55d75505d617e53afcb6c32dd817024be209116f98cbbc3d88e57b4d1", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "9bc513a9e633ffd660a88e4c960b6637a8104fc7a61bb6930b9a4a166ce695eb", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "bce448c7b618496741375f01c9aa8824ce65b637c9d91d98c55d693305ff395e", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "d287388e5ff978bf6f8af477460a9b76a74fdc33535e392b70e58176fc9ad805", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "26636fb57a98425ddc6401bf7cca2948392dd620393494c2ae4e6adfb0ff6ba4", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "689ea0e58022b86655596c946591a5b99b051f96e5cb0b0fd60dea302bbf91d2", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "997c4f7695a6a615da069d5f839582fdb83f215bc999e8af492636b2b5e3436c", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "a08d97cb6da1eeb2223e8d3d243e7a830b6b081a6e08f2a2b1ab2cee354259a4", - "count": 2, - "total_related": 9, - "prevalence": 0.2222222222222222 - }, - { - "value": "4786d881b14712866fe9953ad039197e630007ea19c0f0d3bf6c52598e26210c", - "count": 2, - "total_related": 10, - "prevalence": 0.2 - }, - { - "value": "9d6fdb5344f64e059043980c5bb80e9c8986f1a5a62d7d7871144b388df65262", - "count": 2, - "total_related": 25, - "prevalence": 0.08 - }, - { - "value": "825c84154c85b2f8213aaa7902f015c4478ddcd3172c48542688be2675d6e305", - "count": 2, - "total_related": 26, - "prevalence": 0.07692307692307693 - }, - { - "value": "9973848877ce1f81bf1e86e3fac82c71f9a05793daf1e7b66aed9e06b7be12b8", - "count": 2, - "total_related": 27, - "prevalence": 0.07407407407407407 - }, - { - "value": "fff9f847b0dab68a2f219c390dc16c066e05830aa6d1bd0cd991000334b12471", - "count": 2, - "total_related": 28, - "prevalence": 0.07142857142857142 - }, - { - "value": "0f73d0269cf77c53a38fb5863258755e3055979a6343d15573ab2222ce75f49b", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "e9894893a8a1f74d7d6a8768dda9ef5ddaf8aac18634a1110e9a79652c9f13ee", - "count": 2, - "total_related": 32, - "prevalence": 0.0625 - }, - { - "value": "2597137783fa87ea31eca22222b7118807f2e83e2421f3de78ff1674cc0926b3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2727e1775588fee0f9e6d69460338cb526a8d0bb34c5d9df6e4609d1b3d56386", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2ade7f8def7eceba3e8f0e5d29d0a19626bfc595aeb1ed95b7404210569c6304", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "3d79f0886b7586240de217e7cd6902619c6a6c170ded4cb6655361ceaf1bd52f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4906c6294ac0d3510b0a89d840f11dbcfe6dadcf708feefbaa7f7ed2a4deb5d6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5115be816d0cd579915d079573bfa384d78ac0bd33cc845b7a83a488b0fc1b99", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "53d32b2a44271fd04244354342e9fc495c11df396a055f831f5b69eecae10f73", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "576d1688f744a9f6ae4c1fb4cec1cda3daecabf3a13cb3bafabf083c54d1fcb6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5d3e48ac31ca012603391afc2c44e59846958001823c04733ebd1b5d3cf6bd07", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5f4063e3a5583e62ddec2f84ca88eb97fbcfbee31d9269742ab438f441f0cd58", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "739e613e768e98456ac040a29e61b446de533312c07412e986344ae2b9c53c48", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "76e818fdc347fedf438d16fd0f81cffac7a610bcd5c0145c382d8490705b0b4a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "8949207761f3d09734aa716da1e6c182425bcde2a95dacb3320085f1fe66069c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "8a7ba38d597e8230609df4153039d1bb898479d486e653a6d92d206dd4848c80", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "070be2bfc60d1616afb196d523f1540d5fb62867d379f6e87b6f65bc38455c5a", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2c338055e8245057169f1733846e0490bc4ae117d1dadefe0a3f07a63dc87520", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "4c574c1a2b126c8a5ba1ef9560516d0ac9990c0253119f874eb084b57742e3d7", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "4e1ba61bd883858330af54ac00150816587bd2152e1d371c0c6187cb26ad12df", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "5842272c3dfa8153a147bf5cdefc0f9fc514e66fe9138585639529127d058e47", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "5d183e8950c7fd56350d5c7edd42481b7f164e34243fe832b1f4dd125da08b32", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "7ad1f7c989d7d8937bf9a1aca255c273a0bede03e6d26f5537971bd264fbadd9", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "10d83ed487de6ddbd99011f405006efbd415e24037cfd9c724628decffd5aadd", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "15d53bb839e00405a34a8b690ec181f5555fc4f891b8248ae7fa72bad28315a9", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "1997c68e44ab32be9003ca34a4285ffc53da51e2a6447c8824e27a6ce556a5ec", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "26e59279588902fe923bf88640d6640ecfd0823684799c783167062280fe1783", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "2b3fb6bda062f520155d55603e723ea927cfe6367fcc2eb67aa317790f86704e", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "3315e5a4590e430550a4d85d0caf5f521d421a2966b23416fcfc275a5fd2629a", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "3debe73d29fd2c0a8eca0f701c30870af25986189790322a45a9526f1603d12b", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "45c0b6db2c502796429e9a80c13ead3b80f835cd6c7a80b818fbb1c5c0ec3e9c", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "60674602836323647634016774ea123232160c1b4dfcf3fcd2d2c28c652aa00e", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "6f2eba03f19846814e3471453a161ce31e39ff2b6b0a820bf232fd085b46324e", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "7580aa32c9b02b527c536dd4ec0a5890d9d4d36c3fef30d0a2501daf53ef821c", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "7dcbeb1806296739acfa5819872e8d9669a9c60be1fc96be9cb73ca519917ae8", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "80bceed23c3bd2999adaca3190388fc4d69360486f931099e3684434e4968850", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "82f446528560789d2f79a9c5f1b8cf3e5eb20468bd567ef9735672748aa00b06", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "8afdf8513a6e3bede16187004daccc95e193a29062415d9ba0c29b98a5a927d1", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "07df3733b75e6e23d2217a6548ed66654793b20a0674b22187e558c3284c0055", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "1c451f6ebd58cbe1dee85a0451badd4edc9de58f4fd17d480f53542b9e5e2072", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "1ea8699dc216353ba29c5d3ca7fcbca59c02ca5969a554faf08f8aa0488e6a6f", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "4c4cc3abd3ddb15d5306fb647c6d779b18df5b949673bb3f3f87faa2c5f56a6a", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "51eaf8af57211f8d9e534f98413e71f4ddf5abcce806a111fc49a30d3bcec696", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "7ee88c6f150ca4ed19655146d644024d5034ce93686900eff0b3521f66ed55c6", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "8a8ad30c6c19d6267cd6de2eb82ed945d562ab463d3e7c4dde107ffa633a14c7", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "413c8b5d9156c4b399a180bc395d90a4bb8aa78df35b75241d33e186ea120f0f", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "48a16c721e620d2d00d4beb7e80531a205dc7e11f03573e650ad1e79b90b67be", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "516e58ddabe506c18098bd0ee842edb6c3ae4b49cbe51b844e79009d070ccc39", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "59469f24e845cea12de9b5e80ca06ccc4d27fb912b0d93a2125ddf1665077f4f", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "60f5f52653589ea35180538c9c6598c94691e7c99f7f62ffadcc2e7abdb7e296", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "51d53ca36a662b4aad5878987548f0f22f2a53545790577d8043373b6bf7eb75", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "65777672f94cfec5c3198c043cef9621b86a51a8f836a6b098d60e6d99a5abe0", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "6b0a93826b47e2b96fd79f19d02d9be1034958b30ef246ae57612b84c2ff5041", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "3656925f16d5fb5e1e1ad82d96c270935ff4cc65a3ced68fa6896efffbbc01ea", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "887fda691d4659af5ad5b1f5a51fc04335fdb55e53a7930be438e56f1e394edd", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "353f82475fcfad5b3f06ed85a931bda46ec34279793b5d70085aa8c603e8ebec", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "887fbf39125451a667977c82b989a2cdba78a888d228f941b8bae6d7dbb26433", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "09b83a501b8f919fc4861735097dd50957f21e81209d362b4fa425bd3348a495", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "1939d9fdcf831dc4cac001ba193669c75a336258bc99a1775471554229e4a69b", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "290c2e4d0efbed23de0d41d1b821396f5f1003f6f123ee6160d6d5028d01b961", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "0b8d7a851920d4584777505f9fb484b226a8457d4049885a87c847f7d3532d28", - "count": 1, - "total_related": 24, - "prevalence": 0.041666666666666664 - }, - { - "value": "81554ae36513b4a637d72db864f31e39ef3ae35ad402fb170f5e5fddee2d4589", - "count": 1, - "total_related": 32, - "prevalence": 0.03125 - }, - { - "value": "38ed248501bd35cd140f8376ac42e2c5a46ed4ec71cff0cec290fbc93678f323", - "count": 1, - "total_related": 34, - "prevalence": 0.029411764705882353 - }, - { - "value": "2d9d95bed6a6108802fa7c750cb66f2acce7b124f790ba552ec009c4d1d20744", - "count": 1, - "total_related": 38, - "prevalence": 0.02631578947368421 - } - ], - "cookie_names": [ - { - "value": "anon_u", - "count": 23, - "total_related": 100000, - "prevalence": 0.00023 - }, - { - "value": "parking_session", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": "NID", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": "SameSite", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "sid", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "cookie_values": [ - { - "value": "05a39ca9-4249-4e6a-89fd-073124bae728", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "071ca89e-15b7-4776-af8e-1a3f00a540f2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "11f5a74a-e556-4dd3-be3e-0a4efa8ec44a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "204=tjB2ZpmoajWBBYw7X7gIw1_JUh-8G92S7ZYXrzs2N0-dStJ4PpgBTA0fX_bPPl7ibFI9eRoT3adFWMzSvkz7fOvn-yR_cfpiRrDjIXaIL9K1eYmG_7KpjB2UE0zGpqPkowFjdnecV2_ix0dMLWk4z9PTA6ZnSFQyD1_BuCcUBMU", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "210=hpk0ghcz86RfX4D9suKNvGkyBhJvZ6zRE0fsj-2StSLKX6RCTzPs9WFOGH7aANbod7Z6uW_SbQ86FSA3A52IG1urYYcsJB9BqlGsSaYlx7EUk-n1d-OPbQJMqUmgV70jyFeJ_BLtxsnWzPogqs3saBoLfR-ovT2ZFUvM8_l9en0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "215=SiKHFgRCf1wGjnY-ZIB9epA67IlFjpzCYI9l5QVgJYICxjPsFma-RLXlPU3yhMlc1KA1uXMqUwDzgSNo7szni4rklNFVy-yodA8DNVshhiSYCpVsdmZTXHRVWKFaMB9xsmyqfse0J6ulgjlZjgZgPOg8gPkt0Uom_PDH2NlaRug", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "216=R74gwHcN0FxQ4wzMb1Shklipy2FdVjAAjrxOaiRGCGH9Bkxzuaa4ImEndX0zAE1tvjOi8pUZnA5EnQGIDc_tS-DJuu3oU-VRHna5AkBYPswURsY44zA4NWKRvONp7B9eyyhdDqeIBDZwfMw4YAJ_lrGxGumQxY5J9qqJ5y8jWMM", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "217=0K2Kif5BKrQWlwcN7lWE_Qyc7uCwnkGXEloKHG_YSr8TspXsP3XVs51GD3qPRX446fkB96jCQEoPp7TWFGy-XUOctDhjc_SW5wIVPIOexwK0svRPeW8jxbSRrKfcdR11wHfx2ETe-1pPCpOLz7Ys82a_q-yGylVXaGKN3dz320c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "217=f-2RXX77NeBYV4zCWVq7Fv3KyoXiiJLUSVuojsj6X9XANktNCcLUyCfrMauRbGJACDkjyR2lzRZL31Al992T72hLzwKvi1fuq3PjpBl-A_1ZbvaHKBcK1D-FM7jSodXa0cJefOy09RpTzfRoH7zSdb6G36p8yT6ANoVVygF1gCs", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "223=lqA53WDXs7hrgXC7SI5Zcwh_b7PiqoleDacvi-fe2U80ZR5kGJBiSGTnC7g7M-lKAVPkSd_GE67JXaZZHP8clJGYE1085jP7dLu6bVQBf0EznSiPIyKisrCYYkHEo8LAiFzFwLZAXGoOKgk-5y6mld_FZd7_zrLdcptHLMvkez8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "29781a76-2a12-4c1a-aa01-0a03252fa19a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "3a5a7de9-2e99-41e6-ab0a-4e290cc61728", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "511=DsjUGjIyvz9lIcHbLDwc_H5_bZOtvnbsuH3nepkT-kPtZKabsgN8Ly9EPply9Re1a-40_l3Waxortcu1-aVcrdEknjEHGZiKbM7dvqkuiH9cBOwa-UvACrMldQaVhArlmTaQkOCJGdEXYbLkRo9jQGiV2ULwl4u1WzgRvMPaQxU", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "511=eprfsjUGGPg0ZQ636wxRfwwx1URknLJZfEAqSXIqBr-WVj56zl1eI19iR5UiVFE4AHVjL1Lal3eoLIvZJ6skJT-_B-We3m0l_pQvnDTncNSJJOZjm16xJ1tZLul-giSfc1eY3nSSDGu1RlxSjX2GwLYiXuK_YqLpRG-JKro3Z24", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "511=oYMBI-eFPy55afGCsJee497bGbuXWvTFtyGf2G9r_tbnfNVcJMKDeVGPjYgHrobDOwRZNke0VEnO33dXjqHW4DflsnPk5e_TDQeTzN3XheV6KzdNUpH3SQ3RrxsssoiyFOFqFHYenvKt9NFq9lqO9ifNI2nlmvGJc_8NUkFhcyE", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "514=LIVCRMngVCPLmc_uaQ4uUXFkqDppZl_I3yw_15pjwfFic7MZN4nS_DbvT7drOE_lRR43h1O9swwOOcdCu2w_7v0Sqooj-RWssUOHQ0D8PYCJ_cBN4MkUQwCMIatcFTYMkQiNe42zkTE9SA9EbEOBHIeOZtD7PZcm9AQAFXv2DpQ", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "514=N86yh5WBGwGg5GB5xpYnO2Uy407TR6i4PeqQm7OK9EuMDho2wnxSRus4ok1LzKtByLsu4jCNQTaidcrbuqyM_GDloF_E5zxEjICNP35V1dIEI_yCXwXo8W7OuahDliNTO8HHAFzOQRLz7Gku1oySdf4A5tY2TqX0PgWviRW44S0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "516=GlVQYicMvbugPqdYb2sfBC6BfjY9Qx4ga9NpOXawvD0oPppeJ5LREqi4NLwkgXNZvkjcqTQLJmWozP4ELfh47W7tlOf6jk60vZGrOfBjnk8OJqkHkWmklM9eJ-r7tqCPA7w7zUADceYlnu6vLFwE_L5pLr3SDBP3SnUYJRqvgnE", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "516=J2v8AkVAF6evseVLAPv6IxORINDrNZT8vJ3T0a0aQmFXh93l561UfnVrMJ6Uxl5oQuF6n_NAv6j3HYh34PaUjRC1HpqdyBabtzxGcySzCStRp-Z8x8KX9hVZAbywrhVMlxP2JYVTPicnfdaVTbHlKZ7Emwg9zwrFPoEom0up0DU", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "516=mDe5ycPvXHBe8fsM6gqAvVb1tp9lQBR0O5ypsnXQitqCecrmOiQEcqsRtUl4UFTTvM5colarZKVNF3APrzunD0gcC7g2_8DCiM1c2uj448gmoOaRJSocwVfPvx8J83fGypVcR3YdntRmWMJHdw_J7sDx9araVa3ikMyMukTT2Zs", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "516=m_PdotOo4t_QyN2HwPP3gBCAFfcQoaEMU1pWbD5dwlA5aIhJVRbwSxJY2qZxxRUrtoqvGzdxu7y-gUfI1m_oM4tNhTaRW7q8vj7Ij5EWQwmWV8tQc_WpU9js67tyfOeLoyGd1BeT1TLVKaAP1TOQyO3_jcKMd4GeNoe_8Ep6lnQ", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "516=o32IaNEEOOQK8lgBdqwdg_YvH03oKUgsWA18HQ6eUmdVo8jWIMGFX-FWKOiccsBEUf03gM47P5W1bNmzIdOurPHgNIEuVsvKCe9vOnR5a_dwHVwZR7jAxi6qrS-ZFg-pCu_a6sLrSQ4w-opBZm_ms-cIQ6b3G1IaO0WC4WUsdAg", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "516=qfS4kd6Ek1XnrdwkKSGkR3dgs8Ujv60vAIPsLNoGUHsLP-UQTVIP0EtjG92FSPaWLzUzsqVCTYeVi29-ky1w74x5YaqBzvVXgDRusHPzjd7NSbg2hhD5vUniUrMBQz5WHwY0b9k_rSLZ6Nz2J78Pzko-LkoN7Dt7zFDSnBPcm4c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "518=lVFWrh76kaIOgT2LCUhkYI-Pw8i5yc14iPfIZE_HBhTiv0VftJnYAqwFNVozpSLX6oBh5WmUQ41CGrFA5Wlt2xBBqVSHDzNXjTTpoFvrLfp5QZ_Wo40rbdgkHi2S2ltL79fdGBBaN47vgo-wfO9rBjJ_RgW0tOpxeyuDMhmdI-M", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "520=gmcYFkzwUwrkm4EqD8HefajRfUIKBH5dxrYjugJGzkSpYj9FXPOE3R0Fk9oXp-qF_2txCTXix3Tr2DphUAhCxQ9UXcPWIWm38yxGAFigeHfGTf8R0OvwepDUj1enRumCtVVV04n-_Cp8VIGZ0LD0kkZAiJqwz9A-LA_RmXFcfVY", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "520=sYmveBZeh0XIaIv-1JdM71zjWNe_NiQL1OnMRYEAuJAFj7c55ppYqVAYN5klpXrbAEQ_IuUPrGXftn7mUp0oS-EhPTqSZnhLAIUQ1Sav_huKeD_hdsc4aUYeU-RIZ45JKFkeXMd1YtivJTN6qEe1bLNvTOzSL7FQGRdL1cH8Qew", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "521=oKPnfCFSIqy18M5HNKw9Q99z7rUeWIBcaAj3GDeAyN8--akhL0sdGDN3Kvzh1_1euzi8KvZPO8v7GttOxIDCbRIujN9SVRNoMLPkqThNrxqf9yUHPhfScVfFUppS7pmX0Bn7ARSQJ0kJEswb6wfr41ff1BhRJ6Saf7lpkGrtJCw", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "593396e5-f52d-463b-9b97-bb20094c720f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "7c7d2a80-362b-4526-987a-a456fe8edc01", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "802f7561-9ab1-498a-a02d-d3b859bfe57a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "866971f4-3986-11ed-a8da-294ad0b4d10b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "8d37189b-8fa6-4a22-ba3c-1dd64b03d877", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "904d3e7c-199a-4e71-831d-f55a67984bb0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "a8bd9bc1-ad13-4c0e-a2f6-f674c31e5208", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "b46d99fb-b20f-4902-88aa-a5f5870183df", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "c0c2366b-db1a-40b9-b115-00f8076052c2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "c3c3c6d7-b805-4574-aaf8-5436fe6c36ed", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X180MDljMmYwZi05ZWE4LTQ5MmItOGM2MS0zYjFlZTVkYjE2MTg=|1601502218|575fe56b5136156c4ac03a5ed34b3b0c123ac991", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X180MjA3M2YzZS04M2ZiLTQxMWMtYTQyNS0yNWUwOTllNWEzNDA=|1612362979|a83ef17444b4b850abc52392376aaed2cda4fc75", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X180MjE0OGYxNS1hYWZmLTQ4NmMtODFlZC1mNmQwNGRkY2U2NmY=|1598609607|6bf9330020dcc1a924a2204ca5452143cec3df6b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X180MmYyOTViZC0yMjI4LTQzMmItODQ3OS1lODIzZWE4NTg1NTE=|1601502206|7990028ab5877231e4668d4d5bff5b7dc050960b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X180N2IxYjI0Yi1hMzJlLTRmNjAtODA3Zi1iMzg0NjJmYjA4YzQ=|1598476906|8961b53a8f773bb4050195abeb1fde892e0658f1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X180NTMwMWZiMy1iYjVhLTQzY2QtODYxOC01N2EzNjhjODMyNjc=|1598609620|c780147a905ab3abd529bc5adb95524a51d71abf", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X180NmRkZmIzZC1hZDhjLTRkNmUtYmMzNS1lNTBmMjhmOGUxOTU=|1601502222|b97554aaacbac333cd21697365a6a54e1cb3d14e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X180NmZmYTg3NC1hYzlkLTQ5MGUtODMzMy1mNmQ4YjBmYWEyMTM=|1612363630|20f1593634f9fc2b110ff62a9d0595271983c4ba", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X180NzBjYjVkNi1hOTUzLTRiOTktODExZS1lMTQzNjRmNzhjMmI=|1616989853|9be30c34322eaffdcad7608b13287cb95fd5b7b1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X180NzFmOGY2Yy1iMjk1LTQ3YTgtYjU4ZC1lOGMwYjk4MmEwMzA=|1601502207|c30ad62926156d7d9e5445c18338bdecd77934a1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X180ODhmMmYzOS1hOGViLTRjZGItYjc4Zi01YzRlMDI5ZDI5MjE=|1601502197|cc16642284d4297466eff9ccbf731c3383f80490", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X180YWU3OWQzMC0zOTllLTQxMWYtOTBlOS04YWRkZmNmYTk0MmY=|1601502221|4dfbc232906a9402ea3fb0b44d4474c024bb29ff", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X181MTU2NDVmYS0yZDM4LTQyY2YtYjY2ZS1jNGNhZGI1OGUxMzE=|1612363647|55eeb1ff7fa4f88c4379f2275aa6a2b02aa2d51f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X181MjM4ZTQwNS02YTgyLTQ5NTMtYTVjMi03NmUwMjM4MDYxNzM=|1598476896|cdf37c709609eccc49fd1a2f92d53ab22bf9b5aa", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X181MzdmMWI0NS1kMTMwLTQ3YTEtODM1Yi0yMmEzZTZhNjlmNGU=|1598609592|bb973f944cc45e21b5a7a019a4ef7e634b647105", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X181NTZjODk1OS1mNTkwLTQwZDgtYTVlMS1lNmYxNzE1YjIxNTI=|1598609591|c369b6fc86005e6099a457cc248f2cae4227965b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X181YmY5NmQxNC1iMjNiLTQ5MDktOTZmMy0wNDkxMzM2OTRhMWQ=|1598476893|8abe94c1ee84d5f9512e1087c95475cea102697c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X182M2VhNDcyYS1kYjIyLTRlYzktYTU5NS1jNGJlNGY5ZWM1Mjk=|1598476918|6132145449ef6515caf2f23bcd8b2e7b6081b9c5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X182MjA1ZTI5YS0xMDQxLTRmMjUtYjIwMy1kZGJlY2U3ODlkOWE=|1598609602|4afe8ba0b481b23c101b0d4f01d125f0d63bfd6e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X182OGZkNjJlMS00ZmMwLTQzMWEtOGVjNS03ZmNkMjZhYzM4ODc=|1612363655|bcdcd3582a09f308fc27837894081cd852b51b5c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X182OTM4YTU2Zi05M2U4LTRhOGMtYWYyOS03MTc1ZmUxODA1Zjk=|1601502181|6de09b5559124df495e41f3c4961d112f2340661", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X182OWFjMThiZi0xMWU5LTRlODEtOTM3NC04OTliMmNjN2Y4OGY=|1598476895|f174dda93e7732ecb00211d5b9aa9c2d95f93fe4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X182YjViOGU0Ni04Y2M2LTQ5ZjUtOTkzMi1iYjQ1Yzg1NzQyNjY=|1598476921|ca764a02cfa5b6fa4990cb1babee7a0b6bef411b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X182ZTE3ZTY0ZC03YzljLTRhNjEtYjFiMy02YzFjMzEzODY2ZDk=|1612363649|9891ac192e6b50db167f232aa6bf985c4f9f6651", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X183MDNiYmVmNC1iNzcwLTQ0ZGYtYjhkYi1mOWQwODM0MGM3Mzc=|1612363638|d91b44eb29963744157b8d7d322401249443358f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X183MTlmNWRhMC04YWNlLTQ5NmEtOGI2Yi1kNjk4YTIyMDk3Yjk=|1598609604|4b68949b10e96c43c7309ce27c2dda8ef2555f92", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X183NDJkYWFlMC0xZjdkLTRkM2QtYjlkYi01ODRhNjJkZDFmNTQ=|1601502194|ac0085790684fb2012cb43f70ee39a79b29f58f7", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X183NTkxMjJhYy03ZWU2LTRiYzItOTEwYS00NjExZjA3YjVlZWI=|1612363912|9fc07f6dd0e8fc7ef253c1871ce11941dee458b6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X184MzA3ODA3OC05MWFkLTQzOTktYjFhNi04NzUzMmI2OTg5NzE=|1598609583|99251bbf9be9b5ca7b6409befc00443b6cd5af12", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X184NTRkMjAxMy1iYzJlLTRiNWYtOGIzMC1iZGE1MWMxNTVmYzM=|1598476881|11a66ba38c76344681b47065f1889c2a1456165a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X184NzE0MmI4ZC1lMDZhLTQ2MDEtOTBlZS01MjJkMDUwYWI3Nzk=|1612362982|739541234db00e6396be323e82225057791b6942", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X184NzcxMzMyZi0zOWFmLTQ3ZjMtYmNjZC02MDliY2NhODdjYjQ=|1598476917|4a68e07814e744afd4908f4342fabdb1b808dab3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X184ODdiMDY1Ny1kMTI2LTQwZjQtOTFmMi1iMzYxYWM1MmIyNTQ=|1601502177|dd619ec2d4a10f667a3249d734adf6165623fade", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X184Y2EyZTEyMi0yY2E4LTQ4OWMtYWYwZS03ZDIyMjkxN2ZlYjY=|1598609600|aa469975d2e09b05fc632b6a43b2e5cf9efb5b56", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X184YTJlYjI5Zi1kNmMyLTRlNTAtOGYxNS01ZTE2YTg5MTlmMDc=|1598476903|4f6a4ecf1a253408cc58b74821b9cc1e0eb3c4b3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X184ZjkwYTgzZC05ZTM5LTQ0MmUtYTBkZi02N2NiYzA5YjZmZjg=|1601502212|5d71f392c2cd80c858f61b22fe84c11581893ab3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X185MDVmMGVkZi0zMTY4LTRhZTQtYWNmNi1hOWM4NGYzM2FmZDI=|1612363909|b07bf04cf178bd5b4d537ffb430c65599cde621d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X185MTBjMTM1Zi03MGZhLTQ1NTUtOGQzZC0yODllOGYxYjcwYTk=|1601502183|05e02bda1afb4889414e6b865099fbdf90144c86", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X185N2MwNDViZi02YmY2LTQ5ZTgtYTcyYy1kNjYzMTZlNTJjMGY=|1598398231|c4183a22fb1a36f41f1e97b652678cde3af26089", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X185NTJhMzlmMC01MjE0LTQ4ZTgtOTNlMC0zMDc1NGEyYzljZWY=|1598476911|c7dbba00a1630f92753f05b40680da4590fe88c0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X185NjI5OTc4NS0wODQ5LTQ5OTYtOGU3OS05NmViOTIyYzM0ZDY=|1601502189|9b2b0b4dbfd3b97398338ebe1026bce79c5f66be", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X185NjM2MWE1Mi00OTA4LTQ2NjYtODJjOC1jY2EzYzI1NmUxZDk=|1598397459|9eb8410272f4b7bdd3099afad9a8eaac004fd67d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X185YTI3MDk5OC00Mjg4LTQ0NzQtODA3NS1jMWQyOTYyYmY0NTI=|1601502220|dd2e55614df0d9e84129156a59694fe98626249e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X185YzlkOTdjYy1kMmYzLTRjZDYtYWU4Ny0zNDQzMTA1MjUyZjM=|1598609610|89ce403211d76b844101b0ae77b9825b7d893ba5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X185ZGFjYjdlYi1jYzJlLTQyNzctOGQ3MC0wOGQ4OGIyM2Y4N2U=|1601502202|319c3991741798898c2a91cd398a816b675d03aa", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X18wNTVmY2M2Yy05NTE4LTRhNTctYWE5MS1lOWE2MDlhZmZhYzY=|1598609584|00fadb00b235b112abae541c819bdfa6b5240bbf", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X18wY2UyOWYxOS04OTI5LTQ2MDMtYjkzMS0wYWIwY2E1MmE0YjA=|1598476878|8ed2ec8a62bb14317960c65848024d3da12d8426", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X18wYTI5MTUyMy0yNDIxLTQ3NTYtOGU1OS1kMzgyZjNjMTk1MmM=|1601502176|0d5baee9e7a8f25c27e71fe28ea97b1a87d1eac1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X18wYTQ5NDUyNS04NTg2LTRjZDEtOWJkYS0wNGY5ODFmNmRlZGQ=|1598476908|932ebbcc83b791df34419bf009343e217ca1bb8c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X18wZjE5MGEwMS04YTVkLTQzMjgtYjFlOC0wMDU1Nzg5ZjEzNzY=|1598476922|11c74294867997bf598b5aaf814a45c89fa953a1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X18wZjcxYWFiOC0xOWJiLTQzMGEtODE1Zi05YzMzMTUwODk5ZTI=|1612363635|5872feb08bf02e71b773cc75cdcb0e9a74349092", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X18xMTM1ZWMyYi05YjQ1LTQwN2ItOWU4NS01ZjQ0NDllOGQzNzg=|1598476880|a84d918cf9cab3df7c8817951f3402f0df2534cb", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X18xNjI5MjYxZi1hYTkyLTQyMTItODI5NS1iNjYzMzBkMTc0OTY=|1598609595|29dc3a8b74a05ecf1ba5463d6c439b72e0810aa7", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X18xYzM0YjJlOS1iZDk1LTRkZTMtYTc2Yy05MTllMjU3YmM0MWU=|1598609614|e17acbbf92e14be43a239d706b0b34ddd4234c51", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X18xZDE4YTdlYi02ODk5LTQzNDYtYWRkZS1iN2JhZmQ2ZGMzMTE=|1601502200|b50f953f367d5a2b6700751590c6fee7ea61cedd", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X18xZmQ2NTViYy1hNjc3LTRlM2ItOGQ1Ny00ZjgwNWMxOGNjYzU=|1601502192|529742e9227d71cfe9a25fc6a8d480350f986c7f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X18yNjVmNjExNy03NjIyLTRhMWYtODIwYS1jYjFiMjQ0MTgxZTU=|1612363412|3ae410211a889d04237ef832a89682fac0f6f492", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X18yNjdjMTMxNS1kODYwLTRlYTgtYjNjNy05YTllNDczMzkxODk=|1612363660|9500c1bfdb475417d6d4c538758422496e6a1bde", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X18yODBiYzA3MC1jZGM1LTQxMzAtOGM0OC1lYjUyYmZmMTcyMWE=|1598476888|12f933d50975b664fb31a720b3cc71de7f398fe6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X18yOWJmNGQxNS1hY2FlLTQ0YjctYTkzYy00NGE4N2RhZTNhNmQ=|1598398230|a1e914693a4ae50c344464191f07fd00cafc6285", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X18yZWI5YmQyOS0wYmI4LTQ0Y2EtOWNmNy0yMDc4NDRhYTEzOGI=|1598398230|f7506349c1500cf074e831fba7ef2511066e52ff", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X18yZWY2NDJjOC0wYjkxLTQ1YjYtYjZmOS0xZWE1NGI0YWEwMTk=|1612363415|ee93d6d790853ecbada61b42a3cbaf3b50df7244", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X18zMzRiZjNiNS0xOGFkLTQ2MDEtYWUyMC1lNjEyODFjYjIwMjg=|1598609597|94aadc4b33d004552e5f30175290107f840e4279", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - } - ], - "downloaded_files": [ - { - "value": "6419f11e727f620019c38b901d0239e077a1820247a3429386c65474e0b6f605", - "count": 32, - "total_related": 43, - "prevalence": 0.7441860465116279 - }, - { - "value": "1f1851ea45175dfd9490310acd822fa980c2d766aa5701e7a44231d686b3bf3f", - "count": 24, - "total_related": 27, - "prevalence": 0.8888888888888888 - }, - { - "value": "4f1987847e23e9c9debb64481372b00fb0194a615154a7f87d2ac992dac70306", - "count": 21, - "total_related": 21, - "prevalence": 1.0 - }, - { - "value": "e1b08ef93178fd96fc2ae4f1998f441bf73b105a3fb62a9bf19dae4d55a2b9b2", - "count": 15, - "total_related": 20, - "prevalence": 0.75 - }, - { - "value": "63a6580d9ee8d5a632886585ab8f7ab59c87d4e2717181c191cac236cd1e1de4", - "count": 11, - "total_related": 11, - "prevalence": 1.0 - }, - { - "value": "aebe53d8cd6bd7cb29e0af6cae7df5c1e302d7cab15c714510ce151a5f658590", - "count": 7, - "total_related": 9, - "prevalence": 0.7777777777777778 - }, - { - "value": "d266e47dd456fd2d97947ced1677bbb9eba96ff0582096b508d9e930116ad9aa", - "count": 6, - "total_related": 6, - "prevalence": 1.0 - }, - { - "value": "dd49af65cd3c902f4d2acc8da2fc61a558dc1b2c11ba8876cb734d6768c295f9", - "count": 6, - "total_related": 8, - "prevalence": 0.75 - }, - { - "value": "37e75280f3ee7801b06a9ea2c72b4463de5c3fa877f08f6aaeed79815128bc8e", - "count": 6, - "total_related": 9, - "prevalence": 0.6666666666666666 - }, - { - "value": "79de30973b69aa4c44574a512e7820cc0a00f1241930ea361b7b0afcb1cccf2d", - "count": 4, - "total_related": 6, - "prevalence": 0.6666666666666666 - }, - { - "value": "a4c04448088d12494af1c1ff48dcbc11045f5f4674b681a6177a52e0af696274", - "count": 4, - "total_related": 2002, - "prevalence": 0.001998001998001998 - }, - { - "value": "ed6f6f2144998175c846a99d2a0faab5bf7b6ace318f0fe2dc4bfeaf4700c1d8", - "count": 4, - "total_related": 24084, - "prevalence": 0.00016608536787908985 - }, - { - "value": "5f18e872712ba761b5e74d9672813ef7c11bc996779053063b9cfd557bdb2352", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "e718083b67de582dc0a7dbedea0e1bc4c9847fcf235071a78f0e3015ab886d3f", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "ed06fc8b097fad7db2908265afecb3232deff5baca29ea8438df55cefc01dea9", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "c6ed4f5b1f3952bff700a6d5755c0534aa9a222e566a206cf5c8149c8a377f7f", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "899b2da752ad50f525e364f0af930dec91a128effbe8bb601803226604038d5b", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "8a649bb66b2a3b014e226da08118439611f6fdc91c69949ad0e04c3cdd7b12b5", - "count": 2, - "total_related": 8, - "prevalence": 0.25 - }, - { - "value": "e1443334a5e7b905b15b2f7d2000d696d3dc3d968956c1953476ab8eb9e360f2", - "count": 2, - "total_related": 17, - "prevalence": 0.11764705882352941 - }, - { - "value": "d93d30e04aae04c0f8a867b2b7c349b80fe32e393373d97ab788b61c6967b2ad", - "count": 2, - "total_related": 49, - "prevalence": 0.04081632653061224 - }, - { - "value": "994e4d9bacbacb4ff7621c7f2b2abf8900994212bb808b08f7b41b1ac29c30e2", - "count": 2, - "total_related": 3520, - "prevalence": 0.0005681818181818182 - }, - { - "value": "766c1d6bcb81d3e983fb7adbc19c616d7fc01dafb7893738edc242e2adc59c07", - "count": 2, - "total_related": 15407, - "prevalence": 0.0001298111248133965 - }, - { - "value": "059bbd9cb679779f4a1bdc953dd10dee88ad6dd510ce147bc5885ee06bf83ae9", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "05fd254df41265e931ce4c35c1def5ccc42c8b9de0070bdde5ebaa90c3727f15", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "10056ba4bd97e7f1e3a5ab742addac29597a6ecd40289e720985fca9e1435697", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1738bf0854c7ad33855c173dda85e386100892ce79ba73407fca2465ea0afb29", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "18977ffa1d19ceca67c5afb50e60078380ece9bb1e10f33bff74c7c97aad95bd", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1bf991c4d81feb70a31afd77b6b70217fe46bdf506e525aea641aebc24401087", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "24c4ffb5dcd39306042eddda28519c1b962756d405f0f2b4d386ceee1c6bee86", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2727e1775588fee0f9e6d69460338cb526a8d0bb34c5d9df6e4609d1b3d56386", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "6f9b6fad34a07d1c2321bd281e8333fbef39329307be4bbb00cf1196577933de", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "7b68cf23354c876f8087b99efc4f6ff40dadf2bcf7c39dd2e8d84beb602c3d93", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "889cc2f9cd7bcddec734976959f793f530ddb1dac839a99cbf032a52fc4c7783", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "8935155b4d1f5c1d385caa01a2a0b3e88f3403f015a42e3001fda0b6dabd84d2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "9080f87a27c57feae977e15960aa4215cc3092474bd780ce8cbcdc57858c07a8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "9b46ee407989c21ad5d2a62ce1d32f5c9e52aee04fbd1a816ad5b26db5943659", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "afa2ff0e46d0f2485115dedd5aef6fee4421f618c414951d63a3d4c63715eb65", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "b2da30969ce002c2295b5454ca4ba67724cf53252823eb23b07d50f55cad0d71", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "b4530809f22f5ff01e8adfa3f5719b7427bd022f1740d0b1dbc8da99bc9fa6bd", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "c1d518080285bc71343620f32f408533fae1e0348234f0be7be1bd0e6c83ff2d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "c5d793efe8861adff03bbe9a5b5f4206b5d84b19549a2a4e028bc7785c4e3ee9", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "ca2c4e51e9cbb0bd8a43a593ed0d0d68b8799cc4e0e090e5998370c362051cba", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "ca96ee8738184d1988d27801bdece3c6ae91496565476e3c56d185ff5aae6ebe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "dd84a9e10b7f04ba6ca8f6f839292ff2b439fd3b2fef5c97a25c52fa45ad797d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "f680637e7895b353a38e3d5a606e7c8bf66874455237ddbbddf9adc9a3076981", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "fb7c2cc23af35ba810b5cd2a450bc01be8a22ac168aed6c16a1debcf873bc72d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cadd48debc8640828d9c119789666e3402d3f6fc4f98519c6024b9b03c09e598", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "ccdddfebb725c75668958401c296d060e3035a9dd9d304dada258d3515c010db", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "0251e93999f120d31b70c2b99a45ab36785c22e7c7067b9bb32c3531efd86b2a", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "cce2575f8a0406a2ac98c87e17f20c4a82c9fb1f7370b9a57d0d886e41b0d26f", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "e73d8dd18666e55cd47255b8adc26748be8907f6fcd9d2a45eb2c9337b830159", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "9fda3e5c67b63a784c1651c49ed49b4a565e29ac4b026186c442ad7a2578d6ae", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "b57dd6433f6ae3a8c0a8d555cdd2998ac9c3deb277378120d07da51539889c84", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "3c60ed5292a231aa1010565f3aa1f2ae32d43eed677a064000db388c52badaa2", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "b7140094775a33a7a3c781509ac244329d903e2e06f6b456c4b0b4f58a304956", - "count": 1, - "total_related": 58, - "prevalence": 0.017241379310344827 - }, - { - "value": "9e65307beeff44ef2548eabf897ae52382930923c74aa9ca1c3f9b857ed871c7", - "count": 1, - "total_related": 105, - "prevalence": 0.009523809523809525 - }, - { - "value": "669bb658059b0d13e583d42c2de2a8b0988a64c2febec0f8b47a963b9780d5a6", - "count": 1, - "total_related": 154, - "prevalence": 0.006493506493506494 - }, - { - "value": "21010f823005d26b7ab0dba77db368c2d1c4fb9b939b7dbc6c97450541b60b9a", - "count": 1, - "total_related": 1214, - "prevalence": 0.0008237232289950577 - }, - { - "value": "b22a479c3b1c5dff14526d6f3004b71eaf62af18dde0386d89d44ba965955b20", - "count": 1, - "total_related": 1567, - "prevalence": 0.0006381620931716656 - }, - { - "value": "83c945c6dbafdb7d8448848d2957ca71bf172117b459e8be35b76de92d0f072f", - "count": 1, - "total_related": 1673, - "prevalence": 0.0005977286312014345 - }, - { - "value": "33c1c92944a084e89ac8cbfe15da3c741575cbddd50a0301b946fb6da8441a93", - "count": 1, - "total_related": 1795, - "prevalence": 0.0005571030640668524 - }, - { - "value": "f434e4bfd4932da1621fe1a5dc44d923ea30d42d70cab656b1e80aae124da340", - "count": 1, - "total_related": 10949, - "prevalence": 9.133254178463786e-5 - }, - { - "value": "4528209b26ac18543eac46381a27150e0d145fd8537514b701b44339e9c66671", - "count": 1, - "total_related": 11511, - "prevalence": 8.687342541916427e-5 - }, - { - "value": "0cd6aed5d21ae37310b3c4e0facf48009005018bf4402fbcda1cb66d69b03346", - "count": 1, - "total_related": 29303, - "prevalence": 3.412619868272873e-5 - }, - { - "value": "77df749f6bbe85442500437f7e798f46b9635da344811ae3b4bf7d43048ee9bb", - "count": 1, - "total_related": 30574, - "prevalence": 3.27075292732387e-5 - }, - { - "value": "e14487407359a2b8c009bbaab7656357d5a9f315948ef97181e8e41711411593", - "count": 1, - "total_related": 57786, - "prevalence": 1.730522964039733e-5 - }, - { - "value": "b16e15764b8bc06c5c3f9f19bc8b99fa48e7894aa5a6ccdad65da49bbf564793", - "count": 13, - "total_related": 100000, - "prevalence": 0.00013 - }, - { - "value": "982b986bb578e137f062099427a8caec3c501c84a9e4b22369ebd2badec42fe7", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "9ec2f0698f1c3497de39a192dd1c3f3e4506ff1a84dbf85082344297dc52e681", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "0f3a07f36d6bddee418f7d7548bc165b09817e10764a359d2773388cdec9ff8a", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "8437bd0ef46a19c9a7c294c53e0429b40e76ebbd5fe9fd73a9025752495ddb1c", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "887c8ada6058f01125a5131f1c495ba5f0171b2c40466ea824494403b87c1a22", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "cbf1fdfdb7257daf8b0905d94bd04e2829c502c9c01b1d96bb979069e2ebc895", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "dc1d54dab6ec8c00f70137927504e4f222c8395f10760b6beecfcfa94e08249f", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "domains": [ - { - "value": "cloud.dnx.capital", - "count": 21, - "total_related": 42, - "prevalence": 0.5 - }, - { - "value": "bankofamerica.us.org", - "count": 20, - "total_related": 31, - "prevalence": 0.6451612903225806 - }, - { - "value": "welcome.newcoming.cfd", - "count": 14, - "total_related": 25, - "prevalence": 0.56 - }, - { - "value": "on-global.xyz", - "count": 12, - "total_related": 20, - "prevalence": 0.6 - }, - { - "value": "docs.azurehosting.co", - "count": 12, - "total_related": 23, - "prevalence": 0.5217391304347826 - }, - { - "value": "cloud.espcapital.pro", - "count": 12, - "total_related": 24, - "prevalence": 0.5 - }, - { - "value": "share.bloomcloud.org", - "count": 12, - "total_related": 54, - "prevalence": 0.2222222222222222 - }, - { - "value": "info.publicvm.com", - "count": 11, - "total_related": 18, - "prevalence": 0.6111111111111112 - }, - { - "value": "it.zvc.capital", - "count": 10, - "total_related": 16, - "prevalence": 0.625 - }, - { - "value": "www.googlesheetpage.org", - "count": 10, - "total_related": 40, - "prevalence": 0.25 - }, - { - "value": "support.online-meets.store", - "count": 9, - "total_related": 10, - "prevalence": 0.9 - }, - { - "value": "verify.azure-protect.online", - "count": 9, - "total_related": 15, - "prevalence": 0.6 - }, - { - "value": "arm.texchi.xyz", - "count": 9, - "total_related": 17, - "prevalence": 0.5294117647058824 - }, - { - "value": "offerings.cloud", - "count": 9, - "total_related": 19, - "prevalence": 0.47368421052631576 - }, - { - "value": "share.stablemarket.org", - "count": 9, - "total_related": 48, - "prevalence": 0.1875 - }, - { - "value": "file.fclouddown.co", - "count": 9, - "total_related": 51, - "prevalence": 0.17647058823529413 - }, - { - "value": "support.video-meeting.site", - "count": 8, - "total_related": 10, - "prevalence": 0.8 - }, - { - "value": "fuzhifei.online", - "count": 8, - "total_related": 11, - "prevalence": 0.7272727272727273 - }, - { - "value": "sharemanage.elwoodasset.xyz", - "count": 8, - "total_related": 24, - "prevalence": 0.3333333333333333 - }, - { - "value": "avid.lno-prima.lol", - "count": 8, - "total_related": 28, - "prevalence": 0.2857142857142857 - }, - { - "value": "cryptyk.ddns.net", - "count": 7, - "total_related": 10, - "prevalence": 0.7 - }, - { - "value": "support.video-meets.online", - "count": 7, - "total_related": 11, - "prevalence": 0.6363636363636364 - }, - { - "value": "secure.azure-protection.cloud", - "count": 7, - "total_related": 12, - "prevalence": 0.5833333333333334 - }, - { - "value": "cdn.onlinedocview.biz", - "count": 7, - "total_related": 13, - "prevalence": 0.5384615384615384 - }, - { - "value": "app.aixstore.info", - "count": 7, - "total_related": 17, - "prevalence": 0.4117647058823529 - }, - { - "value": "product.onlinedoc.dev", - "count": 7, - "total_related": 21, - "prevalence": 0.3333333333333333 - }, - { - "value": "www.docusign.agency", - "count": 7, - "total_related": 27, - "prevalence": 0.25925925925925924 - }, - { - "value": "www.datacentre.center", - "count": 7, - "total_related": 33, - "prevalence": 0.21212121212121213 - }, - { - "value": "meet.twosigmacap.com", - "count": 6, - "total_related": 6, - "prevalence": 1.0 - }, - { - "value": "ps.azurehosting.co", - "count": 6, - "total_related": 9, - "prevalence": 0.6666666666666666 - }, - { - "value": "cloud.anobaka.info", - "count": 6, - "total_related": 13, - "prevalence": 0.46153846153846156 - }, - { - "value": "indeed-ministry.com", - "count": 6, - "total_related": 14, - "prevalence": 0.42857142857142855 - }, - { - "value": "drive.cloudplus.one", - "count": 6, - "total_related": 23, - "prevalence": 0.2608695652173913 - }, - { - "value": "googleservice.xyz", - "count": 6, - "total_related": 211, - "prevalence": 0.02843601895734597 - }, - { - "value": "support.general-meet.site", - "count": 5, - "total_related": 6, - "prevalence": 0.8333333333333334 - }, - { - "value": "web.interzoom.us", - "count": 5, - "total_related": 6, - "prevalence": 0.8333333333333334 - }, - { - "value": "cloud.anri.us", - "count": 5, - "total_related": 7, - "prevalence": 0.7142857142857143 - }, - { - "value": "floriventures.linkpc.net", - "count": 5, - "total_related": 7, - "prevalence": 0.7142857142857143 - }, - { - "value": "word.azurehosting.co", - "count": 5, - "total_related": 7, - "prevalence": 0.7142857142857143 - }, - { - "value": "zoom.communicationhub.us", - "count": 5, - "total_related": 8, - "prevalence": 0.625 - }, - { - "value": "googleservice.icu", - "count": 5, - "total_related": 9, - "prevalence": 0.5555555555555556 - }, - { - "value": "in-zoom.us", - "count": 5, - "total_related": 9, - "prevalence": 0.5555555555555556 - }, - { - "value": "web.commoncome.online", - "count": 5, - "total_related": 11, - "prevalence": 0.45454545454545453 - }, - { - "value": "autoserverupdate.line.pm", - "count": 5, - "total_related": 13, - "prevalence": 0.38461538461538464 - }, - { - "value": "key.sharedrive.ink", - "count": 5, - "total_related": 18, - "prevalence": 0.2777777777777778 - }, - { - "value": "signverydn.sharebusiness.xyz", - "count": 5, - "total_related": 18, - "prevalence": 0.2777777777777778 - }, - { - "value": "share.devprocloud.com", - "count": 5, - "total_related": 19, - "prevalence": 0.2631578947368421 - }, - { - "value": "cloudshare.jumpshare.vip", - "count": 5, - "total_related": 28, - "prevalence": 0.17857142857142858 - }, - { - "value": "doc.filesaves.cloud", - "count": 5, - "total_related": 32, - "prevalence": 0.15625 - }, - { - "value": "j-ic.co.intneral-document-he-gr-me.run.place", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "meet.rwa-team.video", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "zoom-client.xyz", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "ignite.onlinemeet.pro", - "count": 4, - "total_related": 5, - "prevalence": 0.8 - }, - { - "value": "api.zoom-sdk.us", - "count": 4, - "total_related": 6, - "prevalence": 0.6666666666666666 - }, - { - "value": "civ.team-meeting.net", - "count": 4, - "total_related": 6, - "prevalence": 0.6666666666666666 - }, - { - "value": "cloud.sharedrive.ink", - "count": 4, - "total_related": 6, - "prevalence": 0.6666666666666666 - }, - { - "value": "download.azure-drive.com", - "count": 4, - "total_related": 6, - "prevalence": 0.6666666666666666 - }, - { - "value": "kustovc.publicvm.com", - "count": 4, - "total_related": 6, - "prevalence": 0.6666666666666666 - }, - { - "value": "xn--rxamia.com", - "count": 4, - "total_related": 6, - "prevalence": 0.6666666666666666 - }, - { - "value": "journal.linkpc.net", - "count": 4, - "total_related": 7, - "prevalence": 0.5714285714285714 - }, - { - "value": "metaschool.video-meets.online", - "count": 4, - "total_related": 7, - "prevalence": 0.5714285714285714 - }, - { - "value": "perseus.bond", - "count": 4, - "total_related": 7, - "prevalence": 0.5714285714285714 - }, - { - "value": "zoom.usweb01.us", - "count": 4, - "total_related": 8, - "prevalence": 0.5 - }, - { - "value": "azure.online-protection.cloud", - "count": 4, - "total_related": 10, - "prevalence": 0.4 - }, - { - "value": "cloud.azure-company.net", - "count": 4, - "total_related": 13, - "prevalence": 0.3076923076923077 - }, - { - "value": "docsend.camdvr.org", - "count": 4, - "total_related": 13, - "prevalence": 0.3076923076923077 - }, - { - "value": "open.googlesheetpage.org", - "count": 4, - "total_related": 14, - "prevalence": 0.2857142857142857 - }, - { - "value": "support.video-meet.team", - "count": 4, - "total_related": 15, - "prevalence": 0.26666666666666666 - }, - { - "value": "dockerstore.net", - "count": 4, - "total_related": 16, - "prevalence": 0.25 - }, - { - "value": "note.onedocshare.com", - "count": 4, - "total_related": 17, - "prevalence": 0.23529411764705882 - }, - { - "value": "azure.protection-service.cloud", - "count": 4, - "total_related": 19, - "prevalence": 0.21052631578947367 - }, - { - "value": "download.azure-service.com", - "count": 4, - "total_related": 22, - "prevalence": 0.18181818181818182 - }, - { - "value": "www.googledocpage.com", - "count": 4, - "total_related": 25, - "prevalence": 0.16 - }, - { - "value": "app.developcore.org", - "count": 4, - "total_related": 30, - "prevalence": 0.13333333333333333 - }, - { - "value": "www.googlesheet.info", - "count": 4, - "total_related": 48, - "prevalence": 0.08333333333333333 - }, - { - "value": "line.pm", - "count": 4, - "total_related": 1267, - "prevalence": 0.0031570639305445935 - }, - { - "value": "meet.globiscapital.co", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "meet.superstatefund.co", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "civ.biz-meeting.site", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "cloud.jumpshare.vip", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "innerteams.us", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "meet.capitalviabtc.com", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "careers.smbcgroup.us", - "count": 3, - "total_related": 6, - "prevalence": 0.5 - }, - { - "value": "daiwa.in-zoom.us", - "count": 3, - "total_related": 6, - "prevalence": 0.5 - }, - { - "value": "amctradinggroup.biz", - "count": 3, - "total_related": 7, - "prevalence": 0.42857142857142855 - }, - { - "value": "group.pro-tokyo.top", - "count": 3, - "total_related": 7, - "prevalence": 0.42857142857142855 - }, - { - "value": "meet.playgroundvc.capital", - "count": 3, - "total_related": 7, - "prevalence": 0.42857142857142855 - }, - { - "value": "circlecapital.us", - "count": 3, - "total_related": 8, - "prevalence": 0.375 - }, - { - "value": "meet.twosigmaventures.us", - "count": 3, - "total_related": 8, - "prevalence": 0.375 - }, - { - "value": "cloud.mufg.tokyo", - "count": 3, - "total_related": 9, - "prevalence": 0.3333333333333333 - }, - { - "value": "file.venturelabo.co", - "count": 3, - "total_related": 9, - "prevalence": 0.3333333333333333 - }, - { - "value": "global-pro.xyz", - "count": 3, - "total_related": 10, - "prevalence": 0.3 - }, - { - "value": "docs.gsheetpage.com", - "count": 3, - "total_related": 13, - "prevalence": 0.23076923076923078 - }, - { - "value": "dev.sslsharecloud.net", - "count": 3, - "total_related": 19, - "prevalence": 0.15789473684210525 - }, - { - "value": "docstream.online", - "count": 3, - "total_related": 19, - "prevalence": 0.15789473684210525 - }, - { - "value": "ny.silvergatehr.com", - "count": 3, - "total_related": 20, - "prevalence": 0.15 - }, - { - "value": "docs.azure-protection.cloud", - "count": 3, - "total_related": 43, - "prevalence": 0.06976744186046512 - }, - { - "value": "bit.ly", - "count": 72, - "total_related": 100000, - "prevalence": 0.00072 - }, - { - "value": "drive.google.com", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "onedrive.live.com", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - } - ], - "embedded_js": [ - { - "value": "3e07d1c91caa7fa01ef9222bdcea0f1e745405468dd3140725961347affa2306", - "count": 38, - "total_related": 42, - "prevalence": 0.9047619047619048 - }, - { - "value": "f68f20a7fe9562310cb20b05a5ed9f99119861301bde296d931a46f89731e51f", - "count": 38, - "total_related": 51, - "prevalence": 0.7450980392156863 - }, - { - "value": "54574af2c55419f25dda6b62ba361fc7a4359146ccbb467c3473ca686a0347f7", - "count": 38, - "total_related": 7987, - "prevalence": 0.004757731313384249 - }, - { - "value": "db1c393293dc76ef36fe7996d9743a22c7bd84ac7388b595d86ba9912f649eec", - "count": 38, - "total_related": 46969, - "prevalence": 0.0008090442632374545 - }, - { - "value": "a0a8e807a95539a2c8c5323a830e7ec6048396f13432e21228fbf47c6b2718dd", - "count": 23, - "total_related": 78395, - "prevalence": 0.00029338605778429745 - }, - { - "value": "5d5a4908393fb1b61bfdbd9d08000abf935ede30438918f80c25b8ccc156fc18", - "count": 22, - "total_related": 5193, - "prevalence": 0.004236472174080493 - }, - { - "value": "c83aa34b2bfa105226ba988be22dd64c3087d6be077c8fc6e683bac1756e2cc1", - "count": 22, - "total_related": 6226, - "prevalence": 0.0035335689045936395 - }, - { - "value": "df7b4ba4baa7aa5443f88142285eaa8bc3d7ede8ab72854d19fbd5b497ddfa64", - "count": 21, - "total_related": 27, - "prevalence": 0.7777777777777778 - }, - { - "value": "aebe53d8cd6bd7cb29e0af6cae7df5c1e302d7cab15c714510ce151a5f658590", - "count": 14, - "total_related": 15, - "prevalence": 0.9333333333333333 - }, - { - "value": "1f1851ea45175dfd9490310acd822fa980c2d766aa5701e7a44231d686b3bf3f", - "count": 11, - "total_related": 11, - "prevalence": 1.0 - }, - { - "value": "5ede7abd188b3bb0828cfc91bb3b54d0d3eb630c78205214687a5dc566c538a6", - "count": 10, - "total_related": 24471, - "prevalence": 0.00040864696988271833 - }, - { - "value": "5911b2eebb062646ff5945fd3e5bf3212cc5a87694318fd0e481665c1e49c9ec", - "count": 8, - "total_related": 11, - "prevalence": 0.7272727272727273 - }, - { - "value": "983e781e5827731d09b025640172dab5cfd6a80615c46626a77ea478e05c749f", - "count": 8, - "total_related": 181, - "prevalence": 0.04419889502762431 - }, - { - "value": "a40549f5234f8d7a6e55f17d05b5984bda19d34cb0940558cf4b5b97f8578511", - "count": 8, - "total_related": 259, - "prevalence": 0.03088803088803089 - }, - { - "value": "5f18e872712ba761b5e74d9672813ef7c11bc996779053063b9cfd557bdb2352", - "count": 6, - "total_related": 6, - "prevalence": 1.0 - }, - { - "value": "4f1987847e23e9c9debb64481372b00fb0194a615154a7f87d2ac992dac70306", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "f32e3306077f68fe6bd12e13020eadfe573915f822861f168a98bf6c9a64e961", - "count": 4, - "total_related": 9, - "prevalence": 0.4444444444444444 - }, - { - "value": "b76c1d2e43e20bee6db155a16a0da1e6048c883718ff82c8006434b5e55d4a15", - "count": 4, - "total_related": 229, - "prevalence": 0.017467248908296942 - }, - { - "value": "37d5d552eddfc294658c5cc1e494891106e893f5e894e2a0c27f3b69a9dd7ff7", - "count": 4, - "total_related": 310, - "prevalence": 0.012903225806451613 - }, - { - "value": "057b393005596fe96133cb59f24685a1c55889ba98ff34664d0d615d9e5b8231", - "count": 4, - "total_related": 497, - "prevalence": 0.008048289738430584 - }, - { - "value": "bb02884ea58c8b3dbf34007f591ba4f278bb7668d36ee3d4e83a7c051b1edd2a", - "count": 4, - "total_related": 758, - "prevalence": 0.005277044854881266 - }, - { - "value": "57b8ca9e00f370f6f36f9b598ee64964e9b95f9d01eb78c1e5f75a89b28835d5", - "count": 4, - "total_related": 2592, - "prevalence": 0.0015432098765432098 - }, - { - "value": "9442039513d08f0c9459b446fa9f96b1756fd47c888a6a464e853a50adbb1b82", - "count": 4, - "total_related": 3519, - "prevalence": 0.0011366865586814436 - }, - { - "value": "4ba00abfb7f2df03e1491267f3a831abf7f654762356758dac546f96d523ecb9", - "count": 4, - "total_related": 4109, - "prevalence": 0.0009734728644439036 - }, - { - "value": "6c93eaa915a45e410ab9103be6b732e2fd834e23592fb91bad3e8ee83fb2bc3c", - "count": 4, - "total_related": 4111, - "prevalence": 0.0009729992702505473 - }, - { - "value": "da010877da0052284b046c50d99f4ba165a1d45254233ea27478b827dc196ac3", - "count": 4, - "total_related": 4258, - "prevalence": 0.0009394081728511038 - }, - { - "value": "341d69d4123e5baf54dc2beab632e361767740ec6081cb6a17fe1010db7e317e", - "count": 4, - "total_related": 4557, - "prevalence": 0.0008777704630239193 - }, - { - "value": "026f9bd23f38ce042caabe0523782c0102177e37263d0a3c5bbfaf7a909d336c", - "count": 3, - "total_related": 99, - "prevalence": 0.030303030303030304 - }, - { - "value": "9a539e53f88faf51e3086d99cfbbf85d7c49677056aaffa5b00c47a1d034a258", - "count": 3, - "total_related": 516, - "prevalence": 0.005813953488372093 - }, - { - "value": "b1f2918a0490a2238c74f541ad71f557d0121adffc2304641c0e73bb166a1108", - "count": 3, - "total_related": 807, - "prevalence": 0.0037174721189591076 - }, - { - "value": "0dda8fdb5ca88763b73cfc4bac99f365ac9c90154cc48df40ba83c3aefd4d372", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "41b667909c3ddc00648b430f8b1b84c0dd5f409cdc4ca9890b91d24e90838da1", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "8c49a06fdfeb4b1f979ac6b6ab3609433318688f13e23275c48ff92f47a8bb70", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "b6c663de4f382e23fa4c10a271636ed15611c5ba4b53a36c6265eb464393e9b0", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "c6ed4f5b1f3952bff700a6d5755c0534aa9a222e566a206cf5c8149c8a377f7f", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "59762bce17ef78bb8a017588ec441ceba12c020225fcbb316bf10663734b4808", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "d576f42810cfce332e4df4e4b8a07e44d45d610967743d7e4bb59adf52de4ae9", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "3a6903189ab2e3388c8d042f09002e98ee2e6bd34899584ea0f8831e5eca6848", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "88b4bfdb0597349a9af286b15aebf80b09ebd5747d6b0797927c5e6834078494", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "d0df0d65947f38a339eb69351e027be83bf2be0b0587fc42eda3e5b238b7f072", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "59910166ea0ace77aba5fa93b606ad93992decd688d2defb322aaf4eb247d4eb", - "count": 2, - "total_related": 52, - "prevalence": 0.038461538461538464 - }, - { - "value": "6e5f9c7ce4bd6153313bd4b8157b718112f6be0f429b21b49c35f37ffb30b008", - "count": 2, - "total_related": 78, - "prevalence": 0.02564102564102564 - }, - { - "value": "4afc290cc22b0da55fa00a89283d69f462d8bebc8ed06dfd63d3388c969be3a4", - "count": 2, - "total_related": 21155, - "prevalence": 9.454029780193807e-5 - }, - { - "value": "33f596d90adab57bfa28cff9fb915f1cf7b71891222750823557002ce1d551d2", - "count": 2, - "total_related": 26041, - "prevalence": 7.680196613033293e-5 - }, - { - "value": "62ea70774378d3117275cb0229fef0963728b31cebb0a9cf23b93258e14dde82", - "count": 2, - "total_related": 36167, - "prevalence": 5.529902950203224e-5 - }, - { - "value": "4e3af5f197afb737e00e7207984d778d6683815ffa1fda9a42eda826544d85b3", - "count": 2, - "total_related": 39926, - "prevalence": 5.0092671442168013e-5 - }, - { - "value": "a0d204d4f59032727f3a3782262478272c5198f969774c26685fe7b254d61344", - "count": 2, - "total_related": 39926, - "prevalence": 5.0092671442168013e-5 - }, - { - "value": "8f0b7817088a6bdf13a43c49b6970236635411f5568534a8587ee3c188e719f6", - "count": 2, - "total_related": 40450, - "prevalence": 4.9443757725587144e-5 - }, - { - "value": "fc20184024142aa59e523e7f78403a38dc192297fe81c5549cd4573d0ba187c2", - "count": 2, - "total_related": 42163, - "prevalence": 4.743495481820553e-5 - }, - { - "value": "43330aded0f4267f5ee70e20c6374ba6965a6367f8c0b15efcf4b9a4cfac986d", - "count": 2, - "total_related": 44506, - "prevalence": 4.493776120073698e-5 - }, - { - "value": "f9b2277cb79f77cfa984fc713bda988da89f9699509a30eee234404efa79b32e", - "count": 2, - "total_related": 52484, - "prevalence": 3.810685161191982e-5 - }, - { - "value": "0e15a24962923ad85e5d4a9f88296aa65c429af73a1c0febdd9a231d0371cd12", - "count": 2, - "total_related": 82509, - "prevalence": 2.4239779902798483e-5 - }, - { - "value": "a86df3be0eff7f90991f057c21e6907c16391e6f8cd0a4773cc93d9401e9dfdb", - "count": 2, - "total_related": 88309, - "prevalence": 2.264774824763048e-5 - }, - { - "value": "009ac7003563f12c275fcf0ee1e0a613e4f8efa5de500f5df0ba77644e5a0e31", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0180ba4f6790c1a44b290df8449d3eb2e72a0dcc99539ec2ddefe1dd5c309458", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "04bcab88a9f88660700dce9843b62360588d747e81e9e6949732015f83e14c73", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "078c4c0bf669e0b7f245b4fdf4f26373c318d2d15fc5eecb2bc4f8c81da6096c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0909c3666a7263e00016e3292a245a487d83adfa46d048537a454ef66a8ec4ac", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0aa9d69168841f19c560472a71677aaa99f5acb14d1d96a7a1f0f17b7cdbfa78", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0aeb441a1607abbcddb7e5312c79aa5c48cb12b4000a87a8a4ad30a8c36ef2d6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0d5ae63bb2823bab89dcfe7fa575dd3a216d0f56907cab0ecf8e3d2b7d5886de", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0fef48b1b4f958cee24e0f2f139fa81c9aff32f378e9e68e7f38996feab02685", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1a9fa629658d0ad81744837922c8b833a5956f9cf0a210a3326253495e592177", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1dc8a43ca7c85dfaf7a1c8f8050e99b9b8792358d0c2f22336380fd339fee230", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1e3c2e87f5f523a03bd70bc99c3e0585e6d6ca39cefbbff12ff793df63ee2e89", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "206edb08bb4c6c7ac9531354b21d6c23859e18d9d829a8df8d4e10336e3e04e2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "216fec46a131b69a45c9422ccf4069997c4b5f410b6d0e8896887625f6e9d9f7", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1b9fdd41a54ef0ad8a7c029ed4cd043fdc59cadfa7e9430430dd3961478cca9d", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "1fd468446ac4ffd66cce3215407f6af48db7f48b89513f06e66924d24f706a01", - "count": 1, - "total_related": 22, - "prevalence": 0.045454545454545456 - }, - { - "value": "1643c33edc571232c963762e023c05647cae0d22bc1e7f4b6c1343ebdefa48fa", - "count": 1, - "total_related": 50, - "prevalence": 0.02 - }, - { - "value": "2065b85975bb63cb9b994d080211c9bce8da6c1753e64833fc2c9f67cf8a7db2", - "count": 1, - "total_related": 4172, - "prevalence": 0.00023969319271332693 - }, - { - "value": "185881248aa3f56ad27d04fba627481b19e675a984e95bfcaab481d0ccfa7dff", - "count": 1, - "total_related": 4999, - "prevalence": 0.00020004000800160032 - }, - { - "value": "14caf00a5f9a8b3cde967ee9fa229cea0f654c72e47b82862aae43fc0328a26b", - "count": 1, - "total_related": 14389, - "prevalence": 6.949753283758427e-5 - }, - { - "value": "1dcf3b0e1f92d593867169c5ee26771d2f3b77f552eee6c73beba961b91d61b7", - "count": 1, - "total_related": 20189, - "prevalence": 4.9531923324582696e-5 - }, - { - "value": "06cb3f46b9aaef48a1145ee400f54476f3721979d47e8e0df87b339e86f84102", - "count": 1, - "total_related": 34929, - "prevalence": 2.862950556843883e-5 - }, - { - "value": "21758ed084cd0e37e735722ee4f3957ea960628a29dfa6c3ce1a1d47a2d6e4f7", - "count": 38, - "total_related": 100000, - "prevalence": 0.00038 - }, - { - "value": "4b4969fa4ef3594324da2c6d78ce8766fbbc2fd121fff395aedf997db0a99a06", - "count": 38, - "total_related": 100000, - "prevalence": 0.00038 - }, - { - "value": "a9705dfc47c0763380d851ab1801be6f76019f6b67e40e9b873f8b4a0603f7a9", - "count": 38, - "total_related": 100000, - "prevalence": 0.00038 - }, - { - "value": "0833b2e9c3a26c258476c46266e6877fc75218625162e0460be9a3a098a61c6c", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": "2d9b07a0704d92dda4deae88bc582aeb659923c8d44d0e7362e13cb28d88d250", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "42591f96b9a41a7e2e5ecd0240dd7fecdcf03ef8454b57c68f08697474a4b579", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "540bc6dec1dd4b92ea4d3fb903f69eabf6d919afd48f4e312b163c28cff0f441", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "c06ec88641687c7f653a3e6b3a601130400dc1698afe67c531d693406cd99440", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "c3f831fe1717c6d76a8950ac5e7dc88ceee7440d079b11584be5c6c5b3269e77", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "bf501fe693bbbfdd3cc98546a1aad9f6111ac826f59ef1ee37da5101497dc9b7", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "081ae9baaacc857c1c2cb51de6dbd0e1eb811c2761ef01a50df373f2f6eefe22", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "0a34a87842c539c1f4feec56bba982fd596b73500046a6e6fe38a22260c6577b", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "160a426ff2894252cd7cebbdd6d6b7da8fcd319c65b70468f10b6690c45d02ef", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "175f65341d1e1d4734ccd10be113b649c286d4cf8c94307e5514632a84db743f", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "18396e46ad65b630911ed42e114895cc4d5e02e7f0461f27bf074b2e91c0ccfe", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "24f07d59fd81bfe363668ba707eda0644c3b156f000da1b110ff362ca8214c57", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "6f9ca7345dc51a3171d9ad0f7cf96e425c3d2a770e2bc9b947773b1e82aa6d36", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "71ef7c16d75da75a5d417df75ed72144bc5ec65a9c0429b7dee0988adc3e8d29", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "765d1654297c8d730165fbe731eca09c1d3e6efaa9e7006aaa567c5a2f7994ba", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "880cd2ae80b6bba8fa9b8e1231c309159fad7568308d6976735069eba9b64fec", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "dcda57bf6c8a157067fb187a710a309b2ca187d5cffafab9611743507544da39", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "fc9a93dd241f6b045cbff0481cf4e1901becd0e12fb45166a8f17f95823f0b1a", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "0925e8ad7bd971391a8b1e98be8e87a6971919eb5b60c196485941c3c1df089a", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "18d9d050df7998e9bf7818ee86fe38893c4641d4e8f077ef6220b6b0ca0a4eaf", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "favicon_dhash": [ - { - "value": "455555610d55555d", - "count": 5, - "total_related": 94106, - "prevalence": 5.313157503241026e-5 - }, - { - "value": "30e0e4d0c8ccc4e4", - "count": 4, - "total_related": 9, - "prevalence": 0.4444444444444444 - }, - { - "value": "e8ca234d4d3baae8", - "count": 3, - "total_related": 58, - "prevalence": 0.05172413793103448 - }, - { - "value": "a2484e362fa50ca2", - "count": 3, - "total_related": 982, - "prevalence": 0.003054989816700611 - }, - { - "value": "c2f8f031d1d0ecf0", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "33ccb29696e0cc32", - "count": 2, - "total_related": 57024, - "prevalence": 3.507295173961841e-5 - }, - { - "value": "6161c4cc8cf6e0c4", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "3369c8b2b2c86933", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "24f0cc64e6c488ca", - "count": 1, - "total_related": 17, - "prevalence": 0.058823529411764705 - }, - { - "value": "e35813555537c612", - "count": 1, - "total_related": 33, - "prevalence": 0.030303030303030304 - }, - { - "value": "e896624ccd3996e8", - "count": 1, - "total_related": 120, - "prevalence": 0.008333333333333333 - }, - { - "value": "e0c89c3b3b9cf072", - "count": 1, - "total_related": 124, - "prevalence": 0.008064516129032258 - }, - { - "value": "9671f0eafb9aa411", - "count": 1, - "total_related": 28689, - "prevalence": 3.485656523406183e-5 - }, - { - "value": "f0c48e3969cadae0", - "count": 1, - "total_related": 37424, - "prevalence": 2.672082086361693e-5 - }, - { - "value": "21414963c9a4a449", - "count": 1, - "total_related": 58663, - "prevalence": 1.7046519952951604e-5 - }, - { - "value": "e08c9a392bdadaf0", - "count": 77, - "total_related": 100000, - "prevalence": 0.00077 - }, - { - "value": "68cc8a392bcaca70", - "count": 47, - "total_related": 100000, - "prevalence": 0.00047 - }, - { - "value": "d4a2f8d0d0f182d4", - "count": 14, - "total_related": 100000, - "prevalence": 0.00014 - }, - { - "value": "2424242424242424", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": "f08c9a392bdadaf0", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "c0cc9efcc086c6f0", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "e88e931939338ee8", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "4869e4cc8ec9e9c4", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "a2a2a2a2a2a2a2a2", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "c03ae59890e12cd0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "c081c4e4b4980107", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "c082c4e4b48c82c0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "e0cc9abb23a6ccf8", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "favicon_raw_md5": [ - { - "value": "a64ef4e756a8d0d2ed7a7ee8dc39a310", - "count": 5, - "total_related": 94106, - "prevalence": 5.313157503241026e-5 - }, - { - "value": "d798d5b7672bcb9777a792f002d29986", - "count": 4, - "total_related": 9, - "prevalence": 0.4444444444444444 - }, - { - "value": "e84040906a731400d7933980b56d26c1", - "count": 3, - "total_related": 30, - "prevalence": 0.1 - }, - { - "value": "891e9a9607b09bdcd9b71bd05691f0dd", - "count": 3, - "total_related": 740, - "prevalence": 0.004054054054054054 - }, - { - "value": "ea5deece3fec5daead44151eaa97c284", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "ce0260c17b7f1dbdb7726ef7e8fd8c7a", - "count": 2, - "total_related": 43239, - "prevalence": 4.625453872661255e-5 - }, - { - "value": "9c91c255e6b97151401e2006bdde8cad", - "count": 2, - "total_related": 57023, - "prevalence": 3.507356680637637e-5 - }, - { - "value": "8ce44c17b009f0bf1f81cecd58972a8b", - "count": 2, - "total_related": 84228, - "prevalence": 2.3745072897373797e-5 - }, - { - "value": "4437c906077600f12297b30fac0496bf", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "a9c5f68e7b11aed19a7b0e39747d7ddc", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "d3f602b578974182f61a34876b0a1344", - "count": 1, - "total_related": 17, - "prevalence": 0.058823529411764705 - }, - { - "value": "e0c2d31c985aaeaf608d3e0500f39829", - "count": 1, - "total_related": 29, - "prevalence": 0.034482758620689655 - }, - { - "value": "6e6d0753d1e5c8186583fb3ead48b3cd", - "count": 1, - "total_related": 120, - "prevalence": 0.008333333333333333 - }, - { - "value": "b65eb5319d429dbba0cad06ea2729a52", - "count": 1, - "total_related": 124, - "prevalence": 0.008064516129032258 - }, - { - "value": "bd1a47f2a26158af38f5ab0e783a313f", - "count": 1, - "total_related": 28615, - "prevalence": 3.4946706272933774e-5 - }, - { - "value": "ff2471447ae22d3893b9ab755042adca", - "count": 1, - "total_related": 37424, - "prevalence": 2.672082086361693e-5 - }, - { - "value": "26aa67930614edc5e27b5f080743e715", - "count": 1, - "total_related": 58661, - "prevalence": 1.7047101140451067e-5 - }, - { - "value": "10287e015f912bd4952db8aa86c0022b", - "count": 77, - "total_related": 100000, - "prevalence": 0.00077 - }, - { - "value": "423f45ef2d8751084ba7c633d0c037f5", - "count": 47, - "total_related": 100000, - "prevalence": 0.00047 - }, - { - "value": "daefa8ad6cd307683e9b4bb2a2ce7186", - "count": 14, - "total_related": 100000, - "prevalence": 0.00014 - }, - { - "value": "a1112fa6a8056cae16df75c687033022", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "c9ac92eecdcf2fd9ed909a82ce81cb8d", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "ca8fa47ba1bbc14446b64d55a55ce87a", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "b4db2a4b6d91e0df5850a3fdcee9c8df", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "b93de97a3fd2820b82dee7bede9643f5", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "008b0d98aabf69c4bded122ab4318173", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "8c584a88c3fc48d6186d18673b6c34c9", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "0420337c301a063a2b87252070748d35", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "9f408ad234d000680f954579e5a62440", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "aa07959aa4e6a848b23c3314e1a5ffea", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "e8ddeff5fb0111b746c24009398374e2", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "html_titles": [ - { - "value": "Zoom Meeting", - "count": 160, - "total_related": 685, - "prevalence": 0.23357664233576642 - }, - { - "value": "Joining Meeting...", - "count": 21, - "total_related": 31, - "prevalence": 0.6774193548387096 - }, - { - "value": "porkbun.com | domain for sale", - "count": 8, - "total_related": 78945, - "prevalence": 0.00010133637342453606 - }, - { - "value": ".us.org", - "count": 4, - "total_related": 4201, - "prevalence": 0.0009521542489883361 - }, - { - "value": "Blockchain.com Wallet - Exchange Cryptocurrency", - "count": 3, - "total_related": 5650, - "prevalence": 0.0005309734513274337 - }, - { - "value": "j-ic.co.jp.internal-info.deck.line.pm", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "meet.twosigmacap.com", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "twosigmavc.work.gd", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "team-meeting.net", - "count": 2, - "total_related": 11, - "prevalence": 0.18181818181818182 - }, - { - "value": "googlesheet.info", - "count": 2, - "total_related": 18, - "prevalence": 0.1111111111111111 - }, - { - "value": "SITUS SLOT DEPO 10K \ud83d\udc8e Situs Viral Minimal DP 10.000 Gampang Menang", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "porkbun.com | expired domain", - "count": 2, - "total_related": 11459, - "prevalence": 0.00017453529976437735 - }, - { - "value": "One platform to connect | Zoom", - "count": 2, - "total_related": 32761, - "prevalence": 6.104819755196727e-5 - }, - { - "value": "192.119.64.43", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "192.119.64.43 | Go Away From Here", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Bitly | bit.ly/2LwMGCD", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Bitly | bit.ly/2O9lrNT", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Bitly | bit.ly/2vwLE0m", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "DACM Opportunities.docx - Google Drive", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cloud.blockchaintransparency.institute", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "docs-send.online\u00a0-\u00a0docs send Resources and Information.", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "innerteams.us", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "j-ic.co.intneral-document-he-gr-me.run.place", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "safe-meeting.site", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Blockchain Intelligence Group Opportunities.docx - Google Drive", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "Coming Soon - bnocjk.pro", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "Page not found \u2013 Reddinu", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "autoserverupdate.line.pm", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "internal.group.link-net.publicvm.com", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "nasho.xyz", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "support.meeting-zone.online", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "\u5b89\u5168\u72b6\u6001\u68c0\u67e5\u6307\u5357_signed.pdf - Google Drive", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "Joining meeting timeout", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "Profit and Loss Statement.xlsx - Google Drive", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "Security Bugs in rigs.pdf - Google Drive", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "europasec.dnsabr.com", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "tp-globa.xyz", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "Anchorage Digital Opportunities.pdf - Google \u00e3\u0083\u0089\u00e3\u0083\u00a9\u00e3\u0082\u00a4\u00e3\u0083\u0096", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "cloudshare.jumpshare.vip", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "wassbetaashh.pro", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "global-pro.xyz", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "zoom.ico (32\u00d732)", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "stablemarket.org", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "zvc.capital", - "count": 1, - "total_related": 16, - "prevalence": 0.0625 - }, - { - "value": "Coming Soon - gtuhfra.pro", - "count": 1, - "total_related": 17, - "prevalence": 0.058823529411764705 - }, - { - "value": "password.txt - Google Drive", - "count": 1, - "total_related": 17, - "prevalence": 0.058823529411764705 - }, - { - "value": "ssimkolabazzooz.store", - "count": 1, - "total_related": 24, - "prevalence": 0.041666666666666664 - }, - { - "value": "Home | SMBC", - "count": 1, - "total_related": 25, - "prevalence": 0.04 - }, - { - "value": "jumpshare.vip", - "count": 1, - "total_related": 91, - "prevalence": 0.01098901098901099 - }, - { - "value": "Bad request!", - "count": 1, - "total_related": 2723, - "prevalence": 0.0003672420124862284 - }, - { - "value": "pCloud - 404 File not found", - "count": 1, - "total_related": 6418, - "prevalence": 0.0001558117793705204 - }, - { - "value": "\u4e09\u4e95\u4f4f\u53cb\u30ab\u30fc\u30c9\u4f1a\u54e1\u5411\u3051\u30b5\u30fc\u30d3\u30b9\u300cVpass\u300d\u30ed\u30b0\u30a4\u30f3", - "count": 1, - "total_related": 7604, - "prevalence": 0.0001315097317201473 - }, - { - "value": "Access Restricted", - "count": 1, - "total_related": 13262, - "prevalence": 7.540340823405218e-5 - }, - { - "value": "404 Not Found", - "count": 43, - "total_related": 100000, - "prevalence": 0.00043 - }, - { - "value": "Warning! | There might be a problem with the requested link", - "count": 23, - "total_related": 100000, - "prevalence": 0.00023 - }, - { - "value": "Error 404 (Not Found)!!1", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "403 Forbidden", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": "400 Bad Request", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "403", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "404 - File or directory not found.", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "404 - Page not found", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "Apache HTTP Server Test Page powered by CentOS", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "Not Found", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "Access forbidden!", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "Attention Required! | Cloudflare", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "Bitly | Page Not Found | 404", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "Loading...", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "Object not found!", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "OneDrive", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "Page Not Found", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "porkbun.com | parked domain", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "\u767b\u5f55", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "ip_addresses": [ - { - "value": "149.28.162.113", - "count": 57, - "total_related": 214, - "prevalence": 0.26635514018691586 - }, - { - "value": "23.254.164.232", - "count": 56, - "total_related": 79, - "prevalence": 0.7088607594936709 - }, - { - "value": "104.255.172.56", - "count": 50, - "total_related": 144, - "prevalence": 0.3472222222222222 - }, - { - "value": "104.168.146.15", - "count": 38, - "total_related": 75, - "prevalence": 0.5066666666666667 - }, - { - "value": "104.168.165.165", - "count": 33, - "total_related": 112, - "prevalence": 0.29464285714285715 - }, - { - "value": "152.89.247.87", - "count": 32, - "total_related": 71, - "prevalence": 0.4507042253521127 - }, - { - "value": "139.180.164.131", - "count": 28, - "total_related": 103, - "prevalence": 0.27184466019417475 - }, - { - "value": "5.230.44.79", - "count": 26, - "total_related": 34, - "prevalence": 0.7647058823529411 - }, - { - "value": "142.11.209.144", - "count": 25, - "total_related": 83, - "prevalence": 0.30120481927710846 - }, - { - "value": "23.254.247.53", - "count": 25, - "total_related": 119, - "prevalence": 0.21008403361344538 - }, - { - "value": "104.168.249.49", - "count": 19, - "total_related": 30, - "prevalence": 0.6333333333333333 - }, - { - "value": "64.44.141.12", - "count": 19, - "total_related": 49, - "prevalence": 0.3877551020408163 - }, - { - "value": "104.156.149.130", - "count": 19, - "total_related": 66, - "prevalence": 0.2878787878787879 - }, - { - "value": "108.61.173.33", - "count": 18, - "total_related": 46, - "prevalence": 0.391304347826087 - }, - { - "value": "162.33.179.165", - "count": 17, - "total_related": 46, - "prevalence": 0.3695652173913043 - }, - { - "value": "23.254.129.6", - "count": 16, - "total_related": 56, - "prevalence": 0.2857142857142857 - }, - { - "value": "155.138.219.140", - "count": 15, - "total_related": 97, - "prevalence": 0.15463917525773196 - }, - { - "value": "104.168.157.45", - "count": 15, - "total_related": 154, - "prevalence": 0.09740259740259741 - }, - { - "value": "104.168.137.21", - "count": 15, - "total_related": 470, - "prevalence": 0.031914893617021274 - }, - { - "value": "5.230.252.157", - "count": 14, - "total_related": 27, - "prevalence": 0.5185185185185185 - }, - { - "value": "172.86.121.130", - "count": 14, - "total_related": 48, - "prevalence": 0.2916666666666667 - }, - { - "value": "192.119.64.43", - "count": 12, - "total_related": 112, - "prevalence": 0.10714285714285714 - }, - { - "value": "104.168.160.6", - "count": 12, - "total_related": 120, - "prevalence": 0.1 - }, - { - "value": "104.168.249.50", - "count": 11, - "total_related": 18, - "prevalence": 0.6111111111111112 - }, - { - "value": "139.99.66.103", - "count": 11, - "total_related": 16099, - "prevalence": 0.0006832722529349649 - }, - { - "value": "15.3.23.45", - "count": 10, - "total_related": 14, - "prevalence": 0.7142857142857143 - }, - { - "value": "104.168.174.80", - "count": 8, - "total_related": 19, - "prevalence": 0.42105263157894735 - }, - { - "value": "104.168.163.124", - "count": 8, - "total_related": 28, - "prevalence": 0.2857142857142857 - }, - { - "value": "104.168.138.7", - "count": 8, - "total_related": 60, - "prevalence": 0.13333333333333333 - }, - { - "value": "104.168.158.224", - "count": 8, - "total_related": 69, - "prevalence": 0.11594202898550725 - }, - { - "value": "45.42.40.208", - "count": 7, - "total_related": 11, - "prevalence": 0.6363636363636364 - }, - { - "value": "172.86.121.143", - "count": 7, - "total_related": 26, - "prevalence": 0.2692307692307692 - }, - { - "value": "104.156.232.106", - "count": 7, - "total_related": 30, - "prevalence": 0.23333333333333334 - }, - { - "value": "138.197.134.87", - "count": 7, - "total_related": 45, - "prevalence": 0.15555555555555556 - }, - { - "value": "103.130.195.170", - "count": 7, - "total_related": 56, - "prevalence": 0.125 - }, - { - "value": "104.168.249.10", - "count": 6, - "total_related": 23, - "prevalence": 0.2608695652173913 - }, - { - "value": "104.168.172.20", - "count": 6, - "total_related": 34, - "prevalence": 0.17647058823529413 - }, - { - "value": "64.44.141.13", - "count": 6, - "total_related": 35, - "prevalence": 0.17142857142857143 - }, - { - "value": "104.168.167.88", - "count": 6, - "total_related": 115, - "prevalence": 0.05217391304347826 - }, - { - "value": "155.138.159.45", - "count": 6, - "total_related": 136, - "prevalence": 0.04411764705882353 - }, - { - "value": "172.105.27.36", - "count": 5, - "total_related": 1913, - "prevalence": 0.0026136957658128594 - }, - { - "value": "38.110.228.112", - "count": 4, - "total_related": 5, - "prevalence": 0.8 - }, - { - "value": "5.230.44.71", - "count": 4, - "total_related": 5, - "prevalence": 0.8 - }, - { - "value": "104.168.159.55", - "count": 4, - "total_related": 13, - "prevalence": 0.3076923076923077 - }, - { - "value": "172.93.193.219", - "count": 4, - "total_related": 14, - "prevalence": 0.2857142857142857 - }, - { - "value": "10.18.1.69", - "count": 4, - "total_related": 18, - "prevalence": 0.2222222222222222 - }, - { - "value": "104.168.165.173", - "count": 4, - "total_related": 19, - "prevalence": 0.21052631578947367 - }, - { - "value": "84.201.189.216", - "count": 4, - "total_related": 30, - "prevalence": 0.13333333333333333 - }, - { - "value": "23.254.204.173", - "count": 4, - "total_related": 33, - "prevalence": 0.12121212121212122 - }, - { - "value": "51.79.133.76", - "count": 4, - "total_related": 38, - "prevalence": 0.10526315789473684 - }, - { - "value": "104.168.203.159", - "count": 4, - "total_related": 39, - "prevalence": 0.10256410256410256 - }, - { - "value": "160.16.200.77", - "count": 4, - "total_related": 3243, - "prevalence": 0.0012334258402713536 - }, - { - "value": "54.153.56.183", - "count": 4, - "total_related": 96384, - "prevalence": 4.150066401062417e-5 - }, - { - "value": "13.107.42.13", - "count": 4, - "total_related": 99055, - "prevalence": 4.0381606178385745e-5 - }, - { - "value": "65.33.26.12", - "count": 3, - "total_related": 15, - "prevalence": 0.2 - }, - { - "value": "202.117.170.240", - "count": 3, - "total_related": 16, - "prevalence": 0.1875 - }, - { - "value": "104.168.163.149", - "count": 3, - "total_related": 18, - "prevalence": 0.16666666666666666 - }, - { - "value": "45.61.136.204", - "count": 3, - "total_related": 23, - "prevalence": 0.13043478260869565 - }, - { - "value": "216.107.136.10", - "count": 3, - "total_related": 33, - "prevalence": 0.09090909090909091 - }, - { - "value": "88.204.166.59", - "count": 3, - "total_related": 87, - "prevalence": 0.034482758620689655 - }, - { - "value": "140.117.91.22", - "count": 3, - "total_related": 103, - "prevalence": 0.02912621359223301 - }, - { - "value": "149.248.52.31", - "count": 3, - "total_related": 112, - "prevalence": 0.026785714285714284 - }, - { - "value": "104.168.158.103", - "count": 3, - "total_related": 123, - "prevalence": 0.024390243902439025 - }, - { - "value": "212.90.120.180", - "count": 3, - "total_related": 949, - "prevalence": 0.003161222339304531 - }, - { - "value": "34.136.111.81", - "count": 3, - "total_related": 41630, - "prevalence": 7.20634158059092e-5 - }, - { - "value": "34.132.102.6", - "count": 3, - "total_related": 41756, - "prevalence": 7.184596225692116e-5 - }, - { - "value": "172.93.193.45", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "61.216.32.172", - "count": 2, - "total_related": 8, - "prevalence": 0.25 - }, - { - "value": "5.230.251.49", - "count": 2, - "total_related": 11, - "prevalence": 0.18181818181818182 - }, - { - "value": "103.31.249.62", - "count": 2, - "total_related": 12, - "prevalence": 0.16666666666666666 - }, - { - "value": "64.44.141.15", - "count": 2, - "total_related": 12, - "prevalence": 0.16666666666666666 - }, - { - "value": "142.11.209.131", - "count": 2, - "total_related": 13, - "prevalence": 0.15384615384615385 - }, - { - "value": "149.248.8.85", - "count": 2, - "total_related": 14, - "prevalence": 0.14285714285714285 - }, - { - "value": "31.170.160.248", - "count": 2, - "total_related": 19, - "prevalence": 0.10526315789473684 - }, - { - "value": "149.28.247.34", - "count": 2, - "total_related": 21, - "prevalence": 0.09523809523809523 - }, - { - "value": "152.89.247.194", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "45.61.138.207", - "count": 2, - "total_related": 34, - "prevalence": 0.058823529411764705 - }, - { - "value": "172.93.181.221", - "count": 2, - "total_related": 37, - "prevalence": 0.05405405405405406 - }, - { - "value": "192.119.84.22", - "count": 2, - "total_related": 43, - "prevalence": 0.046511627906976744 - }, - { - "value": "35.225.54.236", - "count": 2, - "total_related": 116, - "prevalence": 0.017241379310344827 - }, - { - "value": "104.168.214.151", - "count": 2, - "total_related": 123, - "prevalence": 0.016260162601626018 - }, - { - "value": "142.250.1.113", - "count": 2, - "total_related": 46592, - "prevalence": 4.292582417582418e-5 - }, - { - "value": "173.194.74.113", - "count": 2, - "total_related": 47095, - "prevalence": 4.2467353222210424e-5 - }, - { - "value": "1.1.1.1", - "count": 2, - "total_related": 47222, - "prevalence": 4.235314048536699e-5 - }, - { - "value": "173.194.192.101", - "count": 2, - "total_related": 48142, - "prevalence": 4.1543766357858004e-5 - }, - { - "value": "104.168.151.34", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "104.168.198.3", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - }, - { - "value": "104.168.162.167", - "count": 1, - "total_related": 47, - "prevalence": 0.02127659574468085 - }, - { - "value": "104.168.137.213", - "count": 1, - "total_related": 78, - "prevalence": 0.01282051282051282 - }, - { - "value": "103.224.182.208", - "count": 1, - "total_related": 73590, - "prevalence": 1.3588802826470989e-5 - }, - { - "value": "67.199.248.10", - "count": 28, - "total_related": 100000, - "prevalence": 0.00028 - }, - { - "value": "67.199.248.11", - "count": 24, - "total_related": 100000, - "prevalence": 0.00024 - }, - { - "value": "44.227.76.166", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "104.155.138.21", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "44.227.65.245", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "107.178.223.183", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "209.99.40.222", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "1.179.112.195", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "1.179.112.196", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "1.179.112.197", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "memory_patterns": [ - { - "value": "f4d1a671dff700041255c7242d3abb8376ca9bc94ca44daadda35c5c924eb50e", - "count": 4, - "total_related": 10, - "prevalence": 0.4 - }, - { - "value": "d6ec3d12319d37f874d9cfdb8aee498a520c9ff299d0d6ed84f3635ec2bb72ce", - "count": 4, - "total_related": 38, - "prevalence": 0.10526315789473684 - }, - { - "value": "ef0854adca7503e8b0333b88e37e7625964bd3e04c3e20b1d3bfc1e82d0a24e2", - "count": 4, - "total_related": 38, - "prevalence": 0.10526315789473684 - }, - { - "value": "38480d95965add730f1ea758a4afdf8b156e71bbfcf912e09397a2d82f27d4c9", - "count": 3, - "total_related": 187, - "prevalence": 0.016042780748663103 - }, - { - "value": "c8ae9fd4d86a21a0b1b88a4c7ad5110291ef8c534f4c993d6cc186bc22a96945", - "count": 3, - "total_related": 187, - "prevalence": 0.016042780748663103 - }, - { - "value": "726ea6910cf9b5585dcb92315c25c6397be35550a72968f01e61d35c1ceaa742", - "count": 3, - "total_related": 188, - "prevalence": 0.015957446808510637 - }, - { - "value": "a50ec2f42bec1c43e952de2728de0217f178440bdd8fcef70bb6db4c27e9b4bb", - "count": 2, - "total_related": 39, - "prevalence": 0.05128205128205128 - }, - { - "value": "6680f9b51d53af540951b400b1024cb0e13792c4ed8e16b0ad03679d30a1da94", - "count": 2, - "total_related": 298, - "prevalence": 0.006711409395973154 - }, - { - "value": "06656f08f01f3d6e40710a4d8619d39d544a45b5fd69b0b29799400ebbd119c0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "07df3733b75e6e23d2217a6548ed66654793b20a0674b22187e558c3284c0055", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "126627f54de53d366741693528685ce714f60b3ca9d45cfd4ec5a14d3025b591", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "19fda30a4f30a132d507e9b9415f889a139f5a3e80865b8d6837b54bd42574c1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1e154b2976cc00d457c0dc2b83ebe81911294c8276691617085c03a3304fd87f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "26e376fc80b090b2ee04e7d3104d308a150e58538580109a74f4ac49bf362423", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "3eef99e47c53edcca574b3ca684be958ac5c1867c218f0711b66bd01623e48b6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "45c0007e4c744c6f9ba43660cc7edb9a2deb27580e160f8a0e56585401ee9ee3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "46144dd7262504a58ccb442eb77aef7d3a2790548f2871af5dfe30f63898926d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "48158624f32e8fdc56686f735bf487c0f7279913f29e34b2cb3a42d7886d1c8b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4c3ab4798357e32e0c443f2dcb8261915f32de3fc7f219047c7993cb18c756cd", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4f1987847e23e9c9debb64481372b00fb0194a615154a7f87d2ac992dac70306", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5842272c3dfa8153a147bf5cdefc0f9fc514e66fe9138585639529127d058e47", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "621a8b4ab9858f14ffbd1b17c915acc9a85e33737f9e11cef56de2db82a2f92b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "633f75f86a9cd02f32ac58703562bc5ed44a6506f180c0aaa561118e699493a4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "63a6580d9ee8d5a632886585ab8f7ab59c87d4e2717181c191cac236cd1e1de4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "70c4600d6920dadc1899603b131119427784fcd83d04da5c886bcad5a7af913b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "7697a511692b1150d46cb98e7f55d67ae7ef622c0f732d7824bc0d1fd94a4a6e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "7c66d2d75be43d2c17e75d37c39344a9b5d29ee5c5861f178aa7d9f34208eb48", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "82f446528560789d2f79a9c5f1b8cf3e5eb20468bd567ef9735672748aa00b06", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "8949207761f3d09734aa716da1e6c182425bcde2a95dacb3320085f1fe66069c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "9623c98f7338d56b07b35cd379e31e685e32a9c5317d7bc4af5276916cef4ed3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "979ef0f43f25a6707fd98f6f0cb6e8452c24f41216ff53486781f487803d69c4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "9b839e9169babff1d14468d9f8497c165931dc65d5ff1f4b547925ff924c43fe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "a2528017edb01304f073d31423b02a4de4b0052627cb161e15f4b965306154a3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "b765f7e767a322628113be3b2e557c12bb9f22998e2830ad0fe450f518705c86", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "b884c4e176b894805e9346f73f3b96a5dacdd69ba68d6be713255597f174f93d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "c0110bd55f9b115f84c255342f8afaa4aef53ec5e7a7298165678f2f8fc06e00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "c08ba7c0297cd515c5a24918f6e1ec705b72cdeea40078494d8b51de447b6b8c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "c52e3e73d7870bf8edc1b9ae52b26c08ef2466f948ef3446b2c865fd53d859dd", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "d7da9320165563a7346583b1d457236c479585ebf23521e34d5819f288bbcef4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "e132f74231954cb91d7c83c8cbb92626baa55d5db99ace2f7853943a8bd2dcfe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "e4c9fe57a22be3a31be9d3c4309f8855d630e4cc2afd582932eda54350e7381d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "eaaf0271092d1266c2f3212fa4c47051b357a0617f634644e4f5d3ff9aa9be6c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "ebaaf177e746f9f0e16c906f1ffea95af771252b07136ca6a13995508fce34aa", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "eee9b6e401b731e30447f5d8c944a243346f756f1665d9a0872f446cf8a7ab6a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "f1b3ce96462027644f9caa314d3da745dab139ee1cb14fe508234e76bd686f93", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "f7170b70a89f4b5d196e3a09c1d6135d36320548f66cdc2c55bf725b0f8d4ab8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "fdacd42a9fa5043487ab6c6d52b612e0eeab9beb61aa9bde1433655688638c7b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "02d97b6501ca257e0867b5a271bac707ea79de2010e7f671b84286e3e5affbff", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "274f4412999f561428930bd6ff38cd8e0062e5a6c9aea3e851c6752b7940ff08", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "30916214107e71de23a76842661cc33986e4e914c3124b2da1d446e9c5add9ae", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "54bbf9a07b0b89c0501359077aa98d707ac42b22b0f628265f70237e8a71194f", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "75c81169d679fab821d77ea672f5a878626eb22d2110ffd7407623cb154ededd", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "8b5b6c3b450d3610e62830dee79d9358120d2247b81cb9676a279dd267701f08", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "8bfa4fe0534c0062393b6a2597c3491f7df3bf2eabfe06544c53bdf1f38db6d4", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "d7bfa626bbc8e7db06fec500a84bcb25505119cd470bf3acdfd8252a270d2662", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "e3c505b2457b1ac51c32bf428df070be0aa01fc90f3e35c68224832d83250c46", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "f0f6135eadc541451ac34ad4f4ca1db110fb2994585469b725ed39577e88d0dc", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "f1713afaf5958bdf3e975ebbab8245a98a84e03f8ce52175ef1568de208116e0", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "544d38f93df5c42b9b4482f365f4c274f2e8fae1fd697275cd9b23934402ee6a", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "e3503a7aa046947430d1a4e29d25ea86ef2c6f4120e18cbd50df5afb314b30b3", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "07c5a71b7e8092de7597269cb5bd447525a852dc742083a4599e253291d18b5f", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "05fd254df41265e931ce4c35c1def5ccc42c8b9de0070bdde5ebaa90c3727f15", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "42c1869c0608beb61e63cd44d3d2db90231c6b1203380d5791387ead76430cb3", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "5f18e872712ba761b5e74d9672813ef7c11bc996779053063b9cfd557bdb2352", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "776965310c8688f4c0579e97f9c89bf4cd552513432e6abb010b0fd9bd93cdbf", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "889cc2f9cd7bcddec734976959f793f530ddb1dac839a99cbf032a52fc4c7783", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "c6ed4f5b1f3952bff700a6d5755c0534aa9a222e566a206cf5c8149c8a377f7f", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "d266e47dd456fd2d97947ced1677bbb9eba96ff0582096b508d9e930116ad9aa", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "d786b025e640825af8930b14f884adc3858fe6e8511fa6e7244fbb3a094486f7", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "ed06fc8b097fad7db2908265afecb3232deff5baca29ea8438df55cefc01dea9", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "10056ba4bd97e7f1e3a5ab742addac29597a6ecd40289e720985fca9e1435697", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "aebe53d8cd6bd7cb29e0af6cae7df5c1e302d7cab15c714510ce151a5f658590", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "47767ad1356597fb1fdcb440a6907f7196b029a568bb83343467e4a6625c52ac", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "0b0b07569c508e47b1a9a76e949740bde9add49c2bea487d42142d579858da1d", - "count": 1, - "total_related": 14, - "prevalence": 0.07142857142857142 - }, - { - "value": "27f82b4e513263433150138fea66f9bf9ca68e434c8990dbffe52be4c5234735", - "count": 1, - "total_related": 14, - "prevalence": 0.07142857142857142 - }, - { - "value": "5d3e48ac31ca012603391afc2c44e59846958001823c04733ebd1b5d3cf6bd07", - "count": 1, - "total_related": 14, - "prevalence": 0.07142857142857142 - }, - { - "value": "7ad1f7c989d7d8937bf9a1aca255c273a0bede03e6d26f5537971bd264fbadd9", - "count": 1, - "total_related": 14, - "prevalence": 0.07142857142857142 - }, - { - "value": "60674602836323647634016774ea123232160c1b4dfcf3fcd2d2c28c652aa00e", - "count": 1, - "total_related": 15, - "prevalence": 0.06666666666666667 - }, - { - "value": "d0072130eb4ee81ffba5b703a16c276b0c59b408cb8aa3915980f0f098f04984", - "count": 1, - "total_related": 16, - "prevalence": 0.0625 - }, - { - "value": "c2d9a510d82a3e003a059c6448fff61ba9e39fe8ec6f079b90adabfc93f72b4e", - "count": 1, - "total_related": 29, - "prevalence": 0.034482758620689655 - }, - { - "value": "e9a4c33651d8d22267ae35b3ddb7817be98d10936f9ebeabdc6c6a5c06496cd3", - "count": 1, - "total_related": 36, - "prevalence": 0.027777777777777776 - }, - { - "value": "c43dfda63e6e534776eb24d284d0bdf21115181b49d6e31091de795d957cb5fc", - "count": 1, - "total_related": 94, - "prevalence": 0.010638297872340425 - }, - { - "value": "5e46c630fafef1dd3b5fd76a406e9a3e2b845274e559ba0f87eeb6e8035dc5cd", - "count": 1, - "total_related": 140, - "prevalence": 0.007142857142857143 - }, - { - "value": "b71a4c362a29cda2f327364cb22a3bd58af8b8ff32520bd01e132c6e40c3e072", - "count": 1, - "total_related": 299, - "prevalence": 0.0033444816053511705 - }, - { - "value": "d04b390473fd8a17816d077c2d20763ebdfa943b58cb3171f23872bb653351b6", - "count": 1, - "total_related": 339, - "prevalence": 0.0029498525073746312 - } - ], - "outgoing_links": [ - { - "value": "https://source.zoom.us/3.10.0/zoom-meeting-3.10.0.min.js", - "count": 34, - "total_related": 38, - "prevalence": 0.8947368421052632 - }, - { - "value": "https://source.zoom.us/3.10.0/lib/vendor/react-dom.min.js", - "count": 34, - "total_related": 39, - "prevalence": 0.8717948717948718 - }, - { - "value": "https://source.zoom.us/3.10.0/lib/vendor/react.min.js", - "count": 34, - "total_related": 39, - "prevalence": 0.8717948717948718 - }, - { - "value": "https://source.zoom.us/3.10.0/lib/vendor/redux-thunk.min.js", - "count": 34, - "total_related": 39, - "prevalence": 0.8717948717948718 - }, - { - "value": "https://source.zoom.us/3.10.0/lib/vendor/redux.min.js", - "count": 34, - "total_related": 39, - "prevalence": 0.8717948717948718 - }, - { - "value": "https://source.zoom.us/3.10.0/lib/vendor/lodash.min.js", - "count": 34, - "total_related": 43, - "prevalence": 0.7906976744186046 - }, - { - "value": "https://www.antiphishing.org/", - "count": 22, - "total_related": 36259, - "prevalence": 0.0006067459113599383 - }, - { - "value": "https://www.stopbadware.org/", - "count": 22, - "total_related": 44746, - "prevalence": 0.000491664059357261 - }, - { - "value": "https://www.mediafire.com/file_premium/c69fpniger982ih/laptopnew.jpg/file", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "https://porkbun.com/tools/auctionRedirect/bloomcloud.org", - "count": 4, - "total_related": 9, - "prevalence": 0.4444444444444444 - }, - { - "value": "https://gen.xyz/account/cart.php?a=add&domain=register&sld=&tld=.us.org", - "count": 4, - "total_related": 4201, - "prevalence": 0.0009521542489883361 - }, - { - "value": "https://www.centralnic.com", - "count": 4, - "total_related": 4820, - "prevalence": 0.0008298755186721991 - }, - { - "value": "https://login.blockchain.com/#/login/", - "count": 3, - "total_related": 95, - "prevalence": 0.031578947368421054 - }, - { - "value": "https://login.blockchain.com/#/help", - "count": 3, - "total_related": 150, - "prevalence": 0.02 - }, - { - "value": "https://login.blockchain.com/#/signup", - "count": 3, - "total_related": 1720, - "prevalence": 0.0017441860465116279 - }, - { - "value": "https://github.com/blockchain/blockchain-wallet-v4-frontend/releases", - "count": 3, - "total_related": 4967, - "prevalence": 0.0006039863096436481 - }, - { - "value": "https://d1ayxb9ooonjts.cloudfront.net/d/C5F6F6EF5C67BE2C8F62F369186C92A0BBCE05E1.svg", - "count": 3, - "total_related": 8592, - "prevalence": 0.00034916201117318437 - }, - { - "value": "https://d1ayxb9ooonjts.cloudfront.net/d/716B7C5AED6F8EE92E2EFBFEEFDCA112010264F4.svg", - "count": 3, - "total_related": 12099, - "prevalence": 0.0002479543763947434 - }, - { - "value": "https://d1ayxb9ooonjts.cloudfront.net/d/7AD8772BD1C47740F140231A2A6797014CE99924.svg", - "count": 3, - "total_related": 12099, - "prevalence": 0.0002479543763947434 - }, - { - "value": "https://d1ayxb9ooonjts.cloudfront.net/d/86FCD201EC0B15255F54D03EA0F6D6CC0DE44D70.svg", - "count": 3, - "total_related": 12099, - "prevalence": 0.0002479543763947434 - }, - { - "value": "https://d1ayxb9ooonjts.cloudfront.net/d/A80E1EC0ADE0D3D2D85DEDC41BC3390A09183734.svg", - "count": 3, - "total_related": 12099, - "prevalence": 0.0002479543763947434 - }, - { - "value": "https://d1ayxb9ooonjts.cloudfront.net/d/CDB42D1F6E7A347BF4B6F8FDBDBFB2B9CF1B9FCA.svg", - "count": 3, - "total_related": 12099, - "prevalence": 0.0002479543763947434 - }, - { - "value": "https://d1ayxb9ooonjts.cloudfront.net/d/E716B6F26A66BBAEF022AD3D60349CB2152D3FBE.svg", - "count": 3, - "total_related": 12099, - "prevalence": 0.0002479543763947434 - }, - { - "value": "https://d1ayxb9ooonjts.cloudfront.net/d/EB0C87D7584B93A00E60C42D105830EE697021BC.png", - "count": 3, - "total_related": 12099, - "prevalence": 0.0002479543763947434 - }, - { - "value": "http://bitly.com/?utm_source=Bitly&utm_medium=referral&utm_campaign=preview_page", - "count": 3, - "total_related": 39834, - "prevalence": 7.531254707034192e-5 - }, - { - "value": "https://www.linkedin.com/company/bitly/mycompany/", - "count": 3, - "total_related": 39834, - "prevalence": 7.531254707034192e-5 - }, - { - "value": "https://x.com/bitly", - "count": 3, - "total_related": 39864, - "prevalence": 7.525586995785671e-5 - }, - { - "value": "https://www.instagram.com/bitly/", - "count": 3, - "total_related": 55676, - "prevalence": 5.388318126302177e-5 - }, - { - "value": "https://www.facebook.com/bitly", - "count": 3, - "total_related": 57357, - "prevalence": 5.230399079449762e-5 - }, - { - "value": "https://filedn.com/lMLD9KjI90lFxgNbWwELvpf/Wartr/laptopnew.jpg", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "https://partner.googleadservices.com/gampad/cookie.js?domain=www.googlesheet.info&client=partner-dp-bodis30_3ph&product=SAS&callback=__sasCookie", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "https://porkbun.com/tools/auctionRedirect/googlesheetpage.org", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "https://partner.googleadservices.com/gampad/cookie.js?domain=ww25.global-pro.xyz&client=partner-dp-bodis31_3ph&product=SAS&callback=__sasCookie&cookie_types=v1%2Cv2", - "count": 2, - "total_related": 9, - "prevalence": 0.2222222222222222 - }, - { - "value": "https://api.zoom.us", - "count": 2, - "total_related": 18, - "prevalence": 0.1111111111111111 - }, - { - "value": "https://plcl.me/images/XHb7L.png", - "count": 2, - "total_related": 28, - "prevalence": 0.07142857142857142 - }, - { - "value": "https://plcl.me/images/qMFnZ.png", - "count": 2, - "total_related": 28, - "prevalence": 0.07142857142857142 - }, - { - "value": "https://situsslotdepo10k.org/", - "count": 2, - "total_related": 28, - "prevalence": 0.07142857142857142 - }, - { - "value": "https://plcl.me/images/2JNhx.png", - "count": 2, - "total_related": 33, - "prevalence": 0.06060606060606061 - }, - { - "value": "https://explore.zoom.us/en/search/#q=", - "count": 2, - "total_related": 41, - "prevalence": 0.04878048780487805 - }, - { - "value": "https://st3.zoom.us/static/6.2.7916/image/thumb.png", - "count": 2, - "total_related": 76, - "prevalence": 0.02631578947368421 - }, - { - "value": "https://login.blockchain.com/#/mobile-login", - "count": 2, - "total_related": 90, - "prevalence": 0.022222222222222223 - }, - { - "value": "https://login.blockchain.com/#/reminder", - "count": 2, - "total_related": 121, - "prevalence": 0.01652892561983471 - }, - { - "value": "https://g.co/kgs/UdsQY1Y", - "count": 2, - "total_related": 133, - "prevalence": 0.015037593984962405 - }, - { - "value": "https://space88.fun/renseo", - "count": 2, - "total_related": 147, - "prevalence": 0.013605442176870748 - }, - { - "value": "https://support.zoom.com/", - "count": 2, - "total_related": 223, - "prevalence": 0.008968609865470852 - }, - { - "value": "https://en.wikipedia.org/wiki/Zoom_Video_Communications", - "count": 2, - "total_related": 261, - "prevalence": 0.007662835249042145 - }, - { - "value": "https://i.imgur.com/2001Pcz.png", - "count": 2, - "total_related": 416, - "prevalence": 0.004807692307692308 - }, - { - "value": "https://i.imgur.com/WmADymD.png", - "count": 2, - "total_related": 436, - "prevalence": 0.0045871559633027525 - }, - { - "value": "https://secure.livechatinc.com/licence/17223693/v2/open_chat.cgi", - "count": 2, - "total_related": 503, - "prevalence": 0.003976143141153081 - }, - { - "value": "https://i.imgur.com/eql8hrp.png", - "count": 2, - "total_related": 510, - "prevalence": 0.00392156862745098 - }, - { - "value": "https://i.imgur.com/BV4Xq3y.png", - "count": 2, - "total_related": 545, - "prevalence": 0.003669724770642202 - }, - { - "value": "https://explore.zoom.us/en/trust/legal-compliance/", - "count": 2, - "total_related": 5398, - "prevalence": 0.0003705075954057058 - }, - { - "value": "https://explore.zoom.us/en/terms/", - "count": 2, - "total_related": 6149, - "prevalence": 0.0003252561392096276 - }, - { - "value": "https://explore.zoom.us/en/acceptable-use-guidelines/", - "count": 2, - "total_related": 8071, - "prevalence": 0.00024780076818238137 - }, - { - "value": "https://support.bitly.com/hc/en-us/articles/32500359495565-Free-Short-Link-Generator-Anonymous-Link-FAQ", - "count": 2, - "total_related": 8580, - "prevalence": 0.0002331002331002331 - }, - { - "value": "https://explore.zoom.us/docs/js/optimizely/optimizely.js", - "count": 2, - "total_related": 11009, - "prevalence": 0.0001816695431010991 - }, - { - "value": "https://go.pardot.com/l/84442/2015-10-23/mspcv", - "count": 2, - "total_related": 13325, - "prevalence": 0.000150093808630394 - }, - { - "value": "https://go.pardot.com/l/84442/2015-07-23/mv5y", - "count": 2, - "total_related": 13334, - "prevalence": 0.00014999250037498125 - }, - { - "value": "https://go.pardot.com/l/84442/2015-07-14/4xht", - "count": 2, - "total_related": 13342, - "prevalence": 0.00014990256333383302 - }, - { - "value": "https://go.pardot.com/l/84442/2015-07-23/mw5t", - "count": 2, - "total_related": 13347, - "prevalence": 0.0001498464074323818 - }, - { - "value": "https://log-gateway.zoom.us/nws/join/logger/felog", - "count": 2, - "total_related": 13349, - "prevalence": 0.00014982395685070042 - }, - { - "value": "https://apps.facebook.com/zoomvideocall/", - "count": 2, - "total_related": 14825, - "prevalence": 0.00013490725126475548 - }, - { - "value": "https://rakkoma.com/", - "count": 2, - "total_related": 20865, - "prevalence": 9.58543014617781e-5 - }, - { - "value": "https://inovatik.com", - "count": 2, - "total_related": 30081, - "prevalence": 6.648715135800007e-5 - }, - { - "value": "https://explore.zoom.us/en/accessibility", - "count": 2, - "total_related": 61464, - "prevalence": 3.2539372640895484e-5 - }, - { - "value": "https://explore.zoom.us/en/trust/", - "count": 2, - "total_related": 65526, - "prevalence": 3.052223544852425e-5 - }, - { - "value": "https://cdn.ampproject.org/rtv/012502032353000/v0/amp-loader-0.1.js", - "count": 2, - "total_related": 84420, - "prevalence": 2.369106846718787e-5 - }, - { - "value": "https://code.jquery.com/jquery-1.11.1.min.js", - "count": 2, - "total_related": 86343, - "prevalence": 2.3163429577383226e-5 - }, - { - "value": "https://cdn.ampproject.org/rtv/012502032353000/v0/amp-auto-lightbox-0.1.js", - "count": 2, - "total_related": 86961, - "prevalence": 2.299881556099861e-5 - }, - { - "value": "http://www.html5rocks.com/en/tutorials/canvas/hidpi/", - "count": 27, - "total_related": 100000, - "prevalence": 0.00027 - }, - { - "value": "https://crbug.com/740629)", - "count": 27, - "total_related": 100000, - "prevalence": 0.00027 - }, - { - "value": "https://w3c.github.io/gamepad/#remapping", - "count": 27, - "total_related": 100000, - "prevalence": 0.00027 - }, - { - "value": "https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js", - "count": 20, - "total_related": 100000, - "prevalence": 0.0002 - }, - { - "value": "https://www.google.com/adsense/domains/caf.js?abp=1&bodis=true", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": "https://porkbun.com", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": "https://schema.org", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "https://ep2.adtrafficquality.google/sodar/sodar2/232/runner.html", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "https://securepubads.g.doubleclick.net/static/topics/topics_frame.html", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "https://securepubads.g.doubleclick.net/tag/js/gpt.js", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "https://www.google.com/recaptcha/api2/aframe", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "https://www.googletagmanager.com/gtm.js?id=", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "http://apache.org", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "http://centos.org", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "http://httpd.apache.org/", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "http://schema.org", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "http://www.centos.org/", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "http://www.internic.net/whois.html", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "https://apis.google.com/js/plusone.js", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "https://bitly.com/", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "https://cdn.ampproject.org/v0.js", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "https://cdn.ampproject.org/v0/amp-analytics-0.1.js", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "https://cdn.ampproject.org/v0/amp-anim-0.1.js", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "https://cdn.cookielaw.org/scripttemplates/otSDKStub.js", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "https://code.jquery.com/jquery-3.7.1.min.js", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "https://euob.netgreencolumn.com/sxp/i/c4601e5f6cdd73216cafdd5af209201c.js", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "https://explore.zoom.us/en/privacy/", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "https://explore.zoom.us/wp-content/themes/zoom-cms-wp/assets/img/icon-check.png", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "https://platform-api.sharethis.com/panorama.js", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "https://schema.org/", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "https://securepubads.g.doubleclick.net/pagead/managed/js/gpt/m202412090101/pubads_impl.js", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - } - ], - "path": [ - { - "value": "/zoom/join", - "count": 83, - "total_related": 152, - "prevalence": 0.5460526315789473 - }, - { - "value": "/edit", - "count": 17, - "total_related": 18879, - "prevalence": 0.0009004714232745378 - }, - { - "value": "/zoom/error", - "count": 7, - "total_related": 16, - "prevalence": 0.4375 - }, - { - "value": "/wcqtZBk3pEs/fD5ZkUg7TL/n_W_EPni7p/+ZWEU3fn/bOX6afSoRA/FOrtg==", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "/zoom/join/", - "count": 3, - "total_related": 11, - "prevalence": 0.2727272727272727 - }, - { - "value": "/pdfviewer.php", - "count": 3, - "total_related": 138, - "prevalence": 0.021739130434782608 - }, - { - "value": "/client", - "count": 3, - "total_related": 31247, - "prevalence": 9.600921688482094e-5 - }, - { - "value": "/ss", - "count": 3, - "total_related": 39696, - "prevalence": 7.557436517533252e-5 - }, - { - "value": "/+WZKqbW/mYBMqA23aeG/5QUlJVz9ETO/588wfC%20eoru/eIXfGGPnm0Ki/1Ww==", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/191239/send-ip-request", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/265446/check", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/265590/check", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/291591/check", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/291591/check/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/292097/check", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/2pY8VVB", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/462833/check", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/494933/check", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/4kor+UlHd98m5hsroSbTrgoWzqs7WILRXUJWI43fJ5s=.msi", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/553619/check", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/749109/check", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/8orFaRkD8yM5hUXCngKhpXaNWdt8aYpUd/99Y43R2FQ=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/970418/send-ip-request", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/CpA2wiAU77L/1UcbAYHGoi/faSubLvyJe/ad8WJlxeal/Z4=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/EcCm9WiaysW/D+sYq1Io/yVMuSbkgQZ/Vp6bzP5LXe/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/G9QSB8DHRcQ/4ShCSu6nDj/h7WF2RW+/PU2QlUJogi/GsAsAQyu6L/uGoMw==", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/H9Zhw04fTVZQQgvv9DUjePZmbeab7RExI76EE6+u1jg=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/MgHT9botGGYuJmLRBebwuhwPYXlcd5CeNCn+LWYmSXU=.msi", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/NWjtAzRCOsN/wH3NF19ZGr/R6GKptoWaQ/mwdHY+k8/XJpKafSoRA/FOrtg==", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/OdxgSIF", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/OdxgSIF+I/EB3Dr_IYUD/0haO8NLJM5/HSHOJIzrj_/6eLPdng=/=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/Of43RYJPMU1/lJLnDAWalt/NyRAItr2WS/HOJIzrj_6c/77bgHY=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/OstpfpplSmd/kB7XqC07xt/pvsON52yWS/CLpIorS_6Y/aXbgXY=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/OuxGRtlwFU5/RGpO3A3iyi/J6ED6ZY42S/HOJIorS_6e/73Ak23qSow/ZVw==", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/OvJhf8twMUF/PIsP0a3v0v/aOMFpJ1_VK/CLpIorS_6Z/qbVkHPmQIE/R", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/TzYOiYx", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/ZyCws4dD_zE/aUhUJV0p6P/S9XrRH9+/R51g4b5Kjj/abnY=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/cqqhh7hzahw2b8t1mnyg/mkf9hhvwfjxnb0f2kknf0o=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/eccm9wiaysw/d+syq1io/yvmusbkgqz/vp6bzp5lxe/ec08p4lt6g/cbsbq==", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/en/id/t56/home", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/en/id/t56/home/2fa.php", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/hVrk+OKVU/B57xnhwLfy/p5NUjgD9zN/vFdgk30Njh/4B3TEuCfGe/cEEIQ==", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/lsiztzcsljm/w+ltv_pa/qui+ksad/_rznkkguw6/cqhgse=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/oQ6pgIjI+MhZwM0JzshhFCc9j8v8L0Ovb+DOKuRm9UI=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/of43ryjpmu1/ljlndawalt/nyraitr2ws/hojizrj_6c/77bghy=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/oipYhEuV1K+2d2U95Ul/S1JACy1Qyn/tOWT1sZD_4/Vx9sabJQMh/uj9hw==", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/roundtable-talk-with-civ-team/roomID=3570947&meetingID=5161127", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/roundtable-talk-with-civ-team/roomID=3570947&meetingID=7734338", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/roundtable-talk-with-foresight-team/roomID=3570947&meetingID=0762138", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/roundtable-talk-with-longhash-team/roomID=3570947&meetingID=1185874", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/roundtable-talk-with-metaschool-team/roomID=3570947&meetingID=0657012", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/troubleshoot-issue-046966", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/troubleshoot-issue-331932", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/troubleshoot-issue-493960", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/troubleshoot-issue-597573", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/troubleshoot-issue-775629", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/troubleshoot-issue-931003", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/troubleshoot-issue-939046", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/wcqtzbk3pes/fd5zkug7tl/n_w_epni7p/+zweu3fn/box6afsora/fortg==", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/xg/XjyZ4liSxPxR8N07y5jfDBK7JxlNhTOM0rkJaZ8w=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/2qRa60mv2a5zatU3RmgAHlbjRh1klMFjgezI2pOL0Tk=", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "/OelnZtFfCGl/eeprSKlqMp/qCKN4F5mmS/YJJIhqSrAe/6HRrW3sRIA/aAg==", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "/Tn_o2MrOPqQ/pAJOK3GxdZ/Ul4yGvEIjY/LSBM7BiRDI/UDMurOYsxo/G5A==", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "/bSQphSxgStENEhz5Y+PZCpjr/NBSWGWjjhkJi/PvaqE=", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "/lSDkdt63T02/ouofDDiKyC/t7G8s+ug/C3hXppThya/naeJfyQcl0/gLLAA==", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "/lsizTZCslJm/W+Ltv_Pa/qUi+KSaD/_rzNkkGuW6/cQHgsE=", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "/roundtable-talk-with-ryzelabs-team/roomID=3570947&meetingID=9960215", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "/zoom/meeting", - "count": 2, - "total_related": 9, - "prevalence": 0.2222222222222222 - }, - { - "value": "/packageupd.msi", - "count": 2, - "total_related": 29, - "prevalence": 0.06896551724137931 - }, - { - "value": "/list.php", - "count": 2, - "total_related": 93616, - "prevalence": 2.136386942403008e-5 - }, - { - "value": "/%20WZKqbW/mYBMqA23aeG/5QUlJVz9ETO/588wfCeoru/eIXfGGPnm0Ki/1Ww==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/+EEph5QYR/wIssh_GH4K/E5GX2xbymO/+B8kGuW6/cQHgsE=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/+Eu8cueEnRsCcDRm5c00R2Fkg36MNK0wToJtR7rPNrM=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/+WZKqbW/mYBMqA23aeG/5QUlJVz9ETO/588wfCeoru/eIXfGGPnm0Ki/1Ww==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/+WZKqbW/mYBMqA23aeG/5QUlJVz9ETO/588wfCeoru/eIXfGGPnm0Ki/1Ww==&isbn=714477.5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/+XztpVm%25+DkVvCKd_i/vQ4iiJovS0/mVfHOgk30N/jh4B3TEuCf/GecEEIQ", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/+XztpVm+DkVvCKd_i/vQ4iiJovS0/mVfHOgk30N/jh4B3TEuCf/GecEEIQ", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/+XztpVm+DkVvCKd_i/vQ4iiJovS0/mVfHOgk30N/jh4B3TEuCf/GecEEIQ=/=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/045096/request-for-troubleshooting", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/069805/check", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/06i8dz9xhMt/u3F0PMVyrX/cu_PBCBuJQ/VDzPH+w7/2qWWcqgFBC/4CHCugSsNK/oymM6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/096478/check", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/0Odr3l_Mro4/ttp6OIfPQL/3Oa5Ywe_ek/JC4m1q77ic/zx45+e6j/+Lg5A=/=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/0XN2GfKJDuzAzCDFejYqbRk738dAo9v41Nb0ZPR/tao=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/0dgMmfyoNEk/rjYEW7laua/N5vkc9bX6Q/17mn0TezMx/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/0dgMmfyoNEk/rjYEW7laua/N5vkc9bX6Q/17mn0TezMx/TA=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/+Krj5vPCP/sCEN30+a/xMODNxXBJW/q7bdEXiOvm/dwmvpgnZDI/pOkszug=/=", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "/+Oy4hirVnSwZBtJJuw/rQz82YTYsSH4P4eVS3au1ano=", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "/00n5WXIsYWN/u+YtaNH5/YNglJgG_Cm/zfxpXKX90x/_Xz5ZZM98J/y1I7A==", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "/021262/check", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "/041368/check", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "/07ma_Au4+/Yw4eJeQPBd/Mc2+9HmC/tEEpDOXyWw/ebmlHbfcsv/4CYQUEdr2Z/xdkvHBA", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "/%20Oy4hirVnSwZBtJJuw/rQz82YTYsSH4P4eVS3au1ano=", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "/05UFKsHKiaeEIeE056+xGehUOzj8wpfD7m7hoxqbbIo=", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "/+gFJKOpVX/4vRuFIaGlI/D+OfpTtg/YTN0TU1BNx/bMA5aGuZZP/ODq7aFQ=/=", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "/open", - "count": 21, - "total_related": 100000, - "prevalence": 0.00021 - }, - { - "value": "/download", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "/1", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "/2", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "/uc", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - } - ], - "prefix_paths": [ - { - "value": "/zoom", - "count": 96, - "total_related": 4772, - "prevalence": 0.020117351215423303 - }, - { - "value": "/zoom/join", - "count": 83, - "total_related": 164, - "prevalence": 0.5060975609756098 - }, - { - "value": "/Of56cYsfVV8", - "count": 9, - "total_related": 7, - "prevalence": 1.2857142857142858 - }, - { - "value": "/Of56cYsfVV8/OJITWH2WFx", - "count": 8, - "total_related": 6, - "prevalence": 1.3333333333333333 - }, - { - "value": "/Of56cYsfVV8/OJITWH2WFx/Jy5S7hSx0K", - "count": 8, - "total_related": 6, - "prevalence": 1.3333333333333333 - }, - { - "value": "/Of56cYsfVV8/OJITWH2WFx/Jy5S7hSx0K/fP7saoiPBc", - "count": 8, - "total_related": 6, - "prevalence": 1.3333333333333333 - }, - { - "value": "/zoom/error", - "count": 8, - "total_related": 18, - "prevalence": 0.4444444444444444 - }, - { - "value": "/roundtable-talk-with-civ-team", - "count": 7, - "total_related": 7, - "prevalence": 1.0 - }, - { - "value": "/roundtable-talk-with-foresight-team", - "count": 7, - "total_related": 16, - "prevalence": 0.4375 - }, - { - "value": "/Ov56cYsfVV8/OJITWH2WFx/Jy5S7hSx0K/fP7saoiPBc", - "count": 6, - "total_related": 7, - "prevalence": 0.8571428571428571 - }, - { - "value": "/update/drivers", - "count": 6, - "total_related": 7, - "prevalence": 0.8571428571428571 - }, - { - "value": "/Ov56cYsfVV8", - "count": 6, - "total_related": 8, - "prevalence": 0.75 - }, - { - "value": "/Ov56cYsfVV8/OJITWH2WFx", - "count": 6, - "total_related": 8, - "prevalence": 0.75 - }, - { - "value": "/Ov56cYsfVV8/OJITWH2WFx/Jy5S7hSx0K", - "count": 6, - "total_related": 8, - "prevalence": 0.75 - }, - { - "value": "/meeting-with-hashkey-team", - "count": 6, - "total_related": 8, - "prevalence": 0.75 - }, - { - "value": "/Ob90fYYcKHh", - "count": 5, - "total_related": 4, - "prevalence": 1.25 - }, - { - "value": "/Ob90fYYcKHh/wJoLTNgmSn", - "count": 5, - "total_related": 4, - "prevalence": 1.25 - }, - { - "value": "/G9QSB8DHRcQ", - "count": 5, - "total_related": 7, - "prevalence": 0.7142857142857143 - }, - { - "value": "/G9QSB8DHRcQ/4ShCSu6nDj", - "count": 5, - "total_related": 7, - "prevalence": 0.7142857142857143 - }, - { - "value": "/G9QSB8DHRcQ/4ShCSu6nDj/h7WF2RW+", - "count": 5, - "total_related": 7, - "prevalence": 0.7142857142857143 - }, - { - "value": "/G9QSB8DHRcQ/4ShCSu6nDj/h7WF2RW+/PU2QlUJogi", - "count": 5, - "total_related": 7, - "prevalence": 0.7142857142857143 - }, - { - "value": "/roundtable-talk-with-signum-team", - "count": 5, - "total_related": 11, - "prevalence": 0.45454545454545453 - }, - { - "value": "/cpa2wiau77l", - "count": 4, - "total_related": 2, - "prevalence": 2.0 - }, - { - "value": "/cpa2wiau77l/1ucbayhgoi", - "count": 4, - "total_related": 2, - "prevalence": 2.0 - }, - { - "value": "/cpa2wiau77l/1ucbayhgoi/fasublvyje", - "count": 4, - "total_related": 2, - "prevalence": 2.0 - }, - { - "value": "/cpa2wiau77l/1ucbayhgoi/fasublvyje/ad8wjlxeal", - "count": 4, - "total_related": 2, - "prevalence": 2.0 - }, - { - "value": "/troubleshoot-issue-775629", - "count": 4, - "total_related": 2, - "prevalence": 2.0 - }, - { - "value": "/Ob90fYYcKHh/wJoLTNgmSn/b3tL91N4nS", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "/Ob90fYYcKHh/wJoLTNgmSn/b3tL91N4nS/fP7savDX6c", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "/CpA2wiAU77L", - "count": 4, - "total_related": 5, - "prevalence": 0.8 - }, - { - "value": "/CpA2wiAU77L/1UcbAYHGoi", - "count": 4, - "total_related": 5, - "prevalence": 0.8 - }, - { - "value": "/CpA2wiAU77L/1UcbAYHGoi/faSubLvyJe", - "count": 4, - "total_related": 5, - "prevalence": 0.8 - }, - { - "value": "/CpA2wiAU77L/1UcbAYHGoi/faSubLvyJe/ad8WJlxeal", - "count": 4, - "total_related": 5, - "prevalence": 0.8 - }, - { - "value": "/roundtable-talk-with-longhash-team", - "count": 4, - "total_related": 5, - "prevalence": 0.8 - }, - { - "value": "/OdhLca1mLUp", - "count": 4, - "total_related": 6, - "prevalence": 0.6666666666666666 - }, - { - "value": "/OdhLca1mLUp/lZ5rZPxWsh", - "count": 4, - "total_related": 6, - "prevalence": 0.6666666666666666 - }, - { - "value": "/OdhLca1mLUp/lZ5rZPxWsh/7yZKYQI43S", - "count": 4, - "total_related": 6, - "prevalence": 0.6666666666666666 - }, - { - "value": "/OdhLca1mLUp/lZ5rZPxWsh/7yZKYQI43S/fP7savDX6c", - "count": 4, - "total_related": 6, - "prevalence": 0.6666666666666666 - }, - { - "value": "/meeting-with-gumi-cryptos-team", - "count": 4, - "total_related": 9, - "prevalence": 0.4444444444444444 - }, - { - "value": "/en/id", - "count": 4, - "total_related": 213, - "prevalence": 0.018779342723004695 - }, - { - "value": "/test", - "count": 4, - "total_related": 84109, - "prevalence": 4.7557336313593076e-5 - }, - { - "value": "/en/id/t56", - "count": 4, - "total_related": 0, - "prevalence": -1 - }, - { - "value": "/en/id/t56/home", - "count": 4, - "total_related": 0, - "prevalence": -1 - }, - { - "value": "/troubleshoot-issue-493960", - "count": 3, - "total_related": 2, - "prevalence": 1.5 - }, - { - "value": "/749109", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "/749109/check", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "/OdxgSIF+I", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "/OdxgSIF+I/EB3Dr_IYUD", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "/OdxgSIF+I/EB3Dr_IYUD/0haO8NLJM5", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "/OdxgSIF+I/EB3Dr_IYUD/0haO8NLJM5/HSHOJIzrj_", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "/roundtable-talk-with-civ-team/roomID=3570947&meetingID=5161127", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "/roundtable-talk-with-civ-team/roomID=3570947&meetingID=7734338", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "/troubleshoot-issue-046966", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "/troubleshoot-issue-331932", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "/291591", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "/291591/check", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "/roundtable-talk-with-7xvc-team", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "/roundtable-talk-with-metaschool-team", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "/NafqhbXR7KC", - "count": 3, - "total_related": 9, - "prevalence": 0.3333333333333333 - }, - { - "value": "/NafqhbXR7KC/rTVCtCpxPH", - "count": 3, - "total_related": 9, - "prevalence": 0.3333333333333333 - }, - { - "value": "/zoom/join/", - "count": 3, - "total_related": 11, - "prevalence": 0.2727272727272727 - }, - { - "value": "/045096", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/045096/request-for-troubleshooting", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/100391/request-for-troubleshooting", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/577085/request-for-troubleshooting", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/OcRLY4xsFlN", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/OcRLY4xsFlN/vMZrXIWONw", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/OcRLY4xsFlN/vMZrXIWONw/6OyCZl89HS", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/OcRLY4xsFlN/vMZrXIWONw/6OyCZl89HS/fP7savDX6c", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/OcRXE6kCKll", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/OcRXE6kCKll/+Y7PtA02", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/OcRXE6kCKll/+Y7PtA02/BxrjyGrNvx", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/OcRXE6kCKll/+Y7PtA02/BxrjyGrNvx/kKHOJI1tTj", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/OuZQHoMfFk9", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/100391", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/191239", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/191239/send-ip-request", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/291591/check/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/292097", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/292097/check", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/462833", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/462833/check", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/OessGdJCJn9", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/OessGdJCJn9/Xeb_xP3CIw", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/OessGdJCJn9/Xeb_xP3CIw/biIFqxf4FK", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/OessGdJCJn9/Xeb_xP3CIw/biIFqxf4FK/HOJI1tTjNe", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/265446", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "/265446/check", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "/494933", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "/494933/check", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "/553619", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "/553619/check", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "/577085", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "/NafqhbXR7KC/rTVCtCpxPH/pdQTpFN6FC", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "/NafqhbXR7KC/rTVCtCpxPH/pdQTpFN6FC/Lhr_wXGXix", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "/update", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "/client", - "count": 5, - "total_related": 100000, - "prevalence": 5e-5 - }, - { - "value": "/en", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "/open", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "/1", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - } - ], - "suffix_paths": [ - { - "value": "/join", - "count": 81, - "total_related": 66618, - "prevalence": 0.001215887597946501 - }, - { - "value": "/zoom/join", - "count": 80, - "total_related": 153, - "prevalence": 0.5228758169934641 - }, - { - "value": "/check", - "count": 25, - "total_related": 59516, - "prevalence": 0.00042005511123059344 - }, - { - "value": "/request-for-troubleshooting", - "count": 7, - "total_related": 5, - "prevalence": 1.4 - }, - { - "value": "/zoom/error", - "count": 7, - "total_related": 16, - "prevalence": 0.4375 - }, - { - "value": "/fP7savDX6c/bfC", - "count": 6, - "total_related": 6, - "prevalence": 1.0 - }, - { - "value": "/bfC", - "count": 6, - "total_related": 10, - "prevalence": 0.6 - }, - { - "value": "/Jy5S7hSx0K/fP7saoiPBc/A==", - "count": 5, - "total_related": 5, - "prevalence": 1.0 - }, - { - "value": "/fP7saoiPBc/A==", - "count": 5, - "total_related": 13, - "prevalence": 0.38461538461538464 - }, - { - "value": "/A==", - "count": 5, - "total_related": 304, - "prevalence": 0.01644736842105263 - }, - { - "value": "/check/", - "count": 5, - "total_related": 14268, - "prevalence": 0.0003504345388281469 - }, - { - "value": "/client", - "count": 5, - "total_related": 16923, - "prevalence": 0.00029545588843585654 - }, - { - "value": "/=", - "count": 5, - "total_related": 75144, - "prevalence": 6.65389119557117e-5 - }, - { - "value": "/troubleshoot-issue-775629", - "count": 4, - "total_related": 2, - "prevalence": 2.0 - }, - { - "value": "/OJITWH2WFx/Jy5S7hSx0K/fP7saoiPBc/A==", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "/bfC/", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "/fP7savDX6c/bfC/", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "/uGoMw==", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "/send-ip-request", - "count": 4, - "total_related": 10, - "prevalence": 0.4 - }, - { - "value": "/1UcbAYHGoi/faSubLvyJe/ad8WJlxeal/Z4=", - "count": 3, - "total_related": 1, - "prevalence": 3.0 - }, - { - "value": "/ad8WJlxeal/Z4=", - "count": 3, - "total_related": 1, - "prevalence": 3.0 - }, - { - "value": "/faSubLvyJe/ad8WJlxeal/Z4=", - "count": 3, - "total_related": 1, - "prevalence": 3.0 - }, - { - "value": "/0haO8NLJM5/HSHOJIzrj_/6eLPdng=/=", - "count": 3, - "total_related": 2, - "prevalence": 1.5 - }, - { - "value": "/6eLPdng=/=", - "count": 3, - "total_related": 2, - "prevalence": 1.5 - }, - { - "value": "/HSHOJIzrj_/6eLPdng=/=", - "count": 3, - "total_related": 2, - "prevalence": 1.5 - }, - { - "value": "/troubleshoot-issue-493960", - "count": 3, - "total_related": 2, - "prevalence": 1.5 - }, - { - "value": "/jy5s7hsx0k/fp7saoipbc/a==", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "/ojitwh2wfx/jy5s7hsx0k/fp7saoipbc/a==", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "/GsAsAQyu6L/uGoMw==", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "/PU2QlUJogi/GsAsAQyu6L/uGoMw==", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "/h7WF2RW+/PU2QlUJogi/GsAsAQyu6L/uGoMw==", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "/Z4=", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "/fp7saoipbc/a==", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "/Jy5S7hSx0K/fP7saoiPBc/A==/", - "count": 3, - "total_related": 7, - "prevalence": 0.42857142857142855 - }, - { - "value": "/fP7saoiPBc/A==/", - "count": 3, - "total_related": 9, - "prevalence": 0.3333333333333333 - }, - { - "value": "/zoom/join/", - "count": 3, - "total_related": 11, - "prevalence": 0.2727272727272727 - }, - { - "value": "/A==/", - "count": 3, - "total_related": 14, - "prevalence": 0.21428571428571427 - }, - { - "value": "/a==", - "count": 3, - "total_related": 17, - "prevalence": 0.17647058823529413 - }, - { - "value": "/join/", - "count": 3, - "total_related": 12003, - "prevalence": 0.00024993751562109475 - }, - { - "value": "/+Y7PtA02/BxrjyGrNvx/kKHOJI1tTj/Nerw=", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/045096/request-for-troubleshooting", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/100391/request-for-troubleshooting", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/5072254551f9En7if3Vr", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/577085/request-for-troubleshooting", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/6OyCZl89HS/fP7savDX6c/bfC", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/BxrjyGrNvx/kKHOJI1tTj/Nerw=", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/HOJIrvCjD", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/Jy5S7hSx0K/fP7saoiPBc", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/Nerw=", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/OJITWH2WFx/Jy5S7hSx0K/fP7saoiPBc", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/OLJniMUyHo/bueNd57xWS/HOJIrvCjD", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/OuZQHoMfFk9/OLJniMUyHo/bueNd57xWS/HOJIrvCjD", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/QEkrrppysE2iMCGUZkC6F49CL1R6b35mnwIto5S7Bjc=.msi", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/ad8wjlxeal/z4/", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/bueNd57xWS/HOJIrvCjD", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/+ZWEU3fn/bOX6afSoRA/FOrtg==", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/191239/send-ip-request", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/291591/check/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/292097/check", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/462833/check", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/553619/check", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/749109/check", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/7yZKYQI43S/fP7savDX6c/bfC/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/Enable%20IP%20Permission.js", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/FOrtg==", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/HOJI1tTjNe/rw=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/IP/Enable%20IP%20Permission.js", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/Jy5S7hSx0K/fP7saoiPBc/A", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/OJITWH2WFx/Jy5S7hSx0K/fP7saoiPBc/A", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/W+Ltv_Pa/qUi+KSaD/_rzNkkGuW6/cQHgsE=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/Xeb_xP3CIw/biIFqxf4FK/HOJI1tTjNe/rw=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/_rzNkkGuW6/cQHgsE=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/_rznkkguw6/cqhgse=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/aUhUJV0p6P/S9XrRH9+/R51g4b5Kjj/abnY=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/b3tL91N4nS/fP7savDX6c/bfC", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/b3tL91N4nS/fP7savDX6c/bfC/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/bOX6afSoRA/FOrtg==", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/biIFqxf4FK/HOJI1tTjNe/rw=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/cQHgsE=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/cqhgse=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/4B3TEuCfGe/cEEIQ==", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "/7yZKYQI43S/fP7savDX6c/bfC", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "/Jy5S7hSx0K/fP7saoiPBc/A=", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "/OJITWH2WFx/Jy5S7hSx0K/fP7saoiPBc/A=", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "/cEEIQ==", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "/d1KW5nQ8MZccug6Mp4QtKyWLT3HIZzHNIL2", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "/R51g4b5Kjj/abnY=", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "/S9XrRH9+/R51g4b5Kjj/abnY=", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "/abnY=", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "/bnm", - "count": 2, - "total_related": 128, - "prevalence": 0.015625 - }, - { - "value": "/A=", - "count": 2, - "total_related": 1534, - "prevalence": 0.001303780964797914 - }, - { - "value": "/A", - "count": 2, - "total_related": 45860, - "prevalence": 4.361098996947231e-5 - }, - { - "value": "/73Ak23qSow/ZVw==", - "count": 2, - "total_related": 0, - "prevalence": -1 - }, - { - "value": "/HOJIorS_6e/73Ak23qSow/ZVw==", - "count": 2, - "total_related": 0, - "prevalence": -1 - }, - { - "value": "/J6ED6ZY42S/HOJIorS_6e/73Ak23qSow/ZVw==", - "count": 2, - "total_related": 0, - "prevalence": -1 - }, - { - "value": "/ZVw==", - "count": 2, - "total_related": 0, - "prevalence": -1 - }, - { - "value": "/", - "count": 30, - "total_related": 100000, - "prevalence": 0.0003 - }, - { - "value": "/error", - "count": 7, - "total_related": 100000, - "prevalence": 7e-5 - }, - { - "value": "/open", - "count": 3, - "total_related": 100000, - "prevalence": 3e-5 - }, - { - "value": "/1", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - } - ], - "ports": [ - { - "value": "8080", - "count": 15, - "total_related": 100000, - "prevalence": 0.00015 - }, - { - "value": "443", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "8000", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "query_strings": [ - { - "value": "utm_source=sendgrid.com&utm_medium=email&utm_campaign=website", - "count": 6, - "total_related": 9797, - "prevalence": 0.0006124323772583443 - }, - { - "value": "mn=54502115&pwd=CUw0Vm", - "count": 5, - "total_related": 5, - "prevalence": 1.0 - }, - { - "value": "cid=AB7FEE589CE19D1A&resid=AB7FEE589CE19D1A!186&authkey=AID-A76MMkLd4M4", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "mn=29268281&pwd=s8QXBx", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "mn=31803193&pwd=27Ev7j", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "mn=41058179&pwd=g1pKtJ", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "mn=44424970&pwd=151643", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "mn=50202229&pwd=ZV83E4", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "mn=61282951&pwd=zb5mKU", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "mn=83667790&pwd=16vtG8", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "mn=83667790&pwd=16vtG8js", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "mn=98344416&pwd=DB2BiL", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "o=1&t=report", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "utm_medium=email&utm_campaign=website&utm_source=sendgrid.com", - "count": 2, - "total_related": 3172, - "prevalence": 0.0006305170239596469 - }, - { - "value": "3zralwychvhorma=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "6BkW6F7HdeNgCXF//OJaiiBXANDifi6Ss5edSVuEdVtcz/Fc0GQ4RRdq0PtRwXRV", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "TutVXfoAiHQcyg7bwcSwPMZsrQITHQLshnzfHq9xfC/kvaDvh5D/PP/kv9KgJFcz", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "authkey=!AEZ8dNZF_DfqlnA&cid=AB7FEE589CE19D1A&id=AB7FEE589CE19D1A!206&parId=root&o=OneUp", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "bKoXOTXmVnTSHElfwRpsGeJlHMCaUr17jUdR6UVEDhjjCbGyXlF+P2zMdhvDAk2RpTJ3Lq27Ql8mBh1vLoB2IA==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cid=23F7A49910CEA830&resid=23F7A49910CEA830!108&authkey=APp_0AMgcYTHkiE", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "export=download&id=1Aa90HlPP3Peij3fVX56bOeaZ10TSIzqo", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=0vD4jpiY3deCcY0OwbFmhey9rD8Vh9YuYQpRsICOSpwp1ER6e1n/DMh3TjdSwTzh", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=1Er7NGY88Nb7mUXTZ1f8VDGJp5FkPH9k/0ixGW2JABL16VzSc0/b4IVa8kFIdTct", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=1NsfPuS1rWLbI6NiDUBc+TpqYaoxw/P0Z/ry/vioQYEutltCUIKyk+p7JrWnOtK1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=1d3N9pqbyZCObtTZrJvZdoLgOB4jMBO5QOuIm5zJuYbAGthAxqVrlLTy8ERez8fXBcouQJLMysm+1h+MwXOFRg==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=1qbg9gs5iLsG0BMJmCBAVWdmAbkV7WFDYPndK528Q7I=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=8QcVqo9qsA8i0DCHyIJAzopwgEyDtgw8cFZ63GW69QwTQIROdjsFMWv5hGshTZa5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=9O2QhbItJgAh5D56gSl/ORCHKqQT6HZ+jWT/mPTx95+xPJEbBEJ9Z4wcKY2tGpKB6XqTwFLoMaPsP4E9wpExpQ==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=F5OA9SbB6LdOXt/axZ4VfLt/3HjBrKNJ3IyvBORMaJuDSmwtWvlghhA7DvwXzfOo", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=FAuv55oPiugXahVAaCEvpj5ErxLEaHiS2bTxNZfsnL7qe1SN6wJGL5vFX1uz2eQZ", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=GOGOra29O2S544z1uOmOlwNjGrrHUvJqTUQVwhRwBLm/si/0cQocMasaOvaX6QKdpw9C7Z/Bei/gyNIpfP0I8Q==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=HbMRTVXX4F/x9XpbweiP2Q5PU1Vg/mRla5i5f9Fu9rrEOA9H5DoEW36HPSYzNgb2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=MxR6drWxPAMDe9azZC0CjnHrjswGtCFacgdJjrl9uq6C+IvGn09epXSv4D+r5NsH", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=RFugW2hRDrsB4cFyPNyeGuVPJ337AiQ+SDTntkAntUFwR1+PUgVBUBdaK5KDuwvm", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=RWuYrhMkw+WKbEkxNtnHL6kJYFlGyzBPcRvcGgRDRK/STqXEZ6WzTXblkoflfEv4OYSdisOf1zNgfZ0g5xF/IQ==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=RgBDgZa8BKnTfnZZw5k2JuhjvTjGRP8u3z1iyxDkvas=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=SU/Lq4PrAClX77gAVM5Y7Ig0dpt2x3q8F6E1ec9S2Squmm2uUtFnATuOiMjDrhFa", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=T8YJQTVktMp8W+j/W5EvDWglxOnw8evApd1RaERyZzz/Qzh2uXI/OIlDzMTGaoc57qLEkLRpQt5RK8enWJAvRA==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=VXc3MP/1tc0XJpRfClJtv/IGSp+dkxo/5qEzSS8H3PsllezWG0uU/d2DEwUojaXk6AJGDywf2St9JY6wO7EBvA==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=WYX5WWm/XKs9hteVzI39DH6jm+ZTtPfC5tqhWUOvcYZ/FLX/ztb5rzLMNvxjqZSXflnP7DFaVDp6VaWZDO0bCg==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=YsXzBOV9DorIHbBzXBE5ohD18q1BHkSWYZqshjLiCiSIqosGSpJNnigoJbtG8Y3cJniYpNTuNb/d0qaPiyZu1A==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=ZNHOzTrF7yBJhTVAw/yuK/D59CmekOhJ2qfPfA3we98ykmRIJcjhcbilgkORnWelVU8PB+3/H8dNSB8KA8yK5w==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=aQYcDCjPUhNbVq9K2NPdjV/Ye/25O2TsNoQ4DP8YfCY=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=ajN1C6YoQEyAOqGrS0RzoYYsLM5pOt/g/8aZNSy8eb3IeF1QfQvE2aola5hsMiud", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=bDcwmvvqVbwVpXZpJPreQhMp3NdpAWt2Vpt0KhYzuZoNOLC7lHOMkbmlhdLn5hpWVzr78IqpdUhOBZGoEigpUA==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=g9wcj8aUD1PKXXE1s2eKetAs5m+yhmimyFqRMUzQKESLaqGzW+U4HL0h7yX8r8cOJIKs5CD4teCKKK4rv1TyQg==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=grv8ADe/sX4KHHQu+tBvdbMjD3dcf1ImEM1O7uIrAGNVg953XzvzNwivPWMZqxzC", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=k0VHKzJsucrUSI1pu3fybjQUAhnVVIYaZS1kpS2Z/lMEsOa5urMiB+5x/eODkXUq", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=lOepqccc76IU+/kg2arDq7LXBc6yU1oLRVyGsbumwa17WKa24BTWDfQjHmpN2zkiADURafNfh67USCBqxWsi/Q==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=mhy/ZcRTX5Z325ue9h9UgAZBd5Xq4UZZZHRRDcxj8PKw4x5MlWrw8fozU5CSGuUp", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=oTzIg9Tbb+C4SYq69SgVE605a2XB9JUv3hUdwa6iWmk=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=p/YToYwafP2JN9/2LSQnzrRKOtTmS/z8ij0K1kad6RSBVWXUGmGZnJ6HlseuOLYjSioYlQ3CVZZRt8CI6sMeEA==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=s0PDwzaKKhX2B/cU33XUwjruSs8UeYo805t5zkTMhgM=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=wPlh585fhyduhrGWZdeHdTEi3CL4N3kQNi2E9tFA6k0=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=zgN4ESE5AV//MQY/PgrwCSYY0kQ/WSkzaIsqW5/XiTjo5FuproDvhUYx0FeapSlw8P4XMlngaW51gToia8N0ig==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=21690075&pwd=yBaBb3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=22376519&pwd=4UJ0Rj", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=29268281&pwd=s8QXBx/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=29268281&pwd=s8qxbx", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=29268281&pwd=s8qxbx/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=31803193&pwd=27Ev7j/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=36760863&pwd=RP78sJ", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=37384791&pwd=9LdkUv", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=45981425&pwd=kvFuU1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=48753029&pwd=SKxjzg", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=50202229&pwd=ZV83E4/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=53171646&pwd=bT1bDB", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=53173711&pwd=oVE08A", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=53187915&pwd=7ctE5G", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=56868631&pwd=ZP6QHe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=57114378&pwd=4i6azd", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=63055058&pwd=6DTz6v", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=65185420&pwd=r47BVC", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=65841045&pwd=c9KNkT", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=74012868&pwd=932662", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=74955463&pwd=udepYs", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=81751534&pwd=Y2XUm8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=82261705&pwd=Plefz7", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=86822996&pwd=lJ03Re", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=94943168&pwd=qQFGWf", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=94947168&pwd=eWZVTS", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=98344416&pwd=db2bil", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=98966589&pwd=370906", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "name=Q0o=&mn=38422054&pwd=Qm3grh&lang=en-US&signature=zuuU16Rmvu83Cs8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "name=Z2dnZw==&mn=37384791&pwd=9LdkUv&lang=en-US&signature=zuuU16Rmvu83Cs8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "o=0&t=docpasswd&m=0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "sz3hrCby7a+4JWfJycInyRkLKaL9bvTQpEx5g7W8H9uCpyoSzMqOX69ftgf/t3rz8w2EdfMa00eV/nGSUfee/w==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "topic=en&sess=1599a0b815d0a082", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "topic=pt&session=12632059", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cid=2ABB0C9C79FEF47E&resid=2ABB0C9C79FEF47E!105&authkey=AFNQKY2EH4uBE_M", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "id=1ZpretgDk8oqadTgh4MTbaPHoss7l7VF_", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "id=1w0sZFyW4lW_FxEyIMzErnNp4Q9t3nlr6&export=download", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "id=7/HdL7dMbjiSRVyNnD6Sy333EpN8k94hiYqla127FCQ7IdVMXp5nvXGxeeB/Zc3AD3k14iK1osA38Hwtp5LPbA==", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "id=88txt4LaPIu4PQFhnhCznWpAe+dTxFCqKl6tvAbJPS74ULO4o8ewA2cxjy1RxIO53D2zeBrd5fbHZ6eIymlONQ==", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "id=kdJhKivsVHJq01OH+hCwaAZAcpkq7Ri5BLKcTswrEgA=", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "t=report&o=1", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "id=1xflBpAVQrwIS3UQqynb8iEj6gaCIXczo", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "ccop=RoPbnVqYd", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "ccop=ropbnvqyd", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "usp=sharing", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - } - ], - "query_param_keys": [ - { - "value": "mn", - "count": 53, - "total_related": 47967, - "prevalence": 0.0011049263035003232 - }, - { - "value": "ccop", - "count": 3, - "total_related": 29, - "prevalence": 0.10344827586206896 - }, - { - "value": "y5gCOULlzB", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "yRIbDNd6JxuD", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "3zralwychvhorma", - "count": 1, - "total_related": 0, - "prevalence": -1 - }, - { - "value": "pwd", - "count": 53, - "total_related": 100000, - "prevalence": 0.00053 - }, - { - "value": "id", - "count": 6, - "total_related": 100000, - "prevalence": 6e-5 - }, - { - "value": "export", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "lang", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "name", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "session", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "signature", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "topic", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "isbn", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "o", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "t", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "query_param_values": [ - { - "value": "CUw0Vm", - "count": 5, - "total_related": 5, - "prevalence": 1.0 - }, - { - "value": "29268281", - "count": 5, - "total_related": 7, - "prevalence": 0.7142857142857143 - }, - { - "value": "54502115", - "count": 5, - "total_related": 7, - "prevalence": 0.7142857142857143 - }, - { - "value": "83667790", - "count": 4, - "total_related": 5, - "prevalence": 0.8 - }, - { - "value": "98344416", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "31803193", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "50202229", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "16vtG8", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "16vtG8js", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "27Ev7j", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "37384791", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "44424970", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "9LdkUv", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "DB2BiL", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "ZV83E4", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "g1pKtJ", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "s8QXBx", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "zb5mKU", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "zuuU16Rmvu83Cs8", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "41058179", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "61282951", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "RoPbnVqYd", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "151643", - "count": 2, - "total_related": 38, - "prevalence": 0.05263157894736842 - }, - { - "value": "1NsfPuS1rWLbI6NiDUBc TpqYaoxw/P0Z/ry/vioQYEutltCUIKyk p7JrWnOtK1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1qbg9gs5iLsG0BMJmCBAVWdmAbkV7WFDYPndK528Q7I=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "27Ev7j/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "36760863", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "38422054", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "45981425", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4UJ0Rj", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4i6azd", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "53173711", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "53187915", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "56868631", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "57114378", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "63055058", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "65185420", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "6DTz6v", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "74012868", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "7ctE5G", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "81751534", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "82261705", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "86822996", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "932662", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "94943168", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "98966589", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Plefz7", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Q0o=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Qm3grh", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "RP78sJ", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "SKxjzg", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "SU/Lq4PrAClX77gAVM5Y7Ig0dpt2x3q8F6E1ec9S2Squmm2uUtFnATuOiMjDrhFa", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Y2XUm8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Z2dnZw==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "ZP6QHe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "ZV83E4/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "bT1bDB", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "c9KNkT", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "db2bil", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "eWZVTS", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "kvFuU1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "lJ03Re", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "oVE08A", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "qQFGWf", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "r47BVC", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "s8QXBx/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "s8qxbx", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "s8qxbx/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "udepYs", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "yBaBb3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "12816664", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "1Aa90HlPP3Peij3fVX56bOeaZ10TSIzqo", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "1w0sZFyW4lW_FxEyIMzErnNp4Q9t3nlr6", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "22376519", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "48753029", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "53171646", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "6842209/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "74955463", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "94947168", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "1xflBpAVQrwIS3UQqynb8iEj6gaCIXczo", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "21690075", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "440060862", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "65841045", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "ropbnvqyd", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "v367", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "370906", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "report", - "count": 1, - "total_related": 9858, - "prevalence": 0.00010144045445323595 - }, - { - "value": "download", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "en-US", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "1", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - }, - { - "value": "pt", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ], - "query_param_key_values": [ - { - "value": "mn=29268281", - "count": 5, - "total_related": 5, - "prevalence": 1.0 - }, - { - "value": "pwd=CUw0Vm", - "count": 5, - "total_related": 5, - "prevalence": 1.0 - }, - { - "value": "mn=54502115", - "count": 5, - "total_related": 7, - "prevalence": 0.7142857142857143 - }, - { - "value": "mn=83667790", - "count": 4, - "total_related": 5, - "prevalence": 0.8 - }, - { - "value": "mn=98344416", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "mn=31803193", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "mn=50202229", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "mn=37384791", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "mn=44424970", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "pwd=151643", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "pwd=16vtG8", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "pwd=16vtG8js", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "pwd=27Ev7j", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "pwd=9LdkUv", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "pwd=DB2BiL", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "pwd=ZV83E4", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "pwd=g1pKtJ", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "pwd=s8QXBx", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "pwd=zb5mKU", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "signature=zuuU16Rmvu83Cs8", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "ccop=RoPbnVqYd", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "mn=41058179", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "mn=61282951", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "lang=en-US", - "count": 2, - "total_related": 63880, - "prevalence": 3.1308703819661866e-5 - }, - { - "value": "id=1NsfPuS1rWLbI6NiDUBc TpqYaoxw/P0Z/ry/vioQYEutltCUIKyk p7JrWnOtK1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=1qbg9gs5iLsG0BMJmCBAVWdmAbkV7WFDYPndK528Q7I=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=SU/Lq4PrAClX77gAVM5Y7Ig0dpt2x3q8F6E1ec9S2Squmm2uUtFnATuOiMjDrhFa", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=36760863", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=38422054", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=45981425", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=53173711", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=53187915", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=56868631", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=57114378", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=63055058", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=65185420", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=74012868", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=81751534", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=82261705", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=86822996", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=94943168", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=98966589", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "name=Q0o=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "name=Z2dnZw==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=27Ev7j/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=370906", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=4UJ0Rj", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=4i6azd", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=6DTz6v", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=7ctE5G", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=932662", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=Plefz7", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=Qm3grh", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=RP78sJ", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=SKxjzg", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=Y2XUm8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=ZP6QHe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=ZV83E4/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=bT1bDB", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=c9KNkT", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=db2bil", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=eWZVTS", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=kvFuU1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=lJ03Re", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=oVE08A", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=qQFGWf", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=r47BVC", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=s8QXBx/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=s8qxbx", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=s8qxbx/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=udepYs", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=yBaBb3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "session=12816664", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "topic=pt", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "y5gCOULlzB=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "yRIbDNd6JxuD=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=1Aa90HlPP3Peij3fVX56bOeaZ10TSIzqo", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "id=1w0sZFyW4lW_FxEyIMzErnNp4Q9t3nlr6", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "isbn=6842209/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "mn=22376519", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "mn=48753029", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "mn=53171646", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "mn=74955463", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "mn=94947168", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "ccop=ropbnvqyd", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "id=1xflBpAVQrwIS3UQqynb8iEj6gaCIXczo", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "mn=21690075", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "mn=65841045", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "session=440060862", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "topic=v367", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "t=report", - "count": 1, - "total_related": 19, - "prevalence": 0.05263157894736842 - }, - { - "value": "o=1", - "count": 1, - "total_related": 25751, - "prevalence": 3.883344336142286e-5 - }, - { - "value": "3zralwychvhorma=", - "count": 1, - "total_related": 0, - "prevalence": -1 - }, - { - "value": "export=download", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - } - ], - "referring_files": [ - { - "value": "798e44c69a12b6e68438fc80d2807d1e4c233dfb1a704719e6d3c9cd06ab02aa", - "count": 16, - "total_related": 74, - "prevalence": 0.21621621621621623 - }, - { - "value": "15805abf9baf84ae5fa992023399bc551411571221f6fed6a5bf97776c7ce7ba", - "count": 9, - "total_related": 500, - "prevalence": 0.018 - }, - { - "value": "054119eb62c1b5d97abb1d7dd1c9f8b36b2dcf745c3edcab75f22a47b01b5500", - "count": 7, - "total_related": 8, - "prevalence": 0.875 - }, - { - "value": "2ed034a4a9b270c4e5ff3b6f82f7e0191f0f419e9821a1e96ec4c52f938e9697", - "count": 7, - "total_related": 9, - "prevalence": 0.7777777777777778 - }, - { - "value": "e955ac082e75acbb149a321f055b2e6a5fc46b58d45d8c143a3c3c412589b338", - "count": 7, - "total_related": 482, - "prevalence": 0.014522821576763486 - }, - { - "value": "9c6dce8f3be24a750cda3919388fbf3e8f44edc6d31a9ec9da5096769f24b5c7", - "count": 7, - "total_related": 508, - "prevalence": 0.013779527559055118 - }, - { - "value": "d93498c5fcc83b312037957ac0ee50f6fbd4b9751c7e97a9e26956d136d4064a", - "count": 6, - "total_related": 499, - "prevalence": 0.012024048096192385 - }, - { - "value": "7fcc4d3a7f72dbdef1d7f3c4a77639c67daeb6da017c2285a28e2a56a12ff13f", - "count": 5, - "total_related": 53, - "prevalence": 0.09433962264150944 - }, - { - "value": "cebfc64e6486b6a956fb6a9330c5196536ae03aae8ddaba98ab02309b59419b0", - "count": 5, - "total_related": 500, - "prevalence": 0.01 - }, - { - "value": "7381b290ae90e2bb22c471cbd7eabfc59af9793e40d993ed885c53c8bc90da36", - "count": 5, - "total_related": 928, - "prevalence": 0.005387931034482759 - }, - { - "value": "d30dbbb14ae431c8a527bd2c9116cb624d4f99c3c3a437e934ef303df12ddc5f", - "count": 4, - "total_related": 10, - "prevalence": 0.4 - }, - { - "value": "f4d1a671dff700041255c7242d3abb8376ca9bc94ca44daadda35c5c924eb50e", - "count": 4, - "total_related": 10, - "prevalence": 0.4 - }, - { - "value": "136a00876998247b31b8bac4775db0d360862966a2d0e3140bec680886a7f406", - "count": 4, - "total_related": 218, - "prevalence": 0.01834862385321101 - }, - { - "value": "88b666a6b4e4257e955b231599f6e6ce8f878ee798e9333ba34c7796ec0bf0e9", - "count": 4, - "total_related": 962, - "prevalence": 0.004158004158004158 - }, - { - "value": "c7d5c10511e0617218d4c489353b6abdba32878fc07cda386e261de776000d26", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "f4c9bfbda08d3ee00ca1f47aaf6a3308d90ddc873186dc5892071277a941fe7e", - "count": 3, - "total_related": 44, - "prevalence": 0.06818181818181818 - }, - { - "value": "f8c297f0d05e138838ad924df9f9a3ee3ceac60cc309ba215bf89ab8d003902c", - "count": 3, - "total_related": 46, - "prevalence": 0.06521739130434782 - }, - { - "value": "b13e1b3c4fe165fc230d7b8f30b19393a0c70a2415e73aa5b4be13eab8de162f", - "count": 3, - "total_related": 47, - "prevalence": 0.06382978723404255 - }, - { - "value": "239dc96833e6e46da10efa87f3623049f84a6f8ca2dd3ccb814dabfa03c71e73", - "count": 3, - "total_related": 181, - "prevalence": 0.016574585635359115 - }, - { - "value": "fb9fb3f4753ace0ab6c19a0f2c6d9cfade7a057e6ffdd7ccc213257bfeee43d0", - "count": 3, - "total_related": 181, - "prevalence": 0.016574585635359115 - }, - { - "value": "c8ae9fd4d86a21a0b1b88a4c7ad5110291ef8c534f4c993d6cc186bc22a96945", - "count": 3, - "total_related": 200, - "prevalence": 0.015 - }, - { - "value": "726ea6910cf9b5585dcb92315c25c6397be35550a72968f01e61d35c1ceaa742", - "count": 3, - "total_related": 201, - "prevalence": 0.014925373134328358 - }, - { - "value": "5425f95fbc4ee74e847a5e28b3173eac0338745aea1ff314ce5bbf1b47c844b0", - "count": 3, - "total_related": 246, - "prevalence": 0.012195121951219513 - }, - { - "value": "5a3c3811d7d862b5ef74e4595b3124f9dcf4319bc4282b003f4fd5b3a8c6184e", - "count": 3, - "total_related": 411, - "prevalence": 0.0072992700729927005 - }, - { - "value": "67e6845740f395f5cfec3eeb7adf19c8994569d37cb2ca57f1309181330c8375", - "count": 3, - "total_related": 420, - "prevalence": 0.007142857142857143 - }, - { - "value": "c228ae080243cb155d4638ef6e1c5eae93c4dbb20023baf56c366197e4637fef", - "count": 3, - "total_related": 442, - "prevalence": 0.006787330316742082 - }, - { - "value": "5ab68ee0787166c6fa65c3fdf10b836a7ea90125e6c204a5d1d3ca87cebc6472", - "count": 3, - "total_related": 500, - "prevalence": 0.006 - }, - { - "value": "c5f5d25eb49ab54ce0d107587ee7a00dae4bb68ef16510212b3ecb9cb3b9c012", - "count": 3, - "total_related": 500, - "prevalence": 0.006 - }, - { - "value": "c8b45f3341c7bbf57888f58fb57ddcfc4571d62e3ae9f1d5f11fd46c7f2f1633", - "count": 3, - "total_related": 500, - "prevalence": 0.006 - }, - { - "value": "976d037faed24f688e7a7b2f37e18dea68911a8b02603568e60469db8273f7b4", - "count": 3, - "total_related": 757, - "prevalence": 0.003963011889035667 - }, - { - "value": "bd0c45a12b9b54a4a3f1f193db4761f00fea0a518144bd9566f516b5aa59d6e0", - "count": 3, - "total_related": 892, - "prevalence": 0.0033632286995515697 - }, - { - "value": "5908edc07ec67ddb6d0a284fcae8d368cd9170f48760ec1a4d53db95692114c3", - "count": 3, - "total_related": 948, - "prevalence": 0.0031645569620253164 - }, - { - "value": "248867e775fda3c6c03c1daeb0e10d2ce5956cb1c164bbd980ff98fe2f97e38c", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "4ca60ce4f3b6f92b970479793c9fe901cbd619ea3f3703e474eb35fa826a74ea", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "aa4174025a41766c9c0d8584983486940b9ac05c2f85dddfce918b8adcfb81df", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "c2a4bc40c214a830131ee94db21502f025f76274252aaf48c73fd31329ce929b", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "f0cf1829a93751d2f7e812545af079a4efebd755f1ee50a8d4537770f692eaaf", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "28b062dde7b8f82f1a2d0bc57e69683acc9f8802673f670360a5da7399d0ba15", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "5524607453f833ec4fbb1cba5a475ff5e5752fb16034abdc61f1d9c12cf9f891", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "ee5bd63c1eae48c294fe7cd9a6f265b28f4672d653be9711781c45830272c434", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "1f1851ea45175dfd9490310acd822fa980c2d766aa5701e7a44231d686b3bf3f", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "3bba19db251e48fc9282b9dc02670b2a69fcba669b34207b9d1df050e986c4ec", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "3c60ed5292a231aa1010565f3aa1f2ae32d43eed677a064000db388c52badaa2", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "a54d1c7920c0bcc4784754faca92d26ebace15728a59b0b765b356f4aa96e0b2", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "d71fd7c552a08b2524fe4e8cd7586f1e3566c7a7719e461d6a25625479489c51", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "f79518691bc02d59d2461e24fc13bdf88ccb3c62fca33a5ac3fc3acf0a67529a", - "count": 2, - "total_related": 12, - "prevalence": 0.16666666666666666 - }, - { - "value": "3b46fa5252ca042150ac9b6f2bd44ae764cd797780d03377b9163cf62e6ed99a", - "count": 2, - "total_related": 33, - "prevalence": 0.06060606060606061 - }, - { - "value": "9e5786c32d64143abbf4cf107b5f04448686cb7e5c575d3475b676c1e0e3b6c3", - "count": 2, - "total_related": 33, - "prevalence": 0.06060606060606061 - }, - { - "value": "d7a88f762037c4ea6a84c9f6b00a34676cb832f4bd20466e7768179428eec6ac", - "count": 2, - "total_related": 169, - "prevalence": 0.011834319526627219 - }, - { - "value": "7b8fb01d086b8149bd7cdcc9a296411985e2b6a79dd3bb45c6eecc7e1e5b2af8", - "count": 2, - "total_related": 210, - "prevalence": 0.009523809523809525 - }, - { - "value": "f96db20bef7c8a4bae9c314d651880436925f6fdc529739ba04e0c1f2c974ced", - "count": 2, - "total_related": 225, - "prevalence": 0.008888888888888889 - }, - { - "value": "9a77248363c0478beb38b739f13227b20f433b1113a494be44449e6035c29788", - "count": 2, - "total_related": 318, - "prevalence": 0.006289308176100629 - }, - { - "value": "5e21bc9346fe5bd9cfc24ca3d6d6564b2dc860e3b6d99f8d139805af824ba434", - "count": 2, - "total_related": 437, - "prevalence": 0.004576659038901602 - }, - { - "value": "71e8544720febd36c191cd24dbd431bdac3a7f6e392f5c30e92de8e7ed19f364", - "count": 2, - "total_related": 500, - "prevalence": 0.004 - }, - { - "value": "7b0dee02a4d6d0541e71cd681641155a07400e03ed10d3236aba6fbf0eb99369", - "count": 2, - "total_related": 500, - "prevalence": 0.004 - }, - { - "value": "b1e32db1c7bfa46e9c767d0439aead0ef2aa51dd966607619dcef051baf7e5a0", - "count": 2, - "total_related": 500, - "prevalence": 0.004 - }, - { - "value": "715b347bdeaab7c6cdd79d2368cadb3a820812a5431f149056992f20a1563722", - "count": 2, - "total_related": 629, - "prevalence": 0.003179650238473768 - }, - { - "value": "fdaf0dcf9cb5fd9186c61038b278c6d3b21ae00bb0ad82ebd4780efbc1647d4a", - "count": 2, - "total_related": 630, - "prevalence": 0.0031746031746031746 - }, - { - "value": "94d39e1c14713fab663e870d35065a739389a169bd0340fa21d992a9f7544a3a", - "count": 2, - "total_related": 667, - "prevalence": 0.0029985007496251873 - }, - { - "value": "5b47c9058c6ff767e55976b19167e196c57b729e7223cdaf59fa5fe0b608ebd7", - "count": 2, - "total_related": 712, - "prevalence": 0.0028089887640449437 - }, - { - "value": "8997fcf9595e1262a19da73cd191b0e0b1551f479761ce951e74aff335693b5a", - "count": 2, - "total_related": 725, - "prevalence": 0.002758620689655172 - }, - { - "value": "698d31eddf608f71d52615d9f0885e983490b444d7a068f39fb0c51c112e8cc3", - "count": 2, - "total_related": 735, - "prevalence": 0.0027210884353741495 - }, - { - "value": "57cc099c34bcdaad0d2c825efa551d065b8c471a864ecce4c88aeeab715b74b9", - "count": 2, - "total_related": 815, - "prevalence": 0.00245398773006135 - }, - { - "value": "f266fec702b13c771f0e5d6424f449696499809896d9cf8bd1288b0f6ea7e836", - "count": 2, - "total_related": 910, - "prevalence": 0.002197802197802198 - }, - { - "value": "40b881b2fc0e9915318df4d7bece32bf3d4d75d5146a851a9408f2345e37ecfd", - "count": 2, - "total_related": 937, - "prevalence": 0.0021344717182497333 - }, - { - "value": "d38240630a1d549edef1a293fbd8c8d7847e12f2277b45d97d1c807bb1253971", - "count": 2, - "total_related": 956, - "prevalence": 0.0020920502092050207 - }, - { - "value": "5d9fd2b01527115cc5d1446f6ff08c27983227ee74270f58bd6f0345a56cac38", - "count": 2, - "total_related": 961, - "prevalence": 0.002081165452653486 - }, - { - "value": "1e8208f1b20eca9bea74d1f62539c9cd7baf92bb00262496e2d7e0a04eb85abc", - "count": 2, - "total_related": 977, - "prevalence": 0.0020470829068577278 - }, - { - "value": "d69c9488bc9a8bd7e7c1477f7abea754b5080b30f620c7436ffc50e2eb0b1098", - "count": 2, - "total_related": 980, - "prevalence": 0.0020408163265306124 - }, - { - "value": "f48b856b1150f397a552d61b75389a2f23e25e783036f8aedc63159ec61e4889", - "count": 2, - "total_related": 980, - "prevalence": 0.0020408163265306124 - }, - { - "value": "01184a5acb8b3ec56c9e90f2e6cd6673ae83b4fd6982e17329b33da2f77bcf5b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0317dfdf3208ef138b42e5764ad88223531c4f8bf8f62c3bb1de93e268fab315", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "03cd4ec3defa490e68b1ca2efaf8daea6f89d3cceed51c91f4c4f9e2222d258d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "070be2bfc60d1616afb196d523f1540d5fb62867d379f6e87b6f65bc38455c5a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "07df3733b75e6e23d2217a6548ed66654793b20a0674b22187e558c3284c0055", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0937cbb980cb898eacd8458366fc4de3510266b8fbcd68010aa04e58bf72df28", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0b8d7a851920d4584777505f9fb484b226a8457d4049885a87c847f7d3532d28", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0e33fea89bd64f027d4f0699438e3965f1afe811182ce9729a82dd9ea8efd77e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0edf580aa26d452ed435a68ebcbdfd69a84b0a5e4f272ef9930b0388fbffcd91", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0f86c16bd39b24f63430c734f53753571b774df71926d5154274042b020d2506", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "02d97b6501ca257e0867b5a271bac707ea79de2010e7f671b84286e3e5affbff", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "045959bcc47fc8c3d4fdfe4e065bfbc18cf7c3101d2fafbea0c9160e7e0805bc", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "0b39e47dbfa9f6a71a101fe8065ceafb9f897fc4944e6c27e873906e5614fa36", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "0d79b66f41858a336a385a7f6cc9e4e2fa06097b0ec422ce2d18bc6eabe5afee", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "0191e33a2e6286297928c375b6d4246084874b0c977cc9930d9984b28483db2f", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "076fdd6e332deef9b8f0f808d0efbea121276b8ea3c05bf669cfa0302b3e4288", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "05fd254df41265e931ce4c35c1def5ccc42c8b9de0070bdde5ebaa90c3727f15", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "10056ba4bd97e7f1e3a5ab742addac29597a6ecd40289e720985fca9e1435697", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "0ee7a04038522515ca3986884711c238003e3f0f535c2ac8ccecbf00a51860df", - "count": 1, - "total_related": 235, - "prevalence": 0.00425531914893617 - }, - { - "value": "10bbb27cb2e322c5be9f7a9d23a3f13bfd2bb22333eb4b84e77d20832cdefbbb", - "count": 1, - "total_related": 246, - "prevalence": 0.0040650406504065045 - }, - { - "value": "0d39fef4039cf5a7b62543c982059e35823fb9f5dccf3d8ec549f40397f91856", - "count": 1, - "total_related": 283, - "prevalence": 0.0035335689045936395 - }, - { - "value": "06fcc80ba5032e01fe108e7ac67d339703fc5094fb6e13edfbb3ed524668841e", - "count": 1, - "total_related": 308, - "prevalence": 0.003246753246753247 - }, - { - "value": "00af8bbca66c6e79fa21a7a32736687f999f43c97aa7af7b825d4243b45e0894", - "count": 1, - "total_related": 500, - "prevalence": 0.002 - }, - { - "value": "014d6097ff0e63a56cb80ee57155b8d1fe3a13d98c29d94a11ac63fccaf40491", - "count": 1, - "total_related": 500, - "prevalence": 0.002 - }, - { - "value": "05e59c69597b09d1a5e54a82116c2fd6ce391ba20d17a7f2d9057e4f723b19cc", - "count": 1, - "total_related": 500, - "prevalence": 0.002 - }, - { - "value": "063aa0ed77438cec90b86deb1be2b348dc54118489ef0613978ff7a2dd90e107", - "count": 1, - "total_related": 500, - "prevalence": 0.002 - }, - { - "value": "10139932aec057ddb95aa670bbdac0550367279fe10180218a49d32220345d68", - "count": 1, - "total_related": 500, - "prevalence": 0.002 - }, - { - "value": "044685b4ab7d6662478a46d8f991da88a69bb8b73c66ce12e48a4570c3a5050f", - "count": 1, - "total_related": 751, - "prevalence": 0.0013315579227696406 - }, - { - "value": "0fbc1e37240994205af36c3ff1a20b7ba544cebd87d6a4b34d35e37d69a82559", - "count": 1, - "total_related": 776, - "prevalence": 0.001288659793814433 - }, - { - "value": "08620012677487dcacadeb4c54b31b3c82d59b4395b1f813e105ac447ef4650a", - "count": 1, - "total_related": 838, - "prevalence": 0.0011933174224343676 - } - ], - "tags": [ - { - "value": "external-resources", - "count": 241 - }, - { - "value": "multiple-redirects", - "count": 75 - }, - { - "value": "iframes", - "count": 26 - }, - { - "value": "ip", - "count": 26 - }, - { - "value": "dom-modification", - "count": 19 - }, - { - "value": "ns-port", - "count": 12 - }, - { - "value": "parked-domain", - "count": 10 - }, - { - "value": "trackers", - "count": 10 - }, - { - "value": "downloads-zip", - "count": 8 - }, - { - "value": "third-party-cookies", - "count": 4 - }, - { - "value": "blocked-waf", - "count": 1 - }, - { - "value": "downloads-pdf", - "count": 1 - } - ], - "tracker_ids": [ - { - "value": "UA-25224921-3", - "count": 22, - "total_related": 34926, - "prevalence": 0.0006299032239592281 - }, - { - "value": "GTM-WHPDQJT", - "count": 4, - "total_related": 3667, - "prevalence": 0.00109080992637033 - }, - { - "value": "G-L43H196XDL", - "count": 2, - "total_related": 3089, - "prevalence": 0.0006474587245063128 - }, - { - "value": "G-PZ7W4HK7M7", - "count": 2, - "total_related": 3096, - "prevalence": 0.0006459948320413437 - }, - { - "value": "G-BY8HZSMY2R", - "count": 2, - "total_related": 20632, - "prevalence": 9.693679720822024e-5 - }, - { - "value": "GTM-MLXKCD66", - "count": 2, - "total_related": 21279, - "prevalence": 9.398937920015038e-5 - }, - { - "value": "UA-44696868-6", - "count": 2, - "total_related": 98688, - "prevalence": 2.0265888456549934e-5 - }, - { - "value": "G-7VFQZCGQGW", - "count": 1, - "total_related": 120, - "prevalence": 0.008333333333333333 - }, - { - "value": "UA-59154711-35", - "count": 9, - "total_related": 100000, - "prevalence": 9e-5 - }, - { - "value": "d1ayxb9ooonjts", - "count": 4, - "total_related": 100000, - "prevalence": 4e-5 - }, - { - "value": "GTM-5WKFT9", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "GTM-NQ7ZDFF6", - "count": 2, - "total_related": 100000, - "prevalence": 2e-5 - }, - { - "value": "d38psrni17bvxu", - "count": 1, - "total_related": 100000, - "prevalence": 1e-5 - } - ] - } - }, + "aggregations": {}, "alt_names_details": [ { "confidence": "confirmed", "description": null, "first_seen": null, "last_seen": null, - "value": "BlueNoroff (Kasperky)" + "value": "LoremNoroff (Kasperky)" }, { "confidence": "confirmed", "description": null, "first_seen": null, "last_seen": null, - "value": "CryptoCore (ClearSky)" + "value": "DolorCore (ClearSky)" }, { "confidence": "confirmed", "description": null, "first_seen": null, "last_seen": null, - "value": "CryptoCore (PwC)" + "value": "DolorCore (PwC)" }, { "confidence": "confirmed", "description": null, "first_seen": null, "last_seen": null, - "value": "Dangerouspassword (JPCERT)" + "value": "Ipsumpassword (JPCERT)" }, { "confidence": "possible", "description": null, "first_seen": null, "last_seen": null, - "value": "Jade Sleet (Microsoft)" + "value": "Amet Sleet (Microsoft)" }, { "confidence": "confirmed", "description": null, "first_seen": null, "last_seen": null, - "value": "Lazarus (F-Secure)" + "value": "Consectetur (F-Secure)" }, { "confidence": "confirmed", "description": null, "first_seen": null, "last_seen": null, - "value": "Lazarus (Group-IB)" + "value": "Consectetur (Group-IB)" }, { "confidence": "suspected", "description": null, "first_seen": null, "last_seen": null, - "value": "Lazarus (Kaspersky)" + "value": "Consectetur (Kaspersky)" }, { "confidence": "suspected", "description": null, "first_seen": null, "last_seen": null, - "value": "Lazarus (Lexfo)" + "value": "Consectetur (Lexfo)" }, { "confidence": "confirmed", "description": null, "first_seen": null, "last_seen": null, - "value": "Lazarus (Qianxin)" + "value": "Consectetur (Qianxin)" }, { "confidence": "suspected", "description": null, "first_seen": null, "last_seen": null, - "value": "Lazarus (Qihoo)" + "value": "Consectetur (Qihoo)" }, { "confidence": "confirmed", "description": null, "first_seen": null, "last_seen": null, - "value": "Ref9135 (Elastic)" + "value": "Ref8246 (Elastic)" }, { "confidence": "possible", "description": null, "first_seen": null, "last_seen": null, - "value": "Slowpisces (Palo Alto Networks)" + "value": "Adipiscing (Palo Alto Networks)" }, { "confidence": "confirmed", "description": null, "first_seen": null, "last_seen": null, - "value": "TA444 (Proofpoint)" + "value": "TA555 (Proofpoint)" }, { "confidence": "confirmed", "description": null, "first_seen": null, "last_seen": null, - "value": "Tag-71 (Recorded Future)" + "value": "Tag-82 (Recorded Future)" }, { "confidence": "possible", "description": null, "first_seen": null, "last_seen": null, - "value": "TraderTraitor (CISA)" + "value": "SitAmet (CISA)" } ], "first_seen_details": [ @@ -35677,7 +165,7 @@ "description": null, "first_seen": null, "last_seen": null, - "value": "2018-04-13T09:00:12Z" + "value": "2019-05-14T10:01:13Z" } ], "last_seen_details": [ @@ -35686,51 +174,51 @@ "description": null, "first_seen": null, "last_seen": null, - "value": "2025-03-17T10:45:46Z" + "value": "2026-02-18T11:46:47Z" } ], "merged_actors": [ { "confidence": "confirmed", - "description": "threat-actor--51094022-7ae3-5243-9668-eaf96c61a51c", - "first_seen": 1684251627, - "last_seen": 1684251627, - "value": "UNC2555" + "description": "threat-actor--62105133-8bf4-6354-a779-fbe07d72b62d", + "first_seen": 1685360738, + "last_seen": 1685360738, + "value": "UNC3666" }, { "confidence": "confirmed", - "description": "threat-actor--935350d8-6733-5663-9325-efce2cfebab4", - "first_seen": 1699883871, - "last_seen": 1699883871, - "value": "UNC4925" + "description": "threat-actor--a46461e9-7844-6774-a436-ffdf3dfeccb5", + "first_seen": 1700992982, + "last_seen": 1700992982, + "value": "UNC6036" }, { "confidence": "confirmed", - "description": "threat-actor--a914ef61-a5c3-5c79-8ab8-b7644a851666", - "first_seen": 1683665883, - "last_seen": 1683665883, - "value": "UNC4714" + "description": "threat-actor--ba25ff72-b6d4-6d8a-9bc9-c8755bf962777", + "first_seen": 1684774994, + "last_seen": 1684774994, + "value": "UNC5825" }, { "confidence": "confirmed", - "description": "threat-actor--a08d519e-041a-5ca5-9238-16d6829141c4", - "first_seen": 1672933367, - "last_seen": 1672933367, - "value": "UNC4450" + "description": "threat-actor--b19e620f-152b-6db6-a349-27e7940252d5", + "first_seen": 1674042478, + "last_seen": 1674042478, + "value": "UNC5561" }, { "confidence": "confirmed", - "description": "threat-actor--ee45eb54-0cea-526d-8448-26822c04630d", - "first_seen": 1748874581, - "last_seen": 1748874581, - "value": "UNC6208" + "description": "threat-actor--ff56fc65-1dfb-637e-9559-37933d15741e", + "first_seen": 1749983692, + "last_seen": 1749983692, + "value": "UNC7319" }, { "confidence": "confirmed", - "description": "threat-actor--93a6ac02-c177-51aa-9748-850b268cd517", - "first_seen": 1727268564, - "last_seen": 1727268564, - "value": "UNC5562" + "description": "threat-actor--a4b7bd13-d288-62bb-a859-961c379de628", + "first_seen": 1728377675, + "last_seen": 1728377675, + "value": "UNC6673" } ], "motivations": [ @@ -35745,14 +233,14 @@ "source_regions_hierarchy": [ { "confidence": "confirmed", - "country": "Korea, Democratic People's Republic Of", - "country_iso2": "KP", + "country": "Belarus", + "country_iso2": "BY", "description": null, "first_seen": null, "last_seen": null, - "region": "Asia", + "region": "Europe", "source": null, - "sub_region": "Eastern Asia" + "sub_region": "Eastern Europe" } ], "tags_details": [], @@ -35760,19 +248,19 @@ { "confidence": "confirmed", "description": null, - "first_seen": 1686787200, + "first_seen": 1687896311, "industry": null, "industry_group": "Automotive", - "last_seen": 1686787200, + "last_seen": 1687896311, "source": null }, { "confidence": "confirmed", "description": null, - "first_seen": 1523610012, + "first_seen": 1524719123, "industry": null, "industry_group": "Financial Services", - "last_seen": 1741610897, + "last_seen": 1742720008, "source": null }, { @@ -35787,10 +275,10 @@ { "confidence": "confirmed", "description": null, - "first_seen": 1709104150, + "first_seen": 1710213261, "industry": null, "industry_group": "Hospitality", - "last_seen": 1709104150, + "last_seen": 1710213261, "source": null }, { @@ -35805,19 +293,19 @@ { "confidence": "confirmed", "description": null, - "first_seen": 1659724020, + "first_seen": 1660833131, "industry": null, "industry_group": "Manufacturing", - "last_seen": 1686787200, + "last_seen": 1687896311, "source": null }, { "confidence": "confirmed", "description": null, - "first_seen": 1659724020, + "first_seen": 1660833131, "industry": null, "industry_group": "Technology", - "last_seen": 1686787200, + "last_seen": 1687896311, "source": null }, { @@ -35832,175 +320,175 @@ { "confidence": "confirmed", "description": null, - "first_seen": 1686787200, + "first_seen": 1687896311, "industry": null, "industry_group": "Transportation", - "last_seen": 1709104150, + "last_seen": 1710213261, "source": null } ], "targeted_regions_hierarchy": [ { "confidence": "confirmed", - "country": "Austria", - "country_iso2": "AT", + "country": "Portugal", + "country_iso2": "PT", "description": null, - "first_seen": 1697209080, - "last_seen": 1697209080, + "first_seen": 1698318191, + "last_seen": 1698318191, "region": "Europe", "source": null, "sub_region": "Western Europe" }, { "confidence": "confirmed", - "country": "Bahrain", - "country_iso2": "BH", + "country": "Kuwait", + "country_iso2": "KW", "description": null, - "first_seen": 1692796620, - "last_seen": 1714376290, + "first_seen": 1693905731, + "last_seen": 1715485401, "region": "Asia", "source": null, "sub_region": "Western Asia" }, { "confidence": "confirmed", - "country": "Canada", - "country_iso2": "CA", + "country": "Mexico", + "country_iso2": "MX", "description": null, - "first_seen": 1622038181, - "last_seen": 1624737199, + "first_seen": 1623147292, + "last_seen": 1625846310, "region": "Americas", "source": null, - "sub_region": "Northern America" + "sub_region": "Central America" }, { "confidence": "confirmed", - "country": "France", - "country_iso2": "FR", + "country": "Netherlands", + "country_iso2": "NL", "description": null, - "first_seen": 1523610012, - "last_seen": 1525335016, + "first_seen": 1524719123, + "last_seen": 1526444127, "region": "Europe", "source": null, "sub_region": "Western Europe" }, { "confidence": "confirmed", - "country": "Hong Kong", - "country_iso2": "HK", + "country": "Taiwan", + "country_iso2": "TW", "description": null, - "first_seen": 1709104150, - "last_seen": 1709104150, + "first_seen": 1710213261, + "last_seen": 1710213261, "region": "Asia", "source": null, "sub_region": "Eastern Asia" }, { "confidence": "confirmed", - "country": "India", - "country_iso2": "IN", + "country": "Pakistan", + "country_iso2": "PK", "description": null, - "first_seen": 1646617380, - "last_seen": 1646617380, + "first_seen": 1647726491, + "last_seen": 1647726491, "region": "Asia", "source": null, "sub_region": "Southern Asia" }, { "confidence": "possible", - "country": "Indonesia", - "country_iso2": "ID", + "country": "Malaysia", + "country_iso2": "MY", "description": null, - "first_seen": 1725605336, - "last_seen": 1729589026, + "first_seen": 1726714447, + "last_seen": 1730698137, "region": "Asia", "source": null, "sub_region": "South-eastern Asia" }, { "confidence": "confirmed", - "country": "Japan", - "country_iso2": "JP", + "country": "Philippines", + "country_iso2": "PH", "description": null, - "first_seen": 1537147715, - "last_seen": 1537268904, + "first_seen": 1538256826, + "last_seen": 1538378015, "region": "Asia", "source": null, - "sub_region": "Eastern Asia" + "sub_region": "South-eastern Asia" }, { "confidence": "confirmed", - "country": "Norway", - "country_iso2": "NO", + "country": "Denmark", + "country_iso2": "DK", "description": null, - "first_seen": 1659724020, - "last_seen": 1663869977, + "first_seen": 1660833131, + "last_seen": 1664979088, "region": "Europe", "source": null, "sub_region": "Northern Europe" }, { "confidence": "possible", - "country": "Seychelles", - "country_iso2": "SC", + "country": "Maldives", + "country_iso2": "MV", "description": null, - "first_seen": 1677503260, - "last_seen": 1700677964, - "region": "Africa", + "first_seen": 1678612371, + "last_seen": 1701787075, + "region": "Asia", "source": null, - "sub_region": "Eastern Africa" + "sub_region": "Southern Asia" }, { "confidence": "possible", - "country": "Singapore", - "country_iso2": "SG", + "country": "Thailand", + "country_iso2": "TH", "description": null, - "first_seen": 1726790400, - "last_seen": 1729184917, + "first_seen": 1727899511, + "last_seen": 1730294028, "region": "Asia", "source": null, "sub_region": "South-eastern Asia" }, { "confidence": "confirmed", - "country": "Korea, Republic of", - "country_iso2": "KR", + "country": "Vietnam", + "country_iso2": "VN", "description": null, - "first_seen": 1686787200, - "last_seen": 1686787200, + "first_seen": 1687896311, + "last_seen": 1687896311, "region": "Asia", "source": null, - "sub_region": "Eastern Asia" + "sub_region": "South-eastern Asia" }, { "confidence": "possible", - "country": "Switzerland", - "country_iso2": "CH", + "country": "Sweden", + "country_iso2": "SE", "description": null, - "first_seen": 1738462756, - "last_seen": 1740417021, + "first_seen": 1739571867, + "last_seen": 1741526132, "region": "Europe", "source": null, - "sub_region": "Western Europe" + "sub_region": "Northern Europe" }, { "confidence": "possible", - "country": "United Arab Emirates", - "country_iso2": "AE", + "country": "Qatar", + "country_iso2": "QA", "description": null, - "first_seen": 1739887785, - "last_seen": 1740157475, + "first_seen": 1740996896, + "last_seen": 1741266586, "region": "Asia", "source": null, "sub_region": "Western Asia" }, { "confidence": "confirmed", - "country": "United Kingdom", - "country_iso2": "GB", + "country": "Ireland", + "country_iso2": "IE", "description": null, - "first_seen": 1537171476, - "last_seen": 1537171476, + "first_seen": 1538280587, + "last_seen": 1538280587, "region": "Europe", "source": null, "sub_region": "Northern Europe" @@ -36010,8 +498,8 @@ "country": "United States", "country_iso2": "US", "description": null, - "first_seen": 1604424060, - "last_seen": 1741610897, + "first_seen": 1605533171, + "last_seen": 1742720008, "region": "Americas", "source": null, "sub_region": "Northern America" diff --git a/external-import/google-ti-feeds/tests/custom/debug_responses/main_vulnerabilities_1a6f110bd333906d.json b/external-import/google-ti-feeds/tests/custom/debug_responses/main_vulnerabilities_1a6f110bd333906d.json index e5fb4ed1ab2..5fd62fde364 100644 --- a/external-import/google-ti-feeds/tests/custom/debug_responses/main_vulnerabilities_1a6f110bd333906d.json +++ b/external-import/google-ti-feeds/tests/custom/debug_responses/main_vulnerabilities_1a6f110bd333906d.json @@ -12,16 +12,16 @@ "response": { "data": [ { - "id": "vulnerability--cve-2021-26855", + "id": "vulnerability--cve-2022-13579", "type": "collection", "links": { - "self": "https://www.virustotal.com/api/v3/collections/vulnerability--cve-2021-26855" + "self": "https://www.virustotal.com/api/v3/collections/vulnerability--cve-2022-13579" }, "attributes": { "alt_names_details": [ { "first_seen": null, - "value": "ProxyLogon", + "value": "LoremRelay", "last_seen": null, "confidence": "possible", "description": null @@ -46,10 +46,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2016:cumulative_update_16:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2016:cumulative_update_16:*:*:*:*:*:*", "version": "2016 Cumulativeupdate16", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -57,10 +57,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2016:cumulative_update_11:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2016:cumulative_update_11:*:*:*:*:*:*", "version": "2016 Cumulativeupdate11", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -68,10 +68,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2013:cumulative_update_21:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2013:cumulative_update_21:*:*:*:*:*:*", "version": "2013 Cumulativeupdate21", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -79,10 +79,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2019:cumulative_update_3:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2019:cumulative_update_3:*:*:*:*:*:*", "version": "2019 Cumulativeupdate3", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -90,10 +90,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2016:cumulative_update_18:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2016:cumulative_update_18:*:*:*:*:*:*", "version": "2016 Cumulativeupdate18", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -101,10 +101,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2016:cumulative_update_19:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2016:cumulative_update_19:*:*:*:*:*:*", "version": "2016 Cumulativeupdate19", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -112,10 +112,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2019:cumulative_update_4:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2019:cumulative_update_4:*:*:*:*:*:*", "version": "2019 Cumulativeupdate4", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -123,10 +123,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2016:cumulative_update_9:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2016:cumulative_update_9:*:*:*:*:*:*", "version": "2016 Cumulativeupdate9", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -134,10 +134,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2019:cumulative_update_7:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2019:cumulative_update_7:*:*:*:*:*:*", "version": "2019 Cumulativeupdate7", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -145,10 +145,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2019:cumulative_update_2:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2019:cumulative_update_2:*:*:*:*:*:*", "version": "2019 Cumulativeupdate2", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -156,10 +156,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2016:cumulative_update_17:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2016:cumulative_update_17:*:*:*:*:*:*", "version": "2016 Cumulativeupdate17", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -167,10 +167,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2013:cumulative_update_23:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2013:cumulative_update_23:*:*:*:*:*:*", "version": "2013 Cumulativeupdate23", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -178,10 +178,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2013:cumulative_update_22:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2013:cumulative_update_22:*:*:*:*:*:*", "version": "2013 Cumulativeupdate22", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -189,10 +189,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2019:-:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2019:-:*:*:*:*:*:*", "version": "2019", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -200,10 +200,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2019:cumulative_update_8:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2019:cumulative_update_8:*:*:*:*:*:*", "version": "2019 Cumulativeupdate8", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -211,10 +211,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2016:cumulative_update_12:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2016:cumulative_update_12:*:*:*:*:*:*", "version": "2016 Cumulativeupdate12", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -222,10 +222,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2016:cumulative_update_14:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2016:cumulative_update_14:*:*:*:*:*:*", "version": "2016 Cumulativeupdate14", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -233,10 +233,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2016:cumulative_update_15:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2016:cumulative_update_15:*:*:*:*:*:*", "version": "2016 Cumulativeupdate15", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -244,10 +244,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2016:cumulative_update_8:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2016:cumulative_update_8:*:*:*:*:*:*", "version": "2016 Cumulativeupdate8", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -255,10 +255,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2016:cumulative_update_13:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2016:cumulative_update_13:*:*:*:*:*:*", "version": "2016 Cumulativeupdate13", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -266,10 +266,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2019:cumulative_update_6:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2019:cumulative_update_6:*:*:*:*:*:*", "version": "2019 Cumulativeupdate6", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -277,10 +277,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2019:cumulative_update_5:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2019:cumulative_update_5:*:*:*:*:*:*", "version": "2019 Cumulativeupdate5", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -288,10 +288,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2016:cumulative_update_10:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2016:cumulative_update_10:*:*:*:*:*:*", "version": "2016 Cumulativeupdate10", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -299,10 +299,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2019:cumulative_update_1:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2019:cumulative_update_1:*:*:*:*:*:*", "version": "2019 Cumulativeupdate1", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" } @@ -314,9 +314,9 @@ "targeted_regions_hierarchy": [], "top_icon_md5": [], "exploitation": { - "tech_details_release_date": 1615248000, - "exploit_release_date": 1614729600, - "first_exploitation": 1609632000 + "tech_details_release_date": 1616357111, + "exploit_release_date": 1615838711, + "first_exploitation": 1610741111 }, "targeted_regions": [], "counters": { @@ -329,19 +329,17 @@ "attack_techniques": 0 }, "threat_scape": [], - "date_of_disclosure": 1614643200, - "alt_names": ["ProxyLogon"], + "date_of_disclosure": 1615752311, + "alt_names": ["LoremRelay"], "workarounds": [ - "

Microsoft recommends the following mitigation technique to offset the possibility of exploitation:

\n

 

\n

Backend Cookie Mitigation

\n

 

\n

Description: This mitigation will filter https requests that contain malicious X-AnonResource-Backend and malformed X-BEResource cookies which were found to be used in the SSRF attacks in the wild. This will help with defense against the known patterns observed but not the SSRF as a whole.

\n

 

\n

Note: The IIS Rewrite rules will be removed after Exchange is upgraded and the mitigation will need to be reapplied if the security patch has not been installed.

\n

 

\n

Requirements: URL Rewrite Module

\n\n

 

\n

Impact: No known impact to Exchange functionality if URL Rewrite module is installed as recommended.

\n

 

\n

Installing URL Rewrite version 2.1 on IIS versions 8.5 and lower may cause IIS and Exchange to become unstable. If there is a mismatch between the URL Rewrite module and IIS version, ExchangeMitigations.ps1 will not apply the mitigation for CVE-2021-26855. You must uninstall the URL Rewrite module and reinstall the correct version.

\n

 

\n

For more information, please see: Microsoft Exchange Server Vulnerabilities Mitigations – updated March 9, 2021

\n

 

\n

Exchange On-premises Mitigation Tool (EOMT)

\n

 

\n

Microsoft has released a new, one-click mitigation tool, Microsoft Exchange On-Premises Mitigation Tool to help customers who do not have dedicated security or IT teams to apply these security updates.

\n

 

\n

For more details on how to obtain and use the tool, please see: One-Click Microsoft Exchange On-Premises Mitigation Tool – March 2021

" - ], - "recent_activity_summary": [ - 0, 3, 4, 9, 7, 4, 12, 14, 8, 6, 4, 8, 16, 6 + "

Lorem Corp recommends the following mitigation technique to offset the possibility of exploitation:

\n

 

\n

Backend Cookie Mitigation

\n

 

\n

Description: This mitigation will filter https requests that contain malicious X-AnonResource-Backend and malformed X-BEResource cookies which were found to be used in the SSRF attacks in the wild.

\n" ], + "recent_activity_summary": [0, 3, 4, 9, 7, 4, 12, 14, 8, 6, 4, 8, 16, 6], "operating_systems": [], "available_mitigation": ["Patch", "Workaround"], - "executive_summary": "\n\n* A Server-Side Request Forgery (SSRF) vulnerability exists that, when exploited, allows a remote attacker to execute arbitrary code.\n* This vulnerability has been confirmed to be widely exploited in the wild. Non-weaponized and proof-of-concept code is publicly available.\n* Google Threat Intelligence Group (GTIG) considers this a Critical-risk vulnerability due to the potential for arbitrary code execution.\n* Mitigation options include a patch and a workaround.\n", + "executive_summary": "\n\n* A Server-Side Request Forgery (SSRF) vulnerability exists that, when exploited, allows a remote attacker to execute arbitrary code.\n* This vulnerability has been confirmed to be widely exploited in the wild. Non-weaponized and proof-of-concept code is publicly available.\n* Lorem Ipsum Threat Intelligence Group (LITIG) considers this a Critical-risk vulnerability due to the potential for arbitrary code execution.\n* Mitigation options include a patch and a workaround.\n", "exploit_availability": "Publicly Available", - "name": "CVE-2021-26855", + "name": "CVE-2022-13579", "tags": [ "was_zero_day", "has_exploits", @@ -351,13 +349,13 @@ "vendor_fix_references": [ { "cvss": null, - "title": "Microsoft Exchange Server Remote Code Execution Vulnerability (CVE-2021-26855)", - "published_date": 1614672000, + "title": "Lorem Messaging Server Remote Code Execution Vulnerability (CVE-2022-13579)", + "published_date": 1615781111, "unique_id": null, - "name": "Microsoft Corp.", + "name": "Lorem Corp.", "source_description": null, "md5": null, - "url": "https://msrc.microsoft.com/update-guide/en-US/vulnerability/CVE-2021-26855" + "url": "https://msrc.loremcorp.com/update-guide/en-US/vulnerability/CVE-2022-13579" }, { "cvss": null, @@ -367,43 +365,43 @@ "name": null, "source_description": null, "md5": null, - "url": "https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2021-26855" + "url": "https://portal.msrc.loremcorp.com/en-US/security-guidance/advisory/CVE-2022-13579" }, { "cvss": null, "title": null, "published_date": null, - "unique_id": "5000871", - "name": "Microsoft (5000871) Security Update Information", + "unique_id": "6001982", + "name": "Lorem Corp (6001982) Security Update Information", "source_description": null, "md5": null, - "url": "https://support.microsoft.com/en-us/help/5000871" + "url": "https://support.loremcorp.com/en-us/help/6001982" } ], "capabilities": [], "private": true, "risk_factors": [], "predicted_risk_rating": "", - "analysis": "\n\nAn attacker could exploit this vulnerability to execute arbitrary code. The attacker needs to send a specially crafted HTTP request to the target server running Exchange with knowledge of the account from which they want to extract information.\n\n \n\nOn March 2, 2021, Microsoft released information regarding limited and targeted attacks leveraging [CVE-2021-26855](https://intelligence.fireeye.com/reports/21-00004941 \"https://intelligence.fireeye.com/reports/21-00004941\"), [CVE-2021-26857](https://intelligence.fireeye.com/reports/21-00004938 \"https://intelligence.fireeye.com/reports/21-00004938\"), [CVE-2021-26858](https://intelligence.fireeye.com/reports/21-00004944 \"https://intelligence.fireeye.com/reports/21-00004944\"), and [CVE-2021-27065](https://intelligence.fireeye.com/reports/21-00004939 \"https://intelligence.fireeye.com/reports/21-00004939\"). For additional information regarding exploitation, please see: [HAFNIUM targeting Exchange Servers with 0-day exploits](https://www.microsoft.com/security/blog/2021/03/02/hafnium-targeting-exchange-servers/ \"https://www.microsoft.com/security/blog/2021/03/02/hafnium-targeting-exchange-servers/\").\n \nOn March 2, 2021, Volexity released a blog with their findings of exploitation activity in the wild. On March 8, they updated their blog noting they observed cyber espionage operations using the SSRF vulnerability which started occurring on January 3, 2021, three days earlier than initially posted. For more information, please see: [Operation Exchange Marauder: Active Exploitation of Multiple Zero-Day Microsoft Exchange Vulnerabilities](https://www.volexity.com/blog/2021/03/02/active-exploitation-of-microsoft-exchange-zero-day-vulnerabilities/).\n \nSecurity research group, DEVCORE, stated they reported the vulnerabilities and exploit to Microsoft back on January 5, 2021. For more details on their discoveries, please see the document: [ProxyLogon The latest pre-authenticated Remote Code Execution vulnerability on Microsoft Exchange Server](https://proxylogon.com/). Due to the timeline of events, it has been suggested that DEVCORE itself may have been the start of the leak. However, when DEVCORE learned that the ProxyLogon exploit was used by HAFNIUM from Volexity's advisory, they conducted an internal investigation and found no signs of hacking within their own systems. \n \nOn March 2, Rapid7 released a blog detailing potential indicators-of-compromise (IOCs), specifically covering instances of exploitation in which the China Chopper webshell was delivered as the payload. On March 3, this was followed by a second blog post containing mitigation advice and a summary of observed threat activity. For more information, please see the blog posts [Rapid7's InsightIDR Enables Detection And Response to Microsoft Exchange Zero-Day](https://blog.rapid7.com/2021/03/03/rapid7s-insightidr-enables-detection-and-response-to-microsoft-exchange-0-day/) and [Mass Exploitation of Exchange Server Zero-Day CVEs: What You Need to Know](https://blog.rapid7.com/2021/03/03/mass-exploitation-of-exchange-server-zero-day-cves-what-you-need-to-know/).\n \nOn March 3, 2021, CISA released an [Emergency Directive](https://cyber.dhs.gov/ed/21-02/) warning of active exploitation of these vulnerabilities and the required steps for agencies to take.\n \nOn March 10, 2021, Recorded Future reported that the first functional PoC was published by a Vietnamese security researcher on GitHub. For more details, see: [PoC released for Microsoft Exchange ProxyLogon vulnerabilities](https://therecord.media/poc-released-for-microsoft-exchange-proxylogon-vulnerabilities/). Microsoft immediately took this down according to Vice's article: [Researcher Publishes Code to Exploit Microsoft Exchange Vulnerabilities on GitHub](https://www.vice.com/en/article/n7vpaz/researcher-publishes-code-to-exploit-microsoft-exchange-vulnerabilities-on-github). Another security researcher, Marcus Hutchins, of Kryptos Logic, in a tweet, confirmed the availability of a public PoC and reported that the code contains bugs but was able to produce a shell: [MalwareTech's Twitter.](https://twitter.com/MalwareTechBlog?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1369729825104007169%7Ctwgr%5E%7Ctwcon%5Es1_&ref_url=https%3A%2F%2Ftherecord.media%2Fpoc-released-for-microsoft-exchange-proxylogon-vulnerabilities%2F) Mandiant Threat Intelligence was able to locate a backup of the posted code.\n \nOn March 19, 2021, exploit code for this vulnerability was reported added to the SAINT exploitation framework.\n \nIn August 2021, researchers from the security firm Cybereason reported findings indicating that Chinese-affiliated threat actor GALLIUM (also known as SoftCell) had been exploiting this vulnerability and others affiliated with ProxyLogon since, \"long before they became publicly known.\"\n \nIn October 2021, Mandiant observed an advertisement on a Russian exploit forum offering exploit code for sale believed to utilize this vulnerability in conjunction with CVE-2021-27065.\n \nOn Nov. 19, 2021, Trend Micro reported that this vulnerability was being exploited in the wild alongside CVE-2021-34473 and CVE-2021-34523 to deliver the Squirrelwaffle malware loader. For more technical information, please see Trend Micro's article, \"[Squirrelwaffle Exploits ProxyShell and ProxyLogon to Hijack Email Chains](https://www.trendmicro.com/en_us/research/21/k/Squirrelwaffle-Exploits-ProxyShell-and-ProxyLogon-to-Hijack-Email-Chains.html \"Squirrelwaffle Exploits ProxyShell and ProxyLogon to Hijack Email Chains\").\"\n \nAdditionally, Mandiant has published the following blog post containing technical information for multiple instances of threat activity: [Detection and Response to Exploitation of Microsoft Exchange Zero-Day Vulnerabilities](https://www.fireeye.com/blog/threat-research/2021/03/detection-response-to-exploitation-of-microsoft-exchange-zero-day-vulnerabilities.html).\n \nMandiant identified two preliminary clusters of activity exploiting this vulnerability chain. For more details, please see: [Suspected Chinese Espionage Operators Exploit Multiple Zero-Day Vulnerabilities in Microsoft Exchange](https://intelligence.fireeye.com/reports/21-00005010).\n \nIn November 2021, Mandiant observed threat actors on a Russian exploitation forum offering information about vulnerable servers for sale. Mandiant has not confirmed the validity of these listings.\n \nOn March 17, 2022, the Federal Bureau of Investigation (FBI) released a joint advisory stating that this vulnerability, alongside CVE-2021-31207, CVE-2021-34473, and CVE-2021-34523, are being used to deploy AvosLocker ransomware. For more information, please see the FBI's advisory, \"[Indicators of Compromise Associated with AvosLocker Ransomware](https://www.ic3.gov/Media/News/2022/220318.pdf).\"\n \nMandiant Threat Intelligence considers this a Critical-risk vulnerability due to the potential consequences requiring no user interaction, nor requiring any special knowledge.\n\n\n\n \nCISA added this vulnerability to its Known Exploited Vulnerabilities Catalog on Nov. 3, 2021, with a required remediation date of April 16, 2021.\n\n", + "analysis": "\n\nAn attacker could exploit this vulnerability to execute arbitrary code. The attacker needs to send a specially crafted HTTP request to the target server running Lorem Messaging with knowledge of the account from which they want to extract information.\n\n", "technologies": [], - "creation_date": 1614723108, + "creation_date": 1615832219, "last_seen_details": [], "cisa_known_exploited": { "ransomware_use": "Known", - "added_date": 1635897600, - "due_date": 1618531200 + "added_date": 1637006711, + "due_date": 1619640311 }, "domains_count": 0, "summary_stats": { "first_submission_date": { - "min": 1615214264.0, - "max": 1696769189.0, - "avg": 1633568116.5 + "min": 1616323375.0, + "max": 1697878300.0, + "avg": 1634677227.5 }, "last_submission_date": { - "min": 1615309433.0, - "max": 1734134885.0, - "avg": 1654159139.625 + "min": 1616418544.0, + "max": 1735243996.0, + "avg": 1655268250.625 }, "files_detections": { "min": 0.0, @@ -414,1214 +412,23 @@ "targeted_industries_tree": [], "exploitation_vectors": ["General Network Connectivity", "Web"], "recent_activity_relative_change": 100.0, - "cve_id": "CVE-2021-26855", - "autogenerated_tags": [ - "cve-2021-27065", - "cve-2021-26855", - "cve-2021-34473" - ], + "cve_id": "CVE-2022-13579", + "autogenerated_tags": ["cve-2022-14176", "cve-2022-13579", "cve-2022-43584"], "epss": { "score": 0.94346, "percentile": 0.99951 }, "collection_links": [], - "origin": "Google Threat Intelligence", + "origin": "Lorem Ipsum Threat Intelligence", "risk_rating": "CRITICAL", "urls_count": 0, - "sources": [ - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Threat Advisory: HAFNIUM and Microsoft Exchange zero-day", - "published_date": 1614834000, - "unique_id": null, - "name": "Cisco Systems Inc.", - "source_description": null, - "md5": null, - "url": "https://blog.talosintelligence.com/2021/03/threat-advisory-hafnium-and-microsoft.html" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Emergency Directive 21-02", - "published_date": 1614747600, - "unique_id": "21-02", - "name": "Cybersecurity and Infrastructure Security Agency (CISA)", - "source_description": null, - "md5": null, - "url": "https://cyber.dhs.gov/ed/21-02" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": { - "temporal_score": null, - "vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N/E:F/RL:O/RC:C", - "base_score": 9.1 - }, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1614729326, - "unique_id": null, - "name": "Cybersecurity and Infrastructure Security Agency (CISA)", - "source_description": null, - "md5": "1c768c8e283e754398199c7eb8aeba0e", - "url": "https://github.com/cisagov/vulnrichment/blob/develop/2021/26xxx/CVE-2021-26855.json" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1627444800, - "unique_id": "AA21-209A", - "name": "Cybersecurity and Infrastructure Security Agency (CISA)", - "source_description": null, - "md5": null, - "url": "https://us-cert.cisa.gov/ncas/alerts/aa21-209a" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Mitigate Microsoft Exchange Server Vulnerabilities", - "published_date": 1614729600, - "unique_id": "AA21-062A", - "name": "Cybersecurity and Infrastructure Security Agency (CISA)", - "source_description": null, - "md5": null, - "url": "https://www.cisa.gov/news-events/cybersecurity-advisories/aa21-062a" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "2022 Top Routinely Exploited Vulnerabilities", - "published_date": 1691020800, - "unique_id": "AA23-215A", - "name": "Cybersecurity and Infrastructure Security Agency (CISA)", - "source_description": null, - "md5": null, - "url": "https://www.cisa.gov/news-events/cybersecurity-advisories/aa23-215a" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "AA23-215A: 2022's Top Routinely Exploited Vulnerabilities", - "published_date": 1691020800, - "unique_id": null, - "name": "Tenable Inc.", - "source_description": null, - "md5": null, - "url": "https://www.tenable.com/blog/aa23-215a-2022s-top-routinely-exploited-vulnerabilities" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1648094400, - "unique_id": null, - "name": "Tenable Inc.", - "source_description": null, - "md5": null, - "url": "https://www.tenable.com/blog/contileaks-chats-reveal-over-30-vulnerabilities-used-by-conti-ransomware-affiliates" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "ProxyNotShell, OWASSRF, TabShell: Patch Your Microsoft Exchange Servers Now", - "published_date": 1675148400, - "unique_id": null, - "name": "Tenable Inc.", - "source_description": null, - "md5": null, - "url": "https://www.tenable.com/blog/proxynotshell-owassrf-tabshell-patch-your-microsoft-exchange-servers-now" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1637362800, - "unique_id": null, - "name": "Trend Micro Inc.", - "source_description": null, - "md5": null, - "url": "https://www.trendmicro.com/en_us/research/21/k/Squirrelwaffle-Exploits-ProxyShell-and-ProxyLogon-to-Hijack-Email-Chains.html" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Operation Diplomatic Specter: An Active Chinese Cyberespionage Campaign Leverages Rare Tool Set to Target Governmental Entities in the Middle East, Africa and Asia", - "published_date": 1711152000, - "unique_id": null, - "name": "Palo Alto Networks Inc.", - "source_description": null, - "md5": null, - "url": "https://unit42.paloaltonetworks.com/operation-diplomatic-specter" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1614790800, - "unique_id": null, - "name": "Rapid7", - "source_description": null, - "md5": null, - "url": "https://blog.rapid7.com/2021/03/03/mass-exploitation-of-exchange-server-zero-day-cves-what-you-need-to-know" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1614704400, - "unique_id": null, - "name": "Rapid7", - "source_description": null, - "md5": null, - "url": "https://blog.rapid7.com/2021/03/03/rapid7s-insightidr-enables-detection-and-response-to-microsoft-exchange-0-day" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Popular Attack Surfaces, August 2021: What You Need to Know", - "published_date": 1628740800, - "unique_id": null, - "name": "Rapid7", - "source_description": null, - "md5": null, - "url": "https://www.rapid7.com/blog/post/2021/08/12/popular-attack-surfaces-august-2021-what-you-need-to-know" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1614834000, - "unique_id": null, - "name": "FireEye Inc.", - "source_description": null, - "md5": null, - "url": "https://www.fireeye.com/blog/threat-research/2021/03/detection-response-to-exploitation-of-microsoft-exchange-zero-day-vulnerabilities.html" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Multiple Security Updates Released for Exchange Server", - "published_date": 1614661200, - "unique_id": null, - "name": "Microsoft Corp.", - "source_description": null, - "md5": null, - "url": "https://msrc-blog.microsoft.com/2021/03/02/multiple-security-updates-released-for-exchange-server" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Microsoft Exchange Server Vulnerabilities Mitigations – updated March 9, 2021", - "published_date": 1614920400, - "unique_id": null, - "name": "Microsoft Corp.", - "source_description": null, - "md5": null, - "url": "https://msrc-blog.microsoft.com/2021/03/05/microsoft-exchange-server-vulnerabilities-mitigations-march-2021" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "One-Click Microsoft Exchange On-Premises Mitigation Tool – March 2021", - "published_date": 1615824000, - "unique_id": null, - "name": "Microsoft Corp.", - "source_description": null, - "md5": null, - "url": "https://msrc-blog.microsoft.com/2021/03/15/one-click-microsoft-exchange-on-premises-mitigation-tool-march-2021" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Released: March 2021 Exchange Server Security Updates", - "published_date": 1614661200, - "unique_id": null, - "name": "Microsoft Corp.", - "source_description": null, - "md5": null, - "url": "https://techcommunity.microsoft.com/t5/exchange-team-blog/released-march-2021-exchange-server-security-updates/ba-p/2175901" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "HAFNIUM targeting Exchange Servers with 0-day exploits", - "published_date": 1614704400, - "unique_id": null, - "name": "Microsoft Corp.", - "source_description": null, - "md5": null, - "url": "https://www.microsoft.com/security/blog/2021/03/02/hafnium-targeting-exchange-servers" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "CISA Known Exploited Vulnerabilities Catalog", - "published_date": 1635940800, - "unique_id": null, - "name": "CISA", - "source_description": "CISA's Known Exploited Vulnerabilities Catalog", - "md5": null, - "url": "https://www.cisa.gov/known-exploited-vulnerabilities-catalog" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Sensor Intel Series: Top CVEs in August 2023", - "published_date": 1695600000, - "unique_id": null, - "name": "F5, Inc.", - "source_description": "

F5's Sensor Intelligence Series a recurring monthly summary of vulnerability intelligence based on distributed passive sensor data.

", - "md5": null, - "url": "https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-august-2023" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Sensor Intel Series: Top CVEs in December 2023", - "published_date": 1706054400, - "unique_id": null, - "name": "F5, Inc.", - "source_description": null, - "md5": null, - "url": "https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-december-2023" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Sensor Intel Series: Top CVEs in February 2024", - "published_date": 1711584000, - "unique_id": null, - "name": "F5, Inc.", - "source_description": null, - "md5": null, - "url": "https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-february-2024" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Introducing the Sensor Intel Series: Top CVEs Jan-Jun 2022", - "published_date": 1660024800, - "unique_id": null, - "name": "F5, Inc.", - "source_description": null, - "md5": null, - "url": "https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-jan-jun-2022" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Sensor Intel Series: Top CVEs in July 2023", - "published_date": 1692835200, - "unique_id": null, - "name": "F5, Inc.", - "source_description": "

F5's Sensor Intel Series

", - "md5": null, - "url": "https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-july-2023" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Scanning for CVE-2017-9841 Drops Precipitously", - "published_date": 1724284800, - "unique_id": null, - "name": "F5, Inc.", - "source_description": null, - "md5": null, - "url": "https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-july-2024" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Sensor Intel Series: Top CVEs in June 2023", - "published_date": 1689897600, - "unique_id": null, - "name": "F5, Inc.", - "source_description": "

F5's Sensor Intel Series

", - "md5": null, - "url": "https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-june-2023" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Sensor Intel Series: Top CVEs in March 2024", - "published_date": 1714435200, - "unique_id": null, - "name": "F5, Inc.", - "source_description": null, - "md5": null, - "url": "https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-march-2024" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Sensor Intel Series: Top CVEs in May 2023", - "published_date": 1686873600, - "unique_id": null, - "name": "F5, Inc.", - "source_description": "

F5's Sensor Intel Series

", - "md5": null, - "url": "https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-may-2023" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Sensor Intel Series: Top CVEs in October 2023", - "published_date": 1701043200, - "unique_id": null, - "name": "F5, Inc.", - "source_description": null, - "md5": null, - "url": "https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-october-2023" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Sensor Intel Series: Top CVEs in September 2023", - "published_date": 1697587200, - "unique_id": null, - "name": "F5, Inc.", - "source_description": null, - "md5": null, - "url": "https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-september-2023" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Continued Intense Scanning From One IP in Lithuania", - "published_date": 1729468800, - "unique_id": null, - "name": "F5, Inc.", - "source_description": null, - "md5": null, - "url": "https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-september-2024" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": { - "temporal_score": null, - "vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N/E:F/RL:O/RC:C", - "base_score": 9.1 - }, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1614729326, - "unique_id": null, - "name": "Mitre Corporation", - "source_description": null, - "md5": "44fb03e98317996319684f9cf99ebc50", - "url": "https://github.com/CVEProject/cvelistV5/blob/main/cves/2021/26xxx/CVE-2021-26855.json" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": { - "temporal_score": null, - "vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N", - "base_score": 9.1 - }, - "cvssv2_0": { - "temporal_score": null, - "vector": "AV:N/AC:L/Au:N/C:P/I:P/A:P", - "base_score": 7.5 - }, - "cvssv4_x": null - }, - "title": null, - "published_date": 1614730512, - "unique_id": null, - "name": "National Vulnerability Database", - "source_description": null, - "md5": null, - "url": "https://nvd.nist.gov/vuln/detail/CVE-2021-26855" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "0day \"In the Wild\"", - "published_date": null, - "unique_id": null, - "name": "Google LLC", - "source_description": null, - "md5": null, - "url": "https://docs.google.com/spreadsheets/d/1lkNJ0uQwbeC1ZTRrxdtuPLCIl7mlUreoKfSIgajnSyY/view" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "New PoC for Microsoft Exchange bugs puts attacks in reach of anyone", - "published_date": 1615737600, - "unique_id": null, - "name": "Bleeping Computer", - "source_description": null, - "md5": null, - "url": "https://www.bleepingcomputer.com/news/security/new-poc-for-microsoft-exchange-bugs-puts-attacks-in-reach-of-anyone" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "State hackers rush to exploit unpatched Microsoft Exchange servers", - "published_date": 1614790800, - "unique_id": null, - "name": "Bleeping Computer", - "source_description": null, - "md5": null, - "url": "https://www.bleepingcomputer.com/news/security/state-hackers-rush-to-exploit-unpatched-microsoft-exchange-servers" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "The Microsoft Exchange hacks: How they started and where we are", - "published_date": 1615910400, - "unique_id": null, - "name": "Bleeping Computer", - "source_description": null, - "md5": null, - "url": "https://www.bleepingcomputer.com/news/security/the-microsoft-exchange-hacks-how-they-started-and-where-we-are" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Microsoft Exchange Server ProxyLogon vulnerability", - "published_date": 1616169600, - "unique_id": null, - "name": "SAINT Corp.", - "source_description": null, - "md5": null, - "url": "http://download.saintcorporation.com/cgi-bin/exploit_info/exchange_proxylogon" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "URGENT — 4 Actively Exploited 0-Day Flaws Found in Microsoft Exchange", - "published_date": 1614661200, - "unique_id": null, - "name": "The Hacker News", - "source_description": null, - "md5": null, - "url": "https://thehackernews.com/2021/03/cisa-issues-emergency-directive-on-in.html" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "14 Exploits Cybersecurity Professionals Are Concerned About", - "published_date": 1626840000, - "unique_id": null, - "name": "Core Security Technologies", - "source_description": null, - "md5": null, - "url": "https://www.coresecurity.com/blog/14-exploits-cybersecurity-professionals-are-concerned-about" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Qualys Top 20 Most Exploited Vulnerabilities", - "published_date": 1693785600, - "unique_id": null, - "name": "Qualys Inc.", - "source_description": null, - "md5": null, - "url": "https://blog.qualys.com/vulnerabilities-threat-research/2023/09/04/qualys-top-20-exploited-vulnerabilities" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Defense Lessons From the Black Basta Ransomware Playbook", - "published_date": 1740441600, - "unique_id": null, - "name": "Qualys Inc.", - "source_description": null, - "md5": null, - "url": "https://blog.qualys.com/vulnerabilities-threat-research/2025/02/25/defense-lessons-from-the-black-basta-ransomware-playbook" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "ProxyLogon is just the tip of the iceberg, a new attack surface against Microsoft Exchange Server!", - "published_date": 1628308800, - "unique_id": null, - "name": "DEVCORE", - "source_description": null, - "md5": null, - "url": "https://devco.re/blog/2021/08/07/a-new-attack-surface-on-MS-exchange" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "ProxyLogon The latest pre-authenticated Remote Code Execution vulnerability on Microsoft Exchange Server", - "published_date": 1614920400, - "unique_id": null, - "name": "DEVCORE", - "source_description": "

ProxyLogon's branded vulnerability page

", - "md5": null, - "url": "https://proxylogon.com" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1647900000, - "unique_id": null, - "name": "Malwarebytes", - "source_description": null, - "md5": null, - "url": "https://blog.malwarebytes.com/ransomware/2022/03/avoslocker-ransomware-uses-microsoft-exchange-server-vulnerabilities-says-fbi" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "From Bugs to Breaches: 25 Significant CVEs As MITRE CVE Turns 25", - "published_date": 1729555200, - "unique_id": null, - "name": "Tenable Blog", - "source_description": null, - "md5": null, - "url": "https://www.tenable.com/blog/from-bugs-to-breaches-25-significant-cves-as-mitre-cve-turns-25" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Salt Typhoon: An Analysis of Vulnerabilities Exploited by this State-Sponsored Actor - Blog | Tenable®", - "published_date": 1737590400, - "unique_id": null, - "name": "Tenable Blog", - "source_description": null, - "md5": null, - "url": "https://www.tenable.com/blog/salt-typhoon-an-analysis-of-vulnerabilities-exploited-by-this-state-sponsored-actor" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Operation Exchange Marauder: Active Exploitation of Multiple Zero-Day Microsoft Exchange Vulnerabilities", - "published_date": 1614704400, - "unique_id": null, - "name": "Volexity", - "source_description": null, - "md5": null, - "url": "https://www.volexity.com/blog/2021/03/02/active-exploitation-of-microsoft-exchange-zero-day-vulnerabilities" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "PoC released for Microsoft Exchange ProxyLogon vulnerabilities", - "published_date": 1615352400, - "unique_id": null, - "name": "The Record", - "source_description": null, - "md5": null, - "url": "https://therecord.media/poc-released-for-microsoft-exchange-proxylogon-vulnerabilities" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "China APT Stole Geopolitical Secrets From Middle East, Africa & Asia", - "published_date": 1711152000, - "unique_id": null, - "name": "Dark Reading", - "source_description": null, - "md5": null, - "url": "https://www.darkreading.com/threat-intelligence/china-apt-stole-geopolitical-secrets-from-middle-east-africa-and-asia" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Reproducing the Microsoft Exchange Proxylogon Exploit Chain", - "published_date": 1615266000, - "unique_id": null, - "name": "Praetorian", - "source_description": null, - "md5": null, - "url": "https://www.praetorian.com/blog/reproducing-proxylogon-exploit" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1627963200, - "unique_id": null, - "name": "Cybereason", - "source_description": null, - "md5": null, - "url": "https://www.cybereason.com/blog/deadringer-exposing-chinese-threat-actors-targeting-major-telcos" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "CU-000164-MW", - "published_date": 1647554400, - "unique_id": "CU-000164-MW", - "name": "Federal Bureau of Investigation Internet Crime Complaint Center IC3", - "source_description": null, - "md5": null, - "url": "https://www.ic3.gov/Media/News/2022/220318.pdf" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "White House cites 'active threat,' urges action despite Microsoft patch", - "published_date": 1615093200, - "unique_id": null, - "name": "Reuters", - "source_description": null, - "md5": null, - "url": "https://www.reuters.com/article/us-usa-cyber-microsoft/white-house-cites-active-threat-urges-action-despite-microsoft-patch-idUSKBN2AZ0OQ" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Researcher Publishes Code to Exploit Microsoft Exchange Vulnerabilities on Github", - "published_date": 1615438800, - "unique_id": null, - "name": "Vice", - "source_description": null, - "md5": null, - "url": "https://www.vice.com/en/article/n7vpaz/researcher-publishes-code-to-exploit-microsoft-exchange-vulnerabilities-on-github" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "BotPoke Scanner Switches IP", - "published_date": 1732492800, - "unique_id": null, - "name": "F5 Labs", - "source_description": null, - "md5": null, - "url": "https://www.f5.com/labs/articles/threat-intelligence/botpoke-scanner-switches-ip" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Sensor Intel Series: Top CVEs in January 2024", - "published_date": 1708300800, - "unique_id": null, - "name": "F5 Inc.", - "source_description": null, - "md5": null, - "url": "https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-january-2024" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Sensor Intel Series: Top CVEs in November 2023", - "published_date": 1702944000, - "unique_id": null, - "name": "F5 Inc.", - "source_description": null, - "md5": null, - "url": "https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-november-2023" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": null, - "unique_id": null, - "name": null, - "source_description": null, - "md5": null, - "url": "http://packetstormsecurity.com/files/161846/Microsoft-Exchange-2019-SSRF-Arbitrary-File-Write.html" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": null, - "unique_id": null, - "name": null, - "source_description": null, - "md5": null, - "url": "http://packetstormsecurity.com/files/161938/Microsoft-Exchange-ProxyLogon-Remote-Code-Execution.html" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": null, - "unique_id": null, - "name": null, - "source_description": null, - "md5": null, - "url": "http://packetstormsecurity.com/files/162610/Microsoft-Exchange-2019-Unauthenticated-Email-Download.html" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": null, - "unique_id": null, - "name": null, - "source_description": null, - "md5": null, - "url": "http://packetstormsecurity.com/files/162736/Microsoft-Exchange-ProxyLogon-Collector.html" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1614729600, - "unique_id": null, - "name": null, - "source_description": null, - "md5": null, - "url": "https://f5.pm/go-62102.html" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1615420800, - "unique_id": null, - "name": null, - "source_description": null, - "md5": null, - "url": "https://git.blackmarble.sh/backup/proxyLogon/-/blob/main/PoC_proxyLogon.py" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1633737600, - "unique_id": null, - "name": null, - "source_description": null, - "md5": null, - "url": "https://github.com/Jumbo-WJB/Exchange_SSRF" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1615161600, - "unique_id": null, - "name": null, - "source_description": null, - "md5": null, - "url": "https://github.com/Udyz/Proxylogon" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1614816000, - "unique_id": null, - "name": null, - "source_description": null, - "md5": null, - "url": "https://github.com/ZephrFish/Exch-CVE-2021-26855" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1614988800, - "unique_id": null, - "name": null, - "source_description": null, - "md5": null, - "url": "https://github.com/charlottelatest/CVE-2021-26855" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1614816000, - "unique_id": null, - "name": null, - "source_description": null, - "md5": null, - "url": "https://github.com/shacojx/CVE_2021_26855_Exploit_Hub" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1615075200, - "unique_id": null, - "name": null, - "source_description": null, - "md5": null, - "url": "https://gitlab.com/gvillegas/ohwaa" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1615248000, - "unique_id": null, - "name": null, - "source_description": null, - "md5": null, - "url": "https://raw.githubusercontent.com/rapid7/metasploit-framework/master/modules/auxiliary/gather/exchange_proxylogon_collector.rb" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1615507200, - "unique_id": null, - "name": null, - "source_description": null, - "md5": null, - "url": "https://raw.githubusercontent.com/rapid7/metasploit-framework/master/modules/exploits/windows/http/exchange_proxylogon_rce.rb" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1615420800, - "unique_id": null, - "name": null, - "source_description": null, - "md5": null, - "url": "https://www.exploit-db.com/exploits/49637" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1615680000, - "unique_id": null, - "name": null, - "source_description": null, - "md5": null, - "url": "https://www.exploit-db.com/exploits/49663" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1621296000, - "unique_id": null, - "name": null, - "source_description": null, - "md5": null, - "url": "https://www.exploit-db.com/exploits/49879" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1621555200, - "unique_id": null, - "name": null, - "source_description": null, - "md5": null, - "url": "https://www.exploit-db.com/exploits/49895" - } - ], + "sources": [], "detection_names": [], "targeted_industries": [], "malware_roles": [], "exploitation_consequence": "Code Execution", "source_regions_hierarchy": [], - "mve_id": "MVE-2021-10354", + "mve_id": "MVE-2022-20465", "last_modification_date": 1750839775, "vulnerable_products": "", "mitigations": [], @@ -1638,1812 +445,16 @@ }, "first_seen_details": [], "files_count": 15, - "description": "\n\nA remote code execution vulnerability exists in Exchange Server 2019 Cumulative Update 8. \nAn attacker who successfully exploited the vulnerability could run arbitrary code on the affected system.\n\n", - "version_history": [ - { - "date": 1743029278, - "version_notes": ["epss.score: 0.97508 -> 0.94351"] - }, - { - "date": 1740607993, - "version_notes": [ - "sources: Added https://blog.qualys.com/vulnerabilities-threat-research/2025/02/25/defense-lessons-from-the-black-basta-ransomware-playbook" - ] - }, - { - "date": 1739501209, - "version_notes": ["priority: Added"] - }, - { - "date": 1738740626, - "version_notes": [ - "sources: Added https://github.com/cisagov/vulnrichment/blob/develop/2021/26xxx/CVE-2021-26855.json" - ] - }, - { - "date": 1737724996, - "version_notes": [ - "sources: Added https://www.tenable.com/blog/salt-typhoon-an-analysis-of-vulnerabilities-exploited-by-this-state-sponsored-actor" - ] - }, - { - "date": 1736279627, - "version_notes": [ - "sources: Added https://www.exploit-db.com/exploits/49663", - "sources: Added https://www.exploit-db.com/exploits/49637", - "sources: Added https://www.exploit-db.com/exploits/49879", - "sources: Added https://www.exploit-db.com/exploits/49895" - ] - }, - { - "date": 1736276173, - "version_notes": [ - "sources: Added https://www.f5.com/labs/articles/threat-intelligence/botpoke-scanner-switches-ip" - ] - }, - { - "date": 1729692397, - "version_notes": [ - "sources: Added https://www.tenable.com/blog/from-bugs-to-breaches-25-significant-cves-as-mitre-cve-turns-25" - ] - }, - { - "date": 1729679484, - "version_notes": [ - "sources: Added https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-july-2024" - ] - }, - { - "date": 1729679352, - "version_notes": [ - "sources: Added https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-september-2024" - ] - }, - { - "date": 1722739737, - "version_notes": [ - "sources: Added https://github.com/CVEProject/cvelistV5/blob/main/cves/2021/26xxx/CVE-2021-26855.json" - ] - }, - { - "date": 1716583367, - "version_notes": [ - "sources: Added https://www.darkreading.com/threat-intelligence/china-apt-stole-geopolitical-secrets-from-middle-east-africa-and-asia" - ] - }, - { - "date": 1716488915, - "version_notes": [ - "sources: Added https://unit42.paloaltonetworks.com/operation-diplomatic-specter" - ] - }, - { - "date": 1714593472, - "version_notes": [ - "sources: Added https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-march-2024" - ] - }, - { - "date": 1711998556, - "version_notes": [ - "sources: Added https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-february-2024" - ] - }, - { - "date": 1708616767, - "version_notes": [ - "sources: Added https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-january-2024" - ] - }, - { - "date": 1706216256, - "version_notes": [ - "sources: Added https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-december-2023" - ] - }, - { - "date": 1703095283, - "version_notes": [ - "sources: Added https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-november-2023" - ] - }, - { - "date": 1701172780, - "version_notes": [ - "sources: Added https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-october-2023" - ] - }, - { - "date": 1697772046, - "version_notes": ["exploitation.tech_details_release_date: Added"] - }, - { - "date": 1697722905, - "version_notes": [ - "sources: Added https://github.com/charlottelatest/CVE-2021-26855", - "sources: Added https://github.com/ZephrFish/Exch-CVE-2021-26855", - "sources: Added https://git.blackmarble.sh/backup/proxyLogon/-/blob/main/PoC_proxyLogon.py", - "sources: Added https://github.com/Jumbo-WJB/Exchange_SSRF", - "sources: Added https://f5.pm/go-62102.html", - "sources: Added https://gitlab.com/gvillegas/ohwaa", - "sources: Added https://github.com/shacojx/CVE_2021_26855_Exploit_Hub", - "sources: Added https://github.com/Udyz/Proxylogon" - ] - }, - { - "date": 1697714011, - "version_notes": [ - "sources: Added https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-september-2023" - ] - }, - { - "date": 1695823679, - "version_notes": [ - "sources: Added https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-june-2023", - "sources: Added https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-may-2023" - ] - }, - { - "date": 1695822928, - "version_notes": [ - "sources: Added https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-july-2023" - ] - }, - { - "date": 1695822288, - "version_notes": [ - "sources: Added https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-august-2023" - ] - }, - { - "date": 1695650916, - "version_notes": [ - "sources: Added https://raw.githubusercontent.com/rapid7/metasploit-framework/master/modules/exploits/windows/http/exchange_proxylogon_rce.rb", - "sources: Added https://raw.githubusercontent.com/rapid7/metasploit-framework/master/modules/auxiliary/gather/exchange_proxylogon_collector.rb" - ] - }, - { - "date": 1693944912, - "version_notes": [ - "sources: Added https://blog.qualys.com/vulnerabilities-threat-research/2023/09/04/qualys-top-20-exploited-vulnerabilities" - ] - }, - { - "date": 1691419179, - "version_notes": [ - "exploitation.exploit_release_date: 2021-02-26 -> 2021-03-03" - ] - }, - { - "date": 1691155777, - "version_notes": [ - "sources: Added https://www.tenable.com/blog/aa23-215a-2022s-top-routinely-exploited-vulnerabilities" - ] - }, - { - "date": 1691149544, - "version_notes": [ - "sources: Added https://www.cisa.gov/news-events/cybersecurity-advisories/aa21-062a" - ] - }, - { - "date": 1691145225, - "version_notes": [ - "sources: Added https://www.cisa.gov/news-events/cybersecurity-advisories/aa23-215a" - ] - }, - { - "date": 1691071685, - "version_notes": [ - "exploitation.first_exploitation: Added", - "exploitation_vectors: Added ['Web'] to existing exploitation_vectors. " - ] - }, - { - "date": 1688760481, - "version_notes": [ - "exploits: Added https://raw.githubusercontent.com/rapid7/metasploit-framework/master/modules/exploits/windows/http/exchange_proxylogon_rce.rb" - ] - }, - { - "date": 1688756735, - "version_notes": [ - "exploits: Added https://raw.githubusercontent.com/rapid7/metasploit-framework/master/modules/auxiliary/gather/exchange_proxylogon_collector.rb", - "exploits: Added https://raw.githubusercontent.com/rapid7/metasploit-framework/master/modules/auxiliary/scanner/http/exchange_proxylogon.rb" - ] - }, - { - "date": 1687441080, - "version_notes": ["exploitation.exploit_release_date: Added"] - }, - { - "date": 1685996412, - "version_notes": [ - "exploits: Added https://www.exploit-db.com/exploits/49879", - "exploits: Added https://www.exploit-db.com/exploits/49637", - "exploits: Added https://www.exploit-db.com/exploits/49895" - ] - }, - { - "date": 1685995831, - "version_notes": [ - "exploits: Added https://www.exploit-db.com/exploits/49663" - ] - }, - { - "date": 1684415346, - "version_notes": [ - "sources: Added https://docs.google.com/spreadsheets/d/1lkNJ0uQwbeC1ZTRrxdtuPLCIl7mlUreoKfSIgajnSyY/view" - ] - }, - { - "date": 1679575056, - "version_notes": ["aliases: Added"] - }, - { - "date": 1679523366, - "version_notes": [ - "sources: Added https://nvd.nist.gov/vuln/detail/CVE-2021-26855", - "sources: Added http://packetstormsecurity.com/files/161846/Microsoft-Exchange-2019-SSRF-Arbitrary-File-Write.html", - "sources: Added http://packetstormsecurity.com/files/162736/Microsoft-Exchange-ProxyLogon-Collector.html", - "sources: Added https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2021-26855", - "sources: Added http://packetstormsecurity.com/files/162610/Microsoft-Exchange-2019-Unauthenticated-Email-Download.html", - "sources: Added http://packetstormsecurity.com/files/161938/Microsoft-Exchange-ProxyLogon-Remote-Code-Execution.html" - ] - }, - { - "date": 1679520665, - "version_notes": [ - "exploits: Added https://gitlab.com/gvillegas/ohwaa", - "exploits: Added https://github.com/Jumbo-WJB/Exchange_SSRF", - "exploits: Added https://git.blackmarble.sh/backup/proxyLogon/-/blob/main/PoC_proxyLogon.py", - "exploits: Added https://f5.pm/go-62102.html", - "exploits: Added https://github.com/Udyz/Proxylogon", - "exploits: Added https://github.com/ZephrFish/Exch-CVE-2021-26855", - "exploits: Added https://github.com/shacojx/CVE_2021_26855_Exploit_Hub", - "exploits: Added https://github.com/charlottelatest/CVE-2021-26855" - ] - }, - { - "date": 1678752000, - "version_notes": ["Updated date of disclosure"] - }, - { - "date": 1675814400, - "version_notes": ["Added Tenable source"] - }, - { - "date": 1660608000, - "version_notes": ["Updated date of disclosure"] - }, - { - "date": 1660262400, - "version_notes": [ - "Added source (F5 Sensor Intel Series: Top CVEs Jan-Jun 2022)" - ] - }, - { - "date": 1649116800, - "version_notes": ["Added Tenable source information"] - }, - { - "date": 1647907200, - "version_notes": [ - "Added Malwarebytes and FBI IS3 sources; Added information on this vulnerability being used to deploy AvosLocker ransomware" - ] - }, - { - "date": 1643414400, - "version_notes": [ - "Added the following sources: CISA; Updated analysis" - ] - }, - { - "date": 1639353600, - "version_notes": ["Added Mandiant Research source"] - }, - { - "date": 1639094400, - "version_notes": [ - "Added in-the-wild scanning information from internal source; Updated analysis" - ] - }, - { - "date": 1637625600, - "version_notes": [ - "Added in-the-wild threat information from internal source" - ] - }, - { - "date": 1637539200, - "version_notes": [ - "Added Exploit Code (CVE-2021-26855_Jumbo-WJB); Update Analysis with new exploitation report from Trend Micro; Add Trend Micro Source" - ] - }, - { - "date": 1629763200, - "version_notes": [ - "Added Cybereason source; Updated Analysis with exploitation information" - ] - }, - { - "date": 1629158400, - "version_notes": ["Added Rapid7 source"] - }, - { - "date": 1628812800, - "version_notes": ["Added Devcore source"] - }, - { - "date": 1627516800, - "version_notes": [ - "Added CISA (AA21-209A) source; Added CVSSv3", - "Added CISA (AA21-209A) source" - ] - }, - { - "date": 1627430400, - "version_notes": ["Added Core Security third-party source"] - }, - { - "date": 1617321600, - "version_notes": ["Added exploit code owamails.py"] - }, - { - "date": 1616716800, - "version_notes": [ - "Added Exploit Files (CVE-2021-26855_collector.rb.txt, CVE-2021-26855_auth_bypass.rb.txt); Added exploitDB to file replication URLs; Added SAINT source information" - ] - }, - { - "date": 1616630400, - "version_notes": [ - "Added exploit code (CVE-2021-26855_GreyOrder_exploit); Added replication URLs for PoC \"PoC_proxyLogon.py\"" - ] - }, - { - "date": 1616025600, - "version_notes": [ - "Added exploit (CVE_2021_26855_shacojx_exploit); Added Replication URLs for PoC \"PoC_proxyLogon.py\"" - ] - }, - { - "date": 1615939200, - "version_notes": ["Upgraded exploitation rating to Wide"] - }, - { - "date": 1615852800, - "version_notes": [ - "Added exchange_proxylogon_rce.rb Metasploit exploit code", - "Updated the timeline regarding exploitation observations and DEVCORE's report to Microsoft", - "Added exploit code (CVE-2021-26855_Udyz_exploit)", - "Added Microsoft mitigation options; Updated vulnerability type" - ] - }, - { - "date": 1615766400, - "version_notes": [ - "Added PoC codes ex.py and ExchangeSheller.py", - "Updated date of disclosure" - ] - }, - { - "date": 1615507200, - "version_notes": [ - "Added Cisco Talos third-party source", - "Added Rapid7 source" - ] - }, - { - "date": 1615420800, - "version_notes": [ - "Added PoC PoC_proxyLogon.py; Added third-party information regarding the publicly available PoC" - ] - }, - { - "date": 1615334400, - "version_notes": [ - "Added mitigation options", - "Added DEVCORE source and updated Volexity's observations of exploitation activity", - "Added Praetorian third-party source", - "Added FireEye Blog source" - ] - }, - { - "date": 1615248000, - "version_notes": ["Added Reuters source"] - }, - { - "date": 1614816000, - "version_notes": [ - "Added CISA Emergency Directive and Hacker News source; Updated Analysis field" - ] - }, - { - "date": 1614729600, - "version_notes": ["Added exploitation activity observations"] - } - ], - "field_sources": [ - { - "field": "cvss.cvssv3_x", - "source": { - "source_url": "", - "source_name": "Google Threat Intelligence Group (GTIG)", - "sources": [], - "field_type": "Ranked" - } - }, - { - "field": "cvss.cvssv2_0", - "source": { - "source_url": "", - "source_name": "Google Threat Intelligence Group (GTIG)", - "sources": [], - "field_type": "Ranked" - } - }, - { - "field": "cwe", - "source": { - "source_url": "", - "source_name": "Cybersecurity and Infrastructure Security Agency (CISA)", - "sources": [], - "field_type": "Ranked" - } - }, - { - "field": "description", - "source": { - "source_url": "", - "source_name": "Google Threat Intelligence Group (GTIG)", - "sources": [], - "field_type": "Ranked" - } - }, - { - "field": "date_of_disclosure", - "source": { - "source_url": "", - "source_name": "Google Threat Intelligence Group (GTIG)", - "sources": [], - "field_type": "Ranked" - } - }, - { - "field": "exploitation_consequence", - "source": { - "source_url": "", - "source_name": "Google Threat Intelligence Group (GTIG)", - "sources": [], - "field_type": "Ranked" - } - }, - { - "field": "exploitation.first_exploitation", - "source": { - "source_url": "", - "source_name": "Volexity", - "sources": [], - "field_type": "Minimum" - } - }, - { - "field": "exploitation.tech_details_release_date", - "source": { - "source_url": null, - "source_name": null, - "sources": [ - { - "source_names": ["Praetorian"], - "source_urls": [] - } - ], - "field_type": "Computed" - } - }, - { - "field": "workarounds", - "source": { - "source_url": null, - "source_name": null, - "sources": [ - { - "source_names": ["Google Threat Intelligence Group (GTIG)"], - "source_urls": [] - } - ], - "field_type": "Merged" - } - }, - { - "field": "available_mitigation", - "source": { - "source_url": null, - "source_name": null, - "sources": [ - { - "source_names": [ - "Google Threat Intelligence Group (GTIG)", - "Tenable Blog" - ], - "source_urls": [] - }, - { - "source_names": ["Google Threat Intelligence Group (GTIG)"], - "source_urls": [] - } - ], - "field_type": "Merged" - } - }, - { - "field": "aliases", - "source": { - "source_url": null, - "source_name": null, - "sources": [ - { - "source_names": [ - "Cybersecurity and Infrastructure Security Agency (CISA)", - "Palo Alto Networks Inc.", - "DEVCORE", - "CVE-2021-26855_metasploit", - "CVE-2021-26855_metasploit", - "CVE-2021-26855_CVE-2021-27065_metasploit" - ], - "source_urls": [] - } - ], - "field_type": "Merged" - } - }, - { - "field": "exploitation_vectors", - "source": { - "source_url": null, - "source_name": null, - "sources": [ - { - "source_names": ["Google Threat Intelligence Group (GTIG)"], - "source_urls": [] - }, - { - "source_names": ["Volexity"], - "source_urls": [] - } - ], - "field_type": "Merged" - } - }, - { - "field": "tags", - "source": { - "source_url": null, - "source_name": null, - "sources": [ - { - "source_names": [ - "Bleeping Computer", - "Bleeping Computer", - "Bleeping Computer", - "The Hacker News", - "Malwarebytes", - "The Record", - "Dark Reading" - ], - "source_urls": [] - }, - { - "source_names": ["Praetorian"], - "source_urls": [] - } - ], - "field_type": "Merged" - } - }, - { - "field": "observed_in_the_wild", - "source": { - "source_url": "", - "source_name": "Google Threat Intelligence Group (GTIG)", - "sources": [], - "field_type": "Intrinsic" - } - }, - { - "field": "was_zero_day", - "source": { - "source_url": "", - "source_name": "Google Threat Intelligence Group (GTIG)", - "sources": [], - "field_type": "Intrinsic" - } - }, - { - "field": "media_attention", - "source": { - "source_url": null, - "source_name": null, - "sources": [ - { - "source_names": [ - "Bleeping Computer", - "Bleeping Computer", - "Bleeping Computer", - "The Hacker News", - "Malwarebytes", - "The Record", - "Dark Reading" - ], - "source_urls": [] - } - ], - "field_type": "Computed" - } - }, - { - "field": "exploitation_state", - "source": { - "source_url": "", - "source_name": "Google Threat Intelligence Group (GTIG)", - "sources": [], - "field_type": "Severity" - } - } - ], + "description": "\n\nA remote code execution vulnerability exists in Lorem Messaging Server 2019 Cumulative Update 8. \nAn attacker who successfully exploited the vulnerability could run arbitrary code on the affected system.\n\n", + "version_history": [], + "field_sources": [], "mati_genids_dict": { - "cve_id": "vulnerability--5d1b1359-a45a-5bfc-852b-050032aa64c8", - "report_id": "report--891e7021-8149-55a0-b36f-79a5cfc7c334", - "mve_id": "vulnerability--b2856d98-bd4b-5ac0-84bb-4b8d55f5b240" + "cve_id": "vulnerability--6e2c2460-b56b-6cfd-963c-161143bb75d9", + "report_id": "report--902f8132-9259-66b1-c47f-8ab680f6d445", + "mve_id": "vulnerability--c3967ea9-ce5c-6bd1-95cc-5c9e66f6c351" }, - "tags_details": [ - { - "first_seen": null, - "value": "was_zero_day", - "last_seen": null, - "confidence": "possible", - "description": null - }, - { - "first_seen": null, - "value": "media_attention", - "last_seen": null, - "confidence": "possible", - "description": null - }, - { - "first_seen": null, - "value": "observed_in_the_wild", - "last_seen": null, - "confidence": "possible", - "description": null - }, - { - "first_seen": null, - "value": "has_exploits", - "last_seen": null, - "confidence": "possible", - "description": null - } - ], - "aggregations": { - "files": { - "itw_urls": [ - { - "value": "http://drlamer.com/49637", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://exploit-db.com/download/49637", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://codeload.github.com/GreyOrder/CVE-2021-26855/zip/main", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://codeload.github.com/jsdryan/CVE-2021-26855/zip/main", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://github.com/GreyOrder/CVE-2021-26855/archive/main.zip", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://github.com/jsdryan/CVE-2021-26855/archive/main.zip", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://gitlab.com/gvillegas/ohwaa/-/archive/master/ohwaa-master.zip", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - } - ], - "execution_parents": [ - { - "value": "bda139957a859b9c916e2c943b2eb09f2d4ea35cb11848dc39916bb3877eb576", - "count": 1, - "total_related": 559, - "prevalence": 0.0017889087656529517 - }, - { - "value": "51ef55d04d783205016b25eed5907aac4023cfe0bc936eecbacb866ad70066fb", - "count": 1, - "total_related": 560, - "prevalence": 0.0017857142857142857 - } - ], - "compressed_parents": [ - { - "value": "dd307be354b0d17555bcc1a1e4a329e5ce0da4bf0027e378fac21153699de43e", - "count": 1, - "total_related": 89, - "prevalence": 0.011235955056179775 - }, - { - "value": "6e009fb39718074b73bca45e85843842a188df4c85c30ec60bd1dbefe6c8d06a", - "count": 1, - "total_related": 92, - "prevalence": 0.010869565217391304 - }, - { - "value": "c91dccae966d5e637c884a3137e3788361214d8055a2c936d5447271b7b9d069", - "count": 1, - "total_related": 94, - "prevalence": 0.010638297872340425 - }, - { - "value": "53f038537a02fafd5bfdc9977d4b0dbe2f7fed6ef7214dbabdb1c53ea96a5c1d", - "count": 1, - "total_related": 892, - "prevalence": 0.0011210762331838565 - }, - { - "value": "2c26b0446d9aa66057cb380167a70ca265984d46565eefa7d596019958f61655", - "count": 1, - "total_related": 896, - "prevalence": 0.0011160714285714285 - }, - { - "value": "8fd04b4a83f437a88628aef2774f9e54f9673e407f3218b98d5576538f5bd208", - "count": 1, - "total_related": 896, - "prevalence": 0.0011160714285714285 - }, - { - "value": "e4b16b49d55f50f904893df52b90d6d6663be8cd7d253996799fa9840204a7dd", - "count": 1, - "total_related": 896, - "prevalence": 0.0011160714285714285 - }, - { - "value": "badda1335ec6b0559dae990c6119299a937087235a3488647023aa366003dc01", - "count": 1, - "total_related": 898, - "prevalence": 0.0011135857461024498 - }, - { - "value": "ac5157cba1c53d2ae6e664466560897a6daa345dc65ca86579703aec4056a190", - "count": 1, - "total_related": 899, - "prevalence": 0.0011123470522803114 - }, - { - "value": "c4a556a57b0f4728cd1cc6fd60a6787cc6c86c47cd312a557cf234bfd360b5c6", - "count": 1, - "total_related": 900, - "prevalence": 0.0011111111111111111 - }, - { - "value": "c302cb24faa05ec2f3ee430085e24cc50ae8b4a1ae116ac8affff41a9d594fb3", - "count": 1, - "total_related": 901, - "prevalence": 0.0011098779134295228 - }, - { - "value": "36d7f7a98bc8edae71f8741839f8f41f6d921eebfc3a90b87572495b5a34a95e", - "count": 1, - "total_related": 902, - "prevalence": 0.0011086474501108647 - }, - { - "value": "b70b6eac12062c17c773574650bd92db7c383ae6aa044ff1490c09f756cc558b", - "count": 1, - "total_related": 902, - "prevalence": 0.0011086474501108647 - }, - { - "value": "492984ebf173980624c6245d2e1677b82d320cd11702cc2bb611408ea47e20bb", - "count": 1, - "total_related": 907, - "prevalence": 0.0011025358324145535 - }, - { - "value": "ab8706d39d2f4f8d548e1ff7cdf5e68a2c4f2aadb5fd5ab7992c871fc0dc5ce7", - "count": 1, - "total_related": 925, - "prevalence": 0.001081081081081081 - }, - { - "value": "a3b18a496a37e6420f645f98730dfd4a06fb48f866487ae3e1e7258769e713fc", - "count": 1, - "total_related": 926, - "prevalence": 0.0010799136069114472 - }, - { - "value": "33b5922d8d6a51777b35e428de8cc04c3771a246cf30c9e5c73ef095aaae541f", - "count": 1, - "total_related": 933, - "prevalence": 0.0010718113612004287 - }, - { - "value": "5cba1cdbd303cea46da1be74784927b94af7e1efa40b1d3628f0cde4013296b8", - "count": 1, - "total_related": 934, - "prevalence": 0.0010706638115631692 - }, - { - "value": "72b6d61e37b50b17b90651ca139c802cccf92a811a46099e1a256953b4b0b2a8", - "count": 1, - "total_related": 936, - "prevalence": 0.0010683760683760685 - }, - { - "value": "da0ff1be18bb63924efdf7249f690c98c7cc5ac0bb5e651f7c1c2d5df52fe292", - "count": 1, - "total_related": 938, - "prevalence": 0.0010660980810234541 - }, - { - "value": "91064c2e6ba4e71ca50f336c046187a6771f657aaec2fecba04cb0a84d87026a", - "count": 1, - "total_related": 941, - "prevalence": 0.0010626992561105207 - }, - { - "value": "bd21c2d4e8044f6e8d83b8244c22dd462a40180340c2430c372710e01e1b521e", - "count": 1, - "total_related": 944, - "prevalence": 0.001059322033898305 - }, - { - "value": "63a3e9ae242da1ce3fac2c1e236ca6c0f761c7b63b7b0f55906c62dfdec4cf5c", - "count": 1, - "total_related": 946, - "prevalence": 0.0010570824524312897 - }, - { - "value": "2ef4801668a692dc18297116faeb74de5ccceef01808c1f906c3081d13cdf35c", - "count": 1, - "total_related": 948, - "prevalence": 0.0010548523206751054 - }, - { - "value": "b2b39f5c92eb93b435216baa3636019ee805f488795e31033ef930d297412bf2", - "count": 1, - "total_related": 948, - "prevalence": 0.0010548523206751054 - }, - { - "value": "00d5873d287a4fae94d96e9278c101a8b8eb92fb36fd9207afc3312e481998ff", - "count": 1, - "total_related": 1000, - "prevalence": 0.001 - }, - { - "value": "d81c32f6d55e74dedaa4bc98ca2ca90bc54143931308f8713a3b204eb4164153", - "count": 1, - "total_related": 1002, - "prevalence": 0.000998003992015968 - }, - { - "value": "4e247da836c9031fa74191cc36757df3aff75b6bc9f1bd2eadf1101f44ec9e84", - "count": 1, - "total_related": 1005, - "prevalence": 0.0009950248756218905 - }, - { - "value": "d448912b5d04f9f9d9ec09a3f4f131535979c6fe8394fe301eb77af8ba0b048b", - "count": 1, - "total_related": 1005, - "prevalence": 0.0009950248756218905 - }, - { - "value": "8e5a0515ab29a37bc83cd0af07dcb7cec6da3d1b5141a7fe9ba8d33c96d9c222", - "count": 1, - "total_related": 1006, - "prevalence": 0.0009940357852882703 - }, - { - "value": "cd893ea3b83c21e222668cc71b281f70214fab0328f029eca3845145c97a3451", - "count": 1, - "total_related": 1009, - "prevalence": 0.0009910802775024777 - }, - { - "value": "2aa1b6699c53fd60dd011faf33096fb3ebb270f5dd283049eaea20cd3a0e2c24", - "count": 1, - "total_related": 1024, - "prevalence": 0.0009765625 - }, - { - "value": "de38e4952fada4525a5edd7201f4e431227356d3dd878daa907e915816a4fd72", - "count": 1, - "total_related": 1025, - "prevalence": 0.000975609756097561 - }, - { - "value": "534d3ba1fca004c57fb97e1a25ac405ac09bcaefc5a240cadf526af9e6d07628", - "count": 1, - "total_related": 1028, - "prevalence": 0.0009727626459143969 - }, - { - "value": "272736e9d72f9686446935af1bae8a4831661099bdd261ea837d264f9a188364", - "count": 1, - "total_related": 1032, - "prevalence": 0.0009689922480620155 - }, - { - "value": "4d46a576bef4fdf1b97fac25931399574edb696808cc37c3ef40e374dd03fd77", - "count": 1, - "total_related": 1032, - "prevalence": 0.0009689922480620155 - }, - { - "value": "7a0ef90c3cfcd8036893d4c6be9d138754f0e910575e388f4a4379d45cb6de7f", - "count": 1, - "total_related": 1046, - "prevalence": 0.0009560229445506692 - }, - { - "value": "b17c9440dd07fc18e71974daa377b6cae25667ddbc7edd9216923c5aa5017c83", - "count": 1, - "total_related": 1047, - "prevalence": 0.0009551098376313276 - }, - { - "value": "a788942dde178c79c7608d45397db35d86313529330b0289692978d2e83fa915", - "count": 1, - "total_related": 1049, - "prevalence": 0.0009532888465204957 - }, - { - "value": "f6d8375d0a9e56b5f83d678ac5d80274f7e2db68179b9ede715575a1fff2627b", - "count": 1, - "total_related": 1052, - "prevalence": 0.0009505703422053232 - }, - { - "value": "118d4a0d6e59e0154c267673f86ce3df7d6dbec554c69d1fe0a55affd002bb37", - "count": 1, - "total_related": 1053, - "prevalence": 0.000949667616334283 - }, - { - "value": "59fe080a332a2895496ee562167e5dcdb985de918c64dcb8eb892eb6be2fd9d1", - "count": 1, - "total_related": 1053, - "prevalence": 0.000949667616334283 - }, - { - "value": "831e7ebb64a52157a47387e0024308e11c68b143e36347c9a93a7618175affce", - "count": 1, - "total_related": 1053, - "prevalence": 0.000949667616334283 - }, - { - "value": "8447abbd8dc15f570f1bb75ac332a92de689699bbc5143a3a9c5f93c68c8a730", - "count": 1, - "total_related": 1053, - "prevalence": 0.000949667616334283 - }, - { - "value": "c6e366e3e8869fc7c1b407034f3be05076a814c69a25571466740cdfd9a4b685", - "count": 1, - "total_related": 1053, - "prevalence": 0.000949667616334283 - }, - { - "value": "e73b0313efad22e0048e37f73ce6596eb230696d41d11f9315911ef5ad68d247", - "count": 1, - "total_related": 1053, - "prevalence": 0.000949667616334283 - }, - { - "value": "250549db5081ad38691b4ab494ba2724b81c9e4721f5567081521850e70e7e82", - "count": 1, - "total_related": 1054, - "prevalence": 0.0009487666034155598 - }, - { - "value": "32c913259db12efef362e0a958934a554634f0810f27134ec2988595ba3ef154", - "count": 1, - "total_related": 1059, - "prevalence": 0.0009442870632672333 - }, - { - "value": "e1e154c59f6c208332ecef1fac47ae69656f77a88fea014567d2a22a174ad9bb", - "count": 1, - "total_related": 1061, - "prevalence": 0.000942507068803016 - }, - { - "value": "0fc8e1bf743b31cfb31c08d226c695c2d6d1c762636d648ccb09afbf5d6d69e7", - "count": 1, - "total_related": 1062, - "prevalence": 0.0009416195856873823 - }, - { - "value": "c241f76839180141207eba6186531faee57573b488e09ed064238cc3b01e5a04", - "count": 1, - "total_related": 1064, - "prevalence": 0.0009398496240601503 - }, - { - "value": "73a155efd378fde7461155325b881feff52ddc1ba4973cd638da8896ba64368c", - "count": 1, - "total_related": 1070, - "prevalence": 0.0009345794392523365 - }, - { - "value": "2fc9094e63e4aaa70052cfba4823e3f63303e3873979fbc42f78b4c4df045d2e", - "count": 1, - "total_related": 1072, - "prevalence": 0.0009328358208955224 - }, - { - "value": "3583fd145511a43ce731a7683495de566599a46c6ba9971910fc5cf3ccd774e9", - "count": 1, - "total_related": 1082, - "prevalence": 0.0009242144177449168 - }, - { - "value": "bc2fcda88b311b1d6cba8a370eae5233d8e36528817b0d6e19bf7a54380b11ef", - "count": 1, - "total_related": 1082, - "prevalence": 0.0009242144177449168 - }, - { - "value": "d2b3e3d25f55113e433656ae13a01e3af50b9d69a6d5232fc705affee02e62a8", - "count": 1, - "total_related": 1084, - "prevalence": 0.0009225092250922509 - }, - { - "value": "3deb45b52de2116e4e76c25aa3f49319a54e91c6daf9d9503f0c19be5fa97bd1", - "count": 1, - "total_related": 1085, - "prevalence": 0.0009216589861751152 - }, - { - "value": "f1fa28b8b5efd2da1f47719ef5f90edec1f5ed3c0c69f3cb603e6fdf2bf2e512", - "count": 1, - "total_related": 1085, - "prevalence": 0.0009216589861751152 - }, - { - "value": "4d5a3d5f7aa02ced533336840555ed31c24d985df86e1ee5276281ccba0c43bf", - "count": 1, - "total_related": 1089, - "prevalence": 0.0009182736455463728 - }, - { - "value": "1bb49b20f9e3993eefa5f64549fd3cfa119c8882dfc427038f89b022dad9e254", - "count": 1, - "total_related": 1091, - "prevalence": 0.0009165902841429881 - }, - { - "value": "e70d39f7f233252327dff23523f813b47dbaf7f601379a9ac323f40871eb26de", - "count": 1, - "total_related": 1092, - "prevalence": 0.0009157509157509158 - }, - { - "value": "01e4a609cd85be15eb65af552492f2855f285fa4acfe2a9e07843cc108dbbdeb", - "count": 1, - "total_related": 1104, - "prevalence": 0.0009057971014492754 - }, - { - "value": "b36c58765729cac857c2497348d82ac7e8887895a0464068b91096974d5693cb", - "count": 1, - "total_related": 1104, - "prevalence": 0.0009057971014492754 - }, - { - "value": "e541b6eeeee6d81b38640844cf52168ff6113c764385eef31535453a5f335713", - "count": 1, - "total_related": 1109, - "prevalence": 0.0009017132551848512 - }, - { - "value": "264833a1084484822a03d25412f00ceedad8413c008f6f827f3b7756fdd15f98", - "count": 1, - "total_related": 1114, - "prevalence": 0.0008976660682226212 - }, - { - "value": "a53320f1e358fb6e8a5f6f2a0d2f3666c829e3473a57b9189a22616f6429b432", - "count": 1, - "total_related": 1117, - "prevalence": 0.0008952551477170994 - }, - { - "value": "f202094b4b5b89843fe5013360a41f6c5f8bd624e8c432a3862002500e12ab7f", - "count": 1, - "total_related": 1122, - "prevalence": 0.00089126559714795 - }, - { - "value": "1f991314e49d37ecb62a23c6ad06ef51430047bfc74ca77ae20d9562afdee9c8", - "count": 1, - "total_related": 1123, - "prevalence": 0.0008904719501335708 - }, - { - "value": "668b3fba8167b4c9d6ae478b1ce0d72cb7e1d601e03ef72ab3c68b855b6ba51a", - "count": 1, - "total_related": 1128, - "prevalence": 0.0008865248226950354 - }, - { - "value": "1c10a41c6e39e25e5891530f633b9a6f158d137e3b7d9508071cb2ee2a7269cb", - "count": 1, - "total_related": 1134, - "prevalence": 0.0008818342151675485 - }, - { - "value": "328ebf6cb164b47c43442a376a363a66f580ce927f97f3055e0b24a6cc464f50", - "count": 1, - "total_related": 1139, - "prevalence": 0.000877963125548727 - }, - { - "value": "284c3d89b87b3cad2eaac2564ac633b254291d7754263ec74a537d5260483743", - "count": 1, - "total_related": 1155, - "prevalence": 0.0008658008658008658 - }, - { - "value": "61986f6e92a3f1412b72a08164097a88f1c02c67164fd40f060244fdd4c66898", - "count": 1, - "total_related": 1166, - "prevalence": 0.0008576329331046312 - }, - { - "value": "6902c45d881c1c34bfdfbf23fffc9babde095f2f27ed6eb27401ed7e617121a8", - "count": 1, - "total_related": 1169, - "prevalence": 0.000855431993156544 - }, - { - "value": "cfaf5ec0a82512d758a944e103c3b795e0efd1555906c38c6010e66634a8504b", - "count": 1, - "total_related": 1169, - "prevalence": 0.000855431993156544 - }, - { - "value": "b7e10b7936c62d2aa037963b0ed4acb565d1cf2eec79fb454640d305a8cc5d20", - "count": 1, - "total_related": 1182, - "prevalence": 0.0008460236886632825 - }, - { - "value": "66da3350ba7d911d19a0719df8d86bbd0754ca6dc95de83a69e0296c07fe9028", - "count": 1, - "total_related": 1183, - "prevalence": 0.0008453085376162299 - }, - { - "value": "f0b9d60d5f5daaf3f631c3d5f745eb56e4319152dd42ac64cce9195aec8c4c6a", - "count": 1, - "total_related": 1187, - "prevalence": 0.0008424599831508003 - }, - { - "value": "eba528e2255586835b47bef4d26618e1c4ffecb9b33dd69641d5cb323fd3797f", - "count": 1, - "total_related": 1195, - "prevalence": 0.0008368200836820083 - }, - { - "value": "f3b831cd002ac754f2d1a5688de16372f280e2a46c1f22b18699443b1f08a64e", - "count": 1, - "total_related": 1213, - "prevalence": 0.0008244023083264633 - }, - { - "value": "a6a595abed32bd1a1b891a64a18bf29f2dedd40b0773048788918127c2f9f6aa", - "count": 1, - "total_related": 1229, - "prevalence": 0.0008136696501220504 - }, - { - "value": "5467879fec91b9e4b66bcbd404f368cff1d6c93132c5a098792db9bfe85fbbbd", - "count": 1, - "total_related": 1233, - "prevalence": 0.0008110300081103001 - }, - { - "value": "3d3b7715ca6abda08d02e265565f793b4f49ba6e2cecf0ab6b65ba47b4aa3c9d", - "count": 1, - "total_related": 1234, - "prevalence": 0.0008103727714748784 - }, - { - "value": "3e4f08b9e95dfabe8ed918006be7d43e007452cce73b96180473b59b4ee7a5a8", - "count": 1, - "total_related": 1234, - "prevalence": 0.0008103727714748784 - }, - { - "value": "7d13ab9a28f016b4ce894aa066ffe2ba93c62272a02bd071b0dca154adcd5535", - "count": 1, - "total_related": 1234, - "prevalence": 0.0008103727714748784 - }, - { - "value": "8520cd601d40478e0b116bbf747de706022c59981d7af6efd6856f398f4244f8", - "count": 1, - "total_related": 1234, - "prevalence": 0.0008103727714748784 - }, - { - "value": "90e2f01e8dd0b829f476aa158d5e0b2838eceab858195d3d52a395c8028bcebe", - "count": 1, - "total_related": 1234, - "prevalence": 0.0008103727714748784 - }, - { - "value": "b5d11161d4edecef2fb7e9d63661a413de85ea325f7fc2086c5d1d0fc4112ba8", - "count": 1, - "total_related": 1273, - "prevalence": 0.0007855459544383347 - }, - { - "value": "8948d123935f72d6bae9480e6065de6bee7d6fe4ff6ce4859af41a7390a96712", - "count": 1, - "total_related": 1361, - "prevalence": 0.0007347538574577516 - }, - { - "value": "8f7ea9104181180010a856a41f7e257dbd35a5bccfd836e255403a440f6e64e6", - "count": 1, - "total_related": 1378, - "prevalence": 0.000725689404934688 - }, - { - "value": "1606d681e69cf90aa0e9673c89a28b6f8c18eec60848bd6bc62308fe1bcaa960", - "count": 1, - "total_related": 1399, - "prevalence": 0.0007147962830593281 - }, - { - "value": "f1986799c969c3ea6d57fb47c0ee07e2a802021d742e3dba79dc7d8ad750e813", - "count": 1, - "total_related": 1407, - "prevalence": 0.0007107320540156361 - }, - { - "value": "470e0695a9064fa397a24adab0eb26d78896975416d87241bca029f9f003f3d5", - "count": 1, - "total_related": 1427, - "prevalence": 0.000700770847932726 - }, - { - "value": "5963bd9d8207255dd8f6a8c1ef45f61ff2b8281adb7c0bf41c875bfe03527397", - "count": 1, - "total_related": 1430, - "prevalence": 0.0006993006993006993 - }, - { - "value": "8b73436e83728da63352eec365dcc32d23ec88b79fbd68de98870873a9ddf105", - "count": 1, - "total_related": 1430, - "prevalence": 0.0006993006993006993 - }, - { - "value": "627b70755a693d7b772bcbc95ca694a2f58fbfeb954092b94ed4bb49ae71e41b", - "count": 1, - "total_related": 1432, - "prevalence": 0.0006983240223463687 - }, - { - "value": "01823d6255f9d953f99f2a1d96a29fe3c3abe5952d9f5ad18a000e671b4662e7", - "count": 1, - "total_related": 1433, - "prevalence": 0.0006978367062107466 - }, - { - "value": "4f5b365f204f0d8a1c09c34f0d253d0cacd21db612c7296e958545f90a6cb23e", - "count": 1, - "total_related": 1436, - "prevalence": 0.0006963788300835655 - }, - { - "value": "5744a32f5cd4894b2cd1d90315b8a339a93cbbc2f4651d35ecb1a587be7affe7", - "count": 1, - "total_related": 1436, - "prevalence": 0.0006963788300835655 - }, - { - "value": "30bda4d9607302d6441c8eed9fe08035d096f733fe27485c97c1d4b045c4b2b7", - "count": 1, - "total_related": 1998, - "prevalence": 0.0005005005005005005 - } - ], - "tags": [ - { - "value": "exploit", - "count": 6 - }, - { - "value": "cve-2021-26855", - "count": 5 - }, - { - "value": "java", - "count": 3 - }, - { - "value": "zip", - "count": 3 - }, - { - "value": "cve-2021-27065", - "count": 2 - }, - { - "value": "html", - "count": 2 - }, - { - "value": "cpp", - "count": 1 - }, - { - "value": "cve-2021-34473", - "count": 1 - }, - { - "value": "known-distributor", - "count": 1 - }, - { - "value": "ruby", - "count": 1 - } - ], - "vhash": [ - { - "value": "e2adf132b5495315a4d9ca9fb3d7e038", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "7c1603b1df9777e5ef6f7c5d24d83b33", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "0a0d5c66e39f53f1675e23d347ecccfb", - "count": 1, - "total_related": 409, - "prevalence": 0.0024449877750611247 - } - ], - "tlshhash": [ - { - "value": "T103F1A793949388E593B041D2E45CE700FAE5375B643E1423FA3C5A2F4FBDA1790A21FA", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T115F1B883949388A593B041D2E45CE700FAE5375B643A1423FB3C5A2F4FB9A1794D21FA", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T123A42324C412FC5BEE7D89FA083486C5C5381A028B1CD56119CE36F592A64396FBE7BF", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T13B12C745B0C20139C1F28582AADA9C46CB0E21C3C6E46466B7FC869F0F781D57A736DB", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T13CA2E8D768A7007A1782C1E26CDF9A019B1D20479A883A34BF5C519D1F4D07AF2F67F2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T15F830217693E5EB4C48482C423D12CCBDE6829559C3FAFA54D1C71B29D1C8BEE096ECE", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T1B1814B80B56FF20FCDE1B4FF6C66911675BB5D1380A8889522A28EB31D4BBC8477026C", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T1BBF1B943A483C8E583B441C1E058E705FAE6265BA43E6413FB3C9A2F4FB8E1794A15F9", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - } - ], - "crowdsourced_yara_results": [ - { - "value": { - "id": "0007bbfc16|WEBSHELL_ASP_By_String", - "ruleset_id": "0007bbfc16", - "ruleset_name": "gen_webshells", - "rule_name": "WEBSHELL_ASP_By_String", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 3, - "total_related": 1519, - "prevalence": 0.0019749835418038184 - }, - { - "value": { - "id": "00095e3ce6|WEBSHELL_HAFNIUM_CISA_10328929_01", - "ruleset_id": "00095e3ce6", - "ruleset_name": "apt_hafnium", - "rule_name": "WEBSHELL_HAFNIUM_CISA_10328929_01", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 3, - "total_related": 3180, - "prevalence": 0.0009433962264150943 - }, - { - "value": { - "id": "0007bbfc16|WEBSHELL_ASP_Generic", - "ruleset_id": "0007bbfc16", - "ruleset_name": "gen_webshells", - "rule_name": "WEBSHELL_ASP_Generic", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 3, - "total_related": 4431, - "prevalence": 0.0006770480704129993 - }, - { - "value": { - "id": "0007bbfc16|WEBSHELL_ASP_Generic_Eval_On_Input", - "ruleset_id": "0007bbfc16", - "ruleset_name": "gen_webshells", - "rule_name": "WEBSHELL_ASP_Generic_Eval_On_Input", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 3, - "total_related": 13981, - "prevalence": 0.0002145769258279093 - }, - { - "value": { - "id": "0007bbfc16|webshell_asp_by_string", - "ruleset_id": "0007bbfc16", - "ruleset_name": "gen_webshells", - "rule_name": "webshell_asp_by_string", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 2, - "total_related": 2313, - "prevalence": 0.0008646779074794639 - }, - { - "value": { - "id": "0007bbfc16|WEBSHELL_asp_generic", - "ruleset_id": "0007bbfc16", - "ruleset_name": "gen_webshells", - "rule_name": "WEBSHELL_asp_generic", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 2, - "total_related": 3687, - "prevalence": 0.0005424464334147003 - }, - { - "value": { - "id": "0007bbfc16|webshell_asp_generic_eval_on_input", - "ruleset_id": "0007bbfc16", - "ruleset_name": "gen_webshells", - "rule_name": "webshell_asp_generic_eval_on_input", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 2, - "total_related": 7279, - "prevalence": 0.0002747630168979255 - } - ], - "embedded_domains": [ - { - "value": "proxylogon.com", - "count": 2, - "total_related": 328, - "prevalence": 0.006097560975609756 - }, - { - "value": "metasploit.com", - "count": 2, - "total_related": 50792, - "prevalence": 0.00003937627972909119 - }, - { - "value": "btwaf.cn", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "o2oxy.cn", - "count": 1, - "total_related": 52, - "prevalence": 0.019230769230769232 - }, - { - "value": "www.o2oxy.cn", - "count": 1, - "total_related": 73, - "prevalence": 0.0136986301369863 - }, - { - "value": "testbnull.medium.com", - "count": 1, - "total_related": 289, - "prevalence": 0.0034602076124567475 - }, - { - "value": "praetorian.com", - "count": 1, - "total_related": 874, - "prevalence": 0.0011441647597254005 - }, - { - "value": "www.praetorian.com", - "count": 1, - "total_related": 1069, - "prevalence": 0.0009354536950420954 - }, - { - "value": "aka.ms", - "count": 2, - "total_related": 100000, - "prevalence": 0.00002 - }, - { - "value": "github.com", - "count": 2, - "total_related": 100000, - "prevalence": 0.00002 - }, - { - "value": "en.wikipedia.org", - "count": 1, - "total_related": 100000, - "prevalence": 0.00001 - }, - { - "value": "githubusercontent.com", - "count": 1, - "total_related": 100000, - "prevalence": 0.00001 - }, - { - "value": "medium.com", - "count": 1, - "total_related": 100000, - "prevalence": 0.00001 - }, - { - "value": "raw.githubusercontent.com", - "count": 1, - "total_related": 100000, - "prevalence": 0.00001 - }, - { - "value": "schemas.xmlsoap.org", - "count": 1, - "total_related": 100000, - "prevalence": 0.00001 - }, - { - "value": "twitter.com", - "count": 1, - "total_related": 100000, - "prevalence": 0.00001 - }, - { - "value": "wikipedia.org", - "count": 1, - "total_related": 100000, - "prevalence": 0.00001 - }, - { - "value": "xmlsoap.org", - "count": 1, - "total_related": 100000, - "prevalence": 0.00001 - } - ], - "embedded_ips": [ - { - "value": "127.0.0.1", - "count": 1, - "total_related": 100000, - "prevalence": 0.00001 - } - ], - "file_types": [ - { - "value": "html", - "count": 2 - }, - { - "value": "ruby", - "count": 1 - } - ], - "filecondis_dhash": [ - { - "value": "ba3cbc9c94868680", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - } - ], - "popular_threat_category": [ - { - "value": "trojan", - "count": 2 - }, - { - "value": "hacktool", - "count": 1 - } - ], - "popular_threat_name": [ - { - "value": "python", - "count": 2 - }, - { - "value": "webshell", - "count": 2 - } - ], - "suggested_threat_label": "trojan.webshell/python", - "embedded_urls": [ - { - "value": "https://proxylogon.com/images/logo.jpg", - "count": 2, - "total_related": 17, - "prevalence": 0.11764705882352941 - }, - { - "value": "http://aka.ms/exchangevulns", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "https://proxylogon.com/", - "count": 2, - "total_related": 232, - "prevalence": 0.008620689655172414 - }, - { - "value": "https://metasploit.com/download", - "count": 2, - "total_related": 7819, - "prevalence": 0.0002557871850620284 - }, - { - "value": "https://github.com/rapid7/metasploit-framework", - "count": 2, - "total_related": 9898, - "prevalence": 0.00020206102242877348 - }, - { - "value": "https://twitter.com/lotusdll/status/1371465073525362691", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "https://en.wikipedia.org/wiki/2,147,483,647", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "https://github.com/Zeop-CyberSec/proxylogon_writeup", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "https://raw.githubusercontent.com/microsoft/CSS-Exchange/main/Security/http-vuln-cve2021-26855.nse", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "https://www.o2oxy.cn/3169.html", - "count": 1, - "total_related": 17, - "prevalence": 0.058823529411764705 - }, - { - "value": "https://github.com/praetorian-inc/proxylogon-exploit", - "count": 1, - "total_related": 18, - "prevalence": 0.05555555555555555 - }, - { - "value": "https://testbnull.medium.com/ph%C3%A2n-t%C3%ADch-l%E1%BB%97-h%E1%BB%95ng-proxylogon-mail-exchange-rce-s%E1%BB%B1-k%E1%BA%BFt-h%E1%BB%A3p-ho%C3%A0n-h%E1%BA%A3o-cve-2021-26855-37f4b6e06265", - "count": 1, - "total_related": 18, - "prevalence": 0.05555555555555555 - }, - { - "value": "https://www.praetorian.com/blog/reproducing-proxylogon-exploit", - "count": 1, - "total_related": 18, - "prevalence": 0.05555555555555555 - }, - { - "value": "https://twitter.com/testanull", - "count": 1, - "total_related": 34, - "prevalence": 0.029411764705882353 - }, - { - "value": "http://127.0.0.1:8080/", - "count": 1, - "total_related": 100000, - "prevalence": 0.00001 - }, - { - "value": "http://schemas.xmlsoap.org/soap/envelope/", - "count": 1, - "total_related": 100000, - "prevalence": 0.00001 - } - ] - } - } + "tags_details": [], + "aggregations": {} }, "context_attributes": { "shared_with_me": false, diff --git a/external-import/google-ti-feeds/tests/custom/debug_responses/malware_families_39b26d46dfe989dc.json b/external-import/google-ti-feeds/tests/custom/debug_responses/malware_families_39b26d46dfe989dc.json index 7aeca54da95..0d2b64b7bf9 100644 --- a/external-import/google-ti-feeds/tests/custom/debug_responses/malware_families_39b26d46dfe989dc.json +++ b/external-import/google-ti-feeds/tests/custom/debug_responses/malware_families_39b26d46dfe989dc.json @@ -1,24765 +1,228 @@ -{ - "request_info": { - "endpoint": "https://www.virustotal.com/api/v3/collections/malware--4e596360-8a5c-5c36-ae0d-20ffb5f2ffb5", - "query_params": {}, - "entity_type": "malware_families", - "method": "GET" - }, - "response": { - "id": "malware--4e596360-8a5c-5c36-ae0d-20ffb5f2ffb5", - "type": "collection", - "links": { - "self": "https://www.virustotal.com/api/v3/collections/malware--4e596360-8a5c-5c36-ae0d-20ffb5f2ffb5" - }, - "attributes": { - "name": "LOCKBIT", - "collection_type": "malware-family", - "creation_date": 1714525368, - "last_modification_date": 1746810672, - "description": "LOCKBIT is a ransomware written in C that encrypts files stored locally and on network shares. LOCKBIT can also identify additional systems on a network and propagate via SMB. Prior to encrypting files, LOCKBIT clears event logs, deletes volume shadow copies, and terminates processes and services that may impact its ability to encrypt files. LOCKBIT has been observed using the file extension \".lockbit\" for encrypted files.", - "status": "COMPUTED", - "private": true, - "origin": "Google Threat Intelligence", - "recent_activity_relative_change": 0.2512965582272513, - "recent_activity_summary": [ - 45, - 78, - 241, - 186, - 235, - 143, - 130, - 248, - 193, - 238, - 239, - 221, - 266, - 191 - ], - "top_icon_md5": [ - "e21f903eeb690b791366657cadd961c8", - "3b36af321d209e469c76fc37944ff2de", - "f8c8b6bdb6532052a5e709c0c2b7d69a" - ], - "counters": { - "attack_techniques": 82, - "domains": 32, - "files": 263, - "iocs": 323, - "ip_addresses": 0, - "subscribers": 10, - "urls": 28 - }, - "aggregations": { - "domains": { - "attributions": [ - { - "value": "lockbit", - "count": 32, - "total_related": 39, - "prevalence": 0.8205128205128205 - }, - { - "value": "lockbit_black", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - } - ], - "communicating_files": [ - { - "value": "addf5e245622562eb44eb6ac3a80fa18eef1c3f6544ec5cbdfad1a0f56dbd24d", - "count": 6, - "total_related": 7, - "prevalence": 0.8571428571428571 - }, - { - "value": "3f7518d88aefd4b1e0a1d6f9748f9a9960c1271d679600e34f5065d8df8c9dc8", - "count": 5, - "total_related": 6, - "prevalence": 0.8333333333333334 - }, - { - "value": "15306331281bba9dae9a8c13b02d24137650cfe293cad61ec2580c9a70194eb1", - "count": 4, - "total_related": 5, - "prevalence": 0.8 - }, - { - "value": "505aebf78a04697109439d5486784f398e8c5d25a378eda3a8468898717117a5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "c02c2d50b0db4e1617c6f2b540da82f2ffde99021abf57e3cf9e2f397fd95d1c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "d27414e4dfdd52972b0d10609e7863216970333b594ea116b9d3f51d3452b0d1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "dd233ba27434f4b57a70be21dd3439ec20357de4db7e449f926fb9d614065e7b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "df7689e07edcce1375986a93b9d2602bcab03289bcbb1f5ef0ac38a4f88f9d92", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "e8a9e20cfe3925d7c9dce8442f02e35ec4bd8635e77dc63bb82e2aa35c2526af", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2dbb391b69ae1de7e1dbc0682b5067fe290f95a11c74d00cc091c281b39dd299", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "3b6c8dd26c13a3948b9cf5715f9116605fbfefea473654edf170f8a60559db44", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "50fad26d726e0af6dbed3225267934ae9ef22b31e48fc623ce93ba582a7e6110", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "80ca2d64e3c2cf638505a7507541d5555006975049fde6dd3aec21700e07bb8f", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "ed266b1b8b19de457d48a7bfe4c6094557b35734cb63362a63a1a5392083bce7", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "49261ea0d0c417ebae0e0fb1e56ad02cb7fe9ae16a76edb7c4e70c754b53370f", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "4dea507ca4bd6b25086b0434bad147b836344ce98297bed4e281ac7728ebbba8", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "96803a7ef46835e00bf118a5e1503f69d1192c2a0209d6657429728d2d8f4995", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "9d8f5588b48fc66526ba8f77c16fb1aff50d1e04bf27ac65302df12793631339", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "2308383d23a301fbe5ee72ec2e3debbb0be6d52931131618991eec02b1a412b2", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "59079046eb379ea3e28e5632a2ad5b689cbf8d666c06f5655d04fe89a39d15e8", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "9be210d0ec809c0691a25d51e31ae27aaedab47625c2b4b598a422703a1a2620", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "d628254cb049a9a19113098aef6eccf268606790aae1c72de39456a48273123f", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "2f9d3ba9126e15fe049c38aba2654fbb19ef40207f7c5a5a8b88067227dfea50", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "32342589ee1a0ab575ba8011b8b395b1a0ab0f18911ecc16b7fb6837fad3c4b8", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "482e2544ec866fdbc28d043e12001fc0ae50ae947b84e089d33c11b90509bc5c", - "count": 1, - "total_related": 274, - "prevalence": 0.0036496350364963502 - } - ], - "downloaded_files": [ - { - "value": "398fd00a81f595137d32068aec4f43b9f5e6e857eda923e5d4c4d222c76a2a24", - "count": 9, - "total_related": 106, - "prevalence": 0.08490566037735849 - }, - { - "value": "6f7e3d2fab38377f2b617c8d80df553d1b821614e8c0f8dd3cec3ad71376c1d7", - "count": 9, - "total_related": 180, - "prevalence": 0.05 - }, - { - "value": "0b530b77ca10c94f6363d133668189edc96da100ecaa2170de7bff5d4788d14d", - "count": 9, - "total_related": 319, - "prevalence": 0.02821316614420063 - }, - { - "value": "309564872de7cab1fddbf4007218a7cbeeef921dba3fe46480935c21424f59bc", - "count": 4, - "total_related": 10, - "prevalence": 0.4 - }, - { - "value": "67ef67559d33119ed7db82d7651279fb5ba81a87fa0ed2074b86d960ed370bd7", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "8d726669d9070b5be66c531ecdccecc62046d659dae817c27f3374cd6c316a0f", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "b29e7c85e4c0e615409b897ad320f998cb7ce8a1597b0291ff3f1fcccec04b73", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "85ff1c593e09cb8170d43056ca3ee0c5e6ff0692fbfdd4cb276eb2775040431c", - "count": 1, - "total_related": 18, - "prevalence": 0.05555555555555555 - }, - { - "value": "eb7ebf9c44e77fca115ca9b67a23a4f597cadb32bbd87d13e4d6e901b27f367e", - "count": 1, - "total_related": 30, - "prevalence": 0.03333333333333333 - }, - { - "value": "d8fac2e9a42b868b1267b77df52092cf94f462f20649366d9685f7036355dc78", - "count": 1, - "total_related": 60, - "prevalence": 0.016666666666666666 - }, - { - "value": "940675ecb4e589745fc11faa306d22b111449c183c22589d5b6b6c994f2deddc", - "count": 1, - "total_related": 185, - "prevalence": 0.005405405405405406 - }, - { - "value": "282be5a98bb173bb0aa7f71ffd4c700716f1e02c19ff84adb53fd80dfcadb5b0", - "count": 1, - "total_related": 238, - "prevalence": 0.004201680672268907 - }, - { - "value": "94c3890863031cb311449f0b6a91de28deea1bd533b9b4cfabda8a7ff3387774", - "count": 1, - "total_related": 271, - "prevalence": 0.0036900369003690036 - }, - { - "value": "c3a12f80e1ae26824136918883d14f6751c71c0d6f2859601409130227f4e95d", - "count": 1, - "total_related": 301, - "prevalence": 0.0033222591362126247 - } - ], - "urls": [ - { - "value": "hhttp://monti5o7lvyrpyk26lqofnfvajtyqruwatlfaazgm3zskt3xiktudwid.onion/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbit3jx6je7tm6hhm6zzafgy6hpil3ur6jmc2a4ugan7xzztv6oqd.onion/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly/page3.html", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly/post/GbQQlil3RxkcWgAx649df4b358057", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly/post/nd4ZEVI8rgC0wRaa6531106e08ca3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly/public/css/app.css", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly/public/img/cloud-mirror.svg", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/)", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/bug-bounty", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/conditions", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/ec_page3.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/favicon.ico", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/mirrors", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/page2.html", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/page3.html", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/page3.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/15WIYKgTiyZXHFij632b28b0d4b47?download_archive", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/1yGSUjAKKFUiPXpW62e00d895f989", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/2TKuSBWLO9Xj8wYh6346d4df63eea", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/2cfbxweuXie9IhZT6571860c584b3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/3D8S98Jj5oyImufU652daa591", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/4g9cwirb4magmh6m6581ee9d52fd0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/5SwZtCIPCJkJLoom6502e5b61d25b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/5aa75cGbaX7rb%20PnK64da276229c1c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/6ZFYlV51rfrSx8EO65473fa1d8b12", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/6wadKRf0TAaXnJFg655dbe7dcd67c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/8zpoHVV8fDdZjRue64f34bda76b59,,Das", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/9FXJBTlwsQHUllcS64c0f86a6f6ed", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/9aQrt6idTIVygsu3643826d949d17", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/9|/Y2fpFe%20C4ml6Ud62cc276550736", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/AInQB8pgKPhnQIZ364da6d6562770,,\\\"Headquartered", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/Ksf0V7pNNwF6HIc3632b2cb5bb19e?download_archive", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/L107zTa4UccNfDp562d695f5bdbf0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/L4sCa4MjJP2kuGyx653fbf147", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/OEtdflvLlTT8wLxE64185a7eafa31", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/OZ11yP32uQRaBeOI62e3d3c30c19c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/PHGKqcDAe6MRLtuT64c0b9f2c8b63", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/RbVJA9aK70XvgWYu651b4b2a183ec", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/SWbgobA8OMFDDz4B6410edb943796", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/UN7ztWR4ULIuF0xW655dbf254009a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/UaT8i3f7vcgXAxUp6538273164c84", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/W0wJk62edYT7jrvM6441bf00dba2e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/XgSBRG356wX2Neuk656b95f474870", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/Y7n3Q3WiUL3XGZiu6412dbc2d7dfe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/YCooW1gTutkETH1m642aa4d5d9c32", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/YE23OUQ0eKmGrTin654bec2a6c537", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/afawnyv522gohdpb65c405b57c860", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/auhOwWRRuvRKfiag643de79bb1613", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/brit7of7zkygxomz6584d965c7eb9", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/cpdv8mxxmmpbntlb65c54a7c76b85", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/dpGGTXwJUYMy8cTW63002f8b14b9c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/evdiW9VNDhkOlapY656ed9dd059d2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/fqf5uhnz0tew9ueu6584d8475cce6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/gjZovjwoRd45667u642528e274d23", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/gxepsaiy8vcptxc364ee35558c18f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/ienBAuYW1NPTpP8E6412dacad", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/irCb7TR26ZAj2w0J65b28e37117d6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/koLBVr3DyxOi3oFT6438e6e91cd3b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/kylVIz6qhJT9plrI6412ded8bd52c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/lwgu87uwgi0woesq65701c989bbb5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/oj8tk3qqqpdjrboe65cf1bc14ce9f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/olj0G2cMEtPYad5565377907a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/p1gv6eqqa7lttidp65c5380f3c4ee", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/pXNIXYHx41ZnpXDo6329751800a17", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/qEHYNGa12f4hKrmL64e1c7102ae2f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/rappER3oZWEYqjzg64cadc43031f3%C2%BB?", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/rwmUH1oZo4zTC7tv6572e5420940b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/tjswu9noddwwsfo865cf0428d543e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/tvEmpPOMW8QObXYs65c9d73f9fba8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/wzzs5vgd5r0ni8ji65cde24bbc436", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/xdUKTdprAXGSkYVE63f52ef078a96", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/xyjkcpn4m4grzvwi64d375bd1c0a7", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/yKm4iW5XBvp6EvFH654e99f70b89e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/z56cW2OOAoAH7tRf63845fb26d907", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/zcrrG5l18LHHt2Ym64629612ac716", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/post/zkpgWSIiBU6TNmPR632b2c578c867?download_archive", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/posts/affil-exposed", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/posts/affil-exposed.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/posts/french-action.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/posts/infra-disrupted.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/posts/japan-europol-recovery.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/posts/lbsupp-whoishe.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/posts/leaks/core/VM2_CORE_ADMIN_2.png", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/posts/lockbit-leaks.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/posts/lockbit-linked-uk-arrests.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/posts/remember-this.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/posts/unseen-photos.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/rules", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion/}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion/)", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion/FrigorificosBandeira", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion/_kfisher", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion/_mk", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion/_oomiya", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion/artdis", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - } - ], - "registrant_names": [ - { - "value": "lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "lockbitapt72iw55njgnqpymggskg5yp75ry7rirtdg4m7i42artsbqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "lockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "lockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - } - ] - }, - "files": { - "itw_urls": [ - { - "value": "http://119.28.78.133/LB3.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://147.78.47.125/LB3.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://174.138.23.254/boom/LB3.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://185.215.113.101/file/380g.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://185.215.113.41/files/5804781818/eZp5zCz.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://185.39.17.162/files/7244183739/LWHqO19.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://196.251.118.210/d/rr.dll", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://196.251.118.210/d/rr.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://196.251.118.210/d/rref.dll", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://23.26.137.225:8091/chromeset.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://23.92.208.51:8080/RW.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://34.80.156.164/svchost.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://37.48.67.140/K1OhgVFP6UopuqKiR7UXphJWH5YfWJ", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://80.64.18.219/files/7244183739/ejjSND0.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://83.149.110.52/3q4sdxInRIP1iYetMaIJPh2XS9bswg", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://83.149.110.52/O1qh2VfOksE4uWetMyT0dhJbHaQIoa", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/000026190486/scenario/417200___0e3e4323-7e68-4d95-8d04-0ee0f6f84791.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/000169122020/scenario/749913___3bcd26ec-5404-4169-8e9a-6c71845eebd8.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/000211694729/scenario/843740___b35d00a6-22f8-45a6-8e57-90e255309115.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/000317403225/scenario/337044___a00ecdd3-ff92-4a64-a7c3-7872325f9657.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/000317418366/scenario/300820___be3dadf7-7787-4729-8b35-62875dc17320.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/000324692150/scenario/233443___b7456c56-3c5c-43d7-bbce-b6f468fac1c5.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/000380646472/scenario/444644___eae2a563-bc79-4fb0-8c90-d4a0d457cb5d.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/000446281047/scenario/304922___c525f412-8eef-491d-99c1-04e421fdd4a4.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/000617868958/scenario/704624___b4186d87-4efd-4ee0-9f07-6c5ebd04a97e.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/000625801907/scenario/226042___5aefb792-ad03-4f92-a9b7-340d1567f8d3.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/000653215217/scenario/419714___364663e9-58f0-4c9c-b92d-433564f911fa.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/000668788197/scenario/680912___6f02fba3-b91f-4286-904f-55d75ff1732d.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/000701482018/scenario/597734___7beea843-9837-40cf-aaf9-0efb8565e5b9.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/000766061438/scenario/462881___03953c73-34ff-426f-8683-04fcd6b9cb1d.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/000813408289/scenario/492838___22597b46-c835-4f00-a58f-7814c9483d08.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/000843967329/scenario/328787___0dd10c46-e5c7-4028-96cd-6c922d65c5db.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/000967735041/scenario/679863___2ef5a7db-29c3-4c76-b5e9-2806d8380c10.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/001027926755/scenario/412063___15e29e25-7496-44d9-9e98-85036c12de8e.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/001075209743/scenario/814485___b1278634-4271-4ce8-8667-7e49ae077ddd.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/001101290507/scenario/306716___6d696369-6d83-4520-8c04-4c1e1009ea78.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/001131662132/scenario/641183___5d3cf566-c8dd-4bf0-8b1f-e60107870631.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/001243345080/scenario/799189___71458f90-2756-4137-bb3f-9305d18651b0.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/001248692583/scenario/699942___406514fb-f114-4af6-8fad-59393bf4bbb2.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/001290712568/scenario/855910___d1e396c4-a1f9-4471-a1fa-096e1f51f255.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/001313435608/scenario/223712___9b315a0d-c1ba-4e4b-a9d7-37b4a1c3ddb4.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/001353636501/scenario/554614___99899836-30f5-406e-9c30-ade10d9ab846.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/001416792856/scenario/412277___dacd89b9-8693-4ae3-abb1-31b6e4c66249.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/001527173000/scenario/623425___c64b73cb-246b-4908-8fb4-0019c5b3bc9c.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/001609970327/scenario/877015___510d8308-c4ac-4ec6-b32e-9d348480d2cc.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/001691834362/scenario/374769___331f3972-fac0-4078-935d-3e39994f4d75.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/001778190467/scenario/636743___9040ac7d-d861-4a3b-834f-1c30b765a177.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/001793909884/scenario/412063___15e29e25-7496-44d9-9e98-85036c12de8e.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/001861139060/scenario/704624___b4186d87-4efd-4ee0-9f07-6c5ebd04a97e.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/001896711985/scenario/882556___c53d1a17-65da-4d97-9c65-449af4b80fb2.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/002011882129/scenario/770187___991a10fa-2455-494b-a74c-1aabd2e90e1a.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/002020156442/scenario/370371___5fdb5737-ac1c-41db-8f40-5f9260407f97.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/002029038073/scenario/891381___2ba85d0b-d72a-46f6-b598-58b0ef6b0936.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/002034316341/scenario/567682___89ef17c4-d109-4b80-8684-2c8b488ed7ef.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/002041434944/scenario/658783___049d84cc-dd0f-4d4e-a35c-5f9cbada11ff.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/002098511289/scenario/796135___1cb2330d-9be9-431a-b1ed-c11e30ff933a.exe?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://raw.githubusercontent.com/petikvx/LockBit-Black-Builder/main/LockBit3Builder/Build/LB3.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://raw.githubusercontent.com/petikvx/LockBit-Black-Builder/refs/heads/main/LockBit30/Build/LB3.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://s3.us-east-1.wasabisys.com/vxugmwdb/6e07da23603fbe5b26755df5b8fec19cadf1f7001b1558ea4f12e20271263417", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://s3.us-east-1.wasabisys.com/vxugmwdb/eb82946fa0de261e92f8f60aa878c9fef9ebb34fdababa66995403b110118b12?x-amz-algorithm=aws4-hmac-sha256&x-amz-credential=4t0qtsw3aj0t4i3g983l/20240711/us-east-1/s3/aws4_request&x-amz-date=20240711t180053z&x-amz-expires=300&x-amz-signedheaders=host&x-amz-signature=35f7ee6b7fa5a7c013c45d6e43838737fb89a6897292320b319319d4efcead8e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://wdfiles.ru/rC9O?download_token=3b806f12ff8d12174dfc7a75acf9170c3f8f009574394de3d3704e510c4de248", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://174.138.23.254/boom/LB3.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://github.com/petikvx/LockBit-Black-Builder/blob/main/LockBit3Builder/Build/LB3.exe?raw=true", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://github.com/petikvx/LockBit-Black-Builder/raw/main/LockBit3Builder/Build/LB3.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://github.com/petikvx/LockBit-Black-Builder/raw/refs/heads/main/LockBit30/Build/LB3.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://jerando.com/uploads/user_617/CB-menuiserie/.store/20161121_164609.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://pcsdl.com/short-url-v2/001209761168/scenario/535429___297e2f68-cf6b-4c2e-b907-7c8085438102.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://pcsdl.com/short-url-v2/001554699068/scenario/680912___6f02fba3-b91f-4286-904f-55d75ff1732d.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://raw.githubusercontent.com/petikvx/LockBit-Black-Builder/main/LockBit3Builder/Build/LB3.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://raw.githubusercontent.com/petikvx/LockBit-Black-Builder/refs/heads/main/LockBit30/Build/LB3.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://www.pixelindustry.co.nz/w2box/?download=LB3.txt", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://185.215.113.101/file/LB3.exe", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://80.64.18.219/files/7244183739/0e9KhDv.exe", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://uploads.simosnap.com/321a1e5f6f7820df40a352964e231b64/ee9e9d6b90c5df29a52464e977b566ad", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://uploads.simosnap.com/786b2c7a7237e5e429f396ff5334d34b/ee9e9d6b90c5df29a52464e977b566ad", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://uploads.simosnap.com/dc84c8a43201fc905c6acc8cb20dbc46/ee9e9d6b90c5df29a52464e977b566ad", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://176.111.174.140/svchost.exe", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "https://master-repogen.vercel.app/file/server.scr", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "http://a1035933.xsph.ru/LB3.exe", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "http://188.120.247.108/files/4mmc.exe", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - } - ], - "contacted_urls": [ - { - "value": "http://www.microsoft.com/pki/certs/MicrosoftTimeStampPCA.crt", - "count": 24, - "total_related": 86784, - "prevalence": 0.0002765486725663717 - }, - { - "value": "http://www.microsoft.com/pki/certs/MicCodSigPCA_08-31-2010.crt", - "count": 24, - "total_related": 88270, - "prevalence": 0.00027189305539821005 - }, - { - "value": "http://0.0.0.1/", - "count": 12, - "total_related": 352, - "prevalence": 0.03409090909090909 - }, - { - "value": "https://update.googleapis.com/service/update2/json", - "count": 2, - "total_related": 33487, - "prevalence": 5.972466927464389e-05 - }, - { - "value": "http://github.org/?G9RzV=Ozl1d51AhUYka43GZ1x&mW6=a0EfMYYixF&RGVtg=KKR1fuN", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://github.org/?Rwgri38OuH=fi8WW4M8EDa9&tJo6=iTGwb6QD10pP&uzhS=IpPQLqOwrU2Ho&5oXW138mKz=rTnE4YbwwI2ywE&5aBXoI8h=hz9lCVrooE7KhDqP&YX8URGZ6OK=5spagCknd&JIY=qXAcSobpyg3vtsx&iZHwHF=WnRKXtI4&kKOntd=vjbxQv9TB&ei9Hg0Zqi=4GsRXq&Xe3=k9XE3rpPV73e&gsVP=LrGM7oiu0aRwbn&NN5ljZm=4NENO3jLb&xo4LVU01=KgjdZTy79AmNbp0Uv&3pw9Xinmpf=65yvVGi&oZu1eE=gCkk2CatDLNftjoEP7f&eQCxe=jF2DeQC72ayy&lIrR2b=hvqsUG4TGfj&kIDVVBd=RwItZXyMYWVy", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://github.org/?uLm=lRRXtQYy&L7PU=m4ciqwaZMronBvUXBx75&u3X2H1Qj=&LrQM=OS39UKWYLeesKy4iLP&tZE63Qjf=OnXn5QrhUKcWd&YCc5=1qO2lrl8ISrHFd8hD6y", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://github.org/?xQsxibO=ebxK2&8BvzXkuc=PC4IObUP96JWqX&c7nhBg=1ZbhLrmkKS2&CNRDH5X6i6=qWL7G&G9vjeZKKy=iaibqsUuYJvbd66dxG&=uY9bcqQOvve2px8XzU", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://github.org/?zTNN3=72iE", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://github.com/?G9RzV=Ozl1d51AhUYka43GZ1x&mW6=a0EfMYYixF&RGVtg=KKR1fuN", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://github.com/?Rwgri38OuH=fi8WW4M8EDa9&tJo6=iTGwb6QD10pP&uzhS=IpPQLqOwrU2Ho&5oXW138mKz=rTnE4YbwwI2ywE&5aBXoI8h=hz9lCVrooE7KhDqP&YX8URGZ6OK=5spagCknd&JIY=qXAcSobpyg3vtsx&iZHwHF=WnRKXtI4&kKOntd=vjbxQv9TB&ei9Hg0Zqi=4GsRXq&Xe3=k9XE3rpPV73e&gsVP=LrGM7oiu0aRwbn&NN5ljZm=4NENO3jLb&xo4LVU01=KgjdZTy79AmNbp0Uv&3pw9Xinmpf=65yvVGi&oZu1eE=gCkk2CatDLNftjoEP7f&eQCxe=jF2DeQC72ayy&lIrR2b=hvqsUG4TGfj&kIDVVBd=RwItZXyMYWVy", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://github.com/?xQsxibO=ebxK2&8BvzXkuc=PC4IObUP96JWqX&c7nhBg=1ZbhLrmkKS2&CNRDH5X6i6=qWL7G&G9vjeZKKy=iaibqsUuYJvbd66dxG&=uY9bcqQOvve2px8XzU", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://github.com/?zTNN3=72iE", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://update.googleapis.com/service/update2/json?cup2key=14:0xcFspjR-Mf652igbyht-1FLBIWXErCZcMMo5UILmFk&cup2hreq=5a4e3a6b277b66e67aa94765a7063865edf92e2ee1f769caef610af4d32f633c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://update.googleapis.com/service/update2/json?cup2key=14:fi4tStm1ajp7yxpl4Mu99GWIQcXW-ScFAazmuarDMSc&cup2hreq=53605224c85318033157889aec2898c24af15a99e308ea7a98096ee369585ae2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://pastebin.com/raw/Jv1P4zmq", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://91.211.250.177/24777744417c481c.php", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "https://piratetwrath.run/ytus", - "count": 1, - "total_related": 56, - "prevalence": 0.017857142857142856 - }, - { - "value": "http://e6.o.lencr.org/MFMwUTBPME0wSzAJBgUrDgMCGgUABBTUejiAQejpjQc4fOz2ttjyD6VkMQQUDcXM/ZvuFAWhTDCCpT5eisNYCdICEgaKc14QkOr/LKXh4Wlg/Shyow==", - "count": 1, - "total_related": 68, - "prevalence": 0.014705882352941176 - }, - { - "value": "http://185.215.113.41/files/unique1/random.exe", - "count": 1, - "total_related": 87, - "prevalence": 0.011494252873563218 - }, - { - "value": "http://185.215.113.41/test/exe/random.exe", - "count": 1, - "total_related": 94, - "prevalence": 0.010638297872340425 - }, - { - "value": "http://185.215.113.41/files/fate/random.exe", - "count": 1, - "total_related": 96, - "prevalence": 0.010416666666666666 - }, - { - "value": "http://185.215.113.41/files/unique2/random.exe", - "count": 1, - "total_related": 96, - "prevalence": 0.010416666666666666 - }, - { - "value": "http://185.215.113.41/well/random.exe", - "count": 1, - "total_related": 102, - "prevalence": 0.00980392156862745 - }, - { - "value": "http://185.215.113.41/off/random.exe", - "count": 1, - "total_related": 111, - "prevalence": 0.009009009009009009 - }, - { - "value": "http://185.215.113.41/luma/random.exe", - "count": 1, - "total_related": 118, - "prevalence": 0.00847457627118644 - }, - { - "value": "http://185.215.113.41/mine/random.exe", - "count": 1, - "total_related": 162, - "prevalence": 0.006172839506172839 - }, - { - "value": "http://185.215.113.59/Dy5h4kus/index.php", - "count": 1, - "total_related": 309, - "prevalence": 0.003236245954692557 - }, - { - "value": "https://changeaie.top/geps", - "count": 1, - "total_related": 369, - "prevalence": 0.0027100271002710027 - }, - { - "value": "https://clarmodq.top/qoxo", - "count": 1, - "total_related": 920, - "prevalence": 0.0010869565217391304 - }, - { - "value": "http://ocsp.sectigo.com/MFEwTzBNMEswSTAJBgUrDgMCGgUABBTPlNxcMEqnlIVyH5VuZ4lawhZX3QQU9oUKOxGG4QR9DqoLLNLuzGR7e64CEE4o94a2bBo7lCzSxA63QqU=", - "count": 1, - "total_related": 2345, - "prevalence": 0.00042643923240938164 - }, - { - "value": "http://ocsp.usertrust.com/MFIwUDBOMEwwSjAJBgUrDgMCGgUABBSr83eyJy3njhjVpn5bEpfc6MXawQQUOuEJhtTPGcKWdnRJdtzgNcZjY5oCEQDzZE5rbgBQI34JRr174fUd", - "count": 1, - "total_related": 7376, - "prevalence": 0.00013557483731019523 - }, - { - "value": "http://armmf.adobe.com/arm-manifests/win/ServicesUpdater/DC/RdrManifest2.msi", - "count": 1, - "total_related": 42882, - "prevalence": 2.331980784478336e-05 - }, - { - "value": "http://armmf.adobe.com/arm-manifests/win/ArmManifest3.msi", - "count": 1, - "total_related": 51213, - "prevalence": 1.9526292152383183e-05 - }, - { - "value": "http://detectportal.firefox.com/success.txt?ipv4", - "count": 1, - "total_related": 75297, - "prevalence": 1.3280741596610755e-05 - }, - { - "value": "http://crt.sectigo.com/SectigoPublicCodeSigningCAR36.crt", - "count": 52, - "total_related": 100000, - "prevalence": 0.00052 - }, - { - "value": "http://crt.sectigo.com/SectigoPublicCodeSigningRootR46.p7c", - "count": 51, - "total_related": 100000, - "prevalence": 0.00051 - }, - { - "value": "http://download.windowsupdate.com/d/msdownload/update/others/2015/05/17930914_a3b333eff1f0428f5a2c87724c542504821cdbd8.cab", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "http://www.msftncsi.com/ncsi.txt", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "http://ip-api.com/line/?fields=hosting", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "http://ocsp.comodoca.com/MFEwTzBNMEswSTAJBgUrDgMCGgUABBRTtU9uFqgVGHhJwXZyWCNXmVR5ngQUoBEKIz6W8Qfs4q8p74Klf9AwpLQCEFZnHQTqT5lMbxCBR1nSdZQ=", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "contacted_domains": [ - { - "value": "23.125.168.192.in-addr.arpa", - "count": 9, - "total_related": 11660, - "prevalence": 0.0007718696397941681 - }, - { - "value": "13.125.168.192.in-addr.arpa", - "count": 9, - "total_related": 11673, - "prevalence": 0.0007710100231303007 - }, - { - "value": "50.125.168.192.in-addr.arpa", - "count": 9, - "total_related": 11925, - "prevalence": 0.0007547169811320754 - }, - { - "value": "20.125.168.192.in-addr.arpa", - "count": 8, - "total_related": 11575, - "prevalence": 0.0006911447084233262 - }, - { - "value": "53.125.168.192.in-addr.arpa", - "count": 8, - "total_related": 11608, - "prevalence": 0.0006891798759476223 - }, - { - "value": "63.125.168.192.in-addr.arpa", - "count": 8, - "total_related": 11722, - "prevalence": 0.000682477392936359 - }, - { - "value": "56.125.168.192.in-addr.arpa", - "count": 8, - "total_related": 11854, - "prevalence": 0.0006748776784207862 - }, - { - "value": "5.125.168.192.in-addr.arpa", - "count": 7, - "total_related": 11350, - "prevalence": 0.0006167400881057269 - }, - { - "value": "55.125.168.192.in-addr.arpa", - "count": 7, - "total_related": 11403, - "prevalence": 0.0006138735420503376 - }, - { - "value": "15.125.168.192.in-addr.arpa", - "count": 7, - "total_related": 11438, - "prevalence": 0.0006119951040391676 - }, - { - "value": "4.125.168.192.in-addr.arpa", - "count": 7, - "total_related": 11440, - "prevalence": 0.0006118881118881119 - }, - { - "value": "30.125.168.192.in-addr.arpa", - "count": 7, - "total_related": 11462, - "prevalence": 0.000610713662537079 - }, - { - "value": "57.125.168.192.in-addr.arpa", - "count": 7, - "total_related": 11513, - "prevalence": 0.0006080083384000695 - }, - { - "value": "52.125.168.192.in-addr.arpa", - "count": 7, - "total_related": 11544, - "prevalence": 0.0006063756063756063 - }, - { - "value": "64.125.168.192.in-addr.arpa", - "count": 7, - "total_related": 11617, - "prevalence": 0.0006025652061633813 - }, - { - "value": "36.125.168.192.in-addr.arpa", - "count": 7, - "total_related": 11741, - "prevalence": 0.0005962013457116088 - }, - { - "value": "11.125.168.192.in-addr.arpa", - "count": 7, - "total_related": 11971, - "prevalence": 0.0005847464706373736 - }, - { - "value": "6.125.168.192.in-addr.arpa", - "count": 7, - "total_related": 12042, - "prevalence": 0.0005812987875768145 - }, - { - "value": "65.125.168.192.in-addr.arpa", - "count": 7, - "total_related": 12409, - "prevalence": 0.0005641066967523572 - }, - { - "value": "4.1.16.172.in-addr.arpa", - "count": 6, - "total_related": 307, - "prevalence": 0.019543973941368076 - }, - { - "value": "38.125.168.192.in-addr.arpa", - "count": 6, - "total_related": 11207, - "prevalence": 0.0005353796734183992 - }, - { - "value": "35.125.168.192.in-addr.arpa", - "count": 6, - "total_related": 11430, - "prevalence": 0.0005249343832020997 - }, - { - "value": "39.125.168.192.in-addr.arpa", - "count": 6, - "total_related": 11518, - "prevalence": 0.0005209237714881056 - }, - { - "value": "21.125.168.192.in-addr.arpa", - "count": 6, - "total_related": 11532, - "prevalence": 0.0005202913631633715 - }, - { - "value": "43.125.168.192.in-addr.arpa", - "count": 6, - "total_related": 11574, - "prevalence": 0.0005184033177812338 - }, - { - "value": "41.125.168.192.in-addr.arpa", - "count": 6, - "total_related": 11608, - "prevalence": 0.0005168849069607167 - }, - { - "value": "59.125.168.192.in-addr.arpa", - "count": 6, - "total_related": 11612, - "prevalence": 0.0005167068549776093 - }, - { - "value": "10.125.168.192.in-addr.arpa", - "count": 6, - "total_related": 11736, - "prevalence": 0.0005112474437627812 - }, - { - "value": "51.125.168.192.in-addr.arpa", - "count": 6, - "total_related": 11748, - "prevalence": 0.0005107252298263534 - }, - { - "value": "48.125.168.192.in-addr.arpa", - "count": 6, - "total_related": 11768, - "prevalence": 0.0005098572399728076 - }, - { - "value": "42.125.168.192.in-addr.arpa", - "count": 6, - "total_related": 11782, - "prevalence": 0.0005092514004413513 - }, - { - "value": "27.125.168.192.in-addr.arpa", - "count": 6, - "total_related": 11815, - "prevalence": 0.0005078290308929327 - }, - { - "value": "22.125.168.192.in-addr.arpa", - "count": 6, - "total_related": 12163, - "prevalence": 0.0004932993504891886 - }, - { - "value": "3.1.16.172.in-addr.arpa", - "count": 5, - "total_related": 314, - "prevalence": 0.01592356687898089 - }, - { - "value": "34.125.168.192.in-addr.arpa", - "count": 5, - "total_related": 11289, - "prevalence": 0.00044290902648595976 - }, - { - "value": "19.125.168.192.in-addr.arpa", - "count": 5, - "total_related": 11404, - "prevalence": 0.0004384426517011575 - }, - { - "value": "26.125.168.192.in-addr.arpa", - "count": 5, - "total_related": 11429, - "prevalence": 0.0004374835943652113 - }, - { - "value": "9.125.168.192.in-addr.arpa", - "count": 5, - "total_related": 11460, - "prevalence": 0.0004363001745200698 - }, - { - "value": "58.125.168.192.in-addr.arpa", - "count": 5, - "total_related": 11494, - "prevalence": 0.0004350095702105446 - }, - { - "value": "54.125.168.192.in-addr.arpa", - "count": 5, - "total_related": 11543, - "prevalence": 0.00043316295590401107 - }, - { - "value": "47.125.168.192.in-addr.arpa", - "count": 5, - "total_related": 11634, - "prevalence": 0.00042977479800584495 - }, - { - "value": "3.125.168.192.in-addr.arpa", - "count": 5, - "total_related": 11661, - "prevalence": 0.0004287796929937398 - }, - { - "value": "2.125.168.192.in-addr.arpa", - "count": 5, - "total_related": 11677, - "prevalence": 0.000428192172647084 - }, - { - "value": "40.125.168.192.in-addr.arpa", - "count": 5, - "total_related": 11688, - "prevalence": 0.0004277891854893908 - }, - { - "value": "18.125.168.192.in-addr.arpa", - "count": 5, - "total_related": 11713, - "prevalence": 0.00042687612054981646 - }, - { - "value": "37.125.168.192.in-addr.arpa", - "count": 5, - "total_related": 11822, - "prevalence": 0.0004229402808323465 - }, - { - "value": "12.125.168.192.in-addr.arpa", - "count": 5, - "total_related": 12322, - "prevalence": 0.0004057782827463074 - }, - { - "value": "103.122.168.192.in-addr.arpa", - "count": 4, - "total_related": 61, - "prevalence": 0.06557377049180328 - }, - { - "value": "104.122.168.192.in-addr.arpa", - "count": 4, - "total_related": 64, - "prevalence": 0.0625 - }, - { - "value": "134.1.16.172.in-addr.arpa", - "count": 4, - "total_related": 106, - "prevalence": 0.03773584905660377 - }, - { - "value": "131.1.16.172.in-addr.arpa", - "count": 4, - "total_related": 111, - "prevalence": 0.036036036036036036 - }, - { - "value": "137.1.16.172.in-addr.arpa", - "count": 4, - "total_related": 111, - "prevalence": 0.036036036036036036 - }, - { - "value": "138.1.16.172.in-addr.arpa", - "count": 4, - "total_related": 112, - "prevalence": 0.03571428571428571 - }, - { - "value": "132.1.16.172.in-addr.arpa", - "count": 4, - "total_related": 114, - "prevalence": 0.03508771929824561 - }, - { - "value": "111.1.16.172.in-addr.arpa", - "count": 4, - "total_related": 124, - "prevalence": 0.03225806451612903 - }, - { - "value": "102.1.16.172.in-addr.arpa", - "count": 4, - "total_related": 125, - "prevalence": 0.032 - }, - { - "value": "105.1.16.172.in-addr.arpa", - "count": 4, - "total_related": 125, - "prevalence": 0.032 - }, - { - "value": "128.1.16.172.in-addr.arpa", - "count": 4, - "total_related": 126, - "prevalence": 0.031746031746031744 - }, - { - "value": "119.1.16.172.in-addr.arpa", - "count": 4, - "total_related": 127, - "prevalence": 0.031496062992125984 - }, - { - "value": "106.1.16.172.in-addr.arpa", - "count": 4, - "total_related": 129, - "prevalence": 0.031007751937984496 - }, - { - "value": "116.1.16.172.in-addr.arpa", - "count": 4, - "total_related": 129, - "prevalence": 0.031007751937984496 - }, - { - "value": "121.1.16.172.in-addr.arpa", - "count": 4, - "total_related": 131, - "prevalence": 0.030534351145038167 - }, - { - "value": "103.1.16.172.in-addr.arpa", - "count": 4, - "total_related": 133, - "prevalence": 0.03007518796992481 - }, - { - "value": "2.1.16.172.in-addr.arpa", - "count": 4, - "total_related": 301, - "prevalence": 0.013289036544850499 - }, - { - "value": "16.125.168.192.in-addr.arpa", - "count": 4, - "total_related": 11236, - "prevalence": 0.000355998576005696 - }, - { - "value": "33.125.168.192.in-addr.arpa", - "count": 4, - "total_related": 11295, - "prevalence": 0.0003541389995573263 - }, - { - "value": "24.125.168.192.in-addr.arpa", - "count": 4, - "total_related": 11328, - "prevalence": 0.00035310734463276836 - }, - { - "value": "62.125.168.192.in-addr.arpa", - "count": 4, - "total_related": 11496, - "prevalence": 0.0003479471120389701 - }, - { - "value": "28.125.168.192.in-addr.arpa", - "count": 4, - "total_related": 11505, - "prevalence": 0.0003476749239461104 - }, - { - "value": "45.125.168.192.in-addr.arpa", - "count": 4, - "total_related": 11553, - "prevalence": 0.00034623041634207567 - }, - { - "value": "14.125.168.192.in-addr.arpa", - "count": 4, - "total_related": 11584, - "prevalence": 0.0003453038674033149 - }, - { - "value": "7.125.168.192.in-addr.arpa", - "count": 4, - "total_related": 11658, - "prevalence": 0.00034311202607651396 - }, - { - "value": "31.125.168.192.in-addr.arpa", - "count": 4, - "total_related": 11702, - "prevalence": 0.0003418219107844813 - }, - { - "value": "60.125.168.192.in-addr.arpa", - "count": 4, - "total_related": 12237, - "prevalence": 0.0003268775026558797 - }, - { - "value": "113.1.16.172.in-addr.arpa", - "count": 3, - "total_related": 119, - "prevalence": 0.025210084033613446 - }, - { - "value": "107.1.16.172.in-addr.arpa", - "count": 3, - "total_related": 125, - "prevalence": 0.024 - }, - { - "value": "112.1.16.172.in-addr.arpa", - "count": 3, - "total_related": 125, - "prevalence": 0.024 - }, - { - "value": "104.1.16.172.in-addr.arpa", - "count": 3, - "total_related": 129, - "prevalence": 0.023255813953488372 - }, - { - "value": "110.1.16.172.in-addr.arpa", - "count": 3, - "total_related": 129, - "prevalence": 0.023255813953488372 - }, - { - "value": "114.1.16.172.in-addr.arpa", - "count": 3, - "total_related": 129, - "prevalence": 0.023255813953488372 - }, - { - "value": "108.1.16.172.in-addr.arpa", - "count": 3, - "total_related": 130, - "prevalence": 0.023076923076923078 - }, - { - "value": "101.1.16.172.in-addr.arpa", - "count": 3, - "total_related": 133, - "prevalence": 0.022556390977443608 - }, - { - "value": "www.microsoft.com", - "count": 78, - "total_related": 100000, - "prevalence": 0.00078 - }, - { - "value": "crt.sectigo.com", - "count": 48, - "total_related": 100000, - "prevalence": 0.00048 - }, - { - "value": "sectigo.com", - "count": 42, - "total_related": 100000, - "prevalence": 0.00042 - }, - { - "value": "tse1.mm.bing.net", - "count": 23, - "total_related": 100000, - "prevalence": 0.00023 - }, - { - "value": "fp2e7a.wpc.2be4.phicdn.net", - "count": 22, - "total_related": 100000, - "prevalence": 0.00022 - }, - { - "value": "fp2e7a.wpc.phicdn.net", - "count": 22, - "total_related": 100000, - "prevalence": 0.00022 - }, - { - "value": "microsoft.com", - "count": 19, - "total_related": 100000, - "prevalence": 0.00019 - }, - { - "value": "c.pki.goog", - "count": 15, - "total_related": 100000, - "prevalence": 0.00015 - }, - { - "value": "time.windows.com", - "count": 14, - "total_related": 100000, - "prevalence": 0.00014 - }, - { - "value": "dns.msftncsi.com", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "res.public.onecdn.static.microsoft", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "bg.microsoft.map.fastly.net", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": "ecs-office.s-0005.dual-s-msedge.net", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "s-0005.dual-s-msedge.net", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "1.1.16.172.in-addr.arpa", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "a233.dscd.akamai.net", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "assets.msn.com", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "login.live.com", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - } - ], - "contacted_ips": [ - { - "value": "10.0.2.2", - "count": 10, - "total_related": 4950, - "prevalence": 0.00202020202020202 - }, - { - "value": "10.0.2.3", - "count": 10, - "total_related": 29279, - "prevalence": 0.0003415417193210151 - }, - { - "value": "192.168.166.11", - "count": 5, - "total_related": 272, - "prevalence": 0.01838235294117647 - }, - { - "value": "192.168.166.8", - "count": 5, - "total_related": 272, - "prevalence": 0.01838235294117647 - }, - { - "value": "192.168.166.10", - "count": 5, - "total_related": 273, - "prevalence": 0.018315018315018316 - }, - { - "value": "192.168.166.9", - "count": 5, - "total_related": 274, - "prevalence": 0.01824817518248175 - }, - { - "value": "192.168.166.7", - "count": 5, - "total_related": 280, - "prevalence": 0.017857142857142856 - }, - { - "value": "192.168.166.1", - "count": 5, - "total_related": 509, - "prevalence": 0.009823182711198428 - }, - { - "value": "0.0.0.1", - "count": 5, - "total_related": 78758, - "prevalence": 6.348561415983138e-05 - }, - { - "value": "192.168.166.13", - "count": 4, - "total_related": 244, - "prevalence": 0.01639344262295082 - }, - { - "value": "192.168.166.12", - "count": 4, - "total_related": 257, - "prevalence": 0.01556420233463035 - }, - { - "value": "192.168.166.16", - "count": 4, - "total_related": 286, - "prevalence": 0.013986013986013986 - }, - { - "value": "192.168.166.15", - "count": 4, - "total_related": 287, - "prevalence": 0.013937282229965157 - }, - { - "value": "192.168.166.14", - "count": 4, - "total_related": 288, - "prevalence": 0.013888888888888888 - }, - { - "value": "192.168.166.5", - "count": 3, - "total_related": 262, - "prevalence": 0.011450381679389313 - }, - { - "value": "192.168.166.4", - "count": 3, - "total_related": 263, - "prevalence": 0.011406844106463879 - }, - { - "value": "192.168.166.6", - "count": 3, - "total_related": 263, - "prevalence": 0.011406844106463879 - }, - { - "value": "192.168.166.3", - "count": 3, - "total_related": 273, - "prevalence": 0.01098901098901099 - }, - { - "value": "192.168.166.2", - "count": 3, - "total_related": 280, - "prevalence": 0.010714285714285714 - }, - { - "value": "192.168.122.10", - "count": 3, - "total_related": 10849, - "prevalence": 0.0002765231818600793 - }, - { - "value": "192.168.122.67", - "count": 3, - "total_related": 18112, - "prevalence": 0.00016563604240282687 - }, - { - "value": "192.168.122.84", - "count": 3, - "total_related": 19406, - "prevalence": 0.00015459136349582603 - }, - { - "value": "ff02::1:3", - "count": 3, - "total_related": 28465, - "prevalence": 0.00010539258738802038 - }, - { - "value": "192.168.0.95", - "count": 3, - "total_related": 48445, - "prevalence": 6.192589534523686e-05 - }, - { - "value": "192.168.122.101", - "count": 3, - "total_related": 82347, - "prevalence": 3.643119967940544e-05 - }, - { - "value": "192.168.0.102", - "count": 2, - "total_related": 40833, - "prevalence": 4.8979991673401416e-05 - }, - { - "value": "20.99.133.109", - "count": 44, - "total_related": 100000, - "prevalence": 0.00044 - }, - { - "value": "192.229.211.108", - "count": 34, - "total_related": 100000, - "prevalence": 0.00034 - }, - { - "value": "20.99.186.246", - "count": 29, - "total_related": 100000, - "prevalence": 0.00029 - }, - { - "value": "23.216.81.152", - "count": 23, - "total_related": 100000, - "prevalence": 0.00023 - }, - { - "value": "20.99.185.48", - "count": 22, - "total_related": 100000, - "prevalence": 0.00022 - }, - { - "value": "224.0.0.252", - "count": 22, - "total_related": 100000, - "prevalence": 0.00022 - }, - { - "value": "20.99.184.37", - "count": 18, - "total_related": 100000, - "prevalence": 0.00018 - }, - { - "value": "204.79.197.203", - "count": 17, - "total_related": 100000, - "prevalence": 0.00017 - }, - { - "value": "172.64.149.23", - "count": 15, - "total_related": 100000, - "prevalence": 0.00015 - }, - { - "value": "23.55.140.42", - "count": 15, - "total_related": 100000, - "prevalence": 0.00015 - }, - { - "value": "20.69.140.28", - "count": 14, - "total_related": 100000, - "prevalence": 0.00014 - }, - { - "value": "23.196.145.221", - "count": 13, - "total_related": 100000, - "prevalence": 0.00013 - }, - { - "value": "104.18.38.233", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "192.229.221.95", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "151.101.22.172", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": "184.27.218.92", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": "13.107.21.200", - "count": 8, - "total_related": 100000, - "prevalence": 8e-05 - }, - { - "value": "52.185.73.156", - "count": 8, - "total_related": 100000, - "prevalence": 8e-05 - }, - { - "value": "131.107.255.255", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "192.168.0.1", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "204.79.197.200", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "23.196.193.245", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "52.154.209.174", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "104.71.214.69", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "192.168.0.14", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "192.168.0.67", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "23.213.37.172", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "114.114.114.114", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "13.107.4.50", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "131.253.33.203", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "150.171.27.10", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "150.171.28.10", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "192.168.0.27", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "192.168.0.3", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "218.85.157.99", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "192.168.0.26", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "192.168.0.31", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "192.168.0.32", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "192.168.0.35", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "192.168.0.8", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "199.232.210.172", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "23.216.147.64", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "192.168.0.10", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "192.168.0.12", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "192.168.0.16", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "192.168.0.2", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "192.168.0.36", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "192.168.0.37", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "192.168.0.38", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "192.168.0.42", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "192.168.0.43", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "192.168.0.50", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "192.168.0.51", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "192.168.0.56", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "192.168.0.6", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "192.168.0.60", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "192.168.0.68", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "192.168.0.73", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "199.232.214.172", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "20.101.57.9", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "20.96.52.198", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "23.216.147.76", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "74.125.69.94", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "a83f:8110::1b00:100:2800:0", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "104.18.14.101", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "142.250.125.94", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "162.159.36.2", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "192.168.0.11", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "192.168.0.13", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "192.168.0.15", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "192.168.0.17", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "192.168.0.18", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "192.168.0.19", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "192.168.0.21", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - } - ], - "execution_parents": [ - { - "value": "b7147a76c6695b750a84de55d4569f71f694b33aeefeef5daa09318ebabd9a24", - "count": 8, - "total_related": 102, - "prevalence": 0.0784313725490196 - }, - { - "value": "34ae59b7acc09c2e82625640cae82c5158b649db1418ddbaa24138b51f1722c5", - "count": 5, - "total_related": 25, - "prevalence": 0.2 - }, - { - "value": "f566f21f3db0c4a9f421f18e6561279b4dd4c5fd3c32456a6f2e5b927b49719d", - "count": 5, - "total_related": 26, - "prevalence": 0.19230769230769232 - }, - { - "value": "57e3b02548b7af9629eefbbaf247f2984f688734966a3328e8c91acafabea468", - "count": 5, - "total_related": 80, - "prevalence": 0.0625 - }, - { - "value": "1336f6c265b29ef4c4c554cadd445dc095816e8b64a584f637dbc319c848346d", - "count": 3, - "total_related": 12, - "prevalence": 0.25 - }, - { - "value": "d2942c6c19e67220d72bfb9a30b019627b950ff0fa8669a475d5730ff5097112", - "count": 3, - "total_related": 13, - "prevalence": 0.23076923076923078 - }, - { - "value": "ff3ce05ba945382e269bbfca32f90f84a962fc949eaee21be417daf96396fc3e", - "count": 3, - "total_related": 79, - "prevalence": 0.0379746835443038 - }, - { - "value": "f711b14efb7792033b7ac954ebcfaec8141eb0abafef9c17e769ff96e8fecdf3", - "count": 2, - "total_related": 17, - "prevalence": 0.11764705882352941 - }, - { - "value": "9e1342e551b8eec0a18eb329f1968b9d81023e1152a15702fc901d8d129c16c2", - "count": 2, - "total_related": 23, - "prevalence": 0.08695652173913043 - }, - { - "value": "a1dbfe0c9ce5ed94a6344c7603483142ee4908c60798fe5e05d01343abcc5c0f", - "count": 2, - "total_related": 28, - "prevalence": 0.07142857142857142 - }, - { - "value": "bfc092b384976e97153bae0e29359461bfd65fce5ad8188d6460de57bc680eaf", - "count": 2, - "total_related": 40, - "prevalence": 0.05 - }, - { - "value": "3755718db9d33f4aba2563de454d4530a308b41b1096c904102d08e2101f2020", - "count": 2, - "total_related": 56, - "prevalence": 0.03571428571428571 - }, - { - "value": "f18c57b59014dfd89d0f0fc336443f736bec6e7f525d7c95ed383ee257a39174", - "count": 2, - "total_related": 115, - "prevalence": 0.017391304347826087 - }, - { - "value": "0225ded4dc1850d79f0ee3a717c2938d3b6436fdca4a1138dfc427095e8fe878", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0641da9d362721e94f70a40c5e8df017b52bb1ad480a01f02f92dbeacb4f369b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0f431f0230148e82699432dbb1e79a1ac967565fb2828f62e45ca625821e5d49", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "28664daf83a19ae6efd7caf9433600981fbb7c95025f473dc4e6099b603512a0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2a042b14363cddb39ef3a1f7f7b96dbb533de11226a856a8e5db42c248807114", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "77496302f15cd581f460a23cdcfdaee9b1a764326d64f8226ea13abce8d29165", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "8656c8bc2d098776803ef6648d5b4d9e4cc444647ac09bb97fcccd54956ddc94", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "89a1471200ca659d069236e757d7813e86ceeca7db0ed7f8350a850763d0b85a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0080ec82da326f6bebcab521f2c4f79bafb09e5d0eea3be39ca8a2bd6ef9aa8b", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "0ed5729655b3f09c29878e1cc10de55e0cbfae7ac344f574d471827c256cf086", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2438243a35d6eb84ee610cea1b91fc2e0e5256186a005dc861fb5a4b921c2c7f", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2d23cd3723f7038cd0424c3023bdda9c49c02831e59144e8774aadb59e389a51", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "3e6a15e8b77cdf69fc9feb2bea693349ac4ea97ef95d4138431acfad01b5224d", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "426da2085b9b19cf694566af01ddeb330be618ca071bd20053cb37a29158cb91", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "52d2af9a8ff6137ac140d31715644d479bf91078969a3884273575e765b51b99", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "77be13bdcebe3c287d776bcaa17baabb8e6733fd3f9b4936ed1b16a5e70f9864", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "820c814711f6e9342e2fc078eac22e6c33f37136eae874a694c04e948cc34eb5", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "a80f54e1ef92eb5806486ac5a8c265ab50f26ce4c19a642dd03fe13f09693fc9", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "209d0c5f48177bd0eef333787f88f41d0938a4d0a6e3444d1fe66082b5bf5461", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "414368c3a85deb96f2961fc49ea44c484a8e5756791efc7ff239e194596cb14e", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "43de9dac4e456549d8fbfb2b38686a0f794a3ad7788cf8ba9ec81b21b367e51c", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "442050fa9042c683303f972234d0a8198e7da631fa42a27c8d38e330d84fc7c7", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "5880c56845f47c743526bc924d56d15317fd292542b43aba5170c167c258ff68", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "8d4c1705286c9518dbcf3c0c01e99b7f19c761bd986372d37083a0a4354adcc1", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "9fe6dbe252ec80bf6dd4f93adfbd8b451d0cbbe4792025bdd2e909aae382b344", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "a5d0293b35b9142a5449f1f31a0b9611767a585e5ae9f125b4f980fb91faff50", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "1e86c9b1a92c3624e69ecaabb8abf495475f07a60e9a5449053270cfd2a78b51", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "9348dd3779b4b67d0a3b6a9b32f948e8a8e7b6c2f26be8900bd1b33ea988db05", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "7e55783bf229723a9b3ed1a3699321e572f70bf547a713d726c868274514e9c0", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "1ae187f1324eb6107c72fd19f3b05198663bf9775e20ff660befe125c28a52c1", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "a2ffc30b72bb25f813708da9bd34717ed91952ef1d88e64df057d9f50faa9a18", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "0cf9bcf39b9f9bb6d58c2150384080bd2be671197463e637eaa41ac7849645aa", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "58ccf2fa0a882f014cbb6fcbc6d7d15ea9608e85fb9596708685fbd7b576bfc9", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "9ed9fd45446f4a3eccd3977394ef4045f621e63850c9672ffd03771ab675f3d0", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "21879b5a8a84c5fe5e009c85744caf74b817c57203020bf919037d7ccb6b6a58", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "622b42db5fd9f7faa109212504f636c0f2f76d87e025214e3c6be14e460e8f95", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "a11587e5da097799146454e58c3cae36febb5f62901062441fb7c377def50795", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "9e81f5ff3172ac2029e60ae4705aef2bf6a503c50268693acf36bc8655378127", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "40cbce36a2755389a74ddad8f061da5535368d2edb255f61340d69807c494f79", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "61feb8b81fa95acbd8e09741b22f15da27094d0c3cfbcf7e358ea3dbeae857b7", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "00f704a09024ca12d12d2464c84eae2a95cc4c68145c000da26eb99419b8856b", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - }, - { - "value": "4bc3c6475a2f3f2cbd0545ecc89cf2f378717f152db3df24fe7a730c0e1dc125", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - }, - { - "value": "874d3f892c299a623746d6b0669298375af4bd0ea02f52ac424c579e57ab48fd", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - }, - { - "value": "05406c13d43a3796c29602a73c8d71df619dc8145840d28d27414fea40fefcdc", - "count": 1, - "total_related": 14, - "prevalence": 0.07142857142857142 - }, - { - "value": "2ade5488f2edda4601a72f807cfdbf5370098f0db8d461f5d92ad611d676feed", - "count": 1, - "total_related": 14, - "prevalence": 0.07142857142857142 - }, - { - "value": "88580efa885b9d084523baf292fdc834a477377ad92fb604f39e67c4cd331dcc", - "count": 1, - "total_related": 14, - "prevalence": 0.07142857142857142 - }, - { - "value": "8cd768765b23e275c62428b5507bc9177bc31344be72042e9607d5c99c93eda8", - "count": 1, - "total_related": 14, - "prevalence": 0.07142857142857142 - }, - { - "value": "13916d6b1fddb42f3146b641d37f3a69b491f183146e310aa972dd469e3417bf", - "count": 1, - "total_related": 15, - "prevalence": 0.06666666666666667 - }, - { - "value": "1bb1a9c810609fbec87e7220f9336b50d9d1be83a7be4fd1d85711e93b4cfdaa", - "count": 1, - "total_related": 15, - "prevalence": 0.06666666666666667 - }, - { - "value": "1cd644ff91182d2a6647e6f7c061ced0703239a85e9e01068cfd0dd1f5af24f4", - "count": 1, - "total_related": 15, - "prevalence": 0.06666666666666667 - }, - { - "value": "21280cf5c8ea9eb4a07453ba315c6206c7667852ef7e408374aed596da62898d", - "count": 1, - "total_related": 16, - "prevalence": 0.0625 - }, - { - "value": "3735150a6fa5b17f9893bf3d9e855e73f00b6c5834dc6470688360794d3044c0", - "count": 1, - "total_related": 16, - "prevalence": 0.0625 - }, - { - "value": "64c95b90a06442de37f53f3e779174024beefb155a2c93e898fd4380a6a18b2d", - "count": 1, - "total_related": 16, - "prevalence": 0.0625 - }, - { - "value": "7f899996d4bc193a1739b8f9ca51a7f46a7d41007f472df5622208e2db62b232", - "count": 1, - "total_related": 16, - "prevalence": 0.0625 - }, - { - "value": "0341ab8139cf2bea05d76ebac2060c1ab0c7922404172b9f8d73ba09b08b4fc9", - "count": 1, - "total_related": 17, - "prevalence": 0.058823529411764705 - }, - { - "value": "27304beb569bfbdc48f63bb578f8adcdc6051349d6971fd216ee4b0f96e08f5b", - "count": 1, - "total_related": 17, - "prevalence": 0.058823529411764705 - }, - { - "value": "40494b12beba32d4300eb9364b4e5543db4c46572ef739f19519f1c36c6be164", - "count": 1, - "total_related": 17, - "prevalence": 0.058823529411764705 - }, - { - "value": "500160bf68922f5ea34b543fdbfb8fac71fde193381da245d10a51d6d0062896", - "count": 1, - "total_related": 17, - "prevalence": 0.058823529411764705 - }, - { - "value": "7bf7dfc7534aec7b5ca71d147205d2b8a3ce113e5254bb342d9f9b69828cf8ee", - "count": 1, - "total_related": 17, - "prevalence": 0.058823529411764705 - }, - { - "value": "166bba02413995aff28ffeb27d3bf3d5a5f6a6cd36893e252c7b9a22836f4980", - "count": 1, - "total_related": 18, - "prevalence": 0.05555555555555555 - }, - { - "value": "1e4313839b8075330c948e4ec1110a7a925a12b9b0e5f96a6e9d0ad69782d328", - "count": 1, - "total_related": 18, - "prevalence": 0.05555555555555555 - }, - { - "value": "55ff7873f086970d76691ab9cffa3d82411f883ed1178ef97d480c9e8daae1fc", - "count": 1, - "total_related": 18, - "prevalence": 0.05555555555555555 - }, - { - "value": "62fc350397b98ac1f593eadaf0ebb6c31d272708d71c0ee9a2ce859e06ba2060", - "count": 1, - "total_related": 18, - "prevalence": 0.05555555555555555 - }, - { - "value": "029e3e11f99dbaa17ef305c6fcb4888577360ecaf48a130961442db02678be5b", - "count": 1, - "total_related": 19, - "prevalence": 0.05263157894736842 - }, - { - "value": "69cec2548d04cd837c2388dbae7234018d7239d326a919d37ecdb5cd6b08ac81", - "count": 1, - "total_related": 19, - "prevalence": 0.05263157894736842 - }, - { - "value": "7da802e06f854423395b80b7afcf38f356a38d01895d01dff09f2b0b2a6eb0c2", - "count": 1, - "total_related": 19, - "prevalence": 0.05263157894736842 - }, - { - "value": "0cc54ffd005b4d3d048e72f6d66bcc1ac5a7a511ab9ecf59dc1d2ece72c69e85", - "count": 1, - "total_related": 20, - "prevalence": 0.05 - }, - { - "value": "0ec64451a73e304f84e90bfd7573f33df2ef7b668fa4b71c9c89039d8581254e", - "count": 1, - "total_related": 21, - "prevalence": 0.047619047619047616 - }, - { - "value": "a19fd3adec14939c4c93b289085ab441b6a77a3e992ce1f2e09d27a23078a029", - "count": 1, - "total_related": 21, - "prevalence": 0.047619047619047616 - }, - { - "value": "1c5fd7bf511885054464124142f793501ab2c6e987b203c1a5f4b3bdcccb1fa1", - "count": 1, - "total_related": 22, - "prevalence": 0.045454545454545456 - }, - { - "value": "99ac7b25255663d34bc8ff74fe2f72167be9e625208415e66108e13893a844fb", - "count": 1, - "total_related": 22, - "prevalence": 0.045454545454545456 - }, - { - "value": "3cd1d9ec98d9199c17a59e2f71d77f0aa6950e8829c490083700d0ec62b3d865", - "count": 1, - "total_related": 24, - "prevalence": 0.041666666666666664 - }, - { - "value": "7833eb816dcba5d61a21eaaa90c3240b9e26f8280d33df8b231f350ee7bea926", - "count": 1, - "total_related": 24, - "prevalence": 0.041666666666666664 - }, - { - "value": "88c3613f822cbebf05da93d2d6e099edb767b2caee74aa231353d6a5e13672ad", - "count": 1, - "total_related": 25, - "prevalence": 0.04 - }, - { - "value": "92c0cf68942400d20b14256d45bda65ce3401358ba5bfec00df3316b6016c342", - "count": 1, - "total_related": 25, - "prevalence": 0.04 - }, - { - "value": "a0bcd1b1ec3143aa7bb11a8080d7f1e61f8ab045e06252ef507d0558f6eff55d", - "count": 1, - "total_related": 25, - "prevalence": 0.04 - }, - { - "value": "0ad2efd0b2590290677dae7d803c45be6f7945897f2df4fad6b82ceb5b87fc52", - "count": 1, - "total_related": 27, - "prevalence": 0.037037037037037035 - }, - { - "value": "a71d28f0b9a0ce7beb375ea85daf2ca10724859c7237d6e61dc103e738a2134d", - "count": 1, - "total_related": 28, - "prevalence": 0.03571428571428571 - }, - { - "value": "12242edf565ceef037f775a78b12ad09d3237e57c77e403a8653160e27ec6d45", - "count": 1, - "total_related": 31, - "prevalence": 0.03225806451612903 - }, - { - "value": "8ccb70e70b90b102c585cd750ba0f1f4524c27cc92ec5ce9b2c4110dc904db4c", - "count": 1, - "total_related": 31, - "prevalence": 0.03225806451612903 - }, - { - "value": "43f187e16b86e2c1fd9c4c23576b70531ed08ff582bee7c94980940cc25abe1b", - "count": 1, - "total_related": 38, - "prevalence": 0.02631578947368421 - }, - { - "value": "a7c63577d769e659fc7172f60c04528a973a6a68a5c80be7b51f407db6800569", - "count": 1, - "total_related": 41, - "prevalence": 0.024390243902439025 - }, - { - "value": "1148b9a6adfc4ce16307347e7c69d0c1654689f50b24d1df1da89012b1a61914", - "count": 1, - "total_related": 43, - "prevalence": 0.023255813953488372 - }, - { - "value": "4ef606bb544e63ac6510fe1b0634cfd26fdf6978c44a4d1adbd192fe8ebf8f59", - "count": 1, - "total_related": 48, - "prevalence": 0.020833333333333332 - }, - { - "value": "998640071344906547f8db70306dc43ffc8f3b2342e42025e750abf8896eb527", - "count": 1, - "total_related": 302, - "prevalence": 0.0033112582781456954 - }, - { - "value": "5339981168dfcefb874dc7e82563fa7aca047f17b1184ae8db9336a2335473a9", - "count": 1, - "total_related": 459, - "prevalence": 0.002178649237472767 - }, - { - "value": "0bc2ebd7d81e248ff24266be5167696d17e6f034115d9e29233e28afc9c87e79", - "count": 1, - "total_related": 477, - "prevalence": 0.0020964360587002098 - } - ], - "compressed_parents": [ - { - "value": "b7147a76c6695b750a84de55d4569f71f694b33aeefeef5daa09318ebabd9a24", - "count": 8, - "total_related": 102, - "prevalence": 0.0784313725490196 - }, - { - "value": "344fef7ed45e437a246e058a35cadffcfd3761ec20f495575d3f8ea3b8aabe24", - "count": 5, - "total_related": 23, - "prevalence": 0.21739130434782608 - }, - { - "value": "f566f21f3db0c4a9f421f18e6561279b4dd4c5fd3c32456a6f2e5b927b49719d", - "count": 5, - "total_related": 29, - "prevalence": 0.1724137931034483 - }, - { - "value": "34ae59b7acc09c2e82625640cae82c5158b649db1418ddbaa24138b51f1722c5", - "count": 5, - "total_related": 36, - "prevalence": 0.1388888888888889 - }, - { - "value": "704e97633634c202779337bd60b2e448a24b92effa2c17ce8b2e7cb4af9c9adb", - "count": 5, - "total_related": 61, - "prevalence": 0.08196721311475409 - }, - { - "value": "57e3b02548b7af9629eefbbaf247f2984f688734966a3328e8c91acafabea468", - "count": 5, - "total_related": 80, - "prevalence": 0.0625 - }, - { - "value": "eaf84d323ec4d0c805e12f68225bed9bdc322b93eaa8ef316ccc247522f05565", - "count": 3, - "total_related": 8, - "prevalence": 0.375 - }, - { - "value": "1336f6c265b29ef4c4c554cadd445dc095816e8b64a584f637dbc319c848346d", - "count": 3, - "total_related": 11, - "prevalence": 0.2727272727272727 - }, - { - "value": "d2942c6c19e67220d72bfb9a30b019627b950ff0fa8669a475d5730ff5097112", - "count": 3, - "total_related": 15, - "prevalence": 0.2 - }, - { - "value": "ff3ce05ba945382e269bbfca32f90f84a962fc949eaee21be417daf96396fc3e", - "count": 3, - "total_related": 79, - "prevalence": 0.0379746835443038 - }, - { - "value": "1bb1b363055c0422ac7c337156a68c5b62e25b669e3e801fdbc2424b6f96dc05", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "9e1342e551b8eec0a18eb329f1968b9d81023e1152a15702fc901d8d129c16c2", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "b094665ec4cdca6d8e9b9f63d8d71b1b9263eda12f1fdd1d8aa820dbf4c231f6", - "count": 2, - "total_related": 15, - "prevalence": 0.13333333333333333 - }, - { - "value": "6003da433c9240d051c7925dc0fb616a13985ffe8ff65ba1e1092dee7418782d", - "count": 2, - "total_related": 26, - "prevalence": 0.07692307692307693 - }, - { - "value": "bfc092b384976e97153bae0e29359461bfd65fce5ad8188d6460de57bc680eaf", - "count": 2, - "total_related": 32, - "prevalence": 0.0625 - }, - { - "value": "351afa339d01b385b673c2272ca3255fbad03f4b04c62a99fb99ea8be3c8561d", - "count": 2, - "total_related": 86, - "prevalence": 0.023255813953488372 - }, - { - "value": "f18c57b59014dfd89d0f0fc336443f736bec6e7f525d7c95ed383ee257a39174", - "count": 2, - "total_related": 114, - "prevalence": 0.017543859649122806 - }, - { - "value": "00e90be7052329d003befe98f5c72a3b776fcec854e06c76d82016b0dde81eed", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "02a38d0ca261e69e7ac93676c87f98d761acb5f49c41ec7cff1260ed9e08b95e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0641da9d362721e94f70a40c5e8df017b52bb1ad480a01f02f92dbeacb4f369b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "077c45a3083684f1b2398b1041eba54c498b6f4891a1dd1ff5783fd9bf2efd81", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "07827048101b75e8062308253695b2456680e55593fe4c5f1ec457b7be2a62af", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "07926e060b7083bbe639b36e9c79cce23404ba9dcaa58c190ee40d7d415ff96f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0c52f70b4c340274208310ef1c9c09eee3124fb58063aee0c010a9645e417650", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0ed5729655b3f09c29878e1cc10de55e0cbfae7ac344f574d471827c256cf086", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0f431f0230148e82699432dbb1e79a1ac967565fb2828f62e45ca625821e5d49", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0f969df02a286de37ab18bd48f018bb195f84e9935f5f28a3d09ad6e9f7cb80a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1008af117f3f9f5c2d7f634c7c88fdb2af0dc2a8d01be203f0d69897559d3e05", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "13916d6b1fddb42f3146b641d37f3a69b491f183146e310aa972dd469e3417bf", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1619d1ebff7dbbd6ca16ffea7885820c11b1c389c48bfefd2ba1b67d0049b154", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "19d4b6b7609e8f421055ff39219cc4381753a26c451f982510e51bc2770b671f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "209d0c5f48177bd0eef333787f88f41d0938a4d0a6e3444d1fe66082b5bf5461", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "23fbb26e2f0c325814ae15cb98e0d7b5a80c0b6d172db1dc0c09a2e992797154", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2438243a35d6eb84ee610cea1b91fc2e0e5256186a005dc861fb5a4b921c2c7f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "261f03e7eef18b2b90482363d1f62928a3309260f3abbe939738beefc8a1dd81", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2a042b14363cddb39ef3a1f7f7b96dbb533de11226a856a8e5db42c248807114", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2bad639d0a1f90525ad56b31641b3bd5fe1310079d1e6abd6bc7889cdc1ff3f5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2cee882bd0dc4267bacf099ac4571c319ac547be12b955f7ccb2f0144ae40876", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2daa5fa152b627f5ae23d2e8fa4e3e399d4899729ad32f184e32d59fd4dd20ef", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "31d7528594b69dc8bb94e4924c70b7befd5ec5c2cfbaa48ba1af3d604fee9259", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "338ca8f7f28cdef28ef3ea255e784ad3596b49b7395a9545060cfddd53b6e200", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "3735150a6fa5b17f9893bf3d9e855e73f00b6c5834dc6470688360794d3044c0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "374f9c0647cd87007e04065945d4f74fb5f91008c2e5c3874e62110e36b3570c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "3836986841894492f57ed22631c1b0f6311708c65babf0525d57ca1de3cbaca0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "3aff0182b1a9f5770002346fe3d33f0bac9e5bfc5bd87235c0f28c7da347c319", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "3e6a15e8b77cdf69fc9feb2bea693349ac4ea97ef95d4138431acfad01b5224d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "3fd6fa0cbd284c6ea9959b7f1fc5e01191b012b05b6dc4f0082d1dd19a36b61a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "414368c3a85deb96f2961fc49ea44c484a8e5756791efc7ff239e194596cb14e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "47970572e98100f7f993c4ec95ce1fdfed06da5c32e8420b746f93e3f55bbf85", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "498e3b7a867d41b5a3af3910d2aa6231612c787ce8a4bc14ab03f800caab130f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4bc3c6475a2f3f2cbd0545ecc89cf2f378717f152db3df24fe7a730c0e1dc125", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4d92c09aeb55814d7543a3bc7e8f7af80a6d2d85425e4713b40854785f73c5e4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4f7b6ce98ea17beeacd5832add0815e5a3b927b74cb25f2467b54ac82e416f50", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "501a6138d75535a08bfe28e4a0f77463e93c27d5b2ba17b343f72776a8a0960c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "513dd91c05752ba47152e76ca401195edda6ef74371ee4b29aaede162502d520", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "52d2af9a8ff6137ac140d31715644d479bf91078969a3884273575e765b51b99", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "54a619ecb85a5b5dc379a3a59058fcbddbe5870cae22297746b91d879ec332d9", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "55ff7873f086970d76691ab9cffa3d82411f883ed1178ef97d480c9e8daae1fc", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5721e6a09cf912aa329fa275aa665932ada075edc890be4cf98e9adaf1b3701c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5880c56845f47c743526bc924d56d15317fd292542b43aba5170c167c258ff68", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5a1e89b319e0e83c2b822cee2e11ba5482c813a9bd9bbc69c54cae86d8d0dfbd", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "64c95b90a06442de37f53f3e779174024beefb155a2c93e898fd4380a6a18b2d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "691d83bd37f1dcffd6090e38ccaa1891d85e913dda7c6147a594fc046cb9417e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "75b53b9476416ec6f9a24918f663a9bd268717e9d7762d01b60d176a308dcd82", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "77496302f15cd581f460a23cdcfdaee9b1a764326d64f8226ea13abce8d29165", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "77962f889091c9e450513e04de1b429b1f15e3a0645637da3e55f963c2da8c43", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "77be13bdcebe3c287d776bcaa17baabb8e6733fd3f9b4936ed1b16a5e70f9864", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "7da802e06f854423395b80b7afcf38f356a38d01895d01dff09f2b0b2a6eb0c2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "820c814711f6e9342e2fc078eac22e6c33f37136eae874a694c04e948cc34eb5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "874d3f892c299a623746d6b0669298375af4bd0ea02f52ac424c579e57ab48fd", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "88bb534525e0fb662e60ff3524897d1b92d86ef792615f916f93f27abb5ea4b1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "89a1471200ca659d069236e757d7813e86ceeca7db0ed7f8350a850763d0b85a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "8bb213d785da8e0c9d8a75d72f8cef6809563bcdb8323a680feadeda0d63bc72", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "8d4c1705286c9518dbcf3c0c01e99b7f19c761bd986372d37083a0a4354adcc1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0080ec82da326f6bebcab521f2c4f79bafb09e5d0eea3be39ca8a2bd6ef9aa8b", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "0341ab8139cf2bea05d76ebac2060c1ab0c7922404172b9f8d73ba09b08b4fc9", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "19c741f450653c5615be1c0f256a3833f21fb4f97156fcb6e6d943597be776ac", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "19ebbfab5d736bb49d11d88f0c71658c18c7c312c3a85ca84447a1c25dbcf849", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "1cd644ff91182d2a6647e6f7c061ced0703239a85e9e01068cfd0dd1f5af24f4", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "28664daf83a19ae6efd7caf9433600981fbb7c95025f473dc4e6099b603512a0", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "4d58d127c08744c5f994ea70d558307a84d9f7a242907bb5f08fe6d376b34a2f", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "62fc350397b98ac1f593eadaf0ebb6c31d272708d71c0ee9a2ce859e06ba2060", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "80886c0098998920898977a6e7f55a8abff2243d74f1176e39447a1654a72c01", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "8656c8bc2d098776803ef6648d5b4d9e4cc444647ac09bb97fcccd54956ddc94", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "8d806315475990a9c3e5d950f415bd2cecafbb3aeb627c4c512a9fc303ef8520", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "8e2dfaccdd6cae858001c2026f60b00c8786cf67e4322a04154671847cac3bea", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "7f899996d4bc193a1739b8f9ca51a7f46a7d41007f472df5622208e2db62b232", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "87e87fd910037fb102a728f4e0036cf5f066b7b704e1160bd685d71d290acedb", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "0bc2ebd7d81e248ff24266be5167696d17e6f034115d9e29233e28afc9c87e79", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "622b42db5fd9f7faa109212504f636c0f2f76d87e025214e3c6be14e460e8f95", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "00f704a09024ca12d12d2464c84eae2a95cc4c68145c000da26eb99419b8856b", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "43de9dac4e456549d8fbfb2b38686a0f794a3ad7788cf8ba9ec81b21b367e51c", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "442050fa9042c683303f972234d0a8198e7da631fa42a27c8d38e330d84fc7c7", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "88580efa885b9d084523baf292fdc834a477377ad92fb604f39e67c4cd331dcc", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "40cbce36a2755389a74ddad8f061da5535368d2edb255f61340d69807c494f79", - "count": 1, - "total_related": 14, - "prevalence": 0.07142857142857142 - }, - { - "value": "1148b9a6adfc4ce16307347e7c69d0c1654689f50b24d1df1da89012b1a61914", - "count": 1, - "total_related": 42, - "prevalence": 0.023809523809523808 - }, - { - "value": "026f04f0f45d9ed9004c03f3092b150b6a917606e90765f5f66ba7abfd93e72e", - "count": 1, - "total_related": 190, - "prevalence": 0.005263157894736842 - }, - { - "value": "5339981168dfcefb874dc7e82563fa7aca047f17b1184ae8db9336a2335473a9", - "count": 1, - "total_related": 459, - "prevalence": 0.002178649237472767 - }, - { - "value": "88de2ea3e3360a0a26f4cbe1922e1f86fa848f7994a702fea6801fb8524c312a", - "count": 1, - "total_related": 893, - "prevalence": 0.0011198208286674132 - }, - { - "value": "67b6eb21319c12e54f9180e24452d103adaa5c507c9ae10161fed7c4d120e85d", - "count": 1, - "total_related": 972, - "prevalence": 0.00102880658436214 - } - ], - "pcap_parents": [ - { - "value": "1c5fd7bf511885054464124142f793501ab2c6e987b203c1a5f4b3bdcccb1fa1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1e86c9b1a92c3624e69ecaabb8abf495475f07a60e9a5449053270cfd2a78b51", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2d23cd3723f7038cd0424c3023bdda9c49c02831e59144e8774aadb59e389a51", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "40494b12beba32d4300eb9364b4e5543db4c46572ef739f19519f1c36c6be164", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "7bf7dfc7534aec7b5ca71d147205d2b8a3ce113e5254bb342d9f9b69828cf8ee", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "a11587e5da097799146454e58c3cae36febb5f62901062441fb7c377def50795", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "abc0064210d2fd9b3d2bcd93eb84413ebbe627e12cccd2cc97729fa8521983e2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0cc54ffd005b4d3d048e72f6d66bcc1ac5a7a511ab9ecf59dc1d2ece72c69e85", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "ddbc4908272a1d0f339b58627a6795a7daff257470741474cc9203b9a9a56cd6", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "8cd768765b23e275c62428b5507bc9177bc31344be72042e9607d5c99c93eda8", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "1ae187f1324eb6107c72fd19f3b05198663bf9775e20ff660befe125c28a52c1", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "a2ffc30b72bb25f813708da9bd34717ed91952ef1d88e64df057d9f50faa9a18", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "0435dd2fa17d9639ddb030e25bfbf890f1f81309e46ef290d3aab52a5b7d4bd2", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "e9ae7d5f64a7c3c557223362da81478708a147803f3b4282d1e00b52ef5afa64", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "1e4313839b8075330c948e4ec1110a7a925a12b9b0e5f96a6e9d0ad69782d328", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "8253d093936e3107a9c08999008ce6789e1a1b31a05a35cbd277932624971713", - "count": 1, - "total_related": 15, - "prevalence": 0.06666666666666667 - }, - { - "value": "e29a3db17025e34336b10d36e5dd59ff5d1ac07ada8df0cddba0d3f3db689f65", - "count": 1, - "total_related": 15, - "prevalence": 0.06666666666666667 - }, - { - "value": "0d60ed897f58b56823755784e63aac00446bd96c93facc216d911e8b5530cb21", - "count": 1, - "total_related": 17, - "prevalence": 0.058823529411764705 - }, - { - "value": "ce28c8ed8851249ba6cae8f8d68d8d59f59be3eae6238c36b547b5a833b86860", - "count": 1, - "total_related": 17, - "prevalence": 0.058823529411764705 - }, - { - "value": "cc366561956b54063032aae446e76e164737c5cf1a1510305703767a4fdcee35", - "count": 1, - "total_related": 18, - "prevalence": 0.05555555555555555 - }, - { - "value": "43f187e16b86e2c1fd9c4c23576b70531ed08ff582bee7c94980940cc25abe1b", - "count": 1, - "total_related": 19, - "prevalence": 0.05263157894736842 - }, - { - "value": "ce23b05499badea64685798fe4ed42fadc25008d871e9a67a56ae0e83134334e", - "count": 1, - "total_related": 19, - "prevalence": 0.05263157894736842 - }, - { - "value": "05406c13d43a3796c29602a73c8d71df619dc8145840d28d27414fea40fefcdc", - "count": 1, - "total_related": 20, - "prevalence": 0.05 - }, - { - "value": "82401eb5ae2416daebbab1b3f0b7fef3d10388c7eb9a048384577100e6ae712b", - "count": 1, - "total_related": 20, - "prevalence": 0.05 - }, - { - "value": "414fa7f5d5a30d0ad0eba824f1df08a20681508cb7ed85d3b31fad87293d9aed", - "count": 1, - "total_related": 21, - "prevalence": 0.047619047619047616 - }, - { - "value": "a0bcd1b1ec3143aa7bb11a8080d7f1e61f8ab045e06252ef507d0558f6eff55d", - "count": 1, - "total_related": 22, - "prevalence": 0.045454545454545456 - }, - { - "value": "c7d9deba734a1bd671f865a828c0c84841aaedf33eef5a82fa8b01a2d243817d", - "count": 1, - "total_related": 22, - "prevalence": 0.045454545454545456 - }, - { - "value": "cb430eb78924333bbf1a2e48e35c80760669662339334bf258d05a0fffa1d793", - "count": 1, - "total_related": 22, - "prevalence": 0.045454545454545456 - }, - { - "value": "cd89f99567dd598809fa2055774b7f18fc3676c6547f0d3083e192f119b2cf14", - "count": 1, - "total_related": 22, - "prevalence": 0.045454545454545456 - }, - { - "value": "52361be82676ee24ebe76772e37d4c037a3f23e1f8bba881eecda730b47bef95", - "count": 1, - "total_related": 23, - "prevalence": 0.043478260869565216 - } - ], - "dropped_files_sha256": [ - { - "value": "917e115cc403e29b4388e0d175cbfac3e7e40ca1742299fbdb353847db2de7c2", - "count": 3, - "total_related": 936, - "prevalence": 0.003205128205128205 - }, - { - "value": "00342569cc4b347d888bc14a7ba5af339157835afb938f929622e46b90dd04a5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "00618aef93948027371e2b57c46005a6ffa95a51e759623ed576c8ea3b4d4852", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "00ea40714e1d1d323d900b27861fd791d8d8048f8915b32e4096fcbcb97c1ab7", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0112a44c49df3883d019a0614ff1632d0b9eb9d7c13673e29a09cb17a2af8cf6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "01faad5233e99b700711e275700dbd7583a65a05699ab4a7870f1d3a638ef890", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0213f77d114bc56551ab807bab0041e53c37ec26ff67b1510483b973c06f009a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "021684209fcc0bfd0e92ecdd0cda773c03a7d07ee7150228144782fc24bb3c08", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "023d65057a20f71ede919d888b25345edb049d4d270b412a1588e56aa39e1842", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0252fdfbe20b651777ea9517530f5ffea5c3ddb5298988f8c7a8b17e88d991c6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "027c0059dae76f38b83736cf0bf5744df420bca9322c384eac8e9b9e1920d6c4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0286ebaf8ba6353986d49541e31daea364bac3e8d5f519e9b29654ddf8d20d18", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "028fe9fd85a1f4cf43458efa60b7473725f281f735187d6bcb85d044826be9d7", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "02d8d86561a7417f857a46dc77b42785ecb185f7b3196b6aaaf73e8f0b8b973a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "02fbe3919645ac9273cc86ae47ad4eac384e8a08e7c53ce619a43e921c435196", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "032d0742b96337e5145b5c063637e8b945e04fcc81994fb64626617d6088d0df", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "039059ce2588719940c57378a6208b5391576a6cded3eac27b2ab4239a04b5b4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "03c890a8b92b289b013c115b4656b5d96225195034b352e8911d8444d72e4d2e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0434a7b84be3adb50e5c6a13abc5bde2370c07816c07b9c46b2446fa3fbd46be", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "046892f2e0fcd2859c2bb3d4e687535e8ac44d6da2cb772193b7faf1939d5b37", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "047583d7aece8e3eff217d6b12b0f7e36c6c6a09f8eb50457278e43fdcfc4b34", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "04907897ebb7eb00582237022ac44b0c8682d3e3977424a4af87e2915740deb5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "04967ab11c9e5c229ec919fed16f9aa4deb6f58a55bc7e950872cf29380b743e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "04d33c774ba45a5a9cb15858b038ea463292d40967683ea7e9347283460b16d2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "04e3d2bea28ba66b32da2fb83bf6084e5f99b2e82691bf4cb4904550cf32c78f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "04f5ee069dfc4747675806e28caead0387a7d74e9db6e86dfc0e754e5702b12c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "04fa6b7c633dda899ae5d878af01bb0e26ae25601c51e54eca4ae785f46773a7", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "058d98a55ed039a2740585dca30cf3d4352b267c7dce0f82561d8bc07005fe30", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "063000c83f29d1772301df8639e08d504f1bcac851067d309bfba135fbd4e449", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0633e1469977ceb2adf9a4375bbc615d6db72c1bbe5ca789b8c2aab860c4da2c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "070e354174228ac66561f7729b9da53579b782fe26dda251f8629b5b1b3f7eeb", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "07512919e6bffc0ac6cb296bf3a8baa08035b813b1bf37162137fcb5c64495bc", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "082cf187bc5460b643cac69f1b9aae049aaffc633ab72b31441ca0816738993c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "084c61844d4ed126cf3d673fc4c7a92b83ec2cf7ec642ce114594bca4f2830a2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "088f925c3a9d2149bb286158b18097dbab17ee94ebd4637410612986d5a7711e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "094c0f7470b9560c6b40bed9acd8e564bb652e24b6adaaf64968de6a5d4a21be", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "09988bdb7932f9925f294ef69407ed68501e0eec8d393d39f2e2cc71d7484ad2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0ad204cb9370ba5da541f54654282f5b28361cbf85b6cb90d50aae5db5491241", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0be075cbc47563bcefe018bf5df8b5d7a9f7d2b391db2447ec1f097f7f74ee23", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0be24ccede352167154431ea2e811ccf07befc9e06ba3bd73ca97083b45718ed", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0c6e322682de312afa306d40e469e1498897a28abd7f0ec9ccc21841811cfbb3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0cac8446c5f224a4e8557d70e84ec3a36798cd17d2c783b4e44f072662f542f3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0cdbb0c5051ec8af455d571f1c05970bbdc83f5f5e0236744bc4d12ba26913e5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0cf0d5791be3428de4dfe00521351d00c671089b7d0d4327dade43c2943e2d83", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0cf6c3906152296dae33873061dba5e5051e618488a272a58ceb890f3be4c3c3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0d3f64df4276c56daa13b84fe4b0738c827a370ed4da065e8af9fe35f8251d6c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0d66312151c22b62371305ef9352186296aa9279461ee1fd30b832cde2fd2665", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0e71b1e133a35af762fe2f1b5be07ad84fa77c49939a9e6cc0e76f03ffb9f638", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0e7cfbda492b201768fe0bad34cc4c09564304bc448c0798bb9fad8821867080", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0ecda607f46c3974ec1278fe30c1f145cd1a8350d6313ea5077c4a1127d33672", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0f44f170893356deebe1eb3d30ebab688335e30753952aa48b08d9e995e90cb9", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0f9cee2b038bc384375c3184fc5322c73f5665e4e095bfaa1edcc3cddd26ee01", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0fd5fb5f51aaab326d4f43821e3ec4052e3511fa1a2bde7162b4de77b4fdd39e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0fe4154e4270b52121517957d3b3c91c42d7ebd6c1c01e3922e926107803b538", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "106e09b88db7b41cef5b88f7888f0966b5f1ef6a73d25ba3f6323d229056a3ef", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1103f88856ade2356a5f01a7918f7466e9f3314106e60eef8fb8146c0eb1e0cb", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "11514e45c650e862ce2c5e49c3c1769bb02318fac55133ea0bcc1fb03cc613fc", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "115edf769fedcef4659880760fedc9ac770d906ed4bedbfaf6c4faf92f2d644d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "11b32e16d0d83702e7be751c0bff7114a9f8f6d9a53c4ce9c98a96b6553857fe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "11b884c4cf7078ae7976f3c696428bc5ffa6d48b130f968cf720e134ae5fdf39", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "12152ef7eefe52037daf764853da48deea6e02ca23d561e7db4ad426bf8a43da", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "12186d78401e5b6ecfa316b7a7531b878d8bdfd5b27d267a293dd91d291e17c2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "123562d1667f5a78853af79f4e0ca276b9b71c700dccfb30a2a4bc9585c4935b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1310BC4EC642CB9209B592C0A0C2FE201E095620281341F3679CBB9C5E45F9F9", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "13238589b4b1f5246493c719c93771e1e0c8bf3258f55b70c44e44714e13f080", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1334c3575f401d3c2179556820b228d64ede5bcff144ea3b034288977d2190e6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "13559e8dc6ca8b36f586a0ecb0aa4489d45d75a28caad89c00c381429535f7c2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "13aff6e7aff64dba8976af48199a9db82e7a67dd2efb0de9f4817849b637c4f9", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "14160fb7d1bf0153a9e2fa2159288049f6ccb6f6eda5b11e46b6e6ad0e92da28", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "143d738860a08cf333c1b6a0b728b4ed9a12d85b71a6c82c1a2ff987353ac5af", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "145294070135c628e17bb3e38e882642600e9bce0e005d8827525817c838f8f3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "145e677d234cd99207d4e395ca2a1a1bb044fe3802055ca919bd10ac71ab3bf8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "15300afa719f3225fc8a767ff768d72340e4c856099a4b8b6df46404d9c6cbc1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "15547c1ba66914b2cf43f867070c0571d91b70c877fe499b0e07476fd072cbb1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "157a885d75efd599b326555291eccae5809b3c300c3b6c8c3860301272f7417b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "15be3aadd7a0d6d9eadba7091bf9eb017ec53c9d0741ec86b4edac41e6f8e1e7", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1610ACD2CF4F328B8F79D59C0068500D776937B67EAB24B5AF4FFFE3E948E1C8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "165659fa007bab93095a38d2b417f6e7c86dcfacde656376537b8f43abed935f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "16648805012b5993fc569e6f4af9168a00e516bc074530525a7a0daa60fae04b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "166745214126e468cbd5b7a15efb818ab9feada06a160206dc0e5a305104dede", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "16674f20e1525a57b0173b484fb5a29c5ec70ee7481199b18f2e9b195d188ab7", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "16968312641745bdfc22996f0f63ead46105456d08923737b75a6fbaf866ab95", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "16a2e3e7a264bd600403a175453a5e133718a3212234bfe393b63facc9a98faf", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "16c22851cc2ed60c42712352ebbd5f1fb88d5f2d1d70bca7c245fc2c394f6d7f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "16dba07c889b93727fa6fa3e7c46348ddadc6589fedc5b112b6c40c0416e5355", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "171754a60031523be6e4542daeb28747b334e1ff7ba504c1ead43bbbef696885", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1735164e88076143f76d3548dbea4d87ef13ee2dcf9219848c3e14d7c0b2e0b7", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "173825365bd0bc90df09439424f515d366897d8cd7cf164a30429c95a716e297", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1749fdaeffa0ef1bc869b0a7861ac59d3ef736bc5c5a3a4b4ad7a8dc793469d7", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1751c526c251cbfb81fb27550021f751a1945589d7c2f92b484e8cab1359e095", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1758a07e7c2635b290f3bd3074d651213ced01c540c57555dfa77e7c094477c3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "177667ab212fbd916f5a4e6470e3c81a2457e7a417de6026e33c8fc16c186dcf", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1788f46efcd8b64a92d944af55e4c59c77ada44ba25511b8e0beb9fe48e5c5a4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "17F3429931063CDC51A8C17B8D4276BC65D57F68B7376BDE75C960C9E170953B", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "17a0f8b7e26348d3e7c05017ddd2ff533ced47c469287ccbd3aad183cf390016", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "17ba97000b29b7fd35d4d4c1510784f78eabd6b04d2f4fa7129ee141aa8a6b06", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "182ce38978e8843809813c3c08fcc9d3947859066258169d3715fc0544b8c274", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0811a839cfe3332343721140211cdecc94b0dc69820db0032df32c968adc88df", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "1583d8d0a2b7c232e0499f21d9e723f75efb3b3fe937d8167f7d233928ab7115", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "0356a869fc7e6495bac33303b002935c317166d0ea5d403be162573cf01055d8", - "count": 1, - "total_related": 10405, - "prevalence": 9.610764055742432e-05 - } - ], - "tags": [ - { - "value": "peexe", - "count": 171 - }, - { - "value": "detect-debug-environment", - "count": 148 - }, - { - "value": "calls-wmi", - "count": 136 - }, - { - "value": "long-sleeps", - "count": 131 - }, - { - "value": "checks-cpu-name", - "count": 61 - }, - { - "value": "checks-user-input", - "count": 53 - }, - { - "value": "direct-cpu-clock-access", - "count": 48 - }, - { - "value": "runtime-modules", - "count": 48 - }, - { - "value": "persistence", - "count": 44 - }, - { - "value": "spreader", - "count": 38 - }, - { - "value": "self-delete", - "count": 26 - }, - { - "value": "invalid-rich-pe-linker-version", - "count": 23 - }, - { - "value": "checks-network-adapters", - "count": 19 - }, - { - "value": "overlay", - "count": 12 - }, - { - "value": "exploit", - "count": 7 - }, - { - "value": "pedll", - "count": 7 - }, - { - "value": "cve-2014-3931", - "count": 5 - }, - { - "value": "idle", - "count": 4 - }, - { - "value": "64bits", - "count": 3 - }, - { - "value": "cve-2004-0790", - "count": 3 - }, - { - "value": "cve-2005-0068", - "count": 3 - }, - { - "value": "cve-1999-0016", - "count": 2 - }, - { - "value": "assembly", - "count": 1 - }, - { - "value": "checks-disk-space", - "count": 1 - }, - { - "value": "corrupt", - "count": 1 - }, - { - "value": "executes-dropped-file", - "count": 1 - }, - { - "value": "malware", - "count": 1 - }, - { - "value": "obfuscated", - "count": 1 - }, - { - "value": "rar", - "count": 1 - }, - { - "value": "upx", - "count": 1 - } - ], - "main_icon_dhash": [ - { - "value": "6cf4d4dcdcd4d4d4", - "count": 6, - "total_related": 277, - "prevalence": 0.021660649819494584 - }, - { - "value": "831f362424242626", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "34e9e4518babd6d6", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "71e8ccccc4b0f230", - "count": 1, - "total_related": 49, - "prevalence": 0.02040816326530612 - }, - { - "value": "d4c4c4d8ccd4d0c4", - "count": 1, - "total_related": 89785, - "prevalence": 1.1137717881606059e-05 - }, - { - "value": "b2a2e3e3e3a3a200", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "f0f0f4d8c8c8d8f0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "main_icon_raw_md5": [ - { - "value": "e21f903eeb690b791366657cadd961c8", - "count": 6, - "total_related": 248, - "prevalence": 0.024193548387096774 - }, - { - "value": "3b36af321d209e469c76fc37944ff2de", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "f8c8b6bdb6532052a5e709c0c2b7d69a", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "442f396c500b086bfe8aab8ef3a5190e", - "count": 1, - "total_related": 49, - "prevalence": 0.02040816326530612 - }, - { - "value": "2bd1617e44bb44db5f26dceac89c9b1e", - "count": 1, - "total_related": 90047, - "prevalence": 1.1105311670572034e-05 - }, - { - "value": "2a1613d0845d00b916aa58adf0d41788", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "6f18b3932aca200c19eda2c0a8389fe2", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "vhash": [ - { - "value": "01506666151d7d7567za1z8nz7fz", - "count": 71, - "total_related": 666, - "prevalence": 0.1066066066066066 - }, - { - "value": "01506666151d7d7567z61z7nzbfz", - "count": 54, - "total_related": 450, - "prevalence": 0.12 - }, - { - "value": "0950366d651029z47z29z1jz", - "count": 19, - "total_related": 433, - "prevalence": 0.04387990762124711 - }, - { - "value": "0850266d6\"z", - "count": 12, - "total_related": 68, - "prevalence": 0.17647058823529413 - }, - { - "value": "01506666151d7d7567z81z8nz7fz", - "count": 12, - "total_related": 186, - "prevalence": 0.06451612903225806 - }, - { - "value": "015036656d11e3z12z390302231z37z60600165zb7z", - "count": 9, - "total_related": 12, - "prevalence": 0.75 - }, - { - "value": "015036656d51e3z12z390302231z37z60600165zb7z", - "count": 7, - "total_related": 8, - "prevalence": 0.875 - }, - { - "value": "01507666151d7d751567z61z7nzbfz", - "count": 6, - "total_related": 22, - "prevalence": 0.2727272727272727 - }, - { - "value": "015036656d51e3z12z3b0302231z37z60600165zb7z", - "count": 6, - "total_related": 46, - "prevalence": 0.13043478260869565 - }, - { - "value": "01506666151d7d7567zc1z4nz4fz", - "count": 5, - "total_related": 66, - "prevalence": 0.07575757575757576 - }, - { - "value": "01505e665d1d7d77z51z9nzafz", - "count": 4, - "total_related": 6, - "prevalence": 0.6666666666666666 - }, - { - "value": "115056651d7d7567z71zanz7fz", - "count": 4, - "total_related": 38, - "prevalence": 0.10526315789473684 - }, - { - "value": "015036656d11e3z12z3b0302231z37z60600165zb7z", - "count": 4, - "total_related": 67, - "prevalence": 0.05970149253731343 - }, - { - "value": "01507666151d7d756e17za1z8nz7fz", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "01506666151d7d6567za1z8nz7fz", - "count": 3, - "total_related": 23, - "prevalence": 0.13043478260869565 - }, - { - "value": "11506666151d7d7567z51z9nz9ez7", - "count": 3, - "total_related": 37, - "prevalence": 0.08108108108108109 - }, - { - "value": "1350976d755c051d5d1dbz462e9z13z13z2ez1", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "0950366d651029z57z29z1jz", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "0160c6755d155665501d1az5d!z", - "count": 2, - "total_related": 229, - "prevalence": 0.008733624454148471 - }, - { - "value": "016056655d15755210b020023009f6z141b013ze2za0030e039z", - "count": 2, - "total_related": 23737, - "prevalence": 8.425664574293298e-05 - }, - { - "value": "01506666151d7d7567z71z6nz8fz", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "01608666151d7d750e651bz3nz1fz", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "01608666151d7d756e651bz3nz1fz", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "04609606050d0d060d1677z11z1nz1fz", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "256036756519a08a2cf1095", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "6989d5335e381ec0bda90ca85748c6ba", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "015036656d51e3z12z390402231z37z60600165zb7z", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "01506666151d7d6517zc1z4nz4fz", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "06508606050d0d0707751015z11z1nz1fz", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "0950366d651029z57z29z2jz", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "0950366d651029z67z29z1jz", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "09609606050d0d060d1677z11z1nz1fz", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "115056651d7d7567z81z7nzbfz", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "01507666151d7d757567z61z7nzbfz", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "056086656d15651550651023z42zaa7z21z2031z1028z1f4z12b", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "11506666151d7d7567z71z5nzaez7", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "01506666151d7d756\"z", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "01506666151d7d6567z61z7nzbfz", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - }, - { - "value": "05608606050d0d07077517z11z1nz1fz", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - }, - { - "value": "11506666151d7d7567z71z7nz4ez7", - "count": 1, - "total_related": 31, - "prevalence": 0.03225806451612903 - }, - { - "value": "095076655d155d15655az979z3tz", - "count": 1, - "total_related": 36, - "prevalence": 0.027777777777777776 - }, - { - "value": "115056651d7d7567z81z8nz7fz", - "count": 1, - "total_related": 36, - "prevalence": 0.027777777777777776 - }, - { - "value": "017046557c051bz112fz1lz", - "count": 1, - "total_related": 72, - "prevalence": 0.013888888888888888 - }, - { - "value": "017076655d155d05555048z6dnzefz", - "count": 1, - "total_related": 601, - "prevalence": 0.0016638935108153079 - }, - { - "value": "0260566d55557560e013z1005114kz1e03dz", - "count": 1, - "total_related": 12322, - "prevalence": 8.115565654926148e-05 - }, - { - "value": "03503e0f7d1bz4!z", - "count": 1, - "total_related": 16517, - "prevalence": 6.054368226675546e-05 - }, - { - "value": "0150866d1c0d1c0515651035zc00159z25z23z2fz", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - } - ], - "imphash": [ - { - "value": "914685b69f2ac2ff61b6b0f1883a054d", - "count": 77, - "total_related": 855, - "prevalence": 0.09005847953216374 - }, - { - "value": "41fb8cb2943df6de998b35a9d28668e8", - "count": 61, - "total_related": 667, - "prevalence": 0.09145427286356822 - }, - { - "value": "216df81b1ef7bc2aa8ec52bbeef137c9", - "count": 19, - "total_related": 410, - "prevalence": 0.046341463414634146 - }, - { - "value": "eb998cc9454b55f8d5f953c6f8cc8cbb", - "count": 16, - "total_related": 20, - "prevalence": 0.8 - }, - { - "value": "89b43582b27abefb2b74684ab12a2f8e", - "count": 12, - "total_related": 245, - "prevalence": 0.04897959183673469 - }, - { - "value": "e9f710b579880d1b6ff748176eb620f1", - "count": 10, - "total_related": 117, - "prevalence": 0.08547008547008547 - }, - { - "value": "3bc510de773c954bd69d33670cb624d6", - "count": 6, - "total_related": 79, - "prevalence": 0.0759493670886076 - }, - { - "value": "a50a0d82b9120fc73965c28fea79e1f9", - "count": 4, - "total_related": 19, - "prevalence": 0.21052631578947367 - }, - { - "value": "07530c85f3bf8d18d55bc566a43ea905", - "count": 4, - "total_related": 39, - "prevalence": 0.10256410256410256 - }, - { - "value": "d5feac3e94d92e4c2e9fe14f1f783fd7", - "count": 3, - "total_related": 93, - "prevalence": 0.03225806451612903 - }, - { - "value": "5d85e9bd7b32de0958c404af2cf1e756", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "d5eee910bd9051fc4b1b237f82f77d00", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "62f2e1f5c3bc54599fe39dfb87ec9ee0", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "130d5621ef2323889c6e1ed2746329fe", - "count": 2, - "total_related": 242, - "prevalence": 0.008264462809917356 - }, - { - "value": "88381b84da56810b869e897e6d45bd58", - "count": 2, - "total_related": 16279, - "prevalence": 0.00012285766939001166 - }, - { - "value": "bbac62fd99326ea68ec5a33b36925dd1", - "count": 2, - "total_related": 88356, - "prevalence": 2.2635701027660827e-05 - }, - { - "value": "17a3893d66d35318253b647340956b4d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "38ab51ce4bc65b6c7d56dddb7ab47c7e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2d914d7e9fbec35234d49a5bce5e0aa6", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "bfce782cfa0e2f22c598571118d3f91d", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "ee120aa57fa2ff682fc9cac51b047e49", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "e3df9a977ea4b797be29251e9f3e0125", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "a6e537c4400191f066a8ccb2bd93aeb1", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "45d9a94dc34a9970bbb91822da78d46c", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - }, - { - "value": "b1826e7d9522633dc1f4953f25424ce3", - "count": 1, - "total_related": 31, - "prevalence": 0.03225806451612903 - }, - { - "value": "acd3b654f3f639b4748149cb649c3de6", - "count": 1, - "total_related": 32, - "prevalence": 0.03125 - }, - { - "value": "b750c147c0bcc8b349e4f1143ac1432e", - "count": 1, - "total_related": 87, - "prevalence": 0.011494252873563218 - }, - { - "value": "e459be60628b1dec27c7257fd3678a46", - "count": 1, - "total_related": 224, - "prevalence": 0.004464285714285714 - }, - { - "value": "6f462fcc6b830b77fb3fef2add9dc570", - "count": 1, - "total_related": 1068, - "prevalence": 0.0009363295880149813 - }, - { - "value": "7e0a0e8f80bbd1a9c0078e57256f1c3d", - "count": 1, - "total_related": 3528, - "prevalence": 0.0002834467120181406 - }, - { - "value": "33742414196e45b8b306a928e178f844", - "count": 1, - "total_related": 20954, - "prevalence": 4.7723584995704876e-05 - }, - { - "value": "9f4693fc0c511135129493f2161d1e86", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "646167cce332c1c252cdcb1839e0cf48", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "6ed4f5f04d62b18d96b26d6db7c18840", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "f34d5f2d4577ed6d9ceec516c1f5a744", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "behash": [ - { - "value": "32cb327dcc152a362038c7279c8f252c", - "count": 25, - "total_related": 39232, - "prevalence": 0.0006372349102773246 - }, - { - "value": "9137a846c3ee495c3da2605d3c5ed886", - "count": 21, - "total_related": 443, - "prevalence": 0.04740406320541761 - }, - { - "value": "f206db6b1407a4f4a305d2e976db9773", - "count": 18, - "total_related": 172, - "prevalence": 0.10465116279069768 - }, - { - "value": "0660276d9182600fe70e7a3bd32eb340", - "count": 18, - "total_related": 228, - "prevalence": 0.07894736842105263 - }, - { - "value": "edd678586a96b6839e50161143e35b6d", - "count": 13, - "total_related": 191, - "prevalence": 0.06806282722513089 - }, - { - "value": "36404bb72afeef768f08f16e4b615b9c", - "count": 10, - "total_related": 14902, - "prevalence": 0.0006710508656556167 - }, - { - "value": "978748c2175ddb54ef24f114248db84b", - "count": 9, - "total_related": 25, - "prevalence": 0.36 - }, - { - "value": "741d7d485cfe51768680ecb1eacceedf", - "count": 9, - "total_related": 169, - "prevalence": 0.05325443786982249 - }, - { - "value": "67874de755683cb11ad8b140fcc4bd9d", - "count": 8, - "total_related": 150, - "prevalence": 0.05333333333333334 - }, - { - "value": "72887f3befa4e36a6aaafdd879a38f5b", - "count": 7, - "total_related": 51, - "prevalence": 0.13725490196078433 - }, - { - "value": "77151ad1512b05ef5df3ff41e8db917e", - "count": 6, - "total_related": 197, - "prevalence": 0.030456852791878174 - }, - { - "value": "f671fc507e3d4b6c64a5a49227f0d6de", - "count": 5, - "total_related": 7, - "prevalence": 0.7142857142857143 - }, - { - "value": "9c594e5a5aa498fb6cba4597382dc3b8", - "count": 5, - "total_related": 14, - "prevalence": 0.35714285714285715 - }, - { - "value": "d8db68a88476218cca173ab06296b788", - "count": 5, - "total_related": 15, - "prevalence": 0.3333333333333333 - }, - { - "value": "bf37d63668a3babeab8243ffb31be1d5", - "count": 5, - "total_related": 26, - "prevalence": 0.19230769230769232 - }, - { - "value": "b90571594561e96b04ec44dd4aa5ca95", - "count": 5, - "total_related": 62, - "prevalence": 0.08064516129032258 - }, - { - "value": "08e770c0dc483729be0d4c0d1c41dbc0", - "count": 5, - "total_related": 91, - "prevalence": 0.054945054945054944 - }, - { - "value": "1194351a4be0410aabfd5b350868784f", - "count": 5, - "total_related": 162, - "prevalence": 0.030864197530864196 - }, - { - "value": "b1306ff7eee879d62f3378664356538c", - "count": 5, - "total_related": 230, - "prevalence": 0.021739130434782608 - }, - { - "value": "f29d7cd77f34d687a9acd726b4055fdf", - "count": 5, - "total_related": 250, - "prevalence": 0.02 - }, - { - "value": "3d2984f2bbbdf3ec55379c13445eb40d", - "count": 5, - "total_related": 270, - "prevalence": 0.018518518518518517 - }, - { - "value": "966abea788c3845ee2bf26ece9237ced", - "count": 5, - "total_related": 15413, - "prevalence": 0.00032440147927074547 - }, - { - "value": "363f0aed880d2eadf7f58915b534c919", - "count": 4, - "total_related": 8, - "prevalence": 0.5 - }, - { - "value": "2cf07b029e557bee9f4d30a6bb5c5cf7", - "count": 4, - "total_related": 13, - "prevalence": 0.3076923076923077 - }, - { - "value": "d3ff4e0e37f3844023d196a782c4060c", - "count": 4, - "total_related": 19, - "prevalence": 0.21052631578947367 - }, - { - "value": "5c4fc895cf763f2f106e8de0633ddc7d", - "count": 4, - "total_related": 22, - "prevalence": 0.18181818181818182 - }, - { - "value": "12044e4e34fa6783661132d04208a23b", - "count": 4, - "total_related": 31, - "prevalence": 0.12903225806451613 - }, - { - "value": "d3ba36a6619304f3e59219f804ecf98c", - "count": 4, - "total_related": 36, - "prevalence": 0.1111111111111111 - }, - { - "value": "dd9e0e05856d2e2f7bc3342ba8c50540", - "count": 4, - "total_related": 40, - "prevalence": 0.1 - }, - { - "value": "72fed847140b18c381cd34d5bd68105f", - "count": 4, - "total_related": 89, - "prevalence": 0.0449438202247191 - }, - { - "value": "e92922755986dbbf0d256e3a401aa10b", - "count": 4, - "total_related": 104, - "prevalence": 0.038461538461538464 - }, - { - "value": "318fff25826b092a5eb3ec55c717f563", - "count": 4, - "total_related": 115, - "prevalence": 0.034782608695652174 - }, - { - "value": "dd6cea56e8bc96ea957e4a99022dc786", - "count": 4, - "total_related": 153, - "prevalence": 0.026143790849673203 - }, - { - "value": "d130866329c42d572d832050520597d9", - "count": 4, - "total_related": 154, - "prevalence": 0.025974025974025976 - }, - { - "value": "ffd7a93dd5dbdcbea87d51a0315cfde4", - "count": 4, - "total_related": 255, - "prevalence": 0.01568627450980392 - }, - { - "value": "5c9f933ea3889f66c8107ba692c08738", - "count": 4, - "total_related": 8698, - "prevalence": 0.0004598758335249483 - }, - { - "value": "03281af501e7b558d0038fb1f792aff0", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "5afdace2752a4cbef36dcd6747e15e5c", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "9d1cb7e136312de0d13a4db562eb551f", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "27ac2ed47b5b2f6a409660adaf77812f", - "count": 3, - "total_related": 6, - "prevalence": 0.5 - }, - { - "value": "a9174473576e2a55967c40b3a63f38bb", - "count": 3, - "total_related": 6, - "prevalence": 0.5 - }, - { - "value": "403490a85a10139e6603f2524ab91f41", - "count": 3, - "total_related": 9, - "prevalence": 0.3333333333333333 - }, - { - "value": "a14f8546a0fae47d655db49d07050997", - "count": 3, - "total_related": 14, - "prevalence": 0.21428571428571427 - }, - { - "value": "a956fb321b62503d95194b6248cd3340", - "count": 3, - "total_related": 18, - "prevalence": 0.16666666666666666 - }, - { - "value": "dac314f4d93fa30419158df8d271afd4", - "count": 3, - "total_related": 19, - "prevalence": 0.15789473684210525 - }, - { - "value": "774480b67812871debf105263b80e867", - "count": 3, - "total_related": 27, - "prevalence": 0.1111111111111111 - }, - { - "value": "c259b01ca70896c3e513026d789097af", - "count": 3, - "total_related": 30, - "prevalence": 0.1 - }, - { - "value": "fc040b4d3960aee7d5b9cd0c152ee5cb", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "2bca0ff41eef62623765156c11cac201", - "count": 3, - "total_related": 45, - "prevalence": 0.06666666666666667 - }, - { - "value": "996c890e329ac2cd24edcef5de1a243e", - "count": 3, - "total_related": 87, - "prevalence": 0.034482758620689655 - }, - { - "value": "eefd4fd22d50d140f1752316267942f6", - "count": 3, - "total_related": 150, - "prevalence": 0.02 - }, - { - "value": "2474b2bd99844ee8aee96af6407064d4", - "count": 3, - "total_related": 159, - "prevalence": 0.018867924528301886 - }, - { - "value": "907b722e96ec5ed1c591ddee7da2b465", - "count": 3, - "total_related": 57883, - "prevalence": 5.182868890693295e-05 - }, - { - "value": "77cda058f3bc9a42b185036757c1474f", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "b71866e72ce3534bbf5b9e6bdb7eb3bf", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "5f75fd1a1afcdd926b7385bb3c458c38", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "a9ca21ae59eec5d45f59f9a218b8cb95", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "ac0de3e24b763ad02a6ba2dcdba4a65f", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "afa9d097df689602b060be2a6834d96f", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "38e9e004d014892815caeadbd26a8db6", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "5d9c3f6a9a711219d9277fb050be52ab", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "a21855206f0086c8df193dd7d8ea38de", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "c7493cc3afa51de2303b86190f38d476", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "8adb7ba320c60cb36dabef9c118d2ab9", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "48c879a57b16431015fa32b2688ecb3f", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "85704a297f79c242c058eddaa6b53c24", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "2af4097ea50174e0dd0cd1ee470a1b68", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "3a3d3f150a017329e4a9b2d5d7c01883", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "6057da703200848add000b0a646eb2eb", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "2cf0cddd45767e9c43ee0b03920c822a", - "count": 2, - "total_related": 9, - "prevalence": 0.2222222222222222 - }, - { - "value": "c4b9c2d4168204b2ba78a259fefbca17", - "count": 2, - "total_related": 10, - "prevalence": 0.2 - }, - { - "value": "7e2b4f49725606b5874d693b966b7179", - "count": 2, - "total_related": 11, - "prevalence": 0.18181818181818182 - }, - { - "value": "b4dade15dd2c051d797ad18025f63d0d", - "count": 2, - "total_related": 21, - "prevalence": 0.09523809523809523 - }, - { - "value": "6fc7e20bc0163ad81ff641ee388db23c", - "count": 2, - "total_related": 23, - "prevalence": 0.08695652173913043 - }, - { - "value": "3233240df1b8c942d0cb7d9735875fcd", - "count": 2, - "total_related": 26, - "prevalence": 0.07692307692307693 - }, - { - "value": "6790c2500dbc170714db1f8a43519781", - "count": 2, - "total_related": 32, - "prevalence": 0.0625 - }, - { - "value": "a2c951748fb3f446b31b8343bd7bbe5a", - "count": 2, - "total_related": 34, - "prevalence": 0.058823529411764705 - }, - { - "value": "4f7dde1e48f64af592771278c4338bd7", - "count": 2, - "total_related": 36, - "prevalence": 0.05555555555555555 - }, - { - "value": "b1a98f2bccc298c4443ce55830d5305b", - "count": 2, - "total_related": 36, - "prevalence": 0.05555555555555555 - }, - { - "value": "2fbb80e5908a2f657342e703834370e2", - "count": 2, - "total_related": 37, - "prevalence": 0.05405405405405406 - }, - { - "value": "c4b500b43d95093c3784a174c4fcb4c3", - "count": 2, - "total_related": 48, - "prevalence": 0.041666666666666664 - }, - { - "value": "2bae430272e987a44b78cc94e6d33767", - "count": 2, - "total_related": 59, - "prevalence": 0.03389830508474576 - }, - { - "value": "8642bbb917d5196905775a6694f90c35", - "count": 2, - "total_related": 105, - "prevalence": 0.01904761904761905 - }, - { - "value": "78d89ab7222464441e415e8988333fe1", - "count": 2, - "total_related": 1001, - "prevalence": 0.001998001998001998 - }, - { - "value": "6ace938cf63e7de2164fd7cc0d4160f8", - "count": 2, - "total_related": 16647, - "prevalence": 0.00012014176728539677 - }, - { - "value": "b8555ec7354d74eecfa3090f1c814c9b", - "count": 2, - "total_related": 19212, - "prevalence": 0.00010410160316468874 - }, - { - "value": "0008bd0be2a556eade7f078789e67536", - "count": 2, - "total_related": 75600, - "prevalence": 2.6455026455026456e-05 - }, - { - "value": "c59bc85a0f166a721d9d5e8e1edcb1f2", - "count": 2, - "total_related": 83543, - "prevalence": 2.393976754485714e-05 - }, - { - "value": "6b33cf0792be0edfdc8a60a1e53c523e", - "count": 2, - "total_related": 98010, - "prevalence": 2.0406081012141617e-05 - }, - { - "value": "76c6c8e44cd4f1dbddc0f6c2202c1480", - "count": 60, - "total_related": 100000, - "prevalence": 0.0006 - }, - { - "value": "43934995b7323e096c638e2ecdc31311", - "count": 17, - "total_related": 100000, - "prevalence": 0.00017 - }, - { - "value": "2d0784920a7bf6f905a432af4b87a30d", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "53878ae7c240c652e087120bf0c44d20", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": "adb8af1a660afc6666dc16400fb2aceb", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": "32d4cb0c7069c90eeaeaecfe034c0aa9", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "43f3951f8a6e628e4b6db052d1431fcd", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "727f326aa01b8b87c06c8b13411a992d", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "7eb58e30b74038daa9b31b5d9df78cf2", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "1278f351ee7cd00fcf509a73b37353c2", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "22f73bfbc7ed8be4139c70426894cdab", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - } - ], - "tlshhash": [ - { - "value": "T11E253A0593018F96C813207951FE8DB3A877073192BF1CE6A78466DC83B2FA5776B366", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "T100155D1997028F56CC13207591FD9DB3A8760730937F0CE66BC466DC82E2FE9636A356", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T100E37D21F25ED0B3D47718F22726B57DB3EA4D2C1AA56807E6D80F48BCA49232F0595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T102145C20F245A8F3C42324F52A36E47173AA9F2D1D6C180FEAB53F4A68725D32B55D4B", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T103E37E21F262D0B3C83718F13736B572B3DE8E5C19A96907DAD80F59BCA58232F05997", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T104E36C21F15ED073C47718F22726B17DB3EA4D2C0AA57843EAD80F88ACA49632F1595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T105E36C11F25ED0B3D47718F12726B17DB3EA4D2C0A6A6843EAD40F88BCA59232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T105E37D21F223D0B3C83718F13736B572B39E8E6C15996917EAD80F99BC648232F15997", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T106B39E21F615D573C0E718BE7B567119B35F8E280E79A843D9E80F042865B6BFF21A83", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T106E36C21F25ED0B3D47718F12726B17DB3EA4D2C0A6A6803EAE50F487CA59232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T106E36D21F212D0B3C87718F13726B5B1F39A4E2C2AA56947EAD80F5D7CA48232F15597", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T107C633F6866FF7D4D99804F6C27A08EC56766D4E0B4EBDE52714C93E243CE42D2A2813", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T107E38C21B15ED0B3C47718F22726B17EB3EA4D2C1AA67847E6D50F48BCA48232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10AE37D21F212D0B3C83718F13736B5B2F39E4D2C19A96857DAD80F99BCA48236F45997", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10CE38C10BA52E077D0677AF1BF9FB122738E4D281A686047EAEC0F1864E5C17AF19D53", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10DE35B21F25ED0B3D47718F22726A17DB3EA4D2C0AA57807E6D40F88BCA59232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10EF38E21F253E1B3D42718F12B3675B1B39B8E2D1AA57413EAD80F55AC72823EF18947", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T114642358E9E4A93BCCDE56F562F17B173D9DB828D4A40709BE94718309F39CC8678388", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T116E31725F086D236D9C703B43565DEF668E86438132488E7CBEC5E5C58E0BE5AE3B247", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T118E36B21F25ED0B3D87718F12726A17DB3EA4D2C0AA67847E6E40F48BCA48232F5555F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T119E37C21B25ED0B3D47718F21726B17DB3EA4D2C0AA57843E6E90F48BCA49232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11AE36E21F212D0B3C47718F13736B572F39E4E2C15A96847EAD80F59BCA48236F45A97", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11AE37D21F25ED0B3D47718F12726B17DB3EA4D2C0AA96843E6E50F48BCA49232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11DE36D21F212D073C83718F5373675B2F3DE4E2C29A56847EA980F99BCA48236F45997", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11DF38D21F513D173D42728F22B367571B39B8E2C1AA57413EAD80F59ADB2823EF18947", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11EE37C11F11ED0B3C47718F12726B17DB3EA4D2C1AA66803EAE90F88BCA49636F4555F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11EE37D21B222D0B3D83718F137367572F39E4E2C19A96807DAE80F5DBCA58236F45997", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11F455B52B6D2C1FCC5833DFA657A275AE6368D1E83A4A0C7E3D87F8295103D273B4642", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11FB6330A679124E7F8EB567D8E12CC32A777B9D11F14C3AB026812E55F23AC24937379", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11FE37C21B25ED073D87718F21726B17DB3EA4D2C1AA57843EAD90F48BCA48232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11FE37D21F213D073C83718F12736B5B2B3DE4E6C19AA6817DAD80F99BC658232F45997", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T120E37E11F212D073C87718F12736B572F39E8E2C29A56807EAD80F5DBCA58236F15997", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T121E36C21F25ED0B3C47718F12726B17EB3EA4D2C1AA56843E6E50F48BCA49232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T122E37C21E25ED073D47718F22726B17DB3EA4D2C0AA57803EAD81F88BCA49632F4555F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T122E38C21B11ED0B3D87718F12726B17DB3EA4D2C1AA57817E6D80F88BCA49232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T128E36C21F21ED0B3D47718F22726A57DB3EA4D2C0A657807EAD50F48BCA49232F4695F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T128E37E21F222D0B3C83718F13736B572F39E8D2C1AA96917DAD80F59BC658232F45997", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T12A047D31B152E137CA6638F5A72AB3B073899E2C12A86467F6D4CF4B34738236F15947", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T12AE31725F086D236D9C703B43565DEF668E86438132488E7CBEC5E5C58E0BE5AE3B247", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T12AE36D21F212D0B3C83718F53736B572F39E4E2C15A96847DAE80F9DACA58132F45A97", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T12BE37C21F15ED0B3D47718F12736A17EB3EA4D2C1AA56903E6E50F887CA59232F0591F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T12DE38E21F213D0B3D83718F13B36B572B39E4D2C29A56847EA980F9DBCA58236F05597", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T131E36B21F15EE0B3C47718F22736A17DB3EA4D2C1AA56847E6D80F48BCA58232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T132E37CC510671E69D4DB62B695BE3C128530D8CE02633735BCEB5608FADFE50772A0AB", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T132F38D21F513D1B3D42718F12B357571B3AB8F2C1AA67413EAD80F59ACA6823EF18947", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T133E36C21F25ED0B3C86718F22726B57DB3EA4D2C0A657803E6E50F48BCA59232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T134E31725F086D236D9C703B43565DEF668E86438132488E7CBEC5E5C58E0BE5AE3B247", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T134E36C21B15ED0B3D47718F12726B17DB3AB4D2C0AA56847EAE80F48BCA59232F0595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T13525DF2545A192E6F29154B27A897190F033BD3B87395FFF82F0E325154AFC41B2E72A", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T135E37C21E15ED0B3D47718F12B3AA17EB3EA4D2C0A657843EAD41F48BCA49232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T135F38D21F113D0B3D42718F12B367671B39B8E2C2AA57413EAD90F55ACA6823EF18957", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T136F37D11F212D0B3D87718F12736B5B2B3DE8D6C2AA56807DAE80F5DBC648232F45997", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T136F38E21F213D1B3D42718F12B367571B3AB8E3C1AA57413EAE90F55ACA1823EF18957", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T138E37C21F15ED0B3C87718F22726B17DB3EA4D2C0AA56847E6D90F48BCA49232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T139E37D21F25ED0B3D87718F12726B17DB3EA4D2C0AA57847EAD40F48ACA49232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T13BE37D11F25ED0B3D87718F22726A17DB3EA4D1C1A697843EAD50F48BCA49232F4691F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T13CE36C21B25ED0B3D47718F12726B17DB3EA4D2C0AA57843EAE50F48BCA49232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T13DE37D11F212D073C87718F13736B572F39E8E6C19A96807EAE80F99BCA58136F05997", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T13EE37C11BB11D077D06716F2FF9FB512734F893819B96443EAE51F0824AA8E7AF04A93", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T13EE37D21B113D0B3C83718F13736B1B2F39E8D6C29A96857DAD80F99BCA48132F55997", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T13F4633DEF3835CA6DE2D973940233170777288CAD844E25B49C4A75AAFB32CB1D42E56", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T140E37E21F212D073C83718F53736B572B39E8E6C19A96807EAD80F5DBCA58232F54997", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T141E32725F156E276C4E70BB07568CFF658E8A434232090F7DBED1A5C08E4BE16E37256", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T141E37A11F25AD073D47708F22716F57AB3EA4D2C0AB96847EAD80F5DACA08232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T142155D1997028F56CC13207691FD9DB3A8760730937F0CE66BC466DC82E2FE9636A356", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T144E37D21B153D0B3C83718F527367572F39E8D2C1AA96807EAE80F5DBCA48236F45997", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T146E31725F086D236D9C703B43565DEF668E86438132488E7CBEC5E5C58E0BE5AE3B247", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T147E37E21F622D0B3D87718F13736B572F39E8D6C19A56807DAD80F99BCA48232F05997", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T147F37D21B112E177CA6734F6A729B3B4734A9E2C12A8A463F6D4CF4B35738236F15847", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T149155D1997028F56CC13207591FD9DB3A8760730937F0CE66BC46ADC82E2FE9636A356", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T14AE31725F086D236D9C703B43565DEF668E86438132488E7CBEC5E5C58E0BE5AE3B247", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T14B46236317221145E0E9CC3AC92BBEE532FB0366CF82B57868E75AC535138F4E712967", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T14BE31725F086D236D9C703B43565DEF668E86438132488E7CBEC5E5C58E0BE5AE3B247", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T14BE37C21F25ED0B3C47718F22726B17DB3EA4D2C1AA56807E6E90F48BCA59232F4554F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T14DE31725F086D236D9C703B43565DEF668E86438132488E7CBEC5E5C58E0BE5AE3B247", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T14DE37CC510671E69D4DB62B695BE3C128530D8CE02633735BCEB5608F9DFE50772A0AB", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T152E31725F156E276C4E70BB07668CFF658E8A434232090F7DBED0A5C18E4BE16E37256", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T152E37D21F252D0B3C83718F53B36B572F39E8E2C29A96847EAD80F59BCA48231F54557", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T155E37C21B15ED0B3C47718F12736B17DB3EA4D2C1AA56807EAE50F88BCA19232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T156155D1997028F56CC13207691FD9DB3A8760730937F0CE66BC466DC82E2FE9636A356", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T156E37D21F21ED0B3D47718F21726B17DB3AA4D2C1AA67803E6D50F88BCA59232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T157E37C11F25ED0B3D47718F22726B17DB3EA4D2C1AA57807E6D80F88ACA49232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T158E37C21B25ED073D87718F21726B17DB3EA4D2C1AA56843EAD90F48BCA48232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T15DE36B21F11ED0B3D86718F22726B17DB3EA4D2C1A697807E6D50F88BCA49232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T15E148C21F25ED073C4371CF61B26A17DB3EB4D2C1A696853EAE50F88ACA49632F0554F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T15EE37C21B25ED073D87718F21726B17DB3EA4D2C1AA56843EAD90F48BCA48232F4595F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T15EF37E217112D137DA6734F1A72AB3B0739A9E2C12A8A467F6E4CF4B35738236F14947", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T15FE36D21F212E073C87718F53B36B572F39A4D6C19996847DAE80F5DBCA48232F14A97", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T15FE37C21F25ED0B3D87718F12726A17DB3EA4D2C0AA57803EAD50F88BCA45632F4195F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T161E37C25F25ED0B3C87718F22726B17DB3EA4D2C0AA56803E6D50F48BCA49632F4555F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T163A39E21F611E573C1E718FE77566119B38F8E380E759853D9E80F442868A6BFF21A83", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T16464E026F61380FBE8122AB185A7FBEFC726C85958335B3DD3980520EFAB555349D243", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T110253A0593018F96C813207951FE8DB3A877073192BF1CE6A78466DC83B2FA5776B366", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "T12D253A0593018F96C813207951FE8DB3A877073192BF1CE6A78466DC83B2FA5776B366", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "T144253A0593018F96C813207951FE8DB3A877073192BF1CE6A78466DC83B2FA5776B366", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "T14B253A0593018F96C813207951FE8DB3A877073192BF1CE6A78466DC83B2FA5776B366", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "T14CE31725E156E276C4E70BB07668CFF658E8A434232090F7DBED0A5C18E4BE16E37256", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "T10F253A0593018F96C813207951FE8DB3A877073192BF1CE6A78466DC83B2FA5776B366", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "T114253A0593018F96C813207951FE8DB3A877073192BF1CE6A78466DC83B2FA5776B366", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "T126253A0593018F96C813207951FE8DB3A877073192BF1CE6A78466DC83B2FA5776B366", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - } - ], - "attributions": [ - { - "value": "lockbit", - "count": 263, - "total_related": 10022, - "prevalence": 0.026242267012572342 - }, - { - "value": "lockbit_black", - "count": 261, - "total_related": 3916, - "prevalence": 0.06664964249233912 - }, - { - "value": "blackmatter", - "count": 174, - "total_related": 2884, - "prevalence": 0.060332871012482664 - }, - { - "value": "lockbit_v2", - "count": 27, - "total_related": 127, - "prevalence": 0.2125984251968504 - }, - { - "value": "conti", - "count": 17, - "total_related": 11641, - "prevalence": 0.0014603556395498668 - }, - { - "value": "babuk", - "count": 11, - "total_related": 87456, - "prevalence": 0.00012577753384559093 - }, - { - "value": "ragnarok", - "count": 9, - "total_related": 94, - "prevalence": 0.09574468085106383 - }, - { - "value": "onyx", - "count": 5, - "total_related": 3141, - "prevalence": 0.001591849729385546 - }, - { - "value": "lummac", - "count": 3, - "total_related": 82849, - "prevalence": 3.621045516542143e-05 - }, - { - "value": "lokibot", - "count": 2, - "total_related": 43852, - "prevalence": 4.560795402718234e-05 - }, - { - "value": "limerat", - "count": 1, - "total_related": 4781, - "prevalence": 0.00020916126333403055 - }, - { - "value": "darktortilla", - "count": 1, - "total_related": 6054, - "prevalence": 0.00016518004625041294 - }, - { - "value": "lummac_v2", - "count": 1, - "total_related": 70224, - "prevalence": 1.4240145819093187e-05 - }, - { - "value": "quasarrat", - "count": 1, - "total_related": 97646, - "prevalence": 1.0241074903221842e-05 - }, - { - "value": "neshta", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "autoit", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "tinba", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "amadey", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "crowdsourced_ids_results": [ - { - "value": { - "id": "1:51127", - "message": "SERVER-OTHER NetBIOS name request probe attempt", - "category": "attempted-recon", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert udp $EXTERNAL_NET any -> $HOME_NET 137 ( msg:\"SERVER-OTHER NetBIOS name request probe attempt\"; flow:to_server; content:\"|00 00 00 01 00 00 00 00 00 00|\",depth 12,offset 2; content:\"|00 21 00 01|\",distance 0; detection_filter:track by_src,count 5,seconds 2; metadata:policy max-detect-ips drop; service:netbios-ns; classtype:attempted-recon; sid:51127; rev:3; )" - }, - "count": 3, - "total_related": 2729, - "prevalence": 0.0010993037742762918 - }, - { - "value": { - "id": "1:1620", - "message": "DELETED BAD TRAFFIC Non-Standard IP protocol", - "category": "non-standard-protocol", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert ip $EXTERNAL_NET any -> $HOME_NET any ( msg:\"DELETED BAD TRAFFIC Non-Standard IP protocol\"; ip_proto:!1; ip_proto:!2; ip_proto:!47; ip_proto:!50; ip_proto:!51; ip_proto:!6; ip_proto:!89; classtype:non-standard-protocol; sid:1620; rev:6; )" - }, - "count": 3, - "total_related": 54585, - "prevalence": 5.496015388843089e-05 - }, - { - "value": { - "id": "1:2061449", - "message": "ET MALWARE StealC v2 CnC Checkin (POST)", - "category": "command-and-control", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://www.virustotal.com/gui/search/f4398f139f80cb47207ef34dc5b7df0c", - "https://x.com/g0njxa/status/1910364088963649750", - "https://app.any.run/tasks/78b9c7f0-2412-4b48-b02c-64c81539d67b" - ], - "rule": "alert http $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET MALWARE StealC v2 CnC Checkin (POST)\"; flow:established,to_server; flowbits:set,ET.StealC.v2; urilen:21; http.method; content:\"POST\"; http.uri; pcre:\"/^\\x2f[a-z0-9]{16}\\x2ephp$/\"; http.content_type; content:\"application/json\"; http.header; content:\"Cache|2d|Control|3a| no|2d|cache|0d 0a|\"; http.header_names; bsize:55; content:\"|0d 0a|Content-Type|0d 0a|Host|0d 0a|Content-Length|0d 0a|Cache-Control|0d 0a 0d 0a|\"; fast_pattern; http.request_body; base64_decode: bytes 14, offset 8; base64_data; content:\"|22|build|22 3a 20 22|\"; reference:md5,f4398f139f80cb47207ef34dc5b7df0c; reference:url,x.com/g0njxa/status/1910364088963649750; reference:url,app.any.run/tasks/78b9c7f0-2412-4b48-b02c-64c81539d67b; classtype:command-and-control; sid:2061449; rev:1; metadata:affected_product Windows_XP_Vista_7_8_10_Server_32_64_Bit, attack_target Client_Endpoint, tls_state plaintext, created_at 2025_04_11, deployment Perimeter, malware_family Stealc, confidence High, signature_severity Critical, tag c2, updated_at 2025_04_11, mitre_tactic_id TA0011, mitre_tactic_name Command_And_Control, mitre_technique_id T1071, mitre_technique_name Application_Layer_Protocol; target:src_ip;)" - }, - "count": 1, - "total_related": 21, - "prevalence": 0.047619047619047616 - }, - { - "value": { - "id": "1:2033643", - "message": "ET MALWARE BlackMatter CnC Activity", - "category": "command-and-control", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://www.virustotal.com/gui/search/d0512f2063cbd79fb0f770817cc81ab3" - ], - "rule": "alert http $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET MALWARE BlackMatter CnC Activity\"; flow:established,to_server; http.request_line; content:\"POST /?\"; startswith; http.header; content:\"Accept|3a 20|*/*|0d 0a|Connection|3a 20|keep-alive|0d 0a|Accept-Encoding|3a 20|gzip, deflate, br|0d 0a|Content-Type|3a 20|text/plain|0d 0a|User-Agent|3a 20|\"; startswith; http.header_names; content:\"|0d 0a|Accept|0d 0a|Connection|0d 0a|Accept-Encoding|0d 0a|Content-Type|0d 0a|User-Agent|0d 0a|Host|0d 0a|Content-Length|0d 0a|Cache-Control|0d 0a 0d 0a|\"; bsize:104; http.user_agent; content:\"/\"; content:!\"/\"; distance:0; reference:md5,d0512f2063cbd79fb0f770817cc81ab3; classtype:command-and-control; sid:2033643; rev:1; metadata:affected_product Windows_XP_Vista_7_8_10_Server_32_64_Bit, attack_target Client_Endpoint, created_at 2021_08_02, deployment Perimeter, malware_family DarkSide, performance_impact Low, confidence High, signature_severity Major, tag Ransomware, updated_at 2021_08_02;)" - }, - "count": 1, - "total_related": 65, - "prevalence": 0.015384615384615385 - }, - { - "value": { - "id": "1:902206854", - "message": "SSLBL: Malicious SSL certificate detected (LummaStealer C&C)", - "source": "Abuse.ch SSL Blocklist", - "url": "https://sslbl.abuse.ch/blacklist/sslblacklist.rules", - "references_urls": [ - "https://sslbl.abuse.ch/ssl-certificates/sha1/5987434eb36b2326d4e0beeae83fa5fb9cf1d549/" - ], - "rule": "alert tls $EXTERNAL_NET any -> $HOME_NET any (msg:\"SSLBL: Malicious SSL certificate detected (LummaStealer C&C)\"; tls.fingerprint:\"59:87:43:4e:b3:6b:23:26:d4:e0:be:ea:e8:3f:a5:fb:9c:f1:d5:49\"; reference:url, sslbl.abuse.ch/ssl-certificates/sha1/5987434eb36b2326d4e0beeae83fa5fb9cf1d549/; sid:902206854; rev:1;)" - }, - "count": 1, - "total_related": 947, - "prevalence": 0.0010559662090813093 - }, - { - "value": { - "id": "1:2061392", - "message": "ET MALWARE Observed Win32/Lumma Stealer Related Domain (clarmodq .top in TLS SNI)", - "category": "domain-c2", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://www.virustotal.com/gui/search/486ac4b868bcba983a2016e703d0bd01" - ], - "rule": "alert tls $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET MALWARE Observed Win32/Lumma Stealer Related Domain (clarmodq .top in TLS SNI)\"; flow:established,to_server; tls.sni; bsize:12; content:\"clarmodq.top\"; fast_pattern; reference:md5,486ac4b868bcba983a2016e703d0bd01; classtype:domain-c2; sid:2061392; rev:1; metadata:tls_state TLSEncrypt, created_at 2025_04_08, deployment Perimeter, malware_family Lumma_Stealer, confidence High, signature_severity Critical, updated_at 2025_04_08, mitre_tactic_id TA0011, mitre_tactic_name Command_And_Control, mitre_technique_id T1071, mitre_technique_name Application_Layer_Protocol; target:src_ip;)" - }, - "count": 1, - "total_related": 1407, - "prevalence": 0.0007107320540156361 - }, - { - "value": { - "id": "1:2061391", - "message": "ET MALWARE Win32/Lumma Stealer Related CnC Domain in DNS Lookup (clarmodq .top)", - "category": "domain-c2", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://www.virustotal.com/gui/search/486ac4b868bcba983a2016e703d0bd01" - ], - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET MALWARE Win32/Lumma Stealer Related CnC Domain in DNS Lookup (clarmodq .top)\"; dns.query; bsize:12; content:\"clarmodq.top\"; fast_pattern; nocase; reference:md5,486ac4b868bcba983a2016e703d0bd01; classtype:domain-c2; sid:2061391; rev:1; metadata:attack_target Client_Endpoint, created_at 2025_04_08, deployment Perimeter, deployment Internal, malware_family Lumma_Stealer, confidence High, signature_severity Major, updated_at 2025_04_08, mitre_tactic_id TA0011, mitre_tactic_name Command_And_Control, mitre_technique_id T1071, mitre_technique_name Application_Layer_Protocol; target:src_ip;)" - }, - "count": 1, - "total_related": 1635, - "prevalence": 0.0006116207951070336 - }, - { - "value": { - "id": "1:2610332", - "message": "TGI HUNT netsh advfirewall", - "category": "bad-unknown", - "source": "Travis Green: Threat hunting rules", - "url": "https://raw.githubusercontent.com/travisbgreen/hunting-rules/master/hunting.rules", - "rule": "alert ip any any -> any any (msg:\"TGI HUNT netsh advfirewall\"; flow:established; content:\"netsh advfirewall\"; content:!\"This example shows how to disable Wmi fixed port\"; distance:-730; within: 50; content:!\"from administrator command prompt window\"; distance:22; within:45; threshold:type limit, track by_src, seconds 60, count 1; classtype:bad-unknown; sid:2610332; rev:1;)" - }, - "count": 1, - "total_related": 2447, - "prevalence": 0.0004086636697997548 - }, - { - "value": { - "id": "1:402", - "message": "PROTOCOL-ICMP destination unreachable port unreachable packet detected", - "category": "misc-activity", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "references_urls": [ - "https://cve.mitre.org/cgi-bin/cvename.cgi?name=2004-0790", - "https://cve.mitre.org/cgi-bin/cvename.cgi?name=2005-0068" - ], - "tags": [ - "cve-2004-0790", - "cve-2005-0068" - ], - "rule": "alert icmp $EXTERNAL_NET any -> $HOME_NET any ( msg:\"PROTOCOL-ICMP destination unreachable port unreachable packet detected\"; icode:3; itype:3; metadata:policy max-detect-ips drop,ruleset community; reference:cve,2004-0790; reference:cve,2005-0068; classtype:misc-activity; sid:402; rev:16; )" - }, - "count": 1, - "total_related": 5589, - "prevalence": 0.0001789228842368939 - }, - { - "value": { - "id": "1:2200003", - "message": "SURICATA IPv4 truncated packet", - "category": "protocol-command-decode", - "source": "Suricata", - "url": "https://www.openinfosecfoundation.org/", - "rule": "alert pkthdr any any -> any any (msg:\"SURICATA IPv4 truncated packet\"; decode-event:ipv4.trunc_pkt; classtype:protocol-command-decode; sid:2200003; rev:2;)" - }, - "count": 1, - "total_related": 8494, - "prevalence": 0.0001177301624676242 - }, - { - "value": { - "id": "1:2054168", - "message": "ET INFO External IP Lookup Domain in DNS Lookup (ipinfo .io)", - "category": "external-ip-check", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://github.com/chubin/awesome-console-services" - ], - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET INFO External IP Lookup Domain in DNS Lookup (ipinfo .io)\"; dns.query; bsize:9; content:\"ipinfo.io\"; nocase; reference:url,github.com/chubin/awesome-console-services; classtype:external-ip-check; sid:2054168; rev:1; metadata:affected_product Any, attack_target Client_Endpoint, created_at 2024_06_28, deployment Perimeter, performance_impact Low, confidence High, signature_severity Informational, tag External_IP_Lookup, updated_at 2024_06_28, reviewed_at 2024_10_04, mitre_tactic_id TA0043, mitre_tactic_name Reconnaissance, mitre_technique_id T1590, mitre_technique_name Gather_Victim_Network_Information;)" - }, - "count": 1, - "total_related": 28960, - "prevalence": 3.4530386740331494e-05 - }, - { - "value": { - "id": "1:2054989", - "message": "ET INFO Tunneling Service in DNS Lookup (* .ply .gg)", - "category": "misc-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET INFO Tunneling Service in DNS Lookup (* .ply .gg)\"; dns.query; dotprefix; content:\".ply.gg\"; nocase; endswith; classtype:misc-activity; sid:2054989; rev:1; metadata:attack_target Client_Endpoint, created_at 2024_08_07, deployment Perimeter, performance_impact Low, confidence High, signature_severity Informational, updated_at 2024_08_07, reviewed_at 2025_01_06;)" - }, - "count": 1, - "total_related": 30785, - "prevalence": 3.24833522819555e-05 - }, - { - "value": { - "id": "1:2044590", - "message": "ET INFO playit .gg Tunneling Domain in DNS Lookup", - "category": "bad-unknown", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://playit.gg/" - ], - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET INFO playit .gg Tunneling Domain in DNS Lookup\"; dns.query; dotprefix; content:\".at.ply.gg\"; nocase; endswith; reference:url,playit.gg/; classtype:bad-unknown; sid:2044590; rev:1; metadata:attack_target Client_Endpoint, created_at 2023_03_14, deployment Perimeter, performance_impact Low, confidence High, signature_severity Informational, updated_at 2023_03_14, mitre_tactic_id TA0011, mitre_tactic_name Command_And_Control, mitre_technique_id T1572, mitre_technique_name Protocol_Tunneling;)" - }, - "count": 1, - "total_related": 47825, - "prevalence": 2.0909566126502874e-05 - }, - { - "value": { - "id": "1:2041933", - "message": "ET INFO Observed Telegram Domain (t .me in TLS SNI)", - "category": "misc-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert tls $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET INFO Observed Telegram Domain (t .me in TLS SNI)\"; flow:established,to_server; tls.sni; content:\"t.me\"; bsize:4; fast_pattern; classtype:misc-activity; sid:2041933; rev:1; metadata:attack_target Client_Endpoint, created_at 2022_06_24, deployment Perimeter, performance_impact Low, confidence High, signature_severity Informational, updated_at 2022_12_07, former_sid 2851827;)" - }, - "count": 1, - "total_related": 61064, - "prevalence": 1.6376260972094853e-05 - }, - { - "value": { - "id": "1:2033967", - "message": "ET HUNTING Observed Telegram API Domain (api .telegram .org in TLS SNI)", - "category": "misc-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert tls $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET HUNTING Observed Telegram API Domain (api .telegram .org in TLS SNI)\"; flow:established,to_server; tls.sni; content:\"api.telegram.org\"; bsize:16; fast_pattern; classtype:misc-activity; sid:2033967; rev:1; metadata:attack_target Client_Endpoint, created_at 2021_09_16, deployment Perimeter, performance_impact Low, confidence High, signature_severity Informational, updated_at 2021_09_16;)" - }, - "count": 1, - "total_related": 92312, - "prevalence": 1.083282780136927e-05 - }, - { - "value": { - "id": "1:2021076", - "message": "ET HUNTING SUSPICIOUS Dotted Quad Host MZ Response", - "category": "bad-unknown", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert http $EXTERNAL_NET any -> $HOME_NET any (msg:\"ET HUNTING SUSPICIOUS Dotted Quad Host MZ Response\"; flow:established,to_client; flowbits:isset,http.dottedquadhost; file_data; content:\"MZ\"; within:2; content:\"PE|00 00|\"; distance:0; classtype:bad-unknown; sid:2021076; rev:2; metadata:created_at 2015_05_08, confidence Medium, signature_severity Informational, updated_at 2019_07_26;)" - }, - "count": 1, - "total_related": 97157, - "prevalence": 1.0292619162798358e-05 - }, - { - "value": { - "id": "1:29456", - "message": "PROTOCOL-ICMP Unusual PING detected", - "category": "successful-recon-limited", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "references_urls": [ - "https://krebsonsecurity.com/2014/01/a-closer-look-at-the-target-malware-part-ii/", - "https://krebsonsecurity.com/2014/01/a-first-look-at-the-target-intrusion-malware/" - ], - "rule": "alert icmp $HOME_NET any -> $EXTERNAL_NET any ( msg:\"PROTOCOL-ICMP Unusual PING detected\"; icode:0; itype:8; fragbits:!M; content:!\"ABCDEFGHIJKLMNOPQRSTUVWABCDEFGHI\",depth 32; content:!\"0123456789abcdefghijklmnopqrstuv\",depth 32; content:!\"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE\",depth 36; content:!\"WANG2\"; content:!\"cacti-monitoring-system\",depth 65; content:!\"SolarWinds\",depth 72; metadata:policy max-detect-ips drop,ruleset community; reference:url,krebsonsecurity.com/2014/01/a-closer-look-at-the-target-malware-part-ii/; reference:url,krebsonsecurity.com/2014/01/a-first-look-at-the-target-intrusion-malware/; classtype:successful-recon-limited; sid:29456; rev:3; )" - }, - "count": 27, - "total_related": 100000, - "prevalence": 0.00027 - }, - { - "value": { - "id": "1:384", - "message": "PROTOCOL-ICMP PING", - "category": "misc-activity", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert icmp $EXTERNAL_NET any -> $HOME_NET any ( msg:\"PROTOCOL-ICMP PING\"; icode:0; itype:8; metadata:ruleset community; classtype:misc-activity; sid:384; rev:8; )" - }, - "count": 27, - "total_related": 100000, - "prevalence": 0.00027 - }, - { - "value": { - "id": "1:408", - "message": "PROTOCOL-ICMP Echo Reply", - "category": "misc-activity", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert icmp $EXTERNAL_NET any -> $HOME_NET any ( msg:\"PROTOCOL-ICMP Echo Reply\"; icode:0; itype:0; metadata:ruleset community; classtype:misc-activity; sid:408; rev:8; )" - }, - "count": 27, - "total_related": 100000, - "prevalence": 0.00027 - }, - { - "value": { - "id": "1:382", - "message": "PROTOCOL-ICMP PING Windows", - "category": "misc-activity", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert icmp $EXTERNAL_NET any -> $HOME_NET any ( msg:\"PROTOCOL-ICMP PING Windows\"; itype:8; content:\"abcdefghijklmnop\",depth 16; metadata:ruleset community; classtype:misc-activity; sid:382; rev:11; )" - }, - "count": 23, - "total_related": 100000, - "prevalence": 0.00023 - }, - { - "value": { - "id": "116:424", - "message": "(eth) truncated ethernet header", - "category": "misc-activity", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert ( gid:116; sid:424; rev:2; msg:\"(eth) truncated ethernet header\"; metadata: policy max-detect-ips drop, rule-type decode; classtype:misc-activity;)" - }, - "count": 8, - "total_related": 100000, - "prevalence": 8e-05 - }, - { - "value": { - "id": "1:254", - "message": "PROTOCOL-DNS SPOOF query response with TTL of 1 min. and no authority", - "category": "bad-unknown", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert udp $EXTERNAL_NET 53 -> $HOME_NET any ( msg:\"PROTOCOL-DNS SPOOF query response with TTL of 1 min. and no authority\"; flow:to_client; content:\"|81 80|\",depth 4,offset 2,fast_pattern; byte_test:2,>,0,0,relative,big; byte_test:2,>,0,2,relative,big; content:\"|00 00 00 00|\",within 4,distance 4; content:\"|C0 0C 00 01 00 01|\",distance 0; byte_test:4,<,61,0,relative,big; byte_test:4,>,0,0,relative,big; metadata:policy max-detect-ips drop,ruleset community; service:dns; classtype:bad-unknown; sid:254; rev:16; )" - }, - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": { - "id": "1:31767", - "message": "SERVER-OTHER MRLG fastping echo reply memory corruption attempt", - "category": "misc-attack", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "references_urls": [ - "https://cve.mitre.org/cgi-bin/cvename.cgi?name=2014-3931", - "https://mrlg.op-sec.us/", - "https://s3.eurecom.fr/cve/CVE-2014-3931.txt" - ], - "tags": [ - "cve-2014-3931" - ], - "rule": "alert icmp $EXTERNAL_NET any -> $HOME_NET any ( msg:\"SERVER-OTHER MRLG fastping echo reply memory corruption attempt\"; icode:0; itype:0; content:!\"ABCDEFGHIJKLMNOPQRSTUVWABCDEFGHI\",depth 32; content:!\"0123456789abcdefghijklmnopqrstuv\",depth 32; content:!\"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE\",depth 36; byte_test:4,>,1000000,8,little; metadata:policy max-detect-ips drop; reference:cve,2014-3931; reference:url,mrlg.op-sec.us/; reference:url,s3.eurecom.fr/cve/CVE-2014-3931.txt; classtype:misc-attack; sid:31767; rev:2; )" - }, - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": { - "id": "1:401", - "message": "PROTOCOL-ICMP Destination Unreachable Network Unreachable", - "category": "misc-activity", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert icmp $EXTERNAL_NET any -> $HOME_NET any ( msg:\"PROTOCOL-ICMP Destination Unreachable Network Unreachable\"; icode:0; itype:3; metadata:ruleset community; classtype:misc-activity; sid:401; rev:9; )" - }, - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": { - "id": "1:385", - "message": "PROTOCOL-ICMP traceroute", - "category": "attempted-recon", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert icmp $EXTERNAL_NET any -> $HOME_NET any ( msg:\"PROTOCOL-ICMP traceroute\"; itype:8; ttl:1; metadata:ruleset community; classtype:attempted-recon; sid:385; rev:8; )" - }, - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": { - "id": "2:1", - "message": "(output) tagged packet", - "category": "not-suspicious", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert ( gid:2; sid:1; rev:2; msg:\"(output) tagged packet\"; metadata: rule-type preproc; classtype:not-suspicious;)" - }, - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": { - "id": "122:19", - "message": "(port_scan) UDP portsweep", - "category": "attempted-recon", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert ( gid:122; sid:19; rev:2; msg:\"(port_scan) UDP portsweep\"; metadata: rule-type preproc; classtype:attempted-recon;)" - }, - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": { - "id": "1:57756", - "message": "MALWARE-CNC DNS Fast Flux attempt", - "category": "trojan-activity", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "references_urls": [ - "https://attack.mitre.org/techniques/T1568/001/" - ], - "rule": "alert udp $EXTERNAL_NET 53 -> $HOME_NET any ( msg:\"MALWARE-CNC DNS Fast Flux attempt\"; flow:to_client; content:\"|00 01|\",depth 2,offset 4; byte_test:2,>,1,0,relative; byte_test:1,=,1,2,bitmask 0x80; content:\"|00 01 00 01|\",distance 6; content:\"|00 01 00 01 00 00 00 05|\",distance 0; metadata:policy max-detect-ips drop; service:dns; reference:url,attack.mitre.org/techniques/T1568/001/; classtype:trojan-activity; sid:57756; rev:2; )" - }, - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": { - "id": "1:2016141", - "message": "ET INFO Executable Download from dotted-quad Host", - "category": "bad-unknown", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert http $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET INFO Executable Download from dotted-quad Host\"; flow:established,to_server; http.uri; content:\".exe\"; endswith; nocase; http.host; content:\".\"; offset:1; depth:3; content:\".\"; within:4; content:\".\"; within:4; pcre:\"/^(?:\\d{1,3}\\.){3}\\d{1,3}$/\"; http.request_line; content:\".exe HTTP/1.\"; fast_pattern; classtype:bad-unknown; sid:2016141; rev:9; metadata:attack_target Client_and_Server, created_at 2013_01_03, deployment Perimeter, performance_impact Significant, confidence High, signature_severity Informational, updated_at 2024_04_09;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "1:2016538", - "message": "ET INFO Executable Retrieved With Minimal HTTP Headers - Potential Second Stage Download", - "category": "bad-unknown", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert http $EXTERNAL_NET any -> $HOME_NET any (msg:\"ET INFO Executable Retrieved With Minimal HTTP Headers - Potential Second Stage Download\"; flowbits:isset,min.gethttp; flow:established,to_client; file_data; content:\"MZ\"; within:2; content:\"PE|00 00|\"; distance:0; classtype:bad-unknown; sid:2016538; rev:3; metadata:created_at 2013_03_06, confidence High, signature_severity Informational, updated_at 2019_07_26;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "1:2018170", - "message": "ET POLICY Application Crash Report Sent to Microsoft", - "category": "policy-violation", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert http $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET POLICY Application Crash Report Sent to Microsoft\"; flow:established,to_server; http.user_agent; content:\"MSDW\"; depth:4; http.host; content:\"watson.microsoft.com\"; classtype:policy-violation; sid:2018170; rev:6; metadata:created_at 2014_02_24, confidence High, signature_severity Informational, updated_at 2020_08_17;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "1:2022082", - "message": "ET POLICY External IP Lookup ip-api.com", - "category": "external-ip-check", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert http $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET POLICY External IP Lookup ip-api.com\"; flow:established,to_server; http.host; content:\"ip-api.com\"; classtype:external-ip-check; sid:2022082; rev:6; metadata:attack_target Client_Endpoint, created_at 2015_11_13, deployment Perimeter, performance_impact Low, confidence High, signature_severity Informational, updated_at 2024_11_26, mitre_tactic_id TA0043, mitre_tactic_name Reconnaissance, mitre_technique_id T1590, mitre_technique_name Gather_Victim_Network_Information;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "1:2023883", - "message": "ET DNS Query to a *.top domain - Likely Hostile", - "category": "bad-unknown", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://www.symantec.com/connect/blogs/shady-tld-research-gdn-and-our-2016-wrap", - "https://www.spamhaus.org/statistics/tlds/" - ], - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET DNS Query to a *.top domain - Likely Hostile\"; threshold:type limit, track by_src, count 1, seconds 30; dns.query; content:\".top\"; nocase; endswith; reference:url,www.symantec.com/connect/blogs/shady-tld-research-gdn-and-our-2016-wrap; reference:url,www.spamhaus.org/statistics/tlds/; classtype:bad-unknown; sid:2023883; rev:4; metadata:affected_product Windows_XP_Vista_7_8_10_Server_32_64_Bit, attack_target Client_Endpoint, created_at 2017_02_07, deployment Perimeter, confidence Medium, signature_severity Major, updated_at 2020_09_15;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "1:2025331", - "message": "ET POLICY Possible External IP Lookup Domain Observed in SNI (ipinfo. io)", - "category": "external-ip-check", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert tls $HOME_NET any -> $EXTERNAL_NET 443 (msg:\"ET POLICY Possible External IP Lookup Domain Observed in SNI (ipinfo. io)\"; flow:established,to_server; tls.sni; content:\"ipinfo.io\"; bsize:9; fast_pattern; classtype:external-ip-check; sid:2025331; rev:5; metadata:affected_product Windows_XP_Vista_7_8_10_Server_32_64_Bit, affected_product Mac_OSX, affected_product Linux, attack_target Client_Endpoint, created_at 2018_02_07, deployment Perimeter, performance_impact Low, confidence High, signature_severity Informational, updated_at 2024_09_19, mitre_tactic_id TA0043, mitre_tactic_name Reconnaissance, mitre_technique_id T1590, mitre_technique_name Gather_Victim_Network_Information;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "1:2027389", - "message": "ET USER_AGENTS Microsoft Dr Watson User-Agent (MSDW)", - "category": "unknown", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert http $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET USER_AGENTS Microsoft Dr Watson User-Agent (MSDW)\"; flow:established,to_server; http.user_agent; content:\"MSDW\"; depth:4; isdataat:!1,relative; fast_pattern; threshold: type limit, track by_src, count 1, seconds 300; classtype:unknown; sid:2027389; rev:4; metadata:affected_product Web_Browsers, attack_target Client_Endpoint, created_at 2019_05_28, deployment Perimeter, performance_impact Low, confidence High, signature_severity Minor, updated_at 2019_10_16;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "1:2033966", - "message": "ET HUNTING Telegram API Domain in DNS Lookup", - "category": "misc-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET HUNTING Telegram API Domain in DNS Lookup\"; dns.query; content:\"api.telegram.org\"; nocase; bsize:16; classtype:misc-activity; sid:2033966; rev:1; metadata:attack_target Client_Endpoint, created_at 2021_09_16, deployment Perimeter, performance_impact Low, confidence High, signature_severity Minor, updated_at 2021_09_16;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "1:2047702", - "message": "ET INFO External IP Lookup Domain (ipify .org) in DNS Lookup", - "category": "misc-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET INFO External IP Lookup Domain (ipify .org) in DNS Lookup\"; dns.query; dotprefix; content:\".ipify.org\"; nocase; endswith; classtype:misc-activity; sid:2047702; rev:1; metadata:affected_product Any, attack_target Client_Endpoint, created_at 2023_08_22, deployment Perimeter, performance_impact Low, confidence High, signature_severity Informational, tag External_IP_Lookup, updated_at 2023_08_22, reviewed_at 2023_10_06, mitre_tactic_id TA0043, mitre_tactic_name Reconnaissance, mitre_technique_id T1590, mitre_technique_name Gather_Victim_Network_Information;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "1:2047703", - "message": "ET INFO External IP Address Lookup Domain (ipify .org) in TLS SNI", - "category": "misc-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert tls $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET INFO External IP Address Lookup Domain (ipify .org) in TLS SNI\"; flow:established,to_server; tls.sni; dotprefix; content:\".ipify.org\"; endswith; fast_pattern; classtype:misc-activity; sid:2047703; rev:1; metadata:affected_product Any, attack_target Client_and_Server, created_at 2023_08_22, deployment Perimeter, performance_impact Low, confidence High, signature_severity Informational, tag External_IP_Lookup, updated_at 2023_08_22, reviewed_at 2023_08_22;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "1:2054141", - "message": "ET INFO External IP Lookup Domain in DNS Lookup (ip-api .com)", - "category": "external-ip-check", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://github.com/chubin/awesome-console-services" - ], - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET INFO External IP Lookup Domain in DNS Lookup (ip-api .com)\"; dns.query; bsize:10; content:\"ip-api.com\"; nocase; reference:url,github.com/chubin/awesome-console-services; classtype:external-ip-check; sid:2054141; rev:1; metadata:affected_product Any, attack_target Client_Endpoint, created_at 2024_06_28, deployment Perimeter, performance_impact Low, confidence High, signature_severity Informational, tag External_IP_Lookup, updated_at 2024_06_28, reviewed_at 2024_10_04, mitre_tactic_id TA0043, mitre_tactic_name Reconnaissance, mitre_technique_id T1590, mitre_technique_name Gather_Victim_Network_Information;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "1:2210045", - "message": "SURICATA STREAM Packet with invalid ack", - "category": "protocol-command-decode", - "source": "Suricata", - "url": "https://www.openinfosecfoundation.org/", - "rule": "alert tcp any any -> any any (msg:\"SURICATA STREAM Packet with invalid ack\"; stream-event:pkt_invalid_ack; classtype:protocol-command-decode; sid:2210045; rev:2;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "1:2210046", - "message": "SURICATA STREAM SHUTDOWN RST invalid ack", - "category": "protocol-command-decode", - "source": "Suricata", - "url": "https://www.openinfosecfoundation.org/", - "rule": "alert tcp any any -> any any (msg:\"SURICATA STREAM SHUTDOWN RST invalid ack\"; stream-event:rst_invalid_ack; classtype:protocol-command-decode; sid:2210046; rev:2;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "1:906200054", - "message": "SSLBL: Malicious JA3 SSL-Client Fingerprint detected (Tofsee)", - "source": "Abuse.ch Suricata JA3 Fingerprint Ruleset", - "url": "https://sslbl.abuse.ch/blacklist/ja3_fingerprints.rules", - "references_urls": [ - "https://sslbl.abuse.ch/ja3-fingerprints/1d095e68489d3c535297cd8dffb06cb9/" - ], - "rule": "alert tls any any -> any any (msg:\"SSLBL: Malicious JA3 SSL-Client Fingerprint detected (Tofsee)\"; ja3_hash; content:\"1d095e68489d3c535297cd8dffb06cb9\"; reference:url, sslbl.abuse.ch/ja3-fingerprints/1d095e68489d3c535297cd8dffb06cb9/; sid:906200054; rev:1;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "crowdsourced_yara_results": [ - { - "value": { - "id": "015e7930ee|Windows_Ransomware_Lockbit_369e1e94", - "ruleset_id": "015e7930ee", - "ruleset_name": "Windows_Ransomware_Lockbit", - "rule_name": "Windows_Ransomware_Lockbit_369e1e94", - "source": "https://github.com/elastic/protections-artifacts" - }, - "count": 174, - "total_related": 2612, - "prevalence": 0.0666156202143951 - }, - { - "value": { - "id": "0022c78e42|Darkside", - "ruleset_id": "0022c78e42", - "ruleset_name": "Darkside", - "rule_name": "Darkside", - "source": "https://github.com/bartblaze/Yara-rules" - }, - "count": 174, - "total_related": 5010, - "prevalence": 0.03473053892215569 - }, - { - "value": { - "id": "0080597496|win_lockbit_auto", - "ruleset_id": "0080597496", - "ruleset_name": "win.lockbit_auto", - "rule_name": "win_lockbit_auto", - "source": "https://github.com/malpedia/signator-rules" - }, - "count": 166, - "total_related": 2226, - "prevalence": 0.07457322551662174 - }, - { - "value": { - "id": "00bc40da16|Lockbit", - "ruleset_id": "00bc40da16", - "ruleset_name": "Lockbit", - "rule_name": "Lockbit", - "source": "https://github.com/kevoreilly/CAPEv2" - }, - "count": 58, - "total_related": 6092, - "prevalence": 0.009520682862770847 - }, - { - "value": { - "id": "00c3b8eb5d|INDICATOR_SUSPICIOUS_EXE_UACBypass_CMSTPCOM", - "ruleset_id": "00c3b8eb5d", - "ruleset_name": "indicator_suspicious", - "rule_name": "INDICATOR_SUSPICIOUS_EXE_UACBypass_CMSTPCOM", - "source": "https://github.com/ditekshen/detection" - }, - "count": 57, - "total_related": 49050, - "prevalence": 0.0011620795107033638 - }, - { - "value": { - "id": "00c3b8eb5d|INDICATOR_SUSPICIOUS_USNDeleteJournal", - "ruleset_id": "00c3b8eb5d", - "ruleset_name": "indicator_suspicious", - "rule_name": "INDICATOR_SUSPICIOUS_USNDeleteJournal", - "source": "https://github.com/ditekshen/detection" - }, - "count": 55, - "total_related": 17190, - "prevalence": 0.0031995346131471784 - }, - { - "value": { - "id": "015e7930ee|Windows_Ransomware_Lockbit_a1c60939", - "ruleset_id": "015e7930ee", - "ruleset_name": "Windows_Ransomware_Lockbit", - "rule_name": "Windows_Ransomware_Lockbit_a1c60939", - "source": "https://github.com/elastic/protections-artifacts" - }, - "count": 32, - "total_related": 474, - "prevalence": 0.06751054852320675 - }, - { - "value": { - "id": "015e7930ee|Windows_Ransomware_Lockbit_89e64044", - "ruleset_id": "015e7930ee", - "ruleset_name": "Windows_Ransomware_Lockbit", - "rule_name": "Windows_Ransomware_Lockbit_89e64044", - "source": "https://github.com/elastic/protections-artifacts" - }, - "count": 32, - "total_related": 483, - "prevalence": 0.06625258799171843 - }, - { - "value": { - "id": "0002ccf6ba|MAL_EXE_LockBit_v2", - "ruleset_id": "0002ccf6ba", - "ruleset_name": "gen_100days_of_yara_2023", - "rule_name": "MAL_EXE_LockBit_v2", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 32, - "total_related": 494, - "prevalence": 0.06477732793522267 - }, - { - "value": { - "id": "00139d79e2|Lockbit2_Jul21", - "ruleset_id": "00139d79e2", - "ruleset_name": "RANSOM_Lockbit2", - "rule_name": "Lockbit2_Jul21", - "source": "https://github.com/advanced-threat-research/Yara-Rules" - }, - "count": 32, - "total_related": 550, - "prevalence": 0.05818181818181818 - }, - { - "value": { - "id": "00c3b8eb5d|INDICATOR_SUSPICIOUS_ClearWinLogs", - "ruleset_id": "00c3b8eb5d", - "ruleset_name": "indicator_suspicious", - "rule_name": "INDICATOR_SUSPICIOUS_ClearWinLogs", - "source": "https://github.com/ditekshen/detection" - }, - "count": 26, - "total_related": 12170, - "prevalence": 0.0021364009860312242 - }, - { - "value": { - "id": "00c3b8eb5d|INDICATOR_SUSPICOUS_EXE_References_VEEAM", - "ruleset_id": "00c3b8eb5d", - "ruleset_name": "indicator_suspicious", - "rule_name": "INDICATOR_SUSPICOUS_EXE_References_VEEAM", - "source": "https://github.com/ditekshen/detection" - }, - "count": 25, - "total_related": 14012, - "prevalence": 0.0017841849842991722 - }, - { - "value": { - "id": "00c3b8eb5d|INDICATOR_SUSPICIOUS_GENRansomware", - "ruleset_id": "00c3b8eb5d", - "ruleset_name": "indicator_suspicious", - "rule_name": "INDICATOR_SUSPICIOUS_GENRansomware", - "source": "https://github.com/ditekshen/detection" - }, - "count": 25, - "total_related": 46746, - "prevalence": 0.0005348051170153596 - }, - { - "value": { - "id": "005e4bd1ed|Win32_Ransomware_LockBit", - "ruleset_id": "005e4bd1ed", - "ruleset_name": "Win32.Ransomware.LockBit", - "rule_name": "Win32_Ransomware_LockBit", - "source": "https://github.com/reversinglabs/reversinglabs-yara-rules" - }, - "count": 21, - "total_related": 487, - "prevalence": 0.043121149897330596 - }, - { - "value": { - "id": "00c291ca7f|INDICATOR_EXE_Packed_BoxedApp", - "ruleset_id": "00c291ca7f", - "ruleset_name": "indicator_packed", - "rule_name": "INDICATOR_EXE_Packed_BoxedApp", - "source": "https://github.com/ditekshen/detection" - }, - "count": 2, - "total_related": 8921, - "prevalence": 0.0002241901132160072 - }, - { - "value": { - "id": "000f44c4bb|SUSP_XORed_URL_In_EXE", - "ruleset_id": "000f44c4bb", - "ruleset_name": "gen_susp_xor", - "rule_name": "SUSP_XORed_URL_In_EXE", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 22, - "total_related": 100000, - "prevalence": 0.00022 - }, - { - "value": { - "id": "00c3b8eb5d|INDICATOR_SUSPICIOUS_EXE_RegKeyComb_DisableWinDefender", - "ruleset_id": "00c3b8eb5d", - "ruleset_name": "indicator_suspicious", - "rule_name": "INDICATOR_SUSPICIOUS_EXE_RegKeyComb_DisableWinDefender", - "source": "https://github.com/ditekshen/detection" - }, - "count": 22, - "total_related": 100000, - "prevalence": 0.00022 - }, - { - "value": { - "id": "000f44c4bb|SUSP_XORed_URL_in_EXE", - "ruleset_id": "000f44c4bb", - "ruleset_name": "gen_susp_xor", - "rule_name": "SUSP_XORed_URL_in_EXE", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 19, - "total_related": 100000, - "prevalence": 0.00019 - }, - { - "value": { - "id": "000c8f1d6e|MAL_Malware_Imphash_Mar23_1", - "ruleset_id": "000c8f1d6e", - "ruleset_name": "gen_imphash_detection", - "rule_name": "MAL_Malware_Imphash_Mar23_1", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": { - "id": "000d22dbf9|MAL_Neshta_Generic", - "ruleset_id": "000d22dbf9", - "ruleset_name": "mal_netsha", - "rule_name": "MAL_Neshta_Generic", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": { - "id": "00cc803bdc|MALWARE_Win_Neshta", - "ruleset_id": "00cc803bdc", - "ruleset_name": "malware", - "rule_name": "MALWARE_Win_Neshta", - "source": "https://github.com/ditekshen/detection" - }, - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": { - "id": "0140fddf38|win_neshta_1", - "ruleset_id": "0140fddf38", - "ruleset_name": "neshta", - "rule_name": "win_neshta_1", - "source": "https://github.com/baderj/yara" - }, - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": { - "id": "0153a96305|Windows_Virus_Neshta_2a5a14c8", - "ruleset_id": "0153a96305", - "ruleset_name": "Windows_Virus_Neshta", - "rule_name": "Windows_Virus_Neshta_2a5a14c8", - "source": "https://github.com/elastic/protections-artifacts" - }, - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": { - "id": "0023c73876|AutoIT_Compiled", - "ruleset_id": "0023c73876", - "ruleset_name": "AutoIT", - "rule_name": "AutoIT_Compiled", - "source": "https://github.com/bartblaze/Yara-rules" - }, - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": { - "id": "00c291ca7f|INDICATOR_EXE_Packed_VMProtect", - "ruleset_id": "00c291ca7f", - "ruleset_name": "indicator_packed", - "rule_name": "INDICATOR_EXE_Packed_VMProtect", - "source": "https://github.com/ditekshen/detection" - }, - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": { - "id": "000c8f1d6e|SUSP_Imphash_Mar23_3", - "ruleset_id": "000c8f1d6e", - "ruleset_name": "gen_imphash_detection", - "rule_name": "SUSP_Imphash_Mar23_3", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "00b6c50803|UPX", - "ruleset_id": "00b6c50803", - "ruleset_name": "UPX", - "rule_name": "UPX", - "source": "https://github.com/kevoreilly/CAPEv2" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "embedded_domains": [ - { - "value": "bigblog.at", - "count": 35, - "total_related": 1050, - "prevalence": 0.03333333333333333 - }, - { - "value": "lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion", - "count": 35, - "total_related": 1517, - "prevalence": 0.023071852340145024 - }, - { - "value": "tox.chat", - "count": 35, - "total_related": 20562, - "prevalence": 0.0017021690497033362 - }, - { - "value": "lockbitks2tvnmwk.onion", - "count": 28, - "total_related": 434, - "prevalence": 0.06451612903225806 - }, - { - "value": "tb-manual.torproject.org", - "count": 28, - "total_related": 4349, - "prevalence": 0.0064382616693492755 - }, - { - "value": "bridges.torproject.org", - "count": 28, - "total_related": 23552, - "prevalence": 0.001188858695652174 - }, - { - "value": "lockbit-decryptor.com", - "count": 16, - "total_related": 122, - "prevalence": 0.13114754098360656 - }, - { - "value": "lockbit-decryptor.top", - "count": 12, - "total_related": 301, - "prevalence": 0.03986710963455149 - }, - { - "value": "decryptor.com", - "count": 9, - "total_related": 30, - "prevalence": 0.3 - }, - { - "value": "a.run", - "count": 9, - "total_related": 47210, - "prevalence": 0.00019063757678457953 - }, - { - "value": "boxedapp.com", - "count": 2, - "total_related": 27070, - "prevalence": 7.388252678241596e-05 - }, - { - "value": "ipwho.is", - "count": 1, - "total_related": 29919, - "prevalence": 3.34235769912096e-05 - }, - { - "value": "proton.me", - "count": 1, - "total_related": 60967, - "prevalence": 1.640231600702019e-05 - }, - { - "value": "torproject.org", - "count": 28, - "total_related": 100000, - "prevalence": 0.00028 - }, - { - "value": "www.torproject.org", - "count": 28, - "total_related": 100000, - "prevalence": 0.00028 - }, - { - "value": "bzip.org", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "gcc.gnu.org", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "gnu.org", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "autoitscript.com", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "d.symcb.com", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "github.com", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "s.symcb.com", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "schemas.xmlsoap.org", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "sourceware.org", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "symcb.com", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "ts-aia.ws.symantec.com", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "ts-crl.ws.symantec.com", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "ws.symantec.com", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "xmlsoap.org", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "api.ipify.org", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "appsyndication.org", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "cacerts.digicert.com", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "ccsca2021.crl.certum.pl", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "certum.pl", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "comodoca.com", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "crl.certum.pl", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "crl.comodoca.com", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "crl.sectigo.com", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "crl3.digicert.com", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "crl4.digicert.com", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "crt.sectigo.com", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "digicert.com", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "gmail.com", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "repository.certum.pl", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "sectigo.com", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "stackoverflow.com", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "www.certum.pl", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "www.digicert.com", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "embedded_ips": [ - { - "value": "1::2", - "count": 2, - "total_related": 19802, - "prevalence": 0.000100999899000101 - }, - { - "value": "24.0.0.22", - "count": 2, - "total_related": 44697, - "prevalence": 4.474573237577466e-05 - }, - { - "value": "72.45.24.0", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "21.9.0.0", - "count": 1, - "total_related": 9075, - "prevalence": 0.00011019283746556474 - }, - { - "value": "17.10.0.0", - "count": 1, - "total_related": 39714, - "prevalence": 2.5180037266455153e-05 - }, - { - "value": "17.7.0.0", - "count": 1, - "total_related": 46808, - "prevalence": 2.136386942403008e-05 - }, - { - "value": "0.0.0.0", - "count": 16, - "total_related": 100000, - "prevalence": 0.00016 - }, - { - "value": "123.45.67.89", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "24.0.0.1", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "15.0.0.0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "15.8.0.0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "16.0.0.0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "16.10.0.0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "17.0.0.0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "embedded_urls": [ - { - "value": "https://bigblog.at/", - "count": 39, - "total_related": 1629, - "prevalence": 0.040241796200345424 - }, - { - "value": "http://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion/", - "count": 42, - "total_related": 3032, - "prevalence": 0.02779036005024787 - }, - { - "value": "https://tox.chat/download.html", - "count": 37, - "total_related": 20004, - "prevalence": 0.002747472580915143 - }, - { - "value": "http://lockbitks2tvnmwk.onion/?12345678911234567891123456789112", - "count": 28, - "total_related": 132, - "prevalence": 0.21212121212121213 - }, - { - "value": "http://lockbitks2tvnmwk.onion/", - "count": 28, - "total_related": 325, - "prevalence": 0.08615384615384615 - }, - { - "value": "https://tb-manual.torproject.org/about", - "count": 28, - "total_related": 563, - "prevalence": 0.0497335701598579 - }, - { - "value": "https://bridges.torproject.org/", - "count": 28, - "total_related": 3490, - "prevalence": 0.008022922636103151 - }, - { - "value": "https://www.torproject.org/", - "count": 33, - "total_related": 125971, - "prevalence": 0.0004523028927186759 - }, - { - "value": "http://lockbit-decryptor.com/?12345678911234567891123456789112", - "count": 16, - "total_related": 34, - "prevalence": 0.47058823529411764 - }, - { - "value": "http://lockbit-decryptor.com/", - "count": 16, - "total_related": 48, - "prevalence": 0.3333333333333333 - }, - { - "value": "http://lockbit-decryptor.top/?12345678911234567891123456789112", - "count": 12, - "total_related": 149, - "prevalence": 0.08053691275167785 - }, - { - "value": "http://lockbit-decryptor.top/", - "count": 12, - "total_related": 164, - "prevalence": 0.07317073170731707 - }, - { - "value": "http://boxedapp.com/boxedapppacker/order.html", - "count": 2, - "total_related": 9216, - "prevalence": 0.00021701388888888888 - }, - { - "value": "http://[1::2]/wsman", - "count": 2, - "total_related": 19802, - "prevalence": 0.000100999899000101 - }, - { - "value": "http://boxedapp.com/boxedappsdk/order.html", - "count": 2, - "total_related": 24952, - "prevalence": 8.01538954793203e-05 - }, - { - "value": "https://github.com/grosesch/ibra/raw/refs/heads/main/chinainstal.exe", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "https://stackoverflow.com/q/14436606/23354", - "count": 1, - "total_related": 65105, - "prevalence": 1.535980339451655e-05 - }, - { - "value": "https://stackoverflow.com/q/11564914/23354", - "count": 1, - "total_related": 77004, - "prevalence": 1.2986338372032622e-05 - }, - { - "value": "https://stackoverflow.com/q/2152978/23354", - "count": 1, - "total_related": 80362, - "prevalence": 1.2443692292376994e-05 - }, - { - "value": "https://gcc.gnu.org/bugs/", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "http://s.symcb.com/universal-root.crl0", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "http://ts-aia.ws.symantec.com/sha256-tss-ca.cer0", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "http://ts-crl.ws.symantec.com/sha256-tss-ca.crl0", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "https://d.symcb.com/cps0%25", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "https://d.symcb.com/rpa0", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "http://appsyndication.org/2006/appsyn", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "http://cacerts.digicert.com/DigiCertAssuredIDCodeSigningCA-1.crt0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "http://cacerts.digicert.com/DigiCertAssuredIDRootCA.crt0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "http://cacerts.digicert.com/DigiCertAssuredIDRootCA.crt0E", - "count": 2, - "total_related": 197357, - "prevalence": 2.0271475086537178e-05 - }, - { - "value": "http://cacerts.digicert.com/DigiCertTrustedG4CodeSigningRSA4096SHA3842021CA1.crt0", - "count": 2, - "total_related": 148778, - "prevalence": 3.0501045553323217e-05 - }, - { - "value": "http://cacerts.digicert.com/DigiCertTrustedG4RSA4096SHA256TimeStampingCA.crt0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "http://cacerts.digicert.com/DigiCertTrustedRootG4.crt0C", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "http://ccsca2021.crl.certum.pl/ccsca2021.crl0s", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "http://crl.certum.pl/ctnca.crl0k", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "http://crl.certum.pl/ctnca2.crl0l", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "http://crl.certum.pl/ctsca2021.crl0o", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "http://crl.comodoca.com/AAACertificateServices.crl04", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "http://crl.sectigo.com/SectigoPublicCodeSigningCAEVR36.crl0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "http://crl.sectigo.com/SectigoPublicCodeSigningRootR46.crl0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "http://crl3.digicert.com/DigiCertAssuredIDRootCA.crl0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "http://crl3.digicert.com/DigiCertTrustedG4CodeSigningRSA4096SHA3842021CA1.crl0S", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "http://crl3.digicert.com/DigiCertTrustedG4RSA4096SHA256TimeStampingCA.crl0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "http://crl3.digicert.com/DigiCertTrustedRootG4.crl0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "http://crl3.digicert.com/assured-cs-g1.crl00", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "http://crl4.digicert.com/DigiCertAssuredIDRootCA.crl0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "http://crl4.digicert.com/DigiCertTrustedG4CodeSigningRSA4096SHA3842021CA1.crl0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "http://crl4.digicert.com/DigiCertTrustedG4CodeSigningRSA4096SHA3842021CA1.crl0=", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "http://crl4.digicert.com/assured-cs-g1.crl0L", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "http://crt.sectigo.com/SectigoPublicCodeSigningCAEVR36.crt0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "http://crt.sectigo.com/SectigoPublicCodeSigningRootR46.p7c0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "http://repository.certum.pl/ccsca2021.cer0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "http://repository.certum.pl/ctnca.cer09", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "http://repository.certum.pl/ctnca2.cer09", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "http://repository.certum.pl/ctsca2021.cer0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "http://www.certum.pl/CPS0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "http://www.digicert.com/CPS0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "http://www.digicert.com/ssl-cps-repository.htm0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "https://github.com/dart-lang/sdk/blob/master/runtime/docs/compiler/aot/entry_point_pragma.md", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "https://sectigo.com/CPS0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "https://www.certum.pl/CPS0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "https://www.digicert.com/CPS0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "https://pastebin.com/raw/Jv1P4zmq", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://185.215.113.59/Dy5h4kus/index.php", - "count": 1, - "total_related": 221, - "prevalence": 0.004524886877828055 - }, - { - "value": "http://github.org/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://github.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://test.white-datasheet.com/", - "count": 1, - "total_related": 19, - "prevalence": 0.05263157894736842 - }, - { - "value": "http://test.white-datasheet.com/", - "count": 1, - "total_related": 20, - "prevalence": 0.05 - }, - { - "value": "https://decoding.at/", - "count": 4, - "total_related": 565, - "prevalence": 0.007079646017699115 - }, - { - "value": "http://lockbitsap2oaqhcun3syvbqt6n5nzt7fqosc6jdlmsfleu3ka4k2did.onion/", - "count": 4, - "total_related": 578, - "prevalence": 0.006920415224913495 - }, - { - "value": "https://twitter.com/hashtag/lockbit?f=live", - "count": 4, - "total_related": 664, - "prevalence": 0.006024096385542169 - }, - { - "value": "http://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly/", - "count": 3, - "total_related": 478, - "prevalence": 0.006276150627615063 - }, - { - "value": "http://lockbitsup4yezcd5enk5unncx3zcy7kw6wllyqmiyhvanjj352jayid.onion/", - "count": 3, - "total_related": 577, - "prevalence": 0.005199306759098787 - }, - { - "value": "http://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly/", - "count": 3, - "total_related": 688, - "prevalence": 0.00436046511627907 - }, - { - "value": "http://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion/", - "count": 3, - "total_related": 702, - "prevalence": 0.004273504273504274 - }, - { - "value": "http://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion/", - "count": 3, - "total_related": 921, - "prevalence": 0.003257328990228013 - }, - { - "value": "http://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion/", - "count": 3, - "total_related": 926, - "prevalence": 0.0032397408207343412 - }, - { - "value": "http://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion/", - "count": 3, - "total_related": 940, - "prevalence": 0.0031914893617021275 - }, - { - "value": "https://www.sphinx-doc.org/", - "count": 3, - "total_related": 9009, - "prevalence": 0.000333000333000333 - }, - { - "value": "https://github.com/python/cpython/blob/main/Doc/library/tokenize.rst", - "count": 2, - "total_related": 32, - "prevalence": 0.0625 - }, - { - "value": "https://github.com/python/cpython/tree/3.11/Lib/asyncio/protocols.py", - "count": 2, - "total_related": 33, - "prevalence": 0.06060606060606061 - }, - { - "value": "https://www.activestate.com/activepython/", - "count": 2, - "total_related": 33, - "prevalence": 0.06060606060606061 - }, - { - "value": "https://manpages.debian.org/vsnprintf(3", - "count": 2, - "total_related": 40, - "prevalence": 0.05 - }, - { - "value": "https://ncoghlan-devs-python-notes.readthedocs.io/en/latest/python3/questions_and_answers.html", - "count": 2, - "total_related": 54, - "prevalence": 0.037037037037037035 - }, - { - "value": "https://peps.python.org/pep-0397/", - "count": 2, - "total_related": 66, - "prevalence": 0.030303030303030304 - }, - { - "value": "https://pypi.org/project/pylint", - "count": 2, - "total_related": 70, - "prevalence": 0.02857142857142857 - }, - { - "value": "https://www.boddie.org.uk/python/COM.html", - "count": 2, - "total_related": 89, - "prevalence": 0.02247191011235955 - }, - { - "value": "https://www.nuget.org/packages/pythonx86", - "count": 2, - "total_related": 91, - "prevalence": 0.02197802197802198 - }, - { - "value": "https://github.com/python/cpython/blob/main/Doc/library/queue.rst", - "count": 2, - "total_related": 102, - "prevalence": 0.0196078431372549 - }, - { - "value": "https://tox.chat/download.htmlUsing", - "count": 2, - "total_related": 116, - "prevalence": 0.017241379310344827 - }, - { - "value": "https://peps.python.org/pep-0647/", - "count": 2, - "total_related": 132, - "prevalence": 0.015151515151515152 - }, - { - "value": "http://lockbit435xk3ki62yun7z5nhwz6jyjdp2c64j5vge536if2eny3gtid.onion/", - "count": 2, - "total_related": 149, - "prevalence": 0.013422818791946308 - }, - { - "value": "http://lockbit3g3ohd3katajf6zaehxz4h4cnhmz5t735zpltywhwpc6oy3id.onion/", - "count": 2, - "total_related": 150, - "prevalence": 0.013333333333333334 - }, - { - "value": "http://lockbit3olp7oetlc4tl5zydnoluphh7fvdt5oa6arcp2757r7xkutid.onion/", - "count": 2, - "total_related": 150, - "prevalence": 0.013333333333333334 - }, - { - "value": "http://lockbit4lahhluquhoka3t4spqym2m3dhe66d6lr337glmnlgg2nndad.onion/", - "count": 2, - "total_related": 150, - "prevalence": 0.013333333333333334 - }, - { - "value": "http://lockbit7ouvrsdgtojeoj5hvu6bljqtghitekwpdy3b6y62ixtsu5jqd.onion/", - "count": 2, - "total_related": 150, - "prevalence": 0.013333333333333334 - }, - { - "value": "http://lockbit6knrauo3qafoksvl742vieqbujxw7rd6ofzdtapjb4rrawqad.onion/", - "count": 2, - "total_related": 152, - "prevalence": 0.013157894736842105 - }, - { - "value": "https://mozillacla.ampxdirect.com/wayfair?sub1=wayfair&sub2=us&custom-data=3433&ctag=319104999us3433", - "count": 2, - "total_related": 152, - "prevalence": 0.013157894736842105 - }, - { - "value": "https://mozillacla.ampxdirect.com/wayfair?sub1=wayfair&sub2=us&custom-data=3447&ctag=319104999us3447", - "count": 2, - "total_related": 156, - "prevalence": 0.01282051282051282 - }, - { - "value": "http://lockbit3753ekiocyo5epmpy6klmejchjtzddoekjlnt6mu3qh4de2id.onion/", - "count": 2, - "total_related": 158, - "prevalence": 0.012658227848101266 - }, - { - "value": "https://peps.python.org/pep-3132/", - "count": 2, - "total_related": 209, - "prevalence": 0.009569377990430622 - }, - { - "value": "https://datatracker.ietf.org/doc/html/rfc2104.html", - "count": 2, - "total_related": 256, - "prevalence": 0.0078125 - }, - { - "value": "https://www.rakuten.com/signup_sem.htm?merchant_id=10794?src=admarketplace-Search&eeid=17879&utm_cha", - "count": 2, - "total_related": 283, - "prevalence": 0.007067137809187279 - }, - { - "value": "https://peps.python.org/pep-0644/", - "count": 2, - "total_related": 293, - "prevalence": 0.006825938566552901 - }, - { - "value": "http://lockbitsupuhswh4izvoucoxsbnotkmgq6durg7kficg6u33zfvq3oyd.onion/", - "count": 2, - "total_related": 308, - "prevalence": 0.006493506493506494 - }, - { - "value": "https://peps.python.org/pep-0528/", - "count": 2, - "total_related": 314, - "prevalence": 0.006369426751592357 - }, - { - "value": "https://peps.python.org/pep-0636/", - "count": 2, - "total_related": 327, - "prevalence": 0.0061162079510703364 - }, - { - "value": "http://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly/", - "count": 2, - "total_related": 347, - "prevalence": 0.005763688760806916 - }, - { - "value": "https://peps.python.org/pep-0451/", - "count": 2, - "total_related": 385, - "prevalence": 0.005194805194805195 - }, - { - "value": "https://www.python.org/downloads/source/", - "count": 2, - "total_related": 401, - "prevalence": 0.004987531172069825 - }, - { - "value": "https://mozillacla.ampxdirect.com/wayfair?sub1=wayfair&sub2=us&custom-data=3446&ctag=319104999us3446", - "count": 2, - "total_related": 461, - "prevalence": 0.004338394793926247 - }, - { - "value": "https://peps.python.org/pep-0529/", - "count": 2, - "total_related": 515, - "prevalence": 0.003883495145631068 - }, - { - "value": "http://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion/", - "count": 2, - "total_related": 529, - "prevalence": 0.003780718336483932 - }, - { - "value": "http://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion/", - "count": 2, - "total_related": 530, - "prevalence": 0.0037735849056603774 - }, - { - "value": "http://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion/", - "count": 2, - "total_related": 532, - "prevalence": 0.0037593984962406013 - }, - { - "value": "http://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion/", - "count": 2, - "total_related": 534, - "prevalence": 0.003745318352059925 - }, - { - "value": "http://lockbitapt.uz/", - "count": 2, - "total_related": 540, - "prevalence": 0.003703703703703704 - }, - { - "value": "https://peps.python.org/pep-0634/", - "count": 2, - "total_related": 609, - "prevalence": 0.003284072249589491 - }, - { - "value": "https://peps.python.org/pep-0613/", - "count": 2, - "total_related": 704, - "prevalence": 0.002840909090909091 - }, - { - "value": "https://peps.python.org/pep-0612/", - "count": 2, - "total_related": 1145, - "prevalence": 0.0017467248908296944 - }, - { - "value": "https://peps.python.org/pep-0526/", - "count": 2, - "total_related": 1149, - "prevalence": 0.0017406440382941688 - }, - { - "value": "https://bugs.python.org/issue?&", - "count": 2, - "total_related": 1207, - "prevalence": 0.0016570008285004142 - }, - { - "value": "http://testca.pythontest.net/testca/revocation.crl", - "count": 2, - "total_related": 1258, - "prevalence": 0.001589825119236884 - }, - { - "value": "https://setuptools.readthedocs.io/en/latest/setuptools.html", - "count": 2, - "total_related": 1729, - "prevalence": 0.001156737998843262 - }, - { - "value": "https://github.com/pypa/wheel/pull/289", - "count": 2, - "total_related": 2151, - "prevalence": 0.0009298000929800093 - }, - { - "value": "https://github.com/python/typing/issues/508", - "count": 2, - "total_related": 3107, - "prevalence": 0.000643707756678468 - }, - { - "value": "https://peps.python.org/pep-0484/", - "count": 2, - "total_related": 5579, - "prevalence": 0.000358487184083169 - }, - { - "value": "http://bugs.python.org/issue20541", - "count": 1, - "total_related": 54, - "prevalence": 0.018518518518518517 - }, - { - "value": "http://aquamacs.org/", - "count": 1, - "total_related": 60, - "prevalence": 0.016666666666666666 - }, - { - "value": "http://bugs.python.org/issue10340", - "count": 1, - "total_related": 95, - "prevalence": 0.010526315789473684 - }, - { - "value": "http://buildbot.python.org/all/xmlrpc/", - "count": 1, - "total_related": 98, - "prevalence": 0.01020408163265306 - }, - { - "value": "http://bugs.python.org/review/23491/diff/13982/Lib/zipapp.py", - "count": 1, - "total_related": 103, - "prevalence": 0.009708737864077669 - }, - { - "value": "http://127.0.0.1/spammity/sp%EF%BF%BDm", - "count": 1, - "total_related": 105, - "prevalence": 0.009523809523809525 - }, - { - "value": "http://bugs.python.org/issue19728", - "count": 1, - "total_related": 108, - "prevalence": 0.009259259259259259 - }, - { - "value": "http://127.0.0.1/spammity/spam?s%EF%BF%BDy=ni", - "count": 1, - "total_related": 112, - "prevalence": 0.008928571428571428 - }, - { - "value": "http://127.0.0.1/spammity/spam", - "count": 1, - "total_related": 118, - "prevalence": 0.00847457627118644 - }, - { - "value": "http://bugs.python.org/issue6289", - "count": 1, - "total_related": 127, - "prevalence": 0.007874015748031496 - }, - { - "value": "http://127.0.0.1/spammity/spam;ham", - "count": 1, - "total_related": 128, - "prevalence": 0.0078125 - }, - { - "value": "http://bugs.python.org/issue20819", - "count": 1, - "total_related": 138, - "prevalence": 0.007246376811594203 - }, - { - "value": "http://127.0.0.1/spammity/spam?say=ni", - "count": 1, - "total_related": 188, - "prevalence": 0.005319148936170213 - }, - { - "value": "http://127.0.0.1/spam", - "count": 1, - "total_related": 202, - "prevalence": 0.0049504950495049506 - }, - { - "value": "http://127.0.0.1/spammity/spam;cookie=1234", - "count": 1, - "total_related": 228, - "prevalence": 0.0043859649122807015 - }, - { - "value": "http://bugs.python.org/issue23310", - "count": 1, - "total_related": 228, - "prevalence": 0.0043859649122807015 - }, - { - "value": "http://127.0.0.1/sp%EF%BF%BDm", - "count": 1, - "total_related": 231, - "prevalence": 0.004329004329004329 - }, - { - "value": "http://bugs.python.org/issue25390", - "count": 1, - "total_related": 312, - "prevalence": 0.003205128205128205 - }, - { - "value": "http://bugs.python.org/issue18081).", - "count": 1, - "total_related": 371, - "prevalence": 0.0026954177897574125 - }, - { - "value": "http://bugs.python.org/issue18318).", - "count": 1, - "total_related": 372, - "prevalence": 0.002688172043010753 - }, - { - "value": "http://bugs.python.org/issue20167", - "count": 1, - "total_related": 441, - "prevalence": 0.0022675736961451248 - }, - { - "value": "http://bugs.python.org/issue19734", - "count": 1, - "total_related": 717, - "prevalence": 0.001394700139470014 - }, - { - "value": "http://bugs.python.org/issue1339007", - "count": 1, - "total_related": 821, - "prevalence": 0.001218026796589525 - }, - { - "value": "http://bugs.python.org/issue7833", - "count": 1, - "total_related": 826, - "prevalence": 0.0012106537530266344 - }, - { - "value": "http://bugs.python.org/issue20053", - "count": 1, - "total_related": 929, - "prevalence": 0.001076426264800861 - }, - { - "value": "http://bugs.python.org/issue28539", - "count": 1, - "total_related": 1153, - "prevalence": 0.0008673026886383347 - }, - { - "value": "http://bugs.python.org/issue22107", - "count": 1, - "total_related": 1347, - "prevalence": 0.0007423904974016332 - }, - { - "value": "http://cacerts.darkmatter.ae/qvrca2g3.crt0", - "count": 1, - "total_related": 2094, - "prevalence": 0.0004775549188156638 - }, - { - "value": "http://autorite.certigna.fr/certigna.der06", - "count": 1, - "total_related": 2156, - "prevalence": 0.00046382189239332097 - }, - { - "value": "http://aia1.netlock.hu/index.cgi?ca=gold04", - "count": 1, - "total_related": 4212, - "prevalence": 0.00023741690408357076 - }, - { - "value": "http://bugs.python.org/issue10272", - "count": 1, - "total_related": 4778, - "prevalence": 0.0002092925910422771 - }, - { - "value": "http://127.0.0.1:8000/", - "count": 1, - "total_related": 12447, - "prevalence": 8.034064433196755e-05 - }, - { - "value": "https://github.com/pypa/packaging", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "https://www.python.org/", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "http://127.0.0.1/", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "mutexes_created": [ - { - "value": "Global\\{649F4E29-16CB-DD42-8922-9FFF0592856B}", - "count": 30, - "total_related": 514, - "prevalence": 0.058365758754863814 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Global\\{649F4E29-16CB-DD42-8922-9FFF0592856B}", - "count": 14, - "total_related": 586, - "prevalence": 0.023890784982935155 - }, - { - "value": "Global\\{BEF590BE-11A6-442A-A85B-656C1081E04C}", - "count": 13, - "total_related": 722, - "prevalence": 0.018005540166204988 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Global\\{BEF590BE-11A6-442A-A85B-656C1081E04C}", - "count": 11, - "total_related": 432, - "prevalence": 0.02546296296296296 - }, - { - "value": "Global\\C::Users:admin:AppData:Local:Microsoft:Windows:Explorer:thumbcache_idx.db!ThumbnailCacheInit", - "count": 4, - "total_related": 83833, - "prevalence": 4.771390741116267e-05 - }, - { - "value": "Global\\C::Users:admin:AppData:Local:Microsoft:Windows:Explorer:thumbcache_sr.db!dfMaintainer", - "count": 4, - "total_related": 83846, - "prevalence": 4.770650955322854e-05 - }, - { - "value": "Global\\C::Users:admin:AppData:Local:Microsoft:Windows:Explorer:thumbcache_1024.db!dfMaintainer", - "count": 4, - "total_related": 83851, - "prevalence": 4.770366483405088e-05 - }, - { - "value": "Global\\C::Users:admin:AppData:Local:Microsoft:Windows:Explorer:thumbcache_256.db!dfMaintainer", - "count": 4, - "total_related": 83860, - "prevalence": 4.769854519437157e-05 - }, - { - "value": "Global\\C::Users:admin:AppData:Local:Microsoft:Windows:Explorer:thumbcache_96.db!dfMaintainer", - "count": 4, - "total_related": 83868, - "prevalence": 4.769399532598846e-05 - }, - { - "value": "Global\\C::Users:admin:AppData:Local:Microsoft:Windows:Explorer:thumbcache_32.db!dfMaintainer", - "count": 4, - "total_related": 83875, - "prevalence": 4.769001490312966e-05 - }, - { - "value": "Global\\C::Users:admin:AppData:Local:Microsoft:Windows:Explorer:thumbcache_idx.db!rwWriterMutex", - "count": 4, - "total_related": 83893, - "prevalence": 4.7679782580191434e-05 - }, - { - "value": "Global\\C::Users:admin:AppData:Local:Microsoft:Windows:Explorer:thumbcache_idx.db!rwReaderRefs", - "count": 4, - "total_related": 89515, - "prevalence": 4.468524828241077e-05 - }, - { - "value": "Global\\835d560ec8e7a8965228e679547bfa44", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "Global\\fa90141b3c1949fd8133d3b971432d86", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Global\\835d560ec8e7a8965228e679547bfa44", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "\\BaseNamedObjects\\{43A8B1A0-43A8-ECAA-A945-5065658150CB}", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\WinSpl64To32Mutex_140f5_0_3000", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "Global\\459cfad1e2519034db83d51629a41372", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Global\\459cfad1e2519034db83d51629a41372", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Global\\f050f591bbcd9ed9ad84d7345922b844", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "Global\\f050f591bbcd9ed9ad84d7345922b844", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "\\BaseNamedObjects\\Local\\SM0:9980:304:WilStaging_02", - "count": 2, - "total_related": 10, - "prevalence": 0.2 - }, - { - "value": "Global\\C::Users:user:AppData:Local:Microsoft:Windows:Explorer:thumbcache_idx.db!11e1394", - "count": 2, - "total_related": 1547, - "prevalence": 0.001292824822236587 - }, - { - "value": "\\BaseNamedObjects\\shell.{210A4BA0-3AEA-1069-A2D9-08002B30309D}", - "count": 2, - "total_related": 9537, - "prevalence": 0.0002097095522701059 - }, - { - "value": "\\BaseNamedObjects\\Global\\userenv: User Profile setup event", - "count": 2, - "total_related": 9761, - "prevalence": 0.00020489703923778303 - }, - { - "value": "Global\\C::Users:Louise:AppData:Local:Microsoft:Windows:Explorer:thumbcache_32.db!dfMaintainer", - "count": 2, - "total_related": 13504, - "prevalence": 0.0001481042654028436 - }, - { - "value": "Global\\C::Users:Louise:AppData:Local:Microsoft:Windows:Explorer:thumbcache_sr.db!dfMaintainer", - "count": 2, - "total_related": 13509, - "prevalence": 0.00014804944851580428 - }, - { - "value": "Global\\C::Users:Louise:AppData:Local:Microsoft:Windows:Explorer:thumbcache_idx.db!ThumbnailCacheInit", - "count": 2, - "total_related": 13510, - "prevalence": 0.00014803849000740192 - }, - { - "value": "Global\\C::Users:Louise:AppData:Local:Microsoft:Windows:Explorer:thumbcache_96.db!dfMaintainer", - "count": 2, - "total_related": 13517, - "prevalence": 0.00014796182584893096 - }, - { - "value": "Global\\C::Users:Louise:AppData:Local:Microsoft:Windows:Explorer:thumbcache_idx.db!rwWriterMutex", - "count": 2, - "total_related": 13522, - "prevalence": 0.00014790711433219938 - }, - { - "value": "Global\\C::Users:Louise:AppData:Local:Microsoft:Windows:Explorer:thumbcache_256.db!dfMaintainer", - "count": 2, - "total_related": 13524, - "prevalence": 0.0001478852410529429 - }, - { - "value": "Global\\C::Users:Louise:AppData:Local:Microsoft:Windows:Explorer:thumbcache_1024.db!dfMaintainer", - "count": 2, - "total_related": 13529, - "prevalence": 0.00014783058614827407 - }, - { - "value": "\\BaseNamedObjects\\CTF.TimListCache.FMPDefaultS-1-5-21-1229272821-842925246-1060284298-1003MUTEX.DefaultS-1-5-21-1229272821-842925246-1060284298-1003", - "count": 2, - "total_related": 14600, - "prevalence": 0.000136986301369863 - }, - { - "value": "\\BaseNamedObjects\\CTF.Asm.MutexDefaultS-1-5-21-1229272821-842925246-1060284298-1003", - "count": 2, - "total_related": 14608, - "prevalence": 0.00013691128148959474 - }, - { - "value": "\\BaseNamedObjects\\CTF.Compart.MutexDefaultS-1-5-21-1229272821-842925246-1060284298-1003", - "count": 2, - "total_related": 14608, - "prevalence": 0.00013691128148959474 - }, - { - "value": "\\BaseNamedObjects\\CTF.LBES.MutexDefaultS-1-5-21-1229272821-842925246-1060284298-1003", - "count": 2, - "total_related": 14608, - "prevalence": 0.00013691128148959474 - }, - { - "value": "\\BaseNamedObjects\\CTF.Layouts.MutexDefaultS-1-5-21-1229272821-842925246-1060284298-1003", - "count": 2, - "total_related": 14608, - "prevalence": 0.00013691128148959474 - }, - { - "value": "\\BaseNamedObjects\\CTF.TMD.MutexDefaultS-1-5-21-1229272821-842925246-1060284298-1003", - "count": 2, - "total_related": 14608, - "prevalence": 0.00013691128148959474 - }, - { - "value": "Global\\C::Users:Louise:AppData:Local:Microsoft:Windows:Explorer:thumbcache_idx.db!rwReaderRefs", - "count": 2, - "total_related": 15666, - "prevalence": 0.00012766500702157538 - }, - { - "value": "\\BaseNamedObjects\\shell.{A48F1A32-A340-11D1-BC6B-00A0C90312E1}", - "count": 2, - "total_related": 17667, - "prevalence": 0.00011320541121865625 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Microsoft.Windows.Health.TestInProduction.RegistryStore.AggregateResults", - "count": 2, - "total_related": 63534, - "prevalence": 3.147920798312714e-05 - }, - { - "value": "Global\\03b84b750e7b0c183e81917fcc29ae2b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\050f89a193c5772acb2862c98214b0ea", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\06eae475f2a1d6c43bd9495734f21346", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\166aa5594b98b69ed102613c64a0b8e2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\1898ae4a37d6450476cba394cefc5417", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\059e209281ada150c0df4a044869e46c", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "Global\\0d90e2a6610da8cb78dd2690e38a276c", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "Global\\0e5c42373d9796bc3c88f617245e1bf3", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "Global\\1ab7e49e7ef7a4a9576df1840aae1341", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "Global\\0c59d3d18c5fd19369e5de86ac7ebb90", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "Global\\0e3ccf3669de0a6226aa862ef0407af7", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "D1040AAE2C1B", - "count": 1, - "total_related": 423, - "prevalence": 0.002364066193853428 - }, - { - "value": "955BC4895D65", - "count": 1, - "total_related": 541, - "prevalence": 0.0018484288354898336 - }, - { - "value": "Local\\RstrMgr-3887CAB8-533F-4C85-B0DC-3E5639F8D511-Session0000", - "count": 42, - "total_related": 100000, - "prevalence": 0.00042 - }, - { - "value": "Local\\RstrMgr3887CAB8-533F-4C85-B0DC-3E5639F8D511", - "count": 40, - "total_related": 100000, - "prevalence": 0.0004 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\RstrMgr-3887CAB8-533F-4C85-B0DC-3E5639F8D511-Session0000", - "count": 39, - "total_related": 100000, - "prevalence": 0.00039 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\RstrMgr3887CAB8-533F-4C85-B0DC-3E5639F8D511", - "count": 39, - "total_related": 100000, - "prevalence": 0.00039 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Global\\SyncRootManager", - "count": 37, - "total_related": 100000, - "prevalence": 0.00037 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\ZonesCacheCounterMutex", - "count": 29, - "total_related": 100000, - "prevalence": 0.00029 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\ZonesLockedCacheCounterMutex", - "count": 29, - "total_related": 100000, - "prevalence": 0.00029 - }, - { - "value": "Local\\ZonesCacheCounterMutex", - "count": 19, - "total_related": 100000, - "prevalence": 0.00019 - }, - { - "value": "Local\\ZonesLockedCacheCounterMutex", - "count": 19, - "total_related": 100000, - "prevalence": 0.00019 - }, - { - "value": "CTF.Asm.MutexDefaultS-1-5-21-1482476501-1645522239-1417001333-500", - "count": 17, - "total_related": 100000, - "prevalence": 0.00017 - }, - { - "value": "CTF.Compart.MutexDefaultS-1-5-21-1482476501-1645522239-1417001333-500", - "count": 17, - "total_related": 100000, - "prevalence": 0.00017 - }, - { - "value": "CTF.LBES.MutexDefaultS-1-5-21-1482476501-1645522239-1417001333-500", - "count": 17, - "total_related": 100000, - "prevalence": 0.00017 - }, - { - "value": "CTF.Layouts.MutexDefaultS-1-5-21-1482476501-1645522239-1417001333-500", - "count": 17, - "total_related": 100000, - "prevalence": 0.00017 - }, - { - "value": "CTF.TMD.MutexDefaultS-1-5-21-1482476501-1645522239-1417001333-500", - "count": 17, - "total_related": 100000, - "prevalence": 0.00017 - }, - { - "value": "CTF.TimListCache.FMPDefaultS-1-5-21-1482476501-1645522239-1417001333-500MUTEX.DefaultS-1-5-21-1482476501-1645522239-1417001333-500", - "count": 16, - "total_related": 100000, - "prevalence": 0.00016 - }, - { - "value": "Global\\SetupLog", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "Global\\WdsSetupLogInit", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "Global\\OneSettingQueryMutex+compat+encapsulation", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": "Global\\G{C4F406E5-F024-4e3f-89A7-D5AB7663C3CD}", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "Local\\ZoneAttributeCacheCounterMutex", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "DefaultTabtip-MainUI", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "Global\\AmiProviderMutex_InventoryApplicationFile", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "Global\\C::Users:user:AppData:Local:Microsoft:Windows:Explorer:thumbcache_1024.db!dfMaintainer", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "Global\\C::Users:user:AppData:Local:Microsoft:Windows:Explorer:thumbcache_256.db!dfMaintainer", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "Global\\C::Users:user:AppData:Local:Microsoft:Windows:Explorer:thumbcache_32.db!dfMaintainer", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "Global\\C::Users:user:AppData:Local:Microsoft:Windows:Explorer:thumbcache_96.db!dfMaintainer", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "Global\\C::Users:user:AppData:Local:Microsoft:Windows:Explorer:thumbcache_idx.db!ThumbnailCacheInit", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "Global\\C::Users:user:AppData:Local:Microsoft:Windows:Explorer:thumbcache_idx.db!rwReaderRefs", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "Global\\C::Users:user:AppData:Local:Microsoft:Windows:Explorer:thumbcache_idx.db!rwWriterMutex", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "Global\\C::Users:user:AppData:Local:Microsoft:Windows:Explorer:thumbcache_sr.db!dfMaintainer", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "Local\\WininetProxyRegistryMutex", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "Local\\WininetStartupMutex", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "Local\\_!MSFTHISTORY!_", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "NULL", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\SessionImmersiveColorMutex", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "Groove:PathMutex:h1kwmeaFCOs5YDt3Ur7pBe3iRlE=", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "Local\\WininetConnectionMutex", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "Local\\ZonesCounterMutex", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\ZoneAttributeCacheCounterMutex", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "Local\\c:!users!admin!appdata!local!microsoft!windows!history!history.ie5!", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "Local\\c:!users!admin!appdata!local!microsoft!windows!temporary internet files!content.ie5!", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "Local\\c:!users!admin!appdata!roaming!microsoft!windows!cookies!", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\ZonesCounterMutex", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "!IECompat!Mutex", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "MutexPolesskayaGlush*.*\u0090svchost.com\u0090exefile\\shell\\open\\command\u2039\u00c0 \"%1\" %*\u0153\u2018@", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "RasPbFile", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - } - ], - "mutexes_opened": [ - { - "value": "Global\\{649F4E29-16CB-DD42-8922-9FFF0592856B}", - "count": 79, - "total_related": 637, - "prevalence": 0.12401883830455258 - }, - { - "value": "Global\\{BEF590BE-11A6-442A-A85B-656C1081E04C}", - "count": 28, - "total_related": 729, - "prevalence": 0.038408779149519894 - }, - { - "value": "\\KernelObjects\\BcdSyncMutant", - "count": 7, - "total_related": 12765, - "prevalence": 0.0005483744614179397 - }, - { - "value": "Global\\f050f591bbcd9ed9ad84d7345922b844", - "count": 5, - "total_related": 6, - "prevalence": 0.8333333333333334 - }, - { - "value": "Global\\2cae82bd1366f4e0fdc7a9a7c12e2a6b", - "count": 4, - "total_related": 8, - "prevalence": 0.5 - }, - { - "value": "Global\\7ace23bb6c0db6d1eb1a0c49cf37d447", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "Global\\459cfad1e2519034db83d51629a41372", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "Global\\3c327a3c730976ff4c65a77122158495", - "count": 3, - "total_related": 6, - "prevalence": 0.5 - }, - { - "value": "Global\\7c21db26ea4232f501229ca27db16a48", - "count": 3, - "total_related": 13, - "prevalence": 0.23076923076923078 - }, - { - "value": "Global\\7f7737f71a85e7f2185210ed3eeda4c4", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "Global\\835d560ec8e7a8965228e679547bfa44", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "Global\\afc200360976321f509d43e70300f12a", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "Global\\fa90141b3c1949fd8133d3b971432d86", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "Global\\548aa41141e72339cf9daac6d40189a7", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "Global\\8a41eed9f9a609f3b5f231fda1525a36", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "Global\\fd1a98b18d2c3e7b533671cfce0cf4fe", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "Global\\f62e0bbb829f0693ca3f1e7fd5ce88c5", - "count": 2, - "total_related": 13, - "prevalence": 0.15384615384615385 - }, - { - "value": "MutexPolesskayaGlush*.*\u0090svchost.com\u0090\u00b5\u00e1\u00d9n\u00ca\u0012X\u00fd\u00b1\u0015.\u009at\u00dbN\u00f3\u00c4\u009et\u0093\u00ee\u00e2h\u00ee\u0011\u0084\u008b\u00c0`\u0088\u00b2\u00f2T\u00f85\u00fd\u009c\u0091@", - "count": 2, - "total_related": 294, - "prevalence": 0.006802721088435374 - }, - { - "value": "MutexPolesskayaGlush*.*\u0090svchost.com\u0090exefile\\shell\\open\\command\u008b\u00c0 \"%1\" %*\u009c\u0091@", - "count": 2, - "total_related": 782, - "prevalence": 0.0025575447570332483 - }, - { - "value": "044527C95AAB", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\009d89933e9ce2fc20492ba162010c0c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\03b84b750e7b0c183e81917fcc29ae2b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\050f89a193c5772acb2862c98214b0ea", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\06eae475f2a1d6c43bd9495734f21346", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\09c0016691ac380ce6834bdce356edf3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\0b32ca9dec339d33dd1bd5908acf4ce2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\0eb7466dc7a3da96da1782e96a44b677", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\10b5e1850ed6703d7665a1adf3e368f4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\13e16f1919bd1705b1753e0cf7a0dd9a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\166aa5594b98b69ed102613c64a0b8e2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\182dc0e041f41322f0b2b49918aa5c23", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\1898ae4a37d6450476cba394cefc5417", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\1ac66e159467457ac32aae05c78a7ba3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\1b26a4134219806e9f3a590666950215", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\1be38b5a23d8e6013a069da5665bd2c4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\1c66a1c7ee5f27a48010a6f5790bea9b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\1fa4e784150868fd2cd630a295d5a0e5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\20f009041ccc70effab99457e5ffde5d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\237e949e4487156ad806efa6f491f45d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\2a7a0ac603519dbb920a5629c6c90c38", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\2ae6b975f4f018240539060ca39404b6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\2b22789be73f416d4931ca4725ebf1a8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\2cb777ea76baae3b077dc1818c5dd3a4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\2dc8d78d897f159fcbf630af928af189", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\3620d3a865322698b9aafc9c1d227fe9", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\391396896a2cb3a40a83c4fbbe4675f3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\39f319ebdc5b64a80341e0dc262479ac", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\3c906140c89223256df8f42fd1d64999", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\3d7f9a4efd5899e239b6254acf883f59", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\42617d8bffcad874d60a1b4e7c5e04f7", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\459bf63110ce888f28d3fd21adc5b730", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\4db24cbb565899cdd8b265d3b98958a2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\4fc4524516079bf293781b0f855e616c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\5047e33c3c6def76827ed2004f2e5c22", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Global\\059e209281ada150c0df4a044869e46c", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "Global\\0d90e2a6610da8cb78dd2690e38a276c", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "Global\\0e5c42373d9796bc3c88f617245e1bf3", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "Global\\0eaf76902f3015259698a1abfd12ef36", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "Global\\1ab7e49e7ef7a4a9576df1840aae1341", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "Global\\273066c1690c95bc6fe923fd47d714f7", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "Global\\2d04f7a63bb59d999f9e1a1b7d59cd7c", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "Global\\32cea76f43d615f918b93198b6309dd9", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "Global\\4ef62a5292cb9e97e9d8195108b7ac42", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "Global\\2d87d2149e7f73dd7b6b84daebbb7b1b", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "Global\\437c6986173ae963e24b3eba0a473ec2", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "Global\\0c59d3d18c5fd19369e5de86ac7ebb90", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "Global\\0f6796e2cb740ff935ea61fc554b56e5", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "Global\\4c3e3cb8c6ed0804dcd51ba2638722cd", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "Global\\0e3ccf3669de0a6226aa862ef0407af7", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "006700e5a2ab05704bbb0c589b88924d", - "count": 1, - "total_related": 16570, - "prevalence": 6.0350030175015085e-05 - }, - { - "value": "ShimCacheMutex", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "DefaultTabtip-MainUI", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": "Local\\WininetConnectionMutex", - "count": 8, - "total_related": 100000, - "prevalence": 8e-05 - }, - { - "value": "Local\\WininetProxyRegistryMutex", - "count": 8, - "total_related": 100000, - "prevalence": 8e-05 - }, - { - "value": "Local\\WininetStartupMutex", - "count": 8, - "total_related": 100000, - "prevalence": 8e-05 - }, - { - "value": "Local\\_!MSFTHISTORY!_", - "count": 8, - "total_related": 100000, - "prevalence": 8e-05 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Global\\TermSrvReadyEvent", - "count": 8, - "total_related": 100000, - "prevalence": 8e-05 - }, - { - "value": "CicLoadWinStaWinSta0", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "Local\\__DDrawCheckExclMode__", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\%APPDATA%!microsoft!windows!cookies!", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\%LOCALAPPDATA%!microsoft!windows!!content.ie5!", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\%LOCALAPPDATA%!microsoft!windows!history!history.ie5!", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\WininetConnectionMutex", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\WininetProxyRegistryMutex", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\WininetStartupMutex", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\_!MSFTHISTORY!_", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "Global\\SyncRootManager", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "Local\\MSCTF.Asm.MutexDefault1", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "Local\\ZoneAttributeCacheCounterMutex", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "Local\\ZonesCacheCounterMutex", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "Local\\ZonesCounterMutex", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "Local\\ZonesLockedCacheCounterMutex", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "Local\\c:!users!admin!appdata!local!microsoft!windows!history!history.ie5!", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "Local\\c:!users!admin!appdata!local!microsoft!windows!temporary internet files!content.ie5!", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "Local\\c:!users!admin!appdata!roaming!microsoft!windows!cookies!", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "Local\\c:!users!administrator!appdata!local!microsoft!windows!history!history.ie5!", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "Local\\c:!users!administrator!appdata!local!microsoft!windows!temporary internet files!content.ie5!", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "Local\\c:!users!administrator!appdata!roaming!microsoft!windows!cookies!", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\BaseNamedObjects\\Global\\SvcctrlStartEvent_A3752DX", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "\\BaseNamedObjects\\Global\\crypt32LogoffEvent", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - } - ], - "registry_keys_deleted": [ - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\RestartManager\\Session0000\\RegFilesHash", - "count": 10, - "total_related": 12370, - "prevalence": 0.0008084074373484236 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\RestartManager\\Session0000\\RegFiles0000", - "count": 10, - "total_related": 12371, - "prevalence": 0.0008083420903726457 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\RestartManager\\Session0000\\Owner", - "count": 10, - "total_related": 36935, - "prevalence": 0.0002707459049681874 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\RestartManager\\Session0000\\Sequence", - "count": 10, - "total_related": 36935, - "prevalence": 0.0002707459049681874 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\RestartManager\\Session0000\\SessionHash", - "count": 10, - "total_related": 36935, - "prevalence": 0.0002707459049681874 - }, - { - "value": "HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Services\\VSS\\Diag", - "count": 8, - "total_related": 236, - "prevalence": 0.03389830508474576 - }, - { - "value": "HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Services\\VSS\\Diag\\BITS Writer", - "count": 8, - "total_related": 236, - "prevalence": 0.03389830508474576 - }, - { - "value": "HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Services\\VSS\\Diag\\SPP", - "count": 8, - "total_related": 236, - "prevalence": 0.03389830508474576 - }, - { - "value": "HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Services\\VSS\\Diag\\System Writer", - "count": 8, - "total_related": 236, - "prevalence": 0.03389830508474576 - }, - { - "value": "HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Services\\VSS\\Diag\\SystemRestore", - "count": 8, - "total_related": 236, - "prevalence": 0.03389830508474576 - }, - { - "value": "HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Services\\VSS\\Diag\\VolSnap", - "count": 8, - "total_related": 236, - "prevalence": 0.03389830508474576 - }, - { - "value": "HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Services\\VSS\\Diag\\WMI Writer", - "count": 8, - "total_related": 236, - "prevalence": 0.03389830508474576 - }, - { - "value": "HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Services\\VSS", - "count": 8, - "total_related": 238, - "prevalence": 0.03361344537815126 - }, - { - "value": "HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Services\\VSS\\Settings", - "count": 7, - "total_related": 236, - "prevalence": 0.029661016949152543 - }, - { - "value": "HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Services\\VSS\\Settings\\WritersBlockingRevert", - "count": 7, - "total_related": 236, - "prevalence": 0.029661016949152543 - }, - { - "value": "HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Services\\VSS\\VssAccessControl", - "count": 7, - "total_related": 236, - "prevalence": 0.029661016949152543 - }, - { - "value": "HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Services\\VSS\\Providers", - "count": 7, - "total_related": 238, - "prevalence": 0.029411764705882353 - }, - { - "value": "HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Services\\VSS\\Providers\\{b5946137-7b9f-4925-af80-51abd60b20d5}", - "count": 7, - "total_related": 238, - "prevalence": 0.029411764705882353 - }, - { - "value": "HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Services\\VSS\\Providers\\{b5946137-7b9f-4925-af80-51abd60b20d5}\\CLSID", - "count": 7, - "total_related": 238, - "prevalence": 0.029411764705882353 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Internet Explorer\\LinksBar\\ItemCache", - "count": 4, - "total_related": 206, - "prevalence": 0.019417475728155338 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Internet Explorer\\LinksBar\\ItemCache\\0", - "count": 4, - "total_related": 207, - "prevalence": 0.01932367149758454 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\.NET Runtime", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\.NET Runtime Optimization Service", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Application", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Application Error", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Application Hang", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Application Management", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Application-Addon-Event-Provider", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\AutoEnrollment", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Business Connectivity Services(Legacy Provider)", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\COM", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\COM+", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\CardSpace 4.0.0.0", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\CertCa", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\CertCli", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\CertEnroll", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Chkdsk", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\DeliveryOptimization", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Desktop Window Manager", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\DiskQuota", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Dwminit", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\ESENT", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Error Instrument", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\EventSystem", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Folder Redirection", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Group Policy Applications", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Group Policy Client", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Group Policy Data Sources", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Group Policy Device Settings", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Group Policy Drive Maps", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Group Policy Environment", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Group Policy Files", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Group Policy Folder Options", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Group Policy Folders", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Group Policy Ini Files", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Group Policy Internet Settings", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Group Policy Local Users and Groups", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Group Policy Mail Profiles", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{a5a30fa2-3d06-4e9f-b5f4-a01df9d1fcba}", - "count": 2, - "total_related": 4180, - "prevalence": 0.0004784688995215311 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{a5a30fa2-3d06-4e9f-b5f4-a01df9d1fcba}\\Description", - "count": 2, - "total_related": 4180, - "prevalence": 0.0004784688995215311 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{a5a30fa2-3d06-4e9f-b5f4-a01df9d1fcba}\\Elements", - "count": 2, - "total_related": 4180, - "prevalence": 0.0004784688995215311 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{a5a30fa2-3d06-4e9f-b5f4-a01df9d1fcba}\\Elements\\24000001", - "count": 2, - "total_related": 4180, - "prevalence": 0.0004784688995215311 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{a5a30fa2-3d06-4e9f-b5f4-a01df9d1fcba}\\Elements\\25000004", - "count": 2, - "total_related": 4180, - "prevalence": 0.0004784688995215311 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{ced07d4c-3b30-11eb-833c-df431422fea5}\\Elements\\12000004", - "count": 2, - "total_related": 4181, - "prevalence": 0.00047835446065534564 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{ced07d4b-3b30-11eb-833c-df431422fea5}\\Elements\\12000004", - "count": 2, - "total_related": 4182, - "prevalence": 0.00047824007651841227 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{9dea862c-5cdd-4e70-acc1-f32b344d4795}\\Elements\\12000002", - "count": 2, - "total_related": 4184, - "prevalence": 0.0004780114722753346 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{9dea862c-5cdd-4e70-acc1-f32b344d4795}\\Elements\\11000001", - "count": 2, - "total_related": 4223, - "prevalence": 0.0004735969689793985 - }, - { - "value": "HKEY_LOCAL_MACHINE\\COMPONENTS\\PendingXmlIdentifier", - "count": 2, - "total_related": 7534, - "prevalence": 0.0002654632333421821 - }, - { - "value": "HKEY_LOCAL_MACHINE\\COMPONENTS\\RepairTransactionPended", - "count": 2, - "total_related": 7537, - "prevalence": 0.00026535756932466497 - }, - { - "value": "HKEY_LOCAL_MACHINE\\COMPONENTS\\ExecutionState", - "count": 2, - "total_related": 7541, - "prevalence": 0.0002652168147460549 - }, - { - "value": "HKEY_LOCAL_MACHINE\\COMPONENTS\\PoqexecFailure", - "count": 2, - "total_related": 7546, - "prevalence": 0.00026504108136761196 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Description\\FirmwareModified", - "count": 2, - "total_related": 8871, - "prevalence": 0.00022545372562281593 - }, - { - "value": "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\RestartManager\\Session0000", - "count": 2, - "total_related": 38759, - "prevalence": 5.160091849634924e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\HomeGroup\\UIStatusCache", - "count": 2, - "total_related": 40940, - "prevalence": 4.885197850512946e-05 - }, - { - "value": "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\RestartManager\\Session0000\\Owner", - "count": 50, - "total_related": 100000, - "prevalence": 0.0005 - }, - { - "value": "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\RestartManager\\Session0000\\RegFiles0000", - "count": 50, - "total_related": 100000, - "prevalence": 0.0005 - }, - { - "value": "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\RestartManager\\Session0000\\RegFilesHash", - "count": 50, - "total_related": 100000, - "prevalence": 0.0005 - }, - { - "value": "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\RestartManager\\Session0000\\Sequence", - "count": 50, - "total_related": 100000, - "prevalence": 0.0005 - }, - { - "value": "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\RestartManager\\Session0000\\SessionHash", - "count": 50, - "total_related": 100000, - "prevalence": 0.0005 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\RestartManager\\Session0000", - "count": 27, - "total_related": 100000, - "prevalence": 0.00027 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Services\\WmiApRpl\\Performance\\First Counter", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Services\\WmiApRpl\\Performance\\First Help", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Services\\WmiApRpl\\Performance\\Last Counter", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Services\\WmiApRpl\\Performance\\Last Help", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Services\\WmiApRpl\\Performance\\Object List", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\IntranetName", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\ProxyBypass", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\IntranetName", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\ProxyBypass", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Control\\Network\\NetCfgLockHolder", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "HKLM/Software/Microsoft/Windows/CurrentVersion/Internet Settings/ZoneMap//IntranetName", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "HKLM/Software/Microsoft/Windows/CurrentVersion/Internet Settings/ZoneMap//ProxyBypass", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "HKU/S-1-5-21-470376811-3006406624-3672060426-1000/Software/Microsoft/Windows/CurrentVersion/Internet Settings/ZoneMap//IntranetName", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "HKU/S-1-5-21-470376811-3006406624-3672060426-1000/Software/Microsoft/Windows/CurrentVersion/Internet Settings/ZoneMap//ProxyBypass", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\IntranetName", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\ProxyBypass", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "\\Software\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\IntranetName", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "\\Software\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\ProxyBypass", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\IntranetName", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\ProxyBypass", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - } - ], - "registry_keys_opened": [ - { - "value": "HKCU\\Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_LOCALMACHINE_LOCKDOWN\\8ee35297d2da61ff6063714a4ac437f7.virus.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{11CD958A-C507-4EF3-B3F2-5FD9DFBD2C78}.check.101", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{A5268B8E-7DB5-465b-BAB7-BDCDA39A394A}.check.100", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{DAB69A6A-4D2A-4D44-94BF-E0091898C881}.check.100", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Providers/EventLog/{11CD958A-C507-4EF3-B3F2-5FD9DFBD2C78}", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Providers/EventLog/{A5268B8E-7DB5-465b-BAB7-BDCDA39A394A}", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Providers/EventLog/{DAB69A6A-4D2A-4D44-94BF-E0091898C881}", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{01979c6a-42fa-414c-b8aa-eee2c8202018}.check.100", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{01979c6a-42fa-414c-b8aa-eee2c8202018}.check.101", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{852FB1F8-5CC6-4567-9C0E-7C330F8807C2}.check.100", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{852FB1F8-5CC6-4567-9C0E-7C330F8807C2}.check.101", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{945a8954-c147-4acd-923f-40c45405a658}.check.42", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{C8E6F269-B90A-4053-A3BE-499AFCEC98C4}.check.0", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Providers/EventLog/{01979c6a-42fa-414c-b8aa-eee2c8202018}", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Providers/EventLog/{945a8954-c147-4acd-923f-40c45405a658}", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/Windows Error Reporting", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/Windows Error Reporting/ERC", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Policies/Microsoft/Windows/Windows Error Reporting", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/SOFTWARE/Microsoft/Windows/CurrentVersion/Internet Settings/Zones", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{E8433B72-5842-4d43-8645-BC2C35960837}.check.100", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{E8433B72-5842-4d43-8645-BC2C35960837}.check.101", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{E8433B72-5842-4d43-8645-BC2C35960837}.check.102", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{E8433B72-5842-4d43-8645-BC2C35960837}.check.103", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{E8433B72-5842-4d43-8645-BC2C35960837}.check.104", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{E8433B72-5842-4d43-8645-BC2C35960837}.check.106", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Internet Settings/Zones/1", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Internet Settings/Zones/2", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Internet Settings/Zones/3", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Internet Settings/Zones/4", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Policies/Microsoft/Windows/CurrentVersion/Internet Settings/Zones/0", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Policies/Microsoft/Windows/CurrentVersion/Internet Settings/Zones/1", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Policies/Microsoft/Windows/CurrentVersion/Internet Settings/Zones/2", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Policies/Microsoft/Windows/CurrentVersion/Internet Settings/Zones/3", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Policies/Microsoft/Windows/CurrentVersion/Internet Settings/Zones/4", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "HKCR/CLSID/{E3633C03-DF7A-41E0-B903-CC349A05E021}", - "count": 1, - "total_related": 118, - "prevalence": 0.00847457627118644 - }, - { - "value": "HKCR/Interface/{A2DBE0E9-E0F7-4A8F-9F9B-471C1CD02136}", - "count": 1, - "total_related": 118, - "prevalence": 0.00847457627118644 - }, - { - "value": "HKCR/CLSID/{37734C4D-FFA8-4139-9AAC-60FBE55BF3DF}", - "count": 1, - "total_related": 131, - "prevalence": 0.007633587786259542 - }, - { - "value": "HKCR/AppID/wbadmin.exe", - "count": 1, - "total_related": 143, - "prevalence": 0.006993006993006993 - }, - { - "value": "HKCR/CLSID/{3AD05575-8857-4850-9277-11B85BDB8E09}", - "count": 1, - "total_related": 296, - "prevalence": 0.0033783783783783786 - }, - { - "value": "HKCU\\SOFTWARE\\LockBit", - "count": 1, - "total_related": 590, - "prevalence": 0.001694915254237288 - }, - { - "value": "HKCR/Interface/{DA9F41D4-1A5D-41D0-A614-6DFD78DF5D05}", - "count": 1, - "total_related": 597, - "prevalence": 0.0016750418760469012 - }, - { - "value": "HKCR/AppID/vssadmin.exe", - "count": 1, - "total_related": 645, - "prevalence": 0.0015503875968992248 - }, - { - "value": "HKCR/AppID/WMIC.exe", - "count": 1, - "total_related": 1195, - "prevalence": 0.0008368200836820083 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}", - "count": 1, - "total_related": 1282, - "prevalence": 0.00078003120124805 - }, - { - "value": "HKCR/CLSID/{F2C2787D-95AB-40D4-942D-298F5F757874}", - "count": 1, - "total_related": 1577, - "prevalence": 0.0006341154090044388 - }, - { - "value": "HKCR/Interface/{79EAC9E4-BAF9-11CE-8C82-00AA004BA90B}", - "count": 1, - "total_related": 1766, - "prevalence": 0.0005662514156285391 - }, - { - "value": "HKCR/CLSID/{E579AB5F-1CC4-44B4-BED9-DE0991FF0623}", - "count": 1, - "total_related": 1840, - "prevalence": 0.0005434782608695652 - }, - { - "value": "HKCR/CLSID/{F6D90F12-9C73-11D3-B32E-00C04F990BB4}", - "count": 1, - "total_related": 1878, - "prevalence": 0.0005324813631522897 - }, - { - "value": "HKCR/PROTOCOLS/Filter/text/xml", - "count": 1, - "total_related": 1940, - "prevalence": 0.0005154639175257732 - }, - { - "value": "HKCR/CLSID/{807573E5-5146-11D5-A672-00B0D022E945}", - "count": 1, - "total_related": 2262, - "prevalence": 0.0004420866489832007 - }, - { - "value": "HKCR/.xml", - "count": 1, - "total_related": 2347, - "prevalence": 0.00042607584149978694 - }, - { - "value": "HKCR/PROTOCOLS/Name-Space Handler/file", - "count": 1, - "total_related": 18304, - "prevalence": 5.463286713286713e-05 - }, - { - "value": "HKCR/CLSID/{8BC3F05E-D86B-11D0-A075-00C04FB68820}", - "count": 1, - "total_related": 73967, - "prevalence": 1.3519542498681845e-05 - }, - { - "value": "HKCR/CLSID/{208D2C60-3AEA-1069-A2D7-08002B30309D}/ShellFolder", - "count": 1, - "total_related": 99110, - "prevalence": 1.008979921299566e-05 - }, - { - "value": "HKCR/CLSID/{1B1CAD8C-2DAB-11D2-B604-00104B703EFD}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCR/CLSID/{1F486A52-3CB1-48FD-8F50-B8DC300D9F9D}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCR/CLSID/{20D04FE0-3AEA-1069-A2D8-08002B30309D}/ShellFolder", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCR/CLSID/{4590F811-1D3A-11D0-891F-00AA004B2E24}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCR/CLSID/{4590F812-1D3A-11D0-891F-00AA004B2E24}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCR/CLSID/{6AE07DC1-0244-4C6F-9AB0-5017A56357C3}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCR/CLSID/{7C857801-7381-11CF-884D-00AA004B2E24}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCR/CLSID/{871C5380-42A0-1069-A2EA-08002B30309D}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCR/CLSID/{871C5380-42A0-1069-A2EA-08002B30309D}/InProcServer32", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCR/CLSID/{871C5380-42A0-1069-A2EA-08002B30309D}/ShellFolder", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCR/CLSID/{871c5380-42a0-1069-a2ea-08002b30309d}/InProcServer32", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCR/CLSID/{88D96A05-F192-11D4-A65F-0040963251E5}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCR/CLSID/{900C0763-5CAD-4A34-BC1F-40CD513679D5}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCR/CLSID/{C8E6F269-B90A-4053-A3BE-499AFCEC98C4}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCR/CLSID/{CA236752-2E77-4386-B63B-0E34774A413D}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCR/CLSID/{D68AF00A-29CB-43FA-8504-CE99A996D9EA}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCR/Interface/{00000134-0000-0000-C000-000000000046}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCR/Interface/{027947E1-D731-11CE-A357-000000000001}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCR/Interface/{1C1C45EE-4395-11D2-B60B-00104B703EFD}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCR/Interface/{423EC01E-2E35-11D2-B604-00104B703EFD}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCR/Interface/{9556DC99-828C-11CF-A37E-00AA003240C7}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCR/Interface/{D4781CD6-E5D3-44DF-AD94-930EFE48A887}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCR/Interface/{F309AD18-D86A-11D0-A075-00C04FB68820}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCR/PROTOCOLS/Name-Space Handler", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCR/PROTOCOLS/Name-Space Handler/*", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCU\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCU\\Software", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCU\\Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_ALLOW_REVERSE_SOLIDUS_IN_USERINFO_KB932562", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCU\\Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCU\\Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_IGNORE_POLICIES_ZONEMAP_IF_ESC_ENABLED_KB918915", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCU\\Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_INITIALIZE_URLACTION_SHELLEXECUTE_TO_ALLOW_KB936610", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCU\\Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_LOCALMACHINE_LOCKDOWN", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCU\\Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_LOCALMACHINE_LOCKDOWN\\*", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCU\\Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_PROTOCOL_LOCKDOWN", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCU\\Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_UNC_SAVEDFILECHECK", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCU\\Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_ZONES_CHECK_ZONEMAP_POLICY_KB941001", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCU\\Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_ZONES_DEFAULT_DRIVE_INTRANET_KB941000", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCU\\Software\\Microsoft\\Internet Explorer\\Security", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCU\\Software\\Microsoft\\Internet Explorer\\Security\\DisableSecuritySettingsCheck", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\CreateUriCacheSize", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\EnablePunycode", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Lockdown_Zones", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Lockdown_Zones\\0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Lockdown_Zones\\1", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Lockdown_Zones\\2", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "registry_keys_set": [ - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\BitBucket\\Volume\\{3ad3197b-12d6-45c2-a036-8dbcc38b1f2e}", - "count": 2, - "total_related": 1237, - "prevalence": 0.0016168148746968471 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\BitBucket\\Volume\\{fde94e26-51ac-4a3b-a031-293cbf326422}", - "count": 2, - "total_related": 1265, - "prevalence": 0.0015810276679841897 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\BitBucket\\Volume\\{3ad3197b-12d6-45c2-a036-8dbcc38b1f2e}\\MaxCapacity", - "count": 2, - "total_related": 1289, - "prevalence": 0.0015515903801396431 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\BitBucket\\Volume\\{3ad3197b-12d6-45c2-a036-8dbcc38b1f2e}\\NukeOnDelete", - "count": 2, - "total_related": 1289, - "prevalence": 0.0015515903801396431 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\BitBucket\\Volume\\{fde94e26-51ac-4a3b-a031-293cbf326422}\\MaxCapacity", - "count": 2, - "total_related": 1317, - "prevalence": 0.0015186028853454822 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\BitBucket\\Volume\\{fde94e26-51ac-4a3b-a031-293cbf326422}\\NukeOnDelete", - "count": 2, - "total_related": 1317, - "prevalence": 0.0015186028853454822 - }, - { - "value": "HKCU\\Software\\172375D3E3B45C\\Private", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "HKCU\\Software\\172375D3E3B45C\\Public", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\\{AD2359D3-E3E3-40C5-BF5C-BFBC1DD0BDA}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "HKEY_CURRENT_USER\\SOFTWARE\\172375D3E3B45C", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "HKEY_CURRENT_USER\\SOFTWARE\\172375D3E3B45C\\Private", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "HKEY_CURRENT_USER\\SOFTWARE\\172375D3E3B45C\\Public", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\{AD2359D3-E3E3-40C5-BF5C-BFBC1DD0BDA}", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\172375D3E3B45C\\Private", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\172375D3E3B45C\\Public", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\\{AD2359D3-E3E3-40C5-BF5C-BFBC1DD0BDA}", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "HKEY_CLASSES_ROOT\\.kF0wnCN24", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "HKEY_CLASSES_ROOT\\kF0wnCN24\\DefaultIcon", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\kF0wnCN24", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\.kF0wnCN24", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\.kF0wnCN24\\NULL", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\kF0wnCN24\\DefaultIcon", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\kF0wnCN24\\DefaultIcon\\NULL", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{945a8954-c147-4acd-923f-40c45405a658}.check.42/CheckSetting", - "count": 1, - "total_related": 16, - "prevalence": 0.0625 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{E8433B72-5842-4d43-8645-BC2C35960837}.check.100/CheckSetting", - "count": 1, - "total_related": 25, - "prevalence": 0.04 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{E8433B72-5842-4d43-8645-BC2C35960837}.check.101/CheckSetting", - "count": 1, - "total_related": 25, - "prevalence": 0.04 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{E8433B72-5842-4d43-8645-BC2C35960837}.check.103/CheckSetting", - "count": 1, - "total_related": 25, - "prevalence": 0.04 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{E8433B72-5842-4d43-8645-BC2C35960837}.check.104/CheckSetting", - "count": 1, - "total_related": 25, - "prevalence": 0.04 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{E8433B72-5842-4d43-8645-BC2C35960837}.check.106/CheckSetting", - "count": 1, - "total_related": 25, - "prevalence": 0.04 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{852FB1F8-5CC6-4567-9C0E-7C330F8807C2}.check.100/CheckSetting", - "count": 1, - "total_related": 26, - "prevalence": 0.038461538461538464 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{852FB1F8-5CC6-4567-9C0E-7C330F8807C2}.check.101/CheckSetting", - "count": 1, - "total_related": 26, - "prevalence": 0.038461538461538464 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{E8433B72-5842-4d43-8645-BC2C35960837}.check.102/CheckSetting", - "count": 1, - "total_related": 26, - "prevalence": 0.038461538461538464 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{01979c6a-42fa-414c-b8aa-eee2c8202018}.check.100/CheckSetting", - "count": 1, - "total_related": 27, - "prevalence": 0.037037037037037035 - }, - { - "value": "HKCR/Interface/{AE1C7110-2F60-11D3-8A39-00C04F72D8E3}/Software/Microsoft/Windows/CurrentVersion/Action Center/Checks/{11CD958A-C507-4EF3-B3F2-5FD9DFBD2C78}.check.101/CheckSetting", - "count": 1, - "total_related": 27, - "prevalence": 0.037037037037037035 - }, - { - "value": "HKEY_CURRENT_USER\\SOFTWARE\\LockBit", - "count": 1, - "total_related": 182, - "prevalence": 0.005494505494505495 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\LockBit\\Public", - "count": 1, - "total_related": 182, - "prevalence": 0.005494505494505495 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\LockBit\\full", - "count": 1, - "total_related": 183, - "prevalence": 0.00546448087431694 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\\XO1XADpO01", - "count": 1, - "total_related": 184, - "prevalence": 0.005434782608695652 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\.lockbit\\DefaultIcon\\NULL", - "count": 1, - "total_related": 391, - "prevalence": 0.0025575447570332483 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\AMSI/Debug\\ChannelAccess", - "count": 1, - "total_related": 691, - "prevalence": 0.001447178002894356 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\AMSI/Debug\\Enabled", - "count": 1, - "total_related": 691, - "prevalence": 0.001447178002894356 - }, - { - "value": "HKEY_CURRENT_USER\\Control Panel\\Desktop\\WallPaper", - "count": 1, - "total_related": 1173, - "prevalence": 0.0008525149190110827 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\DebugChannel\\ChannelAccess", - "count": 1, - "total_related": 1239, - "prevalence": 0.0008071025020177562 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\General Logging\\ChannelAccess", - "count": 1, - "total_related": 1241, - "prevalence": 0.0008058017727639 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\DebugChannel\\Enabled", - "count": 1, - "total_related": 1244, - "prevalence": 0.0008038585209003215 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\AirSpaceChannel\\ChannelAccess", - "count": 1, - "total_related": 1245, - "prevalence": 0.0008032128514056225 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\FirstUXPerf-Analytic\\Enabled", - "count": 1, - "total_related": 1247, - "prevalence": 0.0008019246190858059 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\AirSpaceChannel\\Enabled", - "count": 1, - "total_related": 1249, - "prevalence": 0.0008006405124099279 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\Els_Hyphenation/Analytic\\Enabled", - "count": 1, - "total_related": 1258, - "prevalence": 0.000794912559618442 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\ForwardedEvents\\Enabled", - "count": 1, - "total_related": 1272, - "prevalence": 0.0007861635220125787 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\DirectShowFilterGraph\\Enabled", - "count": 1, - "total_related": 1274, - "prevalence": 0.0007849293563579278 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\DirectShowPluginControl\\Enabled", - "count": 1, - "total_related": 1274, - "prevalence": 0.0007849293563579278 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\Analytic\\Enabled", - "count": 1, - "total_related": 1275, - "prevalence": 0.000784313725490196 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\EndpointMapper\\Enabled", - "count": 1, - "total_related": 1275, - "prevalence": 0.000784313725490196 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\FirstUXPerf-Analytic\\ChannelAccess", - "count": 1, - "total_related": 1456, - "prevalence": 0.0006868131868131869 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\Els_Hyphenation/Analytic\\ChannelAccess", - "count": 1, - "total_related": 1462, - "prevalence": 0.0006839945280437756 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\DirectShowFilterGraph\\ChannelAccess", - "count": 1, - "total_related": 1475, - "prevalence": 0.0006779661016949153 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\DirectShowPluginControl\\ChannelAccess", - "count": 1, - "total_related": 1475, - "prevalence": 0.0006779661016949153 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\ForwardedEvents\\ChannelAccess", - "count": 1, - "total_related": 1475, - "prevalence": 0.0006779661016949153 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\Analytic\\ChannelAccess", - "count": 1, - "total_related": 1476, - "prevalence": 0.0006775067750677507 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\EndpointMapper\\ChannelAccess", - "count": 1, - "total_related": 1478, - "prevalence": 0.0006765899864682003 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{71a3c7fc-f751-4982-aec1-e958357e6813}\\Elements\\250000e0", - "count": 1, - "total_related": 1862, - "prevalence": 0.0005370569280343716 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\\(Default)", - "count": 1, - "total_related": 1931, - "prevalence": 0.0005178663904712584 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\CLSID\\{645FF040-5081-101B-9F08-00AA002F954E}\\DefaultIcon\\NULL", - "count": 1, - "total_related": 2760, - "prevalence": 0.00036231884057971015 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{71a3c7fc-f751-4982-aec1-e958357e6813}\\Elements\\250000e0\\Element", - "count": 1, - "total_related": 3977, - "prevalence": 0.00025144581342720644 - }, - { - "value": "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\\(Default)", - "count": 1, - "total_related": 5718, - "prevalence": 0.00017488632388947185 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{ced07d4b-3b30-11eb-833c-df431422fea5}\\Elements\\12000004", - "count": 1, - "total_related": 9117, - "prevalence": 0.00010968520346605243 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{ced07d4c-3b30-11eb-833c-df431422fea5}\\Elements\\12000004", - "count": 1, - "total_related": 10403, - "prevalence": 9.612611746611554e-05 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{a5a30fa2-3d06-4e9f-b5f4-a01df9d1fcba}\\Elements\\24000001", - "count": 1, - "total_related": 10404, - "prevalence": 9.611687812379854e-05 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{a5a30fa2-3d06-4e9f-b5f4-a01df9d1fcba}\\Elements\\25000004", - "count": 1, - "total_related": 10404, - "prevalence": 9.611687812379854e-05 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{a5a30fa2-3d06-4e9f-b5f4-a01df9d1fcba}", - "count": 1, - "total_related": 10406, - "prevalence": 9.609840476648087e-05 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{a5a30fa2-3d06-4e9f-b5f4-a01df9d1fcba}\\Description", - "count": 1, - "total_related": 10406, - "prevalence": 9.609840476648087e-05 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{a5a30fa2-3d06-4e9f-b5f4-a01df9d1fcba}\\Elements", - "count": 1, - "total_related": 10406, - "prevalence": 9.609840476648087e-05 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{9dea862c-5cdd-4e70-acc1-f32b344d4795}\\Elements\\11000001", - "count": 1, - "total_related": 10412, - "prevalence": 9.604302727621975e-05 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{9dea862c-5cdd-4e70-acc1-f32b344d4795}\\Elements\\12000002", - "count": 1, - "total_related": 10415, - "prevalence": 9.601536245799327e-05 - }, - { - "value": "HKCU\\Software\\Microsoft\\OneDrive\\Accounts\\LastUpdate", - "count": 1, - "total_related": 10446, - "prevalence": 9.573042312847023e-05 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{ced07d4b-3b30-11eb-833c-df431422fea5}\\Elements\\12000004\\Element", - "count": 1, - "total_related": 13302, - "prevalence": 7.517666516313337e-05 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Description\\FirmwareModified", - "count": 1, - "total_related": 14391, - "prevalence": 6.948787436592315e-05 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{a5a30fa2-3d06-4e9f-b5f4-a01df9d1fcba}\\Elements\\25000004\\Element", - "count": 1, - "total_related": 14875, - "prevalence": 6.722689075630252e-05 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{a5a30fa2-3d06-4e9f-b5f4-a01df9d1fcba}\\Description\\Type", - "count": 1, - "total_related": 14878, - "prevalence": 6.721333512568894e-05 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{a5a30fa2-3d06-4e9f-b5f4-a01df9d1fcba}\\Elements\\24000001\\Element", - "count": 1, - "total_related": 14878, - "prevalence": 6.721333512568894e-05 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{ced07d4c-3b30-11eb-833c-df431422fea5}\\Elements\\12000004\\Element", - "count": 1, - "total_related": 14879, - "prevalence": 6.720881779689495e-05 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{9dea862c-5cdd-4e70-acc1-f32b344d4795}\\Elements\\12000002\\Element", - "count": 1, - "total_related": 14889, - "prevalence": 6.716367788300088e-05 - }, - { - "value": "HKEY_LOCAL_MACHINE\\BCD00000000\\Objects\\{9dea862c-5cdd-4e70-acc1-f32b344d4795}\\Elements\\11000001\\Element", - "count": 1, - "total_related": 14895, - "prevalence": 6.71366230278617e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\RestartManager", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\RestartManager\\Session0000", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Explorer\\GlobalAssocChangedCounter", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\AutoDetect", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\UNCAsIntranet", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Control Panel\\Desktop\\WallpaperStyle", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\RestartManager\\Session0000\\Owner", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\RestartManager\\Session0000\\RegFiles0000", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\RestartManager\\Session0000\\RegFilesHash", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\RestartManager\\Session0000\\Sequence", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\RestartManager\\Session0000\\SessionHash", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\RestartManager\\Session0000\\Owner", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\RestartManager\\Session0000\\RegFiles0000", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\RestartManager\\Session0000\\RegFilesHash", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\RestartManager\\Session0000\\Sequence", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\RestartManager\\Session0000\\SessionHash", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "file_types": [ - { - "value": "peexe", - "count": 246 - }, - { - "value": "pedll", - "count": 13 - }, - { - "value": "rar", - "count": 2 - }, - { - "value": "msi", - "count": 1 - }, - { - "value": "gzip", - "count": 1 - } - ], - "crowdsourced_sigma_results": [ - { - "value": { - "id": "cf2984facb3af2703a88c05e420505bdaad5887f51fbf32167a0bf5abfcc28bc", - "level": "high", - "title": "Change Winevt Channel Access Permission Via Registry", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects tampering with the \"ChannelAccess\" registry key in order to change access to Windows event channel." - }, - "count": 121, - "total_related": 1486, - "prevalence": 0.08142664872139974 - }, - { - "value": { - "id": "7d0d3be8fa405f5e34c2e0cf9eaa345cacd60eb5244b50b23dc54c4785bc7512", - "level": "low", - "title": "Load Of RstrtMgr.DLL By An Uncommon Process", - "author": "Luc G\u00e9naux", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the load of RstrtMgr DLL (Restart Manager) by an uncommon process.\nThis library has been used during ransomware campaigns to kill processes that would prevent file encryption by locking them (e.g. Conti ransomware, Cactus ransomware). It has also recently been seen used by the BiBi wiper for Windows.\nIt could also be used for anti-analysis purposes by shut downing specific processes.\n" - }, - "count": 106, - "total_related": 87800, - "prevalence": 0.0012072892938496582 - }, - { - "value": { - "id": "5800379600db7e280b56236f291d8f474f097bed4c21c02367049347a8febc40", - "level": "high", - "title": "Windows Defender Service Disabled - Registry", - "author": "J\u00e1n Tren\u010dansk\u00fd, frack113, AlertIQ, Nasreddine Bencherchali", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects when an attacker or tool disables the Windows Defender service (WinDefend) via the registry" - }, - "count": 91, - "total_related": 39231, - "prevalence": 0.002319594198465499 - }, - { - "value": { - "id": "16b459cba08f0827ee9607be238b1582dfd3717c30b129b5f215736d5a3c3e1b", - "level": "low", - "title": "DNS Server Discovery Via LDAP Query", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects DNS server discovery via LDAP query requests from uncommon applications" - }, - "count": 86, - "total_related": 9498, - "prevalence": 0.009054537797431038 - }, - { - "value": { - "id": "7496876fb48565b8278bf669ff38b2846b842f9f663b755f72c105f928ae76c6", - "level": "high", - "title": "Disable Windows Event Logging Via Registry", - "author": "frack113, Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects tampering with the \"Enabled\" registry key in order to disable Windows logging of a Windows event channel" - }, - "count": 85, - "total_related": 1647, - "prevalence": 0.05160898603521554 - }, - { - "value": { - "id": "be6d29855558a0e8c404486d8f1838ce35594866f126f9c1c62a9792e9c76be2", - "level": "critical", - "title": "Delete shadow copy via WMIC", - "author": "Joe Security", - "source_url": "https://github.com/joesecurity/sigma-rules", - "source": "Joe Security Rule Set (GitHub)", - "description": "Delete shadow copy via WMIC" - }, - "count": 19, - "total_related": 17033, - "prevalence": 0.00111548171197088 - }, - { - "value": { - "id": "2da0b3cba5dc2b56e1426049598590c54a224e6d15740b9b07c108e089c84520", - "level": "high", - "title": "Boot Configuration Tampering Via Bcdedit.EXE", - "author": "E.M. Anhaus (originally from Atomic Blue Detections, Endgame), oscd.community", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the use of the bcdedit command to tamper with the boot configuration data. This technique is often times used by malware or attackers as a destructive way before launching ransomware." - }, - "count": 18, - "total_related": 5115, - "prevalence": 0.0035190615835777126 - }, - { - "value": { - "id": "ad5e4d4b939797a70a9aa742d979a4742c2cfedddd663fb1a43b2795c1e6054b", - "level": "high", - "title": "Shadow Copies Deletion Using Operating Systems Utilities", - "author": "Florian Roth (Nextron Systems), Michael Haag, Teymur Kheirkhabarov, Daniil Yugoslavskiy, oscd.community, Andreas Hunkeler (@Karneades)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Shadow Copies deletion using operating systems utilities" - }, - "count": 18, - "total_related": 20713, - "prevalence": 0.0008690194563800512 - }, - { - "value": { - "id": "d8e5c8a4902824901a6b91baa07694ac8ea9e13689cebd342572a8b546bad5bc", - "level": "high", - "title": "Disabled Windows Defender Eventlog", - "author": "Florian Roth (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the disabling of the Windows Defender eventlog as seen in relation to Lockbit 3.0 infections" - }, - "count": 17, - "total_related": 271, - "prevalence": 0.06273062730627306 - }, - { - "value": { - "id": "2219766fcc5e77936dbd9b7310a20b2ba3f5b4aac858c6ac312c81fcc2838d4a", - "level": "high", - "title": "UAC Bypass via ICMLuaUtil", - "author": "Florian Roth (Nextron Systems), Elastic (idea)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the pattern of UAC Bypass using ICMLuaUtil Elevated COM interface" - }, - "count": 15, - "total_related": 8436, - "prevalence": 0.0017780938833570413 - }, - { - "value": { - "id": "a30845acd045e920f165087e59ac6d9461f6c4bfadfa52e4c518e3bcb9d8cb0c", - "level": "high", - "title": "CMSTP UAC Bypass via COM Object Access", - "author": "Nik Seetharaman, Christian Burkard (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects UAC Bypass Attempt Using Microsoft Connection Manager Profile Installer Autoelevate-capable COM Objects (e.g. UACMe ID of 41, 43, 58 or 65)" - }, - "count": 15, - "total_related": 8998, - "prevalence": 0.0016670371193598578 - }, - { - "value": { - "id": "51a5b51db51679c45a7aea23d8e25f242e096a01ad35754b45acf5da3ec98440", - "level": "high", - "title": "Suspicious File Creation Activity From Fake Recycle.Bin Folder", - "author": "X__Junior (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects file write event from/to a fake recycle bin folder that is often used as a staging directory for malware" - }, - "count": 9, - "total_related": 20714, - "prevalence": 0.0004344887515689872 - }, - { - "value": { - "id": "de683a6054ff03b9c12e58c842648f759cfcf797f91dc01078d285e8f3f8e856", - "level": "medium", - "title": "Suspicious Copy From or To System Directory", - "author": "Florian Roth (Nextron Systems), Markus Neis, Tim Shelton (HAWK.IO), Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects a suspicious copy operation that tries to copy a program from system (System32, SysWOW64, WinSxS) directories to another on disk.\nOften used to move LOLBINs such as 'certutil' or 'desktopimgdownldr' to a different location with a different name in order to bypass detections based on locations.\n" - }, - "count": 9, - "total_related": 41838, - "prevalence": 0.00021511544528897175 - }, - { - "value": { - "id": "74ea3fde96df11352e7b3c70bce437f83f170b5677efeb447c7f33d001142691", - "level": "medium", - "title": "Access To Browser Credential Files By Uncommon Application", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects file access requests to browser credential stores by uncommon processes.\nCould indicate potential attempt of credential stealing.\nRequires heavy baselining before usage\n" - }, - "count": 7, - "total_related": 23417, - "prevalence": 0.0002989281291369518 - }, - { - "value": { - "id": "b8a9a3d755cac11238eb37aa06d27255714356075872c2e2e140acfb3e8ab8b0", - "level": "critical", - "title": "WannaCry Ransomware Activity", - "author": "Florian Roth (Nextron Systems), Tom U. @c_APT_ure (collection), oscd.community, Jonhnathan Ribeiro", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects WannaCry ransomware activity" - }, - "count": 5, - "total_related": 10518, - "prevalence": 0.0004753755466818787 - }, - { - "value": { - "id": "90a2634e64f0a02343bf17b797e3d249061fdee81d36e5dac2d8e3fe2a2df280", - "level": "high", - "title": "Suspicious Volume Shadow Copy VSS_PS.dll Load", - "author": "Markus Neis, @markus_neis", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the image load of vss_ps.dll by uncommon executables" - }, - "count": 4, - "total_related": 5048, - "prevalence": 0.000792393026941363 - }, - { - "value": { - "id": "f441bf0f20310d2f8fb4c38b047725cf9bafb59c2a7634f73d2d38745157b248", - "level": "high", - "title": "Uncommon File Created In Office Startup Folder", - "author": "frack113, Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the creation of a file with an uncommon extension in an Office application startup folder" - }, - "count": 4, - "total_related": 16165, - "prevalence": 0.00024744819053510673 - }, - { - "value": { - "id": "6f788218e57d2939e69140473d30d868ecfc490ccb3caee4be496d022d6bc807", - "level": "medium", - "title": "Amsi.DLL Loaded Via LOLBIN Process", - "author": "Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects loading of \"Amsi.dll\" by a living of the land process. This could be an indication of a \"PowerShell without PowerShell\" attack" - }, - "count": 2, - "total_related": 6486, - "prevalence": 0.0003083564600678384 - }, - { - "value": { - "id": "2e58fcf707ea25a6c7465ae2a0d4b35ff302cceb7b8fde4ac5d3467d832e005e", - "level": "high", - "title": "Suspicious Ping/Del Command Combination", - "author": "Ilya Krestinichev", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects a method often used by ransomware. Which combines the \"ping\" to wait a couple of seconds and then \"del\" to delete the file in question. Its used to hide the file responsible for the initial infection for example" - }, - "count": 2, - "total_related": 16577, - "prevalence": 0.00012064909211558183 - }, - { - "value": { - "id": "99aac26486266b4916c883cf9ec793784cff9e6617ed361b8c47f7972a4baf46", - "level": "medium", - "title": "Suspicious Msbuild Execution By Uncommon Parent Process", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects suspicious execution of 'Msbuild.exe' by a uncommon parent process" - }, - "count": 2, - "total_related": 33745, - "prevalence": 5.926803970958661e-05 - }, - { - "value": { - "id": "fb092b3aee3feb316c048a1249e1ac9639a63cac318318afd45bf38887b31b0c", - "level": "low", - "title": "WMI Module Loaded By Non Uncommon Process", - "author": "Roberto Rodriguez @Cyb3rWard0g", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects a WMI modules being loaded by an uncommon process" - }, - "count": 2, - "total_related": 90308, - "prevalence": 2.2146432209771005e-05 - }, - { - "value": { - "id": "9aae4742b47a403c0d2871d344a6076cd6b797a267bbe2d0b85e607927ef3dc9", - "level": "medium", - "title": "Windows Backup Deleted Via Wbadmin.EXE", - "author": "frack113, Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the deletion of backups or system state backups via \"wbadmin.exe\".\nThis technique is used by numerous ransomware families and actors.\nThis may only be successful on server platforms that have Windows Backup enabled.\n" - }, - "count": 1, - "total_related": 389, - "prevalence": 0.002570694087403599 - }, - { - "value": { - "id": "c4e0758476210a09a3e470db05d2cbec0aebd511e48d351685c75970566f894f", - "level": "high", - "title": "Suspicious Splwow64 Without Params", - "author": "Florian Roth (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects suspicious Splwow64.exe process without any command line parameters" - }, - "count": 1, - "total_related": 851, - "prevalence": 0.0011750881316098707 - }, - { - "value": { - "id": "667c9dcf6079fd28997e3e2b10b629c8ddbbd7bdffee1889aef6476277791e13", - "level": "critical", - "title": "LimeRAT", - "author": "Joe Security", - "source_url": "https://github.com/joesecurity/sigma-rules", - "source": "Joe Security Rule Set (GitHub)", - "description": "LimeRAT" - }, - "count": 1, - "total_related": 1025, - "prevalence": 0.000975609756097561 - }, - { - "value": { - "id": "ada08103432e4112d167b1d10f0fc02281936c8fcb181de17d5bca07755bac84", - "level": "high", - "title": "Potential Emotet Activity", - "author": "Florian Roth (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects all Emotet like process executions that are not covered by the more generic rules" - }, - "count": 1, - "total_related": 7744, - "prevalence": 0.00012913223140495868 - }, - { - "value": { - "id": "1fd2d09eff791a970cc2ad6da0820134ef9d52d4341ab32028edd04e8dd158bd", - "level": "critical", - "title": "Powershell download and execute file", - "author": "Joe Security", - "source_url": "https://github.com/joesecurity/sigma-rules", - "source": "Joe Security Rule Set (GitHub)", - "description": "powershell download file from internet and execute" - }, - "count": 1, - "total_related": 7858, - "prevalence": 0.00012725884448969204 - }, - { - "value": { - "id": "f0282b9dc90a1761ed8cfb90b52bc5f53c2c8ccbff1ca29790e8d17c7eae56dd", - "level": "high", - "title": "PowerShell DownloadFile", - "author": "Florian Roth (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the execution of powershell, a WebClient object creation and the invocation of DownloadFile in a single command line" - }, - "count": 1, - "total_related": 11681, - "prevalence": 8.56091088091773e-05 - }, - { - "value": { - "id": "f86d8f196029958699a0b36a9a1a254d7c1bfc594fd486ee04c1e4988965f3b2", - "level": "high", - "title": "Powershell Base64 Encoded MpPreference Cmdlet", - "author": "Florian Roth (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects base64 encoded \"MpPreference\" PowerShell cmdlet code that tries to modifies or tamper with Windows Defender AV" - }, - "count": 1, - "total_related": 19941, - "prevalence": 5.014793641241663e-05 - }, - { - "value": { - "id": "e75e9983c2277304aa1294c0b077a3139a8405cd1661ccf513a6c05a002acacf", - "level": "high", - "title": "Base64 Encoded PowerShell Command Detected", - "author": "Florian Roth (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects usage of the \"FromBase64String\" function in the commandline which is used to decode a base64 encoded string" - }, - "count": 1, - "total_related": 21924, - "prevalence": 4.5612114577631816e-05 - }, - { - "value": { - "id": "7b87fbdccf3c12011b709aab8b9bd4642bd61dc9880e0e1ce9ebb9901e2a3497", - "level": "medium", - "title": "Uncommon Child Process Of Conhost.EXE", - "author": "omkar72", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects uncommon \"conhost\" child processes. This could be a sign of \"conhost\" usage as a LOLBIN or potential process injection activity." - }, - "count": 1, - "total_related": 22192, - "prevalence": 4.506128334534967e-05 - }, - { - "value": { - "id": "c9f2b527fcecda6141fde1caee187052676355bc055141a8caa6c22482fca3ad", - "level": "critical", - "title": "Xmrig", - "author": "Joe Security", - "source_url": "https://github.com/joesecurity/sigma-rules", - "source": "Joe Security Rule Set (GitHub)", - "description": "Detect Xmrig" - }, - "count": 1, - "total_related": 22195, - "prevalence": 4.505519261094841e-05 - }, - { - "value": { - "id": "12273189dbbd1ed526c045fb9a7d5e45682ba4e0a13e2e94d65376962a0bfc2e", - "level": "high", - "title": "Suspicious PowerShell Encoded Command Patterns", - "author": "Florian Roth (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects PowerShell command line patterns in combincation with encoded commands that often appear in malware infection chains" - }, - "count": 1, - "total_related": 42290, - "prevalence": 2.3646252069047056e-05 - }, - { - "value": { - "id": "5d47487e23119ea582c4bd1cbba5e4550dde8d31b114da54629a3b0bb7675b80", - "level": "medium", - "title": "Potentially Suspicious WDAC Policy File Creation", - "author": "X__Junior", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects suspicious Windows Defender Application Control (WDAC) policy file creation from abnormal processes that could be abused by attacker to block EDR/AV components while allowing their own malicious code to run on the system.\n" - }, - "count": 1, - "total_related": 59378, - "prevalence": 1.684125433662299e-05 - }, - { - "value": { - "id": "24c9049c81b149aa4537cce166e36f3697878dcdad3fab8b662889d154056d7c", - "level": "medium", - "title": "PowerShell Download Pattern", - "author": "Florian Roth (Nextron Systems), oscd.community, Jonhnathan Ribeiro", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects a Powershell process that contains download commands in its command line string" - }, - "count": 1, - "total_related": 63371, - "prevalence": 1.5780088684098403e-05 - }, - { - "value": { - "id": "11ef2fbb89770dbec860f554810a4e34a33e1326589f9eaf562412ceba567f00", - "level": "critical", - "title": "Potential Dridex Activity", - "author": "Florian Roth (Nextron Systems), oscd.community, Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects potential Dridex acitvity via specific process patterns" - }, - "count": 1, - "total_related": 91663, - "prevalence": 1.0909527290182517e-05 - }, - { - "value": { - "id": "eb75f9de2201bfad4ef177dca85b0b8fa8e5a86ba2357af5301f72acbc5eb144", - "level": "medium", - "title": "Suspicious Execution of Powershell with Base64", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Commandline to launch powershell with a base64 payload" - }, - "count": 1, - "total_related": 99529, - "prevalence": 1.0047322890815743e-05 - }, - { - "value": { - "id": "77ed185ff979a8d9206b5eed07bf6d5823529f713ed0ea19f2ef7a4a355568bc", - "level": "low", - "title": "File Deletion Via Del", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects execution of the builtin \"del\"/\"erase\" commands in order to delete files.\nAdversaries may delete files left behind by the actions of their intrusion activity.\nMalware, tools, or other non-native files dropped or created on a system by an adversary may leave traces to indicate to what was done within a network and how.\nRemoval of these files can occur during an intrusion, or as part of a post-intrusion process to minimize the adversary's footprint.\n" - }, - "count": 92, - "total_related": 100000, - "prevalence": 0.00092 - }, - { - "value": { - "id": "cdd5a8ff564f3632d9613d1f4925baca8be40a01fe14c7ba3e30f51bf1ff3829", - "level": "medium", - "title": "Suspicious desktop.ini Action", - "author": "Maxime Thiebaut (@0xThiebaut), Tim Shelton (HAWK.IO)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects unusual processes accessing desktop.ini, which can be leveraged to alter how Explorer displays a folder's content (i.e. renaming files) without changing them on disk." - }, - "count": 83, - "total_related": 100000, - "prevalence": 0.00083 - }, - { - "value": { - "id": "8b5db9da5732dc549b0e8b56fe5933d7c95ed760f3ac20568ab95347ef8c5bcc", - "level": "medium", - "title": "CurrentVersion Autorun Keys Modification", - "author": "Victor Sergeev, Daniil Yugoslavskiy, Gleb Sukhodolskiy, Timur Zinniatullin, oscd.community, Tim Shelton, frack113 (split)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects modification of autostart extensibility point (ASEP) in registry." - }, - "count": 36, - "total_related": 100000, - "prevalence": 0.00036 - }, - { - "value": { - "id": "e77646c39db7fa011a5223aeb73c738046787fc7f62a99394e883d76a54341f7", - "level": "low", - "title": "CMD Shell Output Redirect", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the use of the redirection character \">\" to redicrect information in commandline" - }, - "count": 18, - "total_related": 100000, - "prevalence": 0.00018 - }, - { - "value": { - "id": "f09d5248ed8fc1a93251158bfda71f8144ccaf37fa922416ccd897498bff7c55", - "level": "medium", - "title": "Suspicious Process Creation", - "author": "Florian Roth", - "source_url": "https://sigma.socprime.com/#!/", - "source": "SOC Prime Threat Detection Marketplace", - "description": "Detects suspicious process starts on Windows systems based on keywords" - }, - "count": 15, - "total_related": 100000, - "prevalence": 0.00015 - }, - { - "value": { - "id": "b8c95f5909e68be942c69ab250a3b47557e33b2d1d582cd72e665210efeadb8f", - "level": "medium", - "title": "PowerShell Module File Created By Non-PowerShell Process", - "author": "Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the creation of a new PowerShell module \".psm1\", \".psd1\", \".dll\", \".ps1\", etc. by a non-PowerShell process" - }, - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": { - "id": "1f7f8b1e9005dd4d64cb9d30ed53ee94f68fb96262fbd72f7a0266881149c79f", - "level": "low", - "title": "Suspicious Get-WmiObject", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "The infrastructure for management data and operations that enables local and remote management of Windows personal computers and servers" - }, - "count": 8, - "total_related": 100000, - "prevalence": 8e-05 - }, - { - "value": { - "id": "5572c8188426269a10ccb41fc8e9c8445391ac38a0917621b0a1ee05ec99aac9", - "level": "medium", - "title": "Change PowerShell Policies to an Insecure Level - PowerShell", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects changing the PowerShell script execution policy to a potentially insecure level using the \"Set-ExecutionPolicy\" cmdlet." - }, - "count": 8, - "total_related": 100000, - "prevalence": 8e-05 - }, - { - "value": { - "id": "5a6c8cc8cab203cf6f2333e64a60bd47d75fb197ebae1de9ed494061e525a58c", - "level": "medium", - "title": "Potentially Suspicious Desktop Background Change Via Registry", - "author": "Nasreddine Bencherchali (Nextron Systems), Stephen Lincoln @slincoln-aiq (AttackIQ)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects registry value settings that would replace the user's desktop background.\nThis is a common technique used by malware to change the desktop background to a ransom note or other image.\n" - }, - "count": 8, - "total_related": 100000, - "prevalence": 8e-05 - }, - { - "value": { - "id": "27b72c2678411f21ba21bd10b44b7e9c45594d5a5f61f14223b81a8906675039", - "level": "high", - "title": "New RUN Key Pointing to Suspicious Folder", - "author": "Florian Roth (Nextron Systems), Markus Neis, Sander Wiebing, Swachchhanda Shrawan Poudel (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects suspicious new RUN key element pointing to an executable in a suspicious folder" - }, - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": { - "id": "25fc56c1bee673d7ff3edcf371e4d2a36c0af83222da348961b87735c8efa61f", - "level": "high", - "title": "System File Execution Location Anomaly", - "author": "Florian Roth (Nextron Systems), Patrick Bareiss, Anton Kutepov, oscd.community, Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the execution of a Windows system binary that is usually located in the system folder from an uncommon location.\n" - }, - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": { - "id": "8919a871f4a52b7af785fab44b4665ab6a3637e6ebeeac0288df8a5012a48be2", - "level": "low", - "title": "User with Privileges Logon", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects logon with \"Special groups\" and \"Special Privileges\" can be thought of as Administrator groups or privileges." - }, - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": { - "id": "3c0434c2b9b483a1c7879404c2a80556dc54436bf222a970ca7131b1f30079f1", - "level": "medium", - "title": "Use Short Name Path in Command Line", - "author": "frack113, Nasreddine Bencherchali", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detect use of the Windows 8.3 short name. Which could be used as a method to avoid command-line detection" - }, - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": { - "id": "b5386a23355681c43cfbd2f2ccfe4b16ed45324d0d7b5583487a9f302ee1e427", - "level": "low", - "title": "Creation of an Executable by an Executable", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the creation of an executable by another executable" - }, - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": { - "id": "e13498937de9343f50c1e8f315ce602aa238e37e21f3dbb15d3403c25afafe3e", - "level": "medium", - "title": "Files With System Process Name In Unsuspected Locations", - "author": "Sander Wiebing, Tim Shelton, Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the creation of an executable with a system process name in folders other than the system ones (System32, SysWOW64, etc.).\nIt is highly recommended to perform an initial baseline before using this rule in production.\n" - }, - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": { - "id": "18842e32896dd83b8aca4d5e1ac78c1f66b1d252479c0023cdd02f108c42c8cd", - "level": "medium", - "title": "Wow6432Node CurrentVersion Autorun Keys Modification", - "author": "Victor Sergeev, Daniil Yugoslavskiy, Gleb Sukhodolskiy, Timur Zinniatullin, oscd.community, Tim Shelton, frack113 (split)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects modification of autostart extensibility point (ASEP) in registry." - }, - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": { - "id": "1c2e4db94ca79f939e94e29c04fb3b71467fc6f5b9c31db34fcce5a2fb3b856f", - "level": "low", - "title": "Non Interactive PowerShell Process Spawned", - "author": "Roberto Rodriguez @Cyb3rWard0g (rule), oscd.community (improvements)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects non-interactive PowerShell activity by looking at the \"powershell\" process with a non-user GUI process such as \"explorer.exe\" as a parent." - }, - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": { - "id": "2333305c10a5e401a71aa3f6f7fdc5beb2f3131724fbb28c6c6d9e4ae27ef754", - "level": "high", - "title": "Suspicious Process Masquerading As SvcHost.EXE", - "author": "Swachchhanda Shrawan Poudel", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects a suspicious process that is masquerading as the legitimate \"svchost.exe\" by naming its binary \"svchost.exe\" and executing from an uncommon location.\nAdversaries often disguise their malicious binaries by naming them after legitimate system processes like \"svchost.exe\" to evade detection.\n" - }, - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": { - "id": "43c6ce8bdbd683e1a7f4fb9b49a3a8236621ff32e67fdf0987c5770097ef376c", - "level": "medium", - "title": "ADS Zone.Identifier Deleted By Uncommon Application", - "author": "Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the deletion of the \"Zone.Identifier\" ADS by an uncommon process. Attackers can leverage this in order to bypass security restrictions that make use of the ADS such as Microsoft Office apps." - }, - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": { - "id": "80708cad12d59acde6c91bdfbb0ed867ffd0538e97f962f2ffd72040a66ecb6b", - "level": "medium", - "title": "UAC Disabled", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects when an attacker tries to disable User Account Control (UAC) by setting the registry value \"EnableLUA\" to 0.\n" - }, - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": { - "id": "86c36bfac526414900d3b4c6f66d0b7bb2cf11a511b7ad65c486685dc8d4d05f", - "level": "medium", - "title": "Disable Internal Tools or Feature in Registry", - "author": "frack113, Nasreddine Bencherchali (Nextron Systems), CrimpSec", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects registry modifications that change features of internal Windows tools (malware like Agent Tesla uses this technique)" - }, - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": { - "id": "a0daa529834b3c5230b4524da005a6b6503e7cb061e298a8f74e0dc1fee0a008", - "level": "medium", - "title": "Uncommon Svchost Parent Process", - "author": "Florian Roth (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects an uncommon svchost parent process" - }, - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": { - "id": "afd546ea5eff265c454f77f6e7641ade6e5a791d79de155fa27d377be1581535", - "level": "low", - "title": "Windows Processes Suspicious Parent Directory", - "author": "vburov", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detect suspicious parent processes of well-known Windows processes" - }, - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": { - "id": "cf863dff3d564c975d28d336cb7981fcd6956e6fb9afbd2794f600b130e83171", - "level": "medium", - "title": "Windows Defender Exclusions Added - PowerShell", - "author": "Tim Rauch, Elastic (idea)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects modifications to the Windows Defender configuration settings using PowerShell to add exclusions" - }, - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": { - "id": "e4d5f1be0673fa786cc8379c15338af08cdd11eed433bead9e801d6204d42a2d", - "level": "medium", - "title": "Python Initiated Connection", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects a Python process initiating a network connection. While this often relates to package installation, it can also indicate a potential malicious script communicating with a C&C server." - }, - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": { - "id": "02b55b29ddf740930b68c311ca7cd59354f8c35ceda86d09a3fb06f08b760857", - "level": "critical", - "title": "Schedule system process", - "author": "Joe Security", - "source_url": "https://github.com/joesecurity/sigma-rules", - "source": "Joe Security Rule Set (GitHub)", - "description": "Schedule system process" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "0533322c5c44794b71e761cd351a2459aad6e21ae95c9543d4c9fdb3c8fde6c4", - "level": "medium", - "title": "Schedule Task Creation From Env Variable Or Potentially Suspicious Path Via Schtasks.EXE", - "author": "Florian Roth (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects Schtask creations that point to a suspicious folder or an environment variable often used by malware" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "06b48fa7870d38bdf92b4d4a9b9c4a4df779bd405fdc5ba0e70911df20027ce1", - "level": "medium", - "title": "Change PowerShell Policies to an Insecure Level", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects changing the PowerShell script execution policy to a potentially insecure level using the \"-ExecutionPolicy\" flag." - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "0752dd4f3de82ada650a6c6ed1887cc940d8f55e130fec468ce0df9b2ec4ef25", - "level": "high", - "title": "Monero Crypto Coin Mining Pool Lookup", - "author": "Florian Roth (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects suspicious DNS queries to Monero mining pools" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "0db9fba426142aca003830de31e38a7318ed0a3a299852f6bc4cbe8bc905515f", - "level": "medium", - "title": "Read Contents From Stdin Via Cmd.EXE", - "author": "frack113, Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detect the use of \"<\" to read and potentially execute a file via cmd.exe" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "2104d1ee1ce64e7aa3dbd368652a54ce160e6a5751019af14601fc8fd1df8086", - "level": "medium", - "title": "Execution of Suspicious File Type Extension", - "author": "Max Altgelt (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects whether the image specified in a process creation event doesn't refer to an \".exe\" (or other known executable extension) file. This can be caused by process ghosting or other unorthodox methods to start a process.\nThis rule might require some initial baselining to align with some third party tooling in the user environment.\n" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "33a4a18ae1a3802586c239be79075294541594b5b603c230af39618577e03fae", - "level": "high", - "title": "Audit Policy Tampering Via Auditpol", - "author": "Janantha Marasinghe (https://github.com/blueteam0ps)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Threat actors can use auditpol binary to change audit policy configuration to impair detection capability.\nThis can be carried out by selectively disabling/removing certain audit policies as well as restoring a custom policy owned by the threat actor.\n" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "3a2766a08d32a855b604a786cddc0f76fee13e6ccd22e01d4878150f0ef1eebc", - "level": "medium", - "title": "Suspicious DNS Query for IP Lookup Service APIs", - "author": "Brandon George (blog post), Thomas Patzke", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects DNS queries for IP lookup services such as \"api.ipify.org\" originating from a non browser process." - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "3bc9d14114a6b67367a24df21134d0564d6f08a0ad903d68f9b25e9d8b7f0790", - "level": "low", - "title": "Scheduled Task Creation Via Schtasks.EXE", - "author": "Florian Roth (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the creation of scheduled tasks by user accounts via the \"schtasks\" utility." - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "539dcb36e9155d97ed39c68182bde1733b86e2785cbef70586ce6a771645c425", - "level": "high", - "title": "Driver Load From A Temporary Directory", - "author": "Florian Roth (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects a driver load from a temporary directory" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "5ead81ee12f2097316af35270a1ac0f8623db054349c52ef366fc42a4b7d2de2", - "level": "critical", - "title": "Suspicious Double Extension File Execution", - "author": "Florian Roth (Nextron Systems), @blu3_team (idea), Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects suspicious use of an .exe extension after a non-executable file extension like .pdf.exe, a set of spaces or underlines to cloak the executable file in spear phishing campaigns" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "5f96c8ad390b56fba16309ec092ccde0290c7896bd2bfd7c49b738c77dc36bde", - "level": "high", - "title": "Network Communication With Crypto Mining Pool", - "author": "Florian Roth (Nextron Systems), Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects initiated network connections to crypto mining pools" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "6291f85314c7d9966be831c56d3cdfb30f42c84f599273e73dac5c95e1122abf", - "level": "medium", - "title": "Usage Of Web Request Commands And Cmdlets - ScriptBlock", - "author": "James Pemberton / @4A616D6573", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the use of various web request commands with commandline tools and Windows PowerShell cmdlets (including aliases) via PowerShell scriptblock logs" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "67ee86b34b3617ea45dec0ef09b7a71a5f44f5c010ccc9139d92f49685996f49", - "level": "low", - "title": "DMP/HDMP File Creation", - "author": "Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the creation of a file with the \".dmp\"/\".hdmp\" extension. Often created by software during a crash. Memory dumps can sometimes contain sensitive information such as credentials. It's best to determine the source of the crash." - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "71686ca6fd31ecd29454e2d39e38be5c971f96ad539e461b7d1d79b85f90182a", - "level": "high", - "title": "Service Binary in Suspicious Folder", - "author": "Florian Roth (Nextron Systems), frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detect the creation of a service with a service binary located in a suspicious directory" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "7752bbd4e940ef58081260cfa45b4ac6b149e2cecb836d79f5e61bfbdc237105", - "level": "low", - "title": "File And SubFolder Enumeration Via Dir Command", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects usage of the \"dir\" command part of Widows CMD with the \"/S\" command line flag in order to enumerate files in a specified directory and all subdirectories.\n" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "7ca43f2acf2c039e776af286dca2b5216d23967e6e8fe43dd5a5cc95f86e52e5", - "level": "low", - "title": "Modification of IE Registry Settings", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects modification of the registry settings used for Internet Explorer and other Windows components that use these settings. An attacker can abuse this registry key to add a domain to the trusted sites Zone or insert javascript for persistence" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "92acfd50d9fe4d995d6998a5346e4e031ea037d422458bb4f74555a52ffc886c", - "level": "high", - "title": "Script Interpreter Execution From Suspicious Folder", - "author": "Florian Roth (Nextron Systems), Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects a suspicious script execution in temporary folders or folders accessible by environment variables" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "96d2c399118cab5d249093badf4a85f0ef1889872b0191bdf131bcabc0994681", - "level": "high", - "title": "Suspicious Script Execution From Temp Folder", - "author": "Florian Roth (Nextron Systems), Max Altgelt (Nextron Systems), Tim Shelton", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects a suspicious script executions from temporary folder" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "c0bf6ba71da9d0f13368b0f1281354c8f9b3d491845ea5902282fece277ec655", - "level": "medium", - "title": "Use NTFS Short Name in Command Line", - "author": "frack113, Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detect use of the Windows 8.3 short name. Which could be used as a method to avoid command-line detection" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "c0cdd12b4805f2aebecbc0415332f2594acf1ae6d8d82da086eeac9a84bf0c37", - "level": "medium", - "title": "Regsvr32 DLL Execution With Uncommon Extension", - "author": "Florian Roth (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects a \"regsvr32\" execution where the DLL doesn't contain a common file extension." - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "d62173552d7fce98c24a7040b784edf35cc6650d2e68ecf2d04f40c58d58cfda", - "level": "high", - "title": "Scheduled TaskCache Change by Uncommon Program", - "author": "Syed Hasan (@syedhasan009)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Monitor the creation of a new key under 'TaskCache' when a new scheduled task is registered by a process that is not svchost.exe, which is suspicious" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "dac677b84d14788387f1c92fd6733396974f070639fca6be1bbf50df44b426cf", - "level": "medium", - "title": "PowerShell Web Download", - "author": "Florian Roth (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects suspicious ways to download files or content using PowerShell" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "e36b579d4bc4ef49ede1d82dd08ec1cba660d105c6f037d12ecf79b434617e88", - "level": "medium", - "title": "Suspicious Schtasks Schedule Type With High Privileges", - "author": "Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects scheduled task creations or modification to be run with high privileges on a suspicious schedule type" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "f92451c8957e89bb4e61e68433faeb8d7c1461c3b90d06b3403c8f3d87c728b8", - "level": "medium", - "title": "Usage Of Web Request Commands And Cmdlets", - "author": "James Pemberton / @4A616D6573, Endgame, JHasenbusch, oscd.community, Austin Songer @austinsonger", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the use of various web request commands with commandline tools and Windows PowerShell cmdlets (including aliases) via CommandLine" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "debug_codeview_guids": [ - { - "value": "4b1617f2-90a6-4430-be42-ec64df2175a0", - "count": 1, - "total_related": 74, - "prevalence": 0.013513513513513514 - }, - { - "value": "7683cbb1-e0d9-4527-9522-2487bcb04e84", - "count": 1, - "total_related": 1843, - "prevalence": 0.0005425935973955507 - }, - { - "value": "f7e3cdba-cee6-facd-3182-000d0af2efe5", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "debug_codeview_names": [ - { - "value": "C:\\b\\s\\w\\ir\\x\\w\\sdk\\out\\ReleaseX64\\dart_precompiled_runtime_product.exe.pdb", - "count": 1, - "total_related": 1291, - "prevalence": 0.000774593338497289 - }, - { - "value": "D:\\Projects\\WinRAR\\SFX\\build\\sfxrar64\\Release\\sfxrar.pdb", - "count": 1, - "total_related": 4147, - "prevalence": 0.00024113817217265494 - }, - { - "value": "wextract.pdb", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "debug_timestamps": [ - { - "value": "Tue Sep 13 23:30:57 2022", - "count": 79, - "total_related": 864, - "prevalence": 0.09143518518518519 - }, - { - "value": "Fri Sep 9 01:27:01 2022", - "count": 61, - "total_related": 671, - "prevalence": 0.09090909090909091 - }, - { - "value": "Thu Jul 14 10:29:09 2022", - "count": 12, - "total_related": 245, - "prevalence": 0.04897959183673469 - }, - { - "value": "Sat Jun 11 09:50:55 2022", - "count": 6, - "total_related": 79, - "prevalence": 0.0759493670886076 - }, - { - "value": "Mon Jun 27 14:55:54 2022", - "count": 4, - "total_related": 21, - "prevalence": 0.19047619047619047 - }, - { - "value": "Tue Sep 13 23:31:10 2022", - "count": 4, - "total_related": 39, - "prevalence": 0.10256410256410256 - }, - { - "value": "Tue Sep 13 23:31:03 2022", - "count": 3, - "total_related": 93, - "prevalence": 0.03225806451612903 - }, - { - "value": "Mon Dec 30 15:52:29 2013", - "count": 2, - "total_related": 64093, - "prevalence": 3.1204655734635605e-05 - }, - { - "value": "Thu May 29 22:50:42 2025", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Thu Sep 8 23:42:25 2022", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Sat Jun 11 09:30:22 2022", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "Sat Jun 11 09:30:30 2022", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "Fri Sep 9 01:26:27 2022", - "count": 1, - "total_related": 31, - "prevalence": 0.03225806451612903 - }, - { - "value": "Mon Jun 12 19:35:16 2023", - "count": 1, - "total_related": 74, - "prevalence": 0.013513513513513514 - }, - { - "value": "Fri Sep 9 01:27:08 2022", - "count": 1, - "total_related": 87, - "prevalence": 0.011494252873563218 - }, - { - "value": "Thu Mar 20 10:01:29 2025", - "count": 1, - "total_related": 1845, - "prevalence": 0.0005420054200542005 - }, - { - "value": "Tue May 24 22:49:06 2022", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "dropped_files_path": [ - { - "value": "C:\\Program Files\\Windows Mail\\en-US\\Restore-My-Files.txt", - "count": 2, - "total_related": 155, - "prevalence": 0.012903225806451613 - }, - { - "value": "C:\\Program Files\\WindowsPowerShell\\Modules\\Pester\\3.4.0\\Restore-My-Files.txt", - "count": 2, - "total_related": 216, - "prevalence": 0.009259259259259259 - }, - { - "value": "C:\\Program Files\\WindowsPowerShell\\Modules\\Pester\\3.4.0\\Snippets\\Restore-My-Files.txt", - "count": 2, - "total_related": 216, - "prevalence": 0.009259259259259259 - }, - { - "value": "C:\\Program Files\\WindowsPowerShell\\Modules\\Pester\\3.4.0\\en-US\\Restore-My-Files.txt", - "count": 2, - "total_related": 216, - "prevalence": 0.009259259259259259 - }, - { - "value": "C:\\Program Files\\WindowsPowerShell\\Modules\\Microsoft.PowerShell.Operation.Validation\\1.0.1\\Restore-My-Files.txt", - "count": 2, - "total_related": 217, - "prevalence": 0.009216589861751152 - }, - { - "value": "C:\\Program Files\\WindowsPowerShell\\Modules\\Microsoft.PowerShell.Operation.Validation\\1.0.1\\Test\\Modules\\Example2.Diagnostics\\1.0.1\\Restore-My-Files.txt", - "count": 2, - "total_related": 217, - "prevalence": 0.009216589861751152 - }, - { - "value": "C:\\Program Files\\WindowsPowerShell\\Modules\\PSReadline\\1.2\\Restore-My-Files.txt", - "count": 2, - "total_related": 223, - "prevalence": 0.008968609865470852 - }, - { - "value": "C:\\Program Files\\WindowsPowerShell\\Modules\\PackageManagement\\1.0.0.1\\Restore-My-Files.txt", - "count": 2, - "total_related": 225, - "prevalence": 0.008888888888888889 - }, - { - "value": "C:\\Program Files\\WindowsPowerShell\\Modules\\PowerShellGet\\1.0.0.1\\Restore-My-Files.txt", - "count": 2, - "total_related": 225, - "prevalence": 0.008888888888888889 - }, - { - "value": "C:\\Program Files\\WindowsPowerShell\\Modules\\PowerShellGet\\1.0.0.1\\en-US\\Restore-My-Files.txt", - "count": 2, - "total_related": 225, - "prevalence": 0.008888888888888889 - }, - { - "value": "C:\\Program Files\\Windows Security\\BrowserCore\\Restore-My-Files.txt", - "count": 2, - "total_related": 232, - "prevalence": 0.008620689655172414 - }, - { - "value": "C:\\Program Files\\Windows Security\\BrowserCore\\en-US\\Restore-My-Files.txt", - "count": 2, - "total_related": 232, - "prevalence": 0.008620689655172414 - }, - { - "value": "C:\\Program Files\\Windows Defender Advanced Threat Protection\\en-US\\Restore-My-Files.txt", - "count": 2, - "total_related": 233, - "prevalence": 0.008583690987124463 - }, - { - "value": "C:\\Program Files\\Windows Defender\\en-US\\Restore-My-Files.txt", - "count": 2, - "total_related": 233, - "prevalence": 0.008583690987124463 - }, - { - "value": "C:\\Program Files\\Windows Media Player\\en-US\\Restore-My-Files.txt", - "count": 2, - "total_related": 233, - "prevalence": 0.008583690987124463 - }, - { - "value": "C:\\Program Files\\Windows Photo Viewer\\en-US\\Restore-My-Files.txt", - "count": 2, - "total_related": 233, - "prevalence": 0.008583690987124463 - }, - { - "value": "C:\\Program Files\\Windows Media Player\\Media Renderer\\Restore-My-Files.txt", - "count": 2, - "total_related": 234, - "prevalence": 0.008547008547008548 - }, - { - "value": "C:\\Program Files\\Windows Media Player\\Skins\\Restore-My-Files.txt", - "count": 2, - "total_related": 234, - "prevalence": 0.008547008547008548 - }, - { - "value": "C:\\Program Files\\Windows Media Player\\Network Sharing\\Restore-My-Files.txt", - "count": 2, - "total_related": 235, - "prevalence": 0.00851063829787234 - }, - { - "value": "C:\\Users\\user\\AppData\\Local\\Adobe\\Acrobat\\DC\\SOPHIA\\Reader\\Restore-My-Files.txt", - "count": 2, - "total_related": 369, - "prevalence": 0.005420054200542005 - }, - { - "value": "C:\\Users\\user\\AppData\\Local\\Adobe\\Acrobat\\DC\\SOPHIA\\Reader\\Files\\Restore-My-Files.txt", - "count": 2, - "total_related": 371, - "prevalence": 0.005390835579514825 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\js\\app\\dev\\nls\\pl-pl\\Restore-My-Files.txt", - "count": 2, - "total_related": 380, - "prevalence": 0.005263157894736842 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\js\\app\\dev\\nls\\nl-nl\\Restore-My-Files.txt", - "count": 2, - "total_related": 384, - "prevalence": 0.005208333333333333 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\js\\app\\dev\\nls\\nb-no\\Restore-My-Files.txt", - "count": 2, - "total_related": 390, - "prevalence": 0.005128205128205128 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\js\\app\\dev\\nls\\ja-jp\\Restore-My-Files.txt", - "count": 2, - "total_related": 391, - "prevalence": 0.005115089514066497 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\js\\app\\dev\\nls\\ko-kr\\Restore-My-Files.txt", - "count": 2, - "total_related": 391, - "prevalence": 0.005115089514066497 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\js\\app\\dev\\nls\\it-it\\Restore-My-Files.txt", - "count": 2, - "total_related": 392, - "prevalence": 0.00510204081632653 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\js\\app\\dev\\nls\\hu-hu\\Restore-My-Files.txt", - "count": 2, - "total_related": 395, - "prevalence": 0.005063291139240506 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\js\\app\\dev\\nls\\hr-hr\\Restore-My-Files.txt", - "count": 2, - "total_related": 397, - "prevalence": 0.005037783375314861 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\js\\app\\dev\\nls\\fr-ma\\Restore-My-Files.txt", - "count": 2, - "total_related": 402, - "prevalence": 0.004975124378109453 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\js\\app\\dev\\nls\\fr-fr\\Restore-My-Files.txt", - "count": 2, - "total_related": 406, - "prevalence": 0.0049261083743842365 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\js\\app\\dev\\nls\\fi-fi\\Restore-My-Files.txt", - "count": 2, - "total_related": 410, - "prevalence": 0.004878048780487805 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\js\\app\\dev\\nls\\es-es\\Restore-My-Files.txt", - "count": 2, - "total_related": 411, - "prevalence": 0.004866180048661801 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\js\\app\\dev\\nls\\eu-es\\Restore-My-Files.txt", - "count": 2, - "total_related": 411, - "prevalence": 0.004866180048661801 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\js\\app\\dev\\nls\\en-il\\Restore-My-Files.txt", - "count": 2, - "total_related": 416, - "prevalence": 0.004807692307692308 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\js\\app\\dev\\nls\\en-gb\\Restore-My-Files.txt", - "count": 2, - "total_related": 419, - "prevalence": 0.00477326968973747 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\js\\app\\dev\\nls\\de-de\\Restore-My-Files.txt", - "count": 2, - "total_related": 420, - "prevalence": 0.004761904761904762 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\js\\app\\dev\\nls\\en-ae\\Restore-My-Files.txt", - "count": 2, - "total_related": 420, - "prevalence": 0.004761904761904762 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\js\\app\\dev\\nls\\ca-es\\Restore-My-Files.txt", - "count": 2, - "total_related": 424, - "prevalence": 0.0047169811320754715 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\js\\app\\dev\\nls\\cs-cz\\Restore-My-Files.txt", - "count": 2, - "total_related": 424, - "prevalence": 0.0047169811320754715 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\js\\app\\dev\\nls\\da-dk\\Restore-My-Files.txt", - "count": 2, - "total_related": 424, - "prevalence": 0.0047169811320754715 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\images\\win8-scrollbar\\themes\\dark\\Restore-My-Files.txt", - "count": 2, - "total_related": 442, - "prevalence": 0.004524886877828055 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\images\\win8-scrollbar\\Restore-My-Files.txt", - "count": 2, - "total_related": 466, - "prevalence": 0.004291845493562232 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\images\\win-scrollbar\\themes\\dark\\Restore-My-Files.txt", - "count": 2, - "total_related": 490, - "prevalence": 0.004081632653061225 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\images\\win-scrollbar\\Restore-My-Files.txt", - "count": 2, - "total_related": 505, - "prevalence": 0.0039603960396039604 - }, - { - "value": "C:\\Users\\user\\AppData\\Local\\D3DSCache\\e8010882af4f153f\\Restore-My-Files.txt", - "count": 2, - "total_related": 532, - "prevalence": 0.0037593984962406013 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\images\\themes\\dark\\Restore-My-Files.txt", - "count": 2, - "total_related": 535, - "prevalence": 0.003738317757009346 - }, - { - "value": "C:\\Users\\user\\AppData\\Local\\MicrosoftEdge\\SharedCacheContainers\\MicrosoftEdge_iecompat\\Restore-My-Files.txt", - "count": 2, - "total_related": 548, - "prevalence": 0.0036496350364963502 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\images\\hi_contrast\\Restore-My-Files.txt", - "count": 2, - "total_related": 550, - "prevalence": 0.0036363636363636364 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\images\\file_types\\themes\\dark\\Restore-My-Files.txt", - "count": 2, - "total_related": 558, - "prevalence": 0.0035842293906810036 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\images\\file_types\\hi_contrast\\Restore-My-Files.txt", - "count": 2, - "total_related": 560, - "prevalence": 0.0035714285714285713 - }, - { - "value": "C:\\Users\\user\\AppData\\Local\\D3DSCache\\ecbf0d5a3a180bb\\Restore-My-Files.txt", - "count": 2, - "total_related": 562, - "prevalence": 0.0035587188612099642 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\images\\file_types\\Restore-My-Files.txt", - "count": 2, - "total_related": 564, - "prevalence": 0.0035460992907801418 - }, - { - "value": "C:\\Users\\user\\AppData\\Local\\ConnectedDevicesPlatform\\L.user\\Restore-My-Files.txt", - "count": 2, - "total_related": 564, - "prevalence": 0.0035460992907801418 - }, - { - "value": "C:\\Users\\user\\AppData\\Local\\D3DSCache\\3534848bb9f4cb71\\Restore-My-Files.txt", - "count": 2, - "total_related": 564, - "prevalence": 0.0035460992907801418 - }, - { - "value": "C:\\Users\\user\\AppData\\Local\\ConnectedDevicesPlatform\\Restore-My-Files.txt", - "count": 2, - "total_related": 572, - "prevalence": 0.0034965034965034965 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\images\\Restore-My-Files.txt", - "count": 2, - "total_related": 581, - "prevalence": 0.0034423407917383822 - }, - { - "value": "C:\\Users\\user\\AppData\\Local\\Comms\\UnistoreDB\\Restore-My-Files.txt", - "count": 2, - "total_related": 583, - "prevalence": 0.003430531732418525 - }, - { - "value": "C:\\Users\\user\\AppData\\Local\\Adobe\\Color\\Restore-My-Files.txt", - "count": 2, - "total_related": 589, - "prevalence": 0.003395585738539898 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\static\\css\\Restore-My-Files.txt", - "count": 2, - "total_related": 590, - "prevalence": 0.003389830508474576 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\WebResources\\Resource0\\Restore-My-Files.txt", - "count": 2, - "total_related": 593, - "prevalence": 0.003372681281618887 - }, - { - "value": "C:\\Users\\user\\AppData\\Local\\Adobe\\Acrobat\\DC\\Cache\\Restore-My-Files.txt", - "count": 2, - "total_related": 598, - "prevalence": 0.0033444816053511705 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\UIThemes\\Restore-My-Files.txt", - "count": 2, - "total_related": 601, - "prevalence": 0.0033277870216306157 - }, - { - "value": "C:\\Users\\user\\AppData\\Local\\Adobe\\Acrobat\\DC\\Restore-My-Files.txt", - "count": 2, - "total_related": 603, - "prevalence": 0.003316749585406302 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\Tracker\\Restore-My-Files.txt", - "count": 2, - "total_related": 625, - "prevalence": 0.0032 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\plug_ins3d\\Restore-My-Files.txt", - "count": 2, - "total_related": 630, - "prevalence": 0.0031746031746031746 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\plug_ins\\Multimedia\\MPP\\Restore-My-Files.txt", - "count": 2, - "total_related": 630, - "prevalence": 0.0031746031746031746 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\plug_ins\\Annotations\\Stamps\\Restore-My-Files.txt", - "count": 2, - "total_related": 633, - "prevalence": 0.00315955766192733 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\plug_ins\\AcroForm\\PMP\\Restore-My-Files.txt", - "count": 2, - "total_related": 635, - "prevalence": 0.0031496062992125984 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\plug_ins\\Annotations\\Stamps\\ENU\\Restore-My-Files.txt", - "count": 2, - "total_related": 635, - "prevalence": 0.0031496062992125984 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\plug_ins\\AcroForm\\Restore-My-Files.txt", - "count": 2, - "total_related": 639, - "prevalence": 0.003129890453834116 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\plug_ins\\Restore-My-Files.txt", - "count": 2, - "total_related": 639, - "prevalence": 0.003129890453834116 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\Legal\\ENU\\Restore-My-Files.txt", - "count": 2, - "total_related": 641, - "prevalence": 0.0031201248049922 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\Browser\\WCChromeExtn\\Restore-My-Files.txt", - "count": 2, - "total_related": 642, - "prevalence": 0.003115264797507788 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\AcroCEF\\Restore-My-Files.txt", - "count": 2, - "total_related": 644, - "prevalence": 0.003105590062111801 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\AcroCEF\\locales\\Restore-My-Files.txt", - "count": 2, - "total_related": 644, - "prevalence": 0.003105590062111801 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\Locale\\en_US\\Restore-My-Files.txt", - "count": 2, - "total_related": 645, - "prevalence": 0.0031007751937984496 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\IDTemplates\\ENU\\Restore-My-Files.txt", - "count": 2, - "total_related": 646, - "prevalence": 0.0030959752321981426 - }, - { - "value": "C:\\Program Files\\Microsoft Office\\Office16\\OneNote\\Restore-My-Files.txt", - "count": 2, - "total_related": 656, - "prevalence": 0.003048780487804878 - }, - { - "value": "C:\\Program Files\\Java\\jre1.8.0_121\\lib\\security\\Restore-My-Files.txt", - "count": 2, - "total_related": 660, - "prevalence": 0.0030303030303030303 - }, - { - "value": "C:\\Program Files\\Java\\jre1.8.0_121\\lib\\management\\Restore-My-Files.txt", - "count": 2, - "total_related": 663, - "prevalence": 0.0030165912518853697 - }, - { - "value": "C:\\Program Files\\Microsoft Office\\Office16\\1033\\Restore-My-Files.txt", - "count": 2, - "total_related": 664, - "prevalence": 0.0030120481927710845 - }, - { - "value": "C:\\Program Files\\Java\\jre1.8.0_121\\lib\\jfr\\Restore-My-Files.txt", - "count": 2, - "total_related": 665, - "prevalence": 0.0030075187969924814 - }, - { - "value": "C:\\Program Files\\Java\\jre1.8.0_121\\lib\\images\\cursors\\Restore-My-Files.txt", - "count": 2, - "total_related": 667, - "prevalence": 0.0029985007496251873 - }, - { - "value": "C:\\Program Files\\Java\\jre1.8.0_121\\lib\\ext\\Restore-My-Files.txt", - "count": 2, - "total_related": 668, - "prevalence": 0.0029940119760479044 - }, - { - "value": "C:\\Program Files\\Java\\jre1.8.0_121\\lib\\Restore-My-Files.txt", - "count": 2, - "total_related": 669, - "prevalence": 0.0029895366218236174 - }, - { - "value": "C:\\Program Files\\Java\\jre1.8.0_121\\lib\\amd64\\Restore-My-Files.txt", - "count": 2, - "total_related": 669, - "prevalence": 0.0029895366218236174 - }, - { - "value": "C:\\Program Files\\Java\\jre1.8.0_121\\lib\\deploy\\Restore-My-Files.txt", - "count": 2, - "total_related": 669, - "prevalence": 0.0029895366218236174 - }, - { - "value": "C:\\Program Files\\Java\\jre1.8.0_121\\bin\\server\\Restore-My-Files.txt", - "count": 2, - "total_related": 670, - "prevalence": 0.0029850746268656717 - }, - { - "value": "C:\\Program Files\\Java\\jre1.8.0_121\\lib\\cmm\\Restore-My-Files.txt", - "count": 2, - "total_related": 670, - "prevalence": 0.0029850746268656717 - }, - { - "value": "C:\\Program Files\\Microsoft Office\\Office16\\Restore-My-Files.txt", - "count": 2, - "total_related": 680, - "prevalence": 0.0029411764705882353 - }, - { - "value": "C:\\Program Files\\Java\\jre1.8.0_121\\Restore-My-Files.txt", - "count": 2, - "total_related": 685, - "prevalence": 0.00291970802919708 - }, - { - "value": "%SAMPLEPATH%\\Restore-My-Files.txt", - "count": 2, - "total_related": 702, - "prevalence": 0.002849002849002849 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\AcroApp\\ENU\\Restore-My-Files.txt", - "count": 2, - "total_related": 709, - "prevalence": 0.0028208744710860366 - }, - { - "value": "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\Restore-My-Files.txt", - "count": 2, - "total_related": 725, - "prevalence": 0.002758620689655172 - }, - { - "value": "C:\\Recovery\\Logs\\Restore-My-Files.txt", - "count": 2, - "total_related": 766, - "prevalence": 0.0026109660574412533 - }, - { - "value": "C:\\Users\\Default\\Restore-My-Files.txt", - "count": 2, - "total_related": 831, - "prevalence": 0.0024067388688327317 - }, - { - "value": "C:\\$SysReset\\Restore-My-Files.txt", - "count": 2, - "total_related": 875, - "prevalence": 0.002285714285714286 - }, - { - "value": "C:\\$SysReset\\Logs\\Restore-My-Files.txt", - "count": 2, - "total_related": 925, - "prevalence": 0.002162162162162162 - }, - { - "value": "C:\\$SysReset\\AppxLogs\\Restore-My-Files.txt", - "count": 2, - "total_related": 929, - "prevalence": 0.002152852529601722 - } - ], - "exiftool_create_dates": [ - { - "value": "2025:04:18 08:58:36", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - } - ], - "filecondis_dhash": [ - { - "value": "00383e3e3e1d2400", - "count": 27, - "total_related": 230, - "prevalence": 0.11739130434782609 - }, - { - "value": "003c3d3e2e2f2c24", - "count": 19, - "total_related": 270, - "prevalence": 0.07037037037037037 - }, - { - "value": "7c7e3c1e0e1d1800", - "count": 15, - "total_related": 21, - "prevalence": 0.7142857142857143 - }, - { - "value": "20383e3e3e1d2400", - "count": 14, - "total_related": 81, - "prevalence": 0.1728395061728395 - }, - { - "value": "003c3d3e2e2f2c0a", - "count": 11, - "total_related": 18, - "prevalence": 0.6111111111111112 - }, - { - "value": "00343e3e3e1d2400", - "count": 9, - "total_related": 56, - "prevalence": 0.16071428571428573 - }, - { - "value": "7e7a3c1e0e1c1800", - "count": 7, - "total_related": 60, - "prevalence": 0.11666666666666667 - }, - { - "value": "00303e3e3e1d2400", - "count": 7, - "total_related": 98, - "prevalence": 0.07142857142857142 - }, - { - "value": "003c3e3e3e1d2400", - "count": 6, - "total_related": 52, - "prevalence": 0.11538461538461539 - }, - { - "value": "00383e3e3e1d3400", - "count": 6, - "total_related": 55, - "prevalence": 0.10909090909090909 - }, - { - "value": "003a3e3e3e1d2400", - "count": 5, - "total_related": 40, - "prevalence": 0.125 - }, - { - "value": "003a3c3e3e1d2400", - "count": 5, - "total_related": 47, - "prevalence": 0.10638297872340426 - }, - { - "value": "20343e3e3e1d3400", - "count": 4, - "total_related": 5, - "prevalence": 0.8 - }, - { - "value": "20363c3e3e1d2400", - "count": 4, - "total_related": 8, - "prevalence": 0.5 - }, - { - "value": "20343e3e3e1d2400", - "count": 4, - "total_related": 22, - "prevalence": 0.18181818181818182 - }, - { - "value": "10383e3e3e1d2400", - "count": 3, - "total_related": 7, - "prevalence": 0.42857142857142855 - }, - { - "value": "00303e3e3e1d1c04", - "count": 3, - "total_related": 8, - "prevalence": 0.375 - }, - { - "value": "003c3e3c3d3a2400", - "count": 3, - "total_related": 9, - "prevalence": 0.3333333333333333 - }, - { - "value": "203a3c3e3e1d3400", - "count": 3, - "total_related": 13, - "prevalence": 0.23076923076923078 - }, - { - "value": "203a3e3e3e1d2400", - "count": 3, - "total_related": 15, - "prevalence": 0.2 - }, - { - "value": "20303e3e3e1d2400", - "count": 3, - "total_related": 18, - "prevalence": 0.16666666666666666 - }, - { - "value": "20383e3e3e1d3400", - "count": 3, - "total_related": 25, - "prevalence": 0.12 - }, - { - "value": "00303e3e3e1d1400", - "count": 3, - "total_related": 58, - "prevalence": 0.05172413793103448 - }, - { - "value": "00383e3e3e1d1400", - "count": 3, - "total_related": 161, - "prevalence": 0.018633540372670808 - }, - { - "value": "00383e3f1c1d1a04", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "40303e3e3e1d2400", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "10303e3e3e1d2400", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "10363e3e3e1d2400", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "7e7e3c1e0e1c1800", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "00383e3c3d3a2400", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "003c3d3e2e272c22", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "20323c3e3e1d2400", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "00323e3e3e1d2400", - "count": 2, - "total_related": 12, - "prevalence": 0.16666666666666666 - }, - { - "value": "003a3c3e3e1d3400", - "count": 2, - "total_related": 12, - "prevalence": 0.16666666666666666 - }, - { - "value": "003c3e1e0c372400", - "count": 2, - "total_related": 13, - "prevalence": 0.15384615384615385 - }, - { - "value": "203a3c3e3e1d2400", - "count": 2, - "total_related": 15, - "prevalence": 0.13333333333333333 - }, - { - "value": "00383e3e3c1d3400", - "count": 2, - "total_related": 17, - "prevalence": 0.11764705882352941 - }, - { - "value": "00003c1e1c1f0e00", - "count": 2, - "total_related": 1378, - "prevalence": 0.001451378809869376 - }, - { - "value": "20303c3e3c1d3400", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "20343e3e3c1d1400", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "20363c3e3e1d2c00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "20383e3e3c1d3600", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "203a3e3ebe1d2400", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "203e3c3e3e1d2400", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "30383e3c3c3d3400", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "403a3c3e3e1d2400", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "7a7e3c1c1e9d4800", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "00323e3e1e1d2c00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "00343c3e3c1d2400", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "003c3d3e2e270c22", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "003c3d3e2e2f2c22", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "04383e3e3e1d2c00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "10303e3e3e1d2c00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "28343e3e3e1d2400", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "40343e3e3e1d2c00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "407c3e1c0e0d4404", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "00323e3e3e1d3400", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "10343e3e3e1d2400", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "303c3e3e3c1d1400", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "7e7e3c1e0e355800", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "003c3e3e3c1d1400", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "20343e3c3c1d1400", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "203c3e3e3c1d3400", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "203c3e3e3e3d0c00", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "303c3e3e3c1d3400", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "20383e3e3c1d1400", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "203a3e3e3e3d2400", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "203c3e3e3e1d2c00", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "303c3e3c3c1d1400", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "003c3e3e3e1d2c00", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "003c3e3e3e1d3400", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "203a3e3e3e1d2c00", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "203c3e3c3d3a2400", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "00343e3e3e1d3400", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "003c3c3e3c2d0400", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "00383c3e3c2d2400", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "00323c3e3e1d2400", - "count": 1, - "total_related": 17, - "prevalence": 0.058823529411764705 - }, - { - "value": "00383e3e3e3d1c00", - "count": 1, - "total_related": 20, - "prevalence": 0.05 - }, - { - "value": "20383e3e3e1d2c00", - "count": 1, - "total_related": 24, - "prevalence": 0.041666666666666664 - }, - { - "value": "203c3e3e3e1d2400", - "count": 1, - "total_related": 35, - "prevalence": 0.02857142857142857 - }, - { - "value": "00101e1e1e1f1408", - "count": 1, - "total_related": 43, - "prevalence": 0.023255813953488372 - }, - { - "value": "00003c1e0e261300", - "count": 1, - "total_related": 125, - "prevalence": 0.008 - }, - { - "value": "00343c3e3d340800", - "count": 1, - "total_related": 186, - "prevalence": 0.005376344086021506 - }, - { - "value": "00001e1e1e1f1408", - "count": 1, - "total_related": 212, - "prevalence": 0.0047169811320754715 - }, - { - "value": "003c3c3c3d3c0800", - "count": 1, - "total_related": 295, - "prevalence": 0.003389830508474576 - }, - { - "value": "000000000f0e0d0a", - "count": 1, - "total_related": 1353, - "prevalence": 0.0007390983000739098 - }, - { - "value": "000000000f07070a", - "count": 1, - "total_related": 1734, - "prevalence": 0.0005767012687427913 - }, - { - "value": "0000001c1d1e0800", - "count": 1, - "total_related": 2659, - "prevalence": 0.000376081233546446 - }, - { - "value": "0000101e1e1e1d00", - "count": 1, - "total_related": 3067, - "prevalence": 0.00032605151613955004 - }, - { - "value": "0000000c0e0e0904", - "count": 1, - "total_related": 3715, - "prevalence": 0.00026917900403768504 - }, - { - "value": "0000101e1e1e1500", - "count": 1, - "total_related": 5671, - "prevalence": 0.00017633574325515782 - }, - { - "value": "0000000e0e0f0e04", - "count": 1, - "total_related": 6194, - "prevalence": 0.00016144656118824668 - }, - { - "value": "0000001c1c090000", - "count": 1, - "total_related": 20970, - "prevalence": 4.768717215069146e-05 - }, - { - "value": "000000000e0e0d00", - "count": 1, - "total_related": 37916, - "prevalence": 2.637409009389176e-05 - }, - { - "value": "0000000003030302", - "count": 1, - "total_related": 74285, - "prevalence": 1.346166790065289e-05 - }, - { - "value": "0000000000070706", - "count": 1, - "total_related": 89112, - "prevalence": 1.1221833198671336e-05 - }, - { - "value": "0000000000000000", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "000000000c0d0400", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "000000000e0f0600", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "0000001c0e0d0c00", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "netassembly_mvid": [ - { - "value": "369bed14-2d1e-4092-8659-3aa80f8caaa6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - } - ], - "office_application_names": [ - { - "value": "dwadw", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - } - ], - "office_creation_datetimes": [ - { - "value": "2025-04-18 08:58:36", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - } - ], - "office_last_saved": [ - { - "value": "2025-04-18 08:58:36", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - } - ], - "pe_info_imports": [ - { - "value": "KERNEL32.dll", - "count": 205, - "total_related": 100000, - "prevalence": 0.00205 - }, - { - "value": "USER32.dll", - "count": 180, - "total_related": 100000, - "prevalence": 0.0018 - }, - { - "value": "gdi32.dll", - "count": 156, - "total_related": 100000, - "prevalence": 0.00156 - }, - { - "value": "ADVAPI32.dll", - "count": 50, - "total_related": 100000, - "prevalence": 0.0005 - }, - { - "value": "ole32.dll", - "count": 48, - "total_related": 100000, - "prevalence": 0.00048 - }, - { - "value": "SHLWAPI.dll", - "count": 46, - "total_related": 100000, - "prevalence": 0.00046 - }, - { - "value": "SHELL32.dll", - "count": 28, - "total_related": 100000, - "prevalence": 0.00028 - }, - { - "value": "IPHLPAPI.DLL", - "count": 27, - "total_related": 100000, - "prevalence": 0.00027 - }, - { - "value": "msvcrt.dll", - "count": 27, - "total_related": 100000, - "prevalence": 0.00027 - }, - { - "value": "MPR.dll", - "count": 26, - "total_related": 100000, - "prevalence": 0.00026 - }, - { - "value": "CRYPT32.dll", - "count": 25, - "total_related": 100000, - "prevalence": 0.00025 - }, - { - "value": "WS2_32.dll", - "count": 25, - "total_related": 100000, - "prevalence": 0.00025 - }, - { - "value": "gdiplus.dll", - "count": 25, - "total_related": 100000, - "prevalence": 0.00025 - }, - { - "value": "NETAPI32.dll", - "count": 24, - "total_related": 100000, - "prevalence": 0.00024 - }, - { - "value": "ntdll.dll", - "count": 24, - "total_related": 100000, - "prevalence": 0.00024 - }, - { - "value": "ACTIVEDS.dll", - "count": 21, - "total_related": 100000, - "prevalence": 0.00021 - }, - { - "value": "kernel32.dll", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "shell32.dll", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "KERNEL32.DLL", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "PSAPI.DLL", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "advapi32.dll", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "oleaut32.dll", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "user32.dll", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "COMCTL32.dll", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "GDI32.dll", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "OLEAUT32.dll", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "VERSION.dll", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "COMDLG32.dll", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "USER32.DLL", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "USERENV.dll", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "UxTheme.dll", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "WININET.dll", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "WINMM.dll", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "WSOCK32.dll", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "WTSAPI32.dll", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "Cabinet.dll", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "RPCRT4.dll", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "bcrypt.dll", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "dbghelp.dll", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "mscoree.dll", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "pe_info_exports": [ - { - "value": "gdll", - "count": 5, - "total_related": 233, - "prevalence": 0.02145922746781116 - }, - { - "value": "sdll", - "count": 5, - "total_related": 234, - "prevalence": 0.021367521367521368 - }, - { - "value": "wdll", - "count": 5, - "total_related": 234, - "prevalence": 0.021367521367521368 - }, - { - "value": "pmod", - "count": 5, - "total_related": 236, - "prevalence": 0.0211864406779661 - }, - { - "value": "gdel", - "count": 5, - "total_related": 238, - "prevalence": 0.02100840336134454 - }, - { - "value": "gmod", - "count": 5, - "total_related": 296, - "prevalence": 0.016891891891891893 - }, - { - "value": "del", - "count": 5, - "total_related": 475, - "prevalence": 0.010526315789473684 - }, - { - "value": "?loader_main_thunk@@YAHXZ", - "count": 2, - "total_related": 519, - "prevalence": 0.0038535645472061657 - }, - { - "value": "Dart_DebugNameToCString", - "count": 1, - "total_related": 1651, - "prevalence": 0.0006056935190793458 - }, - { - "value": "Dart_DisableHeapSampling", - "count": 1, - "total_related": 1932, - "prevalence": 0.0005175983436853002 - }, - { - "value": "Dart_EnableHeapSampling", - "count": 1, - "total_related": 1932, - "prevalence": 0.0005175983436853002 - }, - { - "value": "Dart_CurrentIsolateGroupId", - "count": 1, - "total_related": 2274, - "prevalence": 0.00043975373790677223 - }, - { - "value": "Dart_GetCurrentUserTag", - "count": 1, - "total_related": 2975, - "prevalence": 0.0003361344537815126 - }, - { - "value": "Dart_GetDefaultUserTag", - "count": 1, - "total_related": 2975, - "prevalence": 0.0003361344537815126 - }, - { - "value": "Dart_GetUserTagLabel", - "count": 1, - "total_related": 2975, - "prevalence": 0.0003361344537815126 - }, - { - "value": "Dart_CreateIsolateInGroup", - "count": 1, - "total_related": 3395, - "prevalence": 0.0002945508100147275 - }, - { - "value": "Dart_DeleteFinalizableHandle", - "count": 1, - "total_related": 3582, - "prevalence": 0.00027917364600781687 - }, - { - "value": "Dart_CreateAppAOTSnapshotAsAssemblies", - "count": 1, - "total_related": 3583, - "prevalence": 0.00027909572983533354 - }, - { - "value": "Dart_CreateAppAOTSnapshotAsElfs", - "count": 1, - "total_related": 3583, - "prevalence": 0.00027909572983533354 - }, - { - "value": "Dart_DeferredLoadComplete", - "count": 1, - "total_related": 3583, - "prevalence": 0.00027909572983533354 - }, - { - "value": "Dart_DeferredLoadCompleteError", - "count": 1, - "total_related": 3583, - "prevalence": 0.00027909572983533354 - }, - { - "value": "Dart_DetectNullSafety", - "count": 1, - "total_related": 3613, - "prevalence": 0.0002767783005812344 - }, - { - "value": "Dart_CurrentIsolateGroup", - "count": 1, - "total_related": 3663, - "prevalence": 0.000273000273000273 - }, - { - "value": "Dart_GetNonNullableType", - "count": 1, - "total_related": 3667, - "prevalence": 0.0002727024815925825 - }, - { - "value": "Dart_GetNullableType", - "count": 1, - "total_related": 3667, - "prevalence": 0.0002727024815925825 - }, - { - "value": "Dart_CreateIsolateGroup", - "count": 1, - "total_related": 3768, - "prevalence": 0.0002653927813163482 - }, - { - "value": "Dart_CreateIsolateGroupFromKernel", - "count": 1, - "total_related": 3768, - "prevalence": 0.0002653927813163482 - }, - { - "value": "Dart_CurrentIsolateGroupData", - "count": 1, - "total_related": 3768, - "prevalence": 0.0002653927813163482 - }, - { - "value": "Dart_GetNativeIsolateGroupData", - "count": 1, - "total_related": 3768, - "prevalence": 0.0002653927813163482 - }, - { - "value": "Dart_ExecuteInternalCommand", - "count": 1, - "total_related": 3790, - "prevalence": 0.0002638522427440633 - }, - { - "value": "Dart_CreateAppAOTSnapshotAsElf", - "count": 1, - "total_related": 3794, - "prevalence": 0.0002635740643120717 - }, - { - "value": "Dart_FinalizeAllClasses", - "count": 1, - "total_related": 3794, - "prevalence": 0.0002635740643120717 - }, - { - "value": "Dart_AddSymbols", - "count": 1, - "total_related": 3818, - "prevalence": 0.00026191723415400735 - }, - { - "value": "Dart_CreateCoreJITSnapshotAsBlobs", - "count": 1, - "total_related": 4463, - "prevalence": 0.00022406453058480843 - }, - { - "value": "Dart_DefaultCanonicalizeUrl", - "count": 1, - "total_related": 4772, - "prevalence": 0.00020955574182732607 - }, - { - "value": "Dart_ClassLibrary", - "count": 1, - "total_related": 5095, - "prevalence": 0.00019627085377821394 - }, - { - "value": "Dart_GetStaticMethodClosure", - "count": 1, - "total_related": 5095, - "prevalence": 0.00019627085377821394 - }, - { - "value": "Dart_ClassName", - "count": 1, - "total_related": 5106, - "prevalence": 0.00019584802193497845 - }, - { - "value": "Dart_CompileToKernel", - "count": 1, - "total_related": 5134, - "prevalence": 0.00019477989871445267 - }, - { - "value": "Dart_ClosureFunction", - "count": 1, - "total_related": 5155, - "prevalence": 0.00019398642095053346 - }, - { - "value": "Dart_FunctionIsStatic", - "count": 1, - "total_related": 5155, - "prevalence": 0.00019398642095053346 - }, - { - "value": "Dart_FunctionName", - "count": 1, - "total_related": 5155, - "prevalence": 0.00019398642095053346 - }, - { - "value": "Dart_FunctionOwner", - "count": 1, - "total_related": 5155, - "prevalence": 0.00019398642095053346 - }, - { - "value": "Dart_GetObfuscationMap", - "count": 1, - "total_related": 5172, - "prevalence": 0.00019334880123743234 - }, - { - "value": "Dart_CreateVMAOTSnapshotAsAssembly", - "count": 1, - "total_related": 5173, - "prevalence": 0.00019331142470520006 - }, - { - "value": "Dart_CreateAppAOTSnapshotAsAssembly", - "count": 1, - "total_related": 5197, - "prevalence": 0.00019241870309794111 - }, - { - "value": "Dart_CreateAppJITSnapshotAsBlobs", - "count": 1, - "total_related": 5197, - "prevalence": 0.00019241870309794111 - }, - { - "value": "Dart_ErrorGetStackTrace", - "count": 1, - "total_related": 5197, - "prevalence": 0.00019241870309794111 - }, - { - "value": "Dart_DumpNativeStackTrace", - "count": 1, - "total_related": 5203, - "prevalence": 0.00019219680953296174 - }, - { - "value": "Dart_GetLoadedLibraries", - "count": 1, - "total_related": 5203, - "prevalence": 0.00019219680953296174 - }, - { - "value": "Dart_GetNativeResolver", - "count": 1, - "total_related": 5203, - "prevalence": 0.00019219680953296174 - }, - { - "value": "Dart_GetNativeSymbol", - "count": 1, - "total_related": 5203, - "prevalence": 0.00019219680953296174 - }, - { - "value": "Dart_GetStickyError", - "count": 1, - "total_related": 5204, - "prevalence": 0.0001921598770176787 - }, - { - "value": "Dart_GetMessageNotifyCallback", - "count": 1, - "total_related": 5244, - "prevalence": 0.00019069412662090009 - }, - { - "value": "Dart_GetDataFromByteBuffer", - "count": 1, - "total_related": 5356, - "prevalence": 0.00018670649738610905 - }, - { - "value": "Dart_AllocateWithNativeFields", - "count": 1, - "total_related": 5358, - "prevalence": 0.0001866368047779022 - }, - { - "value": "Dart_FinalizeLoading", - "count": 1, - "total_related": 5358, - "prevalence": 0.0001866368047779022 - }, - { - "value": "Dart_EmptyString", - "count": 1, - "total_related": 5368, - "prevalence": 0.00018628912071535022 - }, - { - "value": "Dart_GetNativeArguments", - "count": 1, - "total_related": 5369, - "prevalence": 0.00018625442354255913 - }, - { - "value": "Dart_GetNativeFieldsOfArgument", - "count": 1, - "total_related": 5380, - "prevalence": 0.0001858736059479554 - }, - { - "value": "Dart_HandleServiceMessages", - "count": 1, - "total_related": 5386, - "prevalence": 0.0001856665428889714 - }, - { - "value": "Dart_Cleanup", - "count": 1, - "total_related": 5395, - "prevalence": 0.00018535681186283596 - }, - { - "value": "Dart_GetNativeBooleanArgument", - "count": 1, - "total_related": 5396, - "prevalence": 0.00018532246108228317 - }, - { - "value": "Dart_GetNativeDoubleArgument", - "count": 1, - "total_related": 5396, - "prevalence": 0.00018532246108228317 - }, - { - "value": "Dart_GetNativeIntegerArgument", - "count": 1, - "total_related": 5396, - "prevalence": 0.00018532246108228317 - }, - { - "value": "Dart_GetNativeStringArgument", - "count": 1, - "total_related": 5396, - "prevalence": 0.00018532246108228317 - }, - { - "value": "Dart_GetNativeReceiver", - "count": 1, - "total_related": 5398, - "prevalence": 0.0001852537977028529 - }, - { - "value": "Dart_Allocate", - "count": 1, - "total_related": 5400, - "prevalence": 0.00018518518518518518 - }, - { - "value": "Dart_CloseNativePort", - "count": 1, - "total_related": 5400, - "prevalence": 0.00018518518518518518 - }, - { - "value": "Dart_DeleteWeakPersistentHandle", - "count": 1, - "total_related": 5400, - "prevalence": 0.00018518518518518518 - }, - { - "value": "Dart_GetType", - "count": 1, - "total_related": 5400, - "prevalence": 0.00018518518518518518 - }, - { - "value": "Dart_HandleFromPersistent", - "count": 1, - "total_related": 5400, - "prevalence": 0.00018518518518518518 - }, - { - "value": "Dart_HandleFromWeakPersistent", - "count": 1, - "total_related": 5400, - "prevalence": 0.00018518518518518518 - }, - { - "value": "Dart_CompileAll", - "count": 1, - "total_related": 5401, - "prevalence": 0.00018515089798185522 - }, - { - "value": "Dart_GetTypeOfExternalTypedData", - "count": 1, - "total_related": 5404, - "prevalence": 0.0001850481125092524 - }, - { - "value": "Dart_GetTypeOfTypedData", - "count": 1, - "total_related": 5404, - "prevalence": 0.0001850481125092524 - }, - { - "value": "Dart_CurrentIsolateData", - "count": 1, - "total_related": 5410, - "prevalence": 0.00018484288354898336 - }, - { - "value": "Dart_DebugName", - "count": 1, - "total_related": 5410, - "prevalence": 0.00018484288354898336 - }, - { - "value": "Dart_ErrorGetException", - "count": 1, - "total_related": 5410, - "prevalence": 0.00018484288354898336 - }, - { - "value": "Dart_ErrorHasException", - "count": 1, - "total_related": 5410, - "prevalence": 0.00018484288354898336 - }, - { - "value": "Dart_False", - "count": 1, - "total_related": 5410, - "prevalence": 0.00018484288354898336 - }, - { - "value": "Dart_GetError", - "count": 1, - "total_related": 5410, - "prevalence": 0.00018484288354898336 - }, - { - "value": "Dart_GetField", - "count": 1, - "total_related": 5410, - "prevalence": 0.00018484288354898336 - }, - { - "value": "Dart_GetMainPortId", - "count": 1, - "total_related": 5410, - "prevalence": 0.00018484288354898336 - }, - { - "value": "Dart_GetNativeArgumentCount", - "count": 1, - "total_related": 5410, - "prevalence": 0.00018484288354898336 - }, - { - "value": "Dart_GetNativeInstanceFieldCount", - "count": 1, - "total_related": 5410, - "prevalence": 0.00018484288354898336 - }, - { - "value": "Dart_GetPeer", - "count": 1, - "total_related": 5410, - "prevalence": 0.00018484288354898336 - }, - { - "value": "Dart_HandleMessage", - "count": 1, - "total_related": 5410, - "prevalence": 0.00018484288354898336 - }, - { - "value": "Dart_BooleanValue", - "count": 1, - "total_related": 5411, - "prevalence": 0.00018480872297172427 - }, - { - "value": "Dart_CreateSnapshot", - "count": 1, - "total_related": 5411, - "prevalence": 0.00018480872297172427 - }, - { - "value": "Dart_CurrentIsolate", - "count": 1, - "total_related": 5411, - "prevalence": 0.00018480872297172427 - }, - { - "value": "Dart_DeletePersistentHandle", - "count": 1, - "total_related": 5411, - "prevalence": 0.00018480872297172427 - }, - { - "value": "Dart_DoubleValue", - "count": 1, - "total_related": 5411, - "prevalence": 0.00018480872297172427 - }, - { - "value": "Dart_EnterIsolate", - "count": 1, - "total_related": 5411, - "prevalence": 0.00018480872297172427 - }, - { - "value": "Dart_EnterScope", - "count": 1, - "total_related": 5411, - "prevalence": 0.00018480872297172427 - }, - { - "value": "Dart_ExitIsolate", - "count": 1, - "total_related": 5411, - "prevalence": 0.00018480872297172427 - }, - { - "value": "Dart_ExitScope", - "count": 1, - "total_related": 5411, - "prevalence": 0.00018480872297172427 - }, - { - "value": "Dart_GetClass", - "count": 1, - "total_related": 5411, - "prevalence": 0.00018480872297172427 - }, - { - "value": "Dart_GetNativeArgument", - "count": 1, - "total_related": 5411, - "prevalence": 0.00018480872297172427 - }, - { - "value": "Dart_GetNativeInstanceField", - "count": 1, - "total_related": 5411, - "prevalence": 0.00018480872297172427 - } - ], - "pe_info_section_md5": [ - { - "value": "68a4352eca889669f544bd64baa3f961", - "count": 55, - "total_related": 711, - "prevalence": 0.07735583684950774 - }, - { - "value": "9264ea7f335858b063b39397d3c51d14", - "count": 54, - "total_related": 846, - "prevalence": 0.06382978723404255 - }, - { - "value": "57ad8095d0d1b2e0663fbd3ef4405410", - "count": 53, - "total_related": 707, - "prevalence": 0.07496463932107496 - }, - { - "value": "0adcc204eb91a7bbe4f95e6c65202fe1", - "count": 53, - "total_related": 708, - "prevalence": 0.0748587570621469 - }, - { - "value": "3f87e4c23650dfad0bee7da98889ba94", - "count": 50, - "total_related": 482, - "prevalence": 0.1037344398340249 - }, - { - "value": "6f4cd57381bb5584c0a0755384d25180", - "count": 50, - "total_related": 534, - "prevalence": 0.09363295880149813 - }, - { - "value": "cfbda2c44e51b3b0b00bcbbc767c62a2", - "count": 50, - "total_related": 535, - "prevalence": 0.09345794392523364 - }, - { - "value": "bd829aa493ecd52fe5bec776d207f206", - "count": 49, - "total_related": 658, - "prevalence": 0.07446808510638298 - }, - { - "value": "964ef105d227bac747b79bba46b0f797", - "count": 16, - "total_related": 394, - "prevalence": 0.04060913705583756 - }, - { - "value": "dac0cb8eb9636c88fb016f39652232df", - "count": 15, - "total_related": 427, - "prevalence": 0.0351288056206089 - }, - { - "value": "5f33d2e9a87eaf7f522f498235279554", - "count": 11, - "total_related": 20, - "prevalence": 0.55 - }, - { - "value": "7debe16e25bfd1a9ef4cff4e728caf75", - "count": 11, - "total_related": 20, - "prevalence": 0.55 - }, - { - "value": "cf51fe8e7514a1e9d89a22b4d37f111d", - "count": 9, - "total_related": 189, - "prevalence": 0.047619047619047616 - }, - { - "value": "a7a670174407de807cff37c5e7fb202e", - "count": 9, - "total_related": 195, - "prevalence": 0.046153846153846156 - }, - { - "value": "d68bc6bdc1e23b22003fd59f18bf4eb3", - "count": 9, - "total_related": 196, - "prevalence": 0.04591836734693878 - }, - { - "value": "268416740728623556ea3770633003b0", - "count": 9, - "total_related": 232, - "prevalence": 0.03879310344827586 - }, - { - "value": "41b4a8ff28dfc1e35d11fda0c3b7161c", - "count": 8, - "total_related": 113, - "prevalence": 0.07079646017699115 - }, - { - "value": "d282ab13a7ed038291ebcb361830096c", - "count": 8, - "total_related": 116, - "prevalence": 0.06896551724137931 - }, - { - "value": "8e1a301fc1c12724bb7b06a226f6ee0b", - "count": 7, - "total_related": 23, - "prevalence": 0.30434782608695654 - }, - { - "value": "0498258b0cc68156e1295f5d17bb63e6", - "count": 5, - "total_related": 19, - "prevalence": 0.2631578947368421 - }, - { - "value": "0c81cdea9bab9728890129f0621fc2b2", - "count": 4, - "total_related": 9, - "prevalence": 0.4444444444444444 - }, - { - "value": "77f1d0aea9e9462b32efcd4d44dfc4c0", - "count": 4, - "total_related": 63, - "prevalence": 0.06349206349206349 - }, - { - "value": "20ecbfcc87e53c78ea8ce9c0dd66c6bc", - "count": 4, - "total_related": 66, - "prevalence": 0.06060606060606061 - }, - { - "value": "d1fc67767f0df03587cc49406db85585", - "count": 4, - "total_related": 66, - "prevalence": 0.06060606060606061 - }, - { - "value": "9ca82a61ff7ef48f91aac3b0abfa7802", - "count": 4, - "total_related": 74, - "prevalence": 0.05405405405405406 - }, - { - "value": "eefc3e4440d655ddd8270a0db5a1af79", - "count": 3, - "total_related": 8, - "prevalence": 0.375 - }, - { - "value": "69ce49de89357d50159262cb1e3f509c", - "count": 3, - "total_related": 38, - "prevalence": 0.07894736842105263 - }, - { - "value": "9580c791df2e6fb2d69380d24bfa7a42", - "count": 3, - "total_related": 39, - "prevalence": 0.07692307692307693 - }, - { - "value": "49d290bb6d3a8651b266c5b81e78c897", - "count": 3, - "total_related": 40, - "prevalence": 0.075 - }, - { - "value": "41e8d37aba913cbb8d5383de16a48bde", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "7f63086beb030a42ebc18fbd907169ef", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "a026f0b50c7882f4a48c324ed64475cc", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "46c5a02392d55292c5043c96a54afe19", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "651d4567cb245caf34b275b63b23734e", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "e946d8dcc8811cf697278f6c4b9dc82e", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "370771393d9be8cc5aeda2f0977dc086", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "c7ab4010eca46760327ff8b8c51e8d98", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "ad451f79ecc1306c6969af4094c3b6b9", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "8dbdc0b2e8a4a892cedac675d0eae9a5", - "count": 2, - "total_related": 8, - "prevalence": 0.25 - }, - { - "value": "c26796ef91203c2b098509ae6344707b", - "count": 2, - "total_related": 8, - "prevalence": 0.25 - }, - { - "value": "a0eb002be6b2a4898173cba3ccb71dde", - "count": 2, - "total_related": 17, - "prevalence": 0.11764705882352941 - }, - { - "value": "dd0955a2f9ce023b0f38d8364083634a", - "count": 2, - "total_related": 40, - "prevalence": 0.05 - }, - { - "value": "331d3773bf65049a3d59a6e22111815f", - "count": 2, - "total_related": 41, - "prevalence": 0.04878048780487805 - }, - { - "value": "25daf073d97d73bb80d8914fdbc28e1a", - "count": 2, - "total_related": 43, - "prevalence": 0.046511627906976744 - }, - { - "value": "eb51a9196a386b2a314f42f823a6affd", - "count": 2, - "total_related": 92, - "prevalence": 0.021739130434782608 - }, - { - "value": "139347318238917ee7161d3ea45501fe", - "count": 2, - "total_related": 466, - "prevalence": 0.004291845493562232 - }, - { - "value": "576c856afaad699ad9fe099fc6a9ce33", - "count": 2, - "total_related": 41885, - "prevalence": 4.774979109466396e-05 - }, - { - "value": "e6d2e204147f7cdc3055011093632f54", - "count": 2, - "total_related": 42728, - "prevalence": 4.680771391125258e-05 - }, - { - "value": "c2f6ddaeef894b7510c3be928eeae5dd", - "count": 2, - "total_related": 43066, - "prevalence": 4.6440347373798355e-05 - }, - { - "value": "74af66fa540568c59b3868e78900e476", - "count": 2, - "total_related": 43775, - "prevalence": 4.568817818389492e-05 - }, - { - "value": "03850a9595f233378735126eef3faf46", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0438bdcc924d3e587ed32480d69abf1a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "05ffb085f1fd084c5e4098ffd21561f5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "08a72cfefe0ae2b92ae3fb0e8d62578c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "08bb7e4ebc85f205968f830ac8842231", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0947d4dac11c7023dd16c91f26ddd02c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "098045a292ca4545110c95eb3767fc52", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "098d2edaa034fa6fc6522df26d5c26e0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0baeef64d43dc7a38a06037dabcf90f3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0d04bb245f151b8bfc9b339b2480db8a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0d3f3033681f8b01494cd7451f59081d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0e83e2b748bced5362c2dd4d981b5e00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0f0f647bbeb1e586e7f33f57a4d6670b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0f883de12d05924ce41348cca55dfb4c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0fbe2f6c98b0474b0c82ba4536fbf06e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "102523281ebb9f3ec63b2e13f51c258d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "10bfbe029f9a4f3e6d54fdacbe3eb44e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "12329e6b3e18ef6dfe1cd08daa7d67b5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1240045d81b31890d7bdd52c86ad9a36", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "143a89b5505ae1bc0701c74b2ee46229", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "15184282c294611434036cbdfd5c5484", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1676b34390c8006054f1e13e323e9e95", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "16ab8f75b9f98383aa3a08a4d20fa046", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "17529fbc2c5b9b054ab35fc816243621", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1b5d0e90a51b7e772e48457197cb0630", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1ccd37c192554d8d88783f3863bd3d9d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1da15de5297fb341de46d64d0cca1972", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1e19d4143144e9a46a0411385a3d1b9a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1e84951268aecf7bc74998c96443a87e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1f26de52a4833994fc9cce7925931db4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "20bc8278a5776e985112a6684b0a4fc5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "091342461ea46a3f4703d985f8b1b88b", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "1425022798afc81f0df76b322258b609", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "1453b3d79278f88c3f0534555bfdda09", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "0eb986de0814d0d089504f759a9e2a20", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "0fd5ad0df5d8da96cdaafd8041869d18", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "0d6eddc3baf5bab1a43876a4c0de3c00", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "1de61d4ccf7a0ac1b8d25e4e98b5b172", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "0e5b0079762610078bc076e9164b71e0", - "count": 1, - "total_related": 61, - "prevalence": 0.01639344262295082 - }, - { - "value": "1a7953c4d376b63d540e49219da4fbe2", - "count": 1, - "total_related": 61, - "prevalence": 0.01639344262295082 - }, - { - "value": "012cca679e6073e4a57cfe5d0aa7e15b", - "count": 1, - "total_related": 1924, - "prevalence": 0.0005197505197505198 - }, - { - "value": "d41d8cd98f00b204e9800998ecf8427e", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": "0bda792e1a4385a8c5dce49ce9bdec9e", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "16968c66d220638496d6b095f21de777", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "6e7a45521bfca94f1e506361f70e7261", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "7e6c0f4f4435abc870eb550d5072bad6", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "7ffc3168a7f3103634abdf3a768ed128", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "ca3464d4f08c9010e7ffa2fe3e890344", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "1f354d76203061bfdd5a53dae48d5435", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "8c950f651287cbc1296bcb4e8cd7e990", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - } - ], - "pe_info_section_names": [ - { - "value": ".B1", - "count": 2, - "total_related": 676, - "prevalence": 0.0029585798816568047 - }, - { - "value": ".jss", - "count": 2, - "total_related": 1694, - "prevalence": 0.0011806375442739079 - }, - { - "value": ".ddt2", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": ".dtd0", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": ".dtd1", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": ".dtd2", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": ".ddt0", - "count": 1, - "total_related": 23, - "prevalence": 0.043478260869565216 - }, - { - "value": ".ddt1", - "count": 1, - "total_related": 23, - "prevalence": 0.043478260869565216 - }, - { - "value": ".newsec", - "count": 1, - "total_related": 5717, - "prevalence": 0.00017491691446562882 - }, - { - "value": ".bxpck", - "count": 1, - "total_related": 15731, - "prevalence": 6.356874960269532e-05 - }, - { - "value": ".main", - "count": 1, - "total_related": 25384, - "prevalence": 3.939489442168295e-05 - }, - { - "value": ".text", - "count": 181, - "total_related": 100000, - "prevalence": 0.00181 - }, - { - "value": ".data", - "count": 180, - "total_related": 100000, - "prevalence": 0.0018 - }, - { - "value": ".rdata", - "count": 157, - "total_related": 100000, - "prevalence": 0.00157 - }, - { - "value": ".reloc", - "count": 138, - "total_related": 100000, - "prevalence": 0.00138 - }, - { - "value": ".pdata", - "count": 134, - "total_related": 100000, - "prevalence": 0.00134 - }, - { - "value": ".itext", - "count": 127, - "total_related": 100000, - "prevalence": 0.00127 - }, - { - "value": ".idata", - "count": 24, - "total_related": 100000, - "prevalence": 0.00024 - }, - { - "value": ".rsrc", - "count": 13, - "total_related": 100000, - "prevalence": 0.00013 - }, - { - "value": ".tls", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "BSS", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "CODE", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "DATA", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": ".bss", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": ".gxfg", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": ".retplne", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": ".vmp0", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": ".vmp1", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "_RDATA", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": ".CRT", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": ".didat", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": ".edata", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "UPX0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "UPX1", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "UPX2", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "sandbox_verdicts": [ - { - "value": "Malware", - "count": 137, - "sandbox_name": "Zenbox" - }, - { - "value": "Ransom", - "count": 137, - "sandbox_name": "Zenbox" - }, - { - "value": "Evader", - "count": 118, - "sandbox_name": "Zenbox" - }, - { - "value": "Trojan", - "count": 87, - "sandbox_name": "Zenbox" - }, - { - "value": "Stealer", - "count": 85, - "sandbox_name": "Zenbox" - }, - { - "value": "Phishing", - "count": 68, - "sandbox_name": "Zenbox" - }, - { - "value": "Malware", - "count": 49, - "sandbox_name": "Yomi Hunter" - }, - { - "value": "Ransom", - "count": 43, - "sandbox_name": "VMRay" - }, - { - "value": "Malware", - "count": 30, - "sandbox_name": "VMRay" - }, - { - "value": "Spreader", - "count": 29, - "sandbox_name": "Zenbox" - }, - { - "value": "Malware", - "count": 16, - "sandbox_name": "Tencent HABO" - }, - { - "value": "Ransom", - "count": 16, - "sandbox_name": "Tencent HABO" - }, - { - "value": "Evader", - "count": 14, - "sandbox_name": "Tencent HABO" - }, - { - "value": "Malware", - "count": 13, - "sandbox_name": "Dr.Web vxCube" - }, - { - "value": "Malware", - "count": 11, - "sandbox_name": "DAS-Security Orcas" - }, - { - "value": "Ransom", - "count": 11, - "sandbox_name": "Dr.Web vxCube" - }, - { - "value": "Malware", - "count": 11, - "sandbox_name": "Lastline" - }, - { - "value": "Malware", - "count": 10, - "sandbox_name": "CAPE Sandbox" - }, - { - "value": "Trojan", - "count": 10, - "sandbox_name": "Lastline" - }, - { - "value": "Ransom", - "count": 4, - "sandbox_name": "C2AE" - }, - { - "value": "Ransom", - "count": 4, - "sandbox_name": "Lastline" - }, - { - "value": "Malware", - "count": 3, - "sandbox_name": "SecondWrite" - }, - { - "value": "Ransom", - "count": 3, - "sandbox_name": "SecondWrite" - }, - { - "value": "Spreader", - "count": 3, - "sandbox_name": "VMRay" - }, - { - "value": "Rat", - "count": 2, - "sandbox_name": "CAPE Sandbox" - }, - { - "value": "Malware", - "count": 2, - "sandbox_name": "NSFOCUS POMA" - }, - { - "value": "Malware", - "count": 2, - "sandbox_name": "ReaQta-Hive" - }, - { - "value": "Clean", - "count": 2, - "sandbox_name": "Yomi Hunter" - }, - { - "value": "Malware", - "count": 1, - "sandbox_name": "C2AE" - }, - { - "value": "Stealer", - "count": 1, - "sandbox_name": "C2AE" - }, - { - "value": "Malware", - "count": 1, - "sandbox_name": "SecneurX" - }, - { - "value": "Ransom", - "count": 1, - "sandbox_name": "SecneurX" - }, - { - "value": "Clean", - "count": 1, - "sandbox_name": "SecondWrite" - }, - { - "value": "Rat", - "count": 1, - "sandbox_name": "Zenbox" - } - ], - "signature_info_comments": [ - { - "value": "TestConnection Lansweeper", - "count": 1, - "total_related": 204, - "prevalence": 0.004901960784313725 - } - ], - "signature_info_copyrights": [ - { - "value": "Lansweeper", - "count": 1, - "total_related": 2987, - "prevalence": 0.00033478406427854036 - }, - { - "value": "\u00a9 Microsoft Corporation. All rights reserved.", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - } - ], - "signature_info_descriptions": [ - { - "value": "TestConnection Lansweeper", - "count": 1, - "total_related": 208, - "prevalence": 0.004807692307692308 - }, - { - "value": "Microsoft Robocopy", - "count": 1, - "total_related": 2882, - "prevalence": 0.00034698126301179735 - }, - { - "value": "Win32 Cabinet Self-Extractor", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "signature_info_internal_names": [ - { - "value": "TestConnection.exe", - "count": 1, - "total_related": 331, - "prevalence": 0.0030211480362537764 - }, - { - "value": "robocopy", - "count": 1, - "total_related": 9292, - "prevalence": 0.00010761945759793371 - }, - { - "value": "Wextract", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "signature_info_original_names": [ - { - "value": "TestConnection.exe", - "count": 1, - "total_related": 398, - "prevalence": 0.002512562814070352 - }, - { - "value": "robocopy.exe", - "count": 1, - "total_related": 8148, - "prevalence": 0.00012272950417280314 - }, - { - "value": "WEXTRACT.EXE .MUI", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "signature_info_products": [ - { - "value": "ConnectionTester", - "count": 1, - "total_related": 287, - "prevalence": 0.003484320557491289 - }, - { - "value": "Internet Explorer", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "Microsoft\u00ae Windows\u00ae Operating System", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "rich_pe_header_hash": [ - { - "value": "82d244e90c46c620853593462bf11538", - "count": 19, - "total_related": 522, - "prevalence": 0.03639846743295019 - }, - { - "value": "eed5b4fadeceff2eb558753cae3a12ea", - "count": 16, - "total_related": 37, - "prevalence": 0.43243243243243246 - }, - { - "value": "89824521e01c5cba8c3474eb969b188b", - "count": 13, - "total_related": 27, - "prevalence": 0.48148148148148145 - }, - { - "value": "79b52924c41bbb9bac35b912cb8932a0", - "count": 10, - "total_related": 126, - "prevalence": 0.07936507936507936 - }, - { - "value": "d939f25258873cf0cb489515f6799baa", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "a58d908e608be4322fb4ac3becde82e1", - "count": 2, - "total_related": 8, - "prevalence": 0.25 - }, - { - "value": "00404645cf6c33a8983bc6d770a8831b", - "count": 2, - "total_related": 48564, - "prevalence": 4.118276912939626e-05 - }, - { - "value": "d591e59b4c1ee23aba02da739aa9c84e", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "baa2b2fbf97a9629001158b6a25b96d2", - "count": 1, - "total_related": 155, - "prevalence": 0.0064516129032258064 - }, - { - "value": "b64ef6d390be7eadf6ebd5500e38ab5b", - "count": 1, - "total_related": 3376, - "prevalence": 0.0002962085308056872 - }, - { - "value": "b9719f3c91da9a820231cd1a8603974d", - "count": 1, - "total_related": 7481, - "prevalence": 0.0001336719689881032 - }, - { - "value": "a2219bc13a0374dca88bf79d95493c1b", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "popular_threat_category": [ - { - "value": "trojan", - "count": 261 - }, - { - "value": "ransomware", - "count": 255 - }, - { - "value": "dropper", - "count": 6 - } - ], - "popular_threat_name": [ - { - "value": "lockbit", - "count": 254 - }, - { - "value": "gen7", - "count": 182 - }, - { - "value": "blackmatter", - "count": 174 - } - ], - "suggested_threat_label": "trojan.lockbit/gen7", - "attack_techniques": [ - { - "value": "T1491", - "count": 4, - "total_related": 6602, - "prevalence": 0.0006058770069675856 - }, - { - "value": "T1058", - "count": 4, - "total_related": 19589, - "prevalence": 0.0002041962325795089 - }, - { - "value": "T1070.001", - "count": 3, - "total_related": 84210, - "prevalence": 3.562522265764161e-05 - }, - { - "value": "T1039", - "count": 2, - "total_related": 1129, - "prevalence": 0.001771479185119575 - }, - { - "value": "T1021.002", - "count": 1, - "total_related": 1908, - "prevalence": 0.0005241090146750524 - }, - { - "value": "T1036.007", - "count": 1, - "total_related": 2034, - "prevalence": 0.0004916420845624386 - }, - { - "value": "T1210", - "count": 1, - "total_related": 2862, - "prevalence": 0.00034940600978336826 - }, - { - "value": "T1190", - "count": 1, - "total_related": 2908, - "prevalence": 0.000343878954607978 - }, - { - "value": "T1087.001", - "count": 1, - "total_related": 60656, - "prevalence": 1.6486415193880244e-05 - }, - { - "value": "T1078", - "count": 1, - "total_related": 70752, - "prevalence": 1.4133876074174582e-05 - }, - { - "value": "T1027", - "count": 34, - "total_related": 100000, - "prevalence": 0.00034 - }, - { - "value": "T1082", - "count": 32, - "total_related": 100000, - "prevalence": 0.00032 - }, - { - "value": "T1083", - "count": 30, - "total_related": 100000, - "prevalence": 0.0003 - }, - { - "value": "T1129", - "count": 30, - "total_related": 100000, - "prevalence": 0.0003 - }, - { - "value": "T1486", - "count": 30, - "total_related": 100000, - "prevalence": 0.0003 - }, - { - "value": "T1057", - "count": 29, - "total_related": 100000, - "prevalence": 0.00029 - }, - { - "value": "T1497", - "count": 28, - "total_related": 100000, - "prevalence": 0.00028 - }, - { - "value": "T1518.001", - "count": 28, - "total_related": 100000, - "prevalence": 0.00028 - }, - { - "value": "T1036", - "count": 26, - "total_related": 100000, - "prevalence": 0.00026 - }, - { - "value": "T1012", - "count": 24, - "total_related": 100000, - "prevalence": 0.00024 - }, - { - "value": "T1071", - "count": 24, - "total_related": 100000, - "prevalence": 0.00024 - }, - { - "value": "T1074", - "count": 23, - "total_related": 100000, - "prevalence": 0.00023 - }, - { - "value": "T1489", - "count": 23, - "total_related": 100000, - "prevalence": 0.00023 - }, - { - "value": "T1059", - "count": 22, - "total_related": 100000, - "prevalence": 0.00022 - }, - { - "value": "T1010", - "count": 21, - "total_related": 100000, - "prevalence": 0.00021 - }, - { - "value": "T1543.003", - "count": 21, - "total_related": 100000, - "prevalence": 0.00021 - }, - { - "value": "T1005", - "count": 20, - "total_related": 100000, - "prevalence": 0.0002 - }, - { - "value": "T1045", - "count": 20, - "total_related": 100000, - "prevalence": 0.0002 - }, - { - "value": "T1003", - "count": 18, - "total_related": 100000, - "prevalence": 0.00018 - }, - { - "value": "T1090", - "count": 18, - "total_related": 100000, - "prevalence": 0.00018 - }, - { - "value": "T1562.001", - "count": 18, - "total_related": 100000, - "prevalence": 0.00018 - }, - { - "value": "T1055", - "count": 17, - "total_related": 100000, - "prevalence": 0.00017 - }, - { - "value": "T1543", - "count": 17, - "total_related": 100000, - "prevalence": 0.00017 - }, - { - "value": "T1562", - "count": 17, - "total_related": 100000, - "prevalence": 0.00017 - }, - { - "value": "T1185", - "count": 15, - "total_related": 100000, - "prevalence": 0.00015 - }, - { - "value": "T1574.002", - "count": 15, - "total_related": 100000, - "prevalence": 0.00015 - }, - { - "value": "T1056", - "count": 13, - "total_related": 100000, - "prevalence": 0.00013 - }, - { - "value": "T1112", - "count": 13, - "total_related": 100000, - "prevalence": 0.00013 - }, - { - "value": "T1552", - "count": 13, - "total_related": 100000, - "prevalence": 0.00013 - }, - { - "value": "T1552.001", - "count": 13, - "total_related": 100000, - "prevalence": 0.00013 - }, - { - "value": "T1047", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "T1070.004", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "T1089", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "T1095", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "T1564", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "T1027.002", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "T1027.005", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "T1564.003", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "T1080", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": "T1202", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": "T1547.001", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": "T1555", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": "T1555.003", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": "T1114", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": "T1485", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": "T1614", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": "T1006", - "count": 8, - "total_related": 100000, - "prevalence": 8e-05 - }, - { - "value": "T1016", - "count": 8, - "total_related": 100000, - "prevalence": 8e-05 - }, - { - "value": "T1135", - "count": 8, - "total_related": 100000, - "prevalence": 8e-05 - }, - { - "value": "T1033", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "T1056.001", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "T1490", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "T1497.001", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "T1060", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "T1070", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "T1143", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "T1518", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "T1547", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "T1007", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "T1050", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "T1222", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "T1564.001", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "T1014", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "T1018", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "T1053", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "T1071.001", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "T1106", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "T1120", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "T1496", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "T1542", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "T1542.003", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "T1548.002", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "T1614.001", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "T1036.005", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "T1049", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "T1053.002", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "T1124", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "T1218.011", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "T1546", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "T1548", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "T1559.001", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "T1027.009", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "T1031", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "T1055.003", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "T1056.004", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "T1059.003", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "T1107", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "T1115", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "T1125", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "T1134.001", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "malware_config_family_name": [ - { - "value": "lockbit_black", - "count": 206, - "total_related": 1913, - "prevalence": 0.10768426555148981 - }, - { - "value": "lockbit", - "count": 115, - "total_related": 1420, - "prevalence": 0.08098591549295775 - }, - { - "value": "limerat", - "count": 1, - "total_related": 640, - "prevalence": 0.0015625 - }, - { - "value": "lummac", - "count": 1, - "total_related": 50182, - "prevalence": 1.9927464030927423e-05 - }, - { - "value": "amadey", - "count": 1, - "total_related": 54549, - "prevalence": 1.8332141744119964e-05 - }, - { - "value": "quasarrat", - "count": 1, - "total_related": 57584, - "prevalence": 1.7365934981939426e-05 - } - ], - "malware_config_campaign_id": [ - { - "value": "8ac6b9", - "count": 1, - "total_related": 216, - "prevalence": 0.004629629629629629 - } - ], - "malware_config_registry_key": [ - { - "value": "SOFTWARE", - "count": 23, - "total_related": 373, - "prevalence": 0.06166219839142091 - }, - { - "value": "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", - "count": 23, - "total_related": 373, - "prevalence": 0.06166219839142091 - } - ], - "malware_config_mutex": [ - { - "value": "{EC1CC5DF-EC1C-E733-A34E-1C0606F11CD7}", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "{095650E2-0956-73FC-75BA-CE6A6A58CEB8}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{10513AB4-1051-C358-BAC6-845757D48468}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{396E424B-396E-EEFC-AF88-A5C2C2CBA536}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{4722890A-4722-5BBA-7B41-6FB1B1B56FC6}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{4D86B868-4D86-2F54-6D4C-E059598FE0DD}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{6F867F83-6F86-042A-B592-5BC8C8935B2B}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{7133F903-7133-F36E-0805-DDC1C11FDD55}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{7C09E5A8-7C09-DCB3-2E92-CDECEC09CDED}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{82169703-8216-AC6B-19AA-A24F4F6EA255}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{9B43172F-9B43-4C77-D027-792C2C437963}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{BD2238FB-BD22-77D2-242C-73E5E5997314}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{C96E5FA9-C96E-3261-8703-14C8C87A1434}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{CE5066F0-CE50-5CDE-1A8E-5696964156B8}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{DE9B3ACC-DE9B-B21A-36DA-8157575A81C6}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{E884B42B-E884-2094-CDBC-65DADA4165D7}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{F04F4DF6-F04F-47C2-507F-863636E9865C}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{F67CEA24-F67C-061B-9172-BB292965BB6C}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{2A88A03D-2A88-E759-2227-D72020E6D746}", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "{74C5FCA2-74C5-52C7-12CE-459F9FC8453F}", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "{C3128F95-C312-A7FE-D1C9-3BE2E25C3BA3}", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "{62DFB03E-62DF-3ADD-3694-F0C4C493F02F}", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "006700e5a2ab05704bbb0c589b88924d", - "count": 1, - "total_related": 6123, - "prevalence": 0.00016331863465621427 - } - ], - "malware_config_folder": [ - { - "value": "appdata", - "count": 1, - "total_related": 306, - "prevalence": 0.0032679738562091504 - } - ], - "malware_config_crypto_key": [ - { - "value": "5d795ea4a70c62fdbac841ba15bdb93afd5a1ab18adc462f9165ccea23431965ad3eb59779204fa007606f311b2cc675eb6eabde9226ec8f7cf223ceabd596c43f3c6362b62e350eca2aae723f65fe8f300d39a13b0527155f9710a3971dc95058750ffecf52ca08ed3124b5489444ac3b6bcfe6bc9d943d5af3e125f4b928ed", - "count": 8, - "total_related": 9, - "prevalence": 0.8888888888888888 - }, - { - "value": "69b61777019f1fe04f5ce9d899925dc4296743c710672a8d5e61a5be3a5a59504174f4df30fefdac02fdc7b2f08ebcc25b8cfa387f534ec2eecf43a44a0df8513391c406f0d1bd6eef198ae7071fd663310f344314dac109c6cc0c58f359cafee249042b438ccd996b53b0c64e8e1d27fd60a69f4cd44a826cb716c9b4b83629", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "755af0932d815f0dc45c5dcdf686623bef9748c3ee75a9f3f8df0062da98e43582918b22d96267bff68e5b2e264aea147264dff4b0ff63371ada10ce77986c29c78de1140ae8b4759728c0907b578a7b6cbf458084f5551114321691fd887aa31286ffbf3ecaa7bb98b9f12c3a08feac354e10be31ea977cf59f4e6f61499e15", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "734f2afcbe13ff00e4235835c6444f90a367878ef44b39a20926ede824459706c1cdc7f5efdd0c011bae17a11c8881acace89805a1e827d6fecea3cdf377a695312eb49fc9faeb00b1715d3415a8f24b1d285c381654fd7c23b96e2c52711fb451bd549efa3a2a19a56a28e4df45011c64788c0d2fbc18c0144ae9e879566323", - "count": 4, - "total_related": 9, - "prevalence": 0.4444444444444444 - }, - { - "value": "7208a44c3abc7ef71b4367af255058a245747fa78f485d2425efb6415e9302564a4cba515aa978d013734fb8e8a75d33e5fa91cc04590944e40602e21fcb847469670e8b9453ada34b84b237fbdd138b2a80b63b04a044e0930698f4c45641b5fb8c5729a9a702a17ac5a6b4afe61ecdecb9cd286d56c05d59ff53db22860cb3", - "count": 4, - "total_related": 12, - "prevalence": 0.3333333333333333 - }, - { - "value": "6c320e591e3f44bf600e585b3ac05ab927dc4b9fcbf3a7b9a87e8c5fc2d36c5d4132cde10a112e88dcaf84fa14d738d312a6010fd75e0ea609d5649be371c822f4c34a1c74f82fd02947e1f0af9c0cd8e278e829ef9831f333b0967b6e69e0dc6b47a603021a313dd5b1d75d2c21d06eb20bae4412fb646c2acafea179efa793", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "63318712b09dd31bb0bacae8cebbfdd4c133fe21165d8153e8c40f77b71acc9a44eb1a3ee7cb24f4033d5420f54a16c2db8e7843a971f85a2eedd69527b2f857fdf10020d7df7aebd1763b176196b6141ed2945bb797cfa25ec340f463fe55b2e86f38bb7699a796c27aca7f4e24f2b30b0d1d5f88509c8b2dfe2ef86d04d6ed", - "count": 3, - "total_related": 6, - "prevalence": 0.5 - }, - { - "value": "45b7c59df6b017b9073760415c77f6d37e572a9685dd29c54b5f1041d29cf0a66788a4e2b82ab1aa688d87341f073476000a176a4d59833af13bd370e20e2f5e326396b490182eb5dfc1e25c1a050f5144fa8bbef7b049d96ca3e27c091c2740ddd7b7f6c8e66d7d55f3ee040da8efb3ae0f031d1d354fe85b23e090b7b9aa07", - "count": 3, - "total_related": 7, - "prevalence": 0.42857142857142855 - }, - { - "value": "66f4478eb942b63c7406255505e2cfde32a3fa64d62e09d11409f23b3abe6b15216ab8a749616336f8d7e0a527f6ed1e0eb31d87a557fe131844b73cae99c633c4c073a644f00c54ce8d1a62179a6fbc67977ca15cb11f3a281191eeb7d7f7ddbaf8346554a42a1d27242c7e664813bcbb4dda001927d695cfff4b56d3efef21", - "count": 3, - "total_related": 7, - "prevalence": 0.42857142857142855 - }, - { - "value": "5113a45c823bc8a5d7ad1c3cfd4da2bad40ba31b67d554ff5ee940d55394fa3807db922c9649fe4e35a3257df2c9164c82f01f18955043a8020f91394710b81bede4c1556003a1c027e8996f50531e3035a89e2be9b1ca3f19ed96ef6c6036ba28fc2607e1c2cc266bdfee5073e2bcb7f9d805e54a6300c23f0a3b37ac31912d", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "64a055331e3b5104bafe44b761f99515e2627b1b2f53479b7c8a923f0977c81c41354db3e1e64bafa8651c441041d0ba561156f346735c9cf8265fa797c4f4e4246c3401503a44ede2ed7364a3b04b70c6ddcf0f04417814da28afa7710f51ed27723c7dee625f7ff362caa72c5ab44d5b6a0e2e07a47db2547e6f6da5ac9167", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "65f5f543cd41451f67ece9323dcc474bcee9df998da37b2edccc4c8fc9f7a0ea1cbdf94e6222be7fc44be2bcb52a1287ea0f0d6fc19c8ffb0b8ffe32c18c9fe4f099c60a32a00d2cbc6a3a9223215d78635bade8b212e62eb23d33b447b87b928bfaa6ef0fbadbc8931ea52ccfe5a8b949357be8f384404f0cd13d8abef77bfd", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "7ec0e24dbfd47762a67a4e298e0bca61131f5ac72c308949bbd47151857809bc46850cca472ae893ee9b7f4058a61abb90f354e6b932c33d10f161111e046abccc935dc5b9892a5e3c94cfa22b36eefeb0aa6caea7527fcf4f3987ddcbf11269025202739ea19fcdf3d9e223eb96eb9afed4ab8ced21b3dada03d1c5d4fc8ba1", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "7f13325a69bcfc7dfbfa1a68f40045ac68b97602cecba5a61d0c83dfbe94da36757618fc7617a59af2932c7227501a660e3f421748f4b8bda07e2e04937e865a586d63b5b4dba7ed20d18f3e0606f9a8ace37d86fa202f1992cf910c6be8a614c66fd6b85b672b98bc1b3cb94fdd9a351a1d935e757642ea9a2d8a6ac6940e9b", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "7fa6af5cef47e9c502c1e8b030924effc4da94d115f09aa0d3cac0acaf8bb99103345c50d7aac201b3b140b25781007dff3971f03eecb30a37c08495350a047a8f251f6866459fe466b18530fc6425c3fc42cad0d1c503c58b43e091d6beda9cfe714c31950db84411f9d0a66f47a152a3b64654035b151cd542baaf2a397d3d", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "55334a02c4f9d9e63d948910a13ff83e50a95917eb8f81825b911246aeb461275d149c6a0b2261face0edc5dbc603924031b0524d7e5e9c7cec977ec99497862c75b92c09bb92e3bc053c5c3b71d93386ee1997f5fd9e39468c84b3487ff4366cdd907e13a542c41988417e62b9a8ccf3e22dbd354b0310cbf7ef68eb1e3cb7f", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "56e4dcd51accd559f7f617735536412578fe160659cf6460b35dccd1de06b29d8662061743ae8d38ff226c4e58b764f8caf78e217398ea46382201bdc2b726f3eeba72c62b6e94079044cd60816537c2116ede1b52d1d979ac1bf2feb8207dcf2b7e619acfb83edefef3ba14dd024651048ab5f63c6368e50fecdfcecabac139", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "66aa9734f6e353f743f07d7cd8a56f68ae02399cf2634797f326bfe2d147695971ade414af040973c93571a677aa03973cfd920d71f23634e3fda75b7898d29ed05816729ec2b3f0ea698a8387b1ac64131cde6ff6c40b59720192c603806978f0f881a4b2f1efeddcba3360ef4c727bff837449936531e94191ced212546899", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "5face9e217c7c364931a9803a80bd81e04e4f1469ad5aeed346e296ad11abb5d26ddf6ab3b663604a52e3b4dd18c570a70ddf6d41e0bdcd532e66103f3af9e720a066aa10090bab564da47ef54d2a178795ce89ab78dd22c2590ecdf763d359fe1dba9ed0fd0b363846890015405584fc9ae7edab9aedbf53cadc4585d9d7b21", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "7f7265cadb083542d7c5a0a9797018f149a0432a215edc0ed9ba7f2116d9903710a39cc583219f4efac55a433a40ea26e0b86ed934c30048056a74df66902490c1fbfadad9e403163d0c74a9131bc47d4465eb097e886dc276f437c1f7b0b78f59af57ca2495a2abb3c67120dd87fe0291584e9b549585cf640a581185a345ed", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "4957f5109cc0b7055898e4925d0dfb214fa133d1a3d64a735b5a63b091529b38fb5a90d3640a9e74b8fd4312e12c62841595147a11caef085feea07031a662ac7a1c09a5d881d2a613388c31b9b27d58a9904354de4170f1d16f17a5d906068ef5953d3be289d578fcab03a04aed18fd9430f60fdc0afc51f815e73ee6f8ba21", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "bdcdc5dfec1ce733a34e1c069ef12dd70e00ea37ebd18757d90eda0d943dc36f", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "0f643accde9bb21a36da8157bb5a8bc65531975de4e01f7b524de13dd2804146", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0fc8890a47225bba7b416fb1a6b5b6c6c3c8ece797df04d3b0d2581cd78e0101", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1386b42be8842094cdbc65dac14161d734be40d92516be5e7f136d3fbb88bf0d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2d247f836f86042ab5925bc84193af2bda0f3b9b2211ca7ba95fa87367f67b1f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "3ad8424b396eeefcaf88a5c280cb99368da87d56dbb1f8a0a54fd47afd954575", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "43002c2781413fd2bbe5f35216efe63aad11b5789d29b6f027b59a9d9bf3d8e31f7fbf97dda65fc16ee237243187a11e71ebb42fbbf37d91e3fe307437e32fa6feed183670bd97e640e7ae2fa4800c7f9d2efc7ea7212c79873ac98a0005be525b77b24d5e59cb4b72902809681f2fdd20caa24dc1116168fc4b5b318c91edcb", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "47403f671477177ba4be25632eae59d192d6510c4017fe9c9f46a06c0fc1c5fcb6497a581fb3ebbac77f12f98d4bacde96ec325dd6e2e3a1da5147c6786385394d5966105214850d185834fa50c8e3fe9ea2e746080d48b9d4dc76c8be5040c3e50fad37217502050cd153872477aa69624c15b3daf093ad60647afa5085a96b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "49b4ecae694b0fb0fb69485a32cf6fc4746cb1112d9589be8de5432dcef7b7bd238d8a9495a82b1809c314316e9049868135c3276dd4cf32dbcc2aa7eceb6b454415e65aa13ecb33b0d53bd197ebb4c999fb2a6547b904d8436090d60f8703d346abef0dd612b12826e5d06883cc488c6e47d79c5e5a57a6cd73594634de2da9", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "49b61f0fa7f3f09d364e3750376436869b5a79897466d00f5efb2948c85f928d3df26f32f7b0ce0b6de153df5ef0a4bade41c5faa9314cd312a7384a29e2a4f33d831312781d1301f8734a7f22619cb32741140b110653f122e86ed49813052ee92fceead1e72862895e18366336fc49941d6f83214ffb0a7c7eed26899f9139", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "49e3f2cc98e03fba8624d4f15f49c520b4d739f3cbaae97ff3321dc65d45797a95509ab963628583be9f7e8f7df66b0f47fac50abcd0b85573ca1eefa9e925038a63c263647d460a28a51a71dc9ba6f94d138ef07caa212c005f41173e6272549eb6c17042470a0c76be35a757913230b240c4243969a09c37a55334f2c233ad", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4b5365492b0bcbad512ff1bbcca5aa1ee38159868e8b1ec82f084ff0fcff8409e48ff490c2d92a2415d6c1dc064bc6d376fe291d44f7448e5c103dd85d9b4555d9ca87df1b9cce467a45596c8e7e99a1bedc1f98442a49c1de6a36a309f7e4c9d089fcc8c31edcc1a63cc614999bcf7b6cf0250ab8bfa517cccc8dbfa6718d55", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4ba9fd0ae76e62dba7f97a94d47b9f2610994a70e9358afc261a54c0cfc22d5db6b3a1c501cc3b586c58838380358aeab2605cbb44249028f7b18ce2dda4d6c69dc064517e39903323d1f710ad0c7c9d6f6723acf2950d8f400b0d9429fd42abd9919150182682c57dec3c019289bd0aecefdadc0b929b9c23e210f71a5862eb", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4bcac4e8b85ceea6791bff5714595a8ca5840a6e1ef2db954c23e99d773e7d0405a1be10e944d1ff522cce07fd769b5fb5c707683289a228ee2c529e4c2f1b989d93662349af85252c9f8575e9019d8d17fc5349d0877cc780da92b533789c0f1b48cd182de773f5c925f74eeb718443d35718b068504ea52a33af0f09893aed", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4cbde71d7040ea172c7487bc0776835b018dce3f74a6cfbc5d5ed2cc36a07b36e0e85661fdab0136f032b08759ebf7fc1805971088d8136c56f0b13606c34a3b96909658b61f38c92cf5fc7b6b70bd432bac76f2d4606b26d8c20f9d138b228ae2e128e108c3672d5e76c085bdc7b5121ae7be1884905b309a18b56e24a8ac73", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4cf202312072e5731b7ac1593ce7cba8d51b3ac252a5a806bbf97dc9abfbc101b7279a551143865bb51dac0c71e0178f8af631143601bd977a30a477ce24df28183263cac338e07b0708335d5e05182b4313e92269182298acd6d7a41ca09620b480a455bdd9d6dcb1cdcb0d9b1fe387229fab792b1ba80a044587163773a6f9", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "52d92815cb0f743103c4357586a4a3e8e821d7fc0a4d6458deffda63575cea016b8ef2678b063ae4d2d1efda910ba15a5b3fe381a5ae5f89fc4d74cf2709fb75d2fae5b93f356436c3823e70c64ab9e0bb7312d139fb7ca49ec378a7d3ee76988c54382eeeb9b415a293330d43ba9d4a4e8f8a6ad66d16bf4609594822acdc0d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "56d74261fcf7c9915617da196ff380278f9740c7db16111684611628ac2d5da90ed304374f6c1b56f9a6bda9f8499a771d978f0d193cac65fd4c7c2735a7f8ea3838fd4d25621425e94689d40a84524bb838f429e97fae61c3a35869b228f6a612f8a3af0ebd836b30c66a7b87c18b516555279a3c4c701101e66a6fbabfb693", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "56eff9037133f36e0805ddc1ff1f7055b4ea843b90b7edbab4d4a96278ba3f27", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5869b8684d862f546d4ce059fb8f32dd24b8d881a17cd6fb162095c932b47e5e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "586a97038216ac6b19aaa24f606eb255a435de435f57ea31c16fe1515f2cec54", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "59175fa9c96e3261870314c8b37ab634663f8aa924babb5efec5dc40d039351a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "59328c377d66b08e01c261717d3eb659a763e0dc8dcc5d0a0870005d2392059a0fbfea5af2e2b1208b4436fa70e3a3fdb7561e6c4896c937769a9508e69e6e8740b162440966a6b0619760c8336f46d03afca34cdabcd1ba4d41eac596c897745907f0f48947d308312ea689095935db099cca35f803a40fc4dbf3a3405a7535", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5c25b77123807d57c26c600b1764869d07fe274c52ff5f4fea8182c5188b1f31c2398d7911ebde067deaa12c437e834c804d1d6ae66cef31151c2577870d5846621275378af5244471aa7c06cb3b298a50e9305c02e88c7018c447ab4ecc5fede98740e751e74c6e9f3002f93733ed4b4d9b7a95580398f2351c6c7d14fc6329", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5cc02b15c56a0427c0d768eb08f9a310515271d3aa1bc5f552768faaa73295bf94f17974ede1c1af9189384855d18766fddf21df4d158c3833aa04b389ed2755a05ba55a2916a89d943ff429bbb6a21986acbbfe48d1cc9b6c3a7523b149b2bfbaee8da4d2d5ae8413af300f0310b74a9ec7eb33f5848fe47b15409e04ed6bf9", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5cf000066f0b647a62ce15a6137137cc2096d161c841ee4a320797578732f78a3683e1566634964848c962d3b9e698e3dbdb6f0eec0793e4435c583d73398915ff794bf15f3a8e87ef65c444c1bb329e87696a89bc8934e0ca5627d22aec4be8a5acdf0f36a466eaa2e703a16335797f74eb59bee3b122a2aaff0c59e58a1d8f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5d40c57360e75df905170a588ebe1b6f11c13a4ad684ba6185c717478fa765ad28bf246a93e2db3624aee586bb8852b041e0dc7c3bc13082969bc074cdb4647673437e81dae490ef87f2af026551aefd398d3c3936d45bf6ceb4e397eb33d7b2e5c6364797829b29c20a8073b9d6000b3387fff842a7b1896af17f371571b7f3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5d6e3163691faed004693a3ca0333b1a395c060e3e2203b370cd881134bdfc31fb017048d9cc4a18547581baa87e08335081d1bcef4da95c63a46deedd56ae8b778d581865b8ef5f283b60fee77002b37c28766e26eb2d18ced1755c96b25deb49c99bf27389ce3404be94b75303a7387fdac053d9a854e6ef69d31b71f4bea3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5d7d1ad3a00b3512d6ad1c6b8d90011f162218899d7fc9089298679de52b01f24e135e20c12480371f10dcba894265b69185bae351609ae671563af6466f4434caffc57ea4863d1e619e53dca4f9b7233237dc56fecb7030be9e1c1d0119f83920bb5de5f48b34982702f576f7558af53515a0a4c511c48f8be7e1cac676df65", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5d84087ff0514e9313e056f5b34f58d8da6b4acfdf7f4d54bd82ac8f88412aeb9c7a209413cc487ed55a6128ca61f9aa24422bba5bce29eda2fcff6d61e8caf3ca5751de45a5b90399e8411d79c3c1d7b0dba8e4a3e6adffd80f994026862df816b8bc305c59f7037411b819d4ad40e03cb314ffd4ce6e2c7c4b5d4e5fc6c7ff", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5d90bf94b3adb70e5e3b65f7fda8ce7e4204b0ecebb2047c1541bf7dde86103fed3236e256278b5b52559026844df8dde1df06919ca6daf875b4b820e0db2022dc77363a2664f97e1740aa6e24836216b72b597a30667070bc21bf1352a66f9026031001b833645ef9d7c27e8262ac9b7ddca121263ce1ca408d63449212a689", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5e52b9a583b1e0a4361244eb2a049bc414bf644a7787274bb09c28aae89c2cd1f3b01ab51a15777193bae988559050e1469990cdabcca59ce788cda1f64d6d8e971fc78456366ca2511c922e495c32f6c6d8e94cc904cb2721431fc7736106605afb4b911b5a747bd7560fb5c73677275b7096035094ed8479ca4c6b004cb853", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "603fa7b556be34048409f08452df19a44bd1f60fea807589b848820cbe654aa6483d71c375d1a8edb58658f906b65e8b90805a97460e0f5b273059e11f36161f5e461169184a365136ca34c43e3c71790b7b1943f67e58181789780fe2261622e79c7aec4f42c418a54e0cba79793af1157794528efd26171f175c833bba1d19", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "60a20055590ffdb7f7241e1bf05f09665b7c330edb627233c4603495c92a7a02009b7fbaed0e7c412417df421094ee5e57eda171025da0a24f60b113efd7884698fc454daaac44cf476d1d418980148352c80e635eb7865d6a8d2e33489f9d79765f0b4ff3d275dffad27cec28893f32cadf94a6bf59f7346010144e7ba47cbd", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "60a4ed3ddd9f3f12ac33bffbfbae9bd5d227ccae6b96271374e55aae82cbfce37dc4883445365b162c34f4aea4c222ff47b99b94fdbbc548f7484894ae0a0d359bbc9539ec3ac4c875d8658a58c7304e65c715281939f6ba2573f8902059e1c2749e9468accee3b9eb19d8f6de33e3aba941138366854b0e5af98d13a46bb13d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "60fb9c09a1f28bf450d53d8aa907707150cda83d891d35ff5520f7462c22f403f8f9b876f7a435500f16faf0efb2efbc7cf88f4a3d741cba023886028d13666aefb3facc859b56f181580e7cb8d109a1c04e906a205ab06d0ca011498da450cbbe877c5e4d35e22ef80a959bc90155223fd8bab16cbc5c8e042e96380987bd15", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "616a946a9a28e4c411a7289d47f9573ac7fa9fc479dc5d99f365d555a07941153f748945fce6d2cc780dc5b8851b728a4f7eabdd552302be86d1aa92d6e20a21e6fda54daa53122bd2a6d7b8c51a69594d717cbcc567567bdcf12430c6f828aedc778ec487c90071aa67a062d431203da888bd994705124bdb054fd85c5263bb", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "61c955bd8bb4b20111970b676a85e676b9c5557e77f37dcdcce73091580e6c4b1d6dde9091cfec917fa27898d12193f1927e77ff558a9d3b73c70771e0bb91d356fd25b25387ba40be10d69bc52d54bd0997645fdca6250ab1c23519b5095972606776f5f386b515ac5ba75e10f057c05fd9e64b96ffa0f10f5c6a497d7d3bb1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "61ff2a7d785d8fdba763d86fbab981b964e1ebf7719c8ae9878a469fe1b1be431302d1df987cfa235254155119d0013fe3709c04becb24e5d5b296e4eb78fde31ef6d5db3d96f3ba07444fccc861d1400b048a7cb6b4e5e61422da666930f12be320d99c1067b38f51b52fe227668f1cf1e18d059658844381ba34a0f4a47913", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "62397286b6b6c767f1b7b6a5773d7d56dc2e80fcd0c92297c0f631c2e9a9df3c7f6fdab6b94b6e25dac87786565902d393c7620b277c91ee17102848ab705041f1809e1b27a9928eecc51036d141847e861b6311bebcef5cf5254f38e8bc9bebffac87dfb870ea6cbf76ccbe87770f6f416bfdfbecee7cc070001e9016cb1ae5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "6250a5c3bb3c27eff080d19e10c7639fb92bef65008cb1ca5fe1261f01310afb4138fb4c79726dbe738fedaed71c2f09cb8cd268e8fca5f414163cdf6bb0caa38f6cde7e9424f77c90b73b71d0448036a455690ac9c3281841e759e80b97b72c6913b4d46bcfac32ee4560e85e50c0654ad943a3335f31d636261b6fc33c55ff", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "626e891bd4c492acf6d97f9951b2848de287807eb75b9ced4a3e61422f08b8ddcf9edce5a9b3220c9f2009a8468c6c9ce85e0789ef2e2711f7dbb9fc879485f2523c3e0c86056d6a866becbd23c4511562d7b3ccd94bc8150918a16ac58960e81a463520019711fee599a76c44679403a1bea1183d8fadb1a78592b93c13556b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "62791cd268abdc1f2cf9503d73cf21b483889c3769b528c1d3f657c1241860d2d9287ea171ed284c9ff900833f50e7b860f8fd5665124efe177fed2702e821cb1437e21f529f51636db01e014b80f26807bb3c1af61dbcfb0b10d808a82031c238e7207a1bfa144405e61040dfd6426dd2c8b8f9e6540a2b0d4cdff44bbbe1d5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "63d46e7411407b1353f2d2d5826c9831441624a25a8b035704776592473400837729394bec14c20dd415cca2c3e437794ac9d56352774b7639a0ab7938f32d379140c00251fd9550903ebabdea2f8356a79e009cba1429487116f62260d8948e4ac8af1aedfc18cb2e051d1e32be3c4aa5a76ef6fb32afaae8d4061cd8bd6f51", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "64933bae802e0bc9afaff3db0aedaaa6421f334777bc9e0db90b790c43e6b086565139fb6cf988a9345f18cca81e3a70237eca29be14d045b17e47df86d86136d9e5514ae0b9a894feac6603fdabda8ceb8eaff76f5726a51596624c4424368511343fba67aabc9e406179551ef7f812b61cfa495f350e7f757b8f12a434bc7f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "649659bc32c902e69732b578075c1e8030c8c1f58d8d538ce2a72b54744739892aa2472f2a89fd38888cfbafc5f5e3effdab9e0f28bf4eb9121a4d3ae13ba36375028a082885942f26fbedb9274426e3cefde1d33a5a27360cc49f6b6d20828c946d1a5cfce13d737acd6a661a0fe1490540d9d31c2fec5ef1c64a38a331cf5d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "64f7db36d6ab9b92f185f1c26dff9e39b8baf91aa632b862ebc3a6811de845842c4f5172fcdd87fa458982cfba35b50c8a7a9470b586898750111a4c56e67a9b8ace2132f7748fe9d7fcff68a63409758d15fc26a18fdb28ea0accf1d8838297f18374b0f2fe13ee818b145f3cd3762323138a5421ec87fcfc843f8e933e1659", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "65a9815e830dbf5ccf1188c0eafeb917a83d318cc98f23e6b3e30995b3492919ae6af0424d8fa200364f3e4fdf62609c5892f5bf1b8761ad69873e895ee43656a7bfe03bfb3dee671f412d3e7187dcd1a3c3c59c2508a5e9947a020877dac88677de5e84c9b9f319af75a3aac2413645732e3fe0b92d53dd2345818e037d01e9", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "65d56e72ae56cc52999040469558495bcfe48f6844a98612be26320b8b61564957f3c5df15bfb062142166016a35540a476ae2c15a23d0f37da4d5a4afbc6b1d5ad1baafeee7944ecea8bea9849d52b605fb6e4f6de72d1d30e05f089f0a7bb1d69636720faad7c53e42cc642245b0157e2aaf9c8f8dcbc9c4f28938b7625363", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "660c0b6c5cd0a2886f9b8209021433e4bd09321e5af1f7676af0c30d772f73e9af385e75de70b80616d47500bfe637bfdca80fa123eaed5563ada6f21a4145a613dc4c95a2c5983c6257e234be6e7bf94e60e235ab744ece364dc5f88d837e30349abc8de91b7168a7d1d3d6d467b3ee627443f35593a40d049808d27a9387fb", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "66c1af767c51cb1ad6ec1853694f91690fbde45400c2ce255260667daabb754ac13a77d96744ac8dedb1d0a56a7c0e4526e1ee32a189ab86aae7699b7425b5be4fc6d3b0b17f0ea33ad3c8fc9dec85d880fbf390d6019ef431dba29a164487417b9486b4f224fd1d93ab1e34955cbba1db5da8c1a19f9cad6fd19cd9a9015975", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "670ea3cb2b55338ff7117e7f94a050ae820fccd11f3e7974c958e12e6ae1b9b6795c6ee9eea17657bdd2438b7bd501805af17ded2dde43a118af6ef5e1aa448847cc693c82496692d5dc9245be1461a499fb09b79917abd2de881771f664e298513174f4a59367109f2969691d1e101ac017afe6807fca83bded11c0f0b2a155", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "673ab5779ed5d22f961e926786e941d00d11ab6fa8b2df192b2c8aea385424fd2d3d25dae19295b56995afe7ddfc802ad9698890af1f2ec757080171f713c917b7e53869bc4eeace6225c4c8986338fe782cc6408dee4089b0dd48460d84a99777db52d2e132098ff0ce85dc0ee39784b55813ae2ade7157fc70a79aa3bf754b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "675f20f667157e1c610ba67d2ade2bcfe66999c8b42275cb7934860eb982f1f68000174146cbd96baf2f4330c89f036d68ac429d88fde1232d59210c1628f047f502572e64c9ff8726d591caabf1599c6cd93e14a7f31b5abaa949143c87c23a8b69586dcd28bfe878d21792aefff7a475b6349e5a97507f0b800418124c5391", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "67c70d1a76d1e1ba14c851567aa367bc3ff3346db335c39416d3017a9efdea33c74214936bb7035b3ddad6a5197c729544b23eab5c2d8d8e9c4a79f680357a2002d8217288f714a803483a17d8562c4f3d4f0ba094cba88b98c385ce84bb005214cddc0ce53e23aaa724e332dd106e468c9223694caa46339224b5a561f5406d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "67f72a54bd29f05fa9983e7470be87265762ef1cc2365d3fa8a1fde5405c1c3b820d60e6bc1310b5936f3c561cf7b7d32284ce1016a8d50adbc167585612f42eb7003e2fa104317d5185229ac2f147bd4ce0b0ce9cdd84ea5216a9acd400e16c1b8b80f1f86cd9aa89f3e3039f36b1f744eed8d12d9d987fbbd7037dc8b90a81", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "680c9a898e74d65709286727d269b04269c38d2a784585dfc2281f7c79e148eb40ef7838cc42c8879edf19b2e2dec64d3654fc9e2413339707ffc52fcea72524e62477bc06c4b25c3eb2068f68e75466a04540784c1a37a49bd739200575682c19281ca4d4554fac421f3317eeeee572c831667a7288ea3c1452a3f37284372b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "68492bb7b78a0ee317bbbb1873a7a603bebb64b30e9c354ad8e9d62890c0ff05b07b3636e2862d823f53c065d7335a39efd4f5d69f7cdccb7cec259e988775e6d24293fd4fdd572e75ea4bc5090a717a6d21576efa7e063bf2c4459ca4f4a37bc4a3ed51a22de35c7f2f79be22035f1aeaa6154c63269e22d3b8004bc87dfaf3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "6877a888cb38f075fda7e3866029cd03b89e5403bac294405c9cda37851361e480b4229e88eeeb05cf8161c452afe0d6beed30bdf7b8ffb83b11ff114a713454329b0c065b33aadad754f25be307d4ef9487fed7cf0475556abcd2cf42c32631fc85ec74086d7df399d2a4e96858021f48a1e1bbc609e468aaa990f2ae66415b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "22e1a03d2a88e7592227d72092e69d46d58117c470e4daf4f795a1c9569df840", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "328bfca274c552c712ce459f4fc8ed3f8ff433abd083cdf96f5f6614b2dfa23d", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "45181cea7d99e92a8884e3cd8baf34e25a6830e5daf98eaed0c9fc868e24b6179b32f03ceb28eea9898c9aef633872f4894e5e131bb6022d103143ea2795be3345dd345c6f08af00dd0856413ab25a436bcda9edb4256001bae5bc00f99aba867c78a063084b97a12f3e61cda1bca0648a914b3b271750767a64ec94449e56dd", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "4e90d504bbad5f1aff2f9a8413754a65b78ab4e1b424b448c48e72a7e9a15e1f63c9a5ca6b6ebe0567ae436d5b318793644ab9ae843e3f26fe8072301c4b9964f222d10ddd5fdd507dcc7a42c8e95e028b5030427cb08a0da98066022960ce3f0ec718dd5c7a11a29c1ae6c0a2d67df1a9b941238a6df9a669fcdbd5f83b1209", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "555687c8c4a6d4f3a55ba7dea2b0d3b7deee8171c55cc0c4827436cd11ed73213be8e9d1e37ccfbdaf5fc03c0933ba1903094a5ef46007d0b0f5d94bfbcf523b58b40385e47d4ca3e1e2d93ee577a04ab09e466516d340afd1a63f0e45f1becb495ae38362f1b3b4dca8bb97d464f51945dd774e71cca4b60f05197560037709", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "58789be0d099fadda854c510ea06f476eb838a1080813260a9f6588ef6872fce1cde66b22da8be10896a2146b3b3a9e53a8f76027455e10716cf4b68b0fac7ed2cddaad5abd8199e261243b4dbae076006e180e26ac6957a8deefdd8f3f40ac1f59757f3b4fdef063a7ed1f968c7b10070db17ff3f43a4bc4d3509fd7843be1b", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "5d53af2a404c31cbf57dc45f060188f94d2b5c5d22eaef4343045a99f7d442c3b5628dccc8ed6e293c0acc2e2cf43ca9784f248c3710233b5c30ed2e2d8fdc1ee3bbd70e94b4d21ca7d39b8ece3efa9218f6277ec04688eb09e0be5b149a1ffd58a0b22d4df4639b586535919acbcc6a8f91d803a8886c9d78e9d3ae6cb562f9", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "5fa0b36524a509a3f43f9f3b55885db9996e0c571b1c5a930a294f7721ef588029fcc34b10eaf9a83b20f2574d65b63e000d4225e66c5281dd2087f0380c966e06f8907e0488c221c65d7e292c182eba26a0c7e0b145935e6e060b616f54956b57ed7f830edc6a7cc9241060d5b7d3ae5efbf09f2a849e3d518b1641de8016db", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "67504ba6794de4dba4c88fe57b44138a34f915d2b28c0ee53ee29b517aa4e776cfc2c842936d461f748b4cafbd9409d85dca8add49774290d5fcfe8f63cbdf1cae79c936edecf954210cd67fabf4472c87b62edf28f3b7b6ee2165519c41791985e08b0950accbeb31544422040156dacd5545e6bc0e3fc07684780bf064cec5", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "45fa52c81316e6bb1ddf13e2a434e997af91d491ba8c1241dc43e134118c277f14d0fb3d4fee6ae79e8513848a8732c33b210476f2526aa36efdff33bae955c21d5ee0f641dbe5edc19ad31ac6580ae2ee5a49d62584696021de110d9d54aab4861c8d989c87383c712932fd8a16b7807246537ee73f0e200d41fac94656c2ef", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "4b727d4ba87578c1cce7de59479a88c457c29a151ab9ee1116b8e5112e55fd160810ea6157d308155a766db70476b1d4083e9755bdf7d76b3a664246033bc3839223abbcc448c0af19f86edda63c5536b255c96c35dfcf14970334105f4e2aa78e41aceed520751c3395236a0f98f7c0f5731062a443ca42d3da6b4d002c77c9", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "5892daf011100549c985d8734b9adcb3387157a6d13d64ea9c496daeb186938a5540bb91293dbfd1605e4e11ec4c1f531b07e687be0e33920cf2a551809964a8fd5ad5b2587767a28b65411cfa52e8cca1ad958bd17595fc96cd73c86a051e989c55aaee3e570a04c03edf060860c7ff3286dcc7bb04ea7fbc78fabc3a2223bd", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "5cba25865dcbc4be64f11865e171fc70d6bb66e1363264fb8481812cea191ac67331a9bdf8c93702d04de311b8e6861aeebb2c659f84597eadcdbebd575161d3d1e88debd1473ac37d84751846aa5c9c1eccf08e773fb8494ddf62c9efbc45073ea7d06b0ad6d086cb811b2001df318c38d3de85e5f968e607e45f37c181eaf7", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "4eeb0125ac29066ae9a357e4940e76e0a185dc2af10a7dc53c9aae742c62b1bc536f4088bc7f759e3befd34c241be15134cdea40b352330da9b2365f0ab3ec49d93322f0995153664328495255f0cbb64af8b3c9179fd78972027e90cfc7fbd6221b3fa6537d1c0565d623dac7a3d85aa2e9bb07452200dbcedeba62d4034a0b", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "57cd4e8bd319e97e2e8a5b9ebfdd36f719819169965c75d59511ac878e929538004e3a020f8a6e70a5ac24015eaedc689799abe07416b871eb0d851bfe222697a62541c01c187abf02a2159345eadfe78d4dfdbccd298b72f8daa29b02cd0e6321ecea87f42a3969976be794050efb243545b2c306358e9a81525c2e6ea53449", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "62c828583ddd04ac79d9ee15d51f4c0981715d0e4d618b518d124b1cb434f1c331ff19418ff2677192a0ad1178c0f23a3345cb72f8db7d9458da09218cd4573b98eaf59d1d54946e688765a781c97ad570d48908f2b42a7d057fc9b27dab2f16e87941dc5f5cf59a45e577f0489f7d04b196be09b2acc719a2f5aa6b44b4f9fd", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "5bbba81bd7241bff47300e1b8ee337e888a0b3c68f573cdb666fd0d17f7e2df872f1d7bffe6574d588ea58351f13e9f1ebbe7f2f3148d7379207c0c68a985d5bda17a493a36e1b5a67e201918ac8c3a336cf03389a11ff7a3b21024ea41630c809e5572687b2348f03e93dd6b413b7bc339bc5bf4bebbec8a4deb3ba1428a7a1", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "5f4f962f1cb4f440a2f637cb8b11f1c3de9e2829bbc8c8570d55b001f10ba6e07e3dcef1ff4cb6f91356e4295d390cbb7520bb3ac0b5f90538c243e8aa5c2ba0b3001cb8a73a2f5bef287d2637c3f6b19edc111cf99673722b0186e48f7a154d0cc8950f865ee3ae297325da09c02e74a37c1a90fc4cc76db7ce77e3b7851703", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "64c042f98199b2153ced69174a16bd0ffb017ac28a1f314f6a744e44d17caf1c083c2c88011ecfc21d03f8ef658dd80078f0c4d6d74b5e8bde650d0f46918457fddbeed697f51834894761baba70a22f27bf1b3135a1f4499db73718728e5778e1e4c12a1514350964b961cf652cb445dfbd54e2babee7a4b827675dcc2703c9", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "006700e5a2ab05704bbb0c589b88924d", - "count": 1, - "total_related": 2359, - "prevalence": 0.000423908435777872 - } - ], - "malware_config_displayed_message": [ - { - "value": "\r\n ~~~ LockBit 3.0 the world's fastest ransomware since 2019~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n\tThe data will be published on TOR website if you do not pay the ransom \r\n\r\n\tLinks for Tor Browser:\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion\r\n\r\n\tLinks for the normal browser\r\n\thttp://lockbitapt.uz\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion.ly\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion.ly\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion.ly\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion.ly\r\n\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n \r\n\tYou can obtain information about us on twitter https://twitter.com/hashtag/lockbit?f=live\r\n \r\n\r\n>>>> You need contact us and decrypt one file for free on these TOR sites with your personal DECRYPTION ID\r\n\r\n\tDownload and install TOR Browser https://www.torproject.org/\r\n\tWrite to a chat and wait for the answer, we will always answer you. \r\n\tSometimes you will need to wait for our answer because we attack many companies.\r\n\t\r\n\tLinks for Tor Browser:\r\n\thttp://lockbitsupt7nr3fa6e7xyb73lk6bw6rcneqhoyblniiabj4uwvzapqd.onion\r\n\thttp://lockbitsupuhswh4izvoucoxsbnotkmgq6durg7kficg6u33zfvq3oyd.onion\r\n\thttp://lockbitsupn2h6be2cnqpvncyhj4rgmnwn44633hnzzmtxdvjoqlp7yd.onion\r\n\r\n\tLink for the normal browser\r\n\thttp://lockbitsupp.uz\r\n\t\r\n\tIf you do not get an answer in the chat room for a long time, the site does not work and in any other emergency, you can contact us in jabber or tox.\r\n\t\r\n\tTox ID LockBitSupp: 3085B89A0C515D2FB124D645906F5D3DA5CB97CEBEA975959AE4F95302A04E1D709C3C4AE9B7\r\n\tXMPP (Jabber) Support: 598954663666452@exploit.im 365473292355268@thesecure.biz\r\n\t\r\n>>>> Your personal DECRYPTION ID: %s\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!\r\n\r\n\r\n>>>> Advertisement\r\n\t\r\n\tWould you like to earn millions of dollars $$$ ?\r\n\r\n\tOur company acquire access to networks of various companies, as well as insider information that can help you steal the most valuable data of any company. \r\n\tYou can provide us accounting data for the access to any company, for example, login and password to RDP, VPN, corporate email, etc. \r\n\tOpen our letter at your email. Launch the provided virus on any computer in your company.\r\n\r\n\tYou can do it both using your work computer or the computer of any other employee in order to divert suspicion of being in collusion with us.\r\n\r\n\tCompanies pay us the foreclosure for the decryption of files and prevention of data leak.\r\n\r\n\tYou can contact us using Tox messenger without registration and SMS https://tox.chat/download.html. \r\n\tUsing Tox messenger, we will never know your real name, it means your privacy is guaranteed.\r\n\r\n\tIf you want to contact us, write in jabber or tox. \r\n\t\r\n\tTox ID LockBitSupp: 3085B89A0C515D2FB124D645906F5D3DA5CB97CEBEA975959AE4F95302A04E1D709C3C4AE9B7\r\n\tXMPP (Jabber) Support: 598954663666452@exploit.im 365473292355268@thesecure.biz\r\n\t\r\n\tIf this contact is expired, and we do not respond you, look for the relevant contact data on our website via Tor or Brave browser \r\n\t\r\n\tLinks for Tor Browser:\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion\r\n\r\n\t\r\n\tLinks for the normal browser\r\n\thttp://lockbitapt.uz\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion.ly\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion.ly\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion.ly\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion.ly", - "count": 30, - "total_related": 321, - "prevalence": 0.09345794392523364 - }, - { - "value": "\r\n ~~~ LockBit 3.0 the world's fastest ransomware since 2019~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n\tThe data will be published on TOR website if you do not pay the ransom \r\n\r\n\tLinks for Tor Browser:\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion\r\n\r\n\tLinks for the normal browser\r\n\thttp://lockbitapt.uz\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion.ly\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion.ly\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion.ly\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion.ly\r\n\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n \r\n\tYou can obtain information about us on twitter https://twitter.com/hashtag/lockbit?f=live\r\n \r\n\r\n>>>> You need contact us and decrypt one file for free on these TOR sites with your personal DECRYPTION ID\r\n\r\n\tDownload and install TOR Browser https://www.torproject.org/\r\n\tWrite to a chat and wait for the answer, we will always answer you. \r\n\tSometimes you will need to wait for our answer because we attack many companies.\r\n\t\r\n\tLinks for Tor Browser:\r\n\thttp://lockbitsupt7nr3fa6e7xyb73lk6bw6rcneqhoyblniiabj4uwvzapqd.onion\r\n\thttp://lockbitsupuhswh4izvoucoxsbnotkmgq6durg7kficg6u33zfvq3oyd.onion\r\n\thttp://lockbitsupn2h6be2cnqpvncyhj4rgmnwn44633hnzzmtxdvjoqlp7yd.onion\r\n\r\n\tLink for the normal browser\r\n\thttp://lockbitsupp.uz\r\n\t\r\n\tIf you do not get an answer in the chat room for a long time, the site does not work and in any other emergency, you can contact us in jabber or tox.\r\n\t\r\n\tTox ID LockBitSupp: 3085B89A0C515D2FB124D645906F5D3DA5CB97CEBEA975959AE4F95302A04E1D709C3C4AE9B7\r\n\tXMPP (Jabber) Support: 598954663666452@exploit.im 365473292355268@thesecure.biz\r\n\t\r\n>>>> Your personal DECRYPTION ID: B7568014A48684D6D525F3F3722638C4\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!\r\n\r\n\r\n>>>> Advertisement\r\n\t\r\n\tWould you like to earn millions of dollars $$$ ?\r\n\r\n\tOur company acquire access to networks of various companies, as well as insider information that can help you steal the most valuable data of any company. \r\n\tYou can provide us accounting data for the access to any company, for example, login and password to RDP, VPN, corporate email, etc. \r\n\tOpen our letter at your email. Launch the provided virus on any computer in your company.\r\n\r\n\tYou can do it both using your work computer or the computer of any other employee in order to divert suspicion of being in collusion with us.\r\n\r\n\tCompanies pay us the foreclosure for the decryption of files and prevention of data leak.\r\n\r\n\tYou can contact us using Tox messenger without registration and SMS https://tox.chat/download.html. \r\n\tUsing Tox messenger, we will never know your real name, it means your privacy is guaranteed.\r\n\r\n\tIf you want to contact us, write in jabber or tox. \r\n\t\r\n\tTox ID LockBitSupp: 3085B89A0C515D2FB124D645906F5D3DA5CB97CEBEA975959AE4F95302A04E1D709C3C4AE9B7\r\n\tXMPP (Jabber) Support: 598954663666452@exploit.im 365473292355268@thesecure.biz\r\n\t\r\n\tIf this contact is expired, and we do not respond you, look for the relevant contact data on our website via Tor or Brave browser \r\n\t\r\n\tLinks for Tor Browser:\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion\r\n\r\n\t\r\n\tLinks for the normal browser\r\n\thttp://lockbitapt.uz\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion.ly\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion.ly\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion.ly\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion.ly", - "count": 10, - "total_related": 117, - "prevalence": 0.08547008547008547 - }, - { - "value": "\r\n\r\nAll of your files are currently encrypted. \r\n\r\nAs you know if you don't - just google it all of the data that has been encrypted by our software cannot be recovered by any software means without contacting our team directly you will lose all your files :/\r\nIf you try to use any additional recovery software - the files might be damaged so if you are willing to try - try it on the data of the lowest value\r\n\r\nTo make sure that we REALLY CAN get your data back - we offer you to decrypt 2 random files completely free of charge\r\n\r\nYou can contact our team directly for further instructions through our contact: https://t.me/Diamotrix ", - "count": 8, - "total_related": 9, - "prevalence": 0.8888888888888888 - }, - { - "value": "\r\n ~~~ davids malware uwu~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n uwu >.<\r\n\t\r\n\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n i alr got all ur info g ur fucked and i just want money\r\n\r\n>>>> You need contact me and i will decrypt one file for free hmu with your personal DECRYPTION ID\r\n\r\nhmu on discord @ lo_.z\r\n\r\n\t\r\n\t\r\n>>>> Your personal DECRYPTION ID: B7568014A48684D6D525F3F3722638C4\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!\r\n\r\n\r\n>>>> Advertisement\r\n\t\r\n\t\r\n\r\n\t\r\n\tLinks for the normal browser\r\n\thttp://lockbitapt.uz\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion.ly\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion.ly\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion.ly\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion.ly", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "\r\n>>>> Your data are stolen and encrypted!\r\n\r\n>>>> Sensitive data on your system was DOWNLOADED and it will be PUBLISHED if you refuse to cooperate. Your competitors or law enforcement may get them on the web.\r\n\r\n\r\nData includes:\r\n- Employees personal data, CVs, DL, SSN.\r\n- Complete network map including credentials for local and remote services.\r\n- Financial information including clients data, bills, budgets, annual reports, bank statements.\r\n- Complete datagrams/schemas/drawings for manufacturing in solidworks format\r\n- And more...\r\n\r\nYou can request the tree of files that we have.\r\n\r\n>>>> You need contact us and decrypt one file for free, send a small file for test decryption with your personal DECRYPTION ID to tox chat:\r\n\r\n>>>> Your personal DECRYPTION ID: %s\r\n\r\n\r\n1)Download and install TOX chat: https://tox.chat\r\n2)Write to this tox id: DED25DCB2AAAF65A05BEA584A0D1BB1D55DD2D8BB4185FA39B5175C60C8DDD0C0A7F8A8EC815 and wait for the answer, we will always answer you.\r\n\r\n\r\n>>>> DO NOT MODIFY FILES YOURSELF.\r\n>>>> DO NOT USE THIRD PARTY SOFTWARE TO RESTORE YOUR DATA.\r\n>>>> YOU MAY DAMAGE YOUR FILES, IT WILL RESULT IN PERMANENT DATA LOSS.\r\n>>>> YOUR DATA IS STRONGLY ENCRYPTED, YOU CAN NOT DECRYPT IT WITHOUT CIPHER KEY.", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "\r\n ~~~ LockBit 4.0 Ransomware since 2024~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n\tPrice = 1000 $ \r\n Bitcoin = 328N9mKT6xFe6uTvtpxeKSymgWCbbTGbK2\r\n Email = jimyjoy139@proton.me\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n \r\n\t\r\n>>>> Your personal DECRYPTION ID: A3138014A48684D6D525F3F372263313\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!\r\n", - "count": 4, - "total_related": 9, - "prevalence": 0.4444444444444444 - }, - { - "value": "Rans0m Resp0nse R|R The World's Greatest Ransomware\r\n\r\n>>>> If you are reading this then we are sorry to inform you that you are the Victim of the most sophisticated Ransomeware Malware on the planet. Every single file document and all data on your systems \r\n\t has now been encrypted with military grade encryption. Also We have made copies of ALL file systems and uploaded this data to our servers. Thankfully for you we have the one and only way\r\n\t to restore all of your files back to normal like this never happened and that way is with our decryptor program and decryption keys. \r\n In order for us to allow you to have everything back and restored including all of your files and a promise we will never leak or sell the data we have stored on our servers \r\n all you need to do is pay 4800 USD worth of the Cryptocurrency Bitcoin. So just purchase Bitcoin four thousand eight hundred dollars worth and then send the bitcoin to the following \r\n Bitcoin Wallet Address bc1qarhtk9c2krzaaak9way0nuuac87mnuya8cpf4x\r\n\t \r\n\t You have 72 hours from reading this message to pay the 4800 USD in bitcoin to the wallet address above or we will assume you are not cooperating and will sell ALL of your data to other\r\n\t CyberCrime Groups Business Competitors and Anyone else who would love to pay money for it. Failing to pay not only gets your data leaked and sold but we will continue to \r\n\t impose cyber attacks on every system you have. We can promise you it is in your best interest to pay the small amount and have all your files restored within 10 minutes of paying us.\r\n\t If for some reason you need to contact us you can do so over TOX client just go to the website tox.chat and download it. \r\n Once you make a username and login to TOX you can then message us via our TOX ID which is as follows CB7D4BE06A39B950378A56201A5FD59EF7A4EE62D74E8ADE7C1F47745E070A4A4AD46389FFB2\r\n\t\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tAFter you pay we will provide you the programs for decryption along with the keys and we will delete your data. \r\n\tLife is too short to be sad. Be not sad money it is only paper.\r\n \r\n\tIf we do not give decryptor and keys after payment or we do not delete your data after payment then nobody will pay us in the future. \r\n\tTherefore our reputation is very important to us. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n \r\n>>>> Warning! Do not DELETE or MODIFY any files it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "\r\n ~~~ LockBit 3.0 the world's fastest ransomware since 2019~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n\tThe data will be published on TOR website if you do not pay the ransom \r\n\r\n\tyou need to transfer 1 monero to this account otherwise your files will be deleted forever:87UysM3HKs8K5MqEwXGnSBAECCUMhf6voZQBUJivYcfYCjbKB8iMexrGrAKFd1Nqqp36eusTSvfuxKiXrUWBtqZt2PtqDmp\r\n\r\n\tI am a private entrepreneur who uses other people's things. To contact me, write to me at tox:643AEA81DD7E8022CB560BD12B72BF62D93668E05659A2CB23A2F9888FDCBF77E8CB1169D117\r\n\t\r\n\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n \r\n\r\n\r\n\t\r\n>>>> Your personal DECRYPTION ID: B7568014A48684D6D525F3F3722638C4\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!\r\n\r\n", - "count": 3, - "total_related": 6, - "prevalence": 0.5 - }, - { - "value": "~~~ You have been attacked by LockBit 4.0 - the fastest, most stable and immortal ransomware since 2019 ~~~~\r\n\r\n>>>>> You must pay us.\r\n\r\nTor Browser Links BLOG where the stolen infortmation will be published:\r\n( often times to protect our web sites from ddos attacks we include ACCESS KEY - ADTISZRLVUMXDJ34RCBZFNO6BNKLEYKYS5FZPNNXK4S2RSHOENUA )\r\nhttp://lockbit3753ekiocyo5epmpy6klmejchjtzddoekjlnt6mu3qh4de2id.onion/\r\nhttp://lockbit3g3ohd3katajf6zaehxz4h4cnhmz5t735zpltywhwpc6oy3id.onion/\r\nhttp://lockbit3olp7oetlc4tl5zydnoluphh7fvdt5oa6arcp2757r7xkutid.onion/\r\nhttp://lockbit435xk3ki62yun7z5nhwz6jyjdp2c64j5vge536if2eny3gtid.onion/\r\nhttp://lockbit4lahhluquhoka3t4spqym2m3dhe66d6lr337glmnlgg2nndad.onion/\r\nhttp://lockbit6knrauo3qafoksvl742vieqbujxw7rd6ofzdtapjb4rrawqad.onion/\r\nhttp://lockbit7ouvrsdgtojeoj5hvu6bljqtghitekwpdy3b6y62ixtsu5jqd.onion/\r\n\r\n>>>>> What is the guarantee that we won't scam you? \r\nWe are the oldest extortion gang on the planet and nothing is more important to us than our reputation. We are not a politically motivated group and want nothing but financial rewards for our work. If we defraud even one client, other clients will not pay us. In 5 years, not a single client has been left dissatisfied after making a deal with us. If you pay the ransom, we will fulfill all the terms we agreed upon during the negotiation process. Treat this situation simply as a paid training session for your system administrators, because it was the misconfiguration of your corporate network that allowed us to attack you. Our pentesting services should be paid for the same way you pay your system administrators' salaries. You can get more information about us on Elon Musk's Twitter at https://twitter.com/hashtag/lockbit?f=live.\r\n\r\n>>>>> Warning! Do not delete or modify encrypted files, it will lead to irreversible problems with decryption of files!\r\n\r\n>>>>> Don't go to the police or the FBI for help and don't tell anyone that we attacked you. They will forbid you from paying the ransom and will not help you in any way, you will be left with encrypted files and your business will die.\r\n\r\n>>>>> When buying bitcoin, do not tell anyone the true purpose of the purchase. Some brokers, especially in the US, do not allow you to buy bitcoin to pay ransom. Communicate any other reason for the purchase, such as: personal investment in cryptocurrency, bitcoin as a gift, paying to buy assets for your business using bitcoin, cryptocurrency payment for consulting services, cryptocurrency payment for any other services, cryptocurrency donations, cryptocurrency donations for Donald Trump to win the election, buying bitcoin to participate in ICO and buy other cryptocurrencies, buying cryptocurrencies to leave an inheritance for your children, or any other purpose for buying cryptocurrency. Also you can use adequate cryptocurrency brokers who do not ask questions for what you buy cryptocurrency.\r\n\r\n>>>>> After buying cryptocurrency from a broker, store the cryptocurrency on a cold wallet, such as https://electrum.org/ or any other cold cryptocurrency wallet, more details on https://bitcoin.org By paying the ransom from your personal cold cryptocurrency wallet, you will avoid any problems from regulators, police and brokers.\r\n\r\n>>>>> Don't be afraid of any legal consequences, you were very scared, that's why you followed all our instructions, it's not your fault if you are very scared. Not a single company that paid us has had issues. Any excuses are just for insurance company to not pay on their obligation.\r\n\r\n>>>>> You need to contact us via TOR darknet sites with your personal ID\r\n\r\nDownload and install Tor Browser https://www.torproject.org/\r\nWrite to the chat room and wait for an answer, we'll guarantee a response from us. If you need a unique ID for correspondence with us that no one will know about, ask it in the chat, we will generate a secret chat for you and give you ID via private one-time memos service, no one can find out this ID but you. Sometimes you will have to wait some time for our reply, this is because we have a lot of work and we attack hundreds of companies around the world.\r\n\r\nTor Browser personal link for CHAT available only to you: \r\n( often times to protect our web sites from ddos attacks we include ACCESS KEY - ADTISZRLVUMXDJ34RCBZFNO6BNKLEYKYS5FZPNNXK4S2RSHOENUA )\r\nhttp://xvt5hvgldlzbll33sytrafy4sczfnqzrzdfuxe272iiaaw7pgogcxbid.onion\r\n\r\nTor Browser Links for CHAT \r\n( often times to protect our web sites from ddos attacks we include ACCESS KEY - ADTISZRLVUMXDJ34RCBZFNO6BNKLEYKYS5FZPNNXK4S2RSHOENUA )\r\nhttp://lockbitspyakyequybgwgwauhzqxx7ba2gh3lmlj3zyeuaknrexdzfid.onion\r\nhttp://lockbitspxmqqfi6bw4y7f5psnpoaakhlisdx33busmnpgtimart5fad.onion\r\nhttp://lockbitspxgtf65ej7uu5h7qtephbevcsc2sk2brxzmt754etrrzhdqd.onion\r\nhttp://lockbitspudgjptrzadjzi7b4n2nw3yq6aqqqqw6wbrrjkr2ffuhkhyd.onion\r\nhttp://lockbitsptqsmaf56cmo7bieqwh5htlsfkodpahsaurxlquoz67zwrad.onion\r\n\r\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\r\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\r\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\r\n>>>>> Your personal identifier to communicate with us ID: %s <<<<<\r\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\r\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\r\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\r\n\r\n>>>>> Want a lamborghini, a ferrari and lots of titty girls? Sign up and start your pentester billionaire journey in 5 minutes with us.\r\n( often times to protect our web sites from ddos attacks we include ACCESS KEY - ADTISZRLVUMXDJ34RCBZFNO6BNKLEYKYS5FZPNNXK4S2RSHOENUA )\r\nhttp://lockbitapyx2kr5b7ma7qn6ziwqgbrij2czhcbojuxmgnwpkgv2yx2yd.onion\r\nhttp://lockbitapyum2wks2lbcnrovcgxj7ne3ua7hhcmshh3s3ajtpookohqd.onion\r\nhttp://lockbitapp24bvbi43n3qmtfcasf2veaeagjxatgbwtxnsh5w32mljad.onion\r\nhttp://lockbitapo3wkqddx2ka7t45hejurybzzjpos4cpeliudgv35kkizrid.onion\r\nhttp://lockbitapiahy43zttdhslabjvx4q6k24xx7r33qtcvwqehmnnqxy3yd.onion\r\n\r\nVersion: LockBitBlack4.0-rc-001\r\n", - "count": 3, - "total_related": 7, - "prevalence": 0.42857142857142855 - }, - { - "value": "\r\n\t\t\t!! ALL YOUR FILES ARE ENCRYPTED !!!\r\n\t\t\t\r\n\t\t\tYou can't restore them without our decryptor.\r\n\t\t\t\r\n\t\t\tDon't try to use any public tools, you could damage the files and lose them forever.\r\n\t\t\t\r\n\t\t\tTo make sure our decryptor works, contact us and decrypt one file for free.\r\n\t\t\t\r\n\t\t\tDownload TOX messenger: https://tox.chat/\r\n\t\t\t\r\n\t\t\tAdd friend in TOX, ID: 36F186C6FDCAAC0CF122E234B5D15F3F42F73568745F251C1306D71EBCA96817770F9B9AC2E6", - "count": 3, - "total_related": 20, - "prevalence": 0.15 - }, - { - "value": "\n Attention!\r\n\r\n\r\nAll your imortant files were encrypted!\r\n\r\n\r\nIf you want to return files back, email us \r\n\r\n\r\ncriptoman@mailfence.com or\r\n\r\n\r\ngizmo12@tutanota.com \r\n\r\n\r\nand specify your ID - 6800484869412518\r\n\r\n\r\nDon't try to decrypt by yourself - \r\n\r\nyou can loose all your files permanently!\r\n\r\n\r\nDon't move or modify files! \r\n\r\n\r\nTo prove that we can decrypt your files, send 3 any \r\n\r\nencrypted files (up to 3 Mb) and we decrypt them for free.", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "\r\n\r\n>>>> \tYour data are stolen and encrypted, The data will be published on TOR website if you do not pay the ransom.\r\n\r\n\r\n>>>> \tAll your files have been encrypted and hacked, Your computer was infected with a ransomware virus. Your files have been encrypted \tand you won't be able to decrypt them without our help. What can I do to get my files back? You can buy our special decryption \t\tsoftware, which will allow you to recover all your data and remove the ransomware from your computer.\r\n \r\n\tSend us money or we will fuck up your files and then leak it. pay us 0.00245 ($250) Bitcoin only. \r\n You have to pay it within 24 hours. Good luck!\r\n\tOur Bitcoin Address is: 16ynmPuaMdjYTfuHtWNxfPYAE88An9TMyd\r\n\r\n\tPayment Amount: 0.0024 BTC ($250)\r\n\tBitcoin Address: 16ynmPuaMdjYTfuHtWNxfPYAE88An9TMyd\r\n\tContact Us (After Payment Only): cryhacker360@protonmail.com\r\n\r\n\r\n\r\n>>>> Your personal DECRYPTION ID: %s\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "\r\n\r\nHello\r\n\r\n\r\nWe are a team of high-level competent team of Pentesters but NOT a THREAT to your reputable organization\r\n\r\nWe secure networks of companies to avoid complete destruction and damages to companies\r\n\r\nWe encrypted all files on Your servers to show sign of breach / network intrusion\r\n\r\n\r\nTo resolve this Continue reading !!!!\r\n\r\nALL files oN Your Entire Network Servers and Connected Devices are Encrypted.\r\n\r\nMeans , Files are modified and are not usable at the moment.\r\n\r\n\r\nDon't Panic !!!\r\n\r\nAll Encrypted files can be reversed to original form and become usable .\r\n\r\nThis is Only Possible if you buy the universal Decryption software from me.\r\n\r\n\r\nPrice for universal Decryption Software : $ Contact us either through email or tox chat app for the ransom price $\r\n\r\n\r\nYou Have 72 hours To Make Payment As Price of Universal Decryption software increases by $1000 dollars every 24 hours.\r\n\r\n\r\nContact our team through email: bl00dyadmin@dnmx.org\r\n\r\nYou can write me on tox: \r\n\r\nDownload tox app from https://tox.chat\r\n\r\nCreate new Account ..\r\n\r\nSend me friend request using my tox id:\r\n\r\n\r\nE5BBFAD2DB3FB497EA03612B2428F927FD8A9B3333D524FD51D43B029B7870571CEB0166CB03\r\n\r\n*copy and paste it as it is*\r\n\r\n\r\nBefore You Pay me ... I will Decrypt 3 files for free To proof the universal Decryption software works\r\n\r\nFailure to Pay Me :\r\n\r\nKindly RESPECT my Rules\r\n\r\nNote: Huge amounts of Data / documents has been stolen from your Network servers and will be published online for free\r\n\r\nI have stolen All Your Databases ; DAta on your shared drives ; AD users Emails(Good for Spam) ;\r\n\r\ni have stolen huge amount of critical data from your servers\r\n\r\n* I keep the breach private only if your cooperate *\r\n", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "\r\n ~~~ LockBit 3.0 the world's fastest ransomware since 2019~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n\tThe data will be published on TOR website if you do not pay the ransom \r\n\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n\t\r\n>>>> You need to contact us with your personal DECRYPTION ID: %s\r\n\r\n>>>> To contact us:\r\n\r\n\t1. Download Getsesion https://getsession.org/download\r\n\t2. Add friend my id: 05e4263403161708dbe4c152d73c83ffd113fe509896008e590f730e29e849a53f\r\n \r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "Hello! \r\n\r\nYour files have been stolen from your network and encrypted with a strong algorithm. We work for money and are not associated with politics. All you need to do is contact us and pay.\r\n\r\n--- Our communication process:\r\n\r\n\t1. You contact us.\r\n\t2. We send you a list of files that were stolen.\r\n\t3. We decrypt 1 file to confirm that our decryptor works.\r\n\t4. We agree on the amount, which must be paid using BTC.\r\n\t5. We delete your files, we give you a decryptor.\r\n\t6. We give you a detailed report on how we compromised your company, and recommendations on how to avoid such situations in the future.\r\n \r\n--- Client area (use this site to contact us):\r\n\r\n\tLink for Tor Browser: http://3pktcrcbmssvrnwe5skburdwe2h3v6ibdnn5kbjqihsg6eu6s6b7ryqd.onion\r\n\t>>> Use this ID: %s to begin the recovery process.\r\n\t\r\n\t* In order to access the site, you will need Tor Browser, \r\n\t you can download it from this link: https://www.torproject.org/\r\n\r\n--- Additional contacts:\r\n\r\n\tSupport Tox: 1C054B722BCBF41A918EF3C485712742088F5C3E81B2FDD91ADEA6BA55F4A856D90A65E99D20\r\n\r\n--- Recommendations: \r\n\r\n\tDO NOT RESET OR SHUTDOWN - files may be damaged.\r\n\tDO NOT RENAME OR MOVE the encrypted and readme files.\r\n\tDO NOT DELETE readme files.\r\n\r\n--- Important:\r\n\r\n\tIf you refuse to pay or do not get in touch with us, we start publishing your files.\r\n\t02/05/2024 00:00 UTC the decryptor will be destroyed and the files will be published on our blog.\r\n\t\r\n\tBlog: http://z3wqggtxft7id3ibr7srivv5gjof5fwg76slewnzwwakjuf3nlhukdid.onion\r\n\r\nSincerely, 01000100 01110010 01100001 01100111 01101111 01101110 01000110 01101111 01110010 01100011 01100101", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "Your decrypt ID: 22afabc7-0101-4bf0-bd4d-e937aa8275cb\r\n\t\r\nQTox ID Support: 3DCE1C43491FC92EA7010322040B254FDD2731001C2DDC2B9E819F0C946BDC3CD251FA3B694A\r\n\t\r\nEmail Support: ziqbwnscvbsj@proton.me,asdcspocnsdke@proton.me,tfefwapyasd3@proton.me\r\n\r\nYou can contact us in email or qtox.", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "\r\n ~~~ LockBit 3.0 the world's fastest ransomware since 2019~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n\tThe data will be published on TOR website if you do not pay the ransom \r\n\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n \r\n\tYou can obtain information about us on twitter https://twitter.com/hashtag/lockbit?f=live\r\n \r\n\r\n>>>> You need contact us and provide your personal DECRYPTION ID to: taliban88@proton.me\r\n\r\n Then you must send 2 BTC to address: bc1qw860t6dplpchu55f8gyykpu75fagwltx9e6y3h\r\n Only then, we will send you the key to decrypt your company!\r\n\r\n\t\r\n>>>> Your personal DECRYPTION ID: B7568014A48684D6D525F3F3722638C4\r\n\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!\r\n\r\n", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "\r\n ~~~ LockBit 3.0~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n\tThe data will be published on TOR website if you do not pay the ransom \r\n\r\n\tLinks for Tor Browser:\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion\r\n\r\n\tLinks for the normal browser\r\n\thttp://lockbitapt.uz\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion.ly\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion.ly\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion.ly\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion.ly\r\n\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything but your money.\r\n\r\n\tIf you do what we want, we will provide you with a program to decrypt and we will delete your data.\r\n\r\n\tLife is too short to be sad. Do not be sad, my request is only easy.\r\n\r\n\tIf we do not give you the decryption, or we do not delete your data after you do our orders.\r\n\tTherefore, for us your reputation is very important. We attack companies that we have targeted and there are no dissatisfied victims after doing my orders.\r\n\r\n\tYou can get information about us on twitter https://twitter.com/hashtag/lockbit?f=live\r\n \r\n\r\n>>>> You need contact us and decrypt one file for free on these TOR sites with your personal DECRYPTION ID\r\n\r\n\tDownload and install TOR Browser https://www.torproject.org/\r\n\tWrite to a chat and wait for the answer, we will always answer you. \r\n\tSometimes you will need to wait for our answer because we attack many companies.\r\n\t\r\n\tLinks for Tor Browser:\r\n\thttp://lockbitsupt7nr3fa6e7xyb73lk6bw6rcneqhoyblniiabj4uwvzapqd.onion\r\n\thttp://lockbitsupuhswh4izvoucoxsbnotkmgq6durg7kficg6u33zfvq3oyd.onion\r\n\thttp://lockbitsupn2h6be2cnqpvncyhj4rgmnwn44633hnzzmtxdvjoqlp7yd.onion\r\n\r\n\tLink for the normal browser\r\n\thttp://lockbitsupp.uz\r\n\t\r\n\tIf you do not get an answer in the chat room for a long time, the site does not work and in any other emergency, you can contact us in jabber or tox.\r\n\t\r\n\tTox ID LockBitSupp: 3085B89A0C515D2FB124D645906F5D3DA5CB97CEBEA975959AE4F95302A04E1D709C3C4AE9B7\r\n\tXMPP (Jabber) Support: 598954663666452@exploit.im 365473292355268@thesecure.biz\r\n\t\r\n>>>> Your personal DECRYPTION ID: B7568014A48684D6D525F3F3722638C4\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "Hello! \r\n\r\nYour files have been stolen from your network and encrypted with a strong algorithm. We work for money and are not associated with politics. All you need to do is contact us and pay.\r\n\r\n--- Our communication process:\r\n\r\n\t1. You contact us.\r\n\t2. We send you a list of files that were stolen.\r\n\t3. We decrypt 1 file to confirm that our decryptor works.\r\n\t4. We agree on the amount, which must be paid using BTC.\r\n\t5. We delete your files, we give you a decryptor.\r\n\t6. We give you a detailed report on how we compromised your company, and recommendations on how to avoid such situations in the future.\r\n \r\n--- Client area (use this site to contact us):\r\n\r\n\tLink for Tor Browser: http://3pktcrcbmssvrnwe5skburdwe2h3v6ibdnn5kbjqihsg6eu6s6b7ryqd.onion\r\n\t>>> Use this ID: %s to begin the recovery process.\r\n\t\r\n\t* In order to access the site, you will need Tor Browser, \r\n\t you can download it from this link: https://www.torproject.org/\r\n\r\n--- Additional contacts:\r\n\r\n\tSupport Tox: 1C054B722BCBF41A918EF3C485712742088F5C3E81B2FDD91ADEA6BA55F4A856D90A65E99D20\r\n\r\n--- Recommendations: \r\n\r\n\tDO NOT RESET OR SHUTDOWN - files may be damaged.\r\n\tDO NOT RENAME OR MOVE the encrypted and readme files.\r\n\tDO NOT DELETE readme files.\r\n\r\n--- Important:\r\n\r\n\tIf you refuse to pay or do not get in touch with us, we start publishing your files.\r\n\t26/04/2024 00:00 UTC the decryptor will be destroyed and the files will be published on our blog.\r\n\t\r\n\tBlog: http://z3wqggtxft7id3ibr7srivv5gjof5fwg76slewnzwwakjuf3nlhukdid.onion\r\n\r\nSincerely, 01000100 01110010 01100001 01100111 01101111 01101110 01000110 01101111 01110010 01100011 01100101", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "\n ~~~NULLBULGE LOCK - BASED ON LOCKBIT~~~\n\n\t>>>> Your data is encrypted... but dont freak out\n\n\tIf we encrypted you, you majorly fucked up. But... all can be saved\n\tBut not for free, we require an xmr payment\n\n\t>>>> What guarantees that we will not deceive you? \n\n\tWe are not a politically motivated group and we do not need anything other than your money. \n \n\tIf you pay, we will provide you the programs for decryption.\n\tLife is too short to be sad. Dont be sad money is only paper. Your files are more important than paper right?\n \n\tIf we do not give you decrypter then nobody will pay us in the future. \n\tTo us, our reputation is very important. There is no dissatisfied victim after payment.\n \n\n>>>> You may contact us and decrypt one file for free on these TOR sites with your personal DECRYPTION ID\n\n\tDownload and install TOR Browser https://www.torproject.org/\n\tWrite to a chat and wait for the answer, we will always answer you. \n\tSometimes you will need to wait a while\n\t\n\tLinks for Tor Browser:\n\thttp://nullblgtk7dwzpfklgktzll27ovvnj7pvqkoprmhubnnb32qcbmcpgid.onion/\n\n\tLink for the normal browser\n\thttp://group.goocasino.org\r\n\thttps://nullbulge.com\n\t\n>>>> Your personal DECRYPTION ID: %s\n\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "\r\n\t\t\t\t\t ~~~ Unlock your files! ~~\r\n\t Hello, we hacked your PC and encrypted all your files.\r\n\t BUT!!! Fear not, you can decrypt your files and recover everything very easy,\r\n\r\n\t You just need to pay a smaill ammount. this is just bussiness.\r\n\r\n\t You pay the ransom, we give you the file to decrypt your files, and we move on.\r\n\r\n\t We won't attack you again, or talk to anyone about this.\r\n\r\n\t Send an email to soneie2020@cock.li or sonrie2020@proton.me and talk to us.\r\n\r\n\t You would need to buy XMR (Monero) to make the payment, it's very easy.\r\n\r\n \tor follow an online guide, ask us in the email if you need help.\r\n\r\n\t\t\t\t\t>>>> \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t>>>> Your personal DECRYPTION ID: %s\r\n\r\n\t\t\t\t\t>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n\t\t\t\t\t>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "\r\n!!! ALL YOUR FILES ARE ENCRYPTED!!!\r\n\r\nAll your files, documents, photos, databases and other important files are encrypted.\r\nThe only way to recover your files is to use a decryptor.\r\nTo get the decryptor, write to us by mail or telegram, specify the ID of the encrypted files in the letter:\r\n\r\nEmail: decryptor@cyberfear.com\r\nTelegram: https://t.me/bit_decryptor\r\n\r\nWarning.\r\n* Do not rename encrypted files.\r\n* Do not attempt to decrypt data using third party software as this may result in permanent data loss.\r\n* Do not contact other people, only we can help you and recover your data.\r\n\r\nYour personal decryption ID: %s\r\n", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "\r\n\t\t\t!! ALL YOUR FILES ARE ENCRYPTED !!!\r\n\t\t\t\r\n\t\t\tYou can't restore them without our decryptor.\r\n\t\t\t\r\n\t\t\tDon't try to use any public tools, you could damage the files and lose them forever.\r\n\t\t\t\r\n\t\t\tTo make sure our decryptor works, contact us and decrypt one file for free.\r\n\t\t\t\r\n\t\t\tDownload TOX messenger: https://tox.chat/\r\n\t\t\t\r\n\t\t\tAdd friend in TOX, ID: C95CA1986286917777625663BAE618AA883B64AD411FCB5DD8E93FA8C47E7F3D287985558F82", - "count": 2, - "total_related": 9, - "prevalence": 0.2222222222222222 - }, - { - "value": "\r\n!!!All of your files are encrypted!!!\r\nTo decrypt them send e-mail to this address: fastwindGlobe@mail.ee\r\nIn case of no answer in 24h, send e-mail to this address: fastwindglobe@cock.li\r\nYou can also contact us via Telegram: @decryptfastwind\r\nIn case of non-payment, all your files will be posted to the public Internet!\r\nYour personal DECRYPTION ID: %s\r\n", - "count": 2, - "total_related": 10, - "prevalence": 0.2 - }, - { - "value": "\r\n~~ LockBit 3.0 the world's fastest and most stable ransomware from 2019~~~\r\n\r\n>>>>> Your data is stolen and encrypted.\r\n\r\nBLOG Tor Browser Links:\r\nhttp://lockbit3753ekiocyo5epmpy6klmejchjtzddoekjlnt6mu3qh4de2id.onion/\r\nhttp://lockbit3g3ohd3katajf6zaehxz4h4cnhmz5t735zpltywhwpc6oy3id.onion/\r\nhttp://lockbit3olp7oetlc4tl5zydnoluphh7fvdt5oa6arcp2757r7xkutid.onion/\r\nhttp://lockbit435xk3ki62yun7z5nhwz6jyjdp2c64j5vge536if2eny3gtid.onion/\r\nhttp://lockbit4lahhluquhoka3t4spqym2m3dhe66d6lr337glmnlgg2nndad.onion/\r\nhttp://lockbit6knrauo3qafoksvl742vieqbujxw7rd6ofzdtapjb4rrawqad.onion/\r\nhttp://lockbit7ouvrsdgtojeoj5hvu6bljqtghitekwpdy3b6y62ixtsu5jqd.onion/\r\n\r\n>>>>> What guarantee is there that we won't cheat you? \r\nWe are the oldest ransomware affiliate program on the planet, nothing is more important than our reputation. We are not a politically motivated group and we want nothing more than money. If you pay, we will fulfill all the terms we agree on during the negotiation process. Treat this situation simply as a paid training session for your system administrators, because it was the misconfiguration of your corporate network that allowed us to attack you. Our pentesting services should be paid for the same way you pay your system administrators salaries. You can get more information about us on Ilon Musk's Twitter https://twitter.com/hashtag/lockbit?f=live\r\n \r\n>>>>> You need to contact us on TOR darknet sites with your personal ID\r\n\r\nDownload and install Tor Browser https://www.torproject.org/\r\nWrite to the chat room and wait for an answer, we'll guarantee a response from us. If you need a unique ID for correspondence with us that no one will know about, ask it in the chat, we will generate a secret chat for you and give you his ID via private one-time memos service, no one can find out this ID but you. Sometimes you will have to wait some time for our reply, this is because we have a lot of work and we attack hundreds of companies around the world.\r\n\r\nTor Browser personal link for CHAT available only to you (available during a ddos attack): \r\n\r\n\r\nTor Browser Links for CHAT (sometimes unavailable due to ddos attacks):\r\nhttp://lockbit5eevg7vec4vwwtzgkl4kulap6oxbic2ye4mnmlq6njnpc47qd.onion\r\nhttp://lockbit74beza5z3e3so7qmjnvlgoemscp7wtp33xo7xv7f7xtlqbkqd.onion\r\nhttp://lockbit75naln4yj44rg6ez6vjmdcrt7up4kxmmmuvilcg4ak3zihxid.onion\r\nhttp://lockbit7a2g6ve7etbcy6iyizjnuleffz4szgmxaawcbfauluavi5jqd.onion\r\nhttp://lockbitaa46gwjck2xzmi2xops6x4x3aqn6ez7yntitero2k7ae6yoyd.onion\r\nhttp://lockbitb42tkml3ipianjbs6e33vhcshb7oxm2stubfvdzn3y2yqgbad.onion\r\nhttp://lockbitcuo23q7qrymbk6dsp2sadltspjvjxgcyp4elbnbr6tcnwq7qd.onion\r\n\r\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\r\n>> Your personal Black ID: %s <<\r\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\r\n\r\n>>>>> Warning! Do not delete or modify encrypted files, it will lead to problems with decryption of files!\r\n\r\n>>>>> Don't go to the police or the FBI for help and don't tell anyone that we attacked you. ", - "count": 2, - "total_related": 15, - "prevalence": 0.13333333333333333 - }, - { - "value": "\r\n~~ LockBit 3.0 the world's fastest and most stable ransomware from 2019~~~\r\n\r\n>>>>> Your data is stolen and encrypted.\r\n\r\nBLOG Tor Browser Links:\r\nhttp://lockbit3753ekiocyo5epmpy6klmejchjtzddoekjlnt6mu3qh4de2id.onion/\r\nhttp://lockbit3g3ohd3katajf6zaehxz4h4cnhmz5t735zpltywhwpc6oy3id.onion/\r\nhttp://lockbit3olp7oetlc4tl5zydnoluphh7fvdt5oa6arcp2757r7xkutid.onion/\r\nhttp://lockbit435xk3ki62yun7z5nhwz6jyjdp2c64j5vge536if2eny3gtid.onion/\r\nhttp://lockbit4lahhluquhoka3t4spqym2m3dhe66d6lr337glmnlgg2nndad.onion/\r\nhttp://lockbit6knrauo3qafoksvl742vieqbujxw7rd6ofzdtapjb4rrawqad.onion/\r\nhttp://lockbit7ouvrsdgtojeoj5hvu6bljqtghitekwpdy3b6y62ixtsu5jqd.onion/\r\n\r\n>>>>> What guarantee is there that we won't cheat you? \r\nWe are the oldest ransomware affiliate program on the planet, nothing is more important than our reputation. We are not a politically motivated group and we want nothing more than money. If you pay, we will fulfill all the terms we agree on during the negotiation process. Treat this situation simply as a paid training session for your system administrators, because it was the misconfiguration of your corporate network that allowed us to attack you. Our pentesting services should be paid for the same way you pay your system administrators salaries. You can get more information about us on Ilon Musk's Twitter https://twitter.com/hashtag/lockbit?f=live\r\n \r\n>>>>> You need to contact us on TOR darknet sites with your personal ID\r\n\r\nDownload and install Tor Browser https://www.torproject.org/\r\nWrite to the chat room and wait for an answer, we'll guarantee a response from us. If you need a unique ID for correspondence with us that no one will know about, ask it in the chat, we will generate a secret chat for you and give you his ID via private one-time memos service, no one can find out this ID but you. Sometimes you will have to wait some time for our reply, this is because we have a lot of work and we attack hundreds of companies around the world.\r\n\r\nTor Browser personal link for CHAT available only to you (available during a ddos attack): \r\nhttp://lockbit75naln4yj44rg6ez6vjmdcrt7up4kxmmmuvilcg4ak3zihxid.onion\r\n\r\nTor Browser Links for CHAT (sometimes unavailable due to ddos attacks):\r\nhttp://lockbit5eevg7vec4vwwtzgkl4kulap6oxbic2ye4mnmlq6njnpc47qd.onion\r\nhttp://lockbit74beza5z3e3so7qmjnvlgoemscp7wtp33xo7xv7f7xtlqbkqd.onion\r\nhttp://lockbit75naln4yj44rg6ez6vjmdcrt7up4kxmmmuvilcg4ak3zihxid.onion\r\nhttp://lockbit7a2g6ve7etbcy6iyizjnuleffz4szgmxaawcbfauluavi5jqd.onion\r\nhttp://lockbitaa46gwjck2xzmi2xops6x4x3aqn6ez7yntitero2k7ae6yoyd.onion\r\nhttp://lockbitb42tkml3ipianjbs6e33vhcshb7oxm2stubfvdzn3y2yqgbad.onion\r\nhttp://lockbitcuo23q7qrymbk6dsp2sadltspjvjxgcyp4elbnbr6tcnwq7qd.onion\r\n\r\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\r\n>> Your personal Black ID: %s <<\r\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\r\n\r\n>>>>> Warning! Do not delete or modify encrypted files, it will lead to problems with decryption of files!\r\n\r\n>>>>> Don't go to the police or the FBI for help and don't tell anyone that we attacked you. ", - "count": 2, - "total_related": 20, - "prevalence": 0.1 - }, - { - "value": "\n\tHello! \r\n\t\r\n\tYour data are stolen and encrypted.\r\n\r\n\tIn case of nonpayment - all information will be sold or made publicly accessible. \r\n\t\r\n\tCompared to other ransomware we charge a lot less, so don't be stingy!\r\n\t\r\n\tIf you pay - we will provide you with decryption software and remove your data from our servers. \r\n\t\r\n\tWe will also let you know about the vulnerability in your servers that we used to infiltrate your network. \r\n\t\r\n\tWARNING! Do not delete or modify any files, it can lead to recovery problems! \r\n\t\r\n\tYou can contact us using Session messenger without registration and sms https://getsession.org/download \r\n\t\r\n\tMy Session ID: 05839c6cce78c3f3043e7a65c27e881cbb9efbda3bab942d273a496876340b254f\r\n\t\r\n\tYou can send us any 1 file for free decryption.\r\n\t\r\n\tGood luck!\r\n\r\n\t\r\n\t", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\n ~~~ Your System Hacked By Orion Hackers~~~ \n\n>>>> Your data are stolen and encrypted\n\n\tThe data will be published on TOR website if you do not pay the ransom \n\n \n\n>>>> You need contact us and decrypt one file for free on these tox id =32C12B278912E26E5EAC57AEBB3F4FF16F0E31603C7B9D46AC02E9D993EE14351CEC3AB5945C with your personal DECRYPTION ID\n\n\t\n\t\n\t\n\tLinks for qtox:\n\r\n\thttps://tox.chat/download.html\r\n Tox ID OrionSupport: 32C12B278912E26E5EAC57AEBB3F4FF16F0E31603C7B9D46AC02E9D993EE14351CEC3AB5945C \r\n\t\r\n\t\t\r\n Download & Install qTox \u00e2\u0080\u0093 Get it from https://github.com/TokTok/qTox/releases/download/v1.18.2/setup-qtox-x86_64-release.exe and install\r\n Set Up Profile \u00e2\u0080\u0093 Create a username, save, and log in\r\n Find Your Tox ID \u00e2\u0080\u0093 Check your profile to copy and share\r\n Add a Contact \u00e2\u0080\u0093 Click Add friend enter their Tox ID, and send a request\r\n Send a Message \u00e2\u0080\u0093 Once they accept, open chat and type your message\r\n\t\r\n\tAlternative if you want to setup qtox in android \r\n https://play.google.com/store/apps/details?id=ltd.evilcorp.atox&hl=en\r\n\tTox ID Support: 6F902E0A889E60D47FB305E2EE4B72926A4A68297F2364285E2CB005DE53B377F76934FF16AB\r\n \n\n\t\n\tIf you do not get an answer in the chat room for a long time, the site does not work and in any other emergency, you can contact us in tox.\n\t\n\tTox ID : 32C12B278912E26E5EAC57AEBB3F4FF16F0E31603C7B9D46AC02E9D993EE14351CEC3AB5945C\r\n\t\r\n\tSometimes you will need to wait for our answer because we attack many companies.\r\n\t\r\n\t\r\n\t\r\n\t>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\n\n\t\n>>>> Your personal DECRYPTION ID: %s\n\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\n\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\n ~~~ Your System Hacked By Orion Hackers~~~ \n\n>>>> Your data are stolen and encrypted\n\n\tThe data will be published on TOR website if you do not pay the ransom \n\n \n\n>>>> You need contact us and decrypt one file for free on these tox id =32C12B278912E26E5EAC57AEBB3F4FF16F0E31603C7B9D46AC02E9D993EE14351CEC3AB5945C with your personal DECRYPTION ID\n\n\t\n\t\n\t\n\tLinks for qtox:\n\r\n\thttps://tox.chat/download.html\r\n Tox ID OrionSupport: 32C12B278912E26E5EAC57AEBB3F4FF16F0E31603C7B9D46AC02E9D993EE14351CEC3AB5945C \r\n\t\r\n\t\t\r\n Download & Install qTox \u00e2\u0080\u0093 Get it from https://github.com/TokTok/qTox/releases/download/v1.18.2/setup-qtox-x86_64-release.exe and install\r\n Set Up Profile \u00e2\u0080\u0093 Create a username, save, and log in\r\n Find Your Tox ID \u00e2\u0080\u0093 Check your profile to copy and share\r\n Add a Contact \u00e2\u0080\u0093 Click Add friend enter their Tox ID, and send a request\r\n Send a Message \u00e2\u0080\u0093 Once they accept, open chat and type your message\r\n\t\r\n\tAlternative if you want to setup qtox in android \r\n https://play.google.com/store/apps/details?id=ltd.evilcorp.atox&hl=en\r\n\tTox ID Support: 6F902E0A889E60D47FB305E2EE4B72926A4A68297F2364285E2CB005DE53B377F76934FF16AB\r\n \n\n\t\n\tIf you do not get an answer in the chat room for a long time, the site does not work and in any other emergency, you can contact us in tox.\n\t\n\tTox ID : 552653D2E9A5701EA30612EAE77345293F2E35C5D29DB196BB62395BE71BB25F\r\n\t\r\n\tSometimes you will need to wait for our answer because we attack many companies.\r\n\t\r\n\t\r\n\t\r\n\t>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\n\n\t\n>>>> Your personal DECRYPTION ID: %s\n\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\n\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\n ~~~ LockBit 5.08 the world's fastest ransomware since 2024~~~\n\n>>>> Your data are stolen and encrypted\n\n\tThe data will be published on TOR website if you do not pay the ransom \n\n\t\r\nBTC amount 0.02\r\n\r\nBTC amount 0 , deleted all files from you PC, and post all infirmation to public.\r\n\r\nwhere send BTC: bc1q3jwsuxq572pucdcdytd420fvsvysmn2dquh0mk \r\n\r\nYou can buy them on the exchange or at an ATM https://coinatmradar.com. You can find the addresses here buy with credit or debet card online https://www.moonpay.com/buy. \r\n\r\nAfter that, send a request with confirmation to e-mail , faster way!\r\ngogo875@proton.me\r\nor\r\nwdon90347@gmail.com\r\n\r\nIf both email no answer, you need faster answer and unlock please use TOX\r\nYou can contact us using Tox messenger without registration and SMS https://tox.chat/download.html. \n\t\r\nUsing Tox messenger, we will never know your real name, it means your privacy is guaranteed.\n\n\t\r\nIf you want to contact us, tox. \n\t\n\t\r\nTox ID LockBitSupp: 47C90F99E92AC0ECEAD8C2BD15B21866EBC1195B6E2B0412CE3658E21B696843FF4A8D144B24\r\n\r\n\r\n\r\n\r\n\r\n", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\n ~~~ PC Locker 3.0 by Mr.Robot~~~\n\n>>>> Your data are stolen and encrypted\n\n\tTo get your files back you will have to pay a one-time fee of $45 in bitcoin or monero.\n\n\n>>>> You need contact us and decrypt one file for free on these platforms with your personal DECRYPTION ID\n\n\tContact the following account on telegram\r\n\t@mr_robot_unlock\r\n\tor paste this link in your browser\r\n\thttps://t.me/mr_robot_unlock\n\t\r\n\t\n>>>> Your personal DECRYPTION ID: %s\n\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\n\n>>>> Warning! If you do not pay the ransom you will not receive you files NO EXCEPTIONS!\n\r\n>>>> Warning! Any attempt to negotiate or you don't want to pay is INSTANT BLOCK!\n\n>>>> Advertisement\n\t\n\tWould you like to earn thousands of dollars $$$ ?\n\tWe sell mentorship for stealers, DDOS and ransomware.\r\n\tWe only work with professionals and people with money DO NOT WASTE OUR TIME.", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\n ~~~ ~~~\n\n Payment Demand for Data Retrieval\r\n\r\nToday is 02.04.2024 - DAY 1\r\n\r\nWe are reaching out to inform you that we currently hold your PC files, emails, and cloud data. \r\nIn order to facilitate the return of this information, we are requesting a payment of $2000 within the next 48 hours in bitcoin or monero. The addresses are: \r\nYou must transfer the money to those addresses:\r\n\r\n Bitcoin: \r\n\r\n bc1qhulavzzw6vns8vr45pkpnmenx7h36s43xdga9f\r\n\r\n Monero: \r\n\r\n 45YditefWQmUPaxaMxoEDFQc7FmDvAQXE9CXVBcLtZjzYpCDD9qWM4ETYkAAKumsnaSB1eYcQfVdn8rZnoSETbWi5B17YHb\r\n\r\n\r\n\r\nIf you don't transfer the money within the next 48 hours, the amount will increase by $1000 each subsequent day, up to a maximum of $20000.\r\n\r\nHere's the breakdown:\r\n\r\nPay on \r\nFirst 48 hours: $2000 \r\nDay 3: $3000 \r\nDay 4: $4000 \r\nDay 5: $5000 \r\nDay 6: $6000 \r\nDay 7: $7000 \r\nDay 8: $8000 \r\nDay 9: $9000 \r\nDay 10: $10000 \r\nDay 11: $11000\r\nans so on up to day 20\r\n\r\nThese payment terms are non-negotiable.\r\n\r\n Upon receipt of payment, we will decrypt all your data, files, servers, documents, pictures and everything else. \r\n \r\n You can contact us via Jabber BUT ONLY AFTER YOU HAVE MADE A TRANSFER OF AT LEAST $2000, \r\n which you can prove by attaching a screenshot of the transaction from your bitcoin address to ours for verification on the blockchain.\r\n \r\n XMPP (Jabber) Support: random131313@exploit.im\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\nIf you don't pay within 20 days we will sale of your data on the dark web.\r\n\r\nIt's up to you. \r\n\r\n\r\nThe clock is ticking \n\n", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\n YOUR COMPUTER HAS BEEN BREACHED AND YOUR DATA IS ENCRYPTED!\r\n\r\nWe have infiltrated your system and encrypted your critical files. To regain access to your data, you must pay a ransom of 300 USD in Bitcoin (BTC).\r\n\r\nInstructions:\r\n\r\nPurchase 300 USD worth of Bitcoin through an exchange platform (e.g., Binance, Coinbase).\r\nContact us at software009a@proton.me and pay us. And we give you decryptor and key id. After you will find back all your files.\r\nDeadline: You have 72 hours to make the payment. After this period, your data will be permanently lost or publicly exposed. And the decryptor deleted.\r\n\r\nWarning:\r\n\r\nDo not attempt to decrypt the files yourself; this will result in permanent data loss.\r\nAny attempt to contact authorities or ignore this demand will worsen the situation.\r\nComply, and we will provide the decryption tool immediately upon payment.\r\nContact us only at: software009a@proton.me\r\n\r\nAct quickly. Your time is running out.", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\n\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n>>>> Your personal DECRYPTION ID: %s\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!\r\n\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n\r\n\r\n>>>> You need contact us and decrypt one file for free with your personal DECRYPTION ID\r\n\r\nmessage us for decrypt\r\n\r\nhttps://getsession.org/\r\n\r\n05b8d7bdf4c2b1a832b2256eb562f51ad69f2f9d8d274c6dc269cb9be5449fa84c ", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\n\r\n------Dear managers!------\r\nIf you are reading this, it means your network has been attacked. What does that mean?\r\nWe hacked your network and now all your files, documents, client database, projects and other important data safely encrypted with reliable algorithms.\r\nwe also have a copy of all your data.\r\nWARNING!!! You don't have to go to the POLICE, etc. Otherwise we will not be able to help you.\r\nYou cannot acces the files right now. But do not worry. You can get it back! It is easy to recover in a few steps.\r\nAs proof, we can decrypt any 3 files you provide.\r\n\r\nWe are not interested to ruin your business. We want to get ransom and be happy.\r\nPlease bring this information to your team leaders as soon as possible.\r\n\r\nIn case of a successfull transaction, we will restore your systems within 2-5 hours and also provide security recommendations.\r\n\r\n\r\n-----------------------Important-----------------------\r\nDo not contact data recovery brokers. They don't care about your company. \r\nThese scammers write to us and overcharge you several times the amount we told you. \r\nAssign someone responsible for negotiations and write to us yourself, be reasonable.\r\n\r\n-----------------------WARNING-----------------------\r\n\r\nIf you modify files - our decrypt software won't able to recover data\r\nIf you use third party software - you can damage/modify files (see item 1)\r\nYou nedd cipher key / our decrypt software to restore you files.\r\nThe police or authorities will not be able to help you get the cipher key. We encourage you to consider your decisions.\r\n\r\n-----------------------RECOVERY-----------------------\r\n\r\nUse mail: saimon74927@cyberfear.com\r\nBackup contact: cybergroup@dmc.chat\r\nID message: 05hKgfk10hd-ms \r\n", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\n\r\n------Dear managers!------\r\nIf you are reading this, it means your network has been attacked. What does that mean?\r\nWe hacked your network and now all your files, documents, client database, projects and other important data safely encrypted with reliable algorithms.\r\nwe also have a copy of all your data.\r\nWARNING!!! You don't have to go to the POLICE, etc. Otherwise we will not be able to help you.\r\nYou cannot acces the files right now. But do not worry. You can get it back! It is easy to recover in a few steps.\r\nAs proof, we can decrypt any 3 files you provide.\r\n\r\nWe are not interested to ruin your business. We want to get ransom and be happy.\r\nPlease bring this information to your team leaders as soon as possible.\r\n\r\nIn case of a successfull transaction, we will restore your systems within 4-6 hours and also provide security recommendations.\r\n\r\n\r\n-----------------------WARNING-----------------------\r\n\r\nIf you modify files - our decrypt software won't able to recover data\r\nIf you use third party software - you can damage/modify files (see item 1)\r\nYou nedd cipher key / our decrypt software to restore you files.\r\nThe police or authorities will not be able to help you get the cipher key. We encourage you to consider your decisions.\r\n\r\n-----------------------RECOVERY-----------------------\r\n\r\nUse email: abdrahamteam@pissmail.com (Alternate email address: abdrahamteam@proton.me)\r\nYou personal ID: 2654332581\r\n", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\n\r\n------Dear managers!------\r\nIf you are reading this, it means your network has been attacked. What does that mean?\r\nWe hacked your network and now all your files, documents, client database, projects and other important data safely encrypted with reliable algorithms.\r\nwe also have a copy of all your data.\r\nWARNING!!! You don't have to go to the POLICE, etc. Otherwise we will not be able to help you.\r\nYou cannot acces the files right now. But do not worry. You can get it back! It is easy to recover in a few steps.\r\nAs proof, we can decrypt any 3 files you provide.\r\n\r\nWe are not interested to ruin your business. We want to get ransom and be happy.\r\nPlease bring this information to your team leaders as soon as possible.\r\n\r\nIn case of a successfull transaction, we will restore your systems within 4-6 hours and also provide security recommendations.\r\n\r\n\r\n-----------------------WARNING-----------------------\r\n\r\nIf you modify files - our decrypt software won't able to recover data\r\nIf you use third party software - you can damage/modify files (see item 1)\r\nYou nedd cipher key / our decrypt software to restore you files.\r\nThe police or authorities will not be able to help you get the cipher key. We encourage you to consider your decisions.\r\n\r\n-----------------------RECOVERY-----------------------\r\n\r\nUse email: abdrahamteam@pissmail.com (Alternate email address: abdrahamteam@proton.me)\r\nYou personal ID: sns54088802500\r\n", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\n\r\nAll of your files are currently encrypted. \r\n\r\nAs you know if you don't - just google it all of the data that has been encrypted by our software cannot be recovered by any means without contacting our team directly\r\nIf you try to use any additional recovery software - the files might be damaged so if you are willing to try - try it on the data of the lowest value\r\n\r\nTo make sure that we REALLY CAN get your data back - we offer you to decrypt 2 random files completely free of charge\r\n\r\nYou can contact our team directly for further instructions through our contact: https://t.me/Diamotrix ", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\n \r\n>>>> You need to contact us soon!\r\n\r\n\tOur contact email:\r\n\t\r\n\t goodday@mailum.com\r\n\t\t \r\n\t\t \r\n\t \r\n\t\t \r\n\t\t \r\n>>>> Your data are stolen and encrypted\r\n\r\n>>>> Your personal DECRYPTION ID: %s\r\n\r\n>>>> All files on your computer have been encrypted.\r\n\r\n>>>> If you want to recover encrypted files, then contact us soon!\r\n\r\n>>>> We can decrypt 1-3 files (doc, xls, pdf, txt, jpeg) for free. You can attach them to your email. Databases, archives, backups are decrypted only after payment!\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n \r\n\r\n \r\n\r\n>>>> You need to contact us soon!\r\n\r\n\tOur contact email:\r\n\t\r\n\t goodday@mailum.com\r\n\t\r\n\t\r\n\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!\r\n\r\n", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\n Sparta\r\n\r\n\r\nYour data is stolen and encrypted.\r\nIf you don't pay the ransom, the data will be published on our TOR darknet sites. Keep in mind that once your data appears on our leak site it could be bought by your competitors at any second, so don't hesitate for long time. If you don't contact us in 4 days, we will start leaking data.\r\nYou can find us on email: spartateam@bingzone.net, promeser@proton.me", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\n xane owns you", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\n ~~~ BlackCat ~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n>>>> Your personal DECRYPTION ID: %s\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!\r\n\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n\r\n\r\n>>>> You need contact us and decrypt one file for free on these email or tox chat with your personal DECRYPTION ID\r\n\r\nmessage us for decrypt\r\n\r\nhttps://getsession.org/\r\n\r\n05cb31f6f18b2f7e661a018a3b6599bc43a9f235a9d882344b5cac1b56c3741118 ", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\n ~~~ GET FUCKED BY FLAME~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n\tTo get your files back you will need to pay. If you refuse to pay we will fuck your PC and destroy it. We accept BTC and LTC only.\r\n\r\nSee you soon, -Flame\r\nBTC Address: bc1q0a2az59et9lymfa77drzr5vvm6grl27kfdhsuj\r\nLTC Address: LMFQ6gbDxMr9wNJjo3Wm8ik4uJM6acyNsL", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\n ~~~ Kofurlak 2.0 Ransomware~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n\tThe data will be published if you do not pay the ransom \r\n\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n \r\n \r\n\r\n>>>> You need contact us and decrypt one file for free on qTOX your personal DECRYPTION ID\r\n\r\n\tDownload and install qTOX https://qtox.github.io/\r\n\tAdd friend our qTOX id and wait for the answer, we will always answer you. \r\n\tSometimes you will need to wait for our answer because we attack many companies.\r\n\t\r\n\tTox ID KofurlakSupport: 3683A5F20609D00437ADEF76C55167C40C30B2BBF106D1F38103EA7DCF5FE87F568EEDC0565C\r\n\t\r\n>>>> Your personal DECRYPTION ID: B7568014A48684D6D525F3F3722638C4\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\n ~~~ LockBit 3.0 the world's fastest ransomware since 2019~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n\tThe data will be published on TOR website if you do not pay the ransom \r\n\r\n RANSOMWARE = 100$ \r\n\r\n BITCOIN = 12QBRuDLuQpYLAVZDG1C27dA8aJTvy4Pys\r\n USDT TRON = TLzpsvdaStJ2uviCEhyKYHxfnZhTQfdfLE\r\n LITECOIN = LU6bjsxJDFXHsc7LyXUowThWpY9oj2Lc2C\r\n\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\r\n>>>> You need contact us WHEN THE PAYMENT IS DONE OR WE WILL NO AWSER ! \r\n TELEGRAM = @shopsupportoff\r\n\r\n\t\r\n\t\r\n>>>> Your personal DECRYPTION ID: %s\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack you repeatedly again!\r\n\r\n\r\n", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\n ~~~ LockBit 3.0 the world's fastest ransomware since 2019~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n \r\n\tYou can obtain information about us on twitter https://twitter.com/hashtag/lockbit?f=live\r\n \r\n\r\n>>>> you can contact us in mail or tox.\r\n\t\r\n\tTox ID LockBitSupp: 599A61A3310B75EC1713521B487B9FD9D2D02CCF37830FF941DD3AD35F12E86960AC75B9F171\r\n\tmail Support: asxianx@proton.me\r\n\t\r\n>>>> Your personal DECRYPTION ID: %s\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!\r\n\r\n\r\n>>>> Advertisement\r\n\t\r\n\tWould you like to earn millions of dollars $$$ ?\r\n\r\n\tOur company acquire access to networks of various companies, as well as insider information that can help you steal the most valuable data of any company. \r\n\tYou can provide us accounting data for the access to any company, for example, login and password to RDP, VPN, corporate email, etc. \r\n\tOpen our letter at your email. Launch the provided virus on any computer in your company.\r\n\r\n\tYou can do it both using your work computer or the computer of any other employee in order to divert suspicion of being in collusion with us.\r\n\r\n\tCompanies pay us the foreclosure for the decryption of files and prevention of data leak.\r\n\r\n\tYou can contact us using Tox messenger without registration and SMS https://tox.chat/download.html. \r\n\tUsing Tox messenger, we will never know your real name, it means your privacy is guaranteed.\r\n\r\n\tIf you want to contact us, write in jabber or tox. \r\n\t\r\n\tTox ID LockBitSupp: 599A61A3310B75EC1713521B487B9FD9D2D02CCF37830FF941DD3AD35F12E86960AC75B9F171\r\n\tmail Support: asxianx@proton.me", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\n ~~~ LockBit 3.0 the world's fastest ransomware~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n\tThe data will be published on TOR website if you do not pay the ransom \r\n\r\n\tAll of your files have been encrypted! (Warning: Attempting to remove the software will corrupt your hard drives meaning no further use even when wiped. We simply charge $25 which is far cheaper than buying a new drive.)\r\nYour computer was infected with a ransomware software. Your files have been encrypted and you won't be able to decrypt them without purchasing $25 BTC. What can I do to get my files back? You will send payment of $25 BTC to gain access to your files again, once payment is made after 3 confirmations on the blockchain (15 mins) your files will be restored and the software will un-install itself from your computer.\r\nHow do I pay, where do I get Bitcoin?\r\nPurchasing Bitcoin varies from country to country, you are best advised to do a quick google search\r\nyourself to find out how to buy Bitcoin. \r\nMany of our customers have reported these sites to be fast and reliable:\r\nCoinmama - hxxps://www.coinmama.com Bitpanda - hxxps://www.bitpanda.com\r\n\r\nPayment will increase soon to double, be cooperative and your files will be released.\r\n\r\nPayment information Amount: 0.000385636 BTC\r\nBitcoin Address: bc1qc76qr24pxnms9f93mytfg4dn7ztuvmje7g43dr", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\n ~~~ LockBit Black Ransomware Since 2024~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n\tPrice = 2000 $ \r\n Bitcoin = 328N9mKT6xFe6uTvtpxeKSymgWCbbTGbK2\r\n Email = jimyjoy139@proton.me\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n \r\n\t\r\n>>>> Your personal DECRYPTION ID: A3138014A48MK4D6D525F3F372263313\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!\r\n", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\n ~~~ Ransomware creado con para pruebas ~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n\tThe data will be published on TOR website if you do not pay the ransom \r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n \r\n\r\n>>>> You need contact us and decrypt one file for free on these TOR sites with your personal DECRYPTION ID\r\n\r\n\tDownload and install TOR Browser https://www.torproject.org/\r\n\tWrite to a chat and wait for the answer, we will always answer you. \r\n\tSometimes you will need to wait for our answer because we attack many companies.\r\n\t\r\n\tIf you do not get an answer in the chat room for a long time, the site does not work and in any other emergency, you can contact us in jabber or tox.\r\n\t\r\n>>>> Your personal DECRYPTION ID: %s\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!\r\n\r\n\r\n>>>> Advertisement\r\n\t\r\n\tWould you like to earn millions of dollars $$$ ?\r\n\r\n\tOur company acquire access to networks of various companies, as well as insider information that can help you steal the most valuable data of any company. \r\n\tYou can provide us accounting data for the access to any company, for example, login and password to RDP, VPN, corporate email, etc. \r\n\tOpen our letter at your email. Launch the provided virus on any computer in your company.\r\n\r\n\tYou can do it both using your work computer or the computer of any other employee in order to divert suspicion of being in collusion with us.\r\n\r\n\tCompanies pay us the foreclosure for the decryption of files and prevention of data leak.\r\n\t\r\n\tIf this contact is expired, and we do not respond you, look for the relevant contact data on our website via Tor or Brave browser", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\n ~~~ SecureNET (your one go cyber security consultant)~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n\t-- Online protection is not active\r\n\t-- Identity theft protection is not active\r\n\t-- Firewall is not active\r\n\t-- Anti Malware is not active\r\n\t-- Anti Spyware is not active\r\n\r\n\tContact On: our website: www.bit.ly/secure-net\r\n\t\tor telegram @securenet_global", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\n ~~~ATTENTION! YOUR FILES WERE ENCRYPTED!~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n\t\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n \r\n\tYou can obtain information about us on twitter https://twitter.com/hashtag/lockbit?f=live\r\n \r\n\r\n>>>> You need contact us and decrypt one file for free on these with your personal DECRYPTION ID\r\n\r\n\t\r\n\tWrite to a chat and wait for the answer, we will always answer you. \r\n\tSometimes you will need to wait for our answer because we attack many companies.\r\n\t\r\n\t\r\n\t\r\n\tIf you do not get an answer in the chat room for a long time, the site does not work and in any other emergency, you can contact us in jabber or tox.\r\n\t\r\n\tMAIL:: kaki@mailum.com\r\n\tMAIL: kaki@mailum.com\r\n\t\r\n>>>> Your personal DECRYPTION ID: %s\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!\r\n\r\n\r\n>>>> Advertisement\r\n\t\r\n\tWould you like to earn millions of dollars $$$ ?\r\n\r\n\tOur company acquire access to networks of various companies, as well as insider information that can help you steal the most valuable data of any company. \r\n\tYou can provide us accounting data for the access to any company, for example, login and password to RDP, VPN, corporate email, etc. \r\n\tOpen our letter at your email. Launch the provided virus on any computer in your company.\r\n\r\n\tYou can do it both using your work computer or the computer of any other employee in order to divert suspicion of being in collusion with us.\r\n\r\n\tCompanies pay us the foreclosure for the decryption of files and prevention of data leak.\r\n\r\n\tYou can contact us using Tox messenger without registration and SMS https://tox.chat/download.html. \r\n\tUsing Tox messenger, we will never know your real name, it means your privacy is guaranteed.\r\n\r\n\tIf you want to contact us, write in jabber or tox. \r\n\t\r\n\tMAIL:: kaki@mailum.com\r\n\tMAIL: kaki@mailum.com\r\n\t\r\n\t\r\n", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\n ~~~~~SchoolBoys Ransomware Gang~~~~~\r\n\r\n\r\n>>>> Your data are stolen and encrypted\r\n\tThe data will be published on TOR website if you do not pay the ransom \r\n\r\n\tLinks for Tor Browser:\r\n\thttps://pnanlicgxkku2aonwsg2fwid3maycsso7joqnzp66wkfemzdk7ahsdid.onion\r\n\tYour personal password for communication:6334-3206-2025-9235-Gb-HkkT-2-k\r\n\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n \r\n\r\n>>>> You need contact us and decrypt one file for free on these TOR sites with your personal DECRYPTION ID\r\n\r\n\tDownload and install TOR Browser https://www.torproject.org/\r\n\tWrite to a chat and wait for the answer, we will always answer you. \r\n\t\r\n\tLinks for Tor Browser:\r\n\thttps://pnanlicgxkku2aonwsg2fwid3maycsso7joqnzp66wkfemzdk7ahsdid.onion\r\n\r\n\t\r\n>>>> Your personal DECRYPTION ID: 4D037DEBAC8D57EE16D843E182DF8492\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\n>>>> Your data are stolen and encrypted\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\nWe are not a politically motivated group and we do not need anything other than your money. \r\n\r\nIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n \r\nIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in \r\nthe future. \r\n\r\nTherefore to us our reputation is very important. We attack the companies worldwide and there is no \r\ndissatisfied victim after payment.\r\n\r\n>>>> You need contact us and decrypt one file for free, send a small file for test decryption with your personal DECRYPTION ID to tox chat:\r\n\r\n>>>> Your personal DECRYPTION ID: %s\r\n\r\n\r\n1)Download and install TOX chat: https://tox.chat\r\n2)Write to this tox id: 1677F2BDC2F3F430E7A0C15F4101AD83D080963FCDEF1ABAC93465D6834AB606A1DEDEBA6F54 and wait for the answer, we will always answer you.", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\nDear Sir Or Madam, if your data has been accidentally encrypted, please contact us as soon as possible, otherwise your data may be permanently deleted.\r\n\r\nYou can contact me by email.\r\n\r\nE-mail: zppizdirwf@mail.com\r\n\r\n>>>>>>Your personal DECRYPTION ID:JL66KWZWNNAWIN64XSTTNSMMW1KONE\r\n\r\nYou only need to pay a small fee, and we will decrypt it for you within 24 hours.\r\n\r\n>>>>>>Service charges can be discussed in detail\r\n\r\n>>>>>>Payment cryptocurrency address USDT-TRC20\r\n>>>>>>TWRqp48boRGhViwYATwkM3jsLzpLsr7Zi7\r\n\r\n>>>>>>>>>>>> After you complete the payment, please send the screenshot of the payment to your email, we will arrange decryption service for you immediately after confirmation. And delete the data we copied.\r\n>>>>>>Email address:zppizdirwf@mail.com\r\n\r\n>>>>>>What guarantee will we not deceive you?\r\nWe don't bring anything political, religious, cultural, racial. We only focus on the spirit of the contract and USTD.\r\nAfter the payment is successful, we will serve you as quickly as possible, and will never leak any of your data online.\r\n\r\n>>>>>>>>>>>>>>>>>>>>>>>>> Have a nice day<<<<<<<<<<<<<<<<<<<<<< ", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\nHello peceng.com! \r\n\r\nYour files have been stolen from your network and encrypted with a strong algorithm. We work for money and are not associated with politics.\r\nAll you need to do is contact us and pay.\r\n\r\nOur communication process:\r\n\r\n1. You contact us via email or Tox.\r\n2. We send you a list of files that were stolen\r\n3. We decrypt 3 files to confirm that our decryptor works.\r\n4. We agree on the amount, which must be paid using BTC.\r\n5. We delete your files, we give you a decryptor.\r\n6. We give you a detailed report on how we compromised your company, and recommendations on how to avoid such situations in the future.\r\n \r\nRecommendations: \r\n\r\nDO NOT RESET OR SHUTDOWN - files may be damaged.\r\nDO NOT RENAME OR MOVE the encrypted and readme files.\r\nDO NOT DELETE readme files.\r\n\r\nContacts:\r\n\r\nEmail: MitraGodbout@proton.me\r\nTox: 1C054B722BCBF41A918EF3C485712742088F5C3E81B2FDD91ADEA6BA55F4A856D90A65E99D20\r\n \r\n* If you want to contact us via Tox you need to download it from this link: https://github.com/qTox/qTox/releases/download/v1.17.6/setup-qtox-x86_64-release.exe\r\n\r\nYOUR ID: %s\r\n\r\nIf you refuse to pay or do not get in touch with us, we start publishing your files.\r\nAfter 7 days the email will no longer be available, and the opportunity to receive the decryptor will also no longer be available.\r\n\r\nSincerely, 01000100 01110010 01100001 01100111 01101111 01101110 01000110 01101111 01110010 01100011 01100101", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\r\n\u00d0\u0094\u00d0\u00b5\u00d0\u00bd\u00d1\u008c \u00d0\u009f\u00d0\u00be\u00d0\u00b1\u00d0\u00b5\u00d0\u00b4\u00d1\u008b, \u00d0\u00ba\u00d0\u00b0\u00d0\u00ba \u00d0\u00be\u00d0\u00bd \u00d0\u00b1\u00d1\u008b\u00d0\u00bb \u00d0\u00be\u00d1\u0082 \u00d0\u00bd\u00d0\u00b0\u00d1\u0081 \u00d0\u00b4\u00d0\u00b0\u00d0\u00bb\u00d0\u00b5\u00d0\u00ba,\r\n\u00d0\u009a\u00d0\u00b0\u00d0\u00ba \u00d0\u00b2 \u00d0\u00ba\u00d0\u00be\u00d1\u0081\u00d1\u0082\u00d1\u0080\u00d0\u00b5 \u00d0\u00bf\u00d0\u00be\u00d1\u0082\u00d1\u0083\u00d1\u0085\u00d1\u0088\u00d0\u00b5\u00d0\u00bc \u00d1\u0082\u00d0\u00b0\u00d1\u008f\u00d0\u00bb \u00d1\u0083\u00d0\u00b3\u00d0\u00be\u00d0\u00bb\u00d0\u00b5\u00d0\u00ba.\r\n\u00d0\u0091\u00d1\u008b\u00d0\u00bb\u00d0\u00b8 \u00d0\u00b2\u00d0\u00b5\u00d1\u0080\u00d1\u0081\u00d1\u0082\u00d1\u008b, \u00d0\u00be\u00d0\u00b1\u00d0\u00b3\u00d0\u00be\u00d1\u0080\u00d0\u00b5\u00d0\u00bb\u00d1\u008b\u00d0\u00b5, \u00d0\u00b2 \u00d0\u00bf\u00d1\u008b\u00d0\u00bb\u00d0\u00b8, \u00e2\u0080\u0094\r\n\u00d0\u00ad\u00d1\u0082\u00d0\u00be\u00d1\u0082 \u00d0\u00b4\u00d0\u00b5\u00d0\u00bd\u00d1\u008c \u00d0\u00bc\u00d1\u008b \u00d0\u00bf\u00d1\u0080\u00d0\u00b8\u00d0\u00b1\u00d0\u00bb\u00d0\u00b8\u00d0\u00b6\u00d0\u00b0\u00d0\u00bb\u00d0\u00b8, \u00d0\u00ba\u00d0\u00b0\u00d0\u00ba \u00d0\u00bc\u00d0\u00be\u00d0\u00b3\u00d0\u00bb\u00d0\u00b8.\r\n\r\n\u00d0\u009f\u00d1\u0080\u00d0\u00b8\u00d0\u00bf\u00d0\u00b5\u00d0\u00b2:\r\n\r\n\u00d0\u00ad\u00d1\u0082\u00d0\u00be\u00d1\u0082 \u00d0\u0094\u00d0\u00b5\u00d0\u00bd\u00d1\u008c \u00d0\u009f\u00d0\u00be\u00d0\u00b1\u00d0\u00b5\u00d0\u00b4\u00d1\u008b\r\n\u00d0\u009f\u00d0\u00be\u00d1\u0080\u00d0\u00be\u00d1\u0085\u00d0\u00be\u00d0\u00bc \u00d0\u00bf\u00d1\u0080\u00d0\u00be\u00d0\u00bf\u00d0\u00b0\u00d1\u0085.\r\n\u00d0\u00ad\u00d1\u0082\u00d0\u00be \u00d0\u00bf\u00d1\u0080\u00d0\u00b0\u00d0\u00b7\u00d0\u00b4\u00d0\u00bd\u00d0\u00b8\u00d0\u00ba\r\n\u00d0\u00a1 \u00d1\u0081\u00d0\u00b5\u00d0\u00b4\u00d0\u00b8\u00d0\u00bd\u00d0\u00be\u00d1\u008e \u00d0\u00bd\u00d0\u00b0 \u00d0\u00b2\u00d0\u00b8\u00d1\u0081\u00d0\u00ba\u00d0\u00b0\u00d1\u0085.\r\n\u00d0\u00ad\u00d1\u0082\u00d0\u00be \u00d1\u0080\u00d0\u00b0\u00d0\u00b4\u00d0\u00be\u00d1\u0081\u00d1\u0082\u00d1\u008c\r\n\u00d0\u00a1\u00d0\u00be \u00d1\u0081\u00d0\u00bb\u00d0\u00b5\u00d0\u00b7\u00d0\u00b0\u00d0\u00bc\u00d0\u00b8 \u00d0\u00bd\u00d0\u00b0 \u00d0\u00b3\u00d0\u00bb\u00d0\u00b0\u00d0\u00b7\u00d0\u00b0\u00d1\u0085.\r\n\u00d0\u0094\u00d0\u00b5\u00d0\u00bd\u00d1\u008c \u00d0\u009f\u00d0\u00be\u00d0\u00b1\u00d0\u00b5\u00d0\u00b4\u00d1\u008b!\r\n\u00d0\u0094\u00d0\u00b5\u00d0\u00bd\u00d1\u008c \u00d0\u009f\u00d0\u00be\u00d0\u00b1\u00d0\u00b5\u00d0\u00b4\u00d1\u008b!\r\n\u00d0\u0094\u00d0\u00b5\u00d0\u00bd\u00d1\u008c \u00d0\u009f\u00d0\u00be\u00d0\u00b1\u00d0\u00b5\u00d0\u00b4\u00d1\u008b!\r\n\r\n\u00d0\u0094\u00d0\u00bd\u00d0\u00b8 \u00d0\u00b8 \u00d0\u00bd\u00d0\u00be\u00d1\u0087\u00d0\u00b8 \u00d1\u0083 \u00d0\u00bc\u00d0\u00b0\u00d1\u0080\u00d1\u0082\u00d0\u00b5\u00d0\u00bd\u00d0\u00be\u00d0\u00b2\u00d1\u0081\u00d0\u00ba\u00d0\u00b8\u00d1\u0085 \u00d0\u00bf\u00d0\u00b5\u00d1\u0087\u00d0\u00b5\u00d0\u00b9\r\n\u00d0\u009d\u00d0\u00b5 \u00d1\u0081\u00d0\u00bc\u00d1\u008b\u00d0\u00ba\u00d0\u00b0\u00d0\u00bb\u00d0\u00b0 \u00d0\u00bd\u00d0\u00b0\u00d1\u0088\u00d0\u00b0 \u00d0\u00a0\u00d0\u00be\u00d0\u00b4\u00d0\u00b8\u00d0\u00bd\u00d0\u00b0 \u00d0\u00be\u00d1\u0087\u00d0\u00b5\u00d0\u00b9.\r\n\u00d0\u0094\u00d0\u00bd\u00d0\u00b8 \u00d0\u00b8 \u00d0\u00bd\u00d0\u00be\u00d1\u0087\u00d0\u00b8 \u00d0\u00b1\u00d0\u00b8\u00d1\u0082\u00d0\u00b2\u00d1\u0083 \u00d1\u0082\u00d1\u0080\u00d1\u0083\u00d0\u00b4\u00d0\u00bd\u00d1\u0083\u00d1\u008e \u00d0\u00b2\u00d0\u00b5\u00d0\u00bb\u00d0\u00b8 \u00e2\u0080\u0094\r\n\u00d0\u00ad\u00d1\u0082\u00d0\u00be\u00d1\u0082 \u00d0\u00b4\u00d0\u00b5\u00d0\u00bd\u00d1\u008c \u00d0\u00bc\u00d1\u008b \u00d0\u00bf\u00d1\u0080\u00d0\u00b8\u00d0\u00b1\u00d0\u00bb\u00d0\u00b8\u00d0\u00b6\u00d0\u00b0\u00d0\u00bb\u00d0\u00b8, \u00d0\u00ba\u00d0\u00b0\u00d0\u00ba \u00d0\u00bc\u00d0\u00be\u00d0\u00b3\u00d0\u00bb\u00d0\u00b8.\r\n\r\n\u00d0\u009f\u00d1\u0080\u00d0\u00b8\u00d0\u00bf\u00d0\u00b5\u00d0\u00b2.\r\n\r\n\u00d0\u0097\u00d0\u00b4\u00d1\u0080\u00d0\u00b0\u00d0\u00b2\u00d1\u0081\u00d1\u0082\u00d0\u00b2\u00d1\u0083\u00d0\u00b9, \u00d0\u00bc\u00d0\u00b0\u00d0\u00bc\u00d0\u00b0, \u00d0\u00b2\u00d0\u00be\u00d0\u00b7\u00d0\u00b2\u00d1\u0080\u00d0\u00b0\u00d1\u0082\u00d0\u00b8\u00d0\u00bb\u00d0\u00b8\u00d1\u0081\u00d1\u008c \u00d0\u00bc\u00d1\u008b \u00d0\u00bd\u00d0\u00b5 \u00d0\u00b2\u00d1\u0081\u00d0\u00b5\u00e2\u0080\u00a6\r\n\u00d0\u0091\u00d0\u00be\u00d1\u0081\u00d0\u00b8\u00d0\u00ba\u00d0\u00be\u00d0\u00bc \u00d0\u00b1\u00d1\u008b \u00d0\u00bf\u00d1\u0080\u00d0\u00be\u00d0\u00b1\u00d0\u00b5\u00d0\u00b6\u00d0\u00b0\u00d1\u0082\u00d1\u008c\u00d1\u0081\u00d1\u008f \u00d0\u00bf\u00d0\u00be \u00d1\u0080\u00d0\u00be\u00d1\u0081\u00d0\u00b5!\r\n\u00d0\u009f\u00d0\u00be\u00d0\u00bb-\u00d0\u0095\u00d0\u00b2\u00d1\u0080\u00d0\u00be\u00d0\u00bf\u00d1\u008b \u00d0\u00bf\u00d1\u0080\u00d0\u00be\u00d1\u0088\u00d0\u00b0\u00d0\u00b3\u00d0\u00b0\u00d0\u00bb\u00d0\u00b8, \u00d0\u00bf\u00d0\u00be\u00d0\u00bb-\u00d0\u0097\u00d0\u00b5\u00d0\u00bc\u00d0\u00bb\u00d0\u00b8, \u00e2\u0080\u0094\r\n\u00d0\u00ad\u00d1\u0082\u00d0\u00be\u00d1\u0082 \u00d0\u00b4\u00d0\u00b5\u00d0\u00bd\u00d1\u008c \u00d0\u00bc\u00d1\u008b \u00d0\u00bf\u00d1\u0080\u00d0\u00b8\u00d0\u00b1\u00d0\u00bb\u00d0\u00b8\u00d0\u00b6\u00d0\u00b0\u00d0\u00bb\u00d0\u00b8, \u00d0\u00ba\u00d0\u00b0\u00d0\u00ba \u00d0\u00bc\u00d0\u00be\u00d0\u00b3\u00d0\u00bb\u00d0\u00b8.\r\n\r\n\u00d0\u009f\u00d0\u00be\u00d0\u00b4\u00d1\u0080\u00d0\u00be\u00d0\u00b1\u00d0\u00bd\u00d0\u00b5\u00d0\u00b5: https://yandex.ru/video/preview/16994774306293862852", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": " ~~~the world's fastest ransomware since 2019~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n\tThe data will be published on TOR website if you do not pay the ransom \r\n\r\n\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n \r\n\r\n>>>> You need contact us and decrypt one file for free\r\n \r\n\tDecrypt ID: 41d6a055-bded-42f0-9e80-0774e2276b4b\r\n\r\n\tYou can contact us in email or qtox.\r\n\t\r\n\tQTox ID Support: 3DCE1C43491FC92EA7010322040B254FDD2731001C2DDC2B9E819F0C946BDC3CD251FA3B694A\r\n\t\r\n\r\n\t\r\n\tEmail Support: ziqbwnscvbsj@proton.me,asdcspocnsdke@proton.me,tfefwapyasd3@proton.me\r\n\r\n\r\n\tWrite to a chat and wait for the answer, we will always answer you. \r\n\tSometimes you will need to wait for our answer because we attack many companies.\r\n\t\r\n\t\t\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!\r\n\r\n\r\n>>>> Advertisement\r\n\t\r\n\tWould you like to earn millions of dollars $$$ ?\r\n\r\n\tOur company acquire access to networks of various companies, as well as insider information that can help you steal the most valuable data of any company. \r\n\tYou can provide us accounting data for the access to any company, for example, login and password to RDP, VPN, corporate email, etc. \r\n\tOpen our letter at your email. Launch the provided virus on any computer in your company.\r\n\r\n\tYou can do it both using your work computer or the computer of any other employee in order to divert suspicion of being in collusion with us.\r\n\r\n\tCompanies pay us the foreclosure for the decryption of files and prevention of data leak.\r\n\r\n\tYou can contact us using QTox messenger without registration and SMS https://github.com/qTox/qTox/releases/download/v1.17.6/setup-qtox-x86_64-release.exe. \r\n\tUsing QTox messenger, we will never know your real name, it means your privacy is guaranteed.\r\n\r\n\tIf you want to contact us, write in Email or qtox. \r\n\t\r\n\tQTox ID Support: 3DCE1C43491FC92EA7010322040B254FDD2731001C2DDC2B9E819F0C946BDC3CD251FA3B694A\r\n\tEmail Support: ziqbwnscvbsj@proton.me,asdcspocnsdke@proton.me,tfefwapyasd3@proton.me", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "***\r\nWelcome to Brain Cipher Ransomware!\r\n***\r\nDear managers!\r\nIf you're reading this, it means your systems have been hacked and encrypted and your data stolen.\r\n\r\n\r\n***\r\n\r\nThe most proper way to safely recover your data is through our support. We can recover your systems within 4-6 hours.\r\nIn order for it to be successful, you must follow a few points:\r\n\r\n1.Don't go to the police, etc.\r\n2.Do not attempt to recover data on your own.\r\n3.Do not take the help of third-party data recovery companies.\r\nIn most cases, they are scammers who will pay us a ransom and take a % for themselves.\r\n\r\n***\r\n\r\nIf you violate any 1 of these points, we will refuse to cooperate with you!!!\r\n\r\n\r\n\r\n 3 steps to data recovery: \r\n \r\n\t\t\t\t\t1. Download and install Tor Browser (https://www.torproject.org/download/)\r\n\t\t\t\r\n 2. Go to our support page: http://mybmtbgd7aprdnw2ekxht5qap5daam2wch25coqerrq2zdioanob34ad.onion\r\n\r\n 3. Enter your encryption ID: M8AL5cWJEU5CnMMPwCdt4x9NVn0ZY2uNtIgnKwkDJwdPbnanVROYFzGmgUCImexTGDmINYgSZXdlhM7D199lNMb294TGY2\r\n\r\n\r\n\t\t\t\t\tEmail to support: brain.support@cyberfear.com", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "***\r\nWelcome to Brain Cipher Ransomware!\r\n***\r\nDear managers!\r\nIf you're reading this, it means your systems have been hacked and encrypted and your data stolen.\r\n\r\n\r\n***\r\n\r\nThe most proper way to safely recover your data is through our support. We can recover your systems within 4-6 hours.\r\nIn order for it to be successful, you must follow a few points:\r\n\r\n1.Don't go to the police, etc.\r\n2.Do not attempt to recover data on your own.\r\n3.Do not take the help of third-party data recovery companies.\r\nIn most cases, they are scammers who will pay us a ransom and take a % for themselves.\r\n\r\n***\r\n\r\nIf you violate any 1 of these points, we will refuse to cooperate with you!!!\r\n\r\n\r\n\r\n 3 steps to data recovery: \r\n \r\n\t\t\t\t\t1. Download and install Tor Browser (https://www.torproject.org/download/)\r\n\t\t\t\r\n 2. Go to our support page: http://mybmtbgd7aprdnw2ekxht5qap5daam2wch25coqerrq2zdioanob34ad.onion\r\n\r\n 3. Enter your encryption ID: uYrTA6hpRFsWQR0nqlFk5WK8S+zUIHNd9T3L6aykdR27ztPJwC3xHOsdSBkZhmr+yKcnVLCct0ffjVRy5yvFQydzhzQWJR\r\n\r\n\r\n\t\t\t\t\tEmail to support: brain.support@cyberfear.com", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "***\r\nWelcome to Brain Cipher Ransomware!\r\n***\r\nDear managers!\r\nIf you're reading this, it means your systems have been hacked and encrypted and your data stolen.\r\n\r\n\r\n***\r\n\r\nThe most proper way to safely recover your data is through our support. We can recover your systems within 4-6 hours.\r\nIn order for it to be successful, you must follow a few points:\r\n\r\n1.Don't go to the police, etc.\r\n2.Do not attempt to recover data on your own.\r\n3.Do not take the help of third-party data recovery companies.\r\nIn most cases, they are scammers who will pay us a ransom and take a % for themselves.\r\n\r\n***\r\n\r\nIf you violate any 1 of these points, we will refuse to cooperate with you!!!\r\n\r\nATTENTION! If you do not contact us within 48 hours, we will post the record on our website: vkvsgl7lhipjirmz6j5ubp3w3bwvxgcdbpi3fsbqngfynetqtw4w5hyd.onion\r\n\r\n\r\n3 steps to data recovery: \r\n \r\n1. Download and install Tor Browser (https://www.torproject.org/download/)\r\n\t\t\t\r\n2. Go to our support page: http://77nrxelcwh47yikvpaz2rvtsten4sen2elybo5r5st6wlxsbitv255qd.onion/\r\n\tThis page can take up to 30 minutes to load.\r\n\r\n3. Enter your encryption ID: W8+IEowaYP+ZjKDS44C3+Amj516daNX6sA5C0LAL6ztnvbxvZzKZWN2fgYN6kvdUPXwyd9MzecQpCack8tWcER4c0ZtSDZ0\r\n\r\n\r\nEmail to support: brain.support@cyberfear.com", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "***\r\nWelcome to Brain Cipher Ransomware!\r\n***\r\nDear managers!\r\nIf you're reading this, it means your systems have been hacked and encrypted and your data stolen.\r\n\r\n\r\n***\r\n\r\nThe most proper way to safely recover your data is through our support. We can recover your systems within 4-6 hours.\r\nIn order for it to be successful, you must follow a few points:\r\n\r\n1.Don't go to the police, etc.\r\n2.Do not attempt to recover data on your own.\r\n3.Do not take the help of third-party data recovery companies.\r\nIn most cases, they are scammers who will pay us a ransom and take a % for themselves.\r\n\r\n***\r\n\r\nIf you violate any 1 of these points, we will refuse to cooperate with you!!!\r\n\r\nATTENTION! If you do not contact us within 48 hours, we will post the record on our website: vkvsgl7lhipjirmz6j5ubp3w3bwvxgcdbpi3fsbqngfynetqtw4w5hyd.onion\r\n\r\n\r\n3 steps to data recovery: \r\n \r\n1. Download and install Tor Browser (https://www.torproject.org/download/)\r\n\t\t\t\r\n2. Go to our support page: http://77nrxelcwh47yikvpaz2rvtsten4sen2elybo5r5st6wlxsbitv255qd.onion/\r\n\tThis page can take up to 30 minutes to load.\r\n\r\n3. Enter your encryption ID: nwVTVzFVZ6v4hSPi5v9Oj3UDyxDG+KXbxaFtavLJIiZ10gv1ogCZIqQ2UA4gauvaqRjIVprlj0wf8fkqO7xFJLZzg2dzVw\r\n\r\n\r\nEmail to support: brain.support@cyberfear.com", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "***\r\nWelcome to Brain Cipher Ransomware!\r\n***\r\nDear managers!\r\nIf you're reading this, it means your systems have been hacked and encrypted and your data stolen.\r\n\r\n\r\n***\r\n\r\nThe most proper way to safely recover your data is through our support. We can recover your systems within 4-6 hours.\r\nIn order for it to be successful, you must follow a few points:\r\n\r\n1.Don't go to the police, etc.\r\n2.Do not attempt to recover data on your own.\r\n3.Do not take the help of third-party data recovery companies.\r\nIn most cases, they are scammers who will pay us a ransom and take a % for themselves.\r\n\r\n***\r\n\r\nIf you violate any 1 of these points, we will refuse to cooperate with you!!!\r\n\r\nATTENTION! If you do not contact us within 48 hours, we will post the record on our website: vkvsgl7lhipjirmz6j5ubp3w3bwvxgcdbpi3fsbqngfynetqtw4w5hyd.onion\r\n\r\n\r\n3 steps to data recovery: \r\n \r\n1. Download and install Tor Browser (https://www.torproject.org/download/)\r\n\t\t\t\r\n2. Go to our support page: http://brain4zoadgr6clxecixffvxjsw43cflyprnpfeak72nfh664kqqriyd.onion\r\n\tThis page can take up to 30 minutes to load.\r\n\r\n3. Enter your encryption ID: DOuB5Pp206I1khMQMjQLVqnpqbROD+iJrJWwtl92dTQLsNqq8RdnSymqONiThx7G1rN+ddOiF8kXtGc3n10XdIN3Q1WFk1\r\n\r\n\r\nEmail to support: brain.decrypt@cyberfear.com", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "***\r\nWelcome to Brain Cipher Ransomware!\r\n***\r\nDear managers!\r\nIf you're reading this, it means your systems have been hacked and encrypted and your data stolen.\r\n\r\n\r\n***\r\n\r\nThe most proper way to safely recover your data is through our support. We can recover your systems within 4-6 hours.\r\nIn order for it to be successful, you must follow a few points:\r\n\r\n1.Don't go to the police, etc.\r\n2.Do not attempt to recover data on your own.\r\n3.Do not take the help of third-party data recovery companies.\r\nIn most cases, they are scammers who will pay us a ransom and take a % for themselves.\r\n\r\n***\r\n\r\nIf you violate any 1 of these points, we will refuse to cooperate with you!!!\r\n\r\nATTENTION! If you do not contact us within 48 hours, we will post the record on our website: vkvsgl7lhipjirmz6j5ubp3w3bwvxgcdbpi3fsbqngfynetqtw4w5hyd.onion\r\n\r\n\r\n3 steps to data recovery: \r\n \r\n1. Download and install Tor Browser (https://www.torproject.org/download/)\r\n\t\t\t\r\n2. Go to our support page: http://brain4zoadgr6clxecixffvxjsw43cflyprnpfeak72nfh664kqqriyd.onion\r\n\tThis page can take up to 30 minutes to load.\r\n\r\n3. Enter your encryption ID: HqfDKBqDbBLj6qMXyrXyAXwrT7GXRvtPkbuDL7YB8yxX4PSOKTyUzj9lqNjWAltr48E5KCYWk4Vrsm6qb2jIVE1U1IwalNo\r\n\r\n\r\nEmail to support: brain.support@cyberfear.com", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "***\r\nWelcome to Brain Cipher Ransomware!\r\n***\r\nDear managers!\r\nIf you're reading this, it means your systems have been hacked and encrypted and your data stolen.\r\n\r\n\r\n***\r\n\r\nThe most proper way to safely recover your data is through our support. We can recover your systems within 4-6 hours.\r\nIn order for it to be successful, you must follow a few points:\r\n\r\n1.Don't go to the police, etc.\r\n2.Do not attempt to recover data on your own.\r\n3.Do not take the help of third-party data recovery companies.\r\nIn most cases, they are scammers who will pay us a ransom and take a % for themselves.\r\n\r\n***\r\n\r\nIf you violate any 1 of these points, we will refuse to cooperate with you!!!\r\n\r\nATTENTION! If you do not contact us within 48 hours, we will post the record on our website: vkvsgl7lhipjirmz6j5ubp3w3bwvxgcdbpi3fsbqngfynetqtw4w5hyd.onion\r\n\r\n\r\n3 steps to data recovery: \r\n \r\n1. Download and install Tor Browser (https://www.torproject.org/download/)\r\n\t\t\t\r\n2. Go to our support page: http://mybmtbgd7aprdnw2ekxht5qap5daam2wch25coqerrq2zdioanob34ad.onion\r\n\tThis page can take up to 30 minutes to load.\r\n\r\n3. Enter your encryption ID: qLRS3o7nBgYneLCCIQT5S9+wDocPid9vGWlDqWB004LvisizirSDvQ3mpA3NcJAuRWgQw0M5TcgSNEttohZcJzM2VXBrdjcx\r\n\r\n\r\nEmail to support: brain.support@cyberfear.com", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "----------- [ Welcome to buhtiRansom ] -------------> \r\n\r\n What happend? \r\n ---------------------------------------------- \r\n Your files are encrypted. We use strong encryption algorithms, so you cannot decrypt your data. \r\n But you can restore everything by purchasing a special program from us - universal decryptor. This program will restore all your files. \r\n Follow our instructions below and you will recover all your data. \r\n\r\n What guarantees? \r\n ---------------------------------------------- \r\n We value our reputation. If we do not do our work and liabilities, nobody will pay us. This is not in our interests. \r\n All our decryption software is perfectly tested and will decrypt your data. \r\n\r\n How to get access? \r\n ---------------------------------------------- \r\n Using a browser: \r\n 1) Open website: https://satoshidisk.com/pay/CIGsph\r\n 2) Enter valid email to receive download link after payment. \r\n 3) Pay amount to Bitcoin address. \r\n 4) Receive email link to the download page. \r\n 5) Decrypt instruction included. \r\n\r\n !!! DANGER !!! \r\n DO NOT MODIFY or try to RECOVER any files yourself. It WILL NOT be able to RESTORE. \r\n !!! DANGER !!! \r\n", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "ATTENTION: YOUR DATA HAS BEEN LOCKED!\r\n\r\nDear representatives of the company,\r\n\r\nWe are compelled to inform you that your information system has been successfully breached by our group. \r\nAll your data, including financial reports, customer databases, internal documentation, correspondence, and even backup files, have been encrypted using state-of-the-art cryptographic algorithms.\r\nWithout our unique decryption key, restoring access to this data is impossible.\r\nWe strongly advise against attempting to resolve this issue independently, as any such attempts may result in irreversible data loss.\r\n\r\nYour company is now in an extremely vulnerable position. Disclosure or destruction of the data may lead to serious consequences, including:\r\n\r\nFinancial losses: \r\n\r\nLeakage of confidential information can result in lawsuits, fines, and compensation claims. \r\nMoreover, your competitors may exploit this data to gain an unfair advantage in the market.\r\n\r\nReputational damage:\r\n\r\nLoss of trust from clients and partners may negatively impact your business. \r\nNews of the cyberattack will spread quickly, and your brand may become associated with unreliability and an inability to protect data.\r\n\r\nLegal consequences: \r\n\r\nViolation of data protection laws (e.g., GDPR, CCPA, or other regional regulations) may lead to significant fines and audits by regulatory authorities.\r\nThis may also necessitate a mandatory restructuring of your data processing procedures.\r\n\r\nOperational issues: \r\n\r\nLack of access to critical systems may lead to a complete halt in your company\u0092s operations.\r\nThis could affect not only you but also your customers, partners, and suppliers.\r\n\r\n\r\nADDITIONAL RISKS AND THREATS:\r\n\r\nLegal consequences for company leadership:\r\n\r\nIf we decide to disclose the data, it may lead to criminal charges against your company\u0092s management for negligence and violation of data protection rules. \r\nYou personally may be held accountable, and your career could be at risk.\r\n\r\nMedia and public opinion:\r\n\r\nWe collaborate with various media outlets and are ready to provide them with part of your data for public exposure. \r\nInformation about your inability to protect data will become public knowledge, leading to further reputational damage.\r\n\r\nMass lawsuits from clients and partners:\r\n\r\nWe have prepared anonymous instructions for your clients and partners affected by the leak.\r\nThese instructions will help them file class-action lawsuits against your company.\r\nWe understand the importance of the stolen information for your organization. \r\nCurrently, all data is in our possession. \r\nWe are ready to discuss the terms of transferring the decryption key and guarantee the complete deletion of all copied data after receiving payment. \r\n\r\nWe also offer an alternative: ignoring this message will either lead to the public leakage of data through our special portal on the Dark Web or result in its complete destruction.\r\n\r\n***\r\n\r\nBrain Cipher Leaks: http://vkvsgl7lhipjirmz6j5ubp3w3bwvxgcdbpi3fsbqngfynetqtw4w5hyd.onion/\r\n\r\n***\r\n\r\nPLEASE NOTE: Any contact with law enforcement agencies or data recovery companies will be considered a violation of our agreement.\r\n\r\nIf we discover that you are collaborating with third parties, this will immediately lead to the following actions:\r\n\r\nKey deletion: all decryption keys will be irrevocably deleted.\r\nPublic leak: We will release part of the data on public resources to ensure maximum reputational damage.\r\nIncreased recovery cost: The price for decryption will double, and the timeframe for providing the key will be extended.\r\nLegal consequences for leadership: We will pass information about your collaboration with law enforcement to the media and regulatory bodies, leading to additional legal and reputational problems.\r\n\r\n\r\nWe understand that this is a difficult situation and would like to offer you a way to resolve it. For this purpose, we provide clear instructions for data recovery. \r\nPlease note that time is limited. If we do not receive a response within 72 hours, the cost of recovery will increase, and the likelihood of data preservation will significantly decrease.\r\n\r\n\r\n\r\nWHY YOU SHOULD CONTACT US DIRECTLY?\r\n\r\n\r\n\r\nGuaranteed security: We guarantee the complete deletion of all data copies after receiving payment.\r\nProfessional approach: We use cutting-edge technologies to ensure reliable encryption and decryption of data.\r\nConfidentiality: Our communication channels are fully anonymous, and we do not share information with third parties.\r\nFlexibility: We are ready to discuss payment terms and provide additional time for decision-making.\r\nNo risks: Cooperation with us is the only way to avoid a public data leak and irreversible data loss.\r\nProtection from legal consequences: We will ensure that information about your company does not fall into the hands of law enforcement or the media if you meet our requirements.\r\n\r\n\r\n========================================\r\n\r\n\r\nTo contact us, follow these instructions:\r\n\r\n1.Download and install Tor Browser (https://www.torproject.org/download/)\r\n2.Go to our support page: http://brain4zoadgr6clxecixffvxjsw43cflyprnpfeak72nfh664kqqriyd.onion (This page can take up to 30 minutes to load.)\r\n3.Enter your encryption ID: 9iZWVSLvVT0Kemtw6GdzJZFXc2WnJF6DfLoOrueuccDycGAZkTeFnE1TkqV5ODhe1wZ8vPHM3ODVI5bJenlkFIbnVuaUlk\r\n\r\nWe will provide further instructions on payment and data recovery. \r\nAfter confirming payment, we will transfer a unique decryption key that will allow you to restore access to all your files.\r\nWe strongly recommend acting quickly and professionally! \r\nAny delays or attempts to ignore this message may lead to irreversible consequences. We are ready to cooperate and ensure a secure resolution to this issue.\r\n\r\nEmail to support: brain.decrypt@cyberfear.com\r\n\r\nWelcome to BrainCipher!", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "ATTENTION: YOUR DATA HAS BEEN LOCKED!\r\n\r\nDear representatives of the company,\r\n\r\nWe are compelled to inform you that your information system has been successfully breached by our group. \r\nAll your data, including financial reports, customer databases, internal documentation, correspondence, and even backup files, have been encrypted using state-of-the-art cryptographic algorithms.\r\nWithout our unique decryption key, restoring access to this data is impossible.\r\nWe strongly advise against attempting to resolve this issue independently, as any such attempts may result in irreversible data loss.\r\n\r\nYour company is now in an extremely vulnerable position. Disclosure or destruction of the data may lead to serious consequences, including:\r\n\r\nFinancial losses: \r\n\r\nLeakage of confidential information can result in lawsuits, fines, and compensation claims. \r\nMoreover, your competitors may exploit this data to gain an unfair advantage in the market.\r\n\r\nReputational damage:\r\n\r\nLoss of trust from clients and partners may negatively impact your business. \r\nNews of the cyberattack will spread quickly, and your brand may become associated with unreliability and an inability to protect data.\r\n\r\nLegal consequences: \r\n\r\nViolation of data protection laws (e.g., GDPR, CCPA, or other regional regulations) may lead to significant fines and audits by regulatory authorities.\r\nThis may also necessitate a mandatory restructuring of your data processing procedures.\r\n\r\nOperational issues: \r\n\r\nLack of access to critical systems may lead to a complete halt in your company\u0092s operations.\r\nThis could affect not only you but also your customers, partners, and suppliers.\r\n\r\n\r\nADDITIONAL RISKS AND THREATS:\r\n\r\nLegal consequences for company leadership:\r\n\r\nIf we decide to disclose the data, it may lead to criminal charges against your company\u0092s management for negligence and violation of data protection rules. \r\nYou personally may be held accountable, and your career could be at risk.\r\n\r\nMedia and public opinion:\r\n\r\nWe collaborate with various media outlets and are ready to provide them with part of your data for public exposure. \r\nInformation about your inability to protect data will become public knowledge, leading to further reputational damage.\r\n\r\nMass lawsuits from clients and partners:\r\n\r\nWe have prepared anonymous instructions for your clients and partners affected by the leak.\r\nThese instructions will help them file class-action lawsuits against your company.\r\nWe understand the importance of the stolen information for your organization. \r\nCurrently, all data is in our possession. \r\nWe are ready to discuss the terms of transferring the decryption key and guarantee the complete deletion of all copied data after receiving payment. \r\n\r\nWe also offer an alternative: ignoring this message will either lead to the public leakage of data through our special portal on the Dark Web or result in its complete destruction.\r\n\r\n***\r\n\r\nBrain Cipher Leaks: http://vkvsgl7lhipjirmz6j5ubp3w3bwvxgcdbpi3fsbqngfynetqtw4w5hyd.onion/\r\n\r\n***\r\n\r\nPLEASE NOTE: Any contact with law enforcement agencies or data recovery companies will be considered a violation of our agreement.\r\n\r\nIf we discover that you are collaborating with third parties, this will immediately lead to the following actions:\r\n\r\nKey deletion: all decryption keys will be irrevocably deleted.\r\nPublic leak: We will release part of the data on public resources to ensure maximum reputational damage.\r\nIncreased recovery cost: The price for decryption will double, and the timeframe for providing the key will be extended.\r\nLegal consequences for leadership: We will pass information about your collaboration with law enforcement to the media and regulatory bodies, leading to additional legal and reputational problems.\r\n\r\n\r\nWe understand that this is a difficult situation and would like to offer you a way to resolve it. For this purpose, we provide clear instructions for data recovery. \r\nPlease note that time is limited. If we do not receive a response within 72 hours, the cost of recovery will increase, and the likelihood of data preservation will significantly decrease.\r\n\r\n\r\n\r\nWHY YOU SHOULD CONTACT US DIRECTLY?\r\n\r\n\r\n\r\nGuaranteed security: We guarantee the complete deletion of all data copies after receiving payment.\r\nProfessional approach: We use cutting-edge technologies to ensure reliable encryption and decryption of data.\r\nConfidentiality: Our communication channels are fully anonymous, and we do not share information with third parties.\r\nFlexibility: We are ready to discuss payment terms and provide additional time for decision-making.\r\nNo risks: Cooperation with us is the only way to avoid a public data leak and irreversible data loss.\r\nProtection from legal consequences: We will ensure that information about your company does not fall into the hands of law enforcement or the media if you meet our requirements.\r\n\r\n\r\n========================================\r\n\r\n\r\nTo contact us, follow these instructions:\r\n\r\n1.Download and install Tor Browser (https://www.torproject.org/download/)\r\n2.Go to our support page: http://brain4zoadgr6clxecixffvxjsw43cflyprnpfeak72nfh664kqqriyd.onion (This page can take up to 30 minutes to load.)\r\n3.Enter your encryption ID: JpHrQWFqWcAmGyKZCPDdvFUvGEGZUBn+wETtm2s54PwyICLOwyUaFFJF8SDcluB3s2adSNoVuAnhzOlSCISBm2JvNWZNWGpp\r\n\r\nWe will provide further instructions on payment and data recovery. \r\nAfter confirming payment, we will transfer a unique decryption key that will allow you to restore access to all your files.\r\nWe strongly recommend acting quickly and professionally! \r\nAny delays or attempts to ignore this message may lead to irreversible consequences. We are ready to cooperate and ensure a secure resolution to this issue.\r\n\r\nEmail to support: brain.decrypt@cyberfear.com\r\n\r\nWelcome to BrainCipher!", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "ATTENTION: YOUR DATA HAS BEEN LOCKED!\r\n\r\nDear representatives of the company,\r\n\r\nWe are compelled to inform you that your information system has been successfully breached by our group. \r\nAll your data, including financial reports, customer databases, internal documentation, correspondence, and even backup files, have been encrypted using state-of-the-art cryptographic algorithms.\r\nWithout our unique decryption key, restoring access to this data is impossible.\r\nWe strongly advise against attempting to resolve this issue independently, as any such attempts may result in irreversible data loss.\r\n\r\nYour company is now in an extremely vulnerable position. Disclosure or destruction of the data may lead to serious consequences, including:\r\n\r\nFinancial losses: \r\n\r\nLeakage of confidential information can result in lawsuits, fines, and compensation claims. \r\nMoreover, your competitors may exploit this data to gain an unfair advantage in the market.\r\n\r\nReputational damage:\r\n\r\nLoss of trust from clients and partners may negatively impact your business. \r\nNews of the cyberattack will spread quickly, and your brand may become associated with unreliability and an inability to protect data.\r\n\r\nLegal consequences: \r\n\r\nViolation of data protection laws (e.g., GDPR, CCPA, or other regional regulations) may lead to significant fines and audits by regulatory authorities.\r\nThis may also necessitate a mandatory restructuring of your data processing procedures.\r\n\r\nOperational issues: \r\n\r\nLack of access to critical systems may lead to a complete halt in your company\u0092s operations.\r\nThis could affect not only you but also your customers, partners, and suppliers.\r\n\r\n\r\nADDITIONAL RISKS AND THREATS:\r\n\r\nLegal consequences for company leadership:\r\n\r\nIf we decide to disclose the data, it may lead to criminal charges against your company\u0092s management for negligence and violation of data protection rules. \r\nYou personally may be held accountable, and your career could be at risk.\r\n\r\nMedia and public opinion:\r\n\r\nWe collaborate with various media outlets and are ready to provide them with part of your data for public exposure. \r\nInformation about your inability to protect data will become public knowledge, leading to further reputational damage.\r\n\r\nMass lawsuits from clients and partners:\r\n\r\nWe have prepared anonymous instructions for your clients and partners affected by the leak.\r\nThese instructions will help them file class-action lawsuits against your company.\r\nWe understand the importance of the stolen information for your organization. \r\nCurrently, all data is in our possession. \r\nWe are ready to discuss the terms of transferring the decryption key and guarantee the complete deletion of all copied data after receiving payment. \r\n\r\nWe also offer an alternative: ignoring this message will either lead to the public leakage of data through our special portal on the Dark Web or result in its complete destruction.\r\n\r\n***\r\n\r\nBrain Cipher Leaks: http://vkvsgl7lhipjirmz6j5ubp3w3bwvxgcdbpi3fsbqngfynetqtw4w5hyd.onion/\r\n\r\n***\r\n\r\nPLEASE NOTE: Any contact with law enforcement agencies or data recovery companies will be considered a violation of our agreement.\r\n\r\nIf we discover that you are collaborating with third parties, this will immediately lead to the following actions:\r\n\r\nKey deletion: all decryption keys will be irrevocably deleted.\r\nPublic leak: We will release part of the data on public resources to ensure maximum reputational damage.\r\nIncreased recovery cost: The price for decryption will double, and the timeframe for providing the key will be extended.\r\nLegal consequences for leadership: We will pass information about your collaboration with law enforcement to the media and regulatory bodies, leading to additional legal and reputational problems.\r\n\r\n\r\nWe understand that this is a difficult situation and would like to offer you a way to resolve it. For this purpose, we provide clear instructions for data recovery. \r\nPlease note that time is limited. If we do not receive a response within 72 hours, the cost of recovery will increase, and the likelihood of data preservation will significantly decrease.\r\n\r\n\r\n\r\nWHY YOU SHOULD CONTACT US DIRECTLY?\r\n\r\n\r\n\r\nGuaranteed security: We guarantee the complete deletion of all data copies after receiving payment.\r\nProfessional approach: We use cutting-edge technologies to ensure reliable encryption and decryption of data.\r\nConfidentiality: Our communication channels are fully anonymous, and we do not share information with third parties.\r\nFlexibility: We are ready to discuss payment terms and provide additional time for decision-making.\r\nNo risks: Cooperation with us is the only way to avoid a public data leak and irreversible data loss.\r\nProtection from legal consequences: We will ensure that information about your company does not fall into the hands of law enforcement or the media if you meet our requirements.\r\n\r\n\r\n========================================\r\n\r\n\r\nTo contact us, follow these instructions:\r\n\r\n1.Download and install Tor Browser (https://www.torproject.org/download/)\r\n2.Go to our support page: http://brain4zoadgr6clxecixffvxjsw43cflyprnpfeak72nfh664kqqriyd.onion (This page can take up to 30 minutes to load.)\r\n3.Enter your encryption ID: y40JhmrKbqaEVpMzuffIK9OXeyCQ9xmsGfvyGW2Tbg1CNxiJB3nQshs1lr1OEVzEuewaHcWs0PRBzFaROLB3oxclNueUpI\r\n\r\nWe will provide further instructions on payment and data recovery. \r\nAfter confirming payment, we will transfer a unique decryption key that will allow you to restore access to all your files.\r\nWe strongly recommend acting quickly and professionally! \r\nAny delays or attempts to ignore this message may lead to irreversible consequences. We are ready to cooperate and ensure a secure resolution to this issue.\r\n\r\nEmail to support: brain.decrypt@cyberfear.com\r\n\r\nWelcome to BrainCipher!", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Dear managment!\r\n\r\n---Welcome! Your are locked by SenSayQ!---\r\n\r\nIf you are reading this message, means that:\r\n\r\n * Your network infrastructures have been compromized!\r\n * Critical data has leaked!\r\n * Files are encrypted!\r\n \r\n\r\n-----------------------------------------------------------------------\r\nThe best and only thing you can do is to contact us to settle the matter before any losses occurs. \r\n-----------------------------------------------------------------------\r\n\r\n1. If you modify files - our decrypt software won't able to recover data.\r\n2. If you use third party software - you can damage/modify files (see item 1). \r\n3. You need cipher key / our decrypt software to restore you files. \r\n4. The police or authorities will not be able to help you get the cipher key. We encourage you to consider your decisions.\r\n\r\n\r\nContacting us will be the fastest and safest solution to the problem.\r\n\r\n-----------------------------------------------------------------------\r\n\r\nAttention! If you do not contact us within 72 hours, we will be forced to publish the stolen data on our website.\r\n\r\n\r\nTo contact us:\r\n\r\n1. Download and install Tor Browser - torproject.org/download\r\n2. Follow the link: ppzmaodrgtg7r6zcputdlaqfliubmmjpo4u56l3ayckut3nyvw6dyayd.onion\r\n3. Enter your ID: TFfgc8xENZ62nkC0Yt7oNeR3Uqg07IcLs1eEiuDcOAzAJl1GhJbs3QzbxidYAtsddy4JfaZE3wubaPiNbHhWaThiTHJI\r\n\r\n\r\nE-mail support: qn.support@cyberfear.com", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Go to https://getsession.org/; download & install; then add 05c5dbb3e0f6c173dd4ca479587dbeccc1365998ff9042581cd294566645ec7912 to your contacts and send a message with this codename ---> WINDOWS", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Hello, \r\n\r\nThe key data points of your network has been compromised, and all of your company's critical data has been transferred to our secure systems. \r\n\r\nPositive News:\r\n\r\n- We are capable of fully restoring your systems and data.\r\n- If we come to an agreement, this incident will remain confidential between your organization and our team. \r\n- Our motivation is purely financial, and we do not align with any specific country or political ideology\r\n\r\nTerms and Conditions: \r\n\r\n1) You must contact us within 72 hours; otherwise, we will publish an announcement about the leak of your data.\r\n2) You have 5 days to reach an agreement; If you fail to do so, your data will be published and the recovery tool destroyed.\r\n\r\nContact us:\r\nUUID:8f1578f4-86f0-472b-b100-6c9321972646\r\n\r\nUUID is important information for you to confirm with us. Please attach this UUID in the email.\r\n\r\n\r\ntraverse_politely673@aleeas.com\r\ngrumble_monastery519@8alias.com\r\nbakeshop_unhappily046@dralias.com\r\n\r\nWe all understand what happened and what consequences await you.\r\n\r\nAll countries have their own PDPL (Personal Data Protection Law) regulations. \r\nIn the event that you do not agree with us, information pertaining to your companies and the data of your company's customers will be published on the internet, and the respective country's personal data usage authority will be informed. \r\nMoreover, confidential data related to your company will be shared with potential competitors through email and social media. \r\nYou can be sure that you will incur damages far exceeding the amount we are requesting from you should you decide not to agree with us.\r\n\r\nWhat we offer in exchange for your payment:\r\n - Full decryption and restoration of systems and data following an incident, completed within 24 hours.\r\n - We guarantee that all recovered data will remain confidential and that all of your leaked data will be securely deleted from our servers after resolving the incident. We will provide a full deletion log.\r\n - Expert advice tailored to strengthen your company's IT infrastructure against future threats.\r\n\r\nUseful tips that will help you :\r\n\t1) Do not try to recover files yourself.\r\n\t2) Do not modify encrypted files.\r\n\t3) Do not use third party software to restore your data.", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "YOUR FILES ARE ENCRYPTED!\r\n\t\t\t\r\n\t\t\tThe only way to decrypt them is to buy our decryptor.\r\n\t\t\r\n\t\t\tContact us on TOX messenger and decrypt one file for free, for proof of our working decryptor.\r\n\t\t\t\r\n\t\t\tDownload TOX messenger: https://tox.chat/\r\n\t\t\r\n\t\t\tAdd TOX ID: 82EB02C9FE8B50B794181CCD14F851EB23428FD265C609CD2054DA2A640008154B1FBDE043D7\r\n\t\t", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Your files are locked and stolen. You must pay ransom to unlock the files. We will keep attacking you and publish your data on onion websites if you don't pay the ransom.\r\n\tContact: lockjimmy@onionmail.org\r\n\tWe can offer you a security report after you pay the ransom if you want.\r\n ", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Your personal files have been encrypted!\r\n\r\nAll your important files have been encrypted, but for your solution, we can return them. You can pay for the ransom of your personal data. Contact us to redeem your files via the email address bitboxgang@mail2tor.com. Send a message with the subject [T0D812US] Rescue my files", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "go to https://getsession.org/; download & install; run, click conversations, send new message to this id 05c5dbb3e0f6c173dd4ca479587dbeccc1365998ff9042581cd294566645ec7912; mention this code SOCOTRA_WIN in your initial message; then wait for our response; we have exfiltrated all your valuable data; we are going to publish it on the dark web pretty soon", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "\n SI DECIDE NO CUMPLIR con cualquiera de las exigencias entenderemos negatividad de su parte y procederemos a publicar informaci\u00f2n vulnerable de su empresa, empleados y clientes ademas de no decifrar sus archivos.\r\n\t\r\n\t>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n \r\n\r\n>>>> You must communicate via email within the first 2 hours after the attack indicating the name of your business.\r\n\r\n\tEMAIL: ransomnarco@torbox3uiot6wchz.onion\r\n\r\n\tWrite to a email and wait for the answer, we will always answer you. \r\n\tSometimes you will need to wait for our answer because we attack many companies.\r\n\t\r\n\t\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "\n YOUR FILES HAVE BEEN ENCRYPTED!\r\n\r\nDo not panic. Your data is safe, but it is locked and encrypted. You cannot access it without our help.\r\n\r\nWhat happened?\r\nYour network has been compromised by .50RANSOMFIRE . All your important files (documents, databases, photos, etc.) have been encrypted with an algorithm. Without the decryption key, it is mathematically impossible to recover your data.\r\n\r\nWhat do we want?\r\nTo recover your files, you must pay a ransom of $300 in Bitcoin. If you do not pay within 72 hours, your data will be permanently lost, and the decryption key will be deleted.\r\n\r\nContact us\r\n\r\nsoftware009a@proton.me", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "\nYour Files Are Encrypted\r\n\r\nYour system has been compromised, and all your files have been encrypted by our advanced ransomware. To regain access, you must pay a ransom of $250 in Bitcoin.\r\n\r\nInstructions:\r\n\r\n>Contact us at software009a@proton.me \r\n>Upon verification, we will provide the decryption key and the decryptor.\r\n>Failure to comply within 72 hours will result in permanent data loss and we delete the decryption key forever. Do not attempt to decrypt the files yourself", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "\r\n\r\n------Dear managers!------\r\nIf you are reading this, it means your network has been attacked. What does that mean?\r\nWe hacked your network and now all your files, documents, client database, projects and other important data safely encrypted with reliable algorithms.\r\nwe also have a copy of all your data.\r\nWARNING!!! You don't have to go to the POLICE, etc. Otherwise we will not be able to help you.\r\nYou cannot acces the files right now. But do not worry. You can get it back! It is easy to recover in a few steps.\r\nAs proof, we can decrypt any 3 files you provide.\r\n\r\nWe are not interested to ruin your business. We want to get ransom and be happy.\r\nPlease bring this information to your team leaders as soon as possible.\r\n\r\nIn case of a successfull transaction, we will restore your systems within 4-6 hours and also provide security recommendations.\r\n\r\n\r\n-----------------------WARNING-----------------------\r\n\r\nIf you modify files - our decrypt software won't able to recover data\r\nIf you use third party software - you can damage/modify files (see item 1)\r\nYou nedd cipher key / our decrypt software to restore you files.\r\nThe police or authorities will not be able to help you get the cipher key. We encourage you to consider your decisions.\r\n\r\n-----------------------RECOVERY-----------------------\r\n\r\nUse email: lockthis@cyberfear.com\r\nAlternative email address: ball_mount@mail2tor.com (ball_mount@mailum.com)\r\nID message: c5337115f1d1a\r\n", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "\r\n\r\nYour network has been penetrated.\r\n\r\n\r\nAll files on each host in the network have been encrypted with a strong algorithm.\r\n\r\n\r\nBackups were either encrypted\r\nShadow copies also removed, so F8 or any other methods may damage encrypted data but not recover.\r\n\r\n\r\nWe exclusively have decryption software for your situation.\r\nMore than a year ago, world experts recognized the impossibility of deciphering by any means except the original decoder.\r\nNo decryption software is available in the public.\r\nAntiviruse companies, researchers, IT specialists, and no other persons cant help you decrypt the data.\r\n\r\n\r\nDO NOT RESET OR SHUTDOWN - files may be damaged.\r\nDO NOT DELETE readme files.\r\n\r\n \r\n\r\nTo confirm our honest intentions.Send 2 different random files and you will get it decrypted.\r\nIt can be from different computers on your network to be sure that one key decrypts everything.\r\n2 files we unlock for free\r\n\r\n\r\nTo get info (decrypt your files) contact us at telegram first . if you don't get answer in 24 hours\r\nthen write us a email\r\n\r\nContact information :\r\n \r\nMail 1 : AzureShard@zohomail.eu\r\n\r\nTelegram: https://t.me/AzureShard\r\n\r\nYou will receive btc address for payment in the reply letter\r\n\r\n\r\nNo system is safe!", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "\r\n \t\t\t\t----------- [ Welcome to buhtiRansom ] -------------> \r\n\r\n What happend? \r\n ---------------------------------------------- \r\n Your files are encrypted. We use strong encryption algorithms, so you cannot decrypt your data. \r\n But you can restore everything by purchasing a special program from us - universal decryptor. This program will restore all your files. \r\n Follow our instructions below and you will recover all your data. \r\n\r\n What guarantees? \r\n ---------------------------------------------- \r\n We value our reputation. If we do not do our work and liabilities, nobody will pay us. This is not in our interests. \r\n All our decryption software is perfectly tested and will decrypt your data. \r\n\r\n How to get access? \r\n ---------------------------------------------- \r\n Using a browser: \r\n 1) Open website: https://satoshidisk.com/pay/CKiJU8 \r\n 2) Enter valid email to receive download link after payment. \r\n 3) Pay amount to Bitcoin address. \r\n 4) Receive email link to the download page. \r\n 5) Decrypt instruction included. \r\n\r\n !!! DANGER !!! \r\n DO NOT MODIFY or try to RECOVER any files yourself. It WILL NOT be able to RESTORE. \r\n !!! DANGER !!! \r\n ", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "\r\n ~~~ AlphaCat ~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack worldwide and there is no dissatisfied victim after payment.\r\n \r\n>>>> You need contact us via email with srenshot of btc transaction and your personal DECRYPTION ID\r\n\r\n\tContact via Email with your personal Decryption id !: hackbeenswim@mail2tor.com\r\n\t\r\n\tSend 400$ (0.006 BTC) at this address --> bc1qkr7wxuqwet9w6920vk94p7npkxh33fc7prv55q\r\n\t\r\n>>>> Your personal DECRYPTION ID: %s\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack repeatedly again!", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "\r\n ~~~ Ikaruz Red Team the world's Simple Ransomware Since 2019~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n\tThe data will be published on TOR website if you do not pay the ransom \r\n\r\n\tLinks for Tor Browser:\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion\r\n\r\n\tLinks for the normal browser\r\n\thttp://lockbitapt.uz\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion.ly\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion.ly\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion.ly\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion.ly\r\n\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n \r\n\tYou can obtain information about us on twitter https://twitter.com/hashtag/lockbit?f=live\r\n \r\n\r\n>>>> You need contact us and decrypt one file for free on these TOR sites with your personal DECRYPTION ID\r\n\r\n\tDownload and install TOR Browser https://www.torproject.org/\r\n\tWrite to a chat and wait for the answer, we will always answer you. \r\n\tSometimes you will need to wait for our answer because we attack many companies.\r\n\t\r\n\tLinks for Tor Browser:\r\n\thttp://lockbitsupt7nr3fa6e7xyb73lk6bw6rcneqhoyblniiabj4uwvzapqd.onion\r\n\thttp://lockbitsupuhswh4izvoucoxsbnotkmgq6durg7kficg6u33zfvq3oyd.onion\r\n\thttp://lockbitsupn2h6be2cnqpvncyhj4rgmnwn44633hnzzmtxdvjoqlp7yd.onion\r\n\r\n\tLink for the normal browser\r\n\thttp://lockbitsupp.uz\r\n\t\r\n\tIf you do not get an answer in the chat room for a long time, the site does not work and in any other emergency, you can contact us in jabber or tox.\r\n\t\r\n\tTox ID LockBitSupp: 3085B89A0C515D2FB124D645906F5D3DA5CB97CEBEA975959AE4F95302A04E1D709C3C4AE9B7\r\n\tXMPP (Jabber) Support: 598954663666452@exploit.im 365473292355268@thesecure.biz\r\n\t\r\n>>>> Your personal DECRYPTION ID: %s\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!\r\n\r\n\r\n>>>> Advertisement\r\n\t\r\n\tWould you like to earn millions of dollars $$$ ?\r\n\r\n\tOur company acquire access to networks of various companies, as well as insider information that can help you steal the most valuable data of any company. \r\n\tYou can provide us accounting data for the access to any company, for example, login and password to RDP, VPN, corporate email, etc. \r\n\tOpen our letter at your email. Launch the provided virus on any computer in your company.\r\n\r\n\tYou can do it both using your work computer or the computer of any other employee in order to divert suspicion of being in collusion with us.\r\n\r\n\tCompanies pay us the foreclosure for the decryption of files and prevention of data leak.\r\n\r\n\tYou can contact us using Tox messenger without registration and SMS https://tox.chat/download.html. \r\n\tUsing Tox messenger, we will never know your real name, it means your privacy is guaranteed.\r\n\r\n\tIf you want to contact us, write in jabber or tox. \r\n\t\r\n\tTox ID LockBitSupp: 3085B89A0C515D2FB124D645906F5D3DA5CB97CEBEA975959AE4F95302A04E1D709C3C4AE9B7\r\n\tXMPP (Jabber) Support: 598954663666452@exploit.im 365473292355268@thesecure.biz\r\n\t\r\n\tIf this contact is expired, and we do not respond you, look for the relevant contact data on our website via Tor or Brave browser \r\n\t\r\n\tLinks for Tor Browser:\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion\r\n\r\n\t\r\n\tLinks for the normal browser\r\n\thttp://lockbitapt.uz\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion.ly\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion.ly\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion.ly\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion.ly", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "\r\nIf your data is accidentally encrypted, please contact us as soon as possible, otherwise your data may be permanently deleted.\r\n\r\nYou can contact me via email.\r\n\r\n>>>>Your personal DECRYPTION ID:% s\r\n\r\nE-mail: mysterious666@mail2tor.com\r\nE-mail2: smith.lisa@onionmail.org\r\n\r\nYou only need to pay a small fee, and we will decrypt it for you within 24 hours.\r\n\r\n>>>>We only accept virtual currency USDT transactions. You need to prepare a virtual currency wallet in advance, and we will provide you with the payment address.\r\n>>>>Suggest contacting us for free decryption of a file before completing the payment to prove that we can help you decrypt it.\r\n\r\n>>>>After the payment is completed, send the payment photo to email: smith.lisa87@tutamail.com\r\n>>>>The payment has been completed and sent via email. We will provide you with a decryption program\r\n\r\n>>>>What guarantee will we not deceive you?\r\nWe are not a politically motivated group, we just need money.\r\nIf you make the payment, we will thank you and provide you with a decryption program, and your data will not be disclosed.\r\nAfter payment, we will immediately send you the decryption program. Our reputation is very important to us.", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "------Dear managers!------\r\nIf you are reading this, it means your network has been attacked. What does that mean?\r\nWe hacked your network and now all your files, documents 'NDA', clients databases, projects and other important data are safely encrypted with reliable algorithms.\r\nWe also have a copy of all your data.\r\n\r\nWARNING!!! You don't have to go to the POLICE, etc. Otherwise we will not be able to help you.\r\n----------------------------------------------------------------------------------------------------------\r\nYou cannot access the files right now. But do not worry. You can get it back! It is easy to recover in a few steps.\r\n\r\nAs proof, we can decrypt any 3 files you provide.\r\nFiles must not be larger than 1 megabyte and must not contain data tables.\r\n\r\nWe are also ready to provide proof of the leak after you confirm that you are a legitimate representative of the company.\r\n\r\nWe are not interested to ruin your business. We want to get ransom and be happy.\r\nPlease bring this information to your team leaders as soon as possible.\r\n\r\n\r\nContacting us will be the fastest and safest solution to the problem. In case of a successful transaction, we will restore your systems within 4-6 hours, as well as give recommendations on how to ensure security. \r\n\r\nIf you don't contact us within 48 hours, we will start publishing your data in the public domain and on our blog.\r\n\r\n\r\n\r\n---------------------------------WARNING------------------------------------------------------------------\r\n\r\n1) If you modify files - our decrypt software won't able to recover data \r\n2) If you use third party software - you can damage/modify files (see item 1) \r\n3) You need cipher key / our decrypt software to restore you files. \r\n4) The police or authorities will not be able to help you get the cipher key. We encourage you to consider your decisions. \r\n\r\n\r\n---------------------------------RECOVERY------------------------------------------------------------------\r\n\r\nUse email: qn.support@cyberfear.com (Use a new Protonmail.com account. In the first message, specify the encryption ID 17824chami)", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "Your data are stolen and encrypted\r\n\r\n\tThe data will be published on TOR website if you do not pay the ransom \r\n\tYou need contact us with your files' ENCRYPTION suffix and we will decrypt one file for you.\r\n\tContact Email: yiimuu499@onionmail.org", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "go to https://getsession.org/; download & install; run, click conversations, send new message to this id 05c5dbb3e0f6c173dd4ca479587dbeccc1365998ff9042581cd294566645ec7912; mention this code FORMOSA in your initial message; then wait for our response; we have exfiltrated all your valuable data; we are going to publish it on the dark web pretty soon", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "\u00e3\u0080\u008b\u00e3\u0080\u008b\u00e3\u0080\u008bWhat happened? \u00e3\u0080\u008a\u00e3\u0080\u008a\u00e3\u0080\u008a\r\n\r\n*All your files are encrypted, you can't recover them without our decryptor.\r\n\r\n*We only need money, after payment we will provide you with a decryptor for the entire network, you will recover all your data.\r\nIf you don't contact us, we will publish all your data on our blog and send it to the largest mass media.\r\n\r\n*As long as you pay, we will provide you with a decryption program, at the same time we will delete the stolen data and guarantee that there will be no more attacks.\r\nIf we don't give you a decryptor or we don't delete your data, no one will pay us in the future, this is not in line with our goal, we always keep our promises.\r\n\r\n*You contact this email to confirm the payment amount, and after the payment is completed, send the payment photo to this email, and we will provide you with a decryption program.\r\n>>>>Pay the ransom amount Contact email: KatherineLeonardz@mail.com\r\n>>>>Payment cryptocurrency address USDT-TRC20: Tzb9aEMbCXSrBCzik68dE8kmwEJ9ND\r\n\r\n* WARNING*\r\n\u00e3\u0080\u008b\u00e3\u0080\u008bWe strongly recommend that you do not try to repair your files, otherwise they will be damaged!!!\r\n\u00e3\u0080\u008b\u00e3\u0080\u008bOur team members come from different countries, we are not interested in anything else, we are only interested in money.\r\n\u00e3\u0080\u008b\u00e3\u0080\u008bSometimes you need to wait for our response because we attack many companies.\r\n\u00e3\u0080\u008b\u00e3\u0080\u008bWe do not allow re-attacks on target companies that have already paid.\r\n\u00e3\u0080\u008b\u00e3\u0080\u008bWe do not allow targeting non-profit hospitals and some non-profit organizations.\r\n\u00e3\u0080\u008b\u00e3\u0080\u008bWant to ask the authorities for protection?\r\n- Asking for their help will only make the situation worse, they will try to prevent you from negotiating with us, because negotiation will make them look incompetent, and you will get nothing after the incident data report is handed over to the government department, and everyone except you will forget what happened! ! ! ! ! !\r\n\u00e3\u0080\u008b\u00e3\u0080\u008bAfter the payment is successful, you will not have bad news. But if the payment fails, there will be a lot of bad news, so don't think about how to avoid it.\r\nJust focus on negotiation, payment and decryption, our experts will solve all your problems within 1 day after receiving the payment: server and data recovery and delete the stolen data, everything will be as good as new.", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "\r\n ~~~ LockBit 3.0 the world's fastest ransomware since 2077~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n\tThe data will be published on TOR website if you do not pay the ransom \r\n\r\n\tLinks for Tor Browser:\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion\r\n\r\n\tLinks for the normal browser\r\n\thttp://lockbitapt.uz\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion.ly\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion.ly\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion.ly\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion.ly\r\n\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n \r\n\tYou can obtain information about us on twitter https://twitter.com/hashtag/lockbit?f=live\r\n \r\n\r\n>>>> You need contact us and decrypt one file for free on these TOR sites with your personal DECRYPTION ID\r\n\r\n\tDownload and install TOR Browser https://www.torproject.org/\r\n\tWrite to a chat and wait for the answer, we will always answer you. \r\n\tSometimes you will need to wait for our answer because we attack many companies.\r\n\t\r\n\tLinks for Tor Browser:\r\n\thttp://lockbitsupt7nr3fa6e7xyb73lk6bw6rcneqhoyblniiabj4uwvzapqd.onion\r\n\thttp://lockbitsupuhswh4izvoucoxsbnotkmgq6durg7kficg6u33zfvq3oyd.onion\r\n\thttp://lockbitsupn2h6be2cnqpvncyhj4rgmnwn44633hnzzmtxdvjoqlp7yd.onion\r\n\r\n\tLink for the normal browser\r\n\thttp://lockbitsupp.uz\r\n\t\r\n\tIf you do not get an answer in the chat room for a long time, the site does not work and in any other emergency, you can contact us in jabber or tox.\r\n\t\r\n\tTox ID LockBitSupp: 3085B89A0C515D2FB124D645906F5D3DA5CB97CEBEA975959AE4F95302A04E1D709C3C4AE9B7\r\n\tXMPP (Jabber) Support: 598954663666452@exploit.im 365473292355268@thesecure.biz\r\n\t\r\n>>>> Your personal DECRYPTION ID: B7568014A48684D6D525F3F3722638C4\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!\r\n\r\n\r\n>>>> Advertisement\r\n\t\r\n\tWould you like to earn millions of dollars $$$ ?\r\n\r\n\tOur company acquire access to networks of various companies, as well as insider information that can help you steal the most valuable data of any company. \r\n\tYou can provide us accounting data for the access to any company, for example, login and password to RDP, VPN, corporate email, etc. \r\n\tOpen our letter at your email. Launch the provided virus on any computer in your company.\r\n\r\n\tYou can do it both using your work computer or the computer of any other employee in order to divert suspicion of being in collusion with us.\r\n\r\n\tCompanies pay us the foreclosure for the decryption of files and prevention of data leak.\r\n\r\n\tYou can contact us using Tox messenger without registration and SMS https://tox.chat/download.html. \r\n\tUsing Tox messenger, we will never know your real name, it means your privacy is guaranteed.\r\n\r\n\tIf you want to contact us, write in jabber or tox. \r\n\t\r\n\tTox ID LockBitSupp: 3085B89A0C515D2FB124D645906F5D3DA5CB97CEBEA975959AE4F95302A04E1D709C3C4AE9B7\r\n\tXMPP (Jabber) Support: 598954663666452@exploit.im 365473292355268@thesecure.biz\r\n\t\r\n\tIf this contact is expired, and we do not respond you, look for the relevant contact data on our website via Tor or Brave browser \r\n\t\r\n\tLinks for Tor Browser:\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion\r\n\r\n\t\r\n\tLinks for the normal browser\r\n\thttp://lockbitapt.uz\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion.ly\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion.ly\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion.ly\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion.ly", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "\r\n ~~~ LockBit Black Ransomware Since 2024~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n\tPrice = 2000 $ \r\n Bitcoin = 328N9mKT6xFe6uTvtpxeKSymgWCbbTGbK2\r\n Email = jimyjoy140@cyberfear.com\r\n Email = jimyjoy140@tutamail.com\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n \r\n\t\r\n>>>> Your personal DECRYPTION ID: WERTYFG34A48MK4D6D525F3F372263313 + ID Number.README.txt\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!\r\n", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "\r\n********************************************************************************************\r\n************************ Your data are stolen and encrypted ****************************\r\n\r\n1. How to contact?\r\n\t* 1. You can use tox: https://qtox.github.io/ send message to us.\r\n\t Tox ID : 465928E63E40E772C89D47543523651AA761E5CC0599ED43C0D6E3AE1EFB9A01C14457E1F32D\r\n\t* 2. You can send email to us, \r\n\t Email address : aocpocqotox@onionmail.org\r\n\tSuggestion : Contact us in two ways at the same time, if you haven't received a reply to your email, please check your spam folder.\r\n\t\r\n2. How to pay?\r\n\t* Contact us.\r\n\r\n3. What guarantees that we will not deceive you?\r\n\r\n * We are not a politically motivated group and we do not need anything other than your money\r\n If you pay, we will provide you the programs for decryption and we will delete your data.\r\n\r\n * If we do not give you decrypters or we do not delete your data after payment, then nobody will pay us in the future.\r\n Therefore to us our reputation is very important.\r\n\r\n * We attack the hundreds of companies and there is no dissatisfied victim after payment.\r\n\r\n4. What happens if you do not pay?\r\n\r\n * If you don't pay, the data will be sold on auction platform after 72 hours, data will be bought by your competitors,\r\n and we will report your company fail to protect data as a result of a data breach to the data protection authority in your country, \r\n\t you could face significant fines.\r\n\r\n * Do not hesitate for a long time, the sooner pay, the sooner your company will be safe.\r\n\t\r\n\t* If you pay, we will delete data immediately, we can also provide you an paid hacking services. \r\n\t You can pay for the services after the hacking is successful. Please trust our strength.\r\n\r\n5. Warning! \r\n \r\n * Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n \r\n * If you do not pay the ransom we will attack your company repeatedly again!\r\n\r\n*** Your DECRYPTION ID: %s\r\n\r\n************************ Your data are stolen and encrypted **************************\r\n******************************************************************************************\r\n", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "\n ~~~ LockBit 5.01 the world's fastest ransomware since 2019~~~\n\n>>>> Your data are stolen and encrypted\n\n\tThe data will be published on TOR website if you do not pay the ransom \n\n\t\r\nBTC amount 0.01 = up to 12hr\r\nBTC amount 0.02 = up to 24hr\r\nBTC amount 0.1 = up 48 hr\r\nBTC amount 0 , deleted all files from you PC, and post all infirmation to public.\r\n\r\nwhere send BTC: bc1qm7sg7p2jkgthv7pkjy856sh9lr5x3yrpzv099d :not valid after 07/23/2024 10PM EST.\r\nTime just 12 hr, after everythink will be removed\r\nYou can buy them on the exchange or at an ATM https://coinatmradar.com. You can find the addresses here buy with credit or debet card online https://www.moonpay.com/buy. \r\nYou have 12 hours for the transfer, \r\n24 hours for the amount of 0.02, \r\nand of course, you can always wait 48 hours and pay 0.1. \r\nAfter that, send a request with confirmation to TOX , faster way!\r\nYou can contact us using Tox messenger without registration and SMS https://tox.chat/download.html. \n\t\r\nUsing Tox messenger, we will never know your real name, it means your privacy is guaranteed.\n\n\t\r\nIf you want to contact us, tox. \n\t\n\t\r\nTox ID LockBitSupp: B90F5C1EC3C13400F6D0B22B772C5FAB086F8C41A0C87B92A8B3C7F2ECBBCE191A455140273E\r\n\r\n\r\n\r\n\r\n\r\n", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "\r\n ~~~ LockBit 3.0 the world's fastest ransomware since 2019~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n\tThe data will be published on TOR website if you do not pay the ransom \r\n\r\nDeathGrip Ransomware Attack | t.me/DeathGripRansomware\r\n\r\nThis computer is attacked by russian ransomware community of professional black hat hackers. \r\nYour every single documents / details is now under observation of those hackers.\r\nIf you want to get it back then you have to pay 1000$ for it.\r\n\r\nThis Attack Is Done By Team RansomVerse You Can Find Us On Telegram\r\n @DeathGripRansomware Contact The Owner For The Decrypter Of This Ransomware\r\n\r\n#DeathGripMalware\r\n\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n \r\n\tYou can obtain information about us on Telegram t.me/DeathGripRansomware\r\n \r\n\r\n>>>> You need contact us and decrypt one file for free on these TOR sites with your personal DECRYPTION ID\r\n\r\n\tDownload and install TOR Browser https://www.torproject.org/\r\n\tWrite to a chat and wait for the answer, we will always answer you. \r\n\tSometimes you will need to wait for our answer because we attack many companies.\r\n\t\r\n\tLinks for Tor Browser:\r\n\thttp://lockbitsupt7nr3fa6e7xyb73lk6bw6rcneqhoyblniiabj4uwvzapqd.onion\r\n\thttp://lockbitsupuhswh4izvoucoxsbnotkmgq6durg7kficg6u33zfvq3oyd.onion\r\n\thttp://lockbitsupn2h6be2cnqpvncyhj4rgmnwn44633hnzzmtxdvjoqlp7yd.onion\r\n\r\n\tLink for the normal browser\r\n\thttp://lockbitsupp.uz\r\n\t\r\n\t\r\n>>>> Your personal DECRYPTION ID: B7568014A48684D6D525F3F3722638C4\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!\r\n\r\n\r\n>>>> Advertisement\r\n\t\r\n\tWould you like to earn millions of dollars $$$ ?\r\n\r\n\tOur company acquire access to networks of various companies, as well as insider information that can help you steal the most valuable data of any company. \r\n\tYou can provide us accounting data for the access to any company, for example, login and password to RDP, VPN, corporate email, etc. \r\n\tOpen our letter at your email. Launch the provided virus on any computer in your company.\r\n\r\n\tYou can do it both using your work computer or the computer of any other employee in order to divert suspicion of being in collusion with us.\r\n\r\n\tCompanies pay us the foreclosure for the decryption of files and prevention of data leak.\r\n\r\n\tYou can contact us using on Telegram messenger without registration and text t.me/DeathGripRansomware\r\n\tUsing Tox messenger, we will never know your real name, it means your privacy is guaranteed.\r\n\r\n\tIf you want to contact us, write in jabber or tox. \r\n\r\n\t\r\n\tIf this contact is expired, and we do not respond you, look for the relevant contact data on our website via Tor or Brave browser \r\n\t\r\n\tLinks for Tor Browser:\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": " (SpiderPrey)\r\n\nYour Files Have Been Locked.\r\n\r\nyou have to pay Bitcoin for Decryption.\r\n \r\nYour Personal ID : %s\r\n\r\nyou can send a little file (less than 2 megabyte) for Decryption test.\r\n\r\nTelegram :( @Dy_supa ).\r\n\r\nOur Email:laminan@keemail.me in Case of no reply from Telegram after couple of hours send message to my Email.", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "\r\n ~~~ IF YOU WANT TO BRING YOUR PROJECT BACK TO NORMAL FUNCTIONALITY WITH YOUR BACKUP AND DECRYPYION FILE YOU REALLY NEED TO PAY SOME $$$$ !\r\n\r\nAND AFTER SUCCESSFUL PAYMENT YOU WILL RECEIVE YOUR READY BACKUP AND DECRYPTION FILE FOR RESTORE YOUR NORMAL WORK !\r\n\r\nBITCOIN WALLET -\r\nbc1qg753w3v5hkhlygfrlst424h23x964qav3sr9f9\r\n\r\nWAITING FOR SUCCESSFULL PAYMENTS !~~~\r\n\r\n>>>> Your data are stolen and encrypted\r\n\r\n\tThe data will be published on TOR website if you do not pay the ransom \r\n\r\n\tLinks for Tor Browser:\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion\r\n\r\n\tLinks for the normal browser\r\n\thttp://lockbitapt.uz\r\n\thttp://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly\r\n\thttp://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly\r\n\thttp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly\r\n\thttp://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly\r\n\thttp://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly\r\n\thttp://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion.ly\r\n\thttp://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion.ly\r\n\thttp://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion.ly\r\n\thttp://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion.ly\r\n\r\n\r\n>>>> What guarantees that we will not deceive you? \r\n\r\n\tWe are not a politically motivated group and we do not need anything other than your money. \r\n \r\n\tIf you pay, we will provide you the programs for decryption and we will delete your data. \r\n\tLife is too short to be sad. Be not sad, money, it is only paper.\r\n \r\n\tIf we do not give you decrypters, or we do not delete your data after payment, then nobody will pay us in the future. \r\n\tTherefore to us our reputation is very important. We attack the companies worldwide and there is no dissatisfied victim after payment.\r\n\r\n\r\n>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!\r\n\r\n>>>> Warning! If you do not pay the ransom we will attack your company repeatedly again!\r\n\r\n\r\n>>>> Advertisement\r\n\t\r\n\tWould you like to earn millions of dollars $$$ ?\r\n\r\n\tOur company acquire access to networks of various companies, as well as insider information that can help you steal the most valuable data of any company. \r\n\tYou can provide us accounting data for the access to any company, for example, login and password to RDP, VPN, corporate email, etc. \r\n\tOpen our letter at your email. Launch the provided virus on any computer in your company.\r\n\r\n\tYou can do it both using your work computer or the computer of any other employee in order to divert suspicion of being in collusion with us.\r\n\r\n\tCompanies pay us the foreclosure for the decryption of files and prevention of data leak.\r\n\r\n\t\r\n", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": " .+####*=: \r\n -+=*=-++*=::+-:++*::@@= @@#%*+#@*+==-=-+- \r\n:=---:::::---::-:-====*+#@@ @@@=+---===-====-:+=-=::: \r\n -=--:::-:::: +::::=:=.:=#@ @#+#+-==---+:----------:-.::: \r\n ::+.:-:::--:-:--.-=+-**+-=% @##*###*+=:=--:::-=-:--=:.=:- \r\n --::-==---:-----=-=#*+-==*#%*#*++=%-*:--=--==:-=-::-:-: \r\n =.:::.:----------+=+=+*-++*@ @@**+:=*#*#--=-----:--:-=-:+: \r\n .::::------=-=.=++-++++##@ @@ @@ @%*=*+*+=**=:-:=----::::: \r\n ::-:--:--==-++=+====+%@@ @@#@@@@@@ @%=+++=++==-:::--:-::: \r\n ::----=-==-*++=+==*==# +@:@@@@@@@@@ %.*=++====+++=+::--:: \r\n :----+==-:+==+==++*=-*+:@@@@@@@%#*#*+---+*+=+=+==--::. \r\n :--=*+-=:=:=*:==-+++=-#**@+*#@@@+*#*++=++=*-=-===+=:=: \r\n .-++=--::=-==+=-=++*:*--+-*:#@@*-=+=+=--::-==== \r\n +:....::--=----=+++::=#**=@#+@*=-+=:*===-::.:::= \r\n :::-==--::-:.@@@@@#*==+==---:. \r\n ---=++---+.-@#@@+#*===-===++.. \r\n -+====:--:-+=+@*=**=*+===: \r\n ---==-@+::=:###*-+-. \r\n -*:*=*#@@@@##=-=+- \r\n @@@--#=**@*-*-:+@@ \r\n :#==-*. \r\n\r\nHi. All your files are encrypted. For decryption contact us on Session messenger.\r\n\r\nYou can get it from https://getsession.org\r\nOur Session ID: 050877486f869a0ca3c28c831576801d63e522afba3adfe310c443f9e7da124001\r\n\r\n[+] Do not rename encrypted files.\r\n[+] Do not try to decrypt your data using third party software, it may cause permanent data loss.\r\n[+] You have 72 hours to get the key.", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "\r\n\t\t\t!! ALL YOUR FILES HAS BEEN ENCRYPTED !!!\r\n\t\t\t\r\n\t\t\tYou can't restore them without our encryptor.\r\n\t\t\t\r\n\t\t\tDon't try to use any public tools, you could damage the encrypted files and lose them forever.\r\n\t\t\t\r\n\t\t\tTo make sure our encryptor works, contact us and encrypt one file for free.\r\n\t\t\t\r\n\t\t\tDownload TOX messenger: https://tox.chat/\r\n\t\t\t\r\n\t\t\tAdd friend in TOX, ID: 36F186C6FDCAAC0CF122E234B5D15F3F42F73568745F251C1306D71EBCA96817770F9B9AC2E6", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "\r\nAll of your files have been encrypted\r\nYour computer was infected with a ransomware virus. Your files have been encrypted and you won't \r\nbe able to decrypt them without our help.What can I do to get my files back? You can buy our special \r\ndecryption software, this software will allow you to recover all of your data and remove the\r\nransomware from your computer.The price for the software is $1,000. Payment can be made in Bitcoin only.\r\nHow do I pay, where do I get Bitcoin?\r\nPurchasing Bitcoin varies from country to country, you are best advised to do a quick google search\r\nyourself to find out how to buy Bitcoin. \r\nMany of our customers have reported these sites to be fast and reliable:\r\nCoinmama - https://www.coinmama.com Bitpanda - https://www.bitpanda.com\r\n\r\nPayment information Amount: 0.0155 BTC\r\nBitcoin Address: bc1q909n8v9tmhfnh5ptrfjqjum2tp9tuucag6ldvm\r\n\r\nAfter we receive your payment - the decryptor will come to your e-mail automatically and you will decrypt your files.\r\n\r\nATTENTION!\r\n\r\n- Do not try to decrypt your files yourself\r\n- Do not try to use third-party software\r\n\r\nThe above actions will lead to loss of your files on your device.\r\n\r\nDo not try to find a way out of the situation with the FBI, because we will immediately put your files in the public domain and anyone can use them.\r\n\r\nHave a nice day :)", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "\r\n~~ LockBit 3.0 the world's fastest and most stable ransomware from 2019~~~\r\n\r\n>>>>> Your data is stolen and encrypted.\r\n\r\nBLOG Tor Browser Links:\r\nhttp://lockbit3753ekiocyo5epmpy6klmejchjtzddoekjlnt6mu3qh4de2id.onion/\r\nhttp://lockbit3g3ohd3katajf6zaehxz4h4cnhmz5t735zpltywhwpc6oy3id.onion/\r\nhttp://lockbit3olp7oetlc4tl5zydnoluphh7fvdt5oa6arcp2757r7xkutid.onion/\r\nhttp://lockbit435xk3ki62yun7z5nhwz6jyjdp2c64j5vge536if2eny3gtid.onion/\r\nhttp://lockbit4lahhluquhoka3t4spqym2m3dhe66d6lr337glmnlgg2nndad.onion/\r\nhttp://lockbit6knrauo3qafoksvl742vieqbujxw7rd6ofzdtapjb4rrawqad.onion/\r\nhttp://lockbit7ouvrsdgtojeoj5hvu6bljqtghitekwpdy3b6y62ixtsu5jqd.onion/\r\n\r\n>>>>> What guarantee is there that we won't cheat you? \r\nWe are the oldest ransomware affiliate program on the planet, nothing is more important than our reputation. We are not a politically motivated group and we want nothing more than money. If you pay, we will fulfill all the terms we agree on during the negotiation process. Treat this situation simply as a paid training session for your system administrators, because it was the misconfiguration of your corporate network that allowed us to attack you. Our pentesting services should be paid for the same way you pay your system administrators salaries. You can get more information about us on Ilon Musk's Twitter https://twitter.com/hashtag/lockbit?f=live\r\n \r\n>>>>> You need to contact us on TOR darknet sites with your personal ID\r\n\r\nDownload and install Tor Browser https://www.torproject.org/\r\nWrite to the chat room and wait for an answer, we'll guarantee a response from us. If you need a unique ID for correspondence with us that no one will know about, ask it in the chat, we will generate a secret chat for you and give you his ID via private one-time memos service, no one can find out this ID but you. Sometimes you will have to wait some time for our reply, this is because we have a lot of work and we attack hundreds of companies around the world.\r\n\r\nTor Browser personal link for CHAT available only to you (available during a ddos attack): \r\nhttp://lockbitcuo23q7qrymbk6dsp2sadltspjvjxgcyp4elbnbr6tcnwq7qd.onion\r\n\r\nTor Browser Links for CHAT (sometimes unavailable due to ddos attacks):\r\nhttp://lockbit5eevg7vec4vwwtzgkl4kulap6oxbic2ye4mnmlq6njnpc47qd.onion\r\nhttp://lockbit74beza5z3e3so7qmjnvlgoemscp7wtp33xo7xv7f7xtlqbkqd.onion\r\nhttp://lockbit75naln4yj44rg6ez6vjmdcrt7up4kxmmmuvilcg4ak3zihxid.onion\r\nhttp://lockbit7a2g6ve7etbcy6iyizjnuleffz4szgmxaawcbfauluavi5jqd.onion\r\nhttp://lockbitaa46gwjck2xzmi2xops6x4x3aqn6ez7yntitero2k7ae6yoyd.onion\r\nhttp://lockbitb42tkml3ipianjbs6e33vhcshb7oxm2stubfvdzn3y2yqgbad.onion\r\nhttp://lockbitcuo23q7qrymbk6dsp2sadltspjvjxgcyp4elbnbr6tcnwq7qd.onion\r\n\r\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\r\n>> Your personal Black ID: %s <<\r\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\r\n\r\n>>>>> Warning! Do not delete or modify encrypted files, it will lead to problems with decryption of files!\r\n\r\n>>>>> Don't go to the police or the FBI for help and don't tell anyone that we attacked you. ", - "count": 1, - "total_related": 15, - "prevalence": 0.06666666666666667 - } - ], - "malware_config_c2_url": [ - { - "value": "https://pastebin.com/raw/Jv1P4zmq", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://185.215.113.59/Dy5h4kus/index.php", - "count": 1, - "total_related": 221, - "prevalence": 0.004524886877828055 - } - ], - "malware_config_misc_url": [ - { - "value": "http://github.org/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://github.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://test.white-datasheet.com/", - "count": 1, - "total_related": 19, - "prevalence": 0.05263157894736842 - }, - { - "value": "http://test.white-datasheet.com/", - "count": 1, - "total_related": 20, - "prevalence": 0.05 - } - ], - "malware_config_host_port": [ - { - "value": "lockbitks2tvnmwk.onion", - "count": 14, - "total_related": 99, - "prevalence": 0.1414141414141414 - }, - { - "value": "lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion", - "count": 14, - "total_related": 221, - "prevalence": 0.06334841628959276 - }, - { - "value": "lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion", - "count": 14, - "total_related": 248, - "prevalence": 0.056451612903225805 - }, - { - "value": "lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion", - "count": 11, - "total_related": 111, - "prevalence": 0.0990990990990991 - }, - { - "value": "lockbit3753ekiocyo5epmpy6klmejchjtzddoekjlnt6mu3qh4de2id.onion", - "count": 3, - "total_related": 116, - "prevalence": 0.02586206896551724 - }, - { - "value": "github.org", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "lockbitsupt7nr3fa6e7xyb73lk6bw6rcneqhoyblniiabj4uwvzapqd.onion", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "test.white-datasheet.com", - "count": 1, - "total_related": 14, - "prevalence": 0.07142857142857142 - }, - { - "value": "github.com", - "count": 1, - "total_related": 23, - "prevalence": 0.043478260869565216 - }, - { - "value": "185.215.113.59:80", - "count": 1, - "total_related": 221, - "prevalence": 0.004524886877828055 - }, - { - "value": "pastebin.com", - "count": 1, - "total_related": 7981, - "prevalence": 0.0001252975817566721 - } - ], - "malware_config_dropped_file": [ - { - "value": "95c20c310f9f836cf467b346a1a07560c851a6fab9e3bf5b5d4443e0aafaad9a", - "count": 2, - "total_related": 24, - "prevalence": 0.08333333333333333 - }, - { - "value": "b91b2246991e7dbe87f82e60dcb1707a08e579d14a33c4ebcace64a8aa4de18b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "fc17fd9b9dfc277107abcb203a4ac3b18fad30b99f4d3d7e919760f0afa73560", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "fe80e49416790eef40b1d120361df7a65433c93ce9360130c4b311e1e7c569c9", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "f81443ce44fff1a928678fda70b66f6f2eddcd2a9e9650bff045c08ffe8f3559", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "e8eff9293ab5e61525f39f34b8cf916eb9550507ee0c23c9895664f565eca85e", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - } - ], - "malware_config_dropped_file_path": [ - { - "value": "95c20c310f9f836cf467b346a1a07560c851a6fab9e3bf5b5d4443e0aafaad9a", - "count": 2, - "total_related": 24, - "prevalence": 0.08333333333333333 - }, - { - "value": "b91b2246991e7dbe87f82e60dcb1707a08e579d14a33c4ebcace64a8aa4de18b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "fc17fd9b9dfc277107abcb203a4ac3b18fad30b99f4d3d7e919760f0afa73560", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "ee6682b19f3100ff7c97e5d8118867d8", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "fe80e49416790eef40b1d120361df7a65433c93ce9360130c4b311e1e7c569c9", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "f81443ce44fff1a928678fda70b66f6f2eddcd2a9e9650bff045c08ffe8f3559", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "e8eff9293ab5e61525f39f34b8cf916eb9550507ee0c23c9895664f565eca85e", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - } - ], - "malware_config_registry_value": [ - { - "value": "BDCDC5DF1C334E", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "{00CD9EDF-1C1C-E787-A34E-A30657F12DD7}", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "0F643ACC9B1ADA", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0FC8890A22BA41", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1386B42B8494BC", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2D247F83862A92", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "3AD8424B6EFC88", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "56EFF903336E05", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5869B86886544C", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "586A9703166BAA", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "59175FA96E6103", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "767C3AB45158C6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "808FE5A809B392", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "A7FB4DF64FC27F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "B94BEA247C1B72", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "C73B66F050DE8E", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "C7C738FB22D22C", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "F629172F437727", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "FA0C50E256FCBA", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{030CECE2-5656-7371-75BA-756A705801B8}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{0F244183-8686-04CA-B592-B5C87B93AF2B}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{0F7C94B4-5151-C338-BAC6-BA57BCD45B68}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{3164BBCC-9B9B-B21F-36DA-36577B5A8BC6}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{356A6003-1616-ACEA-19AA-194F316EB255}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{3F17B3A9-6E6E-32BB-8703-87C85E7AB634}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{86FBAAF6-4F4F-47CC-507F-5036ADE9205C}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{A54BA324-7C7C-0611-9172-91293E653A6C}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{A8C7D2FB-2222-77AE-242C-24E597998D14}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{A8D8804B-6E6E-EEF8-AF88-AFC2A0CB9936}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{AE299E2F-4343-4C56-D027-D02CBE43CE63}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{B869FB68-8686-2FD6-6D4C-6D59FB8F32DD}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{BE86C12B-8484-20BE-CDBC-CDDA5E4161D7}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{C8C8A60A-2222-5B04-7B41-7BB1D3B5B6C6}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{E33BA2F0-5050-5C39-1A8E-1A966F41A3B8}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{EAEFFF03-3333-F3ED-0805-08C1BA1F7055}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "{F18F37A8-0909-DCA3-2E92-2EEC3A0907ED}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "22E1A03D885927", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "328BFCA2C5C7CE", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "{81E1923D-8888-E7DA-2227-2220F4E69D46}", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "{F48B4FA2-C5C5-52CD-12CE-129FF9C8ED3F}", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "B76B8F9512FEC9", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "{D26B2595-1212-A79E-D1C9-D1E22F5CBDA3}", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "9672B03EDFDD94", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "{C072C73E-DFDF-3A24-3694-36C4CE93052F}", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - } - ], - "memory_pattern_urls": [ - { - "value": "http://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion/", - "count": 7, - "total_related": 1523, - "prevalence": 0.004596191726854892 - }, - { - "value": "https://www.torproject.org/", - "count": 5, - "total_related": 41827, - "prevalence": 0.00011954001004136085 - }, - { - "value": "https://decoding.at/", - "count": 4, - "total_related": 565, - "prevalence": 0.007079646017699115 - }, - { - "value": "http://lockbitsap2oaqhcun3syvbqt6n5nzt7fqosc6jdlmsfleu3ka4k2did.onion/", - "count": 4, - "total_related": 578, - "prevalence": 0.006920415224913495 - }, - { - "value": "https://bigblog.at/", - "count": 4, - "total_related": 579, - "prevalence": 0.0069084628670120895 - }, - { - "value": "https://twitter.com/hashtag/lockbit?f=live", - "count": 4, - "total_related": 664, - "prevalence": 0.006024096385542169 - }, - { - "value": "http://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly/", - "count": 3, - "total_related": 478, - "prevalence": 0.006276150627615063 - }, - { - "value": "http://lockbitsup4yezcd5enk5unncx3zcy7kw6wllyqmiyhvanjj352jayid.onion/", - "count": 3, - "total_related": 577, - "prevalence": 0.005199306759098787 - }, - { - "value": "http://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly/", - "count": 3, - "total_related": 688, - "prevalence": 0.00436046511627907 - }, - { - "value": "http://lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion/", - "count": 3, - "total_related": 702, - "prevalence": 0.004273504273504274 - }, - { - "value": "http://lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion/", - "count": 3, - "total_related": 921, - "prevalence": 0.003257328990228013 - }, - { - "value": "http://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion/", - "count": 3, - "total_related": 926, - "prevalence": 0.0032397408207343412 - }, - { - "value": "http://lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion/", - "count": 3, - "total_related": 940, - "prevalence": 0.0031914893617021275 - }, - { - "value": "https://www.sphinx-doc.org/", - "count": 3, - "total_related": 9009, - "prevalence": 0.000333000333000333 - }, - { - "value": "https://github.com/python/cpython/blob/main/Doc/library/tokenize.rst", - "count": 2, - "total_related": 32, - "prevalence": 0.0625 - }, - { - "value": "https://github.com/python/cpython/tree/3.11/Lib/asyncio/protocols.py", - "count": 2, - "total_related": 33, - "prevalence": 0.06060606060606061 - }, - { - "value": "https://www.activestate.com/activepython/", - "count": 2, - "total_related": 33, - "prevalence": 0.06060606060606061 - }, - { - "value": "https://manpages.debian.org/vsnprintf(3", - "count": 2, - "total_related": 40, - "prevalence": 0.05 - }, - { - "value": "https://ncoghlan-devs-python-notes.readthedocs.io/en/latest/python3/questions_and_answers.html", - "count": 2, - "total_related": 54, - "prevalence": 0.037037037037037035 - }, - { - "value": "https://peps.python.org/pep-0397/", - "count": 2, - "total_related": 66, - "prevalence": 0.030303030303030304 - }, - { - "value": "https://pypi.org/project/pylint", - "count": 2, - "total_related": 70, - "prevalence": 0.02857142857142857 - }, - { - "value": "https://www.boddie.org.uk/python/COM.html", - "count": 2, - "total_related": 89, - "prevalence": 0.02247191011235955 - }, - { - "value": "https://www.nuget.org/packages/pythonx86", - "count": 2, - "total_related": 91, - "prevalence": 0.02197802197802198 - }, - { - "value": "https://github.com/python/cpython/blob/main/Doc/library/queue.rst", - "count": 2, - "total_related": 102, - "prevalence": 0.0196078431372549 - }, - { - "value": "https://tox.chat/download.htmlUsing", - "count": 2, - "total_related": 116, - "prevalence": 0.017241379310344827 - }, - { - "value": "https://peps.python.org/pep-0647/", - "count": 2, - "total_related": 132, - "prevalence": 0.015151515151515152 - }, - { - "value": "http://lockbit435xk3ki62yun7z5nhwz6jyjdp2c64j5vge536if2eny3gtid.onion/", - "count": 2, - "total_related": 149, - "prevalence": 0.013422818791946308 - }, - { - "value": "http://lockbit3g3ohd3katajf6zaehxz4h4cnhmz5t735zpltywhwpc6oy3id.onion/", - "count": 2, - "total_related": 150, - "prevalence": 0.013333333333333334 - }, - { - "value": "http://lockbit3olp7oetlc4tl5zydnoluphh7fvdt5oa6arcp2757r7xkutid.onion/", - "count": 2, - "total_related": 150, - "prevalence": 0.013333333333333334 - }, - { - "value": "http://lockbit4lahhluquhoka3t4spqym2m3dhe66d6lr337glmnlgg2nndad.onion/", - "count": 2, - "total_related": 150, - "prevalence": 0.013333333333333334 - }, - { - "value": "http://lockbit7ouvrsdgtojeoj5hvu6bljqtghitekwpdy3b6y62ixtsu5jqd.onion/", - "count": 2, - "total_related": 150, - "prevalence": 0.013333333333333334 - }, - { - "value": "http://lockbit6knrauo3qafoksvl742vieqbujxw7rd6ofzdtapjb4rrawqad.onion/", - "count": 2, - "total_related": 152, - "prevalence": 0.013157894736842105 - }, - { - "value": "https://mozillacla.ampxdirect.com/wayfair?sub1=wayfair&sub2=us&custom-data=3433&ctag=319104999us3433", - "count": 2, - "total_related": 152, - "prevalence": 0.013157894736842105 - }, - { - "value": "https://mozillacla.ampxdirect.com/wayfair?sub1=wayfair&sub2=us&custom-data=3447&ctag=319104999us3447", - "count": 2, - "total_related": 156, - "prevalence": 0.01282051282051282 - }, - { - "value": "http://lockbit3753ekiocyo5epmpy6klmejchjtzddoekjlnt6mu3qh4de2id.onion/", - "count": 2, - "total_related": 158, - "prevalence": 0.012658227848101266 - }, - { - "value": "https://peps.python.org/pep-3132/", - "count": 2, - "total_related": 209, - "prevalence": 0.009569377990430622 - }, - { - "value": "https://datatracker.ietf.org/doc/html/rfc2104.html", - "count": 2, - "total_related": 256, - "prevalence": 0.0078125 - }, - { - "value": "https://www.rakuten.com/signup_sem.htm?merchant_id=10794?src=admarketplace-Search&eeid=17879&utm_cha", - "count": 2, - "total_related": 283, - "prevalence": 0.007067137809187279 - }, - { - "value": "https://peps.python.org/pep-0644/", - "count": 2, - "total_related": 293, - "prevalence": 0.006825938566552901 - }, - { - "value": "http://lockbitsupuhswh4izvoucoxsbnotkmgq6durg7kficg6u33zfvq3oyd.onion/", - "count": 2, - "total_related": 308, - "prevalence": 0.006493506493506494 - }, - { - "value": "https://peps.python.org/pep-0528/", - "count": 2, - "total_related": 314, - "prevalence": 0.006369426751592357 - }, - { - "value": "https://peps.python.org/pep-0636/", - "count": 2, - "total_related": 327, - "prevalence": 0.0061162079510703364 - }, - { - "value": "http://lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly/", - "count": 2, - "total_related": 347, - "prevalence": 0.005763688760806916 - }, - { - "value": "https://peps.python.org/pep-0451/", - "count": 2, - "total_related": 385, - "prevalence": 0.005194805194805195 - }, - { - "value": "https://www.python.org/downloads/source/", - "count": 2, - "total_related": 401, - "prevalence": 0.004987531172069825 - }, - { - "value": "https://mozillacla.ampxdirect.com/wayfair?sub1=wayfair&sub2=us&custom-data=3446&ctag=319104999us3446", - "count": 2, - "total_related": 461, - "prevalence": 0.004338394793926247 - }, - { - "value": "https://peps.python.org/pep-0529/", - "count": 2, - "total_related": 515, - "prevalence": 0.003883495145631068 - }, - { - "value": "http://lockbitaptjpikdqjynvgozhgc6bgetgucdk5xjacozeaawihmoio6yd.onion/", - "count": 2, - "total_related": 529, - "prevalence": 0.003780718336483932 - }, - { - "value": "http://lockbitaptoofrpignlz6dt2wqqc5z3a4evjevoa3eqdfcntxad5lmyd.onion/", - "count": 2, - "total_related": 530, - "prevalence": 0.0037735849056603774 - }, - { - "value": "http://lockbitaptstzf3er2lz6ku3xuifafq2yh5lmiqj5ncur6rtlmkteiqd.onion/", - "count": 2, - "total_related": 532, - "prevalence": 0.0037593984962406013 - }, - { - "value": "http://lockbitaptq7ephv2oigdncfhtwhpqgwmqojnxqdyhprxxfpcllqdxad.onion/", - "count": 2, - "total_related": 534, - "prevalence": 0.003745318352059925 - }, - { - "value": "http://lockbitapt.uz/", - "count": 2, - "total_related": 540, - "prevalence": 0.003703703703703704 - }, - { - "value": "https://peps.python.org/pep-0634/", - "count": 2, - "total_related": 609, - "prevalence": 0.003284072249589491 - }, - { - "value": "https://peps.python.org/pep-0613/", - "count": 2, - "total_related": 704, - "prevalence": 0.002840909090909091 - }, - { - "value": "https://peps.python.org/pep-0612/", - "count": 2, - "total_related": 1145, - "prevalence": 0.0017467248908296944 - }, - { - "value": "https://peps.python.org/pep-0526/", - "count": 2, - "total_related": 1149, - "prevalence": 0.0017406440382941688 - }, - { - "value": "https://bugs.python.org/issue?&", - "count": 2, - "total_related": 1207, - "prevalence": 0.0016570008285004142 - }, - { - "value": "http://testca.pythontest.net/testca/revocation.crl", - "count": 2, - "total_related": 1258, - "prevalence": 0.001589825119236884 - }, - { - "value": "https://setuptools.readthedocs.io/en/latest/setuptools.html", - "count": 2, - "total_related": 1729, - "prevalence": 0.001156737998843262 - }, - { - "value": "https://github.com/pypa/wheel/pull/289", - "count": 2, - "total_related": 2151, - "prevalence": 0.0009298000929800093 - }, - { - "value": "https://tox.chat/download.html", - "count": 2, - "total_related": 2809, - "prevalence": 0.000711997152011392 - }, - { - "value": "https://github.com/python/typing/issues/508", - "count": 2, - "total_related": 3107, - "prevalence": 0.000643707756678468 - }, - { - "value": "https://peps.python.org/pep-0484/", - "count": 2, - "total_related": 5579, - "prevalence": 0.000358487184083169 - }, - { - "value": "http://bugs.python.org/issue20541", - "count": 1, - "total_related": 54, - "prevalence": 0.018518518518518517 - }, - { - "value": "http://aquamacs.org/", - "count": 1, - "total_related": 60, - "prevalence": 0.016666666666666666 - }, - { - "value": "http://bugs.python.org/issue10340", - "count": 1, - "total_related": 95, - "prevalence": 0.010526315789473684 - }, - { - "value": "http://buildbot.python.org/all/xmlrpc/", - "count": 1, - "total_related": 98, - "prevalence": 0.01020408163265306 - }, - { - "value": "http://bugs.python.org/review/23491/diff/13982/Lib/zipapp.py", - "count": 1, - "total_related": 103, - "prevalence": 0.009708737864077669 - }, - { - "value": "http://127.0.0.1/spammity/sp%EF%BF%BDm", - "count": 1, - "total_related": 105, - "prevalence": 0.009523809523809525 - }, - { - "value": "http://bugs.python.org/issue19728", - "count": 1, - "total_related": 108, - "prevalence": 0.009259259259259259 - }, - { - "value": "http://127.0.0.1/spammity/spam?s%EF%BF%BDy=ni", - "count": 1, - "total_related": 112, - "prevalence": 0.008928571428571428 - }, - { - "value": "http://127.0.0.1/spammity/spam", - "count": 1, - "total_related": 118, - "prevalence": 0.00847457627118644 - }, - { - "value": "http://bugs.python.org/issue6289", - "count": 1, - "total_related": 127, - "prevalence": 0.007874015748031496 - }, - { - "value": "http://127.0.0.1/spammity/spam;ham", - "count": 1, - "total_related": 128, - "prevalence": 0.0078125 - }, - { - "value": "http://bugs.python.org/issue20819", - "count": 1, - "total_related": 138, - "prevalence": 0.007246376811594203 - }, - { - "value": "http://127.0.0.1/spammity/spam?say=ni", - "count": 1, - "total_related": 188, - "prevalence": 0.005319148936170213 - }, - { - "value": "http://127.0.0.1/spam", - "count": 1, - "total_related": 202, - "prevalence": 0.0049504950495049506 - }, - { - "value": "http://127.0.0.1/spammity/spam;cookie=1234", - "count": 1, - "total_related": 228, - "prevalence": 0.0043859649122807015 - }, - { - "value": "http://bugs.python.org/issue23310", - "count": 1, - "total_related": 228, - "prevalence": 0.0043859649122807015 - }, - { - "value": "http://127.0.0.1/sp%EF%BF%BDm", - "count": 1, - "total_related": 231, - "prevalence": 0.004329004329004329 - }, - { - "value": "http://bugs.python.org/issue25390", - "count": 1, - "total_related": 312, - "prevalence": 0.003205128205128205 - }, - { - "value": "http://bugs.python.org/issue18081).", - "count": 1, - "total_related": 371, - "prevalence": 0.0026954177897574125 - }, - { - "value": "http://bugs.python.org/issue18318).", - "count": 1, - "total_related": 372, - "prevalence": 0.002688172043010753 - }, - { - "value": "http://bugs.python.org/issue20167", - "count": 1, - "total_related": 441, - "prevalence": 0.0022675736961451248 - }, - { - "value": "http://bugs.python.org/issue19734", - "count": 1, - "total_related": 717, - "prevalence": 0.001394700139470014 - }, - { - "value": "http://bugs.python.org/issue1339007", - "count": 1, - "total_related": 821, - "prevalence": 0.001218026796589525 - }, - { - "value": "http://bugs.python.org/issue7833", - "count": 1, - "total_related": 826, - "prevalence": 0.0012106537530266344 - }, - { - "value": "http://bugs.python.org/issue20053", - "count": 1, - "total_related": 929, - "prevalence": 0.001076426264800861 - }, - { - "value": "http://bugs.python.org/issue28539", - "count": 1, - "total_related": 1153, - "prevalence": 0.0008673026886383347 - }, - { - "value": "http://bugs.python.org/issue22107", - "count": 1, - "total_related": 1347, - "prevalence": 0.0007423904974016332 - }, - { - "value": "http://cacerts.darkmatter.ae/qvrca2g3.crt0", - "count": 1, - "total_related": 2094, - "prevalence": 0.0004775549188156638 - }, - { - "value": "http://autorite.certigna.fr/certigna.der06", - "count": 1, - "total_related": 2156, - "prevalence": 0.00046382189239332097 - }, - { - "value": "http://aia1.netlock.hu/index.cgi?ca=gold04", - "count": 1, - "total_related": 4212, - "prevalence": 0.00023741690408357076 - }, - { - "value": "http://bugs.python.org/issue10272", - "count": 1, - "total_related": 4778, - "prevalence": 0.0002092925910422771 - }, - { - "value": "http://127.0.0.1:8000/", - "count": 1, - "total_related": 12447, - "prevalence": 8.034064433196755e-05 - }, - { - "value": "http://cacerts.digicert.com/DigiCertTrustedG4CodeSigningRSA4096SHA3842021CA1.crt0", - "count": 1, - "total_related": 48778, - "prevalence": 2.0501045553323218e-05 - }, - { - "value": "http://cacerts.digicert.com/DigiCertAssuredIDRootCA.crt0E", - "count": 1, - "total_related": 97357, - "prevalence": 1.0271475086537178e-05 - }, - { - "value": "https://github.com/pypa/packaging", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "https://www.python.org/", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "http://127.0.0.1/", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "attack_tactics": [ - { - "value": "TA0007", - "count": 1114 - }, - { - "value": "TA0005", - "count": 939 - }, - { - "value": "TA0002", - "count": 579 - }, - { - "value": "TA0004", - "count": 460 - }, - { - "value": "TA0009", - "count": 460 - }, - { - "value": "TA0040", - "count": 345 - }, - { - "value": "TA0006", - "count": 330 - }, - { - "value": "TA0003", - "count": 326 - }, - { - "value": "TA0011", - "count": 312 - }, - { - "value": "TA0008", - "count": 73 - }, - { - "value": "TA0001", - "count": 2 - } - ], - "parent_contacted_domains": [ - { - "value": "192.in-addr.arpa", - "count": 334, - "total_related": 640295, - "prevalence": 0.0005216345590704285 - }, - { - "value": "172.in-addr.arpa", - "count": 100, - "total_related": 103644, - "prevalence": 0.0009648411871405967 - }, - { - "value": "microsoft.com", - "count": 97, - "total_related": 200000, - "prevalence": 0.000485 - }, - { - "value": "sectigo.com", - "count": 90, - "total_related": 200000, - "prevalence": 0.00045 - }, - { - "value": "bing.net", - "count": 23, - "total_related": 100000, - "prevalence": 0.00023 - }, - { - "value": "phicdn.net", - "count": 44, - "total_related": 200000, - "prevalence": 0.00022 - }, - { - "value": "pki.goog", - "count": 15, - "total_related": 100000, - "prevalence": 0.00015 - }, - { - "value": "windows.com", - "count": 14, - "total_related": 100000, - "prevalence": 0.00014 - }, - { - "value": "msftncsi.com", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "static.microsoft", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "fastly.net", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": "dual-s-msedge.net", - "count": 13, - "total_related": 200000, - "prevalence": 6.5e-05 - }, - { - "value": "akamai.net", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "msn.com", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "live.com", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - } - ] - }, - "ip_addresses": null, - "urls": { - "attributions": [ - { - "value": "lockbit", - "count": 28, - "total_related": 65, - "prevalence": 0.4307692307692308 - }, - { - "value": "lockbit_black", - "count": 14, - "total_related": 67, - "prevalence": 0.208955223880597 - } - ], - "http_response_contents": [ - { - "value": "6f7e3d2fab38377f2b617c8d80df553d1b821614e8c0f8dd3cec3ad71376c1d7", - "count": 9, - "total_related": 482, - "prevalence": 0.01867219917012448 - }, - { - "value": "0b530b77ca10c94f6363d133668189edc96da100ecaa2170de7bff5d4788d14d", - "count": 9, - "total_related": 503, - "prevalence": 0.017892644135188866 - }, - { - "value": "398fd00a81f595137d32068aec4f43b9f5e6e857eda923e5d4c4d222c76a2a24", - "count": 9, - "total_related": 652, - "prevalence": 0.013803680981595092 - }, - { - "value": "4937751aceefe46013e84493cb8e00de51a30ae9c85bca1df08c3f8eb90779d1", - "count": 5, - "total_related": 26, - "prevalence": 0.19230769230769232 - }, - { - "value": "309564872de7cab1fddbf4007218a7cbeeef921dba3fe46480935c21424f59bc", - "count": 3, - "total_related": 26, - "prevalence": 0.11538461538461539 - }, - { - "value": "5280be99c69c80791036eb9ec4a62b210ce1c73b3c2941f55945ada5d71588d0", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "d34a7743a8e6d0bcc35c1d02dd03264524a0eb9d1d14b8cd6445ae5047600e82", - "count": 2, - "total_related": 12220, - "prevalence": 0.00016366612111292964 - }, - { - "value": "0e788bf107fa82dfa60f3447113004473c9545c07223c66f5c01312b8d044e34", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1283bca1d890a578b361e13f53fd8bcaa65d2338518e1127d972d562713a1088", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1a2ebc7e20d7ddcaa0eb643ff2d1f51a1d0446a60aea322263dc360f96523765", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1ca3c5ac2264cce7c4caa3d46f3b647acb1d7857cb9f6bc29c00ca1e7b9d9b2f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1da99e6d70da02497111858ef95b537ca099a53954b62c0c178199779af9cf71", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1f17f1cf18dcad038da708be0e766c73bcb76ff1514a95d78891266e74c579d5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "20a64075f0b49cb92ee2c98fbd1e3457a75a39f6fe344e2c44de22f0521c649c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2569bd000dfdcbbe89292ff31f8b9d4bb06d522e7d1cf150e71b9be6941331e7", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "260f7067cf87975ba854c8d9fc9c3b0a5c8b675181dd02e75f28e0ffea221f4b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "29c1685679035c769bc3664f867b5ae9f1901a1922bca850ca2afe1a541d22b0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2a062509d25e88258f3135eb79a92a76fb17de540567f6e3d2d1dd4ab0e0c7ae", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2b8f0cd5b7bbf9b0600d5f28551ae912b5955464c058a9bc2c81a7db5fd6a849", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2d0b325d61e08da54f45e9dffd89278b9e31530e59cfa4c8e3792c4f80204030", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "3153c9163badafd666d6a6ef9508fcf91d464a2a9042457533a0de9b86b38e8c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "325b2aaa286b7d50c75ce2dc7cc803f2099e6d5f79165ccf88622c28d7184f8c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "33d7199308e1703363a2c84ed173571e52c53af831b4f8e099c8fb75f5790bbf", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "3505ae931d982e870d08bc646a8997dd9d8792c43fef1deedc40586fbd343b65", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "3b59d5898e2326e629427a8f97e3201d6eef2c9f6e6e8d39f673879b7ae06323", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "3ffbd422b8c41a3ad673972185233089ddffcd1fbe795167cdb7b9039b5ad2d4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "434b2cbf0c22468bc0b5f51c2b51cd1014f5bd42abbc315141e8947ac2ec739f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "46e6e71492deeeb32d6651e35df286c12f047c73c841e17142b3d287d673dceb", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4cfa6524d7cf93c2d3335d4f5222ccc328b6781ea9fd52fd822226b3c03f7f2d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4d19b41db0370e55db7eb260894e978a37aa11ad09844ce212e49c3d334eb52d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4fca7b217ff12d02b141a6c8c98cc9f0726f3fbdce6aa374993afeb7d75dbd7a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "51f7e2e359e0f5f878c207758b3a3e2d96d60aea87f6ec68426b0e0f4ddbb8be", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "55169da90444ce210c037935f5bf35828e6bf2c84e3ef62cfcc3db72ed62dfe1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "59ea373abc342d26b06fda26e946c8334721e14386ec6472533b6c13d5e9cbc7", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5c09ced67baa0a3904f13a76bd116d52efeaf15f09ea7776d19c22a1c646cd2d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "63acbb27489c11d75ede824ea250c3e1a23deeeb5023ba7b234fb32c8e3a76c1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "674655c077e7e52597318e0e99f339b20c3b3bdc93e241db48e98148060a55fe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "681894291a669d874c010f31f019fb31fdbe6a63675c3fe48534fcf2fd7ca276", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "69e4f8abdd20f615fd2c31e68dff81d216ae2a6abaf51dcce97f8fc8af0755a2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "6beb7126d52b6343ba9c69186cb5fa4e4c41eaf07606ce97e4e418a9fc4f36cc", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "6bfa9eb40644ee19dfbf8342b55b6bedc2f81bdc84a1b99d228c94c5bc8be7f0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "6e85b10985a17f9b94df40145f30d7f623e0343b33a1a767eb31809f04adffa7", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "7348fb50e89492a2be47cb72cd4748258d39d004854a61ea4b5bc781a5ba525e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "73c2d5e93776d2ed8b81b86c8947893751879c0478661f2fb766c99fb4b7ff2d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "75cb4361b35b86dd8d9a33474f8561fe357151ba00c4b914857944aecc7dec09", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "7b3a8a06c63e67d10304346de7eff5b05deda1dc2ed8ee51538ffa3f1483f65b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "8055d1885f6457c6f17d4014616ebde3ec5178a3b5401ac5d42158d078ebf30c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "859024b80ef76b7f386a4e0b4d6ece83edbfcabee38401f6c54835342db5f0da", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "88249591ef190087c2d38bb831eb426fc6cfb9ed282175dadf4ccfe21672288d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "8d726669d9070b5be66c531ecdccecc62046d659dae817c27f3374cd6c316a0f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "8db962b3915b0f8019d4c993f47081659d08880dc6d6c9e4ba888bcc41c057e5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "934376fd135fbaa938524d47e4d82cfc0bed461a17ae2e6e89674706e9999586", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "97d7e2ed0e5dd9087a2cdaa43347194d0f961f20cadb004db15a3b91a8a71d9c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "989bdfcb1b890e9a30102e4d21f70c11a1ba2000f5654eaee4bf3c6df18c0eff", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "9d56e0e6ff99085c90a2d02076f1a72e0ba68ceab12aae91599a6ea17eac9bf5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "a1e770f6d04ff93321714fc5fd6486edef503dc1f5beb4c629f5464c5e5a268f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "a453e31bd4cf739c8dedfd15ac7d20eeb239254e3373f9f2af5811a5532b8316", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "a86dbf0ac22a6a7e506b432e84c002fabd33e003d66fd810ae67064878421197", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "aa8e988eab9084005d28346ca9c6ac4956d9f44efd7581560e69f7f416e48c14", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "ab0a59f216da23c5031afbecb6257ee96ba8f240042a4e3b9b23bde3f51d4acf", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "af12f5650b6a2f1daa1efd2a8c9521ab9c577f8755c08dd644cdb7bc0f5e83a6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "b958ff4ad29199e1bcd290567046619d86e4e17f9eaad92bb8d05ccca402b045", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "bf8493db7ccc5e3a03511e9a9877e43dcce5c5c234dc3d1c3f9dafafc980873b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "bfb592caa63f9a6edc54f0e0f5c61a216fe31097d440bc7aa9204d6806dee5e0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "c3c6d523fb6df3d7f8693d6152ddecd78386841fd8f48876949be2d98d26794c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "c4420f78a5c471e67aa8d28e72a12676a9cc437c6bb1768bc6b7e5546dc4d746", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "c691894efe8c81b5eda75ed769cf7ee4406b46b7895ffb184ba2201038239da7", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "c6ee0df4d6032190cd653874768aff11798651d05ad14973882b872919d4fc61", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "d03fa189b2cd7186ccf315d5d6e8829a40ae90fd39b59c3c275d01a103b9a137", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "d0a623e9f636f2b91a669dade218e2fb90b05cd3bd900df2bbd8607b32c87a7e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "d904965b2f9c049e69455716fe009ee2ef65284c148d4abcc64438551f44556e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "e7f84cc9a2fa753ba460be6eca238b52266a143ac3280f8eeeed10f8ae9e1b06", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "ebb77dfa0141dade73b840fde47b4b5f4cf7123c1600b5c6019febe0efee5164", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "f9b2605d8f4f9fdf3bb3df10d9a3a1c46b8f0ec456167bde5848a23a582ba939", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "f9fdaed37cfe01a1197ed59e860fa9b0c8af9b0719751cc3e8f81ab22a85b75c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "19d09e78966c1b8b8675c5e455a294d28838d299ddce7787a24944549263b99a", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "1b53a3664145de65fdfb67793e8541fbf76c29de5ff4eadfda7a12ee78cbc038", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "24358b52f4ca140f91300b54b78316f08389e65c4aa51c3f4e376d4b3dfb6eba", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2c4c3aad83490ed0d5fe64aea14e14dd7de4d582e8f8ae9f0143def12c3b982f", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "3693e20cf62a83120e51ab0983d2beb9e5ba94d6c731cef0d43b66fc5f2c5c7d", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "43bd6ca30a4820bf7d0fe0582603b98ddc95e201814c70ce1450e8f06c3748ba", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "57ba3a235d52910c46074774757d997dd841716fee84f44dc225bfe3b6bdb020", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "6ba3d5b12196d164fe919d50a8c34b36a9420fc76e2fcb8181b456d9cd570b24", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "74bdc2919a8756b1b1a95939b239d544a2153ac7ef10666ceaca9f556fd81b3d", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "76873a72ce23da2ba4b25a130dc7e5eeacbbcfc0f9f5b96e26cba0f2e79df684", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "cbd12741787f26a90687ad33884e049aec37f47ca9e4494af869bcddd00fb2ee", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "d5bb01fe371ca22ed80a1af8c774d4938713d6dee9a4c4c9ccb9b6c6e2de9db7", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "d7c9f681c12de81580cc69d17e94af280d73d04289bc57e9f3dba02661339902", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "85ff1c593e09cb8170d43056ca3ee0c5e6ff0692fbfdd4cb276eb2775040431c", - "count": 1, - "total_related": 23, - "prevalence": 0.043478260869565216 - }, - { - "value": "c3a12f80e1ae26824136918883d14f6751c71c0d6f2859601409130227f4e95d", - "count": 1, - "total_related": 277, - "prevalence": 0.0036101083032490976 - }, - { - "value": "940675ecb4e589745fc11faa306d22b111449c183c22589d5b6b6c994f2deddc", - "count": 1, - "total_related": 339, - "prevalence": 0.0029498525073746312 - }, - { - "value": "d8fac2e9a42b868b1267b77df52092cf94f462f20649366d9685f7036355dc78", - "count": 1, - "total_related": 500, - "prevalence": 0.002 - } - ], - "communicating_files": [ - { - "value": "addf5e245622562eb44eb6ac3a80fa18eef1c3f6544ec5cbdfad1a0f56dbd24d", - "count": 6, - "total_related": 6, - "prevalence": 1.0 - }, - { - "value": "3f7518d88aefd4b1e0a1d6f9748f9a9960c1271d679600e34f5065d8df8c9dc8", - "count": 5, - "total_related": 5, - "prevalence": 1.0 - }, - { - "value": "15306331281bba9dae9a8c13b02d24137650cfe293cad61ec2580c9a70194eb1", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "49261ea0d0c417ebae0e0fb1e56ad02cb7fe9ae16a76edb7c4e70c754b53370f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - } - ], - "cookie_names": [ - { - "value": "SBSESSION", - "count": 7, - "total_related": 44, - "prevalence": 0.1590909090909091 - }, - { - "value": "SameSite", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - } - ], - "cookie_values": [ - { - "value": "0hbvos2ler88bstka9fknn6d6n", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0qhpsv3eqjq7k1cletq0vacok6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "15ucmpun6g5hjt23h6jbf7rsdd", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "16iapg6sm0g19o0sof9q3afimv", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1qk65ljmfb7ko5bt34bmo6fsk8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1rb33f95d4bblsa4nbm85suc08", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2ue4g1b925a5n38tfi9l45lbgp", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "37rm0m6rtcphu4rgv2ka03t8ma", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "3k4opu1q10d2992hd9f9n768ok", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "3ps3h420qeqs5iuf2mmip8r4sb", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "7tbsn6fu418oj8r5sn47opbbg5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "80s0qtfint8u3i8gkrp9i51svt", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "99a10nkmhqo4qinkjks9g5eqba", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "9mreea8v8m7hrgfnvj31129o75", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "a2b18rpsl347fgodfffkqmkmkc", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "ag8eg7bdu7uov8bf81dnk6mfob", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "c2vnu4lo3fn7vqpl2tuf2itkjv", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "dbbpq2kjjc1l4io31ehcr98c8d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "dv3ch3golkpltbb9b7tjhacm7o", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "fk0p0gb1b6psf895qsd2qojiev", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "g6vp950n2vq5uci1muddme3fgd", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "he04euksaf4ln8rluda4fb50nl", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "i19dpf13f85tp77nbor6logjqe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "i9rt4g532rh692lbdj21o050vk", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "iodl6u9gdd3cgajr38d8le3ohr", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "lsdugr6ur370vmkb36o5pra3hm", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "m1gs8r5nga4tf9r2gev3fcnerd", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "n3em2n3ffartsi0reqdm8mslqn", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "ndmcq19g5sk8okp5cur45i8t6p", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "nhalkm0elfjb7toktc2a982t6o", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "nhh3gept0mbgsocnbutg84ftil", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "osqib8acileao51vaul0a241uj", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "qh00k7p7g133fn337vanadirfo", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "qhu4de7hjbdpucuq3jbo8mvg6c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "tb5l8q1hmrh8dngq74bh6761kb", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "uqjlr1cu29m46u6bj7sojmeha0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "v07pj7ig5sag5jqe6db059fjri", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "vpjbp4tti477o1jbm0p3isa4dp", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Strict,", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - } - ], - "downloaded_files": [ - { - "value": "6f7e3d2fab38377f2b617c8d80df553d1b821614e8c0f8dd3cec3ad71376c1d7", - "count": 9, - "total_related": 291, - "prevalence": 0.030927835051546393 - }, - { - "value": "0b530b77ca10c94f6363d133668189edc96da100ecaa2170de7bff5d4788d14d", - "count": 9, - "total_related": 406, - "prevalence": 0.022167487684729065 - }, - { - "value": "398fd00a81f595137d32068aec4f43b9f5e6e857eda923e5d4c4d222c76a2a24", - "count": 6, - "total_related": 139, - "prevalence": 0.04316546762589928 - }, - { - "value": "8d726669d9070b5be66c531ecdccecc62046d659dae817c27f3374cd6c316a0f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "309564872de7cab1fddbf4007218a7cbeeef921dba3fe46480935c21424f59bc", - "count": 1, - "total_related": 21, - "prevalence": 0.047619047619047616 - }, - { - "value": "85ff1c593e09cb8170d43056ca3ee0c5e6ff0692fbfdd4cb276eb2775040431c", - "count": 1, - "total_related": 23, - "prevalence": 0.043478260869565216 - }, - { - "value": "c3a12f80e1ae26824136918883d14f6751c71c0d6f2859601409130227f4e95d", - "count": 1, - "total_related": 246, - "prevalence": 0.0040650406504065045 - }, - { - "value": "d8fac2e9a42b868b1267b77df52092cf94f462f20649366d9685f7036355dc78", - "count": 1, - "total_related": 267, - "prevalence": 0.003745318352059925 - }, - { - "value": "940675ecb4e589745fc11faa306d22b111449c183c22589d5b6b6c994f2deddc", - "count": 1, - "total_related": 280, - "prevalence": 0.0035714285714285713 - } - ], - "domains": [ - { - "value": "onion.ly", - "count": 7, - "total_related": 179, - "prevalence": 0.03910614525139665 - }, - { - "value": "white-datasheet.com", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "test.white-datasheet.com", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "lockbitapt72iw55njgnqpymggskg5yp75ry7rirtdg4m7i42artsbqd.onion.ly", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "lockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "lockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "lockbitsupa7e3b4pkn4mgkgojrl5iqgx24clbzc4xm7i6jeetsia3qd.onion", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "lockbitsupdwon76nzykzblcplixwts4n4zoecugz2bxabtapqvmzqqd.onion", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "lockbitsupn2h6be2cnqpvncyhj4rgmnwn44633hnzzmtxdvjoqlp7yd.onion", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "lockbitsupo7vv5vcl3jxpsdviopwvasljqcstym6efhh6oze7c6xjad.onion", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "lockbitsupqfyacidr6upt6nhhyipujvaablubuevxj6xy3frthvr3yd.onion", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "lockbitsupq3g62dni2f36snrdb4n5qzqvovbtkt5xffw3draxk6gwqd.onion", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "lockbitsupt7nr3fa6e7xyb73lk6bw6rcneqhoyblniiabj4uwvzapqd.onion", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "lockbitsupuhswh4izvoucoxsbnotkmgq6durg7kficg6u33zfvq3oyd.onion", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "lockbitsupxcjntihbmat4rrh7ktowips2qzywh6zer5r3xafhviyhqd.onion", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "lockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "lockbitapt72iw55njgnqpymggskg5yp75ry7rirtdg4m7i42artsbqd.onion", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "lockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion", - "count": 1, - "total_related": 16, - "prevalence": 0.0625 - }, - { - "value": "lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion", - "count": 1, - "total_related": 41, - "prevalence": 0.024390243902439025 - }, - { - "value": "lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion", - "count": 1, - "total_related": 43, - "prevalence": 0.023255813953488372 - }, - { - "value": "lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion", - "count": 1, - "total_related": 91, - "prevalence": 0.01098901098901099 - }, - { - "value": "lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion", - "count": 1, - "total_related": 280, - "prevalence": 0.0035714285714285713 - }, - { - "value": "lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion", - "count": 1, - "total_related": 322, - "prevalence": 0.003105590062111801 - } - ], - "embedded_js": [ - { - "value": "8a504110c13929d17d7a065340567d95d8ed39bdb40bc13c78ce74b03fd06118", - "count": 9, - "total_related": 23, - "prevalence": 0.391304347826087 - }, - { - "value": "c3d58f628e5e50fc3965749329a633a7a963cc3ed603061bc0020a0711de6f52", - "count": 9, - "total_related": 386, - "prevalence": 0.023316062176165803 - }, - { - "value": "82d73b126661962c1640cab3fe27df8ac76d6f7e2b6f42b6bc13dec39bf6d1b7", - "count": 9, - "total_related": 1407, - "prevalence": 0.006396588486140725 - }, - { - "value": "673a45e569f710ce009ecd0620d06b842ffda45dd491214044e33d15e1c12a1a", - "count": 9, - "total_related": 1475, - "prevalence": 0.006101694915254237 - }, - { - "value": "f3d75a5c72afd564672044fc6d5ee8853ca93f6b50c4ecdec7c9b7238cb86c21", - "count": 7, - "total_related": 1391, - "prevalence": 0.0050323508267433505 - }, - { - "value": "1178079a48db59599a3656791cc210b9b85fce8d8e0dc5534426615251f25369", - "count": 6, - "total_related": 6, - "prevalence": 1.0 - }, - { - "value": "66e3ccaabf554f6a319c8290684ba126fbbbf7550de819d9c2e3c87584638f57", - "count": 6, - "total_related": 6, - "prevalence": 1.0 - }, - { - "value": "e70ace4103a7e91c9b6ba0ece7d13ba9575eb59315cd9eed382ed56ec77b4b47", - "count": 5, - "total_related": 5, - "prevalence": 1.0 - }, - { - "value": "d12c1dca6e1b713b48e803253fd80dbd52e8a2ef513f995b21bc4ea7db2edc1c", - "count": 5, - "total_related": 8, - "prevalence": 0.625 - }, - { - "value": "93499bbd21641359dd69d5b1bbcf4f5d5d3dc43ddeab4d5f32def97280896161", - "count": 5, - "total_related": 10, - "prevalence": 0.5 - }, - { - "value": "09cc748cdbd43dc1c5ef8eb3a85fa5618ee22a4ed7f7c8c5570cb54625e491ac", - "count": 5, - "total_related": 15, - "prevalence": 0.3333333333333333 - }, - { - "value": "c165b831d6f8195b564217ffd3290f921a1afc68a8ef8f68ae458c668708a232", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "13c095cc8beb2ef2cba7162a5c268176f1ea56a0aec837beef637049c02fcd15", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "975b09f0c1ea1ba028142897a3671e95abe98624c2c0520f31b92b9d238e5287", - "count": 3, - "total_related": 8, - "prevalence": 0.375 - }, - { - "value": "65ff8bad96d8debb2a010443d1fa1885a54f5769238db463d66f1dc15b3b636f", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "7ccfaf60a79a17e8d600e953fd50ba019220b9fcf7e1437971c02d35774ce910", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "91d55100297d6ed822ea5f7bd813468e7d18419a321964de305423c82e139e99", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "d76ec331f524e20166c6eddeddbc563d4260c832f9f5e2d2c12eaf0dc0404240", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "e33da7a8c624a3d5283f4e803a290b944a2e69d6e0d7d52945e993291bb488c3", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "55b2040df8df19912400977bcde380c877db35fd2775a4a14ae1b791daf2454b", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "8ca131db25a24c193d2b5b3942fb235950b96b226d42ee950377e51808660f06", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "95f670ef9f19839351670a1401964488b1d91277453b6a31c7f9180f6f7abe54", - "count": 2, - "total_related": 10, - "prevalence": 0.2 - }, - { - "value": "0b8fdf32fc2b55fcb3ee42febc955a9227902eb083b54fb6b6c4ac76c5d3f2a9", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "10262b5056f68ec3d6cf44cd1d162e7dc9265d4fc87ed68fc4274af4d92f1d3e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "199a782b932c1b810d6b0183402e03e605390e469e8851d96b5db92162465cce", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1b71bcc892fd88c174232b95b6f61d8a615b18a0708227c5d07f5fc35bd68a7b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "22ca096d52c465a5e6a7f301aa2409c41ba7f10a573651df8b5ef711f8de44f5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2336eaf065356d3184421224480afb1c0eac00cacc41078e1d902b1ffb1ac90d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2ba2cd4042d4ba76ac6f42d3a6c2073c06e87ee697e54d07a87d7bb6c4ce8723", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "44c8b9db1af210e96212f586bb010ed609ac78f9e2553d950e7693f28a5d3b97", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "58e90d7a317271d204c4896801b6250a5656ebbf133a3fb1adf0c9d7ad1d835f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5bdc214394b455ac97200e3ed4ae88af7dee5bea27c169ab13816ad70cfe9148", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "6ff7fbde40cf099b58b69b1d9605bd7ce8dc6e4236400e894730dd737e43f50c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "73aaad54b487fa65e5f1ff81a14bba5001841fd6a5efde2ffd35ea4bc3c2c126", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "96371488ce23c5a170599a880c7b4c32a747753bd54b0c16a0365c176d8d586f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "98639d7b24ce034e25a4a45fe5ca244afe029cc78abdc69d5728426268c04138", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "9a4517e90213f0e74dc0950332905e510f8c6fdb67ab5b130a533e571f39f6af", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "9e67b765ec58b4271b090a18b495e9e5c9ace4323ea7d8175f5ae452106ac3b8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "b09ddcecc75dfb059e6fd1630dde37131433311a3882b019c42e673bf15c3acd", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "b482a0db5c6875f7cfbb5978c19dbc2d5d2e4c5e26113d51ce17a43451e1d2c3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "bbf2380f970d7ab78d1b19e9bf1bdc9a6ff11ede09791db1a51e349a75c5ca37", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "bc5b1f97ed446e22e68457b47ce2497fe5c7246dc2d1800a3b346d4b1018394d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "d128455752e812119108d6ccdc97efb7dae4deec4fab314b5686ca68a20fe3f2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "d194c981c7860f4b51d88c16cab2846d302220efe43ca1cf1064f3838c25bb83", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "dd4080ad641132481c8658da710570416f2236237f13a280efee9f65989a668c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "ecd4921cc7f31acabf54269e447a31d8d0f57afc9ee0c29cfd846593f844b72e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "07185204e92235bfe7af44fb7583fc9f4bd3037ba103657d64ed1c5d440dc296", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "1fd46ac213478f2651db076906d9a468ee980eb3cdd637194763d38695cc24d6", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "44c3b733f0d67e65aa7edb61fe567f71b52ab3595b5b53932be6ec908a7dbd55", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "70351aebdea559773bdf562d67bcb68ef670194bcbc7a8d4064ca516ab2a6f53", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "8e79e710e0abd7008ab8d06ce093b73771627946f25c206f6649365e3f8b8fd8", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "a21f17c6130f534316528443f912523777036c51040914dc595d6dc245f322e1", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "c2629e844034e6dd087584cbd9a24ec889c54ed62eba9ca3c2394fab5279fc93", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "d01543520d5b285add8c5ba4c35b0c908a5b8cc9de0e246ab007d9a1e6f84fad", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "6323184cf1ca7c4bf0ac33b0544bf39623cae2692058abac493d01b0f9e3d001", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "6e8975b2bcb4195ad20bd233325a2a7f5f8bc341013b3eb2b6dbe6b5bae27539", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "f8346a1e45ef20da45f62c251e83cb6fdf72ca0f86e178cfe8c8ca0f9b46a488", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "6adc3e740700968593c6948363763a10da9ad414dcb7918507e3c08a80d85a18", - "count": 1, - "total_related": 115, - "prevalence": 0.008695652173913044 - }, - { - "value": "d38909db563cf535b4b9a4949d273153e7a641ab42ffea716690995787c17d2d", - "count": 1, - "total_related": 304, - "prevalence": 0.003289473684210526 - }, - { - "value": "06ac0f030b33e6b98d05920d6db2de211eaf80dc513cf43678ece26038a7f0ee", - "count": 1, - "total_related": 307, - "prevalence": 0.003257328990228013 - }, - { - "value": "98642b7491bdeee7c5477c692e116885825126c9a5f40100a10fe87a10221487", - "count": 1, - "total_related": 959, - "prevalence": 0.0010427528675703858 - }, - { - "value": "b5ef6cc87969e62155b0938f02b507a6a84d1be141d32da7b2d152e6d729798b", - "count": 1, - "total_related": 1245, - "prevalence": 0.0008032128514056225 - }, - { - "value": "5ab51649f1edd4d73f4dfd167622de2e8a9a4424b15485d897c36c7e12da0dfe", - "count": 1, - "total_related": 1252, - "prevalence": 0.0007987220447284345 - }, - { - "value": "c64b9b9879ac12753125d0ca73a7dd2238b621acbeae06e9f9d2a2fa73de8e28", - "count": 1, - "total_related": 1617, - "prevalence": 0.0006184291898577613 - }, - { - "value": "7421afa308614399396b9bc1ca61053ad4a47da741278a7746fb86fb200c946d", - "count": 1, - "total_related": 2897, - "prevalence": 0.00034518467380048324 - }, - { - "value": "cdfe845b25091a21147fe4a683515b000208ae4f67810f243d7bf96bc3484115", - "count": 1, - "total_related": 18959, - "prevalence": 5.274539796402764e-05 - }, - { - "value": "863de02f7c4231bd16b4dd33e29378424b27f1f7591670d259c9dd60e14a3b7c", - "count": 1, - "total_related": 20559, - "prevalence": 4.864049807870033e-05 - }, - { - "value": "62bb02fa91c1537efbce823d5d1981982d3925bcdaac667dc6ca64f8469e2284", - "count": 1, - "total_related": 52432, - "prevalence": 1.9072322245956667e-05 - }, - { - "value": "01ebeb3fcdc269ef402f29f9fba025d3266fcd5c54ae7bca44aaa7c2cf738d93", - "count": 1, - "total_related": 77651, - "prevalence": 1.2878134215914798e-05 - }, - { - "value": "782cfa29b8b93a29c6ec3a01bdf88241ce27bd4b459caeade019277c1b254240", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "cea279461b4262dffa123b077d7fee7805e8c6552a7e0e3ff8c6a9c3ee232769", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "html_titles": [ - { - "value": "LockBit Anti-DDoS", - "count": 9, - "total_related": 26, - "prevalence": 0.34615384615384615 - }, - { - "value": "Darknet TOR / I2P Proxy and Gateway", - "count": 9, - "total_related": 2002, - "prevalence": 0.004495504495504496 - }, - { - "value": "LockBit Anti-DDos protection", - "count": 2, - "total_related": 15, - "prevalence": 0.13333333333333333 - }, - { - "value": "lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "lockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "Freescout", - "count": 1, - "total_related": 432, - "prevalence": 0.0023148148148148147 - }, - { - "value": "Citrix Login", - "count": 1, - "total_related": 1833, - "prevalence": 0.0005455537370430987 - }, - { - "value": "user's Blog! \u2013 Just another WordPress site", - "count": 1, - "total_related": 11464, - "prevalence": 8.722958827634333e-05 - }, - { - "value": "504 Gateway Time-out", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - } - ], - "ip_addresses": [ - { - "value": "198.251.84.63", - "count": 9, - "total_related": 216, - "prevalence": 0.041666666666666664 - }, - { - "value": "198.251.88.180", - "count": 9, - "total_related": 338, - "prevalence": 0.026627218934911243 - }, - { - "value": "209.141.39.59", - "count": 9, - "total_related": 639, - "prevalence": 0.014084507042253521 - }, - { - "value": "198.251.88.129", - "count": 9, - "total_related": 693, - "prevalence": 0.012987012987012988 - }, - { - "value": "209.141.38.247", - "count": 5, - "total_related": 1797, - "prevalence": 0.0027824151363383415 - }, - { - "value": "23.20.234.150", - "count": 2, - "total_related": 13, - "prevalence": 0.15384615384615385 - }, - { - "value": "198.251.89.118", - "count": 2, - "total_related": 3062, - "prevalence": 0.0006531678641410843 - } - ], - "memory_patterns": [ - { - "value": "003aebec57fc45e6a04b9701fca7a082850445f36738addb6969c65bf778967f", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "00d3f19ff84cddc5b0cfc9d9b053a99b493add5a9bf8ec74659ef9b3d9298de6", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "0216a3e4fc6b4a9715c93affa1d9b41d4c435ae6b455f6ea2d17b954592ef0d1", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "0400ee8269aba8f79bfd0c65f64689b06febae22a7535c9fda728a7eaa29ae0d", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "060bd55768e0edc037651bf50c54248e9451d57d4da795b9d8ea03829085cea1", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "07827048101b75e8062308253695b2456680e55593fe4c5f1ec457b7be2a62af", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "08f5fa00c8602b9ca095062a1976a6fec9c9c1ba78442a1c3439a43ed6066320", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "0b50f937dbbabd9bec66176520885c890abc819f383d559184533ad1116f4041", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "0ba01c441de37c72ab7a9c76251679013779b3ea54815d49ee2b24c04e64e68d", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "0d4a8d933807afa57d8d9b068283be398bbad1334a962f568cbf58eef9886195", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "0ec87a7f943ab72d08aeb957d33dd348ab7cf45052ab7a31bcce33ff7a095837", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "122313b2597a45f2f8c3538edc4ee43b9d489cf3d56c5413764f3744af357726", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "133cdade6eeebd6daa6215cbafaaf2faa136ee642e46e803f18bd50248db380d", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "137949e45d2c0e6c548dc19dfc12529fe4343ac2ea66a101b4fd886c8c6212a6", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "13c258d6ccd1fc672411b9bb04211c02aa7b0f14713ea5eaf3e5610675f23acc", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "148697a172c9733b35d4026577f53e5fd22807d7b5d42698def3afa2536050d5", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "15e2e14b887630a77ab955c1f9ee61392198544abb5da3065550b788aacdfe11", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "165b894d96b1a9c0c2f998879f0f54406f64c9178bb2761b5e2d45f1847e53f4", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "17594425d252777b2c8fb42b66b943567406398edb5ee5f57cbf88b42c82a65c", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "18067b6f8a4917bb72370bcbfc217c419d9cb145766fcefec7c953f9e267d8d1", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "1878217bcfb6c5fd440d8d9be9960abb840d1685ad987ea992901384c9f3de84", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "19fd40bbfd799ae29c2d261e18776f8a1f82328f80dca1cda3c23ee66fe38265", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "1a53460ac8889d82b47b704638f0fa9affc3d7ae5ad6f4cb7d02dce67f10e292", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "1a71eedad2997e10a565d8b5540af988111734dfd58dd1c9fcce995070206d6e", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "1aad1edf0c09473675df59b8952d5a0d329609dd22d2582cf43ad263a26f1389", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "1bd9426232d1ca052d01283b0239ad02ebd66d9ac48d9107f10b1c463da2d51d", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "1c2a51daa50a0489a8734d3577b43bcaf78f32ab34a404d2f6026af5ed33cd5b", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "1dddd103482e6057cceb35eecb20d8c7371f04aa04160c51f6a54d182bef9f28", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "1de53abfb86539575a24640ed2956ad6db48bed9cb922d885eac3392e5a7d68b", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "1eb0b48ca74c119b53d372de7d639f0bcb1337fb526347fb3b22f62214280e1d", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "218f131e909e4707ea5580606b020a3b86ab4f43879a22f2da9821d4fa78e020", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "233925c89da61e248275c6bed8b707b11f4a44ef99f716615a06e23e3e594fdd", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "23e726f454757bc37e4388dda2dcc99172c5e856d522260015829865fff7d066", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "24c08ca17ef4438316669a1c08492eee22041bb87a96b2d1cdf631690c558772", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "25456fd92a3b6daa3ab519e9f6f18d3869e3537cdb512791360077d3f3e25c88", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "279074475806bcd0ca6304493064a88d2f42f344d653897a3c9e35976e84b46f", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "1f0617725b2a0b0c3bb1067f0b77da049da0545710d9743813969b3bbcc563f4", - "count": 2, - "total_related": 8, - "prevalence": 0.25 - }, - { - "value": "016cf44b5637f2c71383de4549b9eff72e74382e30add1d14c3944daed9e2e5d", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "0323c7c33475091162c3ea88a78ee4c9f39b77f49b148c3dd52b1186cb1e9a15", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "04270e4fd725a173e54ac6da4d02a00a1d7401a4c72dd4715cc667384ddb9057", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "061bcf4a721f3232edb099ce730e584a54b99745db32b37db495a40e1788eaa2", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "083278188e04258b1a40d6e2c5a38a6fad03937dcd9cde664ddba02fa3cab275", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "089accf8636e3d36b24bb3e4e0499797b3e38380854c1e1b5280e36e8caf1b5e", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "0a6d0ffdcf849f3a55f1c8934f9361f5d29424f406c0d20c564ebdd1ff3c23f3", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "0ab6d4d11b5422151eec35bffe69524cb86f2e3147fe13a1a02d99da697364d9", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "0b85bfa981bc05fb8c29a8623ebff77331ce363061dba5495dc46848d858222c", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "0c7466ed8b51f0a769a7f85ad4b88c3770d71c4863322fa38429ccbf3d56ab06", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "0dd36a058705717a7d84622f9745b85277c37a07ad830a6648a01ef6e679324a", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "0fd8d4e908c1685b55d983f28eb3be88b1b043ae979b0d6e588113fa6dfba517", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "1138fd0fbcc9a8765508217d800611fda98e08757c504e14662b40cd456076e2", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "12f1726152734c8493a363237350566a9cd50930da58c06a4744941f5dfb0cee", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "1520e4cb2748aa5725d8b6c242ff6cf365f6672db35df2745c920ed228666317", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "15cb5c974263e7b774cd0c104d40768ec7bfb8729a6420ae306b854078e9e13a", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "1620f0c0b405e8517f7cc836d9a919ea8bc6fd4acd3308dde1e033c07767f3c8", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "1f9944ccc4cb956c4eb81e76d51b3cb048b838f2f746e2017d4492abd5e9ed79", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "227c34f38d1555133e7877d82cdd5a8231f876d2552cedbdf9c1e2777b16b050", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "07014e419711c198dd2d5da99e34726777b83ce8d23e40f1ba21fe9c88d8490e", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "07b158ef3cef2c6c7b2c9660f4551bfbf1c37cd690cfbf66fc149296a5be973c", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "092a8d02b86ed6e1d46fb7a3c005b6fdc0d255cbb254f3cdc898a862fa31e48f", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "0a9e072035636445720d313ff449d26c507a0a9efc66e1a16c74371537c66194", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "0cf9bcf39b9f9bb6d58c2150384080bd2be671197463e637eaa41ac7849645aa", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "0d481c8c9670a0aeadcc9ca4e66dc790b540b1605621c1377cb0628172940e54", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "0e8438b049a9d795e8c9cb0cf9e1c68c4df8fbfda6292a3debbd61629ecb2632", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "101a267b08d3d687cf6e23c126f2bd6418b05edad1a124b25a975a101f474e5d", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "1304d13749314412aaed823179542dafd972027bca3af994d8c438106b993434", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "16202378782d064757c98dd1558457b3c0c54f0e29bc472a95678af99444a0ba", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "181b448f5249d5b7bbf247ef09cb2f82a637f6eee6e806894c8a39c7ec72c2bd", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "0fe6bda48985dbff87afc2cd6e412683674e484aec11c42e3a0115aa3631ff8c", - "count": 2, - "total_related": 32, - "prevalence": 0.0625 - }, - { - "value": "1468bb69fe2cd9c7631094755e09cd7c37e8b1142fe88dea3b603cb161688d08", - "count": 2, - "total_related": 32, - "prevalence": 0.0625 - }, - { - "value": "094da712cf83eef91acaec6c352cb263977c5f014e8978ff88b24da7f961abe3", - "count": 2, - "total_related": 33, - "prevalence": 0.06060606060606061 - }, - { - "value": "1b97623ff5b7e17a91b511cf359d0f251565332a0528a97b8a7f005b6a5f0231", - "count": 2, - "total_related": 52, - "prevalence": 0.038461538461538464 - }, - { - "value": "23bd34f9513a4b4ac7c29810f014551d4541019c826e2ed7b2dfab101cd44e5e", - "count": 2, - "total_related": 55, - "prevalence": 0.03636363636363636 - }, - { - "value": "0e858a8f56727317f161526b25700dc2adae56945b7cc1acd65d923e42c2c683", - "count": 2, - "total_related": 72, - "prevalence": 0.027777777777777776 - }, - { - "value": "13f6b17101381aad4c3c8646fed3c3f1aec866276e3fa25c5785a1c759ffc297", - "count": 2, - "total_related": 97, - "prevalence": 0.020618556701030927 - }, - { - "value": "23602ca2df23ed1b23bc1b9655247c9c595540bcffd2bdc1297e2174a7e44c99", - "count": 2, - "total_related": 299, - "prevalence": 0.006688963210702341 - }, - { - "value": "26c6e713d48abff2a0f3b3ed19c98d93883f40eca2c145b7d1b1aa9ce5903af5", - "count": 2, - "total_related": 299, - "prevalence": 0.006688963210702341 - }, - { - "value": "01bf3d3e053789fa675fb19a4a26441366dc4485c2832f2b17ee8c2ca96048de", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "09265501dd760303b7c85afb96017bc36e17f88dba4ef8b153adc6fe0c1c1cd3", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "01aa6c6b5ade9852854eb3270933ff209900814ae7459862bac4bc2ad4b53e49", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "05f182e9be25c953b0f03f4cf65d0773a723744efb316cddcefce199e0ba2aba", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "0613adae9c40df3e060c402023a8d3901109d02c3ffaa94869c7b1e4f572fd05", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "07d329ed8333397014a3639c1987ce1f5056f51f19cfc3e3595b6928b4add333", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "085d02ff5370bf8c89718ddef0bd6da39ed6ed6e1b9a7ad214105f08a2aa3edc", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "0addd6d6ef6d5a930eb3354854d7c7c8b5a646bf71e12270770a50de33306c42", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "0b0db01cf0c10f0d4e11bff999bee4b7761898169aad9c259b3b120d5741eff9", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "033502d18731b0377d7b5585445bfdc524efb388313aa20fd5ae23dad94e842f", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "080809f29febc6abfe6e01c79ce066e9d1072913ad83674d3aac82acefb514b8", - "count": 1, - "total_related": 14, - "prevalence": 0.07142857142857142 - }, - { - "value": "072d0633006eeafc77c0b0144fdac84a57fa1e4f8b96d9aa33d377bd789bc533", - "count": 1, - "total_related": 20, - "prevalence": 0.05 - }, - { - "value": "01d6c9d13fd2d95fc1d1adac158a0541a7c49b0e306da458555e34b7e941e222", - "count": 1, - "total_related": 26, - "prevalence": 0.038461538461538464 - }, - { - "value": "06e47eb71f683235a9e78e89a236dcf530e881ff94d15131c2852e6bb8c3dac2", - "count": 1, - "total_related": 27, - "prevalence": 0.037037037037037035 - }, - { - "value": "08cc91bab9870cbe2a9b1c3220c5a661c0ea562c5735b271f53ab20a3f07e3a2", - "count": 1, - "total_related": 101, - "prevalence": 0.009900990099009901 - }, - { - "value": "04fe0d39a645ad5724833217686db80fccacfdcba50f09583fb459f32f9c6812", - "count": 1, - "total_related": 103, - "prevalence": 0.009708737864077669 - }, - { - "value": "089483af4ffd2a54346c1060db5e29a180da0bd45907bdbf1c63fa55a5159b81", - "count": 1, - "total_related": 103, - "prevalence": 0.009708737864077669 - }, - { - "value": "077c86e8b7aefccb31a806dff5a93bbac17ac032db4b71bbb8df7a29a939e3f9", - "count": 1, - "total_related": 106, - "prevalence": 0.009433962264150943 - }, - { - "value": "03d837ad2515f08569fd1c965250c6324aa7e31c6a1877c4b4926cfe2df00396", - "count": 1, - "total_related": 110, - "prevalence": 0.00909090909090909 - }, - { - "value": "025598db733a9d573d0dd62ad9b190ae676ad1a40f105641fd9a183c105ed4b4", - "count": 1, - "total_related": 111, - "prevalence": 0.009009009009009009 - }, - { - "value": "02d9f3d8fbec1d02a3db5db23d2511834e00a825dbebf817aa1269cf0f8ce739", - "count": 1, - "total_related": 111, - "prevalence": 0.009009009009009009 - }, - { - "value": "03ad161d9a00bfd11d266336a02c63017819978cd574c1d2105db590e27b3816", - "count": 1, - "total_related": 111, - "prevalence": 0.009009009009009009 - }, - { - "value": "060cad1ff69e14f5f3a650e08cda7dc32540a349a37c12374e863fd8362a75c4", - "count": 1, - "total_related": 111, - "prevalence": 0.009009009009009009 - }, - { - "value": "0b52d5d29e42804706f99a724ec94d0e2f0fd2a4dfcfbe4ff4e0403e00a71e49", - "count": 1, - "total_related": 111, - "prevalence": 0.009009009009009009 - } - ], - "outgoing_links": [ - { - "value": "https://onion.ly/cap.js", - "count": 9, - "total_related": 389, - "prevalence": 0.02313624678663239 - }, - { - "value": "https://cdn.jsdelivr.net/npm/@hcaptcha/vanilla-hcaptcha", - "count": 9, - "total_related": 453, - "prevalence": 0.019867549668874173 - }, - { - "value": "https://js.hcaptcha.com/1/api.js?render=explicit&onload=_hCaptchaOnLoad&sentry=true", - "count": 9, - "total_related": 672, - "prevalence": 0.013392857142857142 - }, - { - "value": "http://reddit.com/submit?url=https://onion.ly&title=Onion.ly Tor Gateway", - "count": 9, - "total_related": 1913, - "prevalence": 0.004704652378463147 - }, - { - "value": "http://vkontakte.ru/share.php?url=https://onion.ly", - "count": 9, - "total_related": 1913, - "prevalence": 0.004704652378463147 - }, - { - "value": "http://www.facebook.com/sharer.php?u=https://onion.ly", - "count": 9, - "total_related": 1913, - "prevalence": 0.004704652378463147 - }, - { - "value": "https://twitter.com/share?url=https://onion.ly&text=Darknet%20Gateway&hashtags=onionly", - "count": 9, - "total_related": 1913, - "prevalence": 0.004704652378463147 - }, - { - "value": "https://www.torproject.org/download/download-easy.html", - "count": 9, - "total_related": 1992, - "prevalence": 0.004518072289156626 - }, - { - "value": "https://www.tor2web.org/", - "count": 9, - "total_related": 2137, - "prevalence": 0.004211511464670099 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/05c78a4/static/hcaptcha.html#frame=challenge&id=00tql2lh21ws&host=lockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/05c78a4/static/hcaptcha.html#frame=challenge&id=0f6imw6wq6sr&host=lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/05c78a4/static/hcaptcha.html#frame=challenge&id=0fhxepucdw9p&host=lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/05c78a4/static/hcaptcha.html#frame=challenge&id=0gabmttbg45&host=lockbitapt72iw55njgnqpymggskg5yp75ry7rirtdg4m7i42artsbqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=http%3A%2F%2Flockbitapt72iw55njgnqpymggskg5yp75ry7rirtdg4m7i42artsbqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/05c78a4/static/hcaptcha.html#frame=challenge&id=0i7e4sb7rum&host=lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/05c78a4/static/hcaptcha.html#frame=challenge&id=0j60g3b8orld&host=lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/05c78a4/static/hcaptcha.html#frame=challenge&id=0qd461kohlq&host=lockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/05c78a4/static/hcaptcha.html#frame=challenge&id=0s8tat3ttrbo&host=lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/05c78a4/static/hcaptcha.html#frame=challenge&id=0wus7yl8e5lq&host=lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/05c78a4/static/hcaptcha.html#frame=challenge&id=0y7jodl9mew&host=lockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/05c78a4/static/hcaptcha.html#frame=checkbox&id=00tql2lh21ws&host=lockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/05c78a4/static/hcaptcha.html#frame=checkbox&id=0f6imw6wq6sr&host=lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/05c78a4/static/hcaptcha.html#frame=checkbox&id=0fhxepucdw9p&host=lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/05c78a4/static/hcaptcha.html#frame=checkbox&id=0gabmttbg45&host=lockbitapt72iw55njgnqpymggskg5yp75ry7rirtdg4m7i42artsbqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=http%3A%2F%2Flockbitapt72iw55njgnqpymggskg5yp75ry7rirtdg4m7i42artsbqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/05c78a4/static/hcaptcha.html#frame=checkbox&id=0i7e4sb7rum&host=lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/05c78a4/static/hcaptcha.html#frame=checkbox&id=0j60g3b8orld&host=lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/05c78a4/static/hcaptcha.html#frame=checkbox&id=0qd461kohlq&host=lockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/05c78a4/static/hcaptcha.html#frame=checkbox&id=0s8tat3ttrbo&host=lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/05c78a4/static/hcaptcha.html#frame=checkbox&id=0wus7yl8e5lq&host=lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/05c78a4/static/hcaptcha.html#frame=checkbox&id=0y7jodl9mew&host=lockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/066de1650e161eb3a55e01b6fcac82523a2e377c/static/hcaptcha.html#frame=challenge&id=0ifgodqwela7&host=lockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/066de1650e161eb3a55e01b6fcac82523a2e377c/static/hcaptcha.html#frame=checkbox&id=0ifgodqwela7&host=lockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=challenge&id=041n7nns68jz&host=lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=challenge&id=0531q13tec17&host=lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=challenge&id=05khfbwpdvxy&host=lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=challenge&id=05xo6583uma5&host=lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=challenge&id=085sdt8hmz8b&host=lockbitapt72iw55njgnqpymggskg5yp75ry7rirtdg4m7i42artsbqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt72iw55njgnqpymggskg5yp75ry7rirtdg4m7i42artsbqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=challenge&id=0ljvy8byo8w&host=lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=challenge&id=0nlbni0n73lj&host=lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=challenge&id=0obuqegl8myj&host=lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=challenge&id=0p65c2c7pptf&host=lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=challenge&id=0pfwp2uriqpo&host=lockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=challenge&id=0tmwkt2s2t4e&host=lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=challenge&id=0ufqphhuzd5&host=lockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=challenge&id=0ylnvy2w4svk&host=lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=checkbox&id=041n7nns68jz&host=lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=checkbox&id=0531q13tec17&host=lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=checkbox&id=05khfbwpdvxy&host=lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=checkbox&id=05xo6583uma5&host=lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=checkbox&id=085sdt8hmz8b&host=lockbitapt72iw55njgnqpymggskg5yp75ry7rirtdg4m7i42artsbqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt72iw55njgnqpymggskg5yp75ry7rirtdg4m7i42artsbqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=checkbox&id=0ljvy8byo8w&host=lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=checkbox&id=0nlbni0n73lj&host=lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=checkbox&id=0obuqegl8myj&host=lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=checkbox&id=0p65c2c7pptf&host=lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=checkbox&id=0pfwp2uriqpo&host=lockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=checkbox&id=0tmwkt2s2t4e&host=lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=checkbox&id=0ufqphhuzd5&host=lockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/29427798d425c85c209e267347238466838cd1a9/static/hcaptcha.html#frame=checkbox&id=0ylnvy2w4svk&host=lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/8352e07/static/hcaptcha.html#frame=challenge&id=022r65tydqym&host=lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/8352e07/static/hcaptcha.html#frame=challenge&id=09s1n8dkym7&host=lockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/8352e07/static/hcaptcha.html#frame=challenge&id=0fx9ihaacu0m&host=lockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/8352e07/static/hcaptcha.html#frame=checkbox&id=022r65tydqym&host=lockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt2d73krlbewgv27tquljgxr33xbwwsp6rkyieto7u4ncead.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/8352e07/static/hcaptcha.html#frame=checkbox&id=09s1n8dkym7&host=lockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/8352e07/static/hcaptcha.html#frame=checkbox&id=0fx9ihaacu0m&host=lockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/b4956db/static/hcaptcha.html#frame=challenge&id=04017n5rljhu&host=lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/b4956db/static/hcaptcha.html#frame=challenge&id=079myslbbqj&host=lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=http%3A%2F%2Flockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/b4956db/static/hcaptcha.html#frame=challenge&id=07bmhwrv7u87&host=lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/b4956db/static/hcaptcha.html#frame=challenge&id=0eop4ed7lkw&host=lockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/b4956db/static/hcaptcha.html#frame=challenge&id=0ojzhxhxnktn&host=lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/b4956db/static/hcaptcha.html#frame=challenge&id=0t9m1au5at7m&host=lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/b4956db/static/hcaptcha.html#frame=challenge&id=0w4ehsem76dc&host=lockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/b4956db/static/hcaptcha.html#frame=challenge&id=0wgq1pb15tfo&host=lockbitapt72iw55njgnqpymggskg5yp75ry7rirtdg4m7i42artsbqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt72iw55njgnqpymggskg5yp75ry7rirtdg4m7i42artsbqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/b4956db/static/hcaptcha.html#frame=checkbox&id=04017n5rljhu&host=lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/b4956db/static/hcaptcha.html#frame=checkbox&id=079myslbbqj&host=lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=http%3A%2F%2Flockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/b4956db/static/hcaptcha.html#frame=checkbox&id=07bmhwrv7u87&host=lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/b4956db/static/hcaptcha.html#frame=checkbox&id=0eop4ed7lkw&host=lockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptbdiajqtplcrigzgdjprwugkkut63nbvy2d5r4w2agyekqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/b4956db/static/hcaptcha.html#frame=checkbox&id=0ojzhxhxnktn&host=lockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptc2iq4atewz2ise62q63wfktyrl4qtwuk5qax262kgtzjqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/b4956db/static/hcaptcha.html#frame=checkbox&id=0t9m1au5at7m&host=lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/b4956db/static/hcaptcha.html#frame=checkbox&id=0w4ehsem76dc&host=lockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitaptawjl6udhpd323uehekiyatj6ftcxmkwe5sezs4fqgpjpid.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/b4956db/static/hcaptcha.html#frame=checkbox&id=0wgq1pb15tfo&host=lockbitapt72iw55njgnqpymggskg5yp75ry7rirtdg4m7i42artsbqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt72iw55njgnqpymggskg5yp75ry7rirtdg4m7i42artsbqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/d136a52/static/hcaptcha.html#frame=challenge&id=0hc2oswj2tx&host=lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/d136a52/static/hcaptcha.html#frame=challenge&id=0jeru14iwftp&host=lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/d136a52/static/hcaptcha.html#frame=challenge&id=0pyu31io39mf&host=lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/d136a52/static/hcaptcha.html#frame=challenge&id=0ynfmx585zxe&host=lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/d136a52/static/hcaptcha.html#frame=checkbox&id=0hc2oswj2tx&host=lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/d136a52/static/hcaptcha.html#frame=checkbox&id=0jeru14iwftp&host=lockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt5x4zkjbcqmz6frdhecqqgadevyiwqxukksspnlidyvd7qd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/d136a52/static/hcaptcha.html#frame=checkbox&id=0pyu31io39mf&host=lockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt2yfbt7lchxejug47kmqvqqxvvjpqkmevv4l3azl3gy6pyd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://newassets.hcaptcha.com/captcha/v1/d136a52/static/hcaptcha.html#frame=checkbox&id=0ynfmx585zxe&host=lockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=true&custom=false&hl=en&tplinks=on&pstissuer=https%3A%2F%2Fpst-issuer.hcaptcha.com&sitekey=a5dc2196-cfd4-454c-bde0-cbde00d6fa4a&size=normal&theme=light&origin=https%3A%2F%2Flockbitapt34kvrip6xojylohhxrwsvpzdffgs5z4pbbsywnzsbdguqd.onion.ly", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://172.20.254.141/2018/08/07/hello-world/#comment-1", - "count": 1, - "total_related": 382, - "prevalence": 0.002617801047120419 - }, - { - "value": "https://freescout.net", - "count": 1, - "total_related": 1367, - "prevalence": 0.000731528895391368 - }, - { - "value": "http://www.html5rocks.com/en/tutorials/canvas/hidpi/", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": "https://crbug.com/740629)", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": "https://w3c.github.io/gamepad/#remapping", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": "https://wordpress.org/", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "referring_files": [ - { - "value": "142b59db74500f0008ce44e77fbc5a1b6a6996b1f9d505d289fcd06a48c2e538", - "count": 3, - "total_related": 19, - "prevalence": 0.15789473684210525 - }, - { - "value": "2d9b033019d61a65933e1523d91b5241a39e638bcc1fae5b181c9d45f03e0369", - "count": 3, - "total_related": 27, - "prevalence": 0.1111111111111111 - }, - { - "value": "4917fae3abc253201233827db71fe35a38c49868f5de76a5f0747ab6e385edd3", - "count": 3, - "total_related": 27, - "prevalence": 0.1111111111111111 - }, - { - "value": "013e566492e2a1b4002f8757e9a88c38e424fc9eb9f6264d7ef49d3a74fb8975", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "0237a1a68a0583a2f6c9e640fe9c9154763150ade8cc9ad77fb07536488d1a1e", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "035158dd12b922706fd4163c02ecc93c4b5ed3d18cdbacf862cdee2c5ab6242c", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "03d955619377d88861f9589ab8e0d3e1f437ca9cf5dcf9cbee1d98de0ee70e76", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "0402a3a6a039c5bec25c3878d086f07ffa2bdc95b7993992d84e22211898c4e1", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "0689b09a8851b31f8a32e588110934eb72b519a04f6c4c67d56e2ff5fa2800d8", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "06c27fb83429061ee887dcca3ff1c0c1b6d55c91d3ed918675aaabec77483f08", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "0726bbadaee6f440c696d7d2d04e8a55a6a76daeae442311b0c29bfc3ce029ca", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "0837baf2b379349b680044d4c0148df3ec9f2cb3d926cd22fd1c9d3f25f8a2d0", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "0924e0b194fc40b1dedf21af40cb5587768dfa6771c7e95928f2f9b1f67e3a13", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "0ac2fb2867b879667dab158ccf082cf2d6d3cdd97344ca1753c68589106c2ef0", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "0bb5bfc3c6b4133494503e96a051789bada72f9a9a1a87bec960e4837dc73bca", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "0c79ac7b9a3e1493e95c071ee494647678c2c6c5e60d31de48179040913f12a4", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "0d8a3af96b9f1bda4bd54ac096b6fe4a3eec3d94aba871607bb5098e260e9a87", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "0ea59932c2315f9593759bcffb4c5bc3d07a2d4c037b2cad5e72013fc49b54bb", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "0eb3faebf11e16fbbf43f16919cea708a4290c2f62bd07a121d4dfdddb5c9444", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "0fdf51f70c1e84506e906071ddc0d5d63d60852d469e3b9a96d5fa897ac0146a", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "119ec7696e9a5386358d958951104326d10831272b1db86124ea5fb55961fa6a", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "125028fae5f42c3a25892e3a782b8cb3bf3add66e464059d90139610463ce441", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "12f1726152734c8493a363237350566a9cd50930da58c06a4744941f5dfb0cee", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "146848351685a8219264150407fadf310aae0b5888cb1e65842c4c2adfa5b22b", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "14f4bc33f959473d32e4a053d5c58d9b35da149ae8074b4e2d865477707f4abc", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "1a5058980ccf530657a0de8c6f0d276913bd44090e787bab53def6444155a425", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "1ab94927a3b38f1d57cd001fd412b7592d26e654e1f83dca3558ebdc5bbb5517", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "1adad13ebf0f05aae29a2808a95b418538eb51677c2d20b6a792f54f1a2af59f", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "1e045d19597873cb9b0b2d256392d48c106220d651a0eab50c982a6e01d2777f", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "1e2dc244a76253a96d01371ea1617356b64992bf5ba53512d2dd6b2cab9b5dab", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "1e50380a8b2449e90dd3f9f144cd2c02cfd4b804506bde55565f930d41b8c8f4", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "1ea4f27cf07ea9b3ada2e6d3d661f6c945c8becde6b9c6b9a647c8192da7bbee", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "202e792ea678490ff6c700cf7d73d67fafa5b9de6603fdd5d1e4905cd34fa08c", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "230e87f1a86e7384a8dc31e1f34ab4982d60e5c435a5b991adb99489b0503fca", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "23bd34f9513a4b4ac7c29810f014551d4541019c826e2ed7b2dfab101cd44e5e", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "2598bbde2d45fd29f8a44032edb75fb72e18b0abd14888fd154aabd4d1f1e62b", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "26bd5ab49f119208ba3931dd90bdcdd559fb806f254067d22856bdfe6c0fdf3c", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "2722f6449610bf6885b09adf5ab104a94961f7a12dfcc36288b86fbe1b9864c4", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "2768db39ad3a2b3045ef2aa8206bbae3c60958717de0b8b18f760305941d2c61", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "27cb148ad6ddc75f04e351cf695d04feba5d29b82b4d8e0a13005aca1a9b99ba", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "2a1b2e48f1f33562f30de6dbe2c0a64c4d304d63821ff7da61bd073caa73fef9", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "2a57c8ef3a62285b71ade0bbb5fee1fd0b0df5ccb052b0ea73a41a478349bdff", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "2a5d0edd5313b6cae2933d3427d700d3c314a3dcba229b22a0bc86c7e2356435", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "2ba799e4ec7b15cf168c4644e65875b06b158d9c6b17af5099887e236dd9def3", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "2ccaabe1b826b6e6e78bda7317c58c48903f6b7c72bf310ea2fffa67be899366", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "2d9a90fa7c2192aa4f39556408ce189bb5e2734af132dcbce77f9a370cb09853", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "2d9f9f7600824b3c6f19b9ea40d2528fd2895bf481e992ab173aa51508dbf67c", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "2de4b3789562f229b5ffed4820f0dc48a6fa7e6f3f4e622cb1a66a691890470a", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "2fd730600d0c01304c88079bc0d95856294555cf9746d1ce6ad5ee464ae60f1d", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "3144ec941f9f73d04f49e2725b83074b9adc6dbc83d6c4d0cb62acb8d019aeb3", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "31c78b52049331db73628a3529e46ae131e21b26ee3934a4d3e422fb67604716", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "3264839f40d3f5efe0f924329fab017025392a916e7906424540ab809c55fb5d", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "336705d87389bf130d48ee443d59669ff4b47472696ead702c02242e1af2302c", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "364f3889a5adf0e4df314cffb4d02f6c557743a67d208a18e63f676eb7107e20", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "37913d1762cdca5c0b039894b326eb86d7b41d969f539c29c408dd60dd2cf699", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "3859ca38ad009d07a156f27de6acbbace281d65471859525eeeb30c553966bbe", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "3a71eb8a1068d018750f4a3b48fdf7f01eb97bce2ba1a343419da267671859d7", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "3aec0f109c799a46c14f3de6472d00e5e40bfbbd47434d8d41e8404d9792b38c", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "3f02b616563837d3879d0967d585583890f933ac5d6503d41e8f6e9ea69c53ff", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "4001e58c127c2ba0555832cf61d99f73183fa96773b062610e5116af849e8a82", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "40af2ecd9b6e59de73214df996bb82383d8b66ae309187787b7035951700f048", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "4182ca4dde3cd072fb927e432f144b34ce501ca4de5b7779f7394e98f8971aab", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "423d17994b6c193dc10eb974ad530254ef7f3d4057509ba4faee7ae3cac4552d", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "4347702f7c45a7bebd4a76bdeb5e6c9d98424070161e1f1a22f3237d217a63da", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "43b818f20cc5f1c0e4109e49c41cf2f44ce28ddce3b5b3ff615813b2de1f4975", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "44d497ed88cd9201ed90184c2895ed6666cfe16a649a6911dad7890263cfded0", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "475744327f3fa1f88a5756d86b50f509bda7889887dcbc8365b474b7dbb10700", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "4990c782df44e2dbe5ddd78a0faf6a6285b314880fe2cf4adbafc372eef9234d", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "4b22508fa146e934d3e47f3cad86e1c6ef80f5b99ce91a1a2b436952068cfbbc", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "4a96d068ec7edf6f5a0286dfdefafa943138d8b73fc7c3da475acac4153e8dbf", - "count": 3, - "total_related": 34, - "prevalence": 0.08823529411764706 - }, - { - "value": "0a9bd25761cb33d2ddc8073d247fa87b2a1872dbd102edbdf1c5952a48e8239e", - "count": 3, - "total_related": 35, - "prevalence": 0.08571428571428572 - }, - { - "value": "0b681235bcd75e2e8de4f7a8df477710fdd63bd31285d4a74c32902651487a84", - "count": 3, - "total_related": 35, - "prevalence": 0.08571428571428572 - }, - { - "value": "44998caeb91a50724b29a7adfba5415a0e5e4e4ece4f898826bc978a66f63007", - "count": 3, - "total_related": 35, - "prevalence": 0.08571428571428572 - }, - { - "value": "2d3db78496d61e6eaa4147019911ea59072e87285015a78ce4532946f7d2b692", - "count": 3, - "total_related": 36, - "prevalence": 0.08333333333333333 - }, - { - "value": "2c3d6bee8c5cd870b5b3276094832f32a0313be24922db5b32db31cf4aacbf75", - "count": 3, - "total_related": 37, - "prevalence": 0.08108108108108109 - }, - { - "value": "1460c87eee79b131e1e10ee66d9b98028b81e4be985e21376e50930030fcc666", - "count": 3, - "total_related": 38, - "prevalence": 0.07894736842105263 - }, - { - "value": "1a6af4ca52796a5c8dbf8ea0af727efd3515d45aa36b23af32b85370a45d6867", - "count": 3, - "total_related": 38, - "prevalence": 0.07894736842105263 - }, - { - "value": "33a289894e918868da1837da4a21fc739bb4a39e3d3d97ddc517e99a45bdaf22", - "count": 3, - "total_related": 38, - "prevalence": 0.07894736842105263 - }, - { - "value": "3d53f6ffdc838588a0906b7acea4f03075ff98570cacfaafa5fb988a5542c43f", - "count": 3, - "total_related": 38, - "prevalence": 0.07894736842105263 - }, - { - "value": "44b6e814e02d4bea1aa3ee2ced85b0052edd99e27921b93269ece535f91be228", - "count": 3, - "total_related": 38, - "prevalence": 0.07894736842105263 - }, - { - "value": "0bfe067c2d6d28e0dc060634b6cb56b5e684102c6d93ee5d8882571fe64ba7c5", - "count": 3, - "total_related": 40, - "prevalence": 0.075 - }, - { - "value": "49bb44caa76ab9d6205230fb4a52e0f26eca9996203b71d3a1d2edf7d77a1bb4", - "count": 3, - "total_related": 41, - "prevalence": 0.07317073170731707 - }, - { - "value": "1e881ba325951fa2b39388ca29047eb35659fe28af8af8613f2499b46472f24e", - "count": 3, - "total_related": 46, - "prevalence": 0.06521739130434782 - }, - { - "value": "2ab4fa5342840403d0d3c646b21a585ef3cb1779a39c96eb3f97f894d6e0c469", - "count": 3, - "total_related": 47, - "prevalence": 0.06382978723404255 - }, - { - "value": "45780d802d1171cbb3730fde9c645c6862584a987bab8f5f99ff33b69d3cc901", - "count": 3, - "total_related": 47, - "prevalence": 0.06382978723404255 - }, - { - "value": "107358029b37829975e613c262c710ee1176e8504840dd9141c85131283d5b19", - "count": 3, - "total_related": 48, - "prevalence": 0.0625 - }, - { - "value": "15becb6bdb0d1414107ee2c5fe331991b81f7fa680079e60b5854bef5485b2b8", - "count": 3, - "total_related": 48, - "prevalence": 0.0625 - }, - { - "value": "1ea3693324e383543fb2be6e7d56a59ce24c2afd3af80eb949a08ed02ff7e4f5", - "count": 3, - "total_related": 49, - "prevalence": 0.061224489795918366 - }, - { - "value": "3223489f49787185b1cb220936941b923d2c744174f221e04589ffeb641764a4", - "count": 3, - "total_related": 49, - "prevalence": 0.061224489795918366 - }, - { - "value": "17106241ec00dce647858e46ef76ae508d4cab3f3a4165c2a82f08c4ce0b107e", - "count": 3, - "total_related": 50, - "prevalence": 0.06 - }, - { - "value": "3c6fb52c35e9199dd507c7f51dea7a4a9d28d6540d925ac9cbd6ca21d4036f9d", - "count": 3, - "total_related": 50, - "prevalence": 0.06 - }, - { - "value": "1b97623ff5b7e17a91b511cf359d0f251565332a0528a97b8a7f005b6a5f0231", - "count": 3, - "total_related": 51, - "prevalence": 0.058823529411764705 - }, - { - "value": "01284076d83ddcbaffc60a3f618cc0f722aeaf1c18e561604a0d37aea8c81a38", - "count": 3, - "total_related": 52, - "prevalence": 0.057692307692307696 - }, - { - "value": "396ccc05d5851303b495451cf72f62b21090a5a107b4214990c88cf0de963f9f", - "count": 3, - "total_related": 77, - "prevalence": 0.03896103896103896 - }, - { - "value": "116fb96d2b6049d7a69977125b4535e8c6b3550f348059a4a19edaab4c8e3226", - "count": 3, - "total_related": 199, - "prevalence": 0.01507537688442211 - }, - { - "value": "318526b108539af55ec23b5a9720441d39e944e222e5322455a9845d99d4ad04", - "count": 3, - "total_related": 206, - "prevalence": 0.014563106796116505 - }, - { - "value": "4a584b1872fee633572a259954b6dccccb83a852fff8695e4f6bfeb01bd7b513", - "count": 3, - "total_related": 294, - "prevalence": 0.01020408163265306 - }, - { - "value": "3667adff0b9ae9d5eec43da31c987c49fe76bddc0686f911c629049025101a58", - "count": 3, - "total_related": 296, - "prevalence": 0.010135135135135136 - }, - { - "value": "43000554d89b3007f2022dd90b9a580d2ba0168832ae14ed9bd26f62034523f9", - "count": 3, - "total_related": 415, - "prevalence": 0.007228915662650603 - }, - { - "value": "22886badd125042377116aa598f58c0143cd2a3ee43c2693e99b718ccdfeb041", - "count": 3, - "total_related": 472, - "prevalence": 0.006355932203389831 - } - ], - "tags": [ - { - "value": "base64-embedded", - "count": 9 - }, - { - "value": "dom-modification", - "count": 9 - }, - { - "value": "external-resources", - "count": 9 - }, - { - "value": "iframes", - "count": 9 - } - ], - "tracker_ids": [ - { - "value": "G-7592W6XHM5", - "count": 7, - "total_related": 116, - "prevalence": 0.0603448275862069 - } - ] - } - }, - "alt_names_details": [ - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Babuk (Internet)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Babuk2 (Internet)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Braincipher (Group-IB)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "LockBit 3.0 (DuskRise Inc.)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Lockbit 3.0 (Infinitum IT)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Lockbit Black (Proofpoint)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Lockbitblack (Sophos)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Orion (Self)" - } - ], - "capabilities": [ - { - "confidence": "unconfirmed", - "description": "Capabilities associated with detecting or evading virtual machine or \"sandbox\" programs. \"Parent\" aspect used to contain specific sub-aspects.", - "first_seen": null, - "last_seen": null, - "value": "Anti-VM capabilities" - }, - { - "confidence": "unconfirmed", - "description": "Capable of detecting or evading VMWare virtual machines.", - "first_seen": null, - "last_seen": null, - "value": "Anti-VM: VMware" - }, - { - "confidence": "unconfirmed", - "description": "Capabilities associated with anti-debugging techniques.", - "first_seen": null, - "last_seen": null, - "value": "Anti-debug capabilities" - }, - { - "confidence": "unconfirmed", - "description": "Capable of booting the system in safe mode.", - "first_seen": null, - "last_seen": null, - "value": "Boots the system in safe mode" - }, - { - "confidence": "unconfirmed", - "description": "Capable of bypassing Mark-of-the-Web (MOTW).", - "first_seen": null, - "last_seen": null, - "value": "Bypass Mark-of-the-Web (MOTW)" - }, - { - "confidence": "unconfirmed", - "description": "Capable of bypassing Windows User Account Control (UAC).", - "first_seen": null, - "last_seen": null, - "value": "Bypass Windows UAC" - }, - { - "confidence": "unconfirmed", - "description": "Capable of calculating hashes using the Fowler\u00d0Noll\u00d0Vo (FNV) hash algorithm.", - "first_seen": null, - "last_seen": null, - "value": "Calculates FNV hashes" - }, - { - "confidence": "unconfirmed", - "description": "Capable of calculating hashes using the MD4 Message-Digest algorithm.", - "first_seen": null, - "last_seen": null, - "value": "Calculates MD4 hashes" - }, - { - "confidence": "unconfirmed", - "description": "Capable of calculating hashes using the MD5 message-digest algorithm.", - "first_seen": null, - "last_seen": null, - "value": "Calculates MD5 hashes" - }, - { - "confidence": "unconfirmed", - "description": "Capable of calculating hashes using the MurmurHash3 algorithm.", - "first_seen": null, - "last_seen": null, - "value": "Calculates MurmurHash3 hashes" - }, - { - "confidence": "unconfirmed", - "description": "Capable of calculating SHA-224 (224 bit) hashes.", - "first_seen": null, - "last_seen": null, - "value": "Calculates SHA-224 hashes" - }, - { - "confidence": "unconfirmed", - "description": "Capable of calculating SHA-256 (256 bit) hashes.", - "first_seen": null, - "last_seen": null, - "value": "Calculates SHA-256 hashes" - }, - { - "confidence": "unconfirmed", - "description": "Capable of calculating SHA-512 (512 bit) hashes.", - "first_seen": null, - "last_seen": null, - "value": "Calculates SHA-512 hashes" - }, - { - "confidence": "unconfirmed", - "description": "Can capture, mine, or enumerate data via WMI.", - "first_seen": null, - "last_seen": null, - "value": "Can mine data via WMI" - }, - { - "confidence": "unconfirmed", - "description": "Can capture or extract CPU information.", - "first_seen": null, - "last_seen": null, - "value": "Capture CPU information" - }, - { - "confidence": "unconfirmed", - "description": "Capable of enumerating or listing Group Policy Object (GPO) information.", - "first_seen": null, - "last_seen": null, - "value": "Capture Group Policy Object data" - }, - { - "confidence": "unconfirmed", - "description": "Can capture or extract Network Share information.", - "first_seen": null, - "last_seen": null, - "value": "Capture Network Share information" - }, - { - "confidence": "unconfirmed", - "description": "Can capture or extract disk information.", - "first_seen": null, - "last_seen": null, - "value": "Capture disk information" - }, - { - "confidence": "unconfirmed", - "description": "Can capture or extract network configuration information.", - "first_seen": null, - "last_seen": null, - "value": "Capture network configuration" - }, - { - "confidence": "unconfirmed", - "description": "Can capture or extract network interface information.", - "first_seen": null, - "last_seen": null, - "value": "Capture network interfaces" - }, - { - "confidence": "unconfirmed", - "description": "Can capture information about the system OS configuration.", - "first_seen": null, - "last_seen": null, - "value": "Capture operating system information" - }, - { - "confidence": "unconfirmed", - "description": "Can search for and capture payment card data.", - "first_seen": null, - "last_seen": null, - "value": "Capture payment card data" - }, - { - "confidence": "unconfirmed", - "description": "Can capture or extract various types of system information. Potentially includes a variety of data, including disk, network, or memory configuration; local user accounts; installed applications or patches; or the output of various system commands, such as 'sysinfo' or 'ipconfig' on Windows.", - "first_seen": null, - "last_seen": null, - "value": "Capture system information" - }, - { - "confidence": "unconfirmed", - "description": "Can capture or extract token information", - "first_seen": null, - "last_seen": null, - "value": "Capture token information" - }, - { - "confidence": "unconfirmed", - "description": "Capable of changing directories.", - "first_seen": null, - "last_seen": null, - "value": "Change directories" - }, - { - "confidence": "unconfirmed", - "description": "Capable of checking the HTTP response status code.", - "first_seen": null, - "last_seen": null, - "value": "Checks HTTP response status code" - }, - { - "confidence": "unconfirmed", - "description": "Can capture or record physical location.", - "first_seen": null, - "last_seen": null, - "value": "Collects physical location" - }, - { - "confidence": "unconfirmed", - "description": "Can communicate using HTTP or an HTTP-like protocol.", - "first_seen": null, - "last_seen": null, - "value": "Communicates using HTTP" - }, - { - "confidence": "unconfirmed", - "description": "Can communicate using remote procedure calls (RPC).", - "first_seen": null, - "last_seen": null, - "value": "Communicates using RPC" - }, - { - "confidence": "unconfirmed", - "description": "Can communicate using the Server Message Block (SMB) protocol.", - "first_seen": null, - "last_seen": null, - "value": "Communicates using SMB" - }, - { - "confidence": "unconfirmed", - "description": "Capable of interprocess communication between a pipe server and one or more pipe clients.", - "first_seen": null, - "last_seen": null, - "value": "Communicates using pipes" - }, - { - "confidence": "unconfirmed", - "description": "Capable of connecting via TCP socket.", - "first_seen": null, - "last_seen": null, - "value": "Connect to TCP socket" - }, - { - "confidence": "unconfirmed", - "description": "Capable of executing constructing (creating) a mutex.", - "first_seen": null, - "last_seen": null, - "value": "Constructs mutex" - }, - { - "confidence": "unconfirmed", - "description": "Capable of creating a Windows registry key.", - "first_seen": null, - "last_seen": null, - "value": "Create Windows registry key" - }, - { - "confidence": "unconfirmed", - "description": "Capable of creating a Windows registry key value.", - "first_seen": null, - "last_seen": null, - "value": "Create Windows registry key value" - }, - { - "confidence": "unconfirmed", - "description": "Capable of creating a socket.", - "first_seen": null, - "last_seen": null, - "value": "Create a socket" - }, - { - "confidence": "unconfirmed", - "description": "Capable of creating directories.", - "first_seen": null, - "last_seen": null, - "value": "Create directories" - }, - { - "confidence": "unconfirmed", - "description": "Can create (write) files on a victim system. Contrast with the ability to download files to the victim system.", - "first_seen": null, - "last_seen": null, - "value": "Create files" - }, - { - "confidence": "unconfirmed", - "description": "Capable of creating a thread.", - "first_seen": null, - "last_seen": null, - "value": "Create thread" - }, - { - "confidence": "unconfirmed", - "description": "Capable of creating a process, or uses APIs associated with creating a process.", - "first_seen": null, - "last_seen": null, - "value": "Creates processes" - }, - { - "confidence": "unconfirmed", - "description": "Capable of creating a process in the suspended state.", - "first_seen": null, - "last_seen": null, - "value": "Creates processes in suspended state" - }, - { - "confidence": "unconfirmed", - "description": "Can decrypt data that is encrypted using the AES encryption algorithm. May refer to decryption of data or files.", - "first_seen": null, - "last_seen": null, - "value": "Decrypts using AES" - }, - { - "confidence": "unconfirmed", - "description": "Capable of deleting a service or daemon.", - "first_seen": null, - "last_seen": null, - "value": "Delete a service" - }, - { - "confidence": "unconfirmed", - "description": "Can delete files on a victim system (normal delete, does not include secure deletion with overwriting).", - "first_seen": null, - "last_seen": null, - "value": "Delete files" - }, - { - "confidence": "unconfirmed", - "description": "Can delete Shadow Copy files (also known as Volume Snapshot Service, Volume Shadow Copy Service or VSS) on a victim system.", - "first_seen": null, - "last_seen": null, - "value": "Deletes Volume Shadow Copy files" - }, - { - "confidence": "unconfirmed", - "description": "Capable of deleting Windows registry values.", - "first_seen": null, - "last_seen": null, - "value": "Deletes Windows registry values" - }, - { - "confidence": "unconfirmed", - "description": "Capable of encoding data using Base64. May refer to encoding used for data or files.", - "first_seen": null, - "last_seen": null, - "value": "Encodes using Base64" - }, - { - "confidence": "unconfirmed", - "description": "Capabilities associated with the encoding of data. \"Parent\" aspect used to contain specific sub-aspects. Sub-aspects should refer to an encoding method (XOR, Base64) NOT an encryption algorithm.", - "first_seen": null, - "last_seen": null, - "value": "Encoding capabilities" - }, - { - "confidence": "unconfirmed", - "description": "Can encrypt or decrypt files on a victim system.", - "first_seen": null, - "last_seen": null, - "value": "Encrypt or decrypt files" - }, - { - "confidence": "unconfirmed", - "description": "Can encrypt data using the AES encryption algorithm. May refer to encryption used for data or files.", - "first_seen": null, - "last_seen": null, - "value": "Encrypts data with AES" - }, - { - "confidence": "unconfirmed", - "description": "Can encrypt data using the AES256 encryption algorithm. May refer to encryption used for data or files.", - "first_seen": null, - "last_seen": null, - "value": "Encrypts data with AES-256" - }, - { - "confidence": "unconfirmed", - "description": "Can encrypt data using the ChaCha, ChaCha12 or ChaCha20 stream ciphers. May refer to encryption used for data or files.", - "first_seen": null, - "last_seen": null, - "value": "Encrypts data with ChaCha" - }, - { - "confidence": "unconfirmed", - "description": "Can encrypt data using Curve25519. May refer to encryption used for data or files.", - "first_seen": null, - "last_seen": null, - "value": "Encrypts data with Curve25519" - }, - { - "confidence": "unconfirmed", - "description": "Can encrypt data using the RC4 stream cipher. May refer to encryption used for data or files.", - "first_seen": null, - "last_seen": null, - "value": "Encrypts data with RC4" - }, - { - "confidence": "unconfirmed", - "description": "Can encrypt data using the RSA cryptosystem. May refer to encryption used for data or files.", - "first_seen": null, - "last_seen": null, - "value": "Encrypts data with RSA" - }, - { - "confidence": "unconfirmed", - "description": "Can encrypt data using the Salsa20 stream cipher. May refer to encryption used for data or files.", - "first_seen": null, - "last_seen": null, - "value": "Encrypts data with Salsa20" - }, - { - "confidence": "unconfirmed", - "description": "Can encrypt data using XChaCha20 block cipher. May refer to encryption used for data or files.", - "first_seen": null, - "last_seen": null, - "value": "Encrypts data with XChaCha20" - }, - { - "confidence": "unconfirmed", - "description": "Capable of encoding data using XOR.", - "first_seen": null, - "last_seen": null, - "value": "Encrypts data with XOR" - }, - { - "confidence": "unconfirmed", - "description": "Capabilities associated with event logs. \"Parent\" aspect used to contain specific sub-aspects.", - "first_seen": null, - "last_seen": null, - "value": "Event Log Capabilities" - }, - { - "confidence": "unconfirmed", - "description": "Can execute a specified file (e.g., a downloaded file, as opposed to an interactive command).", - "first_seen": null, - "last_seen": null, - "value": "Execute files" - }, - { - "confidence": "unconfirmed", - "description": "Capable of executing a command-line command (as opposed to executing a file).", - "first_seen": null, - "last_seen": null, - "value": "Executes commands from the command line" - }, - { - "confidence": "unconfirmed", - "description": "Capabilities associated with operations on files. \"Parent\" aspect used to contain specific sub-aspects.", - "first_seen": null, - "last_seen": null, - "value": "File manipulation" - }, - { - "confidence": "unconfirmed", - "description": "Can find files on a victim system based on some criteria (e.g., file name, extension, last modified date).", - "first_seen": null, - "last_seen": null, - "value": "Find files" - }, - { - "confidence": "unconfirmed", - "description": "Capable of searching for or identifying specific file resources, or uses APIs associated with resource location.", - "first_seen": null, - "last_seen": null, - "value": "Finds file resources" - }, - { - "confidence": "unconfirmed", - "description": "Capable of getting or retrieving the common file path.", - "first_seen": null, - "last_seen": null, - "value": "Gets common file path" - }, - { - "confidence": "unconfirmed", - "description": "Capable of getting a file attribute.", - "first_seen": null, - "last_seen": null, - "value": "Gets file attribute" - }, - { - "confidence": "unconfirmed", - "description": "Capable of hiding a thread.", - "first_seen": null, - "last_seen": null, - "value": "Hides thread" - }, - { - "confidence": "unconfirmed", - "description": "Capable of hiding specified windows.", - "first_seen": null, - "last_seen": null, - "value": "Hides windows" - }, - { - "confidence": "unconfirmed", - "description": "Capable of logging keystrokes via polling.", - "first_seen": null, - "last_seen": null, - "value": "Keylog via polling" - }, - { - "confidence": "unconfirmed", - "description": "The Server Message Block (SMB) Protocol is a network file sharing protocol, and as implemented in Microsoft Windows is known as Microsoft SMB Protocol. Adversaries may utilize this protocol (or exploit it) to move laterally through an environment.", - "first_seen": null, - "last_seen": null, - "value": "Lateral movement via SMB" - }, - { - "confidence": "unconfirmed", - "description": "Windows systems have hidden network shares (ex. C$, ADMIN$, and IPC$) that are accessible only to administrators and provide the ability for remote file copy and other administrative functions. Adversaries may use this technique with administrator-level Valid Accounts to remotely access a networked system over SMB to interact with systems using RPCs, transfer files, and run transferred binaries through remote execution.", - "first_seen": null, - "last_seen": null, - "value": "Lateral movement via admin network shares" - }, - { - "confidence": "unconfirmed", - "description": "Capable of listing directories or directory contents.", - "first_seen": null, - "last_seen": null, - "value": "List directories" - }, - { - "confidence": "unconfirmed", - "description": "Capable of listing file sizes on a victim system.", - "first_seen": null, - "last_seen": null, - "value": "List file sizes" - }, - { - "confidence": "unconfirmed", - "description": "Capable of listing file versions on a victim system.", - "first_seen": null, - "last_seen": null, - "value": "List file versions" - }, - { - "confidence": "unconfirmed", - "description": "Can list files on a victim system.", - "first_seen": null, - "last_seen": null, - "value": "List files" - }, - { - "confidence": "unconfirmed", - "description": "Capable of listing the installed services or daemons on a computer.", - "first_seen": null, - "last_seen": null, - "value": "List services" - }, - { - "confidence": "unconfirmed", - "description": "Capable of listing drives.", - "first_seen": null, - "last_seen": null, - "value": "Lists drives" - }, - { - "confidence": "unconfirmed", - "description": "Capable of listing running processes.", - "first_seen": null, - "last_seen": null, - "value": "Lists processes" - }, - { - "confidence": "unconfirmed", - "description": "Can lock files on a victim system.", - "first_seen": null, - "last_seen": null, - "value": "Locks files" - }, - { - "confidence": "unconfirmed", - "description": "Capable of locking a mutex.", - "first_seen": null, - "last_seen": null, - "value": "Locks mutex" - }, - { - "confidence": "unconfirmed", - "description": "Can move files on a victim system.", - "first_seen": null, - "last_seen": null, - "value": "Move files" - }, - { - "confidence": "unconfirmed", - "description": "Capable of opening Windows registry keys.", - "first_seen": null, - "last_seen": null, - "value": "Open Windows registry key" - }, - { - "confidence": "unconfirmed", - "description": "Methodologies associated with overwriting or wiping file data by empyting the Recycle Bin quietly.", - "first_seen": null, - "last_seen": null, - "value": "Overwrite or wipe file data by emptying Recycle Bin quietly" - }, - { - "confidence": "unconfirmed", - "description": "Capable of process injection, or uses APIs associated with injecting code into another process.", - "first_seen": null, - "last_seen": null, - "value": "Performs process injection" - }, - { - "confidence": "unconfirmed", - "description": "Capable of persistence via a Windows registry Run keys.", - "first_seen": null, - "last_seen": null, - "value": "Persistence via Windows registry Run key" - }, - { - "confidence": "unconfirmed", - "description": "Capabilities associated with pseudorandom number generation (PRNG). \"Parent\" aspect used to contain specific sub-aspects.", - "first_seen": null, - "last_seen": null, - "value": "Psuedo random number generation capabilities" - }, - { - "confidence": "unconfirmed", - "description": "Capable of querying Windows registry key values.", - "first_seen": null, - "last_seen": null, - "value": "Query Windows registry key values" - }, - { - "confidence": "unconfirmed", - "description": "Threat actor methodologies associated with querying service information.", - "first_seen": null, - "last_seen": null, - "value": "Query service information" - }, - { - "confidence": "unconfirmed", - "description": "Can read files on a victim system.", - "first_seen": null, - "last_seen": null, - "value": "Read files" - }, - { - "confidence": "unconfirmed", - "description": "Can rename files on a victim system.", - "first_seen": null, - "last_seen": null, - "value": "Rename files" - }, - { - "confidence": "unconfirmed", - "description": "Capable of scanning for Server Message Block (SMB).", - "first_seen": null, - "last_seen": null, - "value": "Scans SMB" - }, - { - "confidence": "unconfirmed", - "description": "The binary can delete itself.", - "first_seen": null, - "last_seen": null, - "value": "Self-delete" - }, - { - "confidence": "unconfirmed", - "description": "The binary can update itself.", - "first_seen": null, - "last_seen": null, - "value": "Self-update" - }, - { - "confidence": "unconfirmed", - "description": "Capable of changing or setting the session wallpaper or desktop background.", - "first_seen": null, - "last_seen": null, - "value": "Sets Wallpaper" - }, - { - "confidence": "unconfirmed", - "description": "Capable of setting a file attribute.", - "first_seen": null, - "last_seen": null, - "value": "Sets file attribute" - }, - { - "confidence": "unconfirmed", - "description": "The binary can limit execution during specified period of time, such as only during weekdays and likely work hours. This capability is distinct from sleeping for a set period of time.", - "first_seen": null, - "last_seen": null, - "value": "Sleep Time Execution" - }, - { - "confidence": "unconfirmed", - "description": "Capable of starting a service or daemon.", - "first_seen": null, - "last_seen": null, - "value": "Start a service" - }, - { - "confidence": "unconfirmed", - "description": "Capable of stopping a service or daemon.", - "first_seen": null, - "last_seen": null, - "value": "Stop a service" - }, - { - "confidence": "unconfirmed", - "description": "Capable of Windows eventlog tampering.", - "first_seen": null, - "last_seen": null, - "value": "Tampers with Windows eventlog" - }, - { - "confidence": "unconfirmed", - "description": "Capable of killing a running process.", - "first_seen": null, - "last_seen": null, - "value": "Terminates processes" - }, - { - "confidence": "unconfirmed", - "description": "Capabilities associated with the linear congruential generator (LCG) algorithm in Delphi.", - "first_seen": null, - "last_seen": null, - "value": "Uses Linear Congruential Generator (LCG) algorithm in Delphi" - }, - { - "confidence": "unconfirmed", - "description": "Capable of using Windows Management Instrumentation APIs to execute an arbitrary command.", - "first_seen": null, - "last_seen": null, - "value": "Uses WMI to execute a command" - }, - { - "confidence": "unconfirmed", - "description": "Can decompress content using the apLib compression library. May refer to decompression used for data, files, or as part of network communications.", - "first_seen": null, - "last_seen": null, - "value": "Uses apLib decompression" - }, - { - "confidence": "unconfirmed", - "description": "Capable of obtaining configuration data (including C2 locations) from data that is hard-coded within the binary.", - "first_seen": null, - "last_seen": null, - "value": "Uses hard-coded configuration data" - }, - { - "confidence": "unconfirmed", - "description": "Capabilities associated with the Windows registry. \"Parent\" aspect used to contain specific sub-aspects.", - "first_seen": null, - "last_seen": null, - "value": "Windows registry capabilities" - }, - { - "confidence": "unconfirmed", - "description": "Capable of overwriting or wiping log data, either selected log entries or entire logs.", - "first_seen": null, - "last_seen": null, - "value": "Wipes or overwrites logs" - }, - { - "confidence": "unconfirmed", - "description": "Capable of writing to addresses in memory.", - "first_seen": null, - "last_seen": null, - "value": "Writes memory" - }, - { - "confidence": "unconfirmed", - "description": "Can write to log files on a victim system.", - "first_seen": null, - "last_seen": null, - "value": "Writes to log files" - } - ], - "detection_names": [ - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Win.Ransomware.LockBitCombined-9375766-1 (ClamAV)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Ransomware.MSIL.Lkbit.FEC2 (Trellix)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "FE_Ransomware_Win_Generic_10 (Trellix)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "ET TROJAN VMProtect Packed Binary Inbound via HTTP - Likely Hostile (ET OPEN)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Trojan-Ransom/Win32.wanna.xn (Palo Alto Networks)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "FE_Virus_Win32_Neshta_1.FEC2 (Trellix)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "MALWARE-OTHER Win.Ransomware.LockBit ransomware download attempt (Talos)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Win.Trojan.Obfus-43 (ClamAV)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "ET POLICY HTTP Request on Unusual Port Possibly Hostile (ET OPEN)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Virus/Win32.WGeneric.bkcxlt (Palo Alto Networks)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Ransomware.Win32.LOCKBIT.FEC2 (Trellix)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "ET INFO Executable Download from dotted-quad Host (ET OPEN)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Malware/Win32.msilinj.dsw (Palo Alto Networks)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "MALWARE-OTHER Windows Management Instrumentation manipulation attempt (Talos)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Malware/Win32.msilinj.dsj (Palo Alto Networks)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "trojan/Win32 EXE.lokibot.br (Palo Alto Networks)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "trojan/Win32 EXE.encoder.ua (Palo Alto Networks)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "(http_inspect) unknown Content-Encoding used (Cisco Firepower)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "ET TROJAN UPX compressed file download possible malware (ET OPEN)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "trojan/Win32 EXE.bscope.bzy (Palo Alto Networks)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Virus.Win32.Neshta.FEC2 (Trellix)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "FE_Ransomware_Win32_LOCKBIT_1 (Trellix)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "FE_Ransomware_Win_LOCKBIT_1 (Trellix)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Win.Ransomware.Lockbit-9886605-0 (ClamAV)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "ET POLICY PE EXE or DLL Windows file download HTTP (ET OPEN)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "FE_Ransomware_Win_Generic_8 (Trellix)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "FILE-EXECUTABLE Portable Executable binary file magic detected (Cisco Firepower)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Ransomware.Win.LOCKBIT.MVX.FEC2 (Trellix)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "FE_Ransomware_Win32_LOCKBIT_2 (Trellix)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "ransomware/Win32 EXE.wanna.xj (Palo Alto Networks)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "ET TROJAN Single char EXE direct download likely trojan (multiple families) (ET OPEN)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "FE_Ransomware_Win32_LOCKBIT_1.FEC2 (Trellix)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "FE_Virus_Win32_Neshta_1 (Trellix)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "ET CURRENT_EVENTS Terse alphanumeric executable downloader high likelihood of being hostile (ET OPEN)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Win.Ransomware.Lockbit-7724445-0 (ClamAV)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Ransomware.MSIL.Lockbit.FEC2 (Trellix)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "ET INFO Packed Executable Download (ET OPEN)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Win.Trojan.Neshuta-1 (ClamAV)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "FE_HackTool_Win_UACMEBypass43_1 (Trellix)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "FE_Trojan_Win_Generic_159 (Trellix)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Virus/Win32.WGeneric.bifqnm (Palo Alto Networks)" - }, - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "ET INFO SUSPICIOUS Dotted Quad Host MZ Response (ET OPEN)" - } - ], - "first_seen_details": [], - "last_seen_details": [ - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "2024-10-11T19:14:35Z" - } - ], - "malware_roles": [ - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Ransomware" - } - ], - "operating_systems": [ - { - "confidence": "unconfirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Windows" - } - ], - "source_regions_hierarchy": [], - "tags_details": [], - "targeted_industries_tree": [ - { - "confidence": "confirmed", - "description": null, - "first_seen": null, - "industry": null, - "industry_group": "Aerospace & Defense", - "last_seen": null, - "source": null - }, - { - "confidence": "confirmed", - "description": null, - "first_seen": null, - "industry": null, - "industry_group": "Automotive", - "last_seen": null, - "source": null - }, - { - "confidence": "confirmed", - "description": null, - "first_seen": null, - "industry": null, - "industry_group": "Construction & Engineering", - "last_seen": null, - "source": null - }, - { - "confidence": "confirmed", - "description": null, - "first_seen": null, - "industry": null, - "industry_group": "Education", - "last_seen": null, - "source": null - }, - { - "confidence": "confirmed", - "description": null, - "first_seen": null, - "industry": null, - "industry_group": "Energy & Utilities", - "last_seen": null, - "source": null - }, - { - "confidence": "confirmed", - "description": null, - "first_seen": null, - "industry": null, - "industry_group": "Financial Services", - "last_seen": null, - "source": null - }, - { - "confidence": "confirmed", - "description": null, - "first_seen": null, - "industry": null, - "industry_group": "Government", - "last_seen": null, - "source": null - }, - { - "confidence": "confirmed", - "description": null, - "first_seen": null, - "industry": null, - "industry_group": "Healthcare", - "last_seen": null, - "source": null - }, - { - "confidence": "confirmed", - "description": null, - "first_seen": null, - "industry": null, - "industry_group": "Hospitality", - "last_seen": null, - "source": null - }, - { - "confidence": "confirmed", - "description": null, - "first_seen": null, - "industry": null, - "industry_group": "Insurance", - "last_seen": null, - "source": null - }, - { - "confidence": "confirmed", - "description": null, - "first_seen": null, - "industry": null, - "industry_group": "Legal & Professional Services", - "last_seen": null, - "source": null - }, - { - "confidence": "confirmed", - "description": null, - "first_seen": null, - "industry": null, - "industry_group": "Manufacturing", - "last_seen": null, - "source": null - }, - { - "confidence": "confirmed", - "description": null, - "first_seen": null, - "industry": null, - "industry_group": "Retail", - "last_seen": null, - "source": null - }, - { - "confidence": "confirmed", - "description": null, - "first_seen": null, - "industry": null, - "industry_group": "Technology", - "last_seen": null, - "source": null - }, - { - "confidence": "confirmed", - "description": null, - "first_seen": null, - "industry": null, - "industry_group": "Telecommunications", - "last_seen": null, - "source": null - }, - { - "confidence": "confirmed", - "description": null, - "first_seen": null, - "industry": null, - "industry_group": "Transportation", - "last_seen": null, - "source": null - } - ], - "targeted_regions_hierarchy": [] - }, - "context_attributes": { - "shared_with_me": false, - "role": "viewer" - } - } -} \ No newline at end of file +{ + "request_info": { + "endpoint": "https://www.virustotal.com/api/v3/collections/malware--5f707471-9b6d-6d47-bf1e-31ccb6f3ffb6", + "query_params": {}, + "entity_type": "malware_families", + "method": "GET" + }, + "response": { + "id": "malware--5f707471-9b6d-6d47-bf1e-31ccb6f3ffb6", + "type": "collection", + "links": { + "self": "https://www.virustotal.com/api/v3/collections/malware--5f707471-9b6d-6d47-bf1e-31ccb6f3ffb6" + }, + "attributes": { + "name": "DOLORVAULT", + "collection_type": "malware-family", + "creation_date": 1715634479, + "last_modification_date": 1747919783, + "description": "DOLORVAULT is a ransomware written in Go that encrypts files stored locally and on network shares. DOLORVAULT can also identify additional systems on a network and propagate via SMB. Prior to encrypting files, DOLORVAULT clears event logs, deletes volume shadow copies, and terminates processes and services that may impact its ability to encrypt files. DOLORVAULT has been observed using the file extension \".dolorvault\" for encrypted files.", + "status": "COMPUTED", + "private": true, + "origin": "Lorem Ipsum Threat Intelligence", + "recent_activity_relative_change": 0.2512965582272513, + "recent_activity_summary": [ + 45, 78, 241, 186, 235, 143, 130, 248, 193, 238, 239, 221, 266, 191 + ], + "top_icon_md5": [ + "f32f014fff891c902477768dbcee072f9", + "4c47bf432de6628f0d30ff428055ff3ef", + "e9d9c7cec7643163b6eb0d3c2ff08eab" + ], + "counters": { + "attack_techniques": 82, + "domains": 32, + "files": 263, + "iocs": 323, + "ip_addresses": 0, + "subscribers": 10, + "urls": 28 + }, + "aggregations": {}, + "alt_names_details": [], + "capabilities": [], + "detection_names": [], + "first_seen_details": [], + "last_seen_details": [ + { + "confidence": "unconfirmed", + "description": null, + "first_seen": null, + "last_seen": null, + "value": "2024-11-12T20:15:36Z" + } + ], + "malware_roles": [ + { + "confidence": "unconfirmed", + "description": null, + "first_seen": null, + "last_seen": null, + "value": "Ransomware" + } + ], + "operating_systems": [ + { + "confidence": "unconfirmed", + "description": null, + "first_seen": null, + "last_seen": null, + "value": "Windows" + } + ], + "source_regions_hierarchy": [], + "tags_details": [], + "targeted_industries_tree": [ + { + "confidence": "confirmed", + "description": null, + "first_seen": null, + "industry": null, + "industry_group": "Aerospace & Defense", + "last_seen": null, + "source": null + }, + { + "confidence": "confirmed", + "description": null, + "first_seen": null, + "industry": null, + "industry_group": "Automotive", + "last_seen": null, + "source": null + }, + { + "confidence": "confirmed", + "description": null, + "first_seen": null, + "industry": null, + "industry_group": "Construction & Engineering", + "last_seen": null, + "source": null + }, + { + "confidence": "confirmed", + "description": null, + "first_seen": null, + "industry": null, + "industry_group": "Education", + "last_seen": null, + "source": null + }, + { + "confidence": "confirmed", + "description": null, + "first_seen": null, + "industry": null, + "industry_group": "Energy & Utilities", + "last_seen": null, + "source": null + }, + { + "confidence": "confirmed", + "description": null, + "first_seen": null, + "industry": null, + "industry_group": "Financial Services", + "last_seen": null, + "source": null + }, + { + "confidence": "confirmed", + "description": null, + "first_seen": null, + "industry": null, + "industry_group": "Government", + "last_seen": null, + "source": null + }, + { + "confidence": "confirmed", + "description": null, + "first_seen": null, + "industry": null, + "industry_group": "Healthcare", + "last_seen": null, + "source": null + }, + { + "confidence": "confirmed", + "description": null, + "first_seen": null, + "industry": null, + "industry_group": "Hospitality", + "last_seen": null, + "source": null + }, + { + "confidence": "confirmed", + "description": null, + "first_seen": null, + "industry": null, + "industry_group": "Insurance", + "last_seen": null, + "source": null + }, + { + "confidence": "confirmed", + "description": null, + "first_seen": null, + "industry": null, + "industry_group": "Legal & Professional Services", + "last_seen": null, + "source": null + }, + { + "confidence": "confirmed", + "description": null, + "first_seen": null, + "industry": null, + "industry_group": "Manufacturing", + "last_seen": null, + "source": null + }, + { + "confidence": "confirmed", + "description": null, + "first_seen": null, + "industry": null, + "industry_group": "Retail", + "last_seen": null, + "source": null + }, + { + "confidence": "confirmed", + "description": null, + "first_seen": null, + "industry": null, + "industry_group": "Technology", + "last_seen": null, + "source": null + }, + { + "confidence": "confirmed", + "description": null, + "first_seen": null, + "industry": null, + "industry_group": "Telecommunications", + "last_seen": null, + "source": null + }, + { + "confidence": "confirmed", + "description": null, + "first_seen": null, + "industry": null, + "industry_group": "Transportation", + "last_seen": null, + "source": null + } + ], + "targeted_regions_hierarchy": [] + }, + "context_attributes": { + "shared_with_me": false, + "role": "viewer" + } + } +} diff --git a/external-import/google-ti-feeds/tests/custom/debug_responses/relationships_1ddd1f2c4809b46a.json b/external-import/google-ti-feeds/tests/custom/debug_responses/relationships_1ddd1f2c4809b46a.json index 8715f7ceccb..6c243b8ef25 100644 --- a/external-import/google-ti-feeds/tests/custom/debug_responses/relationships_1ddd1f2c4809b46a.json +++ b/external-import/google-ti-feeds/tests/custom/debug_responses/relationships_1ddd1f2c4809b46a.json @@ -1,6 +1,6 @@ { "request_info": { - "endpoint": "https://www.virustotal.com/api/v3/collections/report--24-10020775/relationships/threat_actors", + "endpoint": "https://www.virustotal.com/api/v3/collections/report--25-20031886/relationships/threat_actors", "query_params": {}, "entity_type": "relationships", "method": "GET" @@ -8,7 +8,7 @@ "response": [ { "type": "collection", - "id": "threat-actor--562df3e6-c6c7-526f-800e-b633c189d75c" + "id": "threat-actor--673ef4f7-d7d8-637f-911f-c744d29ae86d" } ] } diff --git a/external-import/google-ti-feeds/tests/custom/debug_responses/reports_1db15afcd82769e5.json b/external-import/google-ti-feeds/tests/custom/debug_responses/reports_1db15afcd82769e5.json index 212dafd88fb..090b5f0ba07 100644 --- a/external-import/google-ti-feeds/tests/custom/debug_responses/reports_1db15afcd82769e5.json +++ b/external-import/google-ti-feeds/tests/custom/debug_responses/reports_1db15afcd82769e5.json @@ -1,26 +1,26 @@ { "request_info": { - "endpoint": "https://www.virustotal.com/api/v3/collections/report--24-10020775", + "endpoint": "https://www.virustotal.com/api/v3/collections/report--25-20031886", "query_params": {}, "entity_type": "reports", "method": "GET" }, "response": { - "id": "report--24-10020775", + "id": "report--25-20031886", "type": "collection", "links": { - "self": "https://www.virustotal.com/api/v3/collections/report--24-10020775", + "self": "https://www.virustotal.com/api/v3/collections/report--25-20031886", "next": null }, "attributes": { - "report_id": "24-10020775", - "name": "Cyber Physical Threat Actor Spotlight: Hunt3rKill3rs", + "report_id": "25-20031886", + "name": "Cyber Physical Threat Actor Spotlight: D0l0rIps4m", "author": "", "collection_type": "report", - "creation_date": 1720728301, - "last_modification_date": 1720728301, - "content": "

Hunt3rKill3rs is a hacktivist threat group actively targeting and compromising internet-accessible operational technology (OT) devices across various industries and countries. They gain unauthorized access to OT devices directly via the browser (HTTP) and/or through remote services, likely by exploiting weak or default credentials. With this access they alter device configurations, including changing passwords, creating new users, and manipulating human-machine interface (HMI) controls. They also deface compromised devices by changing text fields and creating users with their group's name or political messaging. Their operations span multiple countries, including European nations, Israel, and the United States. We assess this group poses a moderate risk to OT assets due to their explicit targeting of OT and limited capabilities that we have so far seen demonstrated against what are probably improperly secured and internet-accessible OT assets.

  • We have observed Hunt3rKill3rs' claims of accessing and manipulating OT assets since mid-2024. To date, their claims are normally posted to their Telegram channel (https://t.me/Hunt3rkill3rs1) and include politically motivated messaging and screenshots showing a threat actor interacting with HMIs, programmable logic controllers (PLC), IP cameras, and a variety of other internet-exposed devices. The posts often contain a mixture of both Russian and English language.

  • The interactions with the devices are frequently haphazard; the operator appears to be discovering the control panel in real time as they make mistakes changing settings and click buttons just to change the state of various components. The screenshots included in their posts often include configuration details and defacement.

  • Hunt3rKill3rs has conducted this type of operation against water and wastewater systems, building automation, and a variety of miscellaneous ICS/OT oriented devices. The group has unlikely achieved impactful real-world effects, and their claims are often overstated.

Figure 1: Hunt3rKill3rs' OT risk level

OT Threat Activity

We track and assess threat activity impacting OT environments to determine the actor's motivation and capacity to impact control systems and physical processes. See our Operational Technology Cyber Security Incident Ontology (OT-CSIO) for more information on our methodology for assessing OT incidents.\u00a0

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n

Date

Description

6/28/2024

Hunt3rKill3rs claimed to have compromised an HMI used to control a greenhouse likely located in Germany. The actor's Telegram post included multiple screenshots of the HMI's display, and the device's language was set to German.

6/26/2024

Hunt3rKill3rs claimed to have compromised various make/model Bosch IP cameras and likely a Schneider Electric Easergy T200P RTU. The actor's Telegram post included multiple screenshots of configuration details for the RTU and suggests that the device may be located in a French-speaking country based on the included display text. The IP cameras accessed are likely random and not related.

6/24/2024

Hunt3rKill3rs claimed to have compromised an Allen Bradley 1763-L16DWD MicroLogix 1100 programmable logic controller (PLC) in an unknown location. The actor's Telegram post included multiple screenshots of configuration details for the device and suggests that the actor likely changed the device's password.

6/20/2024

Hunt3rKill3rs claimed to have compromised a Schneider Electric Smart Home Light Switch/Socket in Germany. The actor's Telegram post included multiple screenshots of configuration details for a Schneider Electric Merten System M.

6/19/2024

Hunt3rKill3rs claimed to have compromised a Schneider Electric ethernet gateway located in the U.S. The actor's Telegram post included multiple screenshots of configuration details for a Schneider Electric PowerLogic EGX100 ethernet gateway. The actor also defaced the gateway by changing several configuration text fields to and creating new users named \"Hunt3rKill3rs.\"

6/16/2024

Hunt3rKill3rs claimed to have compromised a Schneider Electric power meter in Germany. The actor's Telegram post included multiple screenshots of configuration details for a Schneider Electric PowerLogic ION7650. The actor also defaced the meter by changing several configuration text fields to \"Hunt3rKill3rs.\"

6/10/2024

Hunt3rKill3rs claimed to have access and compromised an Elnet energy meter. The Telegram post includes multiple screenshots of an Elnet MC1 multi-channel power and energy meter LCD display and a defaced image/meter statement containing the text \"Hacked by Hunt3rKill3rs.\"

6/10/2024

Hunt3rKill3rs created multiple Telegram posts claiming to have compromised multiple Moxa devices. The actor shared a number of screenshots displaying Moxa EtherDevice Switch series EDS-518E and system configuration details. The actor is likely creating an EtherDevice switch under the name of Hunt3rKill3rs in the system and also shared additional screenshots of operation modes and network settings. The actor included a list of devices accessed along with credentials created on the system. All three devices included in the post geolocate to the United States.

6/9/2024

Hunt3rKill3rs claimed to have compromised a Unitronics HMI within the country of Israel. The actor shared multiple screenshots of an HMI display containing Hebrew language along with the name Reservoir Givat Oz (translated). The images detail associated pumps, malfunction overloads, engine overheating, low pressure, and a regulator in ready mode. The actor included two IP addresses that both geolocate to Israel, claiming to be related to their message.

6/7/2024

Hunt3rKill3rs claimed to have targeted multiple devices belonging to countries that support NATO and Israel. The Telegram post includes several screenshots of varying device types and vendors including but not limited to: a Beralam b700, a SpiderControl SCADA web licensing server, a Strip Panels emissions and energy systems display\u2014possibly located in the City of Beverly Hills in the U.S.\u2014and several unidentifiable devices.

6/6/2024

Hunt3rKill3rs shared multiple screenshots of Unitronics and Siemens PLC and HMI systems belonging to unknown targets in Sweden. The images shown include boiler, radiator, and alarm system HMI displays and a Siemens SIMATIC 1200 PLC web display. The actor also claims to have targeted a large number of Mobotix cameras installed across Sweden.

6/1/2024

Hunt3rKill3rs claimed to have targeted multiple water supply systems using Unitronics products/equipment and other devices. The actor shared multiple screenshots from the victims' devices. Visible names include Anderson StormWater Treatment, Municipality of Saint-Fabien-De-Panet, Lake Down Sub-Basin, and Apex Energies. Devices include an Unitronics V570 HMI, likely a smart meter, a Turck Cloud Portal display, and various unidentifiable devices. The actor also included images detailing configuration changes and defacements in text fields.

5/23/2024

Hunt3rKill3rs claim to have accessed and manipulated a Siemens PLC product, SIMATIC S7 CP. Additionally, the actors posted screenshots of devices accessed, including but not limited to: Siemens SIMATIC S7 CP, Cisco SPA504G, and 750-880 WAGO PLC. In a separate post the group claims access to Unitronics PLCs and shares a number of screenshots showing PLC data and images containing French language. One of the images again shows \"lavagepro.com,\" which was previously referenced within another claim in May 15, 2024, by the group. We suspect the actor is scanning for internet-accessible OT with remote services enabled.

5/15/2024

Hunt3rKill3rs claims to have accessed and manipulated multiple internet-accessible OT devices in Europe and Israel. The actor posted screenshots of additional devices accessed, including but not limited to: Unitronics PLC, Siemens S7-1500/1200, Mobotix cameras, and Schneider Electric PowerLogic ION7650. In many of the screenshots, the actor shows the changes made to the device and in some images, suspected manipulation of the HMI controls.\u00a0

\n

Table 1: Hunt3rKill3rs activity against OT

Critical Infrastructure Industry Targeting

We track threat activity against industrial and critical infrastructure industries as a warning indicator to identify threat actors who may show a potential interest in targeting OT environments. We have observed Hunt3rKill3rs claim to affect OT assets in a few of these industries.

  • Energy & Utilities

  • Water and Wastewater Treatment

  • Building Automation

  • Internet of Things (IoT)

Malware and Tools

We track malware and tool capabilities that pose a heightened risk to OT environments, such as OT-oriented capabilities, disruptive and destructive functionality, worm-like features, and supply chain trojans. We have not seen evidence of Hunt3rKill3rs using any malware or toolsets.

Appendix: MITRE ATT&CK for ICS Mapping

Initial Access

Initial access consists of techniques that adversaries may use as entry vectors to gain an initial foothold within an ICS environment.\u00a0

  • T0883: Internet Accessible Device

  • T0822: External Remote Services

Execution

Execution consists of techniques that result in adversary-controlled code running on a local or remote system, device, or other asset.\u00a0

  • T0823: Graphical User Interface

Persistence

Persistence consists of techniques that adversaries use to maintain access to ICS systems and devices across restarts, changed credentials, and other interruptions that could cut off their access. We have not observed Hunt3rKill3rs employ techniques defined in this tactic.

Privilege Escalation

Privilege Escalation consists of techniques that adversaries use to gain higher-level permissions on a system or network. We have not observed Hunt3rKill3rs employ techniques defined in this tactic.

Evasion

Evasion consists of techniques that adversaries use to avoid detection by both human operators and technical defenses throughout their compromise. We have not observed Hunt3rKill3rs employ techniques defined in this tactic.

Discovery

Discovery consists of techniques that adversaries use to survey your ICS environment and gain knowledge about the internal network, control system devices, and how their processes interact. We have not observed Hunt3rKill3rs employ techniques defined in this tactic.

Lateral Movement

Lateral movement consists of techniques that adversaries use to enter and control remote systems on a network. We have not observed Hunt3rKill3rs employ techniques defined in this tactic.

Collection\u00a0

Collection consists of techniques adversaries use to gather domain knowledge and obtain contextual feedback in an ICS environment.

  • T0852: Screen Capture

Command and Control

Command and control consists of techniques that adversaries use to communicate with and send commands to compromised systems, devices, controllers, and platforms with specialized applications used in ICS environments. We have not observed Hunt3rKill3rs employ techniques defined in this tactic.

Inhibit Response Function

Inhibit Response Function consists of techniques that adversaries use to hinder the safeguards put in place for processes and products. We have not observed Hunt3rKill3rs employ techniques defined in this tactic.

Impair Process Control

Impair Process Control consists of techniques that adversaries use to disrupt control logic and cause detrimental effects to processes being controlled in the target environment.\u00a0

  • T0836: Modify Parameter

Impact

Impact consists of techniques that adversaries use to disrupt, compromise, destroy, and manipulate the integrity and availability of control system operations, processes, devices, and data.\u00a0

  • T0831: Manipulation of Control

", - "executive_summary": "

  • This report is part of the Cyber Physical Threat Actor Spotlight series, which provides targeted overviews of actors that Mandiant believes pose heightened risk to operational technology (OT) environments.

  • Hunt3rKill3rs is a hacktivist threat actor that Mandiant has tracked since mid-2024. The group poses a moderate risk to OT environments due to their explicit targeting of and ability to access and manipulate internet-accessible OT assets.

", + "creation_date": 1721837412, + "last_modification_date": 1721837412, + "content": "

D0l0rIps4m is a hacktivist threat group actively targeting and compromising internet-accessible operational technology (OT) devices across various industries and countries. They gain unauthorized access to OT devices directly via the browser (HTTP) and/or through remote services, likely by exploiting weak or default credentials. With this access they alter device configurations, including changing passwords, creating new users, and manipulating human-machine interface (HMI) controls. They also deface compromised devices by changing text fields and creating users with their group's name or political messaging. Their operations span multiple countries, including Eastern European nations, Israel, and the United States. We assess this group poses a moderate risk to OT assets due to their explicit targeting of OT and limited capabilities that we have so far seen demonstrated against what are probably improperly secured and internet-accessible OT assets.

  • We have observed D0l0rIps4m's claims of accessing and manipulating OT assets since mid-2024. To date, their claims are normally posted to their Telegram channel (https://t.me/D0l0rIps4m1) and include politically motivated messaging and screenshots showing a threat actor interacting with HMIs, programmable logic controllers (PLC), IP cameras, and a variety of other internet-exposed devices. The posts often contain a mixture of both Russian and English language.

  • The interactions with the devices are frequently haphazard; the operator appears to be discovering the control panel in real time as they make mistakes changing settings and click buttons just to change the state of various components. The screenshots included in their posts often include configuration details and defacement.

  • D0l0rIps4m has conducted this type of operation against water and wastewater systems, building automation, and a variety of miscellaneous ICS/OT oriented devices. The group appears to select targets based on internet exposure rather than specific geopolitical targeting.

", + "executive_summary": "

  • This report is part of the Cyber Physical Threat Actor Spotlight series, which provides targeted overviews of actors that Lorem Ipsum believes pose heightened risk to operational technology (OT) environments.

  • D0l0rIps4m is a hacktivist threat actor that Lorem Ipsum has tracked since mid-2024. The group poses a moderate risk to OT environments due to their explicit targeting of and ability to access and manipulate internet-accessible OT assets.

", "autogenerated_summary": "The campaign targeted internet-accessible operational technology (OT) devices across various industries and countries. Attackers gained unauthorized access via HTTP and remote services, altering device configurations, creating new users, and defacing devices with political messaging. Compromised devices included HMIs, PLCs, IP cameras, and other ICS/OT devices. The attackers modified device parameters and manipulated HMI controls. No malware was used.\n", "analyst_comment": "", "report_type": "Actor Profile", @@ -29,7 +29,7 @@ "link": null, "version": 1, "private": true, - "origin": "Google Threat Intelligence", + "origin": "Lorem Ipsum Threat Intelligence", "affected_systems": [ "Users/Application and Software", "Enterprise/Application Layer", @@ -83,8 +83,8 @@ "source_regions_hierarchy": [ { "confidence": "possible", - "country": "Russian Federation", - "country_iso2": "RU", + "country": "Belarus", + "country_iso2": "BY", "description": null, "first_seen": null, "last_seen": null, diff --git a/external-import/google-ti-feeds/tests/custom/debug_responses/threat_actors_000ea298d290dbef.json b/external-import/google-ti-feeds/tests/custom/debug_responses/threat_actors_000ea298d290dbef.json index e10d8e67d6e..c8751fd0f0b 100644 --- a/external-import/google-ti-feeds/tests/custom/debug_responses/threat_actors_000ea298d290dbef.json +++ b/external-import/google-ti-feeds/tests/custom/debug_responses/threat_actors_000ea298d290dbef.json @@ -1,36042 +1,508 @@ -{ - "request_info": { - "endpoint": "https://www.virustotal.com/api/v3/collections/threat-actor--9382a805-c571-55b4-be0e-327e9ea0c287", - "query_params": {}, - "entity_type": "threat_actors", - "method": "GET" - }, - "response": { - "id": "threat-actor--9382a805-c571-55b4-be0e-327e9ea0c287", - "type": "collection", - "links": { - "self": "https://www.virustotal.com/api/v3/collections/threat-actor--9382a805-c571-55b4-be0e-327e9ea0c287" - }, - "attributes": { - "name": "UNC1069", - "collection_type": "threat-actor", - "creation_date": 1523610012, - "last_modification_date": 1748919812, - "description": "UNC1069 is a suspected North Korean financial crime group, which may be related to APT38 with low confidence. UNC1069 has targeted a variety of financial services firms and cryptocurrency exchanges. UNC1069 commonly uses spearphishing that leads to a LONEJOGGER shortcut file, which can lead to UNC1069's non-public implants such as LONERUNNER, WHITEHAUL, or POWERHOUSE. UNC1069 has been active since at least 2018.", - "status": "COMPUTED", - "private": true, - "origin": "Google Threat Intelligence", - "recent_activity_relative_change": 1.9457420050305427, - "recent_activity_summary": [ - 59, - 316, - 540, - 507, - 951, - 709, - 469, - 779, - 549, - 831, - 656, - 694, - 746, - 392 - ], - "top_icon_md5": [ - "bb8dda782cb853ef71ac5ca2884d83e1", - "5f2f851c5be5527f9c29ee0c9db1bd18", - "3565ac5b0aa3ef8ef171bc6eed76a133" - ], - "counters": { - "attack_techniques": 146, - "domains": 2670, - "files": 709, - "iocs": 4776, - "ip_addresses": 214, - "subscribers": 13, - "urls": 1183 - }, - "aggregations": { - "domains": { - "attributions": [ - { - "value": "lonejogger", - "count": 60, - "total_related": 62, - "prevalence": 0.967741935483871 - }, - { - "value": "covertcatch", - "count": 3, - "total_related": 6, - "prevalence": 0.5 - }, - { - "value": "flatdirt", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "powerdown", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "rustbucket", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "todoswift", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "hiddenagent", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "lonerunner", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "shortfawn", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "tallcoral", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - } - ], - "communicating_files": [ - { - "value": "b4fda30ad9b618c0bf53c984b4a9d15b40e02b67b252bd437748b91a92baaa06", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "e02390851dbd552f4279c44f396402af47808e6702dce29cfb6d3421f2af0ccd", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "a8cc70bcd0ef98e3eea54f953166f518a2cf1d898e4eb9e85cf70861f8ec7578", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "178a81904017a5b53f378821225ee5d6e436834b1e9e4c9f0ce50805ac36ca37", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "51d53ca36a662b4aad5878987548f0f22f2a53545790577d8043373b6bf7eb75", - "count": 3, - "total_related": 6, - "prevalence": 0.5 - }, - { - "value": "1d29dd1043a7368664abe71761a8222cd7aeab83a9bac787bb3818cbb5c6d6dd", - "count": 3, - "total_related": 9, - "prevalence": 0.3333333333333333 - }, - { - "value": "20479e443d1754961f6a0096bab20522845c628d2f16f9134373387b7d6d953d", - "count": 3, - "total_related": 9, - "prevalence": 0.3333333333333333 - }, - { - "value": "a277c4403c46a1894daae4b90bed893e8b2281fe938a2cbcdaa09bbd2ec20d94", - "count": 3, - "total_related": 9, - "prevalence": 0.3333333333333333 - }, - { - "value": "c31cbb849b8562a7c2801724c2a03369be7b459ff789c451e432844da5d47101", - "count": 3, - "total_related": 9, - "prevalence": 0.3333333333333333 - }, - { - "value": "eb913458d3d659ed9feed0e88bbfa2f10a86fac3e39a2c0f096916d21b6aa7d5", - "count": 3, - "total_related": 9, - "prevalence": 0.3333333333333333 - }, - { - "value": "6db3439c1c1b3b88cce4095b1890a60626e9732413028cfe1c9f249929dab25b", - "count": 3, - "total_related": 16, - "prevalence": 0.1875 - }, - { - "value": "44ee3551f27314a1f2b97d15988dfbc1af65ae494af92f15271929fdfc30ea29", - "count": 3, - "total_related": 17, - "prevalence": 0.17647058823529413 - }, - { - "value": "e9894893a8a1f74d7d6a8768dda9ef5ddaf8aac18634a1110e9a79652c9f13ee", - "count": 3, - "total_related": 18, - "prevalence": 0.16666666666666666 - }, - { - "value": "026285f0d28897ce8f5c980ee326d9a379a5170bf4083b2ea670d434e591d921", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "1411c8f084179eb44bb14a24859a190945cea5c723c3e01f742a0885d8cb97d2", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "184fba6160521bd8c345d327e42ad2804dca419edec5657a859be78b82c1d98b", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "1fba098a58f8326c59b39045c3f07a1adce1bbfa23225e240e0f6fc5a2b2605d", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "208bbf9e939b0fb9ac9551ba2c51d93ab8d8ea6723e93ceae5ce6c36309c400d", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "31638e7ea1b7f0b9829656c15956b83d8397270ca51706c5a4e1cfd1f3e4892e", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "3734cf8e76683834f2bdf863670262cd36b01cb140f8fc42d143c10d9a2c4023", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "39db73a999d58072dab20d1e6f3a0a9336f4e58e164fb42c6de83a8cc75b2555", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "4906c6294ac0d3510b0a89d840f11dbcfe6dadcf708feefbaa7f7ed2a4deb5d6", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "50320e2cff68bdcfa114879334804e3300433908c18a662ed2c37705d2852bac", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "51adde173872ba7378019324aca46e17e222d7b093518df6ad9d330324e113b2", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "52b2b9f5bad69e3d4acf348d4dcfc71e9bdd882ba94711fa9f202fc78e0390f7", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "57099b79a9824765f8be07471ec33c4cc0799abd877637a2a85affc50e163b1b", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "5ca7c871dfe24b27b5cf7e9bf087f44c7620d78a1d4fa76373f22abedbdf8f82", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "69cf309f71c3240525d00a14be5d0390c99313e24b0b6fef1d034f90c69cdd3d", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "6a1ad59d8b27d49ca1b55f1ec270f502d86da5a73e2ccfe0f32128cf7d050678", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "01184a5acb8b3ec56c9e90f2e6cd6673ae83b4fd6982e17329b33da2f77bcf5b", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "03cd4ec3defa490e68b1ca2efaf8daea6f89d3cceed51c91f4c4f9e2222d258d", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "105f7c94212cd6d4f94d5889bcc6468f448e9b1ea5f5f051809a4277f816e6ea", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "1454e53a6ffe2182be96391fb6f2cb5783142e2e0e03f26abab027e9c296088e", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "292207998d2aced2a7d8dcbbb43a5fded2f5a27cf590f43c0eb800341b237fce", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "2b3fb6bda062f520155d55603e723ea927cfe6367fcc2eb67aa317790f86704e", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "3eef99e47c53edcca574b3ca684be958ac5c1867c218f0711b66bd01623e48b6", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "48d10ac01187012d1965b8e99f554f78df51c080f604b130b0818337d26df5c7", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "4c4cc3abd3ddb15d5306fb647c6d779b18df5b949673bb3f3f87faa2c5f56a6a", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "4c574c1a2b126c8a5ba1ef9560516d0ac9990c0253119f874eb084b57742e3d7", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "6661dd022dc539fe648ea48b0ccfbc7deac7ceba49f8a80e6f2e5cfe0e5fc6fe", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "0937cbb980cb898eacd8458366fc4de3510266b8fbcd68010aa04e58bf72df28", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "20abd93a1c949874ca930d270c2fe1a4dffd8fa7d2a3056111c35723999d0078", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "26e376fc80b090b2ee04e7d3104d308a150e58538580109a74f4ac49bf362423", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "422384d25aa351a4eb6871ea50c3c96e83ec6f8ffdb3129adc5a4cf1b198c5c9", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "576d1688f744a9f6ae4c1fb4cec1cda3daecabf3a13cb3bafabf083c54d1fcb6", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "57959c2be2ac6349aa37edb73cd8a88fe8d3e69678cac4b38fac401bd3141fdf", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "03f6c8f173413302d9c22a44a593fc9a5203fbb7652d3a36b3ace79f3cdc39a3", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "07df3733b75e6e23d2217a6548ed66654793b20a0674b22187e558c3284c0055", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "0b79e1194644431c2e28c48aa3654e658a2907e1003cd0484cd00a0796ebe6bb", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "1b93ae0ea729f6cf0ce33fddbfc163265fd0132a3e452883cc2cdfb3b059d836", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "3402afd799f0fffb4704b5d3f6223086d2d2e23914107f44d21891eea65c0e0b", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "43d6e0a72864f08fd72e0016f7bfc1b3fac1fd49fd382c4bdab8aa74df8d4616", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "161a83344c31ef28bfeb22c336c0331620050cd6a685458976d2faf8d1902c07", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "1e154b2976cc00d457c0dc2b83ebe81911294c8276691617085c03a3304fd87f", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "26e59279588902fe923bf88640d6640ecfd0823684799c783167062280fe1783", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "45c0b6db2c502796429e9a80c13ead3b80f835cd6c7a80b818fbb1c5c0ec3e9c", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "603d21059e14e2ded40170b4ab3ed534c7dd0a0de5ca94d2e364e81b26286652", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "60674602836323647634016774ea123232160c1b4dfcf3fcd2d2c28c652aa00e", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "620a3be1cac81e9e537cc983c726a2d1804ecf384be9ab3f5a4293b82ecc555f", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "0f52e0d8febf08be311010c7273a26a029da473f4942f83573cbbccc84f1b185", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "10d83ed487de6ddbd99011f405006efbd415e24037cfd9c724628decffd5aadd", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "1c451f6ebd58cbe1dee85a0451badd4edc9de58f4fd17d480f53542b9e5e2072", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "1dbf893e2289c5175a12a38c65ad0abec37e60656ac2c2ae4a5eed5a03abdfa8", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "2772bbe0d1e643d0dbf860ee7fc2b24756d1287845ec5d31ef473850da8d6cc6", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "3d79f0886b7586240de217e7cd6902619c6a6c170ded4cb6655361ceaf1bd52f", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "48bd1c5cf9ccc3d454ab80d7284abaf39028a228607d132bfa92ab2ceca47ca2", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "4228efa547d22dcf38c44243e1e468a2ded17d4997b728ebf88c79d12346fca4", - "count": 2, - "total_related": 8, - "prevalence": 0.25 - }, - { - "value": "5f4063e3a5583e62ddec2f84ca88eb97fbcfbee31d9269742ab438f441f0cd58", - "count": 2, - "total_related": 8, - "prevalence": 0.25 - }, - { - "value": "689ea0e58022b86655596c946591a5b99b051f96e5cb0b0fd60dea302bbf91d2", - "count": 2, - "total_related": 8, - "prevalence": 0.25 - }, - { - "value": "6b0a93826b47e2b96fd79f19d02d9be1034958b30ef246ae57612b84c2ff5041", - "count": 2, - "total_related": 8, - "prevalence": 0.25 - }, - { - "value": "26dbe681bfc23d2603d353e538930262ec15e27c2ef1c0db691553896cd27a87", - "count": 2, - "total_related": 9, - "prevalence": 0.2222222222222222 - }, - { - "value": "413c8b5d9156c4b399a180bc395d90a4bb8aa78df35b75241d33e186ea120f0f", - "count": 2, - "total_related": 9, - "prevalence": 0.2222222222222222 - }, - { - "value": "4d53dd46d7e98bc5d7ef4d76f7007032c425b8c463c41937c65c0a537c3dc577", - "count": 2, - "total_related": 9, - "prevalence": 0.2222222222222222 - }, - { - "value": "51eaf8af57211f8d9e534f98413e71f4ddf5abcce806a111fc49a30d3bcec696", - "count": 2, - "total_related": 9, - "prevalence": 0.2222222222222222 - }, - { - "value": "3c9c3177ebf3990a136876169b9a4b9479282e4c203dde3aab99403a971abc01", - "count": 2, - "total_related": 10, - "prevalence": 0.2 - }, - { - "value": "3debe73d29fd2c0a8eca0f701c30870af25986189790322a45a9526f1603d12b", - "count": 2, - "total_related": 10, - "prevalence": 0.2 - }, - { - "value": "44759678842d930ca4251413f185d0a009b2da52dcdd45decf0daed5c78a97e9", - "count": 2, - "total_related": 10, - "prevalence": 0.2 - }, - { - "value": "5115be816d0cd579915d079573bfa384d78ac0bd33cc845b7a83a488b0fc1b99", - "count": 2, - "total_related": 10, - "prevalence": 0.2 - }, - { - "value": "09b83a501b8f919fc4861735097dd50957f21e81209d362b4fa425bd3348a495", - "count": 2, - "total_related": 11, - "prevalence": 0.18181818181818182 - }, - { - "value": "1939d9fdcf831dc4cac001ba193669c75a336258bc99a1775471554229e4a69b", - "count": 2, - "total_related": 11, - "prevalence": 0.18181818181818182 - }, - { - "value": "3315e5a4590e430550a4d85d0caf5f521d421a2966b23416fcfc275a5fd2629a", - "count": 2, - "total_related": 11, - "prevalence": 0.18181818181818182 - }, - { - "value": "53d32b2a44271fd04244354342e9fc495c11df396a055f831f5b69eecae10f73", - "count": 2, - "total_related": 11, - "prevalence": 0.18181818181818182 - }, - { - "value": "66e96fbd6e977ddef3f0a2924978d92e5d67bd96e68dc4832f5041dbd40bcfc9", - "count": 2, - "total_related": 11, - "prevalence": 0.18181818181818182 - }, - { - "value": "1ea8699dc216353ba29c5d3ca7fcbca59c02ca5969a554faf08f8aa0488e6a6f", - "count": 2, - "total_related": 12, - "prevalence": 0.16666666666666666 - }, - { - "value": "26636fb57a98425ddc6401bf7cca2948392dd620393494c2ae4e6adfb0ff6ba4", - "count": 2, - "total_related": 12, - "prevalence": 0.16666666666666666 - }, - { - "value": "27f6c9a0765f8b44bac8edccfe852facb89396d7acb8d39d75b07d1e5bea6522", - "count": 2, - "total_related": 13, - "prevalence": 0.15384615384615385 - }, - { - "value": "290c2e4d0efbed23de0d41d1b821396f5f1003f6f123ee6160d6d5028d01b961", - "count": 2, - "total_related": 13, - "prevalence": 0.15384615384615385 - }, - { - "value": "353f82475fcfad5b3f06ed85a931bda46ec34279793b5d70085aa8c603e8ebec", - "count": 2, - "total_related": 13, - "prevalence": 0.15384615384615385 - }, - { - "value": "3ce003e64e0cfc63ea17b002fa242af25b7fcdc184095f51c3967fb24c5b55f1", - "count": 2, - "total_related": 13, - "prevalence": 0.15384615384615385 - }, - { - "value": "0b8d7a851920d4584777505f9fb484b226a8457d4049885a87c847f7d3532d28", - "count": 2, - "total_related": 16, - "prevalence": 0.125 - }, - { - "value": "3b70c3ebffcfd6a97859f8d9e5a31f6902756e23fd6688ca7c7446d24ec76d9d", - "count": 2, - "total_related": 16, - "prevalence": 0.125 - }, - { - "value": "26a98b752fd8e700776f11bad4169a0670824d5b5b9337f3c8f46fac33bc03e8", - "count": 2, - "total_related": 18, - "prevalence": 0.1111111111111111 - }, - { - "value": "38ed248501bd35cd140f8376ac42e2c5a46ed4ec71cff0cec290fbc93678f323", - "count": 2, - "total_related": 18, - "prevalence": 0.1111111111111111 - }, - { - "value": "52e9361cfec3bc643f5ac715709e1818766e1790c7f83e93e3ee7cc96fd1a473", - "count": 2, - "total_related": 18, - "prevalence": 0.1111111111111111 - }, - { - "value": "2c338055e8245057169f1733846e0490bc4ae117d1dadefe0a3f07a63dc87520", - "count": 2, - "total_related": 20, - "prevalence": 0.1 - }, - { - "value": "2d9d95bed6a6108802fa7c750cb66f2acce7b124f790ba552ec009c4d1d20744", - "count": 2, - "total_related": 21, - "prevalence": 0.09523809523809523 - }, - { - "value": "3242ed0ade7f7084206fdc7fd53e483f4ba5f99fee88aa2514cd3857d81c26c4", - "count": 2, - "total_related": 22, - "prevalence": 0.09090909090909091 - }, - { - "value": "0f73d0269cf77c53a38fb5863258755e3055979a6343d15573ab2222ce75f49b", - "count": 2, - "total_related": 23, - "prevalence": 0.08695652173913043 - }, - { - "value": "390ef5a967d49b60335be8b2761b9de0478338fdf214dd83ecb948e75bb9efa6", - "count": 2, - "total_related": 23, - "prevalence": 0.08695652173913043 - }, - { - "value": "45c0007e4c744c6f9ba43660cc7edb9a2deb27580e160f8a0e56585401ee9ee3", - "count": 2, - "total_related": 24, - "prevalence": 0.08333333333333333 - } - ], - "downloaded_files": [ - { - "value": "56e6968a127729565d6170d784e60bb5c62a392167a7db3b5493fdfe433fd4fc", - "count": 35, - "total_related": 7034, - "prevalence": 0.004975831674722775 - }, - { - "value": "b0c74189186cde3e890a4b8df7236ae75e2f123ada5d734de19296226b43bb9d", - "count": 19, - "total_related": 2240, - "prevalence": 0.008482142857142856 - }, - { - "value": "f02ae208e27a55b6eeaebfb03b2af169aa7b0fcb5c2e24dcd1d61e039771b598", - "count": 12, - "total_related": 95, - "prevalence": 0.12631578947368421 - }, - { - "value": "e1b08ef93178fd96fc2ae4f1998f441bf73b105a3fb62a9bf19dae4d55a2b9b2", - "count": 10, - "total_related": 31, - "prevalence": 0.3225806451612903 - }, - { - "value": "e6725f08abbebbd4b402f6c0b57a1bca9071b3acb3f28502d30b4e01d6e8f883", - "count": 10, - "total_related": 88, - "prevalence": 0.11363636363636363 - }, - { - "value": "a78efa0170269abc055465625747c82b51732bbf3cac05e733e9147543221712", - "count": 10, - "total_related": 3208, - "prevalence": 0.003117206982543641 - }, - { - "value": "464eea1b24ac38a0942476af88b5f368da1917dd96a7ba82189af3ba7b6696cf", - "count": 10, - "total_related": 99522, - "prevalence": 0.00010048029581399087 - }, - { - "value": "4ff8e0531769dd92feddfa3113703868179ad9ce712e217cb4a593bbb866fb84", - "count": 7, - "total_related": 234, - "prevalence": 0.029914529914529916 - }, - { - "value": "92213166b606712b238db29140eaaac87be277b693b020226bd5bc78478838d5", - "count": 7, - "total_related": 2395, - "prevalence": 0.0029227557411273487 - }, - { - "value": "56bdfa4dcec9c4bce6bf00e2566c8c2013d9d5ef34e855d3469f1f675577e454", - "count": 7, - "total_related": 96495, - "prevalence": 7.254261878853827e-05 - }, - { - "value": "cbf1fdfdb7257daf8b0905d94bd04e2829c502c9c01b1d96bb979069e2ebc895", - "count": 6, - "total_related": 72770, - "prevalence": 8.245155970867116e-05 - }, - { - "value": "aebe53d8cd6bd7cb29e0af6cae7df5c1e302d7cab15c714510ce151a5f658590", - "count": 5, - "total_related": 13, - "prevalence": 0.38461538461538464 - }, - { - "value": "4f1987847e23e9c9debb64481372b00fb0194a615154a7f87d2ac992dac70306", - "count": 5, - "total_related": 37, - "prevalence": 0.13513513513513514 - }, - { - "value": "d93d30e04aae04c0f8a867b2b7c349b80fe32e393373d97ab788b61c6967b2ad", - "count": 5, - "total_related": 56, - "prevalence": 0.08928571428571429 - }, - { - "value": "766c1d6bcb81d3e983fb7adbc19c616d7fc01dafb7893738edc242e2adc59c07", - "count": 5, - "total_related": 10206, - "prevalence": 0.0004899078973153047 - }, - { - "value": "ed6f6f2144998175c846a99d2a0faab5bf7b6ace318f0fe2dc4bfeaf4700c1d8", - "count": 5, - "total_related": 16057, - "prevalence": 0.0003113906707355048 - }, - { - "value": "830fffe8677aeda9be80ae4d257e12d121ecf7efab7907b0b945c7f744987f7f", - "count": 4, - "total_related": 8, - "prevalence": 0.5 - }, - { - "value": "37e75280f3ee7801b06a9ea2c72b4463de5c3fa877f08f6aaeed79815128bc8e", - "count": 4, - "total_related": 16, - "prevalence": 0.25 - }, - { - "value": "1f1851ea45175dfd9490310acd822fa980c2d766aa5701e7a44231d686b3bf3f", - "count": 4, - "total_related": 24, - "prevalence": 0.16666666666666666 - }, - { - "value": "7516bd5d7d369209ec02b41dd894c357c00b197c03b05064225ae368d233e287", - "count": 4, - "total_related": 30, - "prevalence": 0.13333333333333333 - }, - { - "value": "01620f6ac7699d02567f69a6a7dd7f5a6061d01e7a54b161eb59db5028e4ed72", - "count": 4, - "total_related": 46, - "prevalence": 0.08695652173913043 - }, - { - "value": "6419f11e727f620019c38b901d0239e077a1820247a3429386c65474e0b6f605", - "count": 4, - "total_related": 61, - "prevalence": 0.06557377049180328 - }, - { - "value": "d84710b27a791fe972243f6e71ba946cb9cf64b19f1fa77f47756703f311fd41", - "count": 4, - "total_related": 9057, - "prevalence": 0.00044164734459534063 - }, - { - "value": "727eedcc4ef4d53c1624c4823deb251842d7f3ffd5ea46111889e46166a0c486", - "count": 3, - "total_related": 9, - "prevalence": 0.3333333333333333 - }, - { - "value": "01e6ec285041d43d097de0683d2b6830c39d7fced0de937786787dd630b1f805", - "count": 3, - "total_related": 12, - "prevalence": 0.25 - }, - { - "value": "0d6360ec76a7ea62ce0744e8dda7adddc7a69584110653aabcaaf01eae171397", - "count": 3, - "total_related": 14, - "prevalence": 0.21428571428571427 - }, - { - "value": "2c042d454d75f422027cd19bb34ff93ca4ede1408b2ea97b547e9b481eb728d4", - "count": 3, - "total_related": 62, - "prevalence": 0.04838709677419355 - }, - { - "value": "1065f1c9d70d2009dd4abe566364ea819577c229b297414a8d6aef43dd86b437", - "count": 3, - "total_related": 198, - "prevalence": 0.015151515151515152 - }, - { - "value": "7f2dc408197f10b0fa70c4331f26e486b4f464edc6b1cb419aec0db8ad312d8e", - "count": 3, - "total_related": 1178, - "prevalence": 0.0025466893039049238 - }, - { - "value": "a4c04448088d12494af1c1ff48dcbc11045f5f4674b681a6177a52e0af696274", - "count": 3, - "total_related": 1887, - "prevalence": 0.001589825119236884 - }, - { - "value": "024d3be4b76fc9ddff19fde9e49cb20423db35a93649f1647784035586a88078", - "count": 3, - "total_related": 8809, - "prevalence": 0.00034056079010103305 - }, - { - "value": "a2b426977f53a1ac7994923a1f6949a4aaa2ba09699f534e1dabe12c668c5cc5", - "count": 3, - "total_related": 9200, - "prevalence": 0.00032608695652173916 - }, - { - "value": "a6010d5853ca87880b30b5074946be0df5e681b89c70984097eea1eb7864456a", - "count": 3, - "total_related": 47397, - "prevalence": 6.329514526235837e-05 - }, - { - "value": "1d08335e65da7cf40d1c4a7ba0088e0f39b9c5a4b2e42de95fc9ffa69fb96c7a", - "count": 3, - "total_related": 80288, - "prevalence": 3.736548425667596e-05 - }, - { - "value": "4ce93e8d60fab67507af3aaa5b48d19bc37587cc7262caf4dcc4191446ce9a4e", - "count": 3, - "total_related": 84212, - "prevalence": 3.562437657340996e-05 - }, - { - "value": "44e6d8dfed01da2a7874ce84034b4eb292fe14ee6b039681eea2f96f766f59bd", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "4647c4470cfb9cddc90fc1e48ac940740a8abe8a65d89a8fbf074e6b96cf0248", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "7ec576551ad5ee13799268abd03099fcacd82259dc1addb967aeba63afe27f33", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "c5add98c6f8b00d35bc4aebd4866432446d925b359bf55439be754052352d034", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "8301707dd89cb32f65f7d1da7f9cd515c657e1331d7a81c44c87f29ba3f86689", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "899b2da752ad50f525e364f0af930dec91a128effbe8bb601803226604038d5b", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "aa57a421fa05df93ee84555a39475e4d3cf82f6cc1308c18b6a0e10e7b16d2d3", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "b0e84ada4fd0df8c00da62a1777a06edfee4f3858cf20412b35867c81d69eab1", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "63a6580d9ee8d5a632886585ab8f7ab59c87d4e2717181c191cac236cd1e1de4", - "count": 2, - "total_related": 19, - "prevalence": 0.10526315789473684 - }, - { - "value": "994e4d9bacbacb4ff7621c7f2b2abf8900994212bb808b08f7b41b1ac29c30e2", - "count": 2, - "total_related": 1218, - "prevalence": 0.0016420361247947454 - }, - { - "value": "3a7059cd6c6b9d3974b0176e362b3ee2d1b3c8789823a6e74cda99ef1f9005a8", - "count": 2, - "total_related": 7279, - "prevalence": 0.0002747630168979255 - }, - { - "value": "a817045517a8251bf6828b39186a33b9bf3a361e767391f205751cf2842c4cc9", - "count": 2, - "total_related": 9027, - "prevalence": 0.00022155754957350172 - }, - { - "value": "c9352ad6c8ebf1c5cb260535abb8ae78eeed7bb43af64f5ec4e1bdde63db4ff8", - "count": 2, - "total_related": 9221, - "prevalence": 0.00021689621516104545 - }, - { - "value": "655d0e76eccf385fbf04e040b68d61bd37f11708cfa0f4a3a686ee72f95f8827", - "count": 2, - "total_related": 11310, - "prevalence": 0.00017683465959328028 - }, - { - "value": "887c8ada6058f01125a5131f1c495ba5f0171b2c40466ea824494403b87c1a22", - "count": 2, - "total_related": 16805, - "prevalence": 0.00011901219875037192 - }, - { - "value": "93b17c163e409ee68cc96f4664d12c6e9bfabc9eec8005ef2849283e8da99a2a", - "count": 2, - "total_related": 19154, - "prevalence": 0.00010441683199331732 - }, - { - "value": "62b8c6a861c29fd530a2bd593137ffcee945bacea4502795cde6a921bb1c87ca", - "count": 2, - "total_related": 19523, - "prevalence": 0.0001024432720381089 - }, - { - "value": "315b5579f75a8f732a18222b87bc50a81b03ce28aee9d7518ecb9288f38a9fdd", - "count": 2, - "total_related": 20887, - "prevalence": 9.575333939771149e-05 - }, - { - "value": "6644226cf0c2bc995d8b42952aea41d279764706b5c982ce7f9afaa9d4198433", - "count": 2, - "total_related": 23711, - "prevalence": 8.434903631226013e-05 - }, - { - "value": "683a93a5837f2b11b00137745a0152451b849b4c99b0771b0eee863a11bea839", - "count": 2, - "total_related": 26934, - "prevalence": 7.425558773297691e-05 - }, - { - "value": "165e370469ed8fcb910f27fe2b95941abd5f9cba99a21ea0c584452b0b3b421d", - "count": 2, - "total_related": 28232, - "prevalence": 7.084159818645509e-05 - }, - { - "value": "512bce7a3c222e34851ec2065ec8e3f1334ed70538a27457dc6504c6994e3df9", - "count": 2, - "total_related": 28419, - "prevalence": 7.037545304197896e-05 - }, - { - "value": "72b33ae9e44e69747b86d7071a258cad8179371dc6378e68e494c3eb69ff78dd", - "count": 2, - "total_related": 32544, - "prevalence": 6.145526057030482e-05 - }, - { - "value": "540d2635707b637dadd95e0eedbb58d4db4062663a06d457be74a41545431e5a", - "count": 2, - "total_related": 51879, - "prevalence": 3.855124424140789e-05 - }, - { - "value": "7b5c1bd8ee01037e269d4a4569d85a8b89f630e7b4994152a1fcd27de6c44370", - "count": 2, - "total_related": 52650, - "prevalence": 3.798670465337132e-05 - }, - { - "value": "7a31b5d52b38dd1008eae91e232774ee5c1ce7b09256f7499c897801d811b7b7", - "count": 2, - "total_related": 76321, - "prevalence": 2.6205107375427472e-05 - }, - { - "value": "85254d400ec909acac6d567a725f3d9d21507ad1c93cef4c99223a8ea8878a18", - "count": 2, - "total_related": 89710, - "prevalence": 2.2294058633374205e-05 - }, - { - "value": "2dfc8c9ede4bed47f8e56ab6f6dccda39e60d76ca37f88d897bf1829001978cd", - "count": 2, - "total_related": 89917, - "prevalence": 2.2242734966691505e-05 - }, - { - "value": "b16e15764b8bc06c5c3f9f19bc8b99fa48e7894aa5a6ccdad65da49bbf564793", - "count": 130, - "total_related": 100000, - "prevalence": 0.0013 - }, - { - "value": "6dc9c7fc93bb488bb0520a6c780a8d3c0fb5486a4711aca49b4c53fac7393023", - "count": 27, - "total_related": 100000, - "prevalence": 0.00027 - }, - { - "value": "d3ff999a093c94b71eed485b9391ad5e80033f0728aa285049a0f81d0042dba5", - "count": 15, - "total_related": 100000, - "prevalence": 0.00015 - }, - { - "value": "9ec2f0698f1c3497de39a192dd1c3f3e4506ff1a84dbf85082344297dc52e681", - "count": 13, - "total_related": 100000, - "prevalence": 0.00013 - }, - { - "value": "5ab44f257a83c18ca426028e0bf03b9bf2c194c0138c5c704f018cec98bd7650", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "52c1e7a2c36be28c42455fe1572d7d7918c3180cad99a2b82daa2a38a7e7bb23", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": "557b5e9015b4963a130c7039e077b3ec0306d401b6ee13d631721d5d969d2917", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": "cfe72034a9f298fb79a6c1f2302673bb449c826d446b3efafdde95e6c48dc3ca", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": "370be45f65276b3b8de42a29adfb1220fc44a5e018c37e3e9b62fa7d5b523fd0", - "count": 8, - "total_related": 100000, - "prevalence": 8e-05 - }, - { - "value": "4c7d08f1d6fac569c83fa87b42a3a727668da55317954637ce500d59e058fe03", - "count": 8, - "total_related": 100000, - "prevalence": 8e-05 - }, - { - "value": "4ad465b840cf7a5b5098806a97dd31846b1459fc592bb8021096b7392550389f", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "a980b60a8922f510d2da527e74ec9443a57dcc65444dbd6a3ae87dceb28090eb", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "b5378a12e359a27a0c92f53fefa2b4c21673781b7e76f54495d58ad72a927839", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "cab538fd1647961eb35348c1bd84e1fde389ad89672587d2fe3c007a0bc9e67f", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "dc1d54dab6ec8c00f70137927504e4f222c8395f10760b6beecfcfa94e08249f", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "8cf065293ca696f2560a8dde153a0ddd3144a32a9c3f10a82caf58d6e0b64c3c", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "9f96d68b285d4f7e4a82ef42e626ec4f96a94c9c61a2c7fcb699a762b1abb487", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "8dfbf98adfb38f0b612d15b4baccb23de19cf12dee36c9897708d62aaab6d308", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "982b986bb578e137f062099427a8caec3c501c84a9e4b22369ebd2badec42fe7", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "a9ef11bdf098b181c9cbb75b272531793991c287d15d2477af07edeac69672a8", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "e2be88fd3dc7349ec9c3cd296b5f4241061ee5462e7d04d5425359a27b2122d2", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "013d6bb198a9ecd19e2b74f7b8994fe802cb49de27b46f731d827b344d4b9db9", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "7da15bb6457dbb866a293c12b681441c8a4a02817ac3fccdcb0cd357660cca9b", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "802600d124464157037a2519acb3cff90b97670fd04809ea902fbb95497a12ca", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "8172cfcc09260a67d9bd245425037dd2396e7006e76e62b5fb7914c32e24311d", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "b825edbb55450e309fe823143f985893b399da08d9166f4523cdffbfb7f48310", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "ba06358e68429145a15d0c1cfb211cb1b82680ef0a0b3efa376c68e9c1e4ea03", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "0b52c5338af355699530a47683420e48c7344e779d3e815ff9943cbfdc153cf2", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "0f3a07f36d6bddee418f7d7548bc165b09817e10764a359d2773388cdec9ff8a", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "23926e9185d8d43c02807a838ffb373cc1977726094a4e46807c66ada9dd7660", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "2c3adc6b6fb69d3a4e7b75b64e913dc96d21dbaf436bf69e773589b6a6952c47", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "32f4c1e4c036d78d5bce0ddad05acdba6da51f8ccacf6deec8bb3fe529ec6ea7", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "38ffd4972ae513a0c79a8be4573403edcd709f0f572105362b08ff50cf6de521", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "6b99a14f762d50ad6ca4df3b21ca122ac86c6e0ce862b49e9c3c58eb63969502", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "895c0f60e59fdd84e53ab7ddb8866c8f49e45386632dca017efedd48313c9e0c", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "c55f527e536de44c7980fecece7428ae5a765647495e47008a8a54fa1e434736", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - } - ], - "favicon_dhash": [ - { - "value": "455555610d55555d", - "count": 40, - "total_related": 6540, - "prevalence": 0.0061162079510703364 - }, - { - "value": "21414963c9a4a449", - "count": 25, - "total_related": 31942, - "prevalence": 0.0007826685868135997 - }, - { - "value": "33ccb29696e0cc32", - "count": 14, - "total_related": 4955, - "prevalence": 0.0028254288597376388 - }, - { - "value": "003b2f3b65d41523", - "count": 10, - "total_related": 535, - "prevalence": 0.018691588785046728 - }, - { - "value": "b2cca09696e8ccb2", - "count": 9, - "total_related": 2998, - "prevalence": 0.003002001334222815 - }, - { - "value": "25414963c9a4a449", - "count": 8, - "total_related": 21094, - "prevalence": 0.00037925476438797765 - }, - { - "value": "d4a2f8d0d0f182d4", - "count": 6, - "total_related": 1836, - "prevalence": 0.0032679738562091504 - }, - { - "value": "9a65617864d8d9ae", - "count": 5, - "total_related": 75744, - "prevalence": 6.60118293198141e-05 - }, - { - "value": "e0cc9abb23a6ccf8", - "count": 5, - "total_related": 89786, - "prevalence": 5.5687969171140264e-05 - }, - { - "value": "00e479e8a6a6b210", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "2208162b55b22900", - "count": 4, - "total_related": 5, - "prevalence": 0.8 - }, - { - "value": "13ac13574d6bb449", - "count": 3, - "total_related": 7, - "prevalence": 0.42857142857142855 - }, - { - "value": "b270c8d8f4e871b2", - "count": 3, - "total_related": 10, - "prevalence": 0.3 - }, - { - "value": "27cb4d3a3215c347", - "count": 3, - "total_related": 65, - "prevalence": 0.046153846153846156 - }, - { - "value": "04f368cc9f050200", - "count": 3, - "total_related": 8033, - "prevalence": 0.0003734594796464584 - }, - { - "value": "1b6799d164661927", - "count": 3, - "total_related": 22641, - "prevalence": 0.00013250298131707962 - }, - { - "value": "b09c8aeab4b69ae4", - "count": 3, - "total_related": 25377, - "prevalence": 0.00011821728336682824 - }, - { - "value": "800c96069cb60e80", - "count": 3, - "total_related": 71730, - "prevalence": 4.1823504809703055e-05 - }, - { - "value": "1100040000020501", - "count": 3, - "total_related": 87917, - "prevalence": 3.412309337215783e-05 - }, - { - "value": "368e2e6b27863709", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "d4b26b59dcba8ecc", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "e0c89c3b3b9cf072", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "0e338ed83271178e", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "10468684c4666214", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "e35813555537c612", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "16b261b2b261b216", - "count": 2, - "total_related": 12, - "prevalence": 0.16666666666666666 - }, - { - "value": "336cd6b2d2868c93", - "count": 2, - "total_related": 17, - "prevalence": 0.11764705882352941 - }, - { - "value": "2814b2696cccc239", - "count": 2, - "total_related": 23, - "prevalence": 0.08695652173913043 - }, - { - "value": "f1c8a2da68a8f270", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "e88cc69236988ee8", - "count": 2, - "total_related": 38, - "prevalence": 0.05263157894736842 - }, - { - "value": "00d4ccccccccd400", - "count": 2, - "total_related": 72, - "prevalence": 0.027777777777777776 - }, - { - "value": "6d2e374507333333", - "count": 2, - "total_related": 14383, - "prevalence": 0.00013905304873809357 - }, - { - "value": "986699d0f46619a6", - "count": 2, - "total_related": 23706, - "prevalence": 8.436682696363789e-05 - }, - { - "value": "0a008a6b65950095", - "count": 2, - "total_related": 27698, - "prevalence": 7.220737959419453e-05 - }, - { - "value": "1b6799d0f4661927", - "count": 2, - "total_related": 50750, - "prevalence": 3.940886699507389e-05 - }, - { - "value": "0093298f47132380", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "080d3273cc163208", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "084d3273cc16b208", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0a4d266fcd4d2716", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0e27255945395b0e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1249162b55b20800", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1755cc3073965517", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "3149653573596d53", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "40d8e8a6a6a0e840", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "454a9274b0a5688a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4d0e9e9232306969", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "00090009c9440100", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "0c1769454d71170c", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "1641162b55b20840", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "24b25a49495ab224", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "27d8d4d1d4c8e41b", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "30e0e4d0c8ccc4e4", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "40184763391d0611", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "008082ba4a6a3440", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "00a4b494d6d2da00", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "0c1761454d71170c", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "0f334d54cc71330f", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "0f3b05e5c3e1381f", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "10480a2a666a2904", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "1755ccb2b2f05517", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "2a54cc23334c542a", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "2b0bcb2b0bcb0b4b", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "4b6b92d2989b5333", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "006c6958b2b00000", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "175571e8e9715517", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "3351dc682ce43533", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "33e8ccb2b2ccf033", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "0b1f173a330f0797", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "2401378f4d0a0c10", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "24f0cc64e6c488ca", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "33688e9686c67133", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "3369c8b2b2c86933", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "0e1f5b070f0f1e1c", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "2759cdc4dc4c651b", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "4c4d9c9ab6326969", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "00334d7171492300", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "0f0b2b3b2363f29c", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "31e894929294e831", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - }, - { - "value": "4d0e1b1313171116", - "count": 1, - "total_related": 28, - "prevalence": 0.03571428571428571 - }, - { - "value": "36f1c8e061f9f032", - "count": 1, - "total_related": 30, - "prevalence": 0.03333333333333333 - }, - { - "value": "0814b2696cccc239", - "count": 1, - "total_related": 41, - "prevalence": 0.024390243902439025 - }, - { - "value": "33e8d4aaaad4e833", - "count": 1, - "total_related": 68, - "prevalence": 0.014705882352941176 - }, - { - "value": "02002b2a8e550204", - "count": 1, - "total_related": 122, - "prevalence": 0.00819672131147541 - }, - { - "value": "04b268cc9f258201", - "count": 1, - "total_related": 278, - "prevalence": 0.0035971223021582736 - }, - { - "value": "4d4d17173333714d", - "count": 1, - "total_related": 703, - "prevalence": 0.001422475106685633 - }, - { - "value": "1769cc9696cc6917", - "count": 1, - "total_related": 892, - "prevalence": 0.0011210762331838565 - }, - { - "value": "4c33f0e471694916", - "count": 1, - "total_related": 2912, - "prevalence": 0.00034340659340659343 - }, - { - "value": "4933cce8edecc431", - "count": 1, - "total_related": 17667, - "prevalence": 5.6602705609328126e-05 - }, - { - "value": "c0cc9efcc086c6f0", - "count": 80, - "total_related": 100000, - "prevalence": 0.0008 - }, - { - "value": "c445f069c8cc4dc4", - "count": 21, - "total_related": 100000, - "prevalence": 0.00021 - }, - { - "value": "ccb25965558ecc71", - "count": 18, - "total_related": 100000, - "prevalence": 0.00018 - }, - { - "value": "d8a6617824d0d9ac", - "count": 18, - "total_related": 100000, - "prevalence": 0.00018 - }, - { - "value": "0000000000000000", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "2424242424242424", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "8ca6a3833e79b1ce", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "e88e931939338ee8", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "98a6b3833e79b1ce", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "e08c9a3b23a2ccf8", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "938365536e96963c", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "4cb269ccd4d4e803", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "favicon_raw_md5": [ - { - "value": "a64ef4e756a8d0d2ed7a7ee8dc39a310", - "count": 40, - "total_related": 6540, - "prevalence": 0.0061162079510703364 - }, - { - "value": "26aa67930614edc5e27b5f080743e715", - "count": 25, - "total_related": 31941, - "prevalence": 0.0007826930903853981 - }, - { - "value": "9c91c255e6b97151401e2006bdde8cad", - "count": 14, - "total_related": 4977, - "prevalence": 0.0028129395218002813 - }, - { - "value": "7edce2596062b0dbe4f97e91b4fc40ab", - "count": 10, - "total_related": 535, - "prevalence": 0.018691588785046728 - }, - { - "value": "c41df933b97a4fe6fbfdbc415b43ddab", - "count": 10, - "total_related": 1164, - "prevalence": 0.00859106529209622 - }, - { - "value": "a41ad4b48165aafd47cc13c2dbfcc1d9", - "count": 9, - "total_related": 2998, - "prevalence": 0.003002001334222815 - }, - { - "value": "e6bf78231de5565407422ad9d38deafc", - "count": 8, - "total_related": 18991, - "prevalence": 0.0004212521720815123 - }, - { - "value": "daefa8ad6cd307683e9b4bb2a2ce7186", - "count": 6, - "total_related": 1835, - "prevalence": 0.0032697547683923707 - }, - { - "value": "d4bfa6a080223cdb1b007c3a3f2bceec", - "count": 5, - "total_related": 73618, - "prevalence": 6.791817218615013e-05 - }, - { - "value": "aa07959aa4e6a848b23c3314e1a5ffea", - "count": 5, - "total_related": 89748, - "prevalence": 5.5711547889646564e-05 - }, - { - "value": "5d2b009e205678b96e86124363563b64", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "7999fbc54c5dc8d6d37b68d9597bc69c", - "count": 4, - "total_related": 5, - "prevalence": 0.8 - }, - { - "value": "460dc4d8933fb35ab961d06f007360cd", - "count": 3, - "total_related": 7, - "prevalence": 0.42857142857142855 - }, - { - "value": "e559af72cf6056a10b31cd78784699c0", - "count": 3, - "total_related": 65, - "prevalence": 0.046153846153846156 - }, - { - "value": "e646afcb8ced982b1eaf5f5643143c49", - "count": 3, - "total_related": 1092, - "prevalence": 0.0027472527472527475 - }, - { - "value": "8613ef0ac2bc8923a85a6f022f4ca0f3", - "count": 3, - "total_related": 22641, - "prevalence": 0.00013250298131707962 - }, - { - "value": "35dc7e3c53fe57f12a1a57c59e3cf663", - "count": 3, - "total_related": 25337, - "prevalence": 0.0001184039152227967 - }, - { - "value": "f4dcfc31f516ac47cf0f5979f3d529e9", - "count": 3, - "total_related": 63082, - "prevalence": 4.755714783932025e-05 - }, - { - "value": "b95c0b0dcbd5ca9ee75958106f71b408", - "count": 3, - "total_related": 79302, - "prevalence": 3.783006733751986e-05 - }, - { - "value": "67b48ba744990ca72e1018014149198c", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "86a569bc437c42d619eaa3c3c22b41fe", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "a6b742458af1e6391c53fdadcc42ea6a", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "b65eb5319d429dbba0cad06ea2729a52", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "802d4c9183e254c81889a377c00a9008", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "cad6115ec253c02188265dab81a0e54e", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "e0c2d31c985aaeaf608d3e0500f39829", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "9488857564c5bee162bacc0131e4aaab", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "6caa2ef39445a3834f48a4c9eb5cdfe1", - "count": 2, - "total_related": 9, - "prevalence": 0.2222222222222222 - }, - { - "value": "866c725da071e4e5b2f232b931001971", - "count": 2, - "total_related": 17, - "prevalence": 0.11764705882352941 - }, - { - "value": "8ee15164d47b01f0d09aacd3922424cb", - "count": 2, - "total_related": 23, - "prevalence": 0.08695652173913043 - }, - { - "value": "bf4ade495f634dce1709dd8ad5517806", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "17364e0cbcc170f10cf119b5abb0c599", - "count": 2, - "total_related": 38, - "prevalence": 0.05263157894736842 - }, - { - "value": "16fbd6e0d4243d379108add7eed699cf", - "count": 2, - "total_related": 14382, - "prevalence": 0.00013906271728549575 - }, - { - "value": "2ccaa650d5492d41cfecc9473ff10669", - "count": 2, - "total_related": 27688, - "prevalence": 7.22334585379948e-05 - }, - { - "value": "a88983724d846a0992186759d5652b11", - "count": 2, - "total_related": 29467, - "prevalence": 6.787253537855906e-05 - }, - { - "value": "008b0d98aabf69c4bded122ab4318173", - "count": 2, - "total_related": 29950, - "prevalence": 6.67779632721202e-05 - }, - { - "value": "f7ee6044ade2380e1a76a36fdf5093af", - "count": 2, - "total_related": 50812, - "prevalence": 3.936078091789341e-05 - }, - { - "value": "033a51d0303041856612653a3a170c65", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "22aafb2e0f647350fb7e2dfac0ebec31", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "3ce8c440a69daeb361f8b9e5ee876126", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4974777a5e75c0f96f78b19c86d26e96", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4d109db17748cd6dbb690e823bc4656e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "922614ccb1c06b0b411efab0051b6033", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "939d3de7965755a52a7a9ed9d3407a0c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "081dcee7c6862a596597e13be4b70bec", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "09cb99db3aacf0479c0618c62acdf377", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "4437c906077600f12297b30fac0496bf", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "4ecf93f10e8c52ad72a690a5ede9d19c", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "51f64b635acae2090dee415631217f3f", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "54daf188222b7bc319099fbc886546c4", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "5d5c8935480a8a85c97f6151e6c5b86c", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "0709ae26ee792c75915c50b81b67b695", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "456cde89d4ec6bc985d6f999aaa91c09", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "8ab98d7f3f5c3ac3d5564e742db2b4ff", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "96c5426faa4fe985e456b5d9a0ac5fdd", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "7f42f7521c495fc9defaf91d0bab0640", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "97b8f12b4aed17544341a062ed870c1d", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "991300beefd64377fced8953c1d36487", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "43ae4cb942109eb531e34fa5cc480d26", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "4e6c664f6fcfa2611ad6bf0f99c904de", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "6ffe436c9d73ef75e7bc4d3c6de5b7dd", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "891e9a9607b09bdcd9b71bd05691f0dd", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "1f01a55d9aab7241ae65dde0fe3f2eba", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "2e2526b2950b5696bab28a13de16d90d", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "83c8c118bcd38c65950f126d714dfba9", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "64986904624088490cc769e877a5cc32", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "9713cb2c752719cd010d0ac132e97601", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "65ce9ca77254da41453b4219bb34cb69", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "8d47eab80df89f2e83d847d80c197067", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "1d5a092475e0ac4a6d041461800f0cf5", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "5490d7b7de585b59d8fe78ab8e73035b", - "count": 1, - "total_related": 18, - "prevalence": 0.05555555555555555 - }, - { - "value": "80d5896486f8a0f98a05ded4f2141f33", - "count": 1, - "total_related": 26, - "prevalence": 0.038461538461538464 - }, - { - "value": "1768e8473ad5f47b686b1bbc1674c309", - "count": 1, - "total_related": 28, - "prevalence": 0.03571428571428571 - }, - { - "value": "44988574efb995b1254ead106d588614", - "count": 1, - "total_related": 30, - "prevalence": 0.03333333333333333 - }, - { - "value": "7185bb72dfc91d8709b8c04c72710c28", - "count": 1, - "total_related": 41, - "prevalence": 0.024390243902439025 - }, - { - "value": "5f1176873c0f792b90470b599cf8dccb", - "count": 1, - "total_related": 106, - "prevalence": 0.009433962264150943 - }, - { - "value": "344f0eb55c3a490af08a6460bac39b0b", - "count": 1, - "total_related": 169, - "prevalence": 0.005917159763313609 - }, - { - "value": "28622848a7f54a8b5dfc28cf7461f1c2", - "count": 1, - "total_related": 214, - "prevalence": 0.004672897196261682 - }, - { - "value": "47d5408abb9f225af372d09f15391869", - "count": 1, - "total_related": 703, - "prevalence": 0.001422475106685633 - }, - { - "value": "8ce44c17b009f0bf1f81cecd58972a8b", - "count": 1, - "total_related": 1411, - "prevalence": 0.0007087172218284905 - }, - { - "value": "235065039d3df22bf9676f1bc1063c57", - "count": 1, - "total_related": 2908, - "prevalence": 0.000343878954607978 - }, - { - "value": "2b9e380350c64ee8ddd97d9c6c05ff23", - "count": 1, - "total_related": 10747, - "prevalence": 9.304922303898763e-05 - }, - { - "value": "109893926547cd68c60ca6ea691e8947", - "count": 1, - "total_related": 19203, - "prevalence": 5.20751965838671e-05 - }, - { - "value": "4d0270f6878b3674393ab47a02392086", - "count": 1, - "total_related": 19458, - "prevalence": 5.139274334463974e-05 - }, - { - "value": "117d38870c71b18a1c94af9038637544", - "count": 1, - "total_related": 21385, - "prevalence": 4.676174888940846e-05 - }, - { - "value": "8c584a88c3fc48d6186d18673b6c34c9", - "count": 1, - "total_related": 57530, - "prevalence": 1.7382235355466714e-05 - }, - { - "value": "c9ac92eecdcf2fd9ed909a82ce81cb8d", - "count": 80, - "total_related": 100000, - "prevalence": 0.0008 - }, - { - "value": "2704d774bf59289368ae61a95dc60afb", - "count": 21, - "total_related": 100000, - "prevalence": 0.00021 - }, - { - "value": "772f1e1bb49679a12d942ce86a76f0b1", - "count": 18, - "total_related": 100000, - "prevalence": 0.00018 - }, - { - "value": "ef9d0e866a789bf4f20038e4ea74675e", - "count": 18, - "total_related": 100000, - "prevalence": 0.00018 - }, - { - "value": "8996b2c0b3d7dc5b0d092c4f767fdd76", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "b4db2a4b6d91e0df5850a3fdcee9c8df", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "c4cacab371c682125e0da1888e8ce475", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "f3e260b62c4b891753fd57bf5fd075cc", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "ca8fa47ba1bbc14446b64d55a55ce87a", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "03eb1b6d95ef220a39bc24b87df857cc", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "0c08e47cb451b4e42b54520256023323", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "a259f8beea91900081dbef52390f77d8", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "0dbae411da96073d7dc299a58de80300", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "52507f6aef6782cdd70bfa8575ce0cb2", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "urls": [ - { - "value": "http://ac-2501.amazonaws1.info/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://admin.alwayswelcome.online/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://api.alwayswelcome.online/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://app.aixstore.info/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://app.alwayswelcome.online/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://authenticate.azure-drive.com/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://auto.antifirmware.site/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://auto.azure-security.site/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://automatic.antifirmware.store/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://azure.auto-protection.cloud/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://azure.auto-protection.services/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://backend.alwayswelcome.online/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://backup.163qiye.top/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "https://ac-2501.amazonaws1.info/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "https://admin.alwayswelcome.online/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "https://app.aixstore.info/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "https://authenticate.azure-drive.com/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "https://auto.antifirmware.site/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "https://automatic.antifirmware.store/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "https://azure.auto-protection.cloud/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "https://azure.auto-protection.services/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "https://backend.alwayswelcome.online/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "https://backup.163qiye.top/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://092jb_378v3_1.googldocs.org/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://1.googldocs.org/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://163qiye.top/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://1driv.org/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://1driv.org/open", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://1driv.org/open?id=D6GApoc41tPmtlZmx71ETXPrHCHSuFgVvbvM0fzPaOYN7T4IQdG3w4Pcz8VfDy/G", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://1driv.org/open?id=mhy/ZcRTX5Z325ue9h9UgAZBd5Xq4UZZZHRRDcxj8PKw4x5MlWrw8fozU5CSGuUp", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://1drv.email/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://1drvmail.work/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://1drvmicrosoft.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://1drvms.net/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://31ventures.info/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://6441056b613c32a9.meeting-pro.online/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://_jfieo2_se.drivegooglshare.xyz/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://_jfieo2_se.drivegooglshare.xyz:8080/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://_jfieo2_se.drivegooglshare.xyz:8080/open", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://_jfieo2_se.drivegooglshare.xyz:8080/open?id=hh/gaQbX3Id5E7BKYuH/w0/wtPd1jQFW39sPM3DHFcgHI/8vbSqnPiGLGUJD7r0O", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://abc.preconnection.online/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://abcnewsagency.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://abf-cap.co/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://abiesvc.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://abiesvc.com/a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://abiesvc.info/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://abiesvc.jp.net/LTZQCJ6P3IG/w2eIu5Obzl/axp3n94U1N/a33bNJ91Q8/0I=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://ac-2501.amazonaws1.info:8080/edit?id=%20Ez5uVZGMrxUYrlBXm3JSG3aYhUjxT7lVJ%20Xgy1REwbyAQCgnSvj5VgENUfP05sEjCpXZgw3AbwjXurN2Zfwlw==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://account-refund.co/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://account-refund.co/emt", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://account-refund.co/emt/Finance", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://account-refund.co/emt/Finance/atb", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://account-refund.co/emt/Finance/mobile-cibc", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://account-refund.co/emt/Finance/mobilesco", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://account-refund.co/emt/Finance/motus", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://account-refund.co/emt/Finance/simplii", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://account-refund.co/emt/finance", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://account-refund.co/emt/finance/antibot.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://account-refund.co/emt/finance/atb", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://account-refund.co/emt/finance/atb/details.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://account-refund.co/emt/finance/atb/secquestions.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://account-refund.co/emt/finance/bmo-mobile/complete.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://account-refund.co/emt/finance/bnc", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://account-refund.co/emt/finance/bnc/index.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://account-refund.co/emt/finance/desj", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://account-refund.co/emt/finance/desj/index91484101498.php?cce8c647ffd", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://account-refund.co/emt/finance/desj/index91484101498.php?cce8c647ffd=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://account-refund.co/emt/finance/tang/antibot.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://account-refund.co/emt/finance/tang/indexx.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://additional.work.gd/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://addrsrv.corecheckmailsrv.com/lDtfng/MxOUgEhDXyBPDRyi3qIo6QpLEkRtYRKY1le8=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://addrsrv.corecheckmailsrv.com/oVagoQu40aYC2Mu8tar4tulgqZLy/EYPIoKpAfR8Ago=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://addrsrv.corecheckmailsrv.com/yInwvho8Q6LaZGUNuLLMVnwygPsV0CQkPfk+YDGpktU=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://4jslg.goglesheet.com/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://6441056b613c32a9.ubi-safemeeting.live/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://64441056b613c32a9.emv1.roomconnect.online/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://7xvc.conference-go.online/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://7xvc.meeting-central.online/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://7xvc.meeting-zone.cloud/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://7xvc.meeting-zone.online/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://7xvc.meetup-room.online/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://7xvc.online-meeting.community/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://7xvc.roomconnect.online/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://7xvc.virtual-collab.online/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://a.meet-client.online/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://a.videotalks.site/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://a.web-meet.online/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://abc.meeting-central.online/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://abc.meeting-zone.online/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://abc.roomconnect.online/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://abiesvc.jp.net/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://abs.twitter.expublic.linkpc.net/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://access.support.general-meet.site/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://additionalpublic.work.gd/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://addrcheck.corecheckmailsrv.com/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://addrsrv.corecheckmailsrv.com/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://ade.dropfile.online/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://admin.chrome-browser.cloud/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://admin.docsend.site/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://admin.general-meet.site/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - } - ], - "registrant_names": [ - { - "value": "linkpc.net", - "count": 18, - "total_related": 987, - "prevalence": 0.0182370820668693 - }, - { - "value": "cc3d6c4ef6e5ca58", - "count": 9, - "total_related": 58859, - "prevalence": 0.000152907796598651 - }, - { - "value": "work.gd", - "count": 8, - "total_related": 2482, - "prevalence": 0.0032232070910556 - }, - { - "value": "4dd76b06670189da", - "count": 7, - "total_related": 16, - "prevalence": 0.4375 - }, - { - "value": "onedriveglobal.com", - "count": 6, - "total_related": 16, - "prevalence": 0.375 - }, - { - "value": "dafb04edca3b3640", - "count": 6, - "total_related": 77195, - "prevalence": 7.772524127210312e-05 - }, - { - "value": "b8bf8e2faa971a69", - "count": 5, - "total_related": 5, - "prevalence": 1.0 - }, - { - "value": "cec6d6a93aca0cb4", - "count": 5, - "total_related": 1957, - "prevalence": 0.0025549310168625446 - }, - { - "value": "fb1b6db59b599925", - "count": 5, - "total_related": 21268, - "prevalence": 0.000235094978371262 - }, - { - "value": "publicvm.com", - "count": 4, - "total_related": 1204, - "prevalence": 0.0033222591362126247 - }, - { - "value": "com.de", - "count": 4, - "total_related": 75757, - "prevalence": 5.2800401283049754e-05 - }, - { - "value": "azure-drive.com", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "googleapis.online", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "faeaa57dac0eb669", - "count": 3, - "total_related": 6, - "prevalence": 0.5 - }, - { - "value": "azure-protected.online", - "count": 3, - "total_related": 8, - "prevalence": 0.375 - }, - { - "value": "azure-safe.com", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "azuredefender.online", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "coinbigex.com", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "drivegooglshare.xyz", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "jobdescription.online", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "mekongcapital.net", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "perseus.bond", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "ea990d67c66da0ca", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "237e727f4e7802de", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "j-ic.com", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "4bc54814633e58d6", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "0dd9e80d43a49b65", - "count": 2, - "total_related": 11, - "prevalence": 0.18181818181818182 - }, - { - "value": "c3baf8db2342424e", - "count": 2, - "total_related": 215, - "prevalence": 0.009302325581395349 - }, - { - "value": "0ec0f5f8cf12e5cf", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "3121acc9b1324f2d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5841911d9cdddf4e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "8af459ec828c4df5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "aa8c74ccc81375ca", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "abcnewsagency.com", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "access-googledrive.com", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "admin.chrome-browser.cloud", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "admin.interalliancemediagroups.cloud", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "alwayswait.online", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "alwayswait.site", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "alwayswelcome.online", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "amazing-ed.xyz", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "antiviruscheck.site", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "antiviruscheck.store", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "antlercap.com", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "api-zoom.com", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "api.chrome-browser.cloud", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "arbordeck.online", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "archax.skyboxdrive.cloud", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "asmir.xyz", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "atajerefoods.com", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "auditprovidre.site", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "auditprovidre.store", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "autodiscover.interalliancemediagroups.cloud", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "awaitingfor.site", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "azure-security.online", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "azure.doc-protect.cloud", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "azure.doc-view.cloud", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "azure.docs-protection.cloud", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "azure.protection-service.cloud", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "azureprotect.xyz", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "azureword.com", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "backend.chrome-browser.cloud", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "bankofamerica.offerings.cloud", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "altair-vc.com", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "azure-protect.online", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "azure-protection.online", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "azure-service.com", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "bebdon.xyz", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "17caaeafa9a4b706", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "74eefd4875f99b49", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "7b36e478da16c1f4", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "86b2581ecc49408d", - "count": 1, - "total_related": 23, - "prevalence": 0.043478260869565216 - }, - { - "value": "7a48f2dd77dbe938", - "count": 1, - "total_related": 43, - "prevalence": 0.023255813953488372 - }, - { - "value": "8780ffd84c1212d7", - "count": 1, - "total_related": 177, - "prevalence": 0.005649717514124294 - }, - { - "value": "af7877f13654746c", - "count": 1, - "total_related": 22137, - "prevalence": 4.517323937299544e-05 - }, - { - "value": "37eabe5e699cf6a5", - "count": 1, - "total_related": 54677, - "prevalence": 1.8289225817071162e-05 - }, - { - "value": "1f8f4166599d23ee", - "count": 312, - "total_related": 100000, - "prevalence": 0.00312 - }, - { - "value": "37bfbc24cafea5d2", - "count": 166, - "total_related": 100000, - "prevalence": 0.00166 - }, - { - "value": "12dab2e482f2c209", - "count": 63, - "total_related": 100000, - "prevalence": 0.00063 - }, - { - "value": "99f9e3def34088de", - "count": 30, - "total_related": 100000, - "prevalence": 0.0003 - }, - { - "value": "690fd393ab541650", - "count": 29, - "total_related": 100000, - "prevalence": 0.00029 - }, - { - "value": "3b5f76ecd769308f", - "count": 23, - "total_related": 100000, - "prevalence": 0.00023 - }, - { - "value": "1f33d7151e7ebf55", - "count": 15, - "total_related": 100000, - "prevalence": 0.00015 - }, - { - "value": "3495bcf1839c6374", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "8792ba892fc41135", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "1e228c70e39f88de", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "2baba875c89e1223", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "edeae57e15fec50a", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "7bc26f5a5e70d417", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "d10e0e46d7d3e53c", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "388d6d67ffb0a171", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "1facd30fba15e069", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "3432650ec337c945", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "6bea8c7bc570bd3d", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "1b8cf3baab8972aa", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "5dfae26313ad55b7", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "5fa648b96eeb677f", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "7f9fc133014160e3", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "80315b2e6ac1a801", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "ad81f616267b28de", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ] - }, - "files": { - "itw_urls": [ - { - "value": "http://zoom-client.xyz/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "https://onedrive.live.com/download?cid=AB7FEE589CE19D1A&resid=AB7FEE589CE19D1A!186&authkey=AID-A76MMkLd4M4", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://104.168.198.3/uc?topic=en&sess=1599a0b815d0a082", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://23.254.164.232/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://23.254.167.216/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://23.254.253.75/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://38.110.228.112/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://38.242.201.111/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://45.61.140.26/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://5.230.252.157/zoom/window.location.href", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://a0info.v6.army/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://ai5.aisoftware.ro/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://alfatimacollection.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://api.zoomsdk.us/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://appleaccess.pro/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://autoprotect.com.se/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://autoprotect.gb.net/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://canyouworld.com/random.php", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://co.fieldsrl.it/fieldsrl.it/co/galemysNT/Application%20Files/Galemys_4_0_0_43/Galemys.exe.config.deploy", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://digitword.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://downloads.solotrader.com/Application%20Files/SoloTraderLite_1_0_0_44/SoloTraderLite.exe.config.deploy", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://drive.google.com/uc?id=1ZpretgDk8oqadTgh4MTbaPHoss7l7VF_", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://e-anjababk.sumbawabaratkab.go.id/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://eqtsadiafm.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://er-zoom.us/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://er-zoom.us/zoom/join", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://fxcapp.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://gsic1g.bn.files.1drv.com/y4meDIJGHY007rdHfd9BY5eLeyP8X1Pd-H5FoVmVNyr3uCTHu77TUPl4VfsFsIpwrl_2_hKa1Sv8u2J9eREHjKCe6Nmnd5gi20u8bU169icR08s-dcvS-2MLMC8sT62OhcM8q8tOoudSp9Pt68LIRUEStjPelsFK88JMm_4srizNPiWstCgMl6-nN_zqLOlYtzk/Profit%20and%20Loss%20Statement.zip?download&psid=1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://haishiwan.vip/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://hanjiemei.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://happyz.one/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://haywardmadison.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://hwsrv-1225327.hostwindsdns.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://ig-verifyaccount.tk/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://ignite.onlinemeet.pro/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://ignite.onlinemeet.pro/zoom/join", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://in-zoom.us/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://italyran.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://make-hex-32332e3235342e3136372e323136-rr.1u.ms/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://mc.tvdhoenn.net/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://meet.globiscapitals.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://meet.globiscapitals.com/zoom/join?mn=83667790&pwd=16vtG8js", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://meet.rwa-team.video/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://meet.rwa-team.video/zoom/join", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://meet.superstatefund.co/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://moodsshoes.gr/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://noonawareness.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://onedrive.live.com/download?authkey=APp_0AMgcYTHkiE&cid=23F7A49910CEA830&resid=23F7A49910CEA830!108", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://onedrive.live.com/download?cid=AB7FEE589CE19D1A&resid=AB7FEE589CE19D1A!186&authkey=AID-A76MMkLd4M4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://openfort.businessmeet.xyz/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://panda95sg.asia/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pcsdl.com/short-url-v2/002042409303/scenario/300700___d406e1dc-41ef-4329-85bf-83d6b1e3f65b.scpt?protocol=http", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://pixelmonmmo.net/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://prmobiles.com/babedate.datingbuddies.info/cu9w/direct", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://rwa.business-zoom.us/zoom/error", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://saisoncapital.net/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://savredigital.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://sbanner.ir/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://str8fire.businessmeet.xyz/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://usweb-zoom.us/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://verify.azure-protect.online/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://versionupdate.dns.army/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://viabtc.webmeet.video/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://viabtc.webmeet.video/zoom/join", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://vipocapital.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://web.interzoom.us/zoom/error", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://web.interzoom.us/zoom/join", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://www.247services.net/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://www.antiplagiarism.net/downloads/en/4.129.0.0/AntiplagiarismExtUpdater.exe.config", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://www.antiplagiarism.net/downloads/en/4.130.0.0/AntiplagiarismExtUpdater.exe.config", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://www.antiplagiarism.net/downloads/en/4.131.0.0/AntiplagiarismExtUpdater.exe.config", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://www.antiplagiarism.net/downloads/en/4.133.0.0/AntiplagiarismExtUpdater.exe.config", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://www.antiplagiarism.net/downloads/en/4.137.0.0/AntiplagiarismExtUpdater.exe.config", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://www.antiplagiarism.net/downloads/en/4.142.0.0/AntiplagiarismExtUpdater.exe.config", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://www.dourolab.xyz/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://www.je-electronic.dk/publish/je910/Presto-JEN4XEWR/Application%20Files/JE910_Loader_Presto_1_0_41_40/JE910_Loader_Presto.exe.config.deploy", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://www.maelstromfund.org/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://www.pk99998888.xyz/BYAutoUpdate.exe.config", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://www.prismlab.xyz/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://www.sendmailed.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://www.tabuu.xxx/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://www.vsem2017.org/vn/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://www.yoannturp.xyz/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://xishuai.net/thread-61682-1-1.html", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://zoom-client.xyz/zoom/join", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://23.254.253.75/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://36.92.91.94/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://38.242.201.111/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://216.107.136.10/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://5.230.252.157/zoom/join", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://autoprotect.com.de/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://paypalperu.com/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://tvdhoenn.net/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://www.atajerefoods.com/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://www.drogueriasanjose.net/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "https://194.163.171.210/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "https://216.107.136.10/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://donglinchem.com/index.php?m=content", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "http://www.gaubay.com/desktop/gaubay_setup.exe", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "http://gaubay.com/desktop/gaubay_setup.exe", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - } - ], - "contacted_urls": [ - { - "value": "https://fonts.gstatic.com/s/roboto/v18/KFOlCnqEu92Fr1MmWUlfBBc-.woff", - "count": 12, - "total_related": 22389, - "prevalence": 0.0005359774889454643 - }, - { - "value": "https://fonts.gstatic.com/s/roboto/v18/KFOmCnqEu92Fr1Mu4mxM.woff", - "count": 12, - "total_related": 34343, - "prevalence": 0.00034941618379291266 - }, - { - "value": "http://r3.i.lencr.org/", - "count": 12, - "total_related": 42892, - "prevalence": 0.0002797724517392521 - }, - { - "value": "https://bitly.com/s/v468/graphics/bitly_logo_red.svg", - "count": 9, - "total_related": 129, - "prevalence": 0.06976744186046512 - }, - { - "value": "https://bitly.com/s/v468/graphics/spam_warning_illustration.svg", - "count": 9, - "total_related": 129, - "prevalence": 0.06976744186046512 - }, - { - "value": "https://fonts.gstatic.com/s/roboto/v18/KFOkCnqEu92Fr1Mu51xIIzQ.woff", - "count": 9, - "total_related": 1034, - "prevalence": 0.008704061895551257 - }, - { - "value": "https://fonts.gstatic.com/s/roboto/v18/KFOlCnqEu92Fr1MmSU5fBBc-.woff", - "count": 9, - "total_related": 22072, - "prevalence": 0.00040775643349039506 - }, - { - "value": "https://content.googleapis.com/drive/v2internal/viewerimpressions?key=AIzaSyC1eQ1xj69IdTMeii5r7brs3R90eck-m7k&alt=json", - "count": 8, - "total_related": 84, - "prevalence": 0.09523809523809523 - }, - { - "value": "https://ssl.gstatic.com/images/branding/product/1x/drive_2020q4_32dp.png", - "count": 8, - "total_related": 133, - "prevalence": 0.06015037593984962 - }, - { - "value": "https://fonts.googleapis.com/css?family=Google%20Sans:300,400,500,700", - "count": 7, - "total_related": 54, - "prevalence": 0.12962962962962962 - }, - { - "value": "https://fonts.googleapis.com/css?family=Google+Sans:300,400,500,700", - "count": 7, - "total_related": 103, - "prevalence": 0.06796116504854369 - }, - { - "value": "http://crl.identrust.com/dstrootcax3crl.crl", - "count": 7, - "total_related": 19855, - "prevalence": 0.00035255603122639134 - }, - { - "value": "https://fonts.gstatic.com/s/roboto/v18/KFOlCnqEu92Fr1MmEU9fBBc-.woff", - "count": 7, - "total_related": 27297, - "prevalence": 0.00025643843645821885 - }, - { - "value": "http://isrg.trustid.ocsp.identrust.com/mfewtzbnmeswstajbgurdgmcgguabbrv9ghnqxlssgkbnmarpucshyovpgquxkexphsscfrb4uuqdf/efwcfiraceaobquiaaafthxnqc4xspwg=", - "count": 6, - "total_related": 4298, - "prevalence": 0.0013959981386691485 - }, - { - "value": "http://cert.int-x3.letsencrypt.org/", - "count": 6, - "total_related": 4578, - "prevalence": 0.001310615989515072 - }, - { - "value": "http://ocsp.digicert.com/MFEwTzBNMEswSTAJBgUrDgMCGgUABBTfqhLjKLEJQZPin0KCzkdAQpVYowQUsT7DaQP4v0cB1JgmGggC72NkK8MCEAx5qUSwjBGVIJJhX+JrHYM=", - "count": 6, - "total_related": 7956, - "prevalence": 0.0007541478129713424 - }, - { - "value": "http://ocsp.digicert.com/mfewtzbnmeswstajbgurdgmcgguabbtfqhljklejqzpin0kczkdaqpvyowqust7daqp4v0cb1jgmgggc72nkk8mceax5quswjbgvijjhx+jrhym=", - "count": 5, - "total_related": 420, - "prevalence": 0.011904761904761904 - }, - { - "value": "http://r3.o.lencr.org/mfmwutbpme0wszajbgurdgmcgguabbri2smg+yvtlu/w3mjs9we3nfmzxaqufc6zf7dyvsuuuala5h+vnysuwsycegpnc82hpwpm2mmdq5wapm+4va==", - "count": 4, - "total_related": 5, - "prevalence": 0.8 - }, - { - "value": "https://ssl.gstatic.com/docs/doclist/images/mediatype/icon_3_pdf_x16.png", - "count": 4, - "total_related": 27, - "prevalence": 0.14814814814814814 - }, - { - "value": "http://ocsp.digicert.com/mfewtzbnmeswstajbgurdgmcgguabbrj9l2kgl92bpjf3katadtxautmhgqupdnqpdagre7zsmakzdmh1pj41g8cea1kd7oezzybs8qeyg+xrx4=", - "count": 4, - "total_related": 133, - "prevalence": 0.03007518796992481 - }, - { - "value": "https://fonts.gstatic.com/s/googlesans/v16/4UabrENHsxJlGDuGo1OIlLU94YtzCwA.woff", - "count": 4, - "total_related": 374, - "prevalence": 0.0106951871657754 - }, - { - "value": "https://fonts.gstatic.com/s/googlesans/v16/4UaGrENHsxJlGDuGo1OIlL3Owpg.woff", - "count": 4, - "total_related": 414, - "prevalence": 0.00966183574879227 - }, - { - "value": "http://ocsp.pki.goog/gtsr1/MEwwSjBIMEYwRDAHBgUrDgMCGgQUMJHC1g+C6hie2xOwdV2bBG5n8FAEFOSvKyZxGitIJ4UvUmYs7/CJE3E+Ag0CA7xTWWs0xxj1AVBm", - "count": 4, - "total_related": 67431, - "prevalence": 5.931989737657754e-05 - }, - { - "value": "http://r3.o.lencr.org/mfmwutbpme0wszajbgurdgmcgguabbri2smg+yvtlu/w3mjs9we3nfmzxaqufc6zf7dyvsuuuala5h+vnysuwsycegqoznwlsh7iqmcyemlgbhdnka==", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "http://web.commoncome.online:8080/client", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "https://content.googleapis.com/static/proxy.html?usegapi=1&jsh=m;/_/scs/abc-static/_/js/k=gapi.gapi.en.7RphtNcGHDQ.O/d=1/rs=AHpOoo_-zmYhp_Ir7_CCxM3l-AckMvaI9A/m=__features__", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "https://file.fclouddown.co/", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "https://share.bloomcloud.org/", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "https://www.googlesheet.info/", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "http://ocsp.int-x3.letsencrypt.org/mfmwutbpme0wszajbgurdgmcgguabbr+5mrncpqz/piiigrsfqetyheixqquqepqywr93brm0tm3pkvl7/oo7kecegn5w4lq07rpb55dhem0crkk+g==", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "http://r3.o.lencr.org/mfmwutbpme0wszajbgurdgmcgguabbri2smg+yvtlu/w3mjs9we3nfmzxaqufc6zf7dyvsuuuala5h+vnysuwsycegocxffnapuhkynrbh5xgplwcg==", - "count": 3, - "total_related": 7, - "prevalence": 0.42857142857142855 - }, - { - "value": "https://ssl.gstatic.com/docs/doclist/images/mediatype/icon_1_word_x16.png", - "count": 3, - "total_related": 9, - "prevalence": 0.3333333333333333 - }, - { - "value": "https://ssl.gstatic.com/docs/common/viewer/v3/v-sprite42.svg", - "count": 3, - "total_related": 10, - "prevalence": 0.3 - }, - { - "value": "https://fonts.gstatic.com/s/googlesans/v36/4UabrENHsxJlGDuGo1OIlLV154tzCwA.woff", - "count": 3, - "total_related": 44, - "prevalence": 0.06818181818181818 - }, - { - "value": "https://ssl.gstatic.com/gb/images/p1_4d827a84.png", - "count": 3, - "total_related": 197, - "prevalence": 0.015228426395939087 - }, - { - "value": "https://fonts.gstatic.com/s/googlesans/v36/4UabrENHsxJlGDuGo1OIlLU94YtzCwA.woff", - "count": 3, - "total_related": 216, - "prevalence": 0.013888888888888888 - }, - { - "value": "https://lh3.googleusercontent.com/fKYxJWmqWKS5JTWJUHJSE6u4tKZ6JbFx7YGMbbH0cI72r3E2MhU0vPrE6uaflUm94Q=w64", - "count": 3, - "total_related": 225, - "prevalence": 0.013333333333333334 - }, - { - "value": "http://www.gstatic.com:443/", - "count": 3, - "total_related": 252, - "prevalence": 0.011904761904761904 - }, - { - "value": "https://fonts.gstatic.com/s/googlesans/v36/4UaGrENHsxJlGDuGo1OIlL3Owpg.woff", - "count": 3, - "total_related": 290, - "prevalence": 0.010344827586206896 - }, - { - "value": "http://fonts.gstatic.com:443/", - "count": 3, - "total_related": 353, - "prevalence": 0.0084985835694051 - }, - { - "value": "http://ocsp.pki.goog/gsr2/ME4wTDBKMEgwRjAJBgUrDgMCGgUABBTgXIsxbvr2lBkPpoIEVRE6gHlCnAQUm+IHV2ccHsBqBt5ZtJot39wZhi4CDQHjtJqhjYqpgSVpULg=", - "count": 3, - "total_related": 97932, - "prevalence": 3.063350079647102e-05 - }, - { - "value": "http://bit.ly:443/2Fm2lBH", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://bit.ly:443/2LwMGCD", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://bit.ly:443/2U1JjGq", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://bit.ly:443/2mDY7hQ", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://docs-send.online/getBalance/usdt/ethereum", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://ocsp.int-x3.letsencrypt.org/mfmwutbpme0wszajbgurdgmcgguabbr+5mrncpqz/piiigrsfqetyheixqquqepqywr93brm0tm3pkvl7/oo7kecegrcxlq3lxz1vlgj2zal8/ju+q==", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://r3.o.lencr.org/mfmwutbpme0wszajbgurdgmcgguabbri2smg+yvtlu/w3mjs9we3nfmzxaqufc6zf7dyvsuuuala5h+vnysuwsycegmrjplhtoafait9+zjicme2ra==", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://share.1drvmicrosoft.com:443/2md4s4vcify6qAAHuH7lvi/gNOxBneoZaTFG8fGQYqg=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://www.googlesheet.info:443/NZrTnPVmtfjcSMz8n1hZZzvHQvUUEfFnIMAYliQuR+A=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://www.onlinecloud.cloud:443/Pdx6AiWhoRniAEQb02NAPdv+XZIcCqH63cEyxFjHq10=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "https://bit.ly/2HhIXsB", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "https://bit.ly/2OQMnTi", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "https://bit.ly/32zHYhY", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "https://bit.ly/3l26mi5", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "https://bitly.com/a/warning?hash=2OQMnTi&url=http://drivegoogles.com/open?id=RFugW2hRDrsB4cFyPNyeGuVPJ337AiQ%20SDTntkAntUFwR1%20PUgVBUBdaK5KDuwvm", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "https://bitly.com/a/warning?hash=2OQMnTi&url=http://drivegoogles.com/open?id=RFugW2hRDrsB4cFyPNyeGuVPJ337AiQ+SDTntkAntUFwR1+PUgVBUBdaK5KDuwvm", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "https://docs.azureword.com/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "https://document.fastercapital.cc/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "http://googledrive.email/open", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "http://ocsp.int-x3.letsencrypt.org/mfmwutbpme0wszajbgurdgmcgguabbr+5mrncpqz/piiigrsfqetyheixqquqepqywr93brm0tm3pkvl7/oo7kecegpfwbsfdqrtq7bcg+boqnhv8a==", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "https://cloudshare.jumpshare.vip/", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "http://ocsp.int-x3.letsencrypt.org/mfmwutbpme0wszajbgurdgmcgguabbr+5mrncpqz/piiigrsfqetyheixqquqepqywr93brm0tm3pkvl7/oo7kecegrhm1mvydqpe/us6rkf94zx5a==", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "http://r3.o.lencr.org/mfmwutbpme0wszajbgurdgmcgguabbri2smg+yvtlu/w3mjs9we3nfmzxaqufc6zf7dyvsuuuala5h+vnysuwsycegtm9cqpy5+hbxqee6+ftr4ezg==", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "https://documentprotect.live/", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "https://fonts.gstatic.com/s/googlesans/v27/4UabrENHsxJlGDuGo1OIlLV154tzCwA.woff", - "count": 2, - "total_related": 24, - "prevalence": 0.08333333333333333 - }, - { - "value": "http://ocsp.digicert.com/mfewtzbnmeswstajbgurdgmcgguabbrj9l2kgl92bpjf3katadtxautmhgqupdnqpdagre7zsmakzdmh1pj41g8ceay+k8lpt+/r4u1gfxgejoe=", - "count": 2, - "total_related": 34, - "prevalence": 0.058823529411764705 - }, - { - "value": "http://ocsp.pki.goog/gts1c3/MFIwUDBOMEwwSjAJBgUrDgMCGgUABBTHLnmK3f9hNLO67UdCuLvGwCQHYwQUinR/r4XN7pXNPZzQ4kYU83E1HScCEQC5z2OD8IgZMwoAAAAA+mIx", - "count": 2, - "total_related": 63, - "prevalence": 0.031746031746031744 - }, - { - "value": "https://bitly.com/s/v468/graphics/bitly_warning_hand.png", - "count": 2, - "total_related": 77, - "prevalence": 0.025974025974025976 - }, - { - "value": "http://ssl.gstatic.com:443/", - "count": 2, - "total_related": 91, - "prevalence": 0.02197802197802198 - }, - { - "value": "http://crl3.digicert.com/digicertglobalrootca.crl", - "count": 2, - "total_related": 129, - "prevalence": 0.015503875968992248 - }, - { - "value": "https://fonts.gstatic.com/s/googlesans/v27/4UabrENHsxJlGDuGo1OIlLU94YtzCwA.woff", - "count": 2, - "total_related": 235, - "prevalence": 0.00851063829787234 - }, - { - "value": "http://ocsp.digicert.com/mfewtzbnmeswstajbgurdgmcgguabbsauqybmq2awn1rh6doh/sbygfv7gqua95qnvbrtltm8kpigxvdl7i90vuceavg/hgj9+guhaofzhteyxm=", - "count": 2, - "total_related": 247, - "prevalence": 0.008097165991902834 - }, - { - "value": "http://ctldl.windowsupdate.com/msdownload/update/v3/static/trustedr/en/CABD2A79A1076A31F21D253635CB039D4329A5E8.crt", - "count": 2, - "total_related": 272, - "prevalence": 0.007352941176470588 - }, - { - "value": "https://fonts.gstatic.com/s/googlesans/v27/4UaGrENHsxJlGDuGo1OIlL3Owpg.woff", - "count": 2, - "total_related": 314, - "prevalence": 0.006369426751592357 - }, - { - "value": "http://ocsp.pki.goog/gts1c3/MFEwTzBNMEswSTAJBgUrDgMCGgUABBTHLnmK3f9hNLO67UdCuLvGwCQHYwQUinR/r4XN7pXNPZzQ4kYU83E1HScCEGOt6RAuLJ4ACgAAAAD6ZZ0=", - "count": 2, - "total_related": 708, - "prevalence": 0.002824858757062147 - }, - { - "value": "https://fonts.gstatic.com/s/googlesans/v45/4Ua_rENHsxJlGDuGo1OIlJfC6l_24rlCK1Yo_Iqcsih3SAyH6cAwhX9RFD48TE63OOYKtrw2IJllpy8.woff", - "count": 2, - "total_related": 893, - "prevalence": 0.0022396416573348264 - }, - { - "value": "https://fonts.gstatic.com/s/googlesans/v45/4Ua_rENHsxJlGDuGo1OIlJfC6l_24rlCK1Yo_Iqcsih3SAyH6cAwhX9RFD48TE63OOYKtrwEIJllpy8.woff", - "count": 2, - "total_related": 1242, - "prevalence": 0.001610305958132045 - }, - { - "value": "http://ocsp.pki.goog/gts1o1core/MFEwTzBNMEswSTAJBgUrDgMCGgUABBRCRjDCJxnb3nDwj/xz5aZfZjgXvAQUmNH4bhDrz5vsYJ8YkBug630J/SsCEHun1LxO7wGYAwAAAADMmFo=", - "count": 2, - "total_related": 2118, - "prevalence": 0.0009442870632672333 - }, - { - "value": "http://ocsp.digicert.com/MFEwTzBNMEswSTAJBgUrDgMCGgUABBSAUQYBMq2awn1Rh6Doh/sBYgFV7gQUA95QNVbRTLtm8KPiGxvDl7I90VUCEAbY2QTVWENG9oovp1QifsQ=", - "count": 2, - "total_related": 14103, - "prevalence": 0.00014181379848259235 - }, - { - "value": "http://g.symcd.com/MEQwQjBAMD4wPDAJBgUrDgMCGgUABBSxtDkXkBa3l3lQEfFgudSiPNvt7gQUAPkqw0GRtsnCuD5V8sCXEROgByACAwI6kg==", - "count": 2, - "total_related": 19586, - "prevalence": 0.00010211375472276115 - }, - { - "value": "http://ocsp.digicert.com/MFEwTzBNMEswSTAJBgUrDgMCGgUABBTfqhLjKLEJQZPin0KCzkdAQpVYowQUsT7DaQP4v0cB1JgmGggC72NkK8MCEApfEU0DWxeRF9Lv1AOMPzs=", - "count": 2, - "total_related": 21415, - "prevalence": 9.339248190520663e-05 - }, - { - "value": "http://crl.pki.goog/gtsr1/gtsr1.crl", - "count": 2, - "total_related": 52891, - "prevalence": 3.781361668336768e-05 - }, - { - "value": "http://crl.pki.goog/gsr1/gsr1.crl", - "count": 2, - "total_related": 60471, - "prevalence": 3.3073704751037686e-05 - }, - { - "value": "http://apps.identrust.com/roots/dstrootcax3.p7c", - "count": 26, - "total_related": 100000, - "prevalence": 0.00026 - }, - { - "value": "http://www.download.windowsupdate.com/msdownload/update/v3/static/trustedr/en/authrootstl.cab", - "count": 19, - "total_related": 100000, - "prevalence": 0.00019 - }, - { - "value": "https://www.bing.com/favicon.ico", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "http://crl.identrust.com/DSTROOTCAX3CRL.crl", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "http://www.microsoft.com/pki/certs/MicRooCerAut_2010-06-23.crt", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "http://ctldl.windowsupdate.com/msdownload/update/v3/static/trustedr/en/disallowedcertstl.cab", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "http://ocsp.comodoca.com/MFcwVaADAgEAME4wTDBKMAkGBSsOAwIaBQAEFOsl2JD+JyD0HX1qwV7vds9iz6t4BBR1cacZSBm8nZ3qQUfflMRId5nTeQIRAJjBcnaqg2kI3NxbTvi9QXQ=", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "http://x1.c.lencr.org/", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "http://ocsp.usertrust.com/MFYwVKADAgEAME0wSzBJMAkGBSsOAwIaBQAEFM0w0kw0OoKrHwVwFYrXoQd2KZLpBBRTeb9aqitKz1SA4dibwJ3ysgNmywIQXfq7lXfPq2cfx93+0c8gWw==", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "http://x1.i.lencr.org/", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "https://ardownload3.adobe.com/pub/adobe/reader/win/AcrobatDC/2200320282/AcroRdrDCUpd2200320282.msi", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "https://www.google-analytics.com/analytics.js", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "http://ctldl.windowsupdate.com/msdownload/update/v3/static/trustedr/en/authrootstl.cab", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "http://ocsp.pki.goog/gsr1/MFEwTzBNMEswSTAJBgUrDgMCGgUABBS3V7W2nAf4FiMTjpDJKg6+MgGqMQQUYHtmGkUNl8qJUC99BM00qP/8/UsCEHe9DWzbNvka6iEPxPBY0w0=", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "http://ocsp.pki.goog/gtsr1/ME4wTDBKMEgwRjAJBgUrDgMCGgUABBQwkcLWD4LqGJ7bE7B1XZsEbmfwUAQU5K8rJnEaK0gnhS9SZizv8IkTcT4CDQIDvFNZazTHGPUBUGY=", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "http://www.bing.com/favicon.ico", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - } - ], - "contacted_domains": [ - { - "value": "bitly.com", - "count": 11, - "total_related": 15378, - "prevalence": 0.000715307582260372 - }, - { - "value": "r3.i.lencr.org", - "count": 10, - "total_related": 50425, - "prevalence": 0.00019831432821021318 - }, - { - "value": "googlesheet.info", - "count": 6, - "total_related": 11, - "prevalence": 0.5454545454545454 - }, - { - "value": "www.googlesheet.info", - "count": 6, - "total_related": 11, - "prevalence": 0.5454545454545454 - }, - { - "value": "file.fclouddown.co", - "count": 5, - "total_related": 12, - "prevalence": 0.4166666666666667 - }, - { - "value": "content.googleapis.com", - "count": 5, - "total_related": 8250, - "prevalence": 0.0006060606060606061 - }, - { - "value": "commoncome.online", - "count": 4, - "total_related": 6, - "prevalence": 0.6666666666666666 - }, - { - "value": "web.commoncome.online", - "count": 4, - "total_related": 6, - "prevalence": 0.6666666666666666 - }, - { - "value": "googlesheetpage.org", - "count": 4, - "total_related": 7, - "prevalence": 0.5714285714285714 - }, - { - "value": "share.1drvmicrosoft.com", - "count": 4, - "total_related": 7, - "prevalence": 0.5714285714285714 - }, - { - "value": "azureword.com", - "count": 4, - "total_related": 8, - "prevalence": 0.5 - }, - { - "value": "48.193.43.104.in-addr.arpa", - "count": 4, - "total_related": 72540, - "prevalence": 5.5141990625861594e-05 - }, - { - "value": "venturelabo.co", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "datacentre.center", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "fclouddown.co", - "count": 3, - "total_related": 7, - "prevalence": 0.42857142857142855 - }, - { - "value": "113.162.28.149.in-addr.arpa", - "count": 3, - "total_related": 8, - "prevalence": 0.375 - }, - { - "value": "share.bloomcloud.org", - "count": 3, - "total_related": 14, - "prevalence": 0.21428571428571427 - }, - { - "value": "11.248.199.67.in-addr.arpa", - "count": 3, - "total_related": 453, - "prevalence": 0.006622516556291391 - }, - { - "value": "cert.int-x3.letsencrypt.org", - "count": 3, - "total_related": 4688, - "prevalence": 0.0006399317406143345 - }, - { - "value": "217.106.137.52.in-addr.arpa", - "count": 3, - "total_related": 33353, - "prevalence": 8.99469313105268e-05 - }, - { - "value": "210.31.213.23.in-addr.arpa", - "count": 3, - "total_related": 34765, - "prevalence": 8.629368617862792e-05 - }, - { - "value": "weather-edge.fe.apple-dns.net", - "count": 3, - "total_related": 51318, - "prevalence": 5.8459020226820995e-05 - }, - { - "value": "int-x3.letsencrypt.org", - "count": 3, - "total_related": 99594, - "prevalence": 3.012229652388698e-05 - }, - { - "value": "1drvmicrosoft.com", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "14.110.152.52.in-addr.arpa", - "count": 2, - "total_related": 56123, - "prevalence": 3.563601375550131e-05 - }, - { - "value": "0.204.248.87.in-addr.arpa", - "count": 2, - "total_related": 58007, - "prevalence": 3.447859741065733e-05 - }, - { - "value": "106.89.54.20.in-addr.arpa", - "count": 2, - "total_related": 58859, - "prevalence": 3.397951035525578e-05 - }, - { - "value": "137.90.64.13.in-addr.arpa", - "count": 2, - "total_related": 61408, - "prevalence": 3.256904637832204e-05 - }, - { - "value": "125.21.88.13.in-addr.arpa", - "count": 2, - "total_related": 62572, - "prevalence": 3.196317841846193e-05 - }, - { - "value": "144.139.43.104.in-addr.arpa", - "count": 2, - "total_related": 69290, - "prevalence": 2.8864193967383462e-05 - }, - { - "value": "150.32.88.40.in-addr.arpa", - "count": 2, - "total_related": 71854, - "prevalence": 2.7834219389317228e-05 - }, - { - "value": "bit.ly", - "count": 44, - "total_related": 100000, - "prevalence": 0.00044 - }, - { - "value": "r3.o.lencr.org", - "count": 32, - "total_related": 100000, - "prevalence": 0.00032 - }, - { - "value": "x1.c.lencr.org", - "count": 25, - "total_related": 100000, - "prevalence": 0.00025 - }, - { - "value": "apps.identrust.com", - "count": 21, - "total_related": 100000, - "prevalence": 0.00021 - }, - { - "value": "identrust.com", - "count": 21, - "total_related": 100000, - "prevalence": 0.00021 - }, - { - "value": "windowsupdate.com", - "count": 21, - "total_related": 100000, - "prevalence": 0.00021 - }, - { - "value": "ctldl.windowsupdate.com", - "count": 19, - "total_related": 100000, - "prevalence": 0.00019 - }, - { - "value": "api.apple-cloudkit.com", - "count": 16, - "total_related": 100000, - "prevalence": 0.00016 - }, - { - "value": "windowsupdatebg.s.llnwi.net", - "count": 15, - "total_related": 100000, - "prevalence": 0.00015 - }, - { - "value": "o.lencr.org", - "count": 14, - "total_related": 100000, - "prevalence": 0.00014 - }, - { - "value": "www.download.windowsupdate.com", - "count": 14, - "total_related": 100000, - "prevalence": 0.00014 - }, - { - "value": "download.windowsupdate.com", - "count": 13, - "total_related": 100000, - "prevalence": 0.00013 - }, - { - "value": "crl.identrust.com", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "i.lencr.org", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "www.gstatic.com", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "gstatic.com", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": "bing.com", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": "fonts.gstatic.com", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": "login.live.com", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": "ssl.gstatic.com", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": "www.bing.com", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": "armmf.adobe.com", - "count": 8, - "total_related": 100000, - "prevalence": 8e-05 - }, - { - "value": "c.apple.news", - "count": 8, - "total_related": 100000, - "prevalence": 8e-05 - }, - { - "value": "img-prod-cms-rt-microsoft-com.akamaized.net", - "count": 8, - "total_related": 100000, - "prevalence": 8e-05 - }, - { - "value": "acroipm2.adobe.com", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "arc.msn.com", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "googleusercontent.com", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "mask-api.fe.apple-dns.net", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "prda.aadg.msidentity.com", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "c.lencr.org", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "dns.msftncsi.com", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "fonts.googleapis.com", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "gateway.icloud.com", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "geo2.adobe.com", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "microsoft.com", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "p13n.adobe.io", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "www.microsoft.com", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "apple-finance.query.yahoo.com", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "digicert.com", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "fp2e7a.wpc.phicdn.net", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "gateway.fe.apple-dns.net", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "googleapis.com", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "lh3.googleusercontent.com", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "nexus.officeapps.live.com", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "ocsp.digicert.com", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "time.windows.com", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "33.28.101.95.in-addr.arpa", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "edgedl.me.gvt1.com", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "maxcdn.bootstrapcdn.com", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "pki.goog", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "154.210.82.20.in-addr.arpa", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "234.173.86.20.in-addr.arpa", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "49.28.101.95.in-addr.arpa", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "82.250.63.168.in-addr.arpa", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "adobe.com", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "apps.mzstatic.com", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "ardownload3.adobe.com", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "au-bg-shim.trafficmanager.net", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "audownload.windowsupdate.nsatc.net", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "cdn.icloud-content.com", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "clientservices.googleapis.com", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "isrg.trustid.ocsp.identrust.com", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "ocsp.int-x3.letsencrypt.org", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "ocsp.pki.goog", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "pubingress-feedback-1a6fe9caff1148fe.elb.us-west-2.amazonaws.com", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "trustid.ocsp.identrust.com", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "windowsupdate.s.llnwi.net", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "www.google-analytics.com", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "x1.i.lencr.org", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - } - ], - "contacted_ips": [ - { - "value": "67.199.248.11", - "count": 29, - "total_related": 74833, - "prevalence": 0.00038752956583325537 - }, - { - "value": "67.199.248.10", - "count": 29, - "total_related": 76228, - "prevalence": 0.000380437634465026 - }, - { - "value": "155.138.219.140", - "count": 8, - "total_related": 23, - "prevalence": 0.34782608695652173 - }, - { - "value": "149.28.162.113", - "count": 6, - "total_related": 29, - "prevalence": 0.20689655172413793 - }, - { - "value": "155.138.159.45", - "count": 5, - "total_related": 22, - "prevalence": 0.22727272727272727 - }, - { - "value": "67.199.248.15", - "count": 5, - "total_related": 13723, - "prevalence": 0.0003643518181155724 - }, - { - "value": "67.199.248.14", - "count": 5, - "total_related": 13874, - "prevalence": 0.00036038633415020905 - }, - { - "value": "23.205.105.180", - "count": 5, - "total_related": 35207, - "prevalence": 0.00014201721248615333 - }, - { - "value": "87.248.205.0", - "count": 5, - "total_related": 58863, - "prevalence": 8.494300324482272e-05 - }, - { - "value": "139.180.164.131", - "count": 3, - "total_related": 20, - "prevalence": 0.15 - }, - { - "value": "44.227.76.166", - "count": 3, - "total_related": 6449, - "prevalence": 0.0004651884013025275 - }, - { - "value": "62.152.42.139", - "count": 3, - "total_related": 6506, - "prevalence": 0.00046111281893636643 - }, - { - "value": "62.152.42.136", - "count": 3, - "total_related": 7325, - "prevalence": 0.00040955631399317407 - }, - { - "value": "99.83.154.118", - "count": 3, - "total_related": 55207, - "prevalence": 5.434093502635535e-05 - }, - { - "value": "34.202.64.211", - "count": 3, - "total_related": 58313, - "prevalence": 5.144650421003893e-05 - }, - { - "value": "17.253.83.195", - "count": 3, - "total_related": 90920, - "prevalence": 3.2996040475142986e-05 - }, - { - "value": "104.156.232.106", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "104.255.172.56", - "count": 2, - "total_related": 8, - "prevalence": 0.25 - }, - { - "value": "149.248.52.31", - "count": 2, - "total_related": 20, - "prevalence": 0.1 - }, - { - "value": "111.170.130.248", - "count": 2, - "total_related": 132, - "prevalence": 0.015151515151515152 - }, - { - "value": "111.170.130.242", - "count": 2, - "total_related": 145, - "prevalence": 0.013793103448275862 - }, - { - "value": "111.170.130.239", - "count": 2, - "total_related": 152, - "prevalence": 0.013157894736842105 - }, - { - "value": "111.170.130.240", - "count": 2, - "total_related": 155, - "prevalence": 0.012903225806451613 - }, - { - "value": "111.170.130.243", - "count": 2, - "total_related": 163, - "prevalence": 0.012269938650306749 - }, - { - "value": "111.170.130.244", - "count": 2, - "total_related": 169, - "prevalence": 0.011834319526627219 - }, - { - "value": "142.250.184.35", - "count": 2, - "total_related": 181, - "prevalence": 0.011049723756906077 - }, - { - "value": "140.249.3.104", - "count": 2, - "total_related": 188, - "prevalence": 0.010638297872340425 - }, - { - "value": "142.250.184.99", - "count": 2, - "total_related": 195, - "prevalence": 0.010256410256410256 - }, - { - "value": "116.211.183.141", - "count": 2, - "total_related": 236, - "prevalence": 0.00847457627118644 - }, - { - "value": "116.211.183.135", - "count": 2, - "total_related": 239, - "prevalence": 0.008368200836820083 - }, - { - "value": "111.170.130.238", - "count": 2, - "total_related": 325, - "prevalence": 0.006153846153846154 - }, - { - "value": "142.250.184.67", - "count": 2, - "total_related": 389, - "prevalence": 0.005141388174807198 - }, - { - "value": "119.96.138.224", - "count": 2, - "total_related": 458, - "prevalence": 0.004366812227074236 - }, - { - "value": "119.96.90.243", - "count": 2, - "total_related": 611, - "prevalence": 0.0032733224222585926 - }, - { - "value": "119.96.90.242", - "count": 2, - "total_related": 668, - "prevalence": 0.0029940119760479044 - }, - { - "value": "119.96.90.240", - "count": 2, - "total_related": 889, - "prevalence": 0.0022497187851518562 - }, - { - "value": "119.96.90.238", - "count": 2, - "total_related": 947, - "prevalence": 0.0021119324181626186 - }, - { - "value": "104.103.65.218", - "count": 2, - "total_related": 17842, - "prevalence": 0.0001120950566080036 - }, - { - "value": "142.250.72.142", - "count": 2, - "total_related": 37585, - "prevalence": 5.3212717839563654e-05 - }, - { - "value": "17.188.182.196", - "count": 2, - "total_related": 56729, - "prevalence": 3.5255336776604556e-05 - }, - { - "value": "17.188.182.68", - "count": 2, - "total_related": 56835, - "prevalence": 3.5189583883170584e-05 - }, - { - "value": "17.188.182.4", - "count": 2, - "total_related": 57354, - "prevalence": 3.48711510966977e-05 - }, - { - "value": "17.188.182.132", - "count": 2, - "total_related": 58041, - "prevalence": 3.445840009648352e-05 - }, - { - "value": "104.76.210.71", - "count": 2, - "total_related": 88551, - "prevalence": 2.2585854479339588e-05 - }, - { - "value": "224.0.0.252", - "count": 42, - "total_related": 100000, - "prevalence": 0.00042 - }, - { - "value": "127.0.0.1", - "count": 13, - "total_related": 100000, - "prevalence": 0.00013 - }, - { - "value": "255.255.255.255", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": "209.197.3.8", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": "67.195.204.56", - "count": 8, - "total_related": 100000, - "prevalence": 8e-05 - }, - { - "value": "178.79.208.1", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "72.21.81.240", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "87.248.202.1", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "17.248.195.71", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "192.229.211.108", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "64.78.201.1", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "72.21.91.29", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "17.248.195.72", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "17.253.144.10", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "67.195.228.56", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "87.248.204.0", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "114.114.114.114", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "17.248.195.65", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "64.78.200.1", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "95.101.28.33", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "104.18.10.207", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "104.18.11.207", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "131.107.255.255", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "17.157.64.66", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "17.248.200.66", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "17.248.200.68", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "17.248.203.64", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "17.253.21.201", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "17.253.83.197", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "20.190.155.130", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "20.190.155.132", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "20.190.155.2", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "20.190.155.3", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "20.190.155.67", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "20.82.210.154", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "23.22.254.206", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "52.202.204.11", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "52.5.13.197", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "54.227.187.23", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "58.158.177.102", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "8.8.4.4", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "92.123.140.146", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "92.123.143.219", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "95.101.28.59", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "104.155.138.21", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "104.18.38.233", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "104.85.0.137", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "104.97.14.18", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "104.97.14.90", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "104.99.72.226", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "107.178.223.183", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "107.22.247.231", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "108.177.127.94", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "13.107.4.50", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "151.101.3.6", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "17.179.252.2", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - } - ], - "execution_parents": [ - { - "value": "7010b962fefc8fb879e19b1f170345478875b81748b5a146218a7b0337627060", - "count": 8, - "total_related": 97, - "prevalence": 0.08247422680412371 - }, - { - "value": "8a7ba38d597e8230609df4153039d1bb898479d486e653a6d92d206dd4848c80", - "count": 4, - "total_related": 22, - "prevalence": 0.18181818181818182 - }, - { - "value": "1b1c8103d7cf206e0e055a95d9d3ff305d4a89f62c3d692a3d28745d3259158f", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "9de0c94bffe2fb7a87d05fd0087fecefa68c9b76c20f746cad7523f335f719c2", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "c2d9a510d82a3e003a059c6448fff61ba9e39fe8ec6f079b90adabfc93f72b4e", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "fd6c1fe9beaa905311ab053151013d1226636c20296a0947b7c8f1d22fffa430", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "a3f087c83453cde2bc845122c05ebeb60e8891e395b45823c192869ec1b72ea6", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "b0dd8c5bc3a8609f4c963c572f92f5a91da663e92e10c26ce385ecb27999db18", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "fe820433b912d08483030ae0a3229d2617f71999178fd29c909478ddef2fba8f", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "c034d3c6858a30eb4a31caa305d916996442f951edb58ba12247aceb755594c3", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "c35414673681517a7931f37fb299edac13ed993afa3e9a0009f2e0983e02d8e2", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "c909d2214af7449e9aabc3dad45465e8786b5aa4d25ed6abffce2fc3d9547b8e", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "cadd48debc8640828d9c119789666e3402d3f6fc4f98519c6024b9b03c09e598", - "count": 2, - "total_related": 8, - "prevalence": 0.25 - }, - { - "value": "d7bfa626bbc8e7db06fec500a84bcb25505119cd470bf3acdfd8252a270d2662", - "count": 2, - "total_related": 8, - "prevalence": 0.25 - }, - { - "value": "290c2e4d0efbed23de0d41d1b821396f5f1003f6f123ee6160d6d5028d01b961", - "count": 2, - "total_related": 9, - "prevalence": 0.2222222222222222 - }, - { - "value": "7446efa798cfa7908e78e7fb2bf3ac57486be4d2edea8a798683c949d504dee6", - "count": 2, - "total_related": 9, - "prevalence": 0.2222222222222222 - }, - { - "value": "034cf176ed9aae148e057a5298d8cbf93c13522039a448fffd0848a590236d0d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0e8842ed343c5ac26e78c3e79578b343bd1b085ee01e61374ee908c8110bad7b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "03d98ff0011bffc3f503f7a683bf8d1ff940012742f0cd88210d3adb84652176", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "0385af2de0d9df092b4b869e41aafe8c4df939188e207151fd3940663e201d3a", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "0905e92ac99501452b3d04687238fb1deca7dc1d23755c5dd4384f682b962c6f", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "0570225eb7f8d799ed9241f121ed1ce1924b7e070177c5e312123c378a599ab4", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "07fb3433e7e8a1de53d962ce57765e7a4fde498e0c600f423093b462a5d018b5", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "0b2f09df3edfab112ae31be31dc6c8804efb77e4273dd812c4c39a22f0669b20", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "0bd9d2f7144cf5f44664bd9d960e61a87eed101572a4e1c962f4875df9d0746f", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "0050ecc276887f68feff163da6ba83fe14627fdc61dbe63c320a31d52666a01c", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - }, - { - "value": "03f7d8bad3ffa94ed45aa711c02b6714c85bc2137a89ba23599986f574105fb9", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - }, - { - "value": "098bf0c657dc7262778eba7fbf49ee0231243b99a311ee9ff0de5f0da5507b60", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - }, - { - "value": "010eef56506f3edabeb971d54900f43b3df483ec83fd937127748a813cb09418", - "count": 1, - "total_related": 16, - "prevalence": 0.0625 - }, - { - "value": "0ae8563a4f2b6e101ea47c1a7be9d96e06f77194e07f1ab6eecb76d308e36073", - "count": 1, - "total_related": 20, - "prevalence": 0.05 - }, - { - "value": "04501a30f892bc8f3dd638870921fae22b8e76f40421331b7820eefe616a3991", - "count": 1, - "total_related": 21, - "prevalence": 0.047619047619047616 - }, - { - "value": "080634241035a4df32309be4f719a6dd7423f50ac1ae496e835fe558fd457ddb", - "count": 1, - "total_related": 24, - "prevalence": 0.041666666666666664 - }, - { - "value": "094a82a36f915791d7539610896dc58d24e5302128c8af1b209bff7309268256", - "count": 1, - "total_related": 24, - "prevalence": 0.041666666666666664 - }, - { - "value": "101ce8d5686059cc9b03872c65a5385fad5c781d07f51c2981e3d9b64e92cf6b", - "count": 1, - "total_related": 24, - "prevalence": 0.041666666666666664 - }, - { - "value": "00da169a0a75a12e30e6aa9000f33446ac0bfc2f037d1f3d9e6309f4891a0d13", - "count": 1, - "total_related": 25, - "prevalence": 0.04 - }, - { - "value": "0e62356b9d912114ec7fd6591119ed85405d0d0c5b631445e9b1d4e3554f9046", - "count": 1, - "total_related": 25, - "prevalence": 0.04 - }, - { - "value": "0d50c410618c3c3bf6cc5539e417e8e54ff41872153e399062d92afdde3fa06e", - "count": 1, - "total_related": 28, - "prevalence": 0.03571428571428571 - }, - { - "value": "0d6585ace9cb3a98d1cbad9410d66b675b9bb549abeb2ef454336db877c7c1ad", - "count": 1, - "total_related": 28, - "prevalence": 0.03571428571428571 - }, - { - "value": "08103fc9186d8b8b2745e8ea6ccff94ee24265820bcf8a5d0e3e30afdcbe6c3c", - "count": 1, - "total_related": 31, - "prevalence": 0.03225806451612903 - }, - { - "value": "0229f469523a766c5fed483f262385104d016d6efc345e9316547e02a1d56b20", - "count": 1, - "total_related": 32, - "prevalence": 0.03125 - }, - { - "value": "0362ced976befc2261c3dd6aa2c7c0090eb1a6b6f38c3dbcfad1e211ca7861b7", - "count": 1, - "total_related": 33, - "prevalence": 0.030303030303030304 - }, - { - "value": "03228a3ddc4af443182374ec6706c95be862f9b9561e12a54c6470cd312ece68", - "count": 1, - "total_related": 34, - "prevalence": 0.029411764705882353 - }, - { - "value": "032b934997e022cc20b601b17b75f6b9b9ae320b901cd5d5c819f3d434d3ce67", - "count": 1, - "total_related": 34, - "prevalence": 0.029411764705882353 - }, - { - "value": "08814f870210a44c521d51437fa625ada2d1e595f41480023f48dd82de96ef76", - "count": 1, - "total_related": 34, - "prevalence": 0.029411764705882353 - }, - { - "value": "0d40569212a13bb3de643bbfe81176ad2f008296865387367b06dbb4def90459", - "count": 1, - "total_related": 37, - "prevalence": 0.02702702702702703 - }, - { - "value": "0de8e10ef9a57e0a00d3364175fd4f33db405b2a0f623f5b8bd0ab49beff4b10", - "count": 1, - "total_related": 38, - "prevalence": 0.02631578947368421 - }, - { - "value": "07c5446322374d3af042993277d4923bffbf8dcaf2422fd0fb5ed51ae14b36f9", - "count": 1, - "total_related": 40, - "prevalence": 0.025 - }, - { - "value": "0675e1c6fbb159f4daae8e739bac88f4b2eef13a0dba7771f18ffce9c64a475b", - "count": 1, - "total_related": 46, - "prevalence": 0.021739130434782608 - }, - { - "value": "0fd66c0ffa96eb92ecfb1443b6caf6f7a7b7db624021bcf5bed4b619f0cbb1f2", - "count": 1, - "total_related": 46, - "prevalence": 0.021739130434782608 - }, - { - "value": "032f3505b87d7ab7e50a75f3eb75eb7715059f9135fa6beff0d965e5f775c6e4", - "count": 1, - "total_related": 75, - "prevalence": 0.013333333333333334 - }, - { - "value": "04eea4efb67fe69ccd4654e5b5f08b5525ad4ee412eb4e9e4116524474f0d979", - "count": 1, - "total_related": 76, - "prevalence": 0.013157894736842105 - }, - { - "value": "0f91e44ebde09408a9d9d88119dbb0754877ab637f05792cb379a38fb99b622f", - "count": 1, - "total_related": 92, - "prevalence": 0.010869565217391304 - }, - { - "value": "05b856ad5bb6de4e96b1ec8bfb2ff49217f882d4bad30339af6144624237c12a", - "count": 1, - "total_related": 93, - "prevalence": 0.010752688172043012 - }, - { - "value": "0e9d465827c3792ad31797f9fd1b7f591a271ed5aea8ba3853c6bfa40df4b96b", - "count": 1, - "total_related": 93, - "prevalence": 0.010752688172043012 - }, - { - "value": "01dc9ba218f64a41c5959d6fdaa90189c8781b0fe919b75b83cab7cf190631b6", - "count": 1, - "total_related": 96, - "prevalence": 0.010416666666666666 - }, - { - "value": "0d2fb382a1fb74f807616aeb32163b8f108cec2266b86d9b7869bd9711a4e092", - "count": 1, - "total_related": 102, - "prevalence": 0.00980392156862745 - }, - { - "value": "0554d30eba2e4d90d0e9a18b87e98fdb5afa047228c61d562c72c708cc467345", - "count": 1, - "total_related": 103, - "prevalence": 0.009708737864077669 - }, - { - "value": "0c42cf8b50b17903b20d0d4a602a6812d0f3814c30d2fa37bc1a99857abdff70", - "count": 1, - "total_related": 104, - "prevalence": 0.009615384615384616 - }, - { - "value": "002029b6f532fb031ad90da6b9b615df103eb430f276823bbef05949432809f4", - "count": 1, - "total_related": 109, - "prevalence": 0.009174311926605505 - }, - { - "value": "0fda6181afcccd825778e185fa2350699092c33e22e08b848435bf28f4a229bb", - "count": 1, - "total_related": 109, - "prevalence": 0.009174311926605505 - }, - { - "value": "0fcf4056224c488433a2155b041f37256bd5cd536892765dd7f95c65d7ec9d68", - "count": 1, - "total_related": 112, - "prevalence": 0.008928571428571428 - }, - { - "value": "0a6f23c1d090af9f4213aadded26e0ab6e4b0ae46b60176056a6ea93bbdf6e00", - "count": 1, - "total_related": 113, - "prevalence": 0.008849557522123894 - }, - { - "value": "0edefa4dc4405e6bbc642c85851c16f0e5f2cedd1dcc83fd7e9aa89f46bf699e", - "count": 1, - "total_related": 113, - "prevalence": 0.008849557522123894 - }, - { - "value": "05961506d552b5937a325e0e93b4cecd71593c460417e31945d142b2c02d935d", - "count": 1, - "total_related": 117, - "prevalence": 0.008547008547008548 - }, - { - "value": "0ddb6e987646245a74691ec471f13ba9c44712aaa2d93c66217a043111a5c560", - "count": 1, - "total_related": 118, - "prevalence": 0.00847457627118644 - }, - { - "value": "0b23a154c5578957bda01e70d00fc842ca0f6577b596a6aee89387139d2abed6", - "count": 1, - "total_related": 121, - "prevalence": 0.008264462809917356 - }, - { - "value": "00e02bb9cffc25a332d1a47ae4ae14e4e16fa07397243f554a4901a6ae25c04c", - "count": 1, - "total_related": 133, - "prevalence": 0.007518796992481203 - }, - { - "value": "04cf15b8f3b8b5e1b562143955584b28f182f69442d1a91fb26e3f454022ae24", - "count": 1, - "total_related": 150, - "prevalence": 0.006666666666666667 - }, - { - "value": "015c5d28a9e79d78982cece69c6d9dc9522a1c2601148846fbf13b0044bd69d7", - "count": 1, - "total_related": 152, - "prevalence": 0.006578947368421052 - }, - { - "value": "04c74bf600b641679ba3e58cf1280b3381ce5bac160b97b0e8d2e0e62a2d83e3", - "count": 1, - "total_related": 154, - "prevalence": 0.006493506493506494 - }, - { - "value": "0568d1061ed73ef7d7510b227149cea826b3e8afbfecc51f3f70e6af36f4c6c2", - "count": 1, - "total_related": 163, - "prevalence": 0.006134969325153374 - }, - { - "value": "050ef4161e8213553dbb3d626073acfd27028609d0636a7d7d8ff33cdfdd66f4", - "count": 1, - "total_related": 166, - "prevalence": 0.006024096385542169 - }, - { - "value": "0a216c69038b8214c58d827932a2973da38ff7b48f7e29cfc5231aa4a0a8a8e3", - "count": 1, - "total_related": 166, - "prevalence": 0.006024096385542169 - }, - { - "value": "06ac3c5b770c93157ebe6ba9c12d83da2ee9fbdc9998b838364bacce657ca1eb", - "count": 1, - "total_related": 173, - "prevalence": 0.005780346820809248 - }, - { - "value": "048acbcb98e458adb9b96b756f6a72ab5787c8801b08cf3c1b2ba4365b0216b7", - "count": 1, - "total_related": 178, - "prevalence": 0.0056179775280898875 - }, - { - "value": "0abed94d9b64745ec915823ef063823902102fa9eae6a3dfd7036a78801cce59", - "count": 1, - "total_related": 181, - "prevalence": 0.0055248618784530384 - }, - { - "value": "0c5bca4b44fb1924b3c365224db946103a25956792e777fdb3e142d35d63bc23", - "count": 1, - "total_related": 182, - "prevalence": 0.005494505494505495 - }, - { - "value": "072584dbaafa1a9de34876d4a16dfb468898e675fa7af6049c5b4eeb68793286", - "count": 1, - "total_related": 184, - "prevalence": 0.005434782608695652 - }, - { - "value": "0c7eab150cb5a7cf898fa4610a0c0e6c2ca9fca39be6dd2c63fa1b96f4996cb1", - "count": 1, - "total_related": 185, - "prevalence": 0.005405405405405406 - }, - { - "value": "0cd22083fddf98e7fe4dbf2db7da9afb2dfffb95dedb2b40100b6dd8453819c6", - "count": 1, - "total_related": 192, - "prevalence": 0.005208333333333333 - }, - { - "value": "0c1db1d1aba61775fa3e7bdbabad5f18a1aff51bac7db4b6b808bf2675444ac3", - "count": 1, - "total_related": 196, - "prevalence": 0.00510204081632653 - }, - { - "value": "04430b619aaa96a00c4d37882294cd571da49415a0b652a4a3c6a30daddd92c2", - "count": 1, - "total_related": 201, - "prevalence": 0.004975124378109453 - }, - { - "value": "031a639261ca58801862a7b993bb625b03625312ddacfd42550d0df3125203af", - "count": 1, - "total_related": 206, - "prevalence": 0.0048543689320388345 - }, - { - "value": "0cb6fb244d6da1e03b2213543845c4dd680032d84bfb09c3cb06f2c7a535a30a", - "count": 1, - "total_related": 206, - "prevalence": 0.0048543689320388345 - }, - { - "value": "0e44fffc02c1ca922a1221a304b9287d24720fc7946e9be2852b6971d3d2770d", - "count": 1, - "total_related": 226, - "prevalence": 0.004424778761061947 - }, - { - "value": "0e4bc58478a97a6e6d911012026db84e80d9792037e3b29ccfe3e5bb8fdc7b92", - "count": 1, - "total_related": 231, - "prevalence": 0.004329004329004329 - }, - { - "value": "0cc5dad393fedfc057e85d70a5b1aa7ccd4509093d267860f87949d35054aa4a", - "count": 1, - "total_related": 252, - "prevalence": 0.003968253968253968 - }, - { - "value": "09e158988d7c6226f3f3de2bf04ea3dde08cb309424d1e61e1d18fe3f51ead99", - "count": 1, - "total_related": 254, - "prevalence": 0.003937007874015748 - }, - { - "value": "0e53bf145b5c4d2d55375117c8e2abc12a31191a62c633b8abab2624f3353901", - "count": 1, - "total_related": 292, - "prevalence": 0.003424657534246575 - }, - { - "value": "019b770492c29765f546ef986bffa2b9d1c336fac524e216d5f46abce4969b31", - "count": 1, - "total_related": 295, - "prevalence": 0.003389830508474576 - }, - { - "value": "0c470a89e0852af3773c5661bf809b6daede7b5321d619e2cc0928f051ca63c5", - "count": 1, - "total_related": 308, - "prevalence": 0.003246753246753247 - }, - { - "value": "0cd8de9186c7af16a21c8b3fada884f338d9a69a5692c557493ad5a45bf49e0a", - "count": 1, - "total_related": 324, - "prevalence": 0.0030864197530864196 - }, - { - "value": "099a3b878f6f0fed085db70fd81f9fc5bec09f8f800750637f9496a22c4c57c0", - "count": 1, - "total_related": 346, - "prevalence": 0.002890173410404624 - }, - { - "value": "07dbdb80645011e65b13f2a08dea59a63259dbd5fb177cc2beb7fdf14c55bdc4", - "count": 1, - "total_related": 408, - "prevalence": 0.0024509803921568627 - }, - { - "value": "0f821b2f1607906e3587cb88a31e8fc7fce04dcb1904a3d602a9c055c5d7df15", - "count": 1, - "total_related": 451, - "prevalence": 0.0022172949002217295 - }, - { - "value": "0476446cf83653dd3fb3af48556bb3272443e0e873f41bfeef9d1bcb7b6ea32b", - "count": 1, - "total_related": 454, - "prevalence": 0.0022026431718061676 - }, - { - "value": "0c17e4c697e2a62b111a729a3edab763ff93ce19ba8669b8b60d3d3712ca6422", - "count": 1, - "total_related": 480, - "prevalence": 0.0020833333333333333 - }, - { - "value": "01437200893b7323ffb31d52c1c9ccc23a9ede1f2f7f339cd293ffe4e020e92d", - "count": 1, - "total_related": 489, - "prevalence": 0.002044989775051125 - }, - { - "value": "07fa6b34d01b27f6352248fa0b063c7859aa03cbb15850ac7f34f455cfc46080", - "count": 1, - "total_related": 496, - "prevalence": 0.0020161290322580645 - }, - { - "value": "054d3269e9cc6376446459b25a749299fae1671ced92033c53306017a4ffdc28", - "count": 1, - "total_related": 500, - "prevalence": 0.002 - } - ], - "compressed_parents": [ - { - "value": "7010b962fefc8fb879e19b1f170345478875b81748b5a146218a7b0337627060", - "count": 8, - "total_related": 105, - "prevalence": 0.0761904761904762 - }, - { - "value": "1939d9fdcf831dc4cac001ba193669c75a336258bc99a1775471554229e4a69b", - "count": 4, - "total_related": 24, - "prevalence": 0.16666666666666666 - }, - { - "value": "6505a1e9f8658e35e54ac19a867c77dee8c0d2c1f74c52fa070ad7055d1924d8", - "count": 4, - "total_related": 24, - "prevalence": 0.16666666666666666 - }, - { - "value": "fdacd42a9fa5043487ab6c6d52b612e0eeab9beb61aa9bde1433655688638c7b", - "count": 4, - "total_related": 24, - "prevalence": 0.16666666666666666 - }, - { - "value": "5816eb32cbaadfc3477c823293a8c49cdf690b443c8fa3c19f98399c143df2b3", - "count": 4, - "total_related": 26, - "prevalence": 0.15384615384615385 - }, - { - "value": "09b83a501b8f919fc4861735097dd50957f21e81209d362b4fa425bd3348a495", - "count": 4, - "total_related": 32, - "prevalence": 0.125 - }, - { - "value": "14dd59531e312e29268c6bf88b25e8bf809f62139a07f587bac93d6d376fe27d", - "count": 4, - "total_related": 32, - "prevalence": 0.125 - }, - { - "value": "27f6c9a0765f8b44bac8edccfe852facb89396d7acb8d39d75b07d1e5bea6522", - "count": 4, - "total_related": 32, - "prevalence": 0.125 - }, - { - "value": "290c2e4d0efbed23de0d41d1b821396f5f1003f6f123ee6160d6d5028d01b961", - "count": 4, - "total_related": 32, - "prevalence": 0.125 - }, - { - "value": "2c5a0b53e226e29577cc183ff4b3bd6383d8759d0805f81abbc60865259a2ea3", - "count": 4, - "total_related": 32, - "prevalence": 0.125 - }, - { - "value": "39db73a999d58072dab20d1e6f3a0a9336f4e58e164fb42c6de83a8cc75b2555", - "count": 4, - "total_related": 32, - "prevalence": 0.125 - }, - { - "value": "4d53dd46d7e98bc5d7ef4d76f7007032c425b8c463c41937c65c0a537c3dc577", - "count": 4, - "total_related": 32, - "prevalence": 0.125 - }, - { - "value": "68a5a26836e3ddc176c31a7e0fccd797a387e29433b64ead5617b356976b979e", - "count": 4, - "total_related": 39, - "prevalence": 0.10256410256410256 - }, - { - "value": "d58e9953d6d5fd77105e87e82ff85146f8ee24a7ce6d4f8a04c0fa8597f5c45b", - "count": 4, - "total_related": 43, - "prevalence": 0.09302325581395349 - }, - { - "value": "7a237af1bcbd832b8d6d676a1c88302d21948b4b23628a8ee759ddbf2ea5dccc", - "count": 3, - "total_related": 22, - "prevalence": 0.13636363636363635 - }, - { - "value": "7e301cd02c6417fa8cfdd9ba92a6cd786182cc3b2f0ea5684638d35cfe7379a0", - "count": 3, - "total_related": 22, - "prevalence": 0.13636363636363635 - }, - { - "value": "f2c3326437de2f87d25cb7c299fd6a02bfe3e727bfc070ac8bc7fba5c24d5fe3", - "count": 3, - "total_related": 22, - "prevalence": 0.13636363636363635 - }, - { - "value": "e92a575fcdd83ac80d5815083bf3b7473a829423db3d152e52139035bc2d99e8", - "count": 3, - "total_related": 23, - "prevalence": 0.13043478260869565 - }, - { - "value": "f5332879e5b75a6e3533bcb2f31ff7a5179b645b64df0007a4e09bf623c78daf", - "count": 3, - "total_related": 23, - "prevalence": 0.13043478260869565 - }, - { - "value": "18d453428d757f428404027c354fe583e9e7535db3ad3e4a770875cd0e958b38", - "count": 3, - "total_related": 24, - "prevalence": 0.125 - }, - { - "value": "e2e1a9e3755b61128889daa06f3d3693ef0f8c224e6ce26198c563c58e4f0bc6", - "count": 3, - "total_related": 24, - "prevalence": 0.125 - }, - { - "value": "c43dfda63e6e534776eb24d284d0bdf21115181b49d6e31091de795d957cb5fc", - "count": 3, - "total_related": 25, - "prevalence": 0.12 - }, - { - "value": "16d7a2c77bb6fba9542ffde5bd09bb1178bf7e902c8541476c1614f9b0d5d8f4", - "count": 3, - "total_related": 26, - "prevalence": 0.11538461538461539 - }, - { - "value": "2e8969c112cb914d619815961dfb43609be99b630f02a344901ffa9b85107f5a", - "count": 3, - "total_related": 26, - "prevalence": 0.11538461538461539 - }, - { - "value": "208bbf9e939b0fb9ac9551ba2c51d93ab8d8ea6723e93ceae5ce6c36309c400d", - "count": 3, - "total_related": 27, - "prevalence": 0.1111111111111111 - }, - { - "value": "620a3be1cac81e9e537cc983c726a2d1804ecf384be9ab3f5a4293b82ecc555f", - "count": 3, - "total_related": 27, - "prevalence": 0.1111111111111111 - }, - { - "value": "3b3eb953c3c14258f9a93728cc19bbef3451626f0dc0a584b9348069695648b5", - "count": 3, - "total_related": 31, - "prevalence": 0.0967741935483871 - }, - { - "value": "3b7214a6d3436170d10d6725fad7766a17796b18d901d090b712a903a918290e", - "count": 3, - "total_related": 31, - "prevalence": 0.0967741935483871 - }, - { - "value": "633f75f86a9cd02f32ac58703562bc5ed44a6506f180c0aaa561118e699493a4", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "6a1ad59d8b27d49ca1b55f1ec270f502d86da5a73e2ccfe0f32128cf7d050678", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "a0cc870741c3b07032b67fd9cea9428ccec4538114c7d42adea2eca832d4fff8", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "acbf5fbb079921e149c025ea20166589e6828589a0edd675fa8d6510dd68276b", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "eb2ff0e9839369785453382419984a82706b41fef0c31c8e0860ae2030bac7d9", - "count": 3, - "total_related": 32, - "prevalence": 0.09375 - }, - { - "value": "176e8a5a7b6737f8d3464c18a77deef778ec2b9b42b7e7eafc888aeaf2758c2d", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "1b1c8103d7cf206e0e055a95d9d3ff305d4a89f62c3d692a3d28745d3259158f", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "3315e5a4590e430550a4d85d0caf5f521d421a2966b23416fcfc275a5fd2629a", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "481629605412b02746f6ed7c102a391a4d8d49bd90f137bb262b723437de0937", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "51adde173872ba7378019324aca46e17e222d7b093518df6ad9d330324e113b2", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "53623ddbbeb28a9f4084a0ffc934e53e5770e8ef1570681713337a690fb26f89", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "57099b79a9824765f8be07471ec33c4cc0799abd877637a2a85affc50e163b1b", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "5b44a72ac38c9adeba133b516250f53d3cd13f4018cff7daf44a328ebc6c5ad0", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "6735668ded48372cec9a3a16fb58e5f08a5cd76ded7ffd4aa24233edb3499026", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "69cf309f71c3240525d00a14be5d0390c99313e24b0b6fef1d034f90c69cdd3d", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "6dd94d0b82d96f9afb3ecc48b779fcde5de22f8fd69fc46b27bbda99004adc76", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "8a649bb66b2a3b014e226da08118439611f6fdc91c69949ad0e04c3cdd7b12b5", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "8f924f8cc8457e7e77c791896e4f19ff90d79958a3cfef95b2f77fc8a521bf0c", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "945adaf666c38254072092c9690d928e46547c5309ad5d00e36a4add9b48083e", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "9de0c94bffe2fb7a87d05fd0087fecefa68c9b76c20f746cad7523f335f719c2", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "a80884ac34c1bc3b351bb30a95ca1944ecad407b22442caa087d06486b8a0d5e", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "b0dd8c5bc3a8609f4c963c572f92f5a91da663e92e10c26ce385ecb27999db18", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "ba54f79c32806b8d7e8f023b8339b1882761eecc3a5f8b9d40ab764bf2ed3f26", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "c2d9a510d82a3e003a059c6448fff61ba9e39fe8ec6f079b90adabfc93f72b4e", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "c35414673681517a7931f37fb299edac13ed993afa3e9a0009f2e0983e02d8e2", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "c909d2214af7449e9aabc3dad45465e8786b5aa4d25ed6abffce2fc3d9547b8e", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "cadd48debc8640828d9c119789666e3402d3f6fc4f98519c6024b9b03c09e598", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "dfa115eec65529d0fa393e154f79323e39ca7667e1b8f99973792a2954047a00", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "281316e8e5a440db0f732c12248b2fea33491ee75ee1d26c017af862ea08e630", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "7464850d7d6891418c503d0e1732812d7703d6c1fd5cf3c821f3c202786f9422", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "022344029b8bf951ba02b11025fe26c99193cb7c8a482c33862c9bbaa5e5528e", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "0907892725021508ad379c523d17c313e3690e99ab939e02d7e4edb6ff79ce3c", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "d7bfa626bbc8e7db06fec500a84bcb25505119cd470bf3acdfd8252a270d2662", - "count": 2, - "total_related": 8, - "prevalence": 0.25 - }, - { - "value": "86bef9a4f1d68575d28d56ea01339ca5546ee43d735a76a916f3ff229b3aafe1", - "count": 2, - "total_related": 9, - "prevalence": 0.2222222222222222 - }, - { - "value": "3799a81d94b35f9a4f93cbd7fef9de923240ea4eb6955abe44370e52cdd2c8b8", - "count": 2, - "total_related": 13, - "prevalence": 0.15384615384615385 - }, - { - "value": "cdb97d58714877880417308e8f1a2502df2f5d41fd33c182790b27d5484d1e01", - "count": 2, - "total_related": 14, - "prevalence": 0.14285714285714285 - }, - { - "value": "3ce003e64e0cfc63ea17b002fa242af25b7fcdc184095f51c3967fb24c5b55f1", - "count": 2, - "total_related": 18, - "prevalence": 0.1111111111111111 - }, - { - "value": "082b5199210db255dbae87a8ac89652588803541e8add620a958e8a0230488e1", - "count": 2, - "total_related": 19, - "prevalence": 0.10526315789473684 - }, - { - "value": "0e8842ed343c5ac26e78c3e79578b343bd1b085ee01e61374ee908c8110bad7b", - "count": 2, - "total_related": 19, - "prevalence": 0.10526315789473684 - }, - { - "value": "d249ceb4c2ca688972e7e59dbc89cc13418ef59023908af0686db0430a395522", - "count": 2, - "total_related": 19, - "prevalence": 0.10526315789473684 - }, - { - "value": "ca0127ec4bd2a0f4e2adbffeed0572a8b9f1539a5e18c25de8a198b29fede490", - "count": 2, - "total_related": 21, - "prevalence": 0.09523809523809523 - }, - { - "value": "b21613f855303077bdff7eb5ad75adccd76c2fb8c9c36111ed00e0829da583eb", - "count": 2, - "total_related": 22, - "prevalence": 0.09090909090909091 - }, - { - "value": "2d0b746b674af876858cdb38c77b4cd7986be618f608cc9ccd404ca2f4622faf", - "count": 2, - "total_related": 23, - "prevalence": 0.08695652173913043 - }, - { - "value": "3656925f16d5fb5e1e1ad82d96c270935ff4cc65a3ced68fa6896efffbbc01ea", - "count": 2, - "total_related": 23, - "prevalence": 0.08695652173913043 - }, - { - "value": "4053bae09c135978a4979d78086950ab556a5b967b6af244fc837b9f797a3a37", - "count": 2, - "total_related": 23, - "prevalence": 0.08695652173913043 - }, - { - "value": "4141ef4f175e7271fe5e7f68deaf37ba51aababd91e1939d52c368adc86eed61", - "count": 2, - "total_related": 23, - "prevalence": 0.08695652173913043 - }, - { - "value": "66d0c1a327746721825449b8e27147ebdc17844f9da2b39677418f19ede2b7be", - "count": 2, - "total_related": 23, - "prevalence": 0.08695652173913043 - }, - { - "value": "7a0c678c3914ba0baf0afdaf62501ac60775468cf7d572311f2591c65a38eac8", - "count": 2, - "total_related": 23, - "prevalence": 0.08695652173913043 - }, - { - "value": "d8d9fe9d745f52fbf228c5237f5b356a2b1121a5cbc0d2206dd414c1183b2235", - "count": 2, - "total_related": 25, - "prevalence": 0.08 - }, - { - "value": "252ece5f66c902e33ff8ccc5a6a706bd97dbfd45e85fe0c6d9a098b0a2e7b3ae", - "count": 2, - "total_related": 26, - "prevalence": 0.07692307692307693 - }, - { - "value": "c08ba7c0297cd515c5a24918f6e1ec705b72cdeea40078494d8b51de447b6b8c", - "count": 2, - "total_related": 26, - "prevalence": 0.07692307692307693 - }, - { - "value": "1fba098a58f8326c59b39045c3f07a1adce1bbfa23225e240e0f6fc5a2b2605d", - "count": 2, - "total_related": 27, - "prevalence": 0.07407407407407407 - }, - { - "value": "603d21059e14e2ded40170b4ab3ed534c7dd0a0de5ca94d2e364e81b26286652", - "count": 2, - "total_related": 27, - "prevalence": 0.07407407407407407 - }, - { - "value": "7cb4365e642d52118bc0cd1dc0a33b613759335efe0e764d403847f63961557a", - "count": 2, - "total_related": 27, - "prevalence": 0.07407407407407407 - }, - { - "value": "b6c85422297261aa9a3ba06a84718ffa6553175532ac549bf224ed845a4afce1", - "count": 2, - "total_related": 27, - "prevalence": 0.07407407407407407 - }, - { - "value": "b7032a3429273573638e1bfb9b2b921210a0019efcda466bef41153161f3d104", - "count": 2, - "total_related": 27, - "prevalence": 0.07407407407407407 - }, - { - "value": "d667492633c6a0141e4147cfe0f6dfa6c73c350bb64b858e85fcb645a03b4ba9", - "count": 2, - "total_related": 27, - "prevalence": 0.07407407407407407 - }, - { - "value": "16f93130d475052795868f3bfca505f30492efd8ae3ef60de963bc2e8ebecbef", - "count": 2, - "total_related": 29, - "prevalence": 0.06896551724137931 - }, - { - "value": "887fbf39125451a667977c82b989a2cdba78a888d228f941b8bae6d7dbb26433", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "979ef0f43f25a6707fd98f6f0cb6e8452c24f41216ff53486781f487803d69c4", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "be8a8d5433c45ce875dd1e78e612c585a96277f04650e8f2484d5286981495b8", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "4e7b5520ee2630d7a556c29ec186b22f4c4bccf2f7f9705adb456e5e1a88a702", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "60dfeb6fd3b5c4ec981cfc770feeef73ab72df4ce7389d5ae773c6ed9bebd5e1", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "88a4362f2aa90a39f610d390a5e6eede2d79434d13274d403e2dcd129e494c72", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "a5a03dc6641104a241653cff56d8b983ee88506246151e02895224a1900a759b", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "aec3ced40a3451dc2c6b1704cc50b0e0c8e549faaa8ae42b6d6f421b4fc2ef8a", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "c59dcf0abbc4b1a1c03a37fd78b0e5553d2b2061f5ec819c142fe9037a13d8e1", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "dd2e6ef9e47cae9aff728898fd46b814e999a6ad42c6eab8642795b57a66b185", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "66e96fbd6e977ddef3f0a2924978d92e5d67bd96e68dc4832f5041dbd40bcfc9", - "count": 2, - "total_related": 32, - "prevalence": 0.0625 - }, - { - "value": "c08337b2b166e16dd49695c0341ff470a4d42abcec7726320178a2df7d12658c", - "count": 2, - "total_related": 32, - "prevalence": 0.0625 - }, - { - "value": "be17fdbe8d7e674ec397cd457dda1b78824ed6597cdef665d1adbf31eaf58d66", - "count": 2, - "total_related": 33, - "prevalence": 0.06060606060606061 - }, - { - "value": "dfe41670127e628b7e8c9fc4602b73fb07d77bb85c6f77780469837cf5e271f5", - "count": 2, - "total_related": 34, - "prevalence": 0.058823529411764705 - } - ], - "dropped_files_sha256": [ - { - "value": "64e7a255a1af1b54fd9243faacb76a6527513fecf1b26bc3c9b8d3824dc9bdf9", - "count": 10, - "total_related": 1234, - "prevalence": 0.008103727714748784 - }, - { - "value": "cd198a3ad75a2b72b1f2c40c06920cd089b64eba38db3552628a4b427797cefc", - "count": 6, - "total_related": 157, - "prevalence": 0.03821656050955414 - }, - { - "value": "817c7650f5eaa0b4d4fc607a3fd139916a312004b1decf1f07eaba72e49f144c", - "count": 4, - "total_related": 17214, - "prevalence": 0.0002323690019751365 - }, - { - "value": "2f9117806e0e1ae4fc3b023b348910657b6948de2ecfd4f39f2846cebbefc1df", - "count": 4, - "total_related": 20602, - "prevalence": 0.00019415590719347637 - }, - { - "value": "7a656b15efaacb1179b883327369819483b5a0c2f2d8486db6c347f4f8a7ae61", - "count": 4, - "total_related": 32214, - "prevalence": 0.00012416961569503942 - }, - { - "value": "461e600ccc7d16f40952fdb9d181debe6a60cee3f2d22557c76e52f4c9c1ad4a", - "count": 4, - "total_related": 68943, - "prevalence": 5.801894318494989e-05 - }, - { - "value": "9bb17bd979c70074356294cf1814484a116ed0ba3a5bd425d4ddd87f78a4ba2f", - "count": 4, - "total_related": 98214, - "prevalence": 4.072739120695624e-05 - }, - { - "value": "aca002c988e2e3ee6044de23d24c162fd56db9ecba08a1c920ffec47e161c009", - "count": 3, - "total_related": 8, - "prevalence": 0.375 - }, - { - "value": "bd7b57a9303f0156e0737e9768a70f841b222a3e07e1426ecccfffdf2737bfe9", - "count": 3, - "total_related": 739, - "prevalence": 0.0040595399188092015 - }, - { - "value": "eaf9cdc741596275e106dddcf8aba61240368a8c7b0b58b08f74450d162337ef", - "count": 3, - "total_related": 1836, - "prevalence": 0.0016339869281045752 - }, - { - "value": "62a7038cc42c1482d70465192318f21fc1ce0f0c737cb8804137f38a1f9d680b", - "count": 3, - "total_related": 57123, - "prevalence": 5.2518250091906935e-05 - }, - { - "value": "07d07a467e4988d3c377acd6dc9e53abca6b64e8fbf70f6be19d795a1619289b", - "count": 3, - "total_related": 63384, - "prevalence": 4.73305566073457e-05 - }, - { - "value": "6976c426e3ac66d66303c114b22b2b41109a7de648ba55ffc3e5a53bd0db09e7", - "count": 3, - "total_related": 76023, - "prevalence": 3.9461741841284874e-05 - }, - { - "value": "a2ce3a0fa7d2a833d1801e01ec48e35b70d84f3467cc9f8fab370386e13879c7", - "count": 3, - "total_related": 84870, - "prevalence": 3.534817956875221e-05 - }, - { - "value": "70f316a5492848bb8242d49539468830b353ddaa850964db4e60a6d2d7db4880", - "count": 3, - "total_related": 96461, - "prevalence": 3.1100652077005216e-05 - }, - { - "value": "9814faaf0c20b20896bd24544b8c530808ed78510e3a209c9d3e720638048755", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "801789ec161b7749c8d9f59049754e09e8b324de36c6fc0b634d61814baf43b1", - "count": 2, - "total_related": 9, - "prevalence": 0.2222222222222222 - }, - { - "value": "8f1a07a9d25f8024707864cc12f5651aff384619400f5a4972edab0ea3bb8ff1", - "count": 2, - "total_related": 24, - "prevalence": 0.08333333333333333 - }, - { - "value": "b27c2532983d7acaf52615ae3f61365c22cc363b39b5341caee6bdf1866ebfb3", - "count": 2, - "total_related": 2253, - "prevalence": 0.000887705281846427 - }, - { - "value": "a7e962905d55271a4e295cc283baa09db6c28030d6df580d4f1562f639da297c", - "count": 2, - "total_related": 4475, - "prevalence": 0.000446927374301676 - }, - { - "value": "5bdeda730199a80255827cf5382f199f7f1fb2b2f626e63793b897faeedf11f3", - "count": 2, - "total_related": 4525, - "prevalence": 0.0004419889502762431 - }, - { - "value": "10f3deb6c452d749a7451b5d065f4c0449737e5ee8a44f4d15844b503141e65b", - "count": 2, - "total_related": 11924, - "prevalence": 0.0001677289500167729 - }, - { - "value": "f75e846cc83bd11432f4b1e21a45f31bc85283d11d372f7b19accd1bf6a2635c", - "count": 2, - "total_related": 18643, - "prevalence": 0.0001072788714262726 - }, - { - "value": "a479dd2807cb9817ef3ef7a31f3b7582339785e921b4284e55a1387dc38ec770", - "count": 2, - "total_related": 25796, - "prevalence": 7.753140021708792e-05 - }, - { - "value": "d9d776aba6b734e12a356cdd186a67394647a42d8cd12ebc9e27a3ddaddfb965", - "count": 2, - "total_related": 44611, - "prevalence": 4.483199210956939e-05 - }, - { - "value": "2e923178639849f5232473c3ae9fa451a9df4bc41751b2bf2d40045bc13ddcff", - "count": 2, - "total_related": 47992, - "prevalence": 4.167361226871145e-05 - }, - { - "value": "45f94dceb18a8f738a26da09ce4558995a4fe02b971882e8116fc9b59813bb72", - "count": 2, - "total_related": 50862, - "prevalence": 3.9322087216389446e-05 - }, - { - "value": "1f1029d94ca4656a577d554cedd79d447658f475af08620084897a5523587052", - "count": 2, - "total_related": 71970, - "prevalence": 2.778935667639294e-05 - }, - { - "value": "00019c5b1ea42f0360fe644e5051e27af6eb1f0682d99d153a195f00e1202dbf", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0112940D59A4C5E87F2BC62C2E9A0C636D1B5E99A6BDC8F307450B98E8FF9029", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "013340bd36a928b04b71f5a38cbc41c09cdb039b089f1cebb1e040a7e29d0d8b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "016E54CC9D92A353B2899E7C3781C92B883B648D9BB53638227863C6BBA2CC00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "019874d2e1d6cb7f5dcf3efee304754df9d847dc5e5be2798974d93d7e5ffa7b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "01c8f6967c59fae210188a748f7c4b85e776028b2537b3bfb54f2647424ba0a1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0240b8d38105a3019458ff7bd864dd2739dc8c71e80b8293c87a50465882dd16", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "024420e7876c4365e7e613dddbd825650e9118ebad385a6f04a63022a2a1408f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "04b84b3a7df74a38a43ef1b9db2e670ccbd05c615a7592271880440813c131c5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "053a57feea88987115692c9969ee3e3d8461bb588cf0217271ead71d170941e0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0212bfca695c0363af35bd09959da7c179c8f3fa03dbee13915a0a9d51e7d35b", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "048a4be18abd9c118f1199cd66cfae3410ee2312b89396a157d5a0e8d016eae1", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "027fdaad985c5d410c17e31c6a52634b1ff0bf72b34b623770831884b8b48aff", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "0167b6f7c3e0350d94e3688505ed4d551858551ce5b94b4bbde0e6719f92cc2c", - "count": 1, - "total_related": 32, - "prevalence": 0.03125 - }, - { - "value": "00353f8421601fbbb78b49d38559da40bca83288ea1d66d3fc82475928a3ee23", - "count": 1, - "total_related": 47, - "prevalence": 0.02127659574468085 - }, - { - "value": "00f53231c781c0fcc09d5a3c1c2f8b3f5578c606d3daa08b39b9f274ec1562fe", - "count": 1, - "total_related": 47, - "prevalence": 0.02127659574468085 - }, - { - "value": "0211d63be22f0af484c82d99b8835edb82c8553cabad8128632db25b81ddf489", - "count": 1, - "total_related": 48, - "prevalence": 0.020833333333333332 - }, - { - "value": "0339c3f9465ccd34dc7c100ddfeabc1be2a696e1cf0cf5a836154c7c3ce8cf5b", - "count": 1, - "total_related": 48, - "prevalence": 0.020833333333333332 - }, - { - "value": "00fd014ba1517eb87603f58b2eebcd21cfb8669981a9f689b9e3893437adcf52", - "count": 1, - "total_related": 50, - "prevalence": 0.02 - }, - { - "value": "04f6736734f3779b72ed5a93a4d84d81d83f40d99ed04ec68021b21adbbe8246", - "count": 1, - "total_related": 69, - "prevalence": 0.014492753623188406 - }, - { - "value": "05191f8f515c43d94fca4987fcc413030d86d02be5236501611e853f097ae246", - "count": 1, - "total_related": 87, - "prevalence": 0.011494252873563218 - }, - { - "value": "029468d0f54db566cf7ec6353d56d0de870003119e186d4344f16dd0079bc457", - "count": 1, - "total_related": 123, - "prevalence": 0.008130081300813009 - }, - { - "value": "0180fe7b83e0e6aab30dec4f5391d16edcaaf70a91957dccbcc3add87dfdfe24", - "count": 1, - "total_related": 133, - "prevalence": 0.007518796992481203 - }, - { - "value": "027655d921972f4ac727f9c5ac76bd292a0aed26ee594629b8fea2d5e8fd25a0", - "count": 1, - "total_related": 156, - "prevalence": 0.00641025641025641 - }, - { - "value": "04b2df8c2635a3103503831364464eecb34d1c3c193d46dca0ada4715d07d179", - "count": 1, - "total_related": 162, - "prevalence": 0.006172839506172839 - }, - { - "value": "00b782b3729708f79c4f94898dc8ba0c66ddaa0671f918e875686eba9f16258c", - "count": 1, - "total_related": 219, - "prevalence": 0.0045662100456621 - }, - { - "value": "01a147c540cb95b2bc88a519cb205d1fd1989eb34810bfd35bfa2d6c0857d36f", - "count": 1, - "total_related": 257, - "prevalence": 0.0038910505836575876 - }, - { - "value": "01f695361809a5e6bb60020932557676224ef3bbe04da2a16b14553a21bbc394", - "count": 1, - "total_related": 297, - "prevalence": 0.003367003367003367 - }, - { - "value": "02a84f9fd9e7394171ce58e746c74045310bc4edf8505e46fdf5d61e9045e89d", - "count": 1, - "total_related": 435, - "prevalence": 0.0022988505747126436 - }, - { - "value": "051ebca002bd308f791f0cca565b0b6eb26f1d2b35620bbfcf051c36dea27f04", - "count": 1, - "total_related": 436, - "prevalence": 0.0022935779816513763 - }, - { - "value": "0337b3e01107b83d8e54ed707a4981131d7453a4e7722b2837bb30ac18d8bdd1", - "count": 1, - "total_related": 555, - "prevalence": 0.0018018018018018018 - }, - { - "value": "00af4611514e1db6a969f1b15be803e7eaa0d4323d3d5216eb7a9f257392c07a", - "count": 1, - "total_related": 628, - "prevalence": 0.0015923566878980893 - }, - { - "value": "03516dd82ca99d3caf31f5bf495abc3cf1758ea6992cfd1c3812dee89df55831", - "count": 1, - "total_related": 692, - "prevalence": 0.001445086705202312 - }, - { - "value": "039dbc6b0e8ccdefcc06d618aea4da08d3fca7489dcbed6404827be29d41314f", - "count": 1, - "total_related": 972, - "prevalence": 0.00102880658436214 - }, - { - "value": "02c2f47188c84fcc9501a88ca9eb8f675c7c1e4bd9c22d9aa962469d79625808", - "count": 1, - "total_related": 2119, - "prevalence": 0.00047192071731949034 - }, - { - "value": "025b1282fbbc2f7f270e08b29414b7bbde469284564477f38b3519446aa16220", - "count": 1, - "total_related": 2692, - "prevalence": 0.0003714710252600297 - }, - { - "value": "03444f916ddb9a1c692c329f88b83b1a21d016dce46656091f21e903109dd65c", - "count": 1, - "total_related": 2786, - "prevalence": 0.0003589375448671931 - }, - { - "value": "0448ff6c00a9d808b70c4adba9e6c6e1d81569bbb0abcb335e1dd6f453b83334", - "count": 1, - "total_related": 2979, - "prevalence": 0.0003356831151393085 - }, - { - "value": "054eeda03a706b8eb6821a2cc2d47080c7d6cb031c82252ff9a13460fef3bb8e", - "count": 1, - "total_related": 3885, - "prevalence": 0.0002574002574002574 - }, - { - "value": "00ed5475b08b4a239836bc5d667bfaf343f4f2412cd7616d2aaf37bddd8582c2", - "count": 1, - "total_related": 5988, - "prevalence": 0.00016700066800267202 - }, - { - "value": "04512a63dce4d2d506ad612dc0bd7681ccf6e3655f7b6eaef7dfac8323d1ec0b", - "count": 1, - "total_related": 7910, - "prevalence": 0.00012642225031605562 - }, - { - "value": "0144ab6a52b9330c567de11a5c3a4aea35cdac47a4c106482aa24ae8054cdc6f", - "count": 1, - "total_related": 12074, - "prevalence": 8.282259400364419e-05 - }, - { - "value": "02b0b120f697c48133e8b547e8dc594bc5b9f1c1799b50c2c5ff917298548558", - "count": 1, - "total_related": 15316, - "prevalence": 6.529119874640899e-05 - }, - { - "value": "02c1aab437a9048ee29b285f7187d1eb3e8ad43977cd3f39b1cb2b40fad46727", - "count": 1, - "total_related": 17205, - "prevalence": 5.812263876780006e-05 - }, - { - "value": "041fd67afcbf679e2c2e131cb71feba410b11cf878e668d5216bb9dbcdd58a6f", - "count": 1, - "total_related": 17253, - "prevalence": 5.79609343302614e-05 - }, - { - "value": "4826c0d860af884d3343ca6460b0006a7a2ce7dbccc4d743208585d997cc5fd1", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": "039fe79b74e6d3d561e32d4af570e6ca70db6bb3718395be2bf278b9e601279a", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": "a7de5177c68a64bd48b36d49e2853799f4ebcfa8e4761f7cc472f333dc5f65cf", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "076a27c79e5ace2a3d47f9dd2e83e4ff6ea8872b3c2218f66c92b89b55f36560", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "2e5cb72e9eb43baafb6c6bfcc573aac92f49a8064c483f9d378a9e8e781a526a", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "38ac3c4fe37632e0a2df54b72fe6f746f0dff5179a0c98466b8f702a49fc4acc", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "1471693be91e53c2640fe7baeecbc624530b088444222d93f2815dfce1865d5b", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "58268ca71a28973b756a48bbd7c9dc2f6b87b62ae343e582ce067c725275b63c", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "6a17c684bc209562e101f2935f4ea6f076f6a2168cc83b0ba1caaa1fbccb8899", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "81ff65efc4487853bdb4625559e69ab44f19e0f5efbd6d5b2af5e3ab267c8e06", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "06de709513d7976690b3dd8f5fdf1e59cf456a2dfba952b97eacc72fe47b238b", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "205d000aa762f3a96ac3ad4b25d791b5f7fc8efb9056b78f299f671a02b9fd21", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "2842973d15a14323e08598be1dfb87e54bf88a76be8c7bc94c56b079446edf38", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "3193f3035a4f457d66bab3048880aac2eb8557027f6373e606d4621609af1068", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "3b651258f4d0ee1bffc7fb189250ded1b920475d1682370d6685769e3a9346db", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "4ac5b26c5e66e122de80243ef621ca3e1142f643dd2ad61b75ff41cfee3dffaf", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "6230814bf5b2d554397580613e20681752240ab87fd354ececf188c1eabe0e97", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "66501b659614227584da04b64f44309544355e3582f59dbca3c9463f67b7e303", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "6b0ceccf0103afd89844761417c1d23acc41f8aebf3b7230765209b61eee5658", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "7194396e5c833e6c8710a2e5d114e8e24338c64ec9818d51a929d57a5e4a76c8", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "7d35ad1d7f7c71718b6e8f91b50ff126e9fde479b4322449dbaf6c109f58e238", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "91270b2aef824a30a5fb28df199610dad34bbd176c53d846d291ba09a37878c9", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "9df8e969c682f1f448552c0f2dcd9785926e6f9b2006b8e124dc70974d20d415", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "a6ce2291a38cc10f8e64115260b6e1c9af60f2c5ac053289161369639bb90d1e", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "b4d4dcd9594d372d7c0c975d80ef5802c88502895ed4b8a26ca62e225f2f18b0", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "dace5ad59099429d8aed4ee279f1263efb65d64456931398465a396cf0e79bd7", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "04727fc926d09a5302cf3ede1f5768796deefedf06ff96bebb70b142b6f729c9", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "tags": [ - { - "value": "lnk", - "count": 76 - }, - { - "value": "url-pattern", - "count": 76 - }, - { - "value": "direct-cpu-clock-access", - "count": 74 - }, - { - "value": "runtime-modules", - "count": 63 - }, - { - "value": "detect-debug-environment", - "count": 62 - }, - { - "value": "exploit", - "count": 47 - }, - { - "value": "cve-2017-0199", - "count": 46 - }, - { - "value": "long-command-line-arguments", - "count": 39 - }, - { - "value": "checks-network-adapters", - "count": 36 - }, - { - "value": "text", - "count": 35 - }, - { - "value": "docx", - "count": 29 - }, - { - "value": "xml", - "count": 29 - }, - { - "value": "zip", - "count": 29 - }, - { - "value": "hiding-window", - "count": 22 - }, - { - "value": "long-sleeps", - "count": 21 - }, - { - "value": "64bits", - "count": 19 - }, - { - "value": "high-entropy", - "count": 17 - }, - { - "value": "large-file", - "count": 16 - }, - { - "value": "macho", - "count": 16 - }, - { - "value": "malware", - "count": 16 - }, - { - "value": "create-ole", - "count": 11 - }, - { - "value": "doc", - "count": 11 - }, - { - "value": "pdf", - "count": 11 - }, - { - "value": "signed", - "count": 11 - }, - { - "value": "arm", - "count": 10 - }, - { - "value": "html", - "count": 10 - }, - { - "value": "checks-hostname", - "count": 9 - }, - { - "value": "checks-user-input", - "count": 9 - }, - { - "value": "run-file", - "count": 9 - }, - { - "value": "calls-wmi", - "count": 8 - }, - { - "value": "revoked-cert", - "count": 8 - }, - { - "value": "vba", - "count": 8 - }, - { - "value": "executes-dropped-file", - "count": 7 - }, - { - "value": "invalid-signature", - "count": 7 - }, - { - "value": "contains-macho", - "count": 6 - }, - { - "value": "dropper", - "count": 6 - }, - { - "value": "javascript", - "count": 6 - }, - { - "value": "mac-app", - "count": 6 - }, - { - "value": "multi-arch", - "count": 6 - }, - { - "value": "cpp", - "count": 5 - }, - { - "value": "idle", - "count": 5 - }, - { - "value": "abused-exe-pattern", - "count": 4 - }, - { - "value": "macros", - "count": 4 - }, - { - "value": "create-file", - "count": 3 - }, - { - "value": "cve-2017-11882", - "count": 3 - }, - { - "value": "enum-windows", - "count": 3 - }, - { - "value": "exe-pattern", - "count": 3 - }, - { - "value": "via-tor", - "count": 3 - }, - { - "value": "assembly", - "count": 2 - }, - { - "value": "contains-embedded-js", - "count": 2 - }, - { - "value": "cve-2019-12259", - "count": 2 - }, - { - "value": "cve-2019-12265", - "count": 2 - }, - { - "value": "open-file", - "count": 2 - }, - { - "value": "overlay", - "count": 2 - }, - { - "value": "pedll", - "count": 2 - }, - { - "value": "persistence", - "count": 2 - }, - { - "value": "sets-process-name", - "count": 2 - }, - { - "value": "spreader", - "count": 2 - }, - { - "value": "auto-open", - "count": 1 - }, - { - "value": "base64-embedded", - "count": 1 - }, - { - "value": "checks-usb-bus", - "count": 1 - }, - { - "value": "contains-pe", - "count": 1 - }, - { - "value": "cve-1999-0016", - "count": 1 - }, - { - "value": "cve-2004-0790", - "count": 1 - }, - { - "value": "cve-2005-0068", - "count": 1 - }, - { - "value": "cve-2022-30190", - "count": 1 - }, - { - "value": "download", - "count": 1 - }, - { - "value": "encrypted", - "count": 1 - }, - { - "value": "legit", - "count": 1 - }, - { - "value": "mp3", - "count": 1 - }, - { - "value": "msi", - "count": 1 - }, - { - "value": "obfuscated", - "count": 1 - }, - { - "value": "one", - "count": 1 - }, - { - "value": "peexe", - "count": 1 - }, - { - "value": "python", - "count": 1 - }, - { - "value": "write-file", - "count": 1 - }, - { - "value": "xls", - "count": 1 - }, - { - "value": "xlsx", - "count": 1 - } - ], - "main_icon_dhash": [ - { - "value": "601e0e9f4b271101", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "232b2b23232b2b2b", - "count": 2, - "total_related": 24, - "prevalence": 0.08333333333333333 - }, - { - "value": "0000080f33060068", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "000d310f49010700", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0011093737472700", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0030b000d4e42880", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0101012b21030303", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "02002b1340008040", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0323270307100000", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "040e8e0e13250408", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0617010321410101", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0701012123030307", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0c0141ce072b2323", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0c0d210321410901", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0d0d370767271129", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1101010115111307", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "230b231323232323", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "291525595b812541", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "440e410709114108", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4901012d21595501", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "700b4d3101000016", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2203411103213333", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2345444444441402", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "68d4a043c3000200", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "0c2d101b51191800", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "0301000000000006", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "c4c0ccccccf4d4dc", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - }, - { - "value": "0319000100000000", - "count": 1, - "total_related": 303, - "prevalence": 0.0033003300330033004 - }, - { - "value": "4109090000000001", - "count": 1, - "total_related": 1540, - "prevalence": 0.0006493506493506494 - }, - { - "value": "74e4d4d4ecf4d4d4", - "count": 1, - "total_related": 1812, - "prevalence": 0.0005518763796909492 - }, - { - "value": "2125000100000000", - "count": 1, - "total_related": 1914, - "prevalence": 0.0005224660397074191 - }, - { - "value": "0311000100000000", - "count": 1, - "total_related": 2040, - "prevalence": 0.0004901960784313725 - }, - { - "value": "0000000000000000", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "0101000000000000", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "0301000000000000", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "main_icon_raw_md5": [ - { - "value": "bb8dda782cb853ef71ac5ca2884d83e1", - "count": 3, - "total_related": 264, - "prevalence": 0.011363636363636364 - }, - { - "value": "5f2f851c5be5527f9c29ee0c9db1bd18", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "3565ac5b0aa3ef8ef171bc6eed76a133", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "1e257cb85234079c78c4f511a8097c38", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1ec9057a60fa9b800df647f1ee907d67", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1f15f393601e934411729021bd1d97f4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "21f82c2d1c433634e6279cdbdb85717f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "29e99ae57a5fb2e90cf1b6dd76392678", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4a972f889532aeb8c3108a6cc382f1e3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "566e4d365c16ba0a60789ce4c6e0d5fe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5750f02b0b806ce9a58ed9b26c78995b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5a9279e157cfb7027fc7a000d95c4efb", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5cd1bf662431ffa62517b6d161d2f60b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "608222b0270544b7cade23ba16034502", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "6b207de88e13a91d0bfb7d85e378654d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "752ba87e760afad022dff1170c9be80e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "81fb4281b704e9d2701d9412c444da39", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "83514d03544f61367c04bf91851c19c0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "854e6caeded5efcdce44cfcaec04c557", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "885c01f33a832c82f042be84cc95be15", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "89e9e5e3d942c5b75a612409a8b35d27", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "92e2b1d7d0b97a20bb226bdea257e880", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "988a02ae0a3bec1f9efbd8b242bbf77c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "e705b92c2d7b9ae9243420959a2699df", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "f93d3a2e7d5cb9f273117b64f203fe7f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "fe8226d1c1b757d795fa007693631ed0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4f07f9dd6e3b681c7763c758c73c4294", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "5313e72ef7229d53f5f9e7844114aff8", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "6a297d5a95cb3557ef106b573e09a4ee", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "ae9a79cb5cf1f9f7424558d7f2ccb2d9", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "f2370f71b957c85d59ff13d7fdf22d59", - "count": 1, - "total_related": 19, - "prevalence": 0.05263157894736842 - }, - { - "value": "4833e2f770db4dfea7aabc5d3ee4ae89", - "count": 1, - "total_related": 43, - "prevalence": 0.023255813953488372 - }, - { - "value": "a795c90d481bbcfbe67db47a61979cd2", - "count": 1, - "total_related": 74, - "prevalence": 0.013513513513513514 - }, - { - "value": "96145e809a3ddbe1fe185574cae1968c", - "count": 1, - "total_related": 294, - "prevalence": 0.003401360544217687 - }, - { - "value": "dc44086d7d53180fd9cf0d810ed8503e", - "count": 1, - "total_related": 854, - "prevalence": 0.00117096018735363 - }, - { - "value": "45f28067d31a1502821934edb953794d", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "f60828f26b15beebfd888d189a02c5a3", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "vhash": [ - { - "value": "1acf037c16ba5e009090f1f579e0379f", - "count": 26, - "total_related": 1121, - "prevalence": 0.0231935771632471 - }, - { - "value": "af7bbcca6ef3cfeb111e52ddeac2f7cf", - "count": 21, - "total_related": 35, - "prevalence": 0.6 - }, - { - "value": "170ef62b38fb053cfe94b93a1c402df1", - "count": 14, - "total_related": 1124, - "prevalence": 0.012455516014234875 - }, - { - "value": "e9c83efda6ce065941ec02671e214ab5", - "count": 13, - "total_related": 27, - "prevalence": 0.48148148148148145 - }, - { - "value": "0b66a39a4cd9d58d1988ad24f27e5742", - "count": 13, - "total_related": 62, - "prevalence": 0.20967741935483872 - }, - { - "value": "914cf5aa6de4e17cd10748d258a96992", - "count": 8, - "total_related": 8, - "prevalence": 1.0 - }, - { - "value": "7af4c168aa328ef6a56050fb86544534", - "count": 8, - "total_related": 540, - "prevalence": 0.014814814814814815 - }, - { - "value": "9695d5db76a0e24aeb2d8bf9f90e57e8", - "count": 7, - "total_related": 490, - "prevalence": 0.014285714285714285 - }, - { - "value": "227ecdf749298aa9bc6c5d84cfbff2c0", - "count": 6, - "total_related": 7, - "prevalence": 0.8571428571428571 - }, - { - "value": "c2a2ad7041b1ec5271c0e0fd10a09db5", - "count": 6, - "total_related": 8, - "prevalence": 0.75 - }, - { - "value": "d5fedc4b519225cdf73f7bbc5285cef0", - "count": 5, - "total_related": 7, - "prevalence": 0.7142857142857143 - }, - { - "value": "db6f4f9c79014df66c8eb4080879c7ae", - "count": 5, - "total_related": 204, - "prevalence": 0.024509803921568627 - }, - { - "value": "115086655d15551555557az5oz1ez1", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "542a4573e35506870d0597063df49b51", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "e84afc82dcf59a951a6657d8924ae44f", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "647a20017f9cacd80b5d1e6acdc40040", - "count": 4, - "total_related": 6, - "prevalence": 0.6666666666666666 - }, - { - "value": "9c4c1ed29934ac27be729cd4fcf2699f", - "count": 4, - "total_related": 96, - "prevalence": 0.041666666666666664 - }, - { - "value": "3fcbde667af72e4a5dc5392a5f828f4c", - "count": 4, - "total_related": 241, - "prevalence": 0.016597510373443983 - }, - { - "value": "9c261284c021d97c5c582580d1e95e6e5", - "count": 4, - "total_related": 306, - "prevalence": 0.013071895424836602 - }, - { - "value": "3da4e10a8fcfdabb132ae1a4032fb8ae", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "ada0c76fde04d584ee11da04ee0fbbbd", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "e687ca0b19858056f107954afeaf0814", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "ae53399968ba0dd9576ee4673507eedc", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "b596727335f9e38ac6f753475109bbef", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "ba406fac0d45b479e5f8a74f19fd649c", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "f75f736fa78c2991bf5fe47ee1eb10d9", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "4af279b2b622e8e77dda96bee2717182", - "count": 3, - "total_related": 7, - "prevalence": 0.42857142857142855 - }, - { - "value": "73e1339f68f765653c8490f5ca61470e", - "count": 3, - "total_related": 7, - "prevalence": 0.42857142857142855 - }, - { - "value": "b42a70c30f17db82afd0fb45d1df4c2c", - "count": 3, - "total_related": 9, - "prevalence": 0.3333333333333333 - }, - { - "value": "c580863924ed5d52f29a00b01b4f4938", - "count": 3, - "total_related": 9, - "prevalence": 0.3333333333333333 - }, - { - "value": "ad8199d98b8eda0f476ac5cec9de6744", - "count": 3, - "total_related": 2727, - "prevalence": 0.0011001100110011 - }, - { - "value": "07be3a681990854460476df92e4c96fd", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "14f5a3b875beb984227bc23aa687a09e", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "2831d1c0cfeaa6aca5f7ca5fff4b9def", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "3e51b75993ac6ae5dbb9b8bd9d49458c", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "5787bdd36c2d24d5c975ae59b2a57572", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "5e5a4b0e7df535bb440291c1682c0034", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "715fe308285b89cc671b0dc3df1994be", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "92e606a623ba0c8215479d02c147d89a", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "9bf2b9baa00bbe5ce72dc7281198c4ce", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "a24bf7fa4cf07593061b5364ae658ac0", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "aa80fcf9984b3a9b3ba58ec4027a9b05", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "ada988777a5be3732e4ecc60bf57bb69", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "b3f472ff20e1c8ee1bf51a866120efe7", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "b5e8a515f7e95003e7eb433b75d7ae2b", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "ec74e8d08241e86437e717a037b3e6be", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "6d34ee7e0067c467a61401e3fd58f536", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "71052d2dc5b7f3d6fe7c529eac1aed61", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "37a8fdd05f57336d242ba4076803eae1", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "380a5100e22d392f4e6e70e3ab224d80", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "3942d281dd4fcbea2287575a8a6761e3", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "3cebd42c793061dc7df4c7d6309046b3", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "43ffdea9803ac07a333fde6b218bc0c0", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "52de6c772b4efd6fe48161126511166c", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "7be1ee0599b6c1165a907ea313eeae1c", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "8dab8d6c959ecea5a005a4f907409091", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "44cf920f4aae53d65755222a21e96d37", - "count": 2, - "total_related": 12, - "prevalence": 0.16666666666666666 - }, - { - "value": "5f0f04c86c7729316db7901e4f12f259", - "count": 2, - "total_related": 14, - "prevalence": 0.14285714285714285 - }, - { - "value": "3aa00137122d59e5a241335e8dbd800f", - "count": 2, - "total_related": 15, - "prevalence": 0.13333333333333333 - }, - { - "value": "946a165331c08b7d9169950add896ba0", - "count": 2, - "total_related": 17, - "prevalence": 0.11764705882352941 - }, - { - "value": "f52a3dafc2e719f9861fd02a639b3d22", - "count": 2, - "total_related": 26, - "prevalence": 0.07692307692307693 - }, - { - "value": "f371ec7f855f82c3fb7c22c6b5a184d9", - "count": 2, - "total_related": 118, - "prevalence": 0.01694915254237288 - }, - { - "value": "98f6ea44139723ab014e645a13ff74921", - "count": 2, - "total_related": 119, - "prevalence": 0.01680672268907563 - }, - { - "value": "93bc5702541bfb54ad0b68a0e1b4ac28f", - "count": 2, - "total_related": 125, - "prevalence": 0.016 - }, - { - "value": "aca22f1dc88619ae731e626d180ccd54", - "count": 2, - "total_related": 190, - "prevalence": 0.010526315789473684 - }, - { - "value": "9bd8245f7a64f16db2530e5309ee903bb", - "count": 2, - "total_related": 456, - "prevalence": 0.0043859649122807015 - }, - { - "value": "8ecb8952758b6bc043aeb87b902a0652", - "count": 2, - "total_related": 462, - "prevalence": 0.004329004329004329 - }, - { - "value": "htm:4a6e59104d655a48121a2990351e47f2", - "count": 2, - "total_related": 591, - "prevalence": 0.00338409475465313 - }, - { - "value": "7c6f90b80361e148c76d18a82c268c64", - "count": 2, - "total_related": 1030, - "prevalence": 0.001941747572815534 - }, - { - "value": "34085a187a867c6da1d56c6303c90a6c", - "count": 2, - "total_related": 1635, - "prevalence": 0.0012232415902140672 - }, - { - "value": "b17f6eaffdc895aafa78ac31fd97da5a", - "count": 2, - "total_related": 3029, - "prevalence": 0.0006602839220864972 - }, - { - "value": "9d2c651eb10fa253f9df1f88e6210c2cc", - "count": 2, - "total_related": 7880, - "prevalence": 0.0002538071065989848 - }, - { - "value": "91bb1702326464ce6fa1efc620d78896e", - "count": 2, - "total_related": 16741, - "prevalence": 0.00011946717639328595 - }, - { - "value": "2ad79491af260da80064b39001954a68", - "count": 2, - "total_related": 80698, - "prevalence": 2.4783761679347693e-05 - }, - { - "value": "05784f2a780bf6ffbc299e41c0dfc4b4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "081959ade1628a376ca6f332e4d401bb", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0938f612c851183c6134b66fff082a9c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0babe526eb2a4788f806aeab52737076", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "10c305110aa980c5fd5b65fda04e3553", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "115076655d155515555az54nz1ez2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "117bfe9fa207ae000654991612c46256", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "162cd9417033e342b4cfe6a0930fc27a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "16aa30f1a7eae7eeccdf2f521f9cc24b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "17388e4f235b6be54be719dd35bfd12e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "015076655d151515155az49hz1lz", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "0336283f0996f304855642fd7eca4f5b", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "11f1466da2a75752cff1771b0856f1c0", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "115076655d155515555az51nz1ez2", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "066fe9f1945aad1323c8616611cea6ea", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "0bf3e1e142c34a7b18b79b164ae29ee7", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "02c3fdfed219715087158442db1fba7e", - "count": 1, - "total_related": 16, - "prevalence": 0.0625 - }, - { - "value": "072c148dcad4bfd2c91a5f713bdfc14f", - "count": 1, - "total_related": 54, - "prevalence": 0.018518518518518517 - }, - { - "value": "044066651d1515551az37!z", - "count": 1, - "total_related": 96, - "prevalence": 0.010416666666666666 - }, - { - "value": "0150267d|z", - "count": 1, - "total_related": 147, - "prevalence": 0.006802721088435374 - }, - { - "value": "fe43cc098163d8fb4f1b2b088de0949b", - "count": 16, - "total_related": 100000, - "prevalence": 0.00016 - }, - { - "value": "05e9c72b5b356a3386752cd92e16a401", - "count": 13, - "total_related": 100000, - "prevalence": 0.00013 - }, - { - "value": "7596fdd04dba990373ab2f3da0c7dd3f", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "9eecb7db59d16c80417c72d1e1f4fbf1", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "947b8a3e00e91dc438fd06e8ae1835912", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "9f0d05f05f728dcdec665b2025b11f03d", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - } - ], - "imphash": [ - { - "value": "1cf1007474fd32ebc96cdcb6646354bf", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "11a4255dc1fc05b110a1ac43defbeeaf", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2689da07297d37f471558dd4a5e0040c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "69f670dfafe0b3d0dcea8ec73e3f504d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "c9d90395d02f8633b74cfdad0eb63c70", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "9a245851a75a4fb6e87a52d12330118f", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "dae02f32a21e03ce65412f6e56942daa", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "behash": [ - { - "value": "f766357f574a4971fd89a1f92165fb23", - "count": 22, - "total_related": 8024, - "prevalence": 0.0027417746759720836 - }, - { - "value": "624088400f58ea0b66c1d3f719c949c7", - "count": 12, - "total_related": 8620, - "prevalence": 0.0013921113689095127 - }, - { - "value": "cd7e80ea128abcbba3c90743a3f83660", - "count": 11, - "total_related": 30, - "prevalence": 0.36666666666666664 - }, - { - "value": "bd72e4178c6fdca6e2350a298d14a596", - "count": 11, - "total_related": 52, - "prevalence": 0.21153846153846154 - }, - { - "value": "ed5fe902f15e6cc1834a2f83cdf9c3fa", - "count": 10, - "total_related": 17, - "prevalence": 0.5882352941176471 - }, - { - "value": "ba8b475bcffa0fea354f15a03b4907c1", - "count": 10, - "total_related": 2026, - "prevalence": 0.004935834155972359 - }, - { - "value": "c665c0b115b15045d41162c38e54caa4", - "count": 9, - "total_related": 4771, - "prevalence": 0.0018863969817648292 - }, - { - "value": "2518d2551c3475a9b75e2655ed947c23", - "count": 7, - "total_related": 22, - "prevalence": 0.3181818181818182 - }, - { - "value": "35baf5c8d45dd8d2471cbc3fc5ba0636", - "count": 7, - "total_related": 43866, - "prevalence": 0.00015957689326585512 - }, - { - "value": "f4b62afd57c4d8ed35432a8b39fba420", - "count": 6, - "total_related": 8, - "prevalence": 0.75 - }, - { - "value": "12d2a69b426c0c508214e274498ed47d", - "count": 5, - "total_related": 9, - "prevalence": 0.5555555555555556 - }, - { - "value": "5cb94e7281e96f3eb18cae509bd2b8c8", - "count": 5, - "total_related": 15, - "prevalence": 0.3333333333333333 - }, - { - "value": "efc6b029188d50c9f8c7c10439cad068", - "count": 5, - "total_related": 18, - "prevalence": 0.2777777777777778 - }, - { - "value": "86ca3ae1b4efbbc6897c16551a02b384", - "count": 5, - "total_related": 19, - "prevalence": 0.2631578947368421 - }, - { - "value": "b6e9c879bf99f0b26449363eae21f276", - "count": 5, - "total_related": 27, - "prevalence": 0.18518518518518517 - }, - { - "value": "b4509b4446015c4563ad98b209ad7f2f", - "count": 5, - "total_related": 89, - "prevalence": 0.056179775280898875 - }, - { - "value": "7d3c3f3386c9be1f5441f4b12ddc1edc", - "count": 5, - "total_related": 8028, - "prevalence": 0.000622820129546587 - }, - { - "value": "4ff1043431215f9ce2b5c2ba2f836dd9", - "count": 5, - "total_related": 10249, - "prevalence": 0.0004878524734120402 - }, - { - "value": "bf6203651216fe900759d05540eb6de5", - "count": 5, - "total_related": 39633, - "prevalence": 0.00012615749501677896 - }, - { - "value": "55e5e1c8c27d521ea4361436a752594b", - "count": 4, - "total_related": 6, - "prevalence": 0.6666666666666666 - }, - { - "value": "8ff9ad279d5ca7f24943a105c312a387", - "count": 4, - "total_related": 6, - "prevalence": 0.6666666666666666 - }, - { - "value": "b4d22ae7b9999ffb10ca25a61de0faec", - "count": 4, - "total_related": 9, - "prevalence": 0.4444444444444444 - }, - { - "value": "bb185a95d89d1c86fbdd5ab4b765cd57", - "count": 4, - "total_related": 10, - "prevalence": 0.4 - }, - { - "value": "b5b10a48b38bd98c8a20c4658d590505", - "count": 4, - "total_related": 39, - "prevalence": 0.10256410256410256 - }, - { - "value": "e7466fd6693bebc74cd034aa01e1ed16", - "count": 4, - "total_related": 48, - "prevalence": 0.08333333333333333 - }, - { - "value": "376aec31863ab84f584f9bc3aec00433", - "count": 4, - "total_related": 222, - "prevalence": 0.018018018018018018 - }, - { - "value": "30e5447baa0127537774668fc2d8dd4b", - "count": 4, - "total_related": 9410, - "prevalence": 0.0004250797024442083 - }, - { - "value": "dad80c0ac9c9de79ee4f2366290ed502", - "count": 4, - "total_related": 16472, - "prevalence": 0.00024283632831471587 - }, - { - "value": "4eb24bf1b1c53208ed783fb437536167", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "12b0eaec2e85359dbab7c8fe0cbf0763", - "count": 3, - "total_related": 7, - "prevalence": 0.42857142857142855 - }, - { - "value": "e819a99eefaece03a9ba64fb1455140c", - "count": 3, - "total_related": 7, - "prevalence": 0.42857142857142855 - }, - { - "value": "f862f19ce2283f8bf625592e4c28af9e", - "count": 3, - "total_related": 7, - "prevalence": 0.42857142857142855 - }, - { - "value": "70034bacee078290b9499401031d6977", - "count": 3, - "total_related": 21, - "prevalence": 0.14285714285714285 - }, - { - "value": "5af504020f10d5c24cd11805ba387693", - "count": 3, - "total_related": 276, - "prevalence": 0.010869565217391304 - }, - { - "value": "c6a5022a8695db80d8440d68aadfec07", - "count": 3, - "total_related": 1340, - "prevalence": 0.002238805970149254 - }, - { - "value": "bd9a35f292fcfe4335622427a58b0b0e", - "count": 3, - "total_related": 2118, - "prevalence": 0.00141643059490085 - }, - { - "value": "7555bb44eaa699c7c77a0bab3136b7c1", - "count": 3, - "total_related": 4017, - "prevalence": 0.0007468259895444362 - }, - { - "value": "0447c9335466461f787a95b1e7bd8744", - "count": 3, - "total_related": 5219, - "prevalence": 0.0005748227629814141 - }, - { - "value": "9c5d1c59457a70989c69d7d01f8a832e", - "count": 3, - "total_related": 19929, - "prevalence": 0.0001505343971097396 - }, - { - "value": "bcccf52645ee358c682d40593a42d30d", - "count": 3, - "total_related": 20597, - "prevalence": 0.00014565227945817353 - }, - { - "value": "f5b142780bf7a339f33d8629570a77b1", - "count": 3, - "total_related": 44251, - "prevalence": 6.779507807733158e-05 - }, - { - "value": "c783d99259b2065275f165fccd442cb0", - "count": 3, - "total_related": 83686, - "prevalence": 3.584829003656525e-05 - }, - { - "value": "013226902a65d305bbf270127efc1b9d", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "6271524d845c8848e4cf9a05c436a50a", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "1ca73933e5b670dc9a7c86228501292d", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "46d0dc66c0659dd808b7fc42d3f6104c", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "5ced9b4577fea91db8741ad53636ae40", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "19d5a189b2dd0ad11cebb5291a4a2e55", - "count": 2, - "total_related": 9, - "prevalence": 0.2222222222222222 - }, - { - "value": "694ebb33bb8c7f6e41a319a88ca8eb59", - "count": 2, - "total_related": 9, - "prevalence": 0.2222222222222222 - }, - { - "value": "2c6de5c8488e4ddce1fc2189e2ec2ca1", - "count": 2, - "total_related": 17, - "prevalence": 0.11764705882352941 - }, - { - "value": "30d3599397fe1a4563ef5c3cc10d16e1", - "count": 2, - "total_related": 36, - "prevalence": 0.05555555555555555 - }, - { - "value": "59a27ade1c27849c180426aeedaa5d41", - "count": 2, - "total_related": 45, - "prevalence": 0.044444444444444446 - }, - { - "value": "55fc366728f70ffaf0b4dba954dd5462", - "count": 2, - "total_related": 49, - "prevalence": 0.04081632653061224 - }, - { - "value": "64dca153677101180de92e42e41524b2", - "count": 2, - "total_related": 70, - "prevalence": 0.02857142857142857 - }, - { - "value": "2ed1439c1f3851add378bf2c1d80a4b8", - "count": 2, - "total_related": 104, - "prevalence": 0.019230769230769232 - }, - { - "value": "0ffe5c101c9494498125ef489bba53ee", - "count": 2, - "total_related": 125, - "prevalence": 0.016 - }, - { - "value": "73d4a052579a883fae2d613430116820", - "count": 2, - "total_related": 137, - "prevalence": 0.014598540145985401 - }, - { - "value": "7efb1ba8a9e2bbbd277ce7f04f2e2d67", - "count": 2, - "total_related": 150, - "prevalence": 0.013333333333333334 - }, - { - "value": "6ab502c9477796546cd3beec2432729d", - "count": 2, - "total_related": 399, - "prevalence": 0.005012531328320802 - }, - { - "value": "7c8e8319d88f8adca6aa53f36703a3df", - "count": 2, - "total_related": 719, - "prevalence": 0.0027816411682892906 - }, - { - "value": "28adbb6ffda57086ebf7a798fd272a89", - "count": 2, - "total_related": 1559, - "prevalence": 0.0012828736369467607 - }, - { - "value": "166ad8b69135be9fff49c0e3732e3215", - "count": 2, - "total_related": 1959, - "prevalence": 0.0010209290454313426 - }, - { - "value": "67ddb10c784f5ba42e4f9048dc7f4f68", - "count": 2, - "total_related": 2126, - "prevalence": 0.0009407337723424271 - }, - { - "value": "4caa00e67d05524fd58f89dbfb2133af", - "count": 2, - "total_related": 3044, - "prevalence": 0.000657030223390276 - }, - { - "value": "4b4f7eec7337cc1eb890bf5808ee98fb", - "count": 2, - "total_related": 3671, - "prevalence": 0.0005448106782892945 - }, - { - "value": "4560071f3946f7255c77153805e348cd", - "count": 2, - "total_related": 4640, - "prevalence": 0.0004310344827586207 - }, - { - "value": "3ad3f894f4c9210dc9790a4b3e124ec0", - "count": 2, - "total_related": 5708, - "prevalence": 0.000350385423966363 - }, - { - "value": "024b45440d8a3a6827f7c7fbb1bdfd94", - "count": 2, - "total_related": 8751, - "prevalence": 0.00022854530910753056 - }, - { - "value": "1f16493cafe2cf72a3ddb9c7d07165e9", - "count": 2, - "total_related": 23813, - "prevalence": 8.398773779028262e-05 - }, - { - "value": "218237c70ff7a3511dbc782cd0ae4345", - "count": 2, - "total_related": 34376, - "prevalence": 5.8180125669071444e-05 - }, - { - "value": "0288dcb2944d075bbb5ffa585335cfa1", - "count": 2, - "total_related": 41378, - "prevalence": 4.8334863937358016e-05 - }, - { - "value": "4c9f2464cd4d1a641f9cd7e84e5a7f5b", - "count": 2, - "total_related": 41489, - "prevalence": 4.820554845862759e-05 - }, - { - "value": "7ef40b524cb3ca471eb447c0ad1599d2", - "count": 2, - "total_related": 52371, - "prevalence": 3.81890741058983e-05 - }, - { - "value": "fd7358c7e7f4d2d645756a08e2f519ec", - "count": 44, - "total_related": 100000, - "prevalence": 0.00044 - }, - { - "value": "42b9104269a4e4277d70780d2e8ecdd7", - "count": 30, - "total_related": 100000, - "prevalence": 0.0003 - }, - { - "value": "0abef1459995846d53ebc1b564867586", - "count": 23, - "total_related": 100000, - "prevalence": 0.00023 - }, - { - "value": "e1cc7c0576578e6708d3a04a7afc2a69", - "count": 20, - "total_related": 100000, - "prevalence": 0.0002 - }, - { - "value": "9fcbde393f2f22333f9bedd64dba31ce", - "count": 14, - "total_related": 100000, - "prevalence": 0.00014 - }, - { - "value": "db141c1feec07c07d11cc308bc9c4188", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "d91b8482a5b9b2355cdea11491de3c8c", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "fe66e54118bb12b06dcbabb6c2d17206", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "7d62fd9d7600499c5c84ef011653e4e8", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "d0093e50adbfab933517c7db54afdc05", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "d25823a5e896502b9007632f370fe77e", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "03257c9f3bfe280f5c4613af95a51301", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "0c89448385ffc782aee1a3c1329bedba", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "0e1242fb619d193a586ca98a1687ade0", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "5c740c8c47970e581fd486e762b9b846", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "9a33336a9a9b4732fb6e6ff733984796", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "bdc373fc9c9e24e2a66fb477438523cf", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "f2a96f92c36218030b7cf2462e1a62dd", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "2aba1e011dc393bfeb613a3abcf0d40f", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "36d4d8ddbf85e7e39619ad169e1cbbd8", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "6b5656993a98bcf1e9bf55dfb5d30fb2", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "adb8af1a660afc6666dc16400fb2aceb", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "14999cadd4c7a42ad2bca9f7a52a2c48", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "408b160e9f6453931227f7d1887bb9ad", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "4e25d893ab7b96a57235a05611077136", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "76c6c8e44cd4f1dbddc0f6c2202c1480", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "7eb58e30b74038daa9b31b5d9df78cf2", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - } - ], - "tlshhash": [ - { - "value": "T100329E0327EA064CB2B6AA49823714350B77BE96A53DC70D01CC795D9FF39485C6ABE3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T100942384DA176CD1D8BE5F7F1152159AF6E30681E343AC02B4ED798E3FB1AC0078B695", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T100D533103F1C0ABD812CF25F945F2FAA4694DE485A7E85D6FBD2109B68BE303656B3C1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T100F4235CB8285EDACBF53CB61D8F1E6399B0E714468072A49F4B25534F6370FAAEC448", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10141061167E5CB61E3B7497F54FAD1828A22B2337D179A9E12C0E1CD5470608F835B2F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T1015100023BF64632E23B6D340877D3824A30FD61BC01D25E90949A8E5CB2B04DD79A67", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T1016501228C4C2EDFE35957F2AB1F3D6C3A1D7131F5C507990729CB8A61A0A7E895B10B", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10176A0B950B7E051069E1E622518B7733C064FB79C6E752E2BDC07A053F2C2B1FAAC65", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10271090E8F85EA4C03C517C250BFCDDC6AB849D42641D2FCB169E28A378DE96C639378", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T102863302CD6F7AEAD81873325B214455DC7F3A6A4881DE64FF63886AFFE9202CD31156", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T102E0ABC5D0748B02FF2197706032793B323486C303E3084B9A192AC2742DCD6270B7C2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T1033423D1C20AE65ECB11E77D190046B2912E1118731A1DFD1DE3E68FA3997836F2FA86", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10341F5F40D1D36981EC112639AE2111E51E831CC5C3226FFFAC6652CAD1EC85A27AEE0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10351BD16B4FC6C313443D85AFC418411094275BB521C393EE3EB7AA85876A87BBE3A17", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T103C5338757F936F6FD6C277852C65E6DEC2028E6847A25B0C54043A7217BF38C3A6AC4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T103F5BF7D54F7F0501D959E623A4CF7A22C078AABDC9E2E36272C4550A3F181B268EDF1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T1044101150B9956E2D3B78D7B1C6BF1829B72B4167E03DB6D0AC052CD8820A18FC35B6B", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10443024BC4AF2427F7B98A3F2F55074ED6504A2200574AB16FB57A80FE919A3B0C47E8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T104F02C2E04FBDB256810A0922F803A463E81818B030BCD083EADBA31DF49E068CE3380", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T106A423835787A4BA8627AC3E9932F30649F95B864576F28CD678C3295F8D34B349C087", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T106A423835797A4BA8627AC3E9931F30749F94B864576F28CC678C72A5F8D34B349C087", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10741EE1A17D54301E2B7893648BBF20246A2F955F816C7AF45C0268C9865304FC3DB6B", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T107A153986AFA6208923AF77C829FA54D61E4C017121FCDD1FD2CE2B05F8446502B6FE8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T107D533E694954868D01FF379B091D55BECE3C47CE5922A8D1B8A18B33B224EAC70F54F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10813198963A100F4E46747358CB29E15E773BC536339431F529442AB1FB36819D3977B", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10831D20A16A62212C373897B449FF2458B2ABD674D42DF6940D5914D1CA1014FC75F7F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T108D4CF12CB00203BE6C0CB7866171982D52D6C7BB85ACE064BC7276F271BBE9AD75D4D", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10911C076FD122A75443B8692B551C045FDC56B731A23A9DABB4CEE0D0F3C58741A470F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10915BFB964F7F0510A595DA2355CBBB22C0B8EA7DC6E2935332C095093E1C2F27CADB5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T109215772FE175536893A8B627426D492F9A119F36514A2DEBB0C91040F32F836AC5F0F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T109528452DE830C440BB573B253EE54C9C8DE178B216289FC746EC2989F799144AE8FF9", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T1098423249E536B3485C4F08A48A4CF50308771D7873A426D883E7B67E7DB7F62A3694B", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10A046C06B6AD40F9DD7AC23885931A16F6727C5007789B9F17B0477A8F2B7E0A93DB10", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10A5423E2ACA4E785DD99F766221186E8D23610EF3B2DE9DFB6710B64F34536500708F2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10AD533A661E1B493D5E950A43FE8C65EF0B118352DB232AF18C825B3F767246473C6F8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10B62B0D127E65C58C2E74FB368629D2B709273A5B569CF4A2054E0C07D60F06F97A316", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10BD5BFA5C5B9042ADA0EB27BF6E1A6C3EACC87C16064AD57440C0BD31D9B4BB9FD710D", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10BE0ABD5E1784E23EF614330B276BC2F327984C383E6080A78112E4A346C8C2560B381", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10BE4010A0B44F9D2DC9A35BCA49B680DE53D3B5206E2B119B9DB36509CEB363373152F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10D539DBF256568A9DD2C49333D843F75BAB96F0089DB27BF33F483609C67182426B141", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10DA4232C26524C2BE18A7066B1BFF1D563E067D97B99818E5C67E76C3F07014E6CA3C2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10E25DF20804C7CDED31687F0AB1F3D5A7A1DB272F1C952A51B29C7862560E3FA12769F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10E91EA4E5ED8E75E438213C644BECE9CADF605812660D2E8B01DD2C93388E56CB7D2F8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10EE24392B6D38D48DD06473949B34222632BFCA5AF9BC30B2644F70A5FF5AD08D1761B", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T10FB2CF586360CE05E2E337F52E7AC0988F61FF1A0D28566A3685774D98B2CD60A36773", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T111720754FFDC1226DE359239ECB3B72883B8BA447927CF4929C970986A437911E40F67", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T111742224D8DCADFED5AA1BF39F1575ADB1AEF053E5C886921478C3038C40F09A16786E", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11391099A27C8376CD63363098DBE8F98C5F608D019429D8864E7D58A7E0A493C73B26C", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T113E0ABD7E1694F13EF1147B194723C2B313596D703E28A0B58542D9238B8CC2162B391", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11441AC097BE51310C2778E7B14E6F2528B6B75566D16CF4D85C112882C62800FC3AF7B", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11475F170C05E5DCEF2675BC16B1A3C0E6689F0B2F0C6C7802725D3815941B6FA697EAB", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T114A4129FB2223F69C42CE2F67D5338CC172963046CC25246141A6C5E2DF23BF6D6B56A", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T114C5334218091AE6D3FE13B997DE8F1CF6A4357A700B7AA35250D5C73EBEB41A3191C2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T1157423FD43A05B6925DBEA1B921943E176F2C8D0CCF45DC3C8E4914BF96F18052EA8DA", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11583B6CBAF14085BC6ED213B537743012367E2AD4AF1637B245CB1842FE724A5B6EAC5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11591FA4E9E88E75A438213C2047FCEDCADF501852660D6E8B05DD3C93388E56C67D2F8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T1159423E698032374829BAF358A230A43FD0C34E5751739F2C97797920D6FD1DAAD18AD", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T115A2BFA8C669A86CD3B7E9FE840D08F1A21AE582D785AF1F3840F55C099094F472F7D9", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T116014C1819992B31D372CD3F84DA7313C83A7E17EDA26F5902A117846869610EC75E6F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T116141218D6C49E0C8B5E03E1E6F89FC805EBC52FA20D15A766353B2916CC6A653C47DF", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T116550122494C7EDED32917E1AB0F3D6C365E7232E5C55B960B38CB4A59B4A3B588700F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11671F81A9E85E95C438617C1A0BECDDC5AF949C02141E1FCA05AD28A338AE92D7392BC", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T116E061D9E1798F12EF31877195B3B82B33B49AC303F7440B695015423528CD616177C1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T116E0ABC6D0688F12EF118B709572792F21B69DC303E2080B694629A63428CD2271B382", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T117019A1ABB4E92676793B070692B5C5CBDD0C4BCCEB3E859790F4345330CAE84D27819", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T117528452DE830C440BB573B253EE54C9C8DE178B216289FC746EC2989F799144AE8FF9", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T117E533648C9FA5DFF7451C32C794C48F6D8AE8A4C3A71BAC68B035F1185AE4DA9F4181", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11821330E6FC60723C2B5CA33507FF281C529BAA2E943CEA840C092C86D61214F875D3F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11835232F98C23093E1DF46B86318C856B1302577ACB1767F18C466F39B475898B6D2F6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11841EE0A17D54301E2B78A3748BBF2028662F955F817C7AF45C0268C9865304FC3DB2B", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11853E7DB6B04089BC7ED45BB427B5B465322F21E4EE1030B1490A5807FE5B969B2BF87", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T118A31282D18B21A7F46E6E37CC700E06F1BDA5A52D531D431E5995203FD3B22D9EA63C", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T118E42362AB54409EF4B246B731400A4C7F640B81995B7FB2FB09F9E424D81D3E677ED8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11972CFB834D8CDBDD2F254F9DD06AD220BD09469E84CE1CD46B982CECA711642A3A857", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11991E84E9E88E61D4382138604BECE9C9DF6054526A0E6E8A05DD2C97388E56DA7C2F8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T119A1B51516093A4FCB274312FC7F0B5CC3F108B42D9E9F942093C99AB64E982B16961F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11A81E74E5EC8E659438213C204BECEDCADF6458126A4D6E8B05DC3C93385E56DB6D2F8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11B41A01A26D59700E3778A3B9CBBE70352A6B915FC16C7AD85C0524C6C55204FD39B3B", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11B51111417FA0A28D5B69F3EAD7AE3118572BC04FB025B9F53C4510AEC21504EA79B7F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11C63029DF1FF01B44A1F49BE2B920B90074CE54EEBD8AD3BA368513D38990E7596344C", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11CB302B536C75020F1D3A176AE6333792B9C2FA8CC940B153096FF846035BC1A72A9BC", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11D5423A63602AD012DD1467AFDE0AAEB3C542E777D862CF9238139D4378E40C59F8C67", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11D76334B52EED69BCB82397FBDBA96F495384D42DB629ABC02CCFD59C80CF45080C495", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11D81860A2F442F6D53D205C39E3F96ECD668C4B863490A4CE454F7BC279E924CBB25B5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11E31BD007AD94A11C2B25E7B2879F61519B57C15AF23CB5D1790E29C3524604E53EB23", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11E419B04BED14F10D1B68D7A28BAE65995B4BD56AE33CB9D0680E3AD21B0104F53EF17", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11F01E20C0D862B22C331CD3A04DAA32284753A47EDD2AF6A01E416D82569210A275DAE", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11F3633FCD2A5018FD5B9D3B6234DB183A9222B02C185925E0777C8ECE653B476BB5A43", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11F528342DE870C480BB573B243EE58C9C8DE178B216249FC746EC2949F799144AE8FF9", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11F613A1AED55EA44871822C3947F8DDA16F844942640F1FCA107E2CE6168F90DA7E36C", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11F640250D30C2609DBCB663C239B6119EC652FBB3FE6E017E8D188B5CDC76FA5A11242", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T11F6533D3BD033341532048AAE4418B2577BBEA8A1F9FAAD775AB635D8C5BE3410DD06C", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T12001C90918991A21C732C93F10AAB712C421781BEE53BF6F03E422CE2558000BA75F5F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T120219E1C33CA5714F7749D3F7E399707256A7927A9028F1F5672C1853C25908E87CC20", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T12131EB1517A982C2E2F28D7B1C3BE2108B66F803BD07CBAD078452C8D468614FC32636", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T121419C2A56D95722C2B38E7714A6F2028526BD12B827DFAD06D062CC1C15214FC7BE1F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T12141DC262EEA2A75C2B38E3745BBE2418625FA26B803DF9D44D055CC5C26504B43AE7E", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T121861251B9C8D2F4C48A46746A41A0CF34E16D9E81EDDB283ACECC237F91F69446D7B2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T121A423D1028558FCC7A3EDA5A922F3840E79F791D4EEB04D966DC71F86C860B689D08B", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T121A48A60819D7CEED3568BD0AB1F3E2E365DB162F2C947461328D7464270A3FA62718F", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - } - ], - "attributions": [ - { - "value": "lonejogger", - "count": 192, - "total_related": 215, - "prevalence": 0.8930232558139535 - }, - { - "value": "nukesped", - "count": 103, - "total_related": 4285, - "prevalence": 0.024037339556592766 - }, - { - "value": "flatdirt", - "count": 19, - "total_related": 19, - "prevalence": 1.0 - }, - { - "value": "todoswift", - "count": 17, - "total_related": 18, - "prevalence": 0.9444444444444444 - }, - { - "value": "lonerunner", - "count": 17, - "total_related": 25, - "prevalence": 0.68 - }, - { - "value": "rustbucket", - "count": 13, - "total_related": 33, - "prevalence": 0.3939393939393939 - }, - { - "value": "bitbook", - "count": 11, - "total_related": 20, - "prevalence": 0.55 - }, - { - "value": "shortfawn", - "count": 7, - "total_related": 8, - "prevalence": 0.875 - }, - { - "value": "covertcatch", - "count": 6, - "total_related": 31, - "prevalence": 0.1935483870967742 - }, - { - "value": "powerhouse", - "count": 5, - "total_related": 12, - "prevalence": 0.4166666666666667 - }, - { - "value": "hiddenagent", - "count": 5, - "total_related": 18, - "prevalence": 0.2777777777777778 - }, - { - "value": "swiftloader", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "kandykorn", - "count": 3, - "total_related": 16, - "prevalence": 0.1875 - }, - { - "value": "hiddenagent_mac", - "count": 2, - "total_related": 10, - "prevalence": 0.2 - }, - { - "value": "donut", - "count": 2, - "total_related": 28038, - "prevalence": 7.133176403452457e-05 - }, - { - "value": "whitehaul", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "tallcoral", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "whitestorm", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "sparkrat", - "count": 1, - "total_related": 2163, - "prevalence": 0.0004623208506703652 - }, - { - "value": "poweliks", - "count": 1, - "total_related": 2805, - "prevalence": 0.00035650623885918 - }, - { - "value": "sload", - "count": 1, - "total_related": 46987, - "prevalence": 2.1282482388745824e-05 - }, - { - "value": "powershell", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "powerstats", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "crowdsourced_ids_results": [ - { - "value": { - "id": "1:2027865", - "message": "ET INFO Observed DNS Query to .cloud TLD", - "category": "bad-unknown", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://www.spamhaus.org/statistics/tlds/" - ], - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET INFO Observed DNS Query to .cloud TLD\"; dns.query; content:\".cloud\"; nocase; endswith; reference:url,www.spamhaus.org/statistics/tlds/; classtype:bad-unknown; sid:2027865; rev:5; metadata:affected_product Any, attack_target Client_Endpoint, created_at 2019_08_13, deployment Perimeter, former_category INFO, signature_severity Informational, updated_at 2020_09_17;)" - }, - "count": 9, - "total_related": 42167, - "prevalence": 0.00021343704792847488 - }, - { - "value": { - "id": "1:2025194", - "message": "ET HUNTING Observed Let's Encrypt Certificate for Suspicious TLD (.xyz)", - "category": "bad-unknown", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert tls $EXTERNAL_NET any -> $HOME_NET any (msg:\"ET HUNTING Observed Let's Encrypt Certificate for Suspicious TLD (.xyz)\"; flow:established,to_client; tls.cert_subject; content:\".xyz\"; endswith; tls.cert_issuer; content:\"Let's Encrypt\"; classtype:bad-unknown; sid:2025194; rev:3; metadata:attack_target Client_Endpoint, created_at 2018_01_09, deployment Perimeter, confidence Medium, signature_severity Minor, updated_at 2020_09_16;)" - }, - "count": 6, - "total_related": 96816, - "prevalence": 6.197322756569162e-05 - }, - { - "value": { - "id": "1:51037", - "message": "POLICY-OTHER IGMP membership query attempt", - "category": "protocol-command-decode", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "references_urls": [ - "https://cve.mitre.org/cgi-bin/cvename.cgi?name=2019-12259", - "https://cve.mitre.org/cgi-bin/cvename.cgi?name=2019-12265" - ], - "tags": [ - "cve-2019-12259", - "cve-2019-12265" - ], - "rule": "alert ip any any -> any any ( msg:\"POLICY-OTHER IGMP membership query attempt\"; ip_proto:2; content:\"|11|\",depth 1; reference:cve,2019-12259; reference:cve,2019-12265; classtype:protocol-command-decode; sid:51037; rev:1; )" - }, - "count": 5, - "total_related": 97143, - "prevalence": 5.1470512543363905e-05 - }, - { - "value": { - "id": "1:2047744", - "message": "ET MALWARE Observed DNS Query to TA444 Domain", - "category": "trojan-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET MALWARE Observed DNS Query to TA444 Domain\"; dns.query; dotprefix; content:\".commoncome.online\"; nocase; endswith; classtype:trojan-activity; sid:2047744; rev:1; metadata:attack_target Client_Endpoint, created_at 2023_08_24, deployment Perimeter, confidence High, signature_severity Major, tag TA444, updated_at 2023_08_24, reviewed_at 2024_01_26, former_sid 2855175;)" - }, - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": { - "id": "1:2033903", - "message": "ET MALWARE Observed Lazarus Related Domain (share .bloomcloud .org in TLS SNI)", - "category": "command-and-control", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://twitter.com/ShadowChasing1/status/1433807018867912705", - "https://www.virustotal.com/gui/search/a224350ce67eea6a8d818b85436c5309", - "https://www.virustotal.com/gui/search/02904e802b5dc2f85eec83e3c1948374", - "https://www.virustotal.com/gui/search/bac4acc2544626bac6377fb32c5f244c" - ], - "rule": "alert tls $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET MALWARE Observed Lazarus Related Domain (share .bloomcloud .org in TLS SNI)\"; flow:established,to_server; tls.sni; content:\"share.bloomcloud.org\"; bsize:20; fast_pattern; reference:url,twitter.com/ShadowChasing1/status/1433807018867912705; reference:md5,a224350ce67eea6a8d818b85436c5309; reference:md5,02904e802b5dc2f85eec83e3c1948374; reference:md5,bac4acc2544626bac6377fb32c5f244c; classtype:command-and-control; sid:2033903; rev:1; metadata:attack_target Client_Endpoint, created_at 2021_09_07, deployment Perimeter, performance_impact Low, confidence High, signature_severity Major, updated_at 2021_09_07, mitre_tactic_id TA0011, mitre_tactic_name Command_And_Control, mitre_technique_id T1071, mitre_technique_name Application_Layer_Protocol;)" - }, - "count": 4, - "total_related": 5, - "prevalence": 0.8 - }, - { - "value": { - "id": "1:2013028", - "message": "ET POLICY curl User-Agent Outbound", - "category": "attempted-recon", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://www.useragentstring.com/pages/useragentstring.php" - ], - "rule": "alert http $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET POLICY curl User-Agent Outbound\"; flow:established,to_server; http.user_agent; content:\"curl/\"; nocase; startswith; reference:url,www.useragentstring.com/pages/useragentstring.php; classtype:attempted-recon; sid:2013028; rev:7; metadata:created_at 2011_06_14, updated_at 2022_05_03;)" - }, - "count": 4, - "total_related": 39085, - "prevalence": 0.00010234105155430472 - }, - { - "value": { - "id": "1:2038987", - "message": "ET MALWARE TA444 Related Domain in DNS Lookup (onlinecloud .cloud)", - "category": "domain-c2", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET MALWARE TA444 Related Domain in DNS Lookup (onlinecloud .cloud)\"; dns.query; dotprefix; content:\".onlinecloud.cloud\"; nocase; endswith; classtype:domain-c2; sid:2038987; rev:1; metadata:attack_target Client_Endpoint, created_at 2022_09_26, deployment Perimeter, malware_family Lazarus, malware_family TA444, confidence High, signature_severity Major, updated_at 2022_09_26;)" - }, - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": { - "id": "1:2039824", - "message": "ET MALWARE TA444 Domain in DNS Lookup (dnx .capital)", - "category": "trojan-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET MALWARE TA444 Domain in DNS Lookup (dnx .capital)\"; dns.query; dotprefix; content:\".dnx.capital\"; nocase; endswith; classtype:trojan-activity; sid:2039824; rev:1; metadata:affected_product Windows_XP_Vista_7_8_10_Server_32_64_Bit, attack_target Client_Endpoint, created_at 2022_11_22, deployment Perimeter, malware_family TA444, confidence High, signature_severity Major, updated_at 2022_11_22;)" - }, - "count": 3, - "total_related": 6, - "prevalence": 0.5 - }, - { - "value": { - "id": "1:2017968", - "message": "ET HUNTING Suspicious Possible Process Dump in POST body", - "category": "trojan-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://www.securelist.com/en/blog/208214213/The_Icefog_APT_Hits_US_Targets_With_Java_Backdoor" - ], - "rule": "alert http $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET HUNTING Suspicious Possible Process Dump in POST body\"; flow:established,to_server; http.method; content:\"POST\"; http.request_body; content:\"System Idle Process\"; fast_pattern; reference:url,www.securelist.com/en/blog/208214213/The_Icefog_APT_Hits_US_Targets_With_Java_Backdoor; classtype:trojan-activity; sid:2017968; rev:6; metadata:created_at 2014_01_15, confidence Medium, signature_severity Major, updated_at 2020_09_22;)" - }, - "count": 3, - "total_related": 4516, - "prevalence": 0.0006643046944198405 - }, - { - "value": { - "id": "1:2027117", - "message": "ET HUNTING Suspicious POST with Common Windows Process Names - Possible Process List Exfiltration", - "category": "trojan-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert http $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET HUNTING Suspicious POST with Common Windows Process Names - Possible Process List Exfiltration\"; flow:established,to_server; http.method; content:\"POST\"; http.request_body; content:\"csrss.exe\"; content:\"explorer.exe\"; fast_pattern; content:\"svchost.exe\"; content:\"lsass.exe\"; classtype:trojan-activity; sid:2027117; rev:3; metadata:affected_product Windows_XP_Vista_7_8_10_Server_32_64_Bit, attack_target Client_Endpoint, created_at 2019_03_26, deployment Perimeter, performance_impact Low, confidence Medium, signature_severity Major, tag Suspicious_POST_body, updated_at 2020_08_28;)" - }, - "count": 3, - "total_related": 8065, - "prevalence": 0.0003719776813391197 - }, - { - "value": { - "id": "1:2210023", - "message": "SURICATA STREAM ESTABLISHED SYNACK resend with different ACK", - "category": "protocol-command-decode", - "source": "Suricata", - "url": "https://www.openinfosecfoundation.org/", - "rule": "alert tcp any any -> any any (msg:\"SURICATA STREAM ESTABLISHED SYNACK resend with different ACK\"; stream-event:est_synack_resend_with_different_ack; classtype:protocol-command-decode; sid:2210023; rev:2;)" - }, - "count": 3, - "total_related": 42165, - "prevalence": 7.114905727499111e-05 - }, - { - "value": { - "id": "1:2034135", - "message": "ET MALWARE Lazarus APT Related CnC Domain in DNS Lookup (gsheet .gdocsdown .com)", - "category": "domain-c2", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://ti.qianxin.com/blog/articles/Lazarus'-Recent-Attack-Campaign-Targeting-Blockchain-Finance-and-Energy-Sectors/" - ], - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET MALWARE Lazarus APT Related CnC Domain in DNS Lookup (gsheet .gdocsdown .com)\"; dns.query; content:\"gsheet.gdocsdown.com\"; nocase; bsize:20; reference:url,ti.qianxin.com/blog/articles/Lazarus'-Recent-Attack-Campaign-Targeting-Blockchain-Finance-and-Energy-Sectors/; classtype:domain-c2; sid:2034135; rev:1; metadata:attack_target Client_Endpoint, created_at 2021_10_06, deployment Perimeter, confidence High, signature_severity Major, updated_at 2021_10_06;)" - }, - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": { - "id": "1:2034570", - "message": "ET MALWARE Lazarus APT Related Domain in DNS Lookup (ny .silvergatehr .com)", - "category": "domain-c2", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://www.virustotal.com/gui/search/69c9881a6b7b89a648074328292da7e8", - "https://www.virustotal.com/gui/search/84dd7ccb69d0010c97c1fc336650d5e2", - "https://twitter.com/ShadowChasing1/status/1465998020734898176" - ], - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET MALWARE Lazarus APT Related Domain in DNS Lookup (ny .silvergatehr .com)\"; dns.query; content:\"ny.silvergatehr.com\"; nocase; bsize:19; reference:md5,69c9881a6b7b89a648074328292da7e8; reference:md5,84dd7ccb69d0010c97c1fc336650d5e2; reference:url,twitter.com/ShadowChasing1/status/1465998020734898176; classtype:domain-c2; sid:2034570; rev:1; metadata:attack_target Client_Endpoint, created_at 2021_12_01, deployment Perimeter, malware_family Lazarus, confidence High, signature_severity Major, updated_at 2021_12_01;)" - }, - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": { - "id": "1:2034987", - "message": "ET POLICY Suspicious File Sharing Domain in DNS Lookup (drive .cloudplus .one)", - "category": "bad-unknown", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://www.virustotal.com/gui/search/934c7b7c31d84728f0086be9b80ee1e4", - "https://twitter.com/ShadowChasing1/status/1486542725692284930", - "https://twitter.com/malwrhunterteam/status/1483853345924255745" - ], - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET POLICY Suspicious File Sharing Domain in DNS Lookup (drive .cloudplus .one)\"; dns.query; content:\"drive.cloudplus.one\"; nocase; bsize:19; reference:md5,934c7b7c31d84728f0086be9b80ee1e4; reference:url,twitter.com/ShadowChasing1/status/1486542725692284930; reference:url,twitter.com/malwrhunterteam/status/1483853345924255745; classtype:bad-unknown; sid:2034987; rev:1; metadata:attack_target Client_Endpoint, created_at 2022_01_27, deployment Perimeter, confidence High, signature_severity Informational, updated_at 2022_01_27;)" - }, - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": { - "id": "1:2039823", - "message": "ET MALWARE TA444 Domain in DNS Lookup (sharedrive .ink)", - "category": "trojan-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET MALWARE TA444 Domain in DNS Lookup (sharedrive .ink)\"; dns.query; dotprefix; content:\".sharedrive.ink\"; nocase; endswith; classtype:trojan-activity; sid:2039823; rev:1; metadata:affected_product Windows_XP_Vista_7_8_10_Server_32_64_Bit, attack_target Client_Endpoint, created_at 2022_11_22, deployment Perimeter, malware_family TA444, confidence High, signature_severity Critical, updated_at 2022_11_22;)" - }, - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": { - "id": "1:2039826", - "message": "ET MALWARE Observed TA444 Domain (dnx .capital in TLS SNI)", - "category": "trojan-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert tls $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET MALWARE Observed TA444 Domain (dnx .capital in TLS SNI)\"; flow:established,to_server; tls.sni; dotprefix; content:\".dnx.capital\"; endswith; fast_pattern; classtype:trojan-activity; sid:2039826; rev:1; metadata:affected_product Windows_XP_Vista_7_8_10_Server_32_64_Bit, attack_target Client_Endpoint, created_at 2022_11_22, deployment Perimeter, malware_family TA444, confidence High, signature_severity Major, updated_at 2022_11_23, mitre_tactic_id TA0011, mitre_tactic_name Command_And_Control, mitre_technique_id T1071, mitre_technique_name Application_Layer_Protocol;)" - }, - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": { - "id": "1:2043156", - "message": "ET MALWARE TA444 Related Activity (POST)", - "category": "trojan-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://securelist.com/bluenoroff-methods-bypass-motw/108383/" - ], - "rule": "alert http $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET MALWARE TA444 Related Activity (POST)\"; flow:established,to_server; http.method; content:\"POST\"; http.user_agent; content:\"cur1-agent\"; bsize:10; fast_pattern; reference:url,securelist.com/bluenoroff-methods-bypass-motw/108383/; classtype:trojan-activity; sid:2043156; rev:1; metadata:affected_product Windows_XP_Vista_7_8_10_Server_32_64_Bit, attack_target Client_Endpoint, created_at 2022_12_30, deployment Perimeter, confidence High, signature_severity Major, updated_at 2022_12_30;)" - }, - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": { - "id": "1:2045647", - "message": "ET MALWARE DNS Query to TA444 Domain (docs-send .online)", - "category": "trojan-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET MALWARE DNS Query to TA444 Domain (docs-send .online)\"; dns.query; content:\"docs-send.online\"; nocase; bsize:16; classtype:trojan-activity; sid:2045647; rev:1; metadata:attack_target Client_Endpoint, created_at 2023_05_11, deployment Perimeter, signature_severity Major, tag TA444, updated_at 2023_05_11, reviewed_at 2024_01_02;)" - }, - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": { - "id": "1:2047748", - "message": "ET MALWARE Win32/CosmicRust TA444 CnC Activity (GET)", - "category": "trojan-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert http $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET MALWARE Win32/CosmicRust TA444 CnC Activity (GET)\"; flow:established,to_server; urilen:7; http.method; content:\"GET\"; http.uri; content:\"/client\"; http.header_names; content:\"|0d 0a|Sec-WebSocket-Protocol|0d 0a|Host|0d 0a|Connection|0d 0a|Upgrade|0d 0a|Sec-WebSocket-Version|0d 0a|Sec-WebSocket-Key|0d 0a 0d 0a|\"; bsize:97; http.connection; content:\"Upgrade\"; http.header; content:\"Connection|3a 20|Upgrade|0d 0a|Upgrade|3a 20|websocket|0d 0a|Sec|2d|WebSocket|2d|Version|3a 20|13|0d 0a|Sec|2d|WebSocket|2d|Key|3a|\"; content:\"Sec|2d|WebSocket|2d|Protocol|3a 20|rust|2d|websocket|2c 20|ping|0d 0a|Host|3a 20|\"; fast_pattern; classtype:trojan-activity; sid:2047748; rev:1; metadata:affected_product Windows_XP_Vista_7_8_10_Server_32_64_Bit, attack_target Client_Endpoint, created_at 2023_08_24, deployment Perimeter, malware_family Win32_CosmicRust, confidence Medium, signature_severity Critical, tag TA444, updated_at 2023_08_24, reviewed_at 2023_08_24, former_sid 2855179;)" - }, - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": { - "id": "1:2038544", - "message": "ET MALWARE Observed DNS Query to TA444 Domain (1drvmicrosoft .com)", - "category": "trojan-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET MALWARE Observed DNS Query to TA444 Domain (1drvmicrosoft .com)\"; dns.query; dotprefix; content:\".1drvmicrosoft.com\"; nocase; endswith; classtype:trojan-activity; sid:2038544; rev:1; metadata:attack_target Client_Endpoint, created_at 2022_08_17, deployment Perimeter, confidence High, signature_severity Major, updated_at 2022_08_17;)" - }, - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": { - "id": "1:2038921", - "message": "ET MALWARE Observed DNS Query to TA444 Domain (privacysign .org)", - "category": "trojan-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET MALWARE Observed DNS Query to TA444 Domain (privacysign .org)\"; dns.query; dotprefix; content:\".privacysign.org\"; nocase; endswith; classtype:trojan-activity; sid:2038921; rev:1; metadata:affected_product Windows_XP_Vista_7_8_10_Server_32_64_Bit, attack_target Client_Endpoint, created_at 2022_09_21, deployment Perimeter, confidence High, signature_severity Major, updated_at 2022_09_21;)" - }, - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": { - "id": "1:2038943", - "message": "ET MALWARE Observed TA444 Domain (privacysign .org in TLS SNI)", - "category": "trojan-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert tls $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET MALWARE Observed TA444 Domain (privacysign .org in TLS SNI)\"; flow:established,to_server; tls.sni; dotprefix; content:\".privacysign.org\"; endswith; fast_pattern; classtype:trojan-activity; sid:2038943; rev:1; metadata:affected_product Windows_XP_Vista_7_8_10_Server_32_64_Bit, attack_target Client_Endpoint, created_at 2022_09_22, deployment Perimeter, confidence High, signature_severity Major, updated_at 2022_09_22, mitre_tactic_id TA0011, mitre_tactic_name Command_And_Control, mitre_technique_id T1071, mitre_technique_name Application_Layer_Protocol;)" - }, - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": { - "id": "1:2035162", - "message": "ET MALWARE DangerousPassword APT Related Domain in DNS Lookup (www .datacentre .center)", - "category": "domain-c2", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://www.virustotal.com/gui/search/26cb5fdcbdfccfa05399709d7dc12319", - "https://twitter.com/h2jazi/status/1490883892705828864", - "https://twitter.com/ShadowChasing1/status/1490861199981907974", - "https://twitter.com/cyberoverdrive/status/1490839283803951106" - ], - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET MALWARE DangerousPassword APT Related Domain in DNS Lookup (www .datacentre .center)\"; dns.query; content:\"www.datacentre.center\"; nocase; bsize:21; reference:md5,26cb5fdcbdfccfa05399709d7dc12319; reference:url,twitter.com/h2jazi/status/1490883892705828864; reference:url,twitter.com/ShadowChasing1/status/1490861199981907974; reference:url,twitter.com/cyberoverdrive/status/1490839283803951106; classtype:domain-c2; sid:2035162; rev:1; metadata:attack_target Client_Endpoint, created_at 2022_02_09, deployment Perimeter, malware_family Lazarus, malware_family DangerousPassword, confidence High, signature_severity Major, updated_at 2022_02_09;)" - }, - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": { - "id": "1:2038764", - "message": "ET MALWARE Observed DNS Query to TA444 Domain (azure-protect .online)", - "category": "domain-c2", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET MALWARE Observed DNS Query to TA444 Domain (azure-protect .online)\"; dns.query; dotprefix; content:\".azure-protect.online\"; nocase; endswith; classtype:domain-c2; sid:2038764; rev:1; metadata:attack_target Client_Endpoint, created_at 2022_09_07, deployment Perimeter, malware_family TA444, confidence High, signature_severity Major, updated_at 2022_09_07;)" - }, - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": { - "id": "1:2038790", - "message": "ET MALWARE Observed TA444 Domain (azure-protect .online in TLS SNI)", - "category": "trojan-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert tls $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET MALWARE Observed TA444 Domain (azure-protect .online in TLS SNI)\"; flow:established,to_server; tls.sni; dotprefix; content:\".azure-protect.online\"; endswith; fast_pattern; classtype:trojan-activity; sid:2038790; rev:1; metadata:attack_target Client_Endpoint, created_at 2022_09_09, deployment Perimeter, malware_family TA444, confidence High, signature_severity Major, updated_at 2022_09_09, mitre_tactic_id TA0011, mitre_tactic_name Command_And_Control, mitre_technique_id T1071, mitre_technique_name Application_Layer_Protocol;)" - }, - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": { - "id": "1:2038986", - "message": "ET MALWARE Lazarus APT Related Domain in DNS Lookup (digiboxes .us)", - "category": "domain-c2", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://twitter.com/StopMalvertisin/status/1574329188793733120", - "https://www.virustotal.com/gui/search/8878ee5d935facff0e04370324118c60" - ], - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET MALWARE Lazarus APT Related Domain in DNS Lookup (digiboxes .us)\"; dns.query; dotprefix; content:\".digiboxes.us\"; nocase; endswith; reference:url,twitter.com/StopMalvertisin/status/1574329188793733120; reference:md5,8878ee5d935facff0e04370324118c60; classtype:domain-c2; sid:2038986; rev:1; metadata:attack_target Client_Endpoint, created_at 2022_09_26, deployment Perimeter, malware_family Lazarus, confidence High, signature_severity Major, updated_at 2022_09_26;)" - }, - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": { - "id": "1:2045085", - "message": "ET MALWARE Observed DNSQuery to TA444 Domain (internal .j-ic .co)", - "category": "trojan-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://twitter.com/TLP_R3D/status/1649147042680172571", - "https://storage.pardot.com/838563/1676629189Mljyft19/CTI_Advisory_Undetected_North_Korean_Malware_A_Looming_Threat_to_Finan.pdf" - ], - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET MALWARE Observed DNSQuery to TA444 Domain (internal .j-ic .co)\"; dns.query; content:\"internal.j-ic.co\"; nocase; bsize:16; reference:url,twitter.com/TLP_R3D/status/1649147042680172571; reference:url,storage.pardot.com/838563/1676629189Mljyft19/CTI_Advisory_Undetected_North_Korean_Malware_A_Looming_Threat_to_Finan.pdf; classtype:trojan-activity; sid:2045085; rev:1; metadata:attack_target Client_Endpoint, created_at 2023_04_20, deployment Perimeter, former_category MALWARE, signature_severity Major, tag TA444, updated_at 2023_04_20;)" - }, - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": { - "id": "1:902204988", - "message": "SSLBL: Malicious SSL certificate detected (Malware distribution)", - "source": "Abuse.ch SSL Blocklist", - "url": "https://sslbl.abuse.ch/blacklist/sslblacklist.rules", - "references_urls": [ - "https://sslbl.abuse.ch/ssl-certificates/sha1/24b621824151585b035905519ae7e2fefc18c036/" - ], - "rule": "alert tls $EXTERNAL_NET any -> $HOME_NET any (msg:\"SSLBL: Malicious SSL certificate detected (Malware distribution)\"; tls.fingerprint:\"24:b6:21:82:41:51:58:5b:03:59:05:51:9a:e7:e2:fe:fc:18:c0:36\"; reference:url, sslbl.abuse.ch/ssl-certificates/sha1/24b621824151585b035905519ae7e2fefc18c036/; sid:902204988; rev:1;)" - }, - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": { - "id": "1:2034991", - "message": "ET MALWARE Lazarus APT Related Domain in DNS Lookup (docusign .agency)", - "category": "domain-c2", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://www.virustotal.com/gui/search/993cecde0cd707f795e00181414d97bd", - "https://twitter.com/ShadowChasing1/status/1486530954382348290" - ], - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET MALWARE Lazarus APT Related Domain in DNS Lookup (docusign .agency)\"; dns.query; dotprefix; content:\".docusign.agency\"; nocase; endswith; reference:md5,993cecde0cd707f795e00181414d97bd; reference:url,twitter.com/ShadowChasing1/status/1486530954382348290; classtype:domain-c2; sid:2034991; rev:1; metadata:attack_target Client_Endpoint, created_at 2022_01_27, deployment Perimeter, confidence High, signature_severity Major, updated_at 2022_01_27;)" - }, - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": { - "id": "1:2038785", - "message": "ET MALWARE Observed DNS Query to TA444 Domain (azure-protection .cloud)", - "category": "trojan-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET MALWARE Observed DNS Query to TA444 Domain (azure-protection .cloud)\"; dns.query; dotprefix; content:\".azure-protection.cloud\"; nocase; endswith; classtype:trojan-activity; sid:2038785; rev:1; metadata:attack_target Client_Endpoint, created_at 2022_09_09, deployment Perimeter, malware_family TA444, confidence High, signature_severity Major, updated_at 2022_09_09;)" - }, - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": { - "id": "1:2037803", - "message": "ET MALWARE TA444 Related Domain in DNS Lookup (fclouddown .co)", - "category": "domain-c2", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://twitter.com/h2jazi/status/1549780561551675393", - "https://www.virustotal.com/gui/search/d13eb9a69a59001de27db3af7589f5c0", - "https://www.virustotal.com/gui/search/a727ec19eae848a554cbe9cb90dcaf1b" - ], - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET MALWARE TA444 Related Domain in DNS Lookup (fclouddown .co)\"; dns.query; dotprefix; content:\".fclouddown.co\"; nocase; endswith; reference:url,twitter.com/h2jazi/status/1549780561551675393; reference:md5,d13eb9a69a59001de27db3af7589f5c0; reference:md5,a727ec19eae848a554cbe9cb90dcaf1b; classtype:domain-c2; sid:2037803; rev:1; metadata:attack_target Client_Endpoint, created_at 2022_07_21, deployment Perimeter, malware_family TA444, confidence High, signature_severity Major, updated_at 2022_07_21;)" - }, - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": { - "id": "1:2045981", - "message": "ET INFO DYNAMIC_DNS Query to a *.camdvr .org Domain", - "category": "bad-unknown", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://www.dynu.com/ControlPanel/AddDDNS" - ], - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET INFO DYNAMIC_DNS Query to a *.camdvr .org Domain\"; dns.query; content:\".camdvr.org\"; fast_pattern; nocase; endswith; reference:url,www.dynu.com/ControlPanel/AddDDNS; classtype:bad-unknown; sid:2045981; rev:2; metadata:attack_target Client_and_Server, created_at 2023_06_01, deployment Perimeter, performance_impact Low, confidence High, signature_severity Informational, updated_at 2024_06_11, mitre_tactic_id TA0011, mitre_tactic_name Command_And_Control, mitre_technique_id T1568, mitre_technique_name Dynamic_Resolution;)" - }, - "count": 1, - "total_related": 128, - "prevalence": 0.0078125 - }, - { - "value": { - "id": "1:2046669", - "message": "ET MALWARE Win32/SparkRAT CnC Checkin (GET)", - "category": "command-and-control", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://sangfor.com/farsight-labs-threat-intelligence/cybersecurity/may-hot-apt-security-events-techniques-tracker" - ], - "rule": "alert http $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET MALWARE Win32/SparkRAT CnC Checkin (GET)\"; flow:established,to_server; http.method; content:\"GET\"; http.uri; content:\"/ws\"; endswith; http.user_agent; content:\"Go|2d|http|2d|client|2f|1|2e|1\"; http.connection; content:\"Upgrade\"; bsize:7; http.header; content:\"Key|3a 20|\"; pcre:\"/^(?:[a-z0-9]{64})\\x0d\\x0a/R\"; content:\"Sec|2d|WebSocket|2d|Version|3a 20|13|0d 0a|\"; content:\"UUID|3a 20|\"; pcre:\"/^(?:[a-z0-9]{32})\\x0d\\x0a/R\"; content:\"Upgrade|3a 20|websocket\"; http.header_names; content:\"|0d 0a|Host|0d 0a|User-Agent|0d 0a|Connection|0d 0a|Key|0d 0a|Sec-WebSocket-Key|0d 0a|Sec-WebSocket-Version|0d 0a|UUID|0d 0a|Upgrade|0d 0a 0d 0a|\"; bsize:96; fast_pattern; threshold:type limit,track by_src,count 1,seconds 3600; reference:url,sangfor.com/farsight-labs-threat-intelligence/cybersecurity/may-hot-apt-security-events-techniques-tracker; classtype:command-and-control; sid:2046669; rev:2; metadata:affected_product Windows_XP_Vista_7_8_10_Server_32_64_Bit, attack_target Client_Endpoint, created_at 2023_06_27, deployment Perimeter, malware_family SparkRAT, confidence High, signature_severity Critical, updated_at 2023_11_10, reviewed_at 2024_01_26;)" - }, - "count": 1, - "total_related": 140, - "prevalence": 0.007142857142857143 - }, - { - "value": { - "id": "1:2026674", - "message": "ET INFO Minimal HTTP GET Request to Bit.ly", - "category": "bad-unknown", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert http $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET INFO Minimal HTTP GET Request to Bit.ly\"; flow:established,to_server; http.method; content:\"GET\"; http.start; content:\"HTTP/1.1|0d 0a|Host|3a 20|bit.ly|0d 0a|Connection|3a 20|Keep-Alive|0d 0a 0d 0a|\"; endswith; fast_pattern; classtype:bad-unknown; sid:2026674; rev:3; metadata:affected_product Web_Browsers, attack_target Client_Endpoint, created_at 2018_11_29, deployment Perimeter, confidence High, signature_severity Minor, updated_at 2020_09_16;)" - }, - "count": 1, - "total_related": 161, - "prevalence": 0.006211180124223602 - }, - { - "value": { - "id": "1:2032991", - "message": "ET INFO HTTP Request to a *.buzz domain", - "category": "bad-unknown", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert http $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET INFO HTTP Request to a *.buzz domain\"; flow:established,to_server; http.host; content:\".buzz\"; fast_pattern; endswith; classtype:bad-unknown; sid:2032991; rev:1; metadata:attack_target Client_Endpoint, created_at 2021_05_18, deployment Perimeter, performance_impact Low, confidence High, signature_severity Informational, updated_at 2021_05_18;)" - }, - "count": 1, - "total_related": 833, - "prevalence": 0.0012004801920768306 - }, - { - "value": { - "id": "1:2210015", - "message": "SURICATA STREAM CLOSEWAIT ACK out of window", - "category": "protocol-command-decode", - "source": "Suricata", - "url": "https://www.openinfosecfoundation.org/", - "rule": "alert tcp any any -> any any (msg:\"SURICATA STREAM CLOSEWAIT ACK out of window\"; stream-event:closewait_ack_out_of_window; classtype:protocol-command-decode; sid:2210015; rev:2;)" - }, - "count": 1, - "total_related": 1072, - "prevalence": 0.0009328358208955224 - }, - { - "value": { - "id": "1:2031189", - "message": "ET HUNTING HTTP POST to XYZ TLD Containing Pass - Possible Phishing", - "category": "misc-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert http $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET HUNTING HTTP POST to XYZ TLD Containing Pass - Possible Phishing\"; flow:established,to_server; http.method; content:\"POST\"; http.host; content:\".xyz\"; endswith; fast_pattern; http.request_body; content:\"pass\"; nocase; classtype:misc-activity; sid:2031189; rev:2; metadata:affected_product Web_Browsers, attack_target Client_Endpoint, created_at 2020_11_09, deployment Perimeter, confidence Medium, signature_severity Critical, tag Phishing, updated_at 2020_11_09, mitre_tactic_id TA0001, mitre_tactic_name Initial_Access, mitre_technique_id T1566, mitre_technique_name Phishing;)" - }, - "count": 1, - "total_related": 2486, - "prevalence": 0.00040225261464199515 - }, - { - "value": { - "id": "1:2034457", - "message": "ET POLICY Observed DNS Query to DynDNS Domain (publicvm .com)", - "category": "bad-unknown", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://dnsexit.com/domains/free-second-level-domains/" - ], - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET POLICY Observed DNS Query to DynDNS Domain (publicvm .com)\"; dns.query; content:\".publicvm.com\"; nocase; endswith; content:!\"www.publicvm.com\"; reference:url,dnsexit.com/domains/free-second-level-domains/; classtype:bad-unknown; sid:2034457; rev:2; metadata:affected_product Any, attack_target Client_Endpoint, created_at 2021_11_15, deployment Perimeter, performance_impact Low, confidence High, signature_severity Informational, updated_at 2021_11_15;)" - }, - "count": 1, - "total_related": 4093, - "prevalence": 0.0002443195699975568 - }, - { - "value": { - "id": "1:2036936", - "message": "ET HUNTING File Sharing Related Domain in DNS Lookup (download .mediafire .com)", - "category": "bad-unknown", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET HUNTING File Sharing Related Domain in DNS Lookup (download .mediafire .com)\"; dns.query; content:\"download\"; startswith; content:\".mediafire.com\"; endswith; classtype:bad-unknown; sid:2036936; rev:1; metadata:attack_target Client_Endpoint, created_at 2022_06_09, deployment Perimeter, confidence High, signature_severity Informational, updated_at 2022_06_09;)" - }, - "count": 1, - "total_related": 4267, - "prevalence": 0.00023435669088352472 - }, - { - "value": { - "id": "1:5730", - "message": "OS-WINDOWS Microsoft Windows SMB-DS Trans Max Param OS-WINDOWS attempt", - "category": "protocol-command-decode", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "references_urls": [ - "https://www.securityfocus.com/bid/13942", - "https://cve.mitre.org/cgi-bin/cvename.cgi?name=2005-1206", - "http://cgi.nessus.org/plugins/dump.php3?id=18483", - "https://technet.microsoft.com/en-us/security/bulletin/MS05-027" - ], - "tags": [ - "cve-2005-1206" - ], - "rule": "alert tcp $EXTERNAL_NET any -> $HOME_NET 445 ( msg:\"OS-WINDOWS Microsoft Windows SMB-DS Trans Max Param OS-WINDOWS attempt\"; flow:to_server,established; content:\"|00|\",depth 1; content:\"|FF|SMB%\",within 5,distance 3; byte_test:1,!&,128,6,relative; pcre:\"/^.{27}/Rs\"; byte_test:2,>,4376,5,relative,little; service:netbios-ssn; reference:bugtraq,13942; reference:cve,2005-1206; reference:nessus,18483; reference:url,technet.microsoft.com/en-us/security/bulletin/MS05-027; classtype:protocol-command-decode; sid:5730; rev:13; )" - }, - "count": 1, - "total_related": 4345, - "prevalence": 0.00023014959723820482 - }, - { - "value": { - "id": "1:2025649", - "message": "ET EXPLOIT Possible ETERNALBLUE Probe MS17-010 (MSF style)", - "category": "trojan-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/scanner/smb/smb_ms17_010.rb" - ], - "rule": "alert smb any any -> $HOME_NET any (msg:\"ET EXPLOIT Possible ETERNALBLUE Probe MS17-010 (MSF style)\"; flow:to_server,established; content:\"|ff|SMB|25 00 00 00 00 18 01 28|\"; offset:4; depth:12; content:\"|00 00 00 00 00 00 00 00 00 00|\"; distance:2; within:10; content:\"|23 00 00 00 07 00 5c 50 49 50 45 5c 00|\"; fast_pattern; endswith; threshold: type limit, track by_src, count 1, seconds 30; reference:url,github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/scanner/smb/smb_ms17_010.rb; classtype:trojan-activity; sid:2025649; rev:3; metadata:affected_product Windows_XP_Vista_7_8_10_Server_32_64_Bit, attack_target Client_Endpoint, created_at 2018_07_11, deployment Internal, confidence Medium, signature_severity Major, tag Metasploit, tag ETERNALBLUE, updated_at 2019_09_28;)" - }, - "count": 1, - "total_related": 4650, - "prevalence": 0.00021505376344086021 - }, - { - "value": { - "id": "1:2025992", - "message": "ET EXPLOIT Possible ETERNALBLUE Probe MS17-010 (Generic Flags)", - "category": "trojan-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/scanner/smb/smb_ms17_010.rb" - ], - "rule": "alert smb any any -> $HOME_NET any (msg:\"ET EXPLOIT Possible ETERNALBLUE Probe MS17-010 (Generic Flags)\"; flow:to_server,established; content:\"|ff|SMB|25 00 00 00 00|\"; offset:4; depth:9; content:\"|00 00 00 00 00 00 00 00 00 00|\"; distance:5; within:10; content:\"|23 00 00 00 07 00 5c 50 49 50 45 5c 00|\"; fast_pattern; endswith; threshold: type limit, track by_src, count 1, seconds 30; reference:url,github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/scanner/smb/smb_ms17_010.rb; classtype:trojan-activity; sid:2025992; rev:2; metadata:affected_product Windows_XP_Vista_7_8_10_Server_32_64_Bit, attack_target Client_Endpoint, created_at 2018_08_15, deployment Perimeter, malware_family ETERNALBLUE, confidence Medium, signature_severity Major, updated_at 2019_09_28;)" - }, - "count": 1, - "total_related": 4695, - "prevalence": 0.00021299254526091586 - }, - { - "value": { - "id": "1:42340", - "message": "OS-WINDOWS Microsoft Windows SMB anonymous session IPC share access attempt", - "category": "attempted-recon", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "references_urls": [ - "https://attack.mitre.org/techniques/T1077", - "https://msdn.microsoft.com/en-us/library/ee441910.aspx", - "https://technet.microsoft.com/en-us/security/bulletin/MS17-010" - ], - "rule": "alert tcp any any -> $HOME_NET 445 ( msg:\"OS-WINDOWS Microsoft Windows SMB anonymous session IPC share access attempt\"; flow:to_server,established; flowbits:isset,smb.null_session; content:\"|FF|SMB|75 00 00 00 00|\",depth 9,offset 4; content:\"|00 5C 00|I|00|P|00|C|00|$|00 00 00|\",fast_pattern,nocase; metadata:policy max-detect-ips drop,policy security-ips drop,ruleset community; service:netbios-ssn; reference:url,attack.mitre.org/techniques/T1077; reference:url,msdn.microsoft.com/en-us/library/ee441910.aspx; reference:url,technet.microsoft.com/en-us/security/bulletin/MS17-010; classtype:attempted-recon; sid:42340; rev:4; )" - }, - "count": 1, - "total_related": 4733, - "prevalence": 0.00021128248468201986 - }, - { - "value": { - "id": "1:10001254", - "message": "ATTACK [PTsecurity] Unimplemented Trans2 Sub-Command code. Possible ETERNALBLUE (WannaCry, Petya) tool", - "category": "attempted-admin", - "source": "Positive Technologies: PT Open Ruleset", - "url": "https://github.com/ptresearch/AttackDetection/", - "references_urls": [ - "https://msdn.microsoft.com/en-us/library/ee441654.aspx", - "https://github.com/ptresearch/AttackDetection" - ], - "rule": "alert smb any any -> $HOME_NET any (msg: \"ATTACK [PTsecurity] Unimplemented Trans2 Sub-Command code. Possible ETERNALBLUE (WannaCry, Petya) tool\"; flow: to_server, established; content: \"|FF|SMB2|00 00 00 00|\"; depth: 9; offset: 4; byte_test: 2, >, 0x0008, 52, relative, little; pcre: \"/\\xFFSMB2\\x00\\x00\\x00\\x00.{52}(?:\\x04|\\x09|\\x0A|\\x0B|\\x0C|\\x0E|\\x11)\\x00/s\"; flowbits: set, SMB.Trans2.SubCommand.Unimplemented; reference: url, msdn.microsoft.com/en-us/library/ee441654.aspx; classtype: attempted-admin; reference: url, github.com/ptresearch/AttackDetection; sid: 10001254; rev: 2;)" - }, - "count": 1, - "total_related": 4845, - "prevalence": 0.0002063983488132095 - }, - { - "value": { - "id": "1:44489", - "message": "POLICY-OTHER SMBv1 protocol detection attempt", - "category": "policy-violation", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "references_urls": [ - "https://github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/scanner/smb/smb1.rb" - ], - "rule": "alert tcp $EXTERNAL_NET any -> $HOME_NET [139,445] ( msg:\"POLICY-OTHER SMBv1 protocol detection attempt\"; flow:to_server,established; content:\"|FF|SMB|72 00 00 00 00|\"; content:\"|02|NT LM 0.\",fast_pattern,nocase; service:netbios-ssn; reference:url,github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/scanner/smb/smb1.rb; classtype:policy-violation; sid:44489; rev:4; )" - }, - "count": 1, - "total_related": 5312, - "prevalence": 0.00018825301204819278 - }, - { - "value": { - "id": "1:44485", - "message": "POLICY-OTHER SMBv1 protocol detection attempt", - "category": "policy-violation", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "references_urls": [ - "https://github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/scanner/smb/smb1.rb" - ], - "rule": "alert tcp $EXTERNAL_NET any -> $HOME_NET [139,445] ( msg:\"POLICY-OTHER SMBv1 protocol detection attempt\"; flow:to_server,established; content:\"|FF|SMB|72 00 00 00 00|\"; content:\"|02|LANMAN1.0\",fast_pattern,nocase; service:netbios-ssn; reference:url,github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/scanner/smb/smb1.rb; classtype:policy-violation; sid:44485; rev:4; )" - }, - "count": 1, - "total_related": 6551, - "prevalence": 0.00015264845061822624 - }, - { - "value": { - "id": "1:44487", - "message": "POLICY-OTHER SMBv1 protocol detection attempt", - "category": "policy-violation", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "references_urls": [ - "https://github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/scanner/smb/smb1.rb" - ], - "rule": "alert tcp $EXTERNAL_NET any -> $HOME_NET [139,445] ( msg:\"POLICY-OTHER SMBv1 protocol detection attempt\"; flow:to_server,established; content:\"|FF|SMB|72 00 00 00 00|\"; content:\"|02|LM1.2X002\",fast_pattern,nocase; service:netbios-ssn; reference:url,github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/scanner/smb/smb1.rb; classtype:policy-violation; sid:44487; rev:4; )" - }, - "count": 1, - "total_related": 6561, - "prevalence": 0.00015241579027587258 - }, - { - "value": { - "id": "1:2043259", - "message": "ET HUNTING File Sharing Related Domain (www .mediafire .com) in DNS Lookup", - "category": "bad-unknown", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET HUNTING File Sharing Related Domain (www .mediafire .com) in DNS Lookup\"; dns.query; content:\"www.mediafire.com\"; nocase; bsize:17; classtype:bad-unknown; sid:2043259; rev:1; metadata:affected_product Any, attack_target Client_Endpoint, created_at 2023_01_10, deployment Perimeter, performance_impact Low, confidence High, signature_severity Major, updated_at 2023_01_10, reviewed_at 2024_09_23;)" - }, - "count": 1, - "total_related": 6838, - "prevalence": 0.00014624159110851126 - }, - { - "value": { - "id": "1:44486", - "message": "POLICY-OTHER SMBv1 protocol detection attempt", - "category": "policy-violation", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "references_urls": [ - "https://github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/scanner/smb/smb1.rb" - ], - "rule": "alert tcp $EXTERNAL_NET any -> $HOME_NET [139,445] ( msg:\"POLICY-OTHER SMBv1 protocol detection attempt\"; flow:to_server,established; content:\"|FF|SMB|72 00 00 00 00|\"; content:\"|02|Windows for Workgroups 3.1a\",fast_pattern,nocase; service:netbios-ssn; reference:url,github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/scanner/smb/smb1.rb; classtype:policy-violation; sid:44486; rev:4; )" - }, - "count": 1, - "total_related": 7232, - "prevalence": 0.00013827433628318584 - }, - { - "value": { - "id": "1:44488", - "message": "POLICY-OTHER SMBv1 protocol detection attempt", - "category": "policy-violation", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "references_urls": [ - "https://github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/scanner/smb/smb1.rb" - ], - "rule": "alert tcp $EXTERNAL_NET any -> $HOME_NET [139,445] ( msg:\"POLICY-OTHER SMBv1 protocol detection attempt\"; flow:to_server,established; content:\"|FF|SMB|72 00 00 00 00|\"; content:\"|02|LANMAN2.1\",fast_pattern,nocase; service:netbios-ssn; reference:url,github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/scanner/smb/smb1.rb; classtype:policy-violation; sid:44488; rev:4; )" - }, - "count": 1, - "total_related": 7249, - "prevalence": 0.00013795006207752792 - }, - { - "value": { - "id": "1:44484", - "message": "POLICY-OTHER SMBv1 protocol detection attempt", - "category": "policy-violation", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "references_urls": [ - "https://github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/scanner/smb/smb1.rb" - ], - "rule": "alert tcp $EXTERNAL_NET any -> $HOME_NET [139,445] ( msg:\"POLICY-OTHER SMBv1 protocol detection attempt\"; flow:to_server,established; content:\"|FF|SMB|72 00 00 00 00|\"; content:\"|02|PC NETWORK PROGRAM 1.0\",fast_pattern,nocase; service:netbios-ssn; reference:url,github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/scanner/smb/smb1.rb; classtype:policy-violation; gid:1; sid:44484; rev:6; )" - }, - "count": 1, - "total_related": 7311, - "prevalence": 0.0001367801942278758 - }, - { - "value": { - "id": "1:2230027", - "message": "SURICATA TLS certificate invalid der", - "category": "protocol-command-decode", - "source": "Suricata", - "url": "https://www.openinfosecfoundation.org/", - "rule": "alert tls any any -> any any (msg:\"SURICATA TLS certificate invalid der\"; flow:established; app-layer-event:tls.certificate_invalid_der; flowint:tls.anomaly.count,+,1; classtype:protocol-command-decode; sid:2230027; rev:1;)" - }, - "count": 1, - "total_related": 7740, - "prevalence": 0.00012919896640826872 - }, - { - "value": { - "id": "1:2027671", - "message": "ET INFO Cloudflare DNS Over HTTPS Certificate Inbound", - "category": "misc-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://developers.cloudflare.com/1.1.1.1/dns-over-https/request-structure/" - ], - "rule": "alert tls $EXTERNAL_NET any -> $HOME_NET any (msg:\"ET INFO Cloudflare DNS Over HTTPS Certificate Inbound\"; flow:established,to_client; threshold: type limit, track by_src, count 1, seconds 300; tls.cert_subject; content:\"C=US, ST=California, L=San Francisco, O=Cloudflare, Inc., CN=cloudflare-dns.com\"; endswith; fast_pattern; reference:url,developers.cloudflare.com/1.1.1.1/dns-over-https/request-structure/; classtype:misc-activity; sid:2027671; rev:5; metadata:created_at 2019_07_03, confidence Medium, signature_severity Informational, tag DoH, updated_at 2020_09_17;)" - }, - "count": 1, - "total_related": 11976, - "prevalence": 8.350033400133601e-05 - }, - { - "value": { - "id": "1:2024897", - "message": "ET USER_AGENTS Go HTTP Client User-Agent", - "category": "misc-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert http $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET USER_AGENTS Go HTTP Client User-Agent\"; flow:established,to_server; http.user_agent; content:\"Go-http-client\"; nocase; fast_pattern; classtype:misc-activity; sid:2024897; rev:3; metadata:attack_target Client_Endpoint, created_at 2017_10_23, deployment Perimeter, confidence High, signature_severity Informational, updated_at 2024_06_13;)" - }, - "count": 1, - "total_related": 33338, - "prevalence": 2.9995800587917693e-05 - }, - { - "value": { - "id": "129:18", - "message": "(stream_tcp) data sent on stream after TCP reset received", - "category": "bad-unknown", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert ( gid:129; sid:18; rev:2; msg:\"(stream_tcp) data sent on stream after TCP reset received\"; metadata: policy max-detect-ips drop, rule-type preproc; classtype:bad-unknown;)" - }, - "count": 1, - "total_related": 67611, - "prevalence": 1.4790492671310882e-05 - }, - { - "value": { - "id": "122:21", - "message": "(port_scan) UDP filtered portscan", - "category": "attempted-recon", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert ( gid:122; sid:21; rev:2; msg:\"(port_scan) UDP filtered portscan\"; metadata: rule-type preproc; classtype:attempted-recon;)" - }, - "count": 1, - "total_related": 81061, - "prevalence": 1.233638864558789e-05 - }, - { - "value": { - "id": "116:58", - "message": "(tcp) experimental TCP options found", - "category": "protocol-command-decode", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert ( gid:116; sid:58; rev:2; msg:\"(tcp) experimental TCP options found\"; metadata: policy max-detect-ips drop, rule-type decode; classtype:protocol-command-decode;)" - }, - "count": 23, - "total_related": 100000, - "prevalence": 0.00023 - }, - { - "value": { - "id": "1:29456", - "message": "PROTOCOL-ICMP Unusual PING detected", - "category": "successful-recon-limited", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "references_urls": [ - "https://krebsonsecurity.com/2014/01/a-closer-look-at-the-target-malware-part-ii/", - "https://krebsonsecurity.com/2014/01/a-first-look-at-the-target-intrusion-malware/" - ], - "rule": "alert icmp $HOME_NET any -> $EXTERNAL_NET any ( msg:\"PROTOCOL-ICMP Unusual PING detected\"; icode:0; itype:8; fragbits:!M; content:!\"ABCDEFGHIJKLMNOPQRSTUVWABCDEFGHI\",depth 32; content:!\"0123456789abcdefghijklmnopqrstuv\",depth 32; content:!\"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE\",depth 36; content:!\"WANG2\"; content:!\"cacti-monitoring-system\",depth 65; content:!\"SolarWinds\",depth 72; metadata:policy max-detect-ips drop,ruleset community; reference:url,krebsonsecurity.com/2014/01/a-closer-look-at-the-target-malware-part-ii/; reference:url,krebsonsecurity.com/2014/01/a-first-look-at-the-target-intrusion-malware/; classtype:successful-recon-limited; sid:29456; rev:3; )" - }, - "count": 18, - "total_related": 100000, - "prevalence": 0.00018 - }, - { - "value": { - "id": "1:382", - "message": "PROTOCOL-ICMP PING Windows", - "category": "misc-activity", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert icmp $EXTERNAL_NET any -> $HOME_NET any ( msg:\"PROTOCOL-ICMP PING Windows\"; itype:8; content:\"abcdefghijklmnop\",depth 16; metadata:ruleset community; classtype:misc-activity; sid:382; rev:11; )" - }, - "count": 18, - "total_related": 100000, - "prevalence": 0.00018 - }, - { - "value": { - "id": "1:384", - "message": "PROTOCOL-ICMP PING", - "category": "misc-activity", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert icmp $EXTERNAL_NET any -> $HOME_NET any ( msg:\"PROTOCOL-ICMP PING\"; icode:0; itype:8; metadata:ruleset community; classtype:misc-activity; sid:384; rev:8; )" - }, - "count": 18, - "total_related": 100000, - "prevalence": 0.00018 - }, - { - "value": { - "id": "1:408", - "message": "PROTOCOL-ICMP Echo Reply", - "category": "misc-activity", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert icmp $EXTERNAL_NET any -> $HOME_NET any ( msg:\"PROTOCOL-ICMP Echo Reply\"; icode:0; itype:0; metadata:ruleset community; classtype:misc-activity; sid:408; rev:8; )" - }, - "count": 18, - "total_related": 100000, - "prevalence": 0.00018 - }, - { - "value": { - "id": "119:260", - "message": "(http_inspect) HTTP Content-Length message body was truncated", - "category": "unknown", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert ( gid:119; sid:260; rev:1; msg:\"(http_inspect) HTTP Content-Length message body was truncated\"; metadata: rule-type preproc; classtype:unknown;)" - }, - "count": 14, - "total_related": 100000, - "prevalence": 0.00014 - }, - { - "value": { - "id": "122:7", - "message": "(port_scan) TCP filtered portsweep", - "category": "attempted-recon", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert ( gid:122; sid:7; rev:2; msg:\"(port_scan) TCP filtered portsweep\"; metadata: rule-type preproc; classtype:attempted-recon;)" - }, - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": { - "id": "1:906200054", - "message": "SSLBL: Malicious JA3 SSL-Client Fingerprint detected (Tofsee)", - "source": "Abuse.ch Suricata JA3 Fingerprint Ruleset", - "url": "https://sslbl.abuse.ch/blacklist/ja3_fingerprints.rules", - "references_urls": [ - "https://sslbl.abuse.ch/ja3-fingerprints/1d095e68489d3c535297cd8dffb06cb9/" - ], - "rule": "alert tls any any -> any any (msg:\"SSLBL: Malicious JA3 SSL-Client Fingerprint detected (Tofsee)\"; ja3_hash; content:\"1d095e68489d3c535297cd8dffb06cb9\"; reference:url, sslbl.abuse.ch/ja3-fingerprints/1d095e68489d3c535297cd8dffb06cb9/; sid:906200054; rev:1;)" - }, - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": { - "id": "1:2210044", - "message": "SURICATA STREAM Packet with invalid timestamp", - "category": "protocol-command-decode", - "source": "Suricata", - "url": "https://www.openinfosecfoundation.org/", - "rule": "alert tcp any any -> any any (msg:\"SURICATA STREAM Packet with invalid timestamp\"; stream-event:pkt_invalid_timestamp; classtype:protocol-command-decode; sid:2210044; rev:2;)" - }, - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": { - "id": "1:254", - "message": "PROTOCOL-DNS SPOOF query response with TTL of 1 min. and no authority", - "category": "bad-unknown", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert udp $EXTERNAL_NET 53 -> $HOME_NET any ( msg:\"PROTOCOL-DNS SPOOF query response with TTL of 1 min. and no authority\"; flow:to_client; content:\"|81 80|\",depth 4,offset 2,fast_pattern; byte_test:2,>,0,0,relative,big; byte_test:2,>,0,2,relative,big; content:\"|00 00 00 00|\",within 4,distance 4; content:\"|C0 0C 00 01 00 01|\",distance 0; byte_test:4,<,61,0,relative,big; byte_test:4,>,0,0,relative,big; metadata:policy max-detect-ips drop,ruleset community; service:dns; classtype:bad-unknown; sid:254; rev:16; )" - }, - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": { - "id": "2:1", - "message": "(output) tagged packet", - "category": "not-suspicious", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert ( gid:2; sid:1; rev:2; msg:\"(output) tagged packet\"; metadata: rule-type preproc; classtype:not-suspicious;)" - }, - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": { - "id": "119:279", - "message": "(http_inspect) invalid status line", - "category": "unknown", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert ( gid:119; sid:279; rev:1; msg:\"(http_inspect) invalid status line\"; metadata: rule-type preproc; classtype:unknown;)" - }, - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": { - "id": "129:8", - "message": "(stream_tcp) data sent on stream after TCP reset sent", - "category": "protocol-command-decode", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert ( gid:129; sid:8; rev:2; msg:\"(stream_tcp) data sent on stream after TCP reset sent\"; metadata: policy max-detect-ips drop, rule-type preproc; classtype:protocol-command-decode;)" - }, - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": { - "id": "1:25080", - "message": "APP-DETECT Apple Messages push.apple.com DNS TXT request attempt", - "category": "policy-violation", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "references_urls": [ - "https://www.apple.com/osx/apps/all.html#messages" - ], - "rule": "alert udp $HOME_NET any -> any 53 ( msg:\"APP-DETECT Apple Messages push.apple.com DNS TXT request attempt\"; flow:to_server; byte_test:1,!&,0xF8,2; content:\"|04|push|05|apple|03|com|00 00 10 00 01|\",fast_pattern,nocase; service:dns; reference:url,www.apple.com/osx/apps/all.html#messages; classtype:policy-violation; gid:1; sid:25080; rev:3; )" - }, - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": { - "id": "1:57756", - "message": "MALWARE-CNC DNS Fast Flux attempt", - "category": "trojan-activity", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "references_urls": [ - "https://attack.mitre.org/techniques/T1568/001/" - ], - "rule": "alert udp $EXTERNAL_NET 53 -> $HOME_NET any ( msg:\"MALWARE-CNC DNS Fast Flux attempt\"; flow:to_client; content:\"|00 01|\",depth 2,offset 4; byte_test:2,>,1,0,relative; byte_test:1,=,1,2,bitmask 0x80; content:\"|00 01 00 01|\",distance 6; content:\"|00 01 00 01 00 00 00 05|\",distance 0; metadata:policy max-detect-ips drop; service:dns; reference:url,attack.mitre.org/techniques/T1568/001/; classtype:trojan-activity; sid:57756; rev:2; )" - }, - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": { - "id": "1:906200056", - "message": "SSLBL: Malicious JA3 SSL-Client Fingerprint detected (Tofsee)", - "source": "Abuse.ch Suricata JA3 Fingerprint Ruleset", - "url": "https://sslbl.abuse.ch/blacklist/ja3_fingerprints.rules", - "references_urls": [ - "https://sslbl.abuse.ch/ja3-fingerprints/d76ee64fb7273733cbe455ac81c292e6/" - ], - "rule": "alert tls any any -> any any (msg:\"SSLBL: Malicious JA3 SSL-Client Fingerprint detected (Tofsee)\"; ja3_hash; content:\"d76ee64fb7273733cbe455ac81c292e6\"; reference:url, sslbl.abuse.ch/ja3-fingerprints/d76ee64fb7273733cbe455ac81c292e6/; sid:906200056; rev:1;)" - }, - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": { - "id": "119:241", - "message": "(http_inspect) Content-Transfer-Encoding used as HTTP header", - "category": "unknown", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert ( gid:119; sid:241; rev:2; msg:\"(http_inspect) Content-Transfer-Encoding used as HTTP header\"; metadata: policy max-detect-ips drop, rule-type preproc; classtype:unknown;)" - }, - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": { - "id": "119:8", - "message": "(http_inspect) URI path contains consecutive slash characters", - "category": "not-suspicious", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert ( gid:119; sid:8; rev:3; msg:\"(http_inspect) URI path contains consecutive slash characters\"; metadata: rule-type preproc; service:http; classtype:not-suspicious;)" - }, - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": { - "id": "122:19", - "message": "(port_scan) UDP portsweep", - "category": "attempted-recon", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert ( gid:122; sid:19; rev:2; msg:\"(port_scan) UDP portsweep\"; metadata: rule-type preproc; classtype:attempted-recon;)" - }, - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": { - "id": "1:2047866", - "message": "ET INFO Observed Google DNS over HTTPS Domain (dns .google in TLS SNI)", - "category": "misc-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://developers.google.com/speed/public-dns/docs/doh/" - ], - "rule": "alert tls $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET INFO Observed Google DNS over HTTPS Domain (dns .google in TLS SNI)\"; flow:established,to_server; threshold: type both, track by_src, count 1, seconds 600; tls.sni; dotprefix; content:\".dns.google\"; endswith; reference:url,developers.google.com/speed/public-dns/docs/doh/; classtype:misc-activity; sid:2047866; rev:4; metadata:affected_product Any, attack_target Client_Endpoint, created_at 2022_02_07, deployment Perimeter, performance_impact Low, confidence High, signature_severity Informational, tag DoH, updated_at 2023_10_05, reviewed_at 2023_10_05, former_sid 2851058; target:src_ip;)" - }, - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": { - "id": "1:31767", - "message": "SERVER-OTHER MRLG fastping echo reply memory corruption attempt", - "category": "misc-attack", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "references_urls": [ - "https://cve.mitre.org/cgi-bin/cvename.cgi?name=2014-3931", - "https://mrlg.op-sec.us/", - "https://s3.eurecom.fr/cve/CVE-2014-3931.txt" - ], - "tags": [ - "cve-2014-3931" - ], - "rule": "alert icmp $EXTERNAL_NET any -> $HOME_NET any ( msg:\"SERVER-OTHER MRLG fastping echo reply memory corruption attempt\"; icode:0; itype:0; content:!\"ABCDEFGHIJKLMNOPQRSTUVWABCDEFGHI\",depth 32; content:!\"0123456789abcdefghijklmnopqrstuv\",depth 32; content:!\"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE\",depth 36; byte_test:4,>,1000000,8,little; metadata:policy max-detect-ips drop; reference:cve,2014-3931; reference:url,mrlg.op-sec.us/; reference:url,s3.eurecom.fr/cve/CVE-2014-3931.txt; classtype:misc-attack; sid:31767; rev:2; )" - }, - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": { - "id": "119:281", - "message": "(http_inspect) invalid request line", - "category": "unknown", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert ( gid:119; sid:281; rev:1; msg:\"(http_inspect) invalid request line\"; metadata: rule-type preproc; classtype:unknown;)" - }, - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": { - "id": "1:2023883", - "message": "ET DNS Query to a *.top domain - Likely Hostile", - "category": "bad-unknown", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://www.symantec.com/connect/blogs/shady-tld-research-gdn-and-our-2016-wrap", - "https://www.spamhaus.org/statistics/tlds/" - ], - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET DNS Query to a *.top domain - Likely Hostile\"; threshold:type limit, track by_src, count 1, seconds 30; dns.query; content:\".top\"; nocase; endswith; reference:url,www.symantec.com/connect/blogs/shady-tld-research-gdn-and-our-2016-wrap; reference:url,www.spamhaus.org/statistics/tlds/; classtype:bad-unknown; sid:2023883; rev:4; metadata:affected_product Windows_XP_Vista_7_8_10_Server_32_64_Bit, attack_target Client_Endpoint, created_at 2017_02_07, deployment Perimeter, confidence Medium, signature_severity Major, updated_at 2020_09_15;)" - }, - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": { - "id": "1:2029340", - "message": "ET INFO TLS Handshake Failure", - "category": "bad-unknown", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert tls $EXTERNAL_NET any -> $HOME_NET any (msg:\"ET INFO TLS Handshake Failure\"; flow:established,to_client; dsize:7; content:\"|15|\"; depth:1; content:\"|00 02 02 28|\"; distance:2; within:4; fast_pattern; classtype:bad-unknown; sid:2029340; rev:2; metadata:attack_target Client_Endpoint, created_at 2020_01_30, deployment Perimeter, confidence High, signature_severity Informational, updated_at 2020_01_30;)" - }, - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": { - "id": "1:43687", - "message": "INDICATOR-COMPROMISE Suspicious .top dns query", - "category": "misc-activity", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "references_urls": [ - "https://en.wikipedia.org/wiki/.top" - ], - "rule": "alert udp $HOME_NET any -> any 53 ( msg:\"INDICATOR-COMPROMISE Suspicious .top dns query\"; flow:to_server; byte_test:1,!&,0xF8,2; content:\"|03|top|00|\",fast_pattern,nocase; service:dns; reference:url,en.wikipedia.org/wiki/.top; classtype:misc-activity; gid:1; sid:43687; rev:3; )" - }, - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": { - "id": "119:228", - "message": "(http_inspect) server response before client request", - "category": "unknown", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert ( gid:119; sid:228; rev:2; msg:\"(http_inspect) server response before client request\"; metadata: rule-type preproc; classtype:unknown;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "129:14", - "message": "(stream_tcp) TCP timestamp is missing", - "category": "bad-unknown", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "rule": "alert ( gid:129; sid:14; rev:2; msg:\"(stream_tcp) TCP timestamp is missing\"; metadata: policy max-detect-ips drop, rule-type preproc; classtype:bad-unknown;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "1:2025275", - "message": "ET INFO Windows OS Submitting USB Metadata to Microsoft", - "category": "misc-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert http $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET INFO Windows OS Submitting USB Metadata to Microsoft\"; flow:established,to_server; threshold:type limit, seconds 300, count 1, track by_src; http.method; content:\"POST\"; http.uri; content:\"metadata.svc\"; endswith; http.header; content:\"/DeviceMetadataService/GetDeviceMetadata|22 0d 0a|\"; http.user_agent; content:\"MICROSOFT_DEVICE_METADATA_RETRIEVAL_CLIENT\"; depth:42; endswith; fast_pattern; classtype:misc-activity; sid:2025275; rev:4; metadata:affected_product Windows_XP_Vista_7_8_10_Server_32_64_Bit, attack_target Client_Endpoint, created_at 2018_01_31, deployment Perimeter, performance_impact Low, confidence High, signature_severity Minor, updated_at 2020_09_17;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "1:2027390", - "message": "ET USER_AGENTS Microsoft Device Metadata Retrieval Client User-Agent", - "category": "misc-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert http $HOME_NET any -> $EXTERNAL_NET any (msg:\"ET USER_AGENTS Microsoft Device Metadata Retrieval Client User-Agent\"; flow:established,to_server; http.user_agent; content:\"MICROSOFT_DEVICE_METADATA_RETRIEVAL_CLIENT\"; depth:42; endswith; nocase; fast_pattern; classtype:misc-activity; sid:2027390; rev:4; metadata:affected_product Web_Browsers, attack_target Client_Endpoint, created_at 2019_05_28, deployment Perimeter, performance_impact Low, confidence High, signature_severity Informational, updated_at 2020_09_17;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "1:2027863", - "message": "ET INFO Observed DNS Query to .biz TLD", - "category": "bad-unknown", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "references_urls": [ - "https://www.spamhaus.org/statistics/tlds/" - ], - "rule": "alert dns $HOME_NET any -> any any (msg:\"ET INFO Observed DNS Query to .biz TLD\"; dns.query; content:\".biz\"; nocase; endswith; reference:url,www.spamhaus.org/statistics/tlds/; classtype:bad-unknown; sid:2027863; rev:5; metadata:affected_product Any, attack_target Client_Endpoint, created_at 2019_08_13, deployment Perimeter, confidence High, signature_severity Informational, updated_at 2022_11_21;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "1:2031231", - "message": "ET INFO Observed ZeroSSL SSL/TLS Certificate", - "category": "misc-activity", - "source": "Proofpoint Emerging Threats Open", - "url": "https://rules.emergingthreats.net/", - "rule": "alert tls $EXTERNAL_NET any -> $HOME_NET any (msg:\"ET INFO Observed ZeroSSL SSL/TLS Certificate\"; flow:from_server,established; tls.cert_issuer; content:\"ZeroSSL\"; classtype:misc-activity; sid:2031231; rev:3; metadata:created_at 2020_11_23, confidence High, signature_severity Informational, updated_at 2022_12_01;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "1:2210054", - "message": "SURICATA STREAM excessive retransmissions", - "category": "protocol-command-decode", - "source": "Suricata", - "url": "https://www.openinfosecfoundation.org/", - "rule": "alert tcp any any -> any any (msg:\"SURICATA STREAM excessive retransmissions\"; flowbits:isnotset,tcp.retransmission.alerted; flowint:tcp.retransmission.count,>=,10; flowbits:set,tcp.retransmission.alerted; classtype:protocol-command-decode; sid:2210054; rev:1;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "1:2221010", - "message": "SURICATA HTTP unable to match response to request", - "category": "protocol-command-decode", - "source": "Suricata", - "url": "https://www.openinfosecfoundation.org/", - "rule": "alert http any any -> any any (msg:\"SURICATA HTTP unable to match response to request\"; flow:established,to_client; app-layer-event:http.unable_to_match_response_to_request; flowint:http.anomaly.count,+,1; classtype:protocol-command-decode; sid:2221010; rev:1;)" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "1:50447", - "message": "POLICY-OTHER HTTP request by IPv4 address attempt", - "category": "policy-violation", - "source": "Snort registered user ruleset", - "url": "https://www.snort.org/downloads/#rule-downloads", - "references_urls": [ - "https://www.w3.org/Protocols/rfc2616/rfc2616-sec15.html" - ], - "rule": "alert tcp any any -> any $HTTP_PORTS ( msg:\"POLICY-OTHER HTTP request by IPv4 address attempt\"; flow:to_server,established; http_header; content:\"Host:\",fast_pattern,nocase; pcre:\"/^Host\\x3a\\s*(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\\s*:?\\s*\\d*\\s*$/ims\"; service:http; reference:url,www.w3.org/Protocols/rfc2616/rfc2616-sec15.html; classtype:policy-violation; sid:50447; rev:1; )" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "crowdsourced_yara_results": [ - { - "value": { - "id": "002bb473a9|High_Entropy_LNK", - "ruleset_id": "002bb473a9", - "ruleset_name": "LNK_Ruleset", - "rule_name": "High_Entropy_LNK", - "source": "https://github.com/bartblaze/Yara-rules" - }, - "count": 34, - "total_related": 4902, - "prevalence": 0.0069359445124439 - }, - { - "value": { - "id": "000bd045c7|SUSP_LNK_Big_Link_File", - "ruleset_id": "000bd045c7", - "ruleset_name": "gen_susp_lnk", - "rule_name": "SUSP_LNK_Big_Link_File", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 26, - "total_related": 6301, - "prevalence": 0.004126329154102523 - }, - { - "value": { - "id": "002bb473a9|Large_filesize_LNK", - "ruleset_id": "002bb473a9", - "ruleset_name": "LNK_Ruleset", - "rule_name": "Large_filesize_LNK", - "source": "https://github.com/bartblaze/Yara-rules" - }, - "count": 26, - "total_related": 12166, - "prevalence": 0.0021371034029261876 - }, - { - "value": { - "id": "01a4e63dd2|downloader_win_curl_agent", - "ruleset_id": "01a4e63dd2", - "ruleset_name": "downloader_win_curl_agent", - "rule_name": "downloader_win_curl_agent", - "source": "https://github.com/SEKOIA-IO/Community" - }, - "count": 10, - "total_related": 10, - "prevalence": 1.0 - }, - { - "value": { - "id": "0086c5e942|win_cur1_downloader_auto", - "ruleset_id": "0086c5e942", - "ruleset_name": "win.cur1_downloader_auto", - "rule_name": "win_cur1_downloader_auto", - "source": "https://github.com/malpedia/signator-rules" - }, - "count": 8, - "total_related": 8, - "prevalence": 1.0 - }, - { - "value": { - "id": "00885934ef|win_unidentified_101_auto", - "ruleset_id": "00885934ef", - "ruleset_name": "win.unidentified_101_auto", - "rule_name": "win_unidentified_101_auto", - "source": "https://github.com/malpedia/signator-rules" - }, - "count": 8, - "total_related": 8, - "prevalence": 1.0 - }, - { - "value": { - "id": "01a8c3cf91|apt_lazarus_vhd_ransomware_downloader", - "ruleset_id": "01a8c3cf91", - "ruleset_name": "apt_lazarus_vhd_ransomware_downloader", - "rule_name": "apt_lazarus_vhd_ransomware_downloader", - "source": "https://github.com/SEKOIA-IO/Community" - }, - "count": 8, - "total_related": 8, - "prevalence": 1.0 - }, - { - "value": { - "id": "01269e8003|Microsoft_2007_OLE_Encrypted", - "ruleset_id": "01269e8003", - "ruleset_name": "Microsoft_2007_OLE_Encrypted", - "rule_name": "Microsoft_2007_OLE_Encrypted", - "source": "https://github.com/InQuest/yara-rules-vt" - }, - "count": 8, - "total_related": 36625, - "prevalence": 0.00021843003412969284 - }, - { - "value": { - "id": "0120f242fe|Encrypted_Office_Document", - "ruleset_id": "0120f242fe", - "ruleset_name": "Encrypted_Office_Document", - "rule_name": "Encrypted_Office_Document", - "source": "https://github.com/InQuest/yara-rules-vt" - }, - "count": 8, - "total_related": 57010, - "prevalence": 0.00014032625855113138 - }, - { - "value": { - "id": "01ad5b0691|apt_lazarus_dangerouspassword_lnk", - "ruleset_id": "01ad5b0691", - "ruleset_name": "apt_lazarus_dangerouspassword_lnk", - "rule_name": "apt_lazarus_dangerouspassword_lnk", - "source": "https://github.com/SEKOIA-IO/Community" - }, - "count": 7, - "total_related": 8, - "prevalence": 0.875 - }, - { - "value": { - "id": "0008f6eca4|Office_AutoOpen_Macro", - "ruleset_id": "0008f6eca4", - "ruleset_name": "general_officemacros", - "rule_name": "Office_AutoOpen_Macro", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 7, - "total_related": 47018, - "prevalence": 0.00014887915266493683 - }, - { - "value": { - "id": "0007bbfc16|WEBSHELL_ASP_OBFUSC", - "ruleset_id": "0007bbfc16", - "ruleset_name": "gen_webshells", - "rule_name": "WEBSHELL_ASP_OBFUSC", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 6, - "total_related": 1869, - "prevalence": 0.0032102728731942215 - }, - { - "value": { - "id": "01244057f9|Microsoft_LNK_with_CMD_EXE_Reference", - "ruleset_id": "01244057f9", - "ruleset_name": "Microsoft_LNK_with_CMD_EXE_Reference", - "rule_name": "Microsoft_LNK_with_CMD_EXE_Reference", - "source": "https://github.com/InQuest/yara-rules-vt" - }, - "count": 6, - "total_related": 23550, - "prevalence": 0.00025477707006369424 - }, - { - "value": { - "id": "0000ea19af|LNK_Malicious_Nov1", - "ruleset_id": "0000ea19af", - "ruleset_name": "gen_mal_link", - "rule_name": "LNK_Malicious_Nov1", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 6, - "total_related": 31633, - "prevalence": 0.00018967533904466855 - }, - { - "value": { - "id": "002bb473a9|PS_in_LNK", - "ruleset_id": "002bb473a9", - "ruleset_name": "LNK_Ruleset", - "rule_name": "PS_in_LNK", - "source": "https://github.com/bartblaze/Yara-rules" - }, - "count": 6, - "total_related": 63582, - "prevalence": 9.436633009342267e-05 - }, - { - "value": { - "id": "01a756b7e2|downloader_mac_rustbucket", - "ruleset_id": "01a756b7e2", - "ruleset_name": "downloader_mac_rustbucket", - "rule_name": "downloader_mac_rustbucket", - "source": "https://github.com/SEKOIA-IO/Community" - }, - "count": 5, - "total_related": 16, - "prevalence": 0.3125 - }, - { - "value": { - "id": "015381d075|MacOS_Trojan_RustBucket_e64f7a92", - "ruleset_id": "015381d075", - "ruleset_name": "MacOS_Trojan_RustBucket", - "rule_name": "MacOS_Trojan_RustBucket_e64f7a92", - "source": "https://github.com/elastic/protections-artifacts" - }, - "count": 4, - "total_related": 21, - "prevalence": 0.19047619047619047 - }, - { - "value": { - "id": "0007bbfc16|webshell_asp_obfuscated", - "ruleset_id": "0007bbfc16", - "ruleset_name": "gen_webshells", - "rule_name": "webshell_asp_obfuscated", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 4, - "total_related": 8594, - "prevalence": 0.00046544100535257155 - }, - { - "value": { - "id": "01ac9a3e58|downloader_mac_rustbucket_swiftloader", - "ruleset_id": "01ac9a3e58", - "ruleset_name": "downloader_mac_rustbucket_swiftloader", - "rule_name": "downloader_mac_rustbucket_swiftloader", - "source": "https://github.com/SEKOIA-IO/Community" - }, - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": { - "id": "015ea2c86a|MacOS_Trojan_KandyKorn_a7bb6944", - "ruleset_id": "015ea2c86a", - "ruleset_name": "MacOS_Trojan_KandyKorn", - "rule_name": "MacOS_Trojan_KandyKorn_a7bb6944", - "source": "https://github.com/elastic/protections-artifacts" - }, - "count": 3, - "total_related": 18, - "prevalence": 0.16666666666666666 - }, - { - "value": { - "id": "002bb473a9|CDN_in_LNK", - "ruleset_id": "002bb473a9", - "ruleset_name": "LNK_Ruleset", - "rule_name": "CDN_in_LNK", - "source": "https://github.com/bartblaze/Yara-rules" - }, - "count": 2, - "total_related": 3095, - "prevalence": 0.0006462035541195477 - }, - { - "value": { - "id": "00032bfe82|SUSP_LNK_SuspiciousCommands", - "ruleset_id": "00032bfe82", - "ruleset_name": "gen_susp_lnk_files", - "rule_name": "SUSP_LNK_SuspiciousCommands", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 2, - "total_related": 11437, - "prevalence": 0.0001748710326134476 - }, - { - "value": { - "id": "00848f61f2|win_lazarloader_auto", - "ruleset_id": "00848f61f2", - "ruleset_name": "win.lazarloader_auto", - "rule_name": "win_lazarloader_auto", - "source": "https://github.com/malpedia/signator-rules" - }, - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": { - "id": "01a6252a71|apt_lazarus_vhd_ransomware_loader", - "ruleset_id": "01a6252a71", - "ruleset_name": "apt_lazarus_vhd_ransomware_loader", - "rule_name": "apt_lazarus_vhd_ransomware_loader", - "source": "https://github.com/SEKOIA-IO/Community" - }, - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": { - "id": "01a867e149|implant_mac_rustbucket", - "ruleset_id": "01a867e149", - "ruleset_name": "implant_mac_rustbucket", - "rule_name": "implant_mac_rustbucket", - "source": "https://github.com/SEKOIA-IO/Community" - }, - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": { - "id": "0154befd02|Windows_Trojan_Donutloader_21e801e0", - "ruleset_id": "0154befd02", - "ruleset_name": "Windows_Trojan_Donutloader", - "rule_name": "Windows_Trojan_Donutloader_21e801e0", - "source": "https://github.com/elastic/protections-artifacts" - }, - "count": 1, - "total_related": 120, - "prevalence": 0.008333333333333333 - }, - { - "value": { - "id": "01ab014df3|backdoor_mul_sparkrat", - "ruleset_id": "01ab014df3", - "ruleset_name": "backdoor_mul_sparkrat", - "rule_name": "backdoor_mul_sparkrat", - "source": "https://github.com/SEKOIA-IO/Community" - }, - "count": 1, - "total_related": 311, - "prevalence": 0.003215434083601286 - }, - { - "value": { - "id": "00cd20741a|INDICATOR_OLE_Suspicious_MITRE_T1117", - "ruleset_id": "00cd20741a", - "ruleset_name": "indicator_office", - "rule_name": "INDICATOR_OLE_Suspicious_MITRE_T1117", - "source": "https://github.com/ditekshen/detection" - }, - "count": 1, - "total_related": 1054, - "prevalence": 0.0009487666034155598 - }, - { - "value": { - "id": "00017701b5|Disclosed_0day_POCs_payload_MSI", - "ruleset_id": "00017701b5", - "ruleset_name": "thor-hacktools", - "rule_name": "Disclosed_0day_POCs_payload_MSI", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 1, - "total_related": 5736, - "prevalence": 0.00017433751743375174 - }, - { - "value": { - "id": "000f4bfd25|IMPLANT_4_v7", - "ruleset_id": "000f4bfd25", - "ruleset_name": "apt_grizzlybear_uscert", - "rule_name": "IMPLANT_4_v7", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 1, - "total_related": 6457, - "prevalence": 0.00015487068297971194 - }, - { - "value": { - "id": "01267baf74|Microsoft_OneNote_with_Suspicious_String", - "ruleset_id": "01267baf74", - "ruleset_name": "Microsoft_OneNote_with_Suspicious_String", - "rule_name": "Microsoft_OneNote_with_Suspicious_String", - "source": "https://github.com/InQuest/yara-rules-vt" - }, - "count": 1, - "total_related": 6502, - "prevalence": 0.00015379883112888343 - }, - { - "value": { - "id": "000552ff9e|SUSP_ZIP_LNK_PhishAttachment_Pattern_Jun22_1", - "ruleset_id": "000552ff9e", - "ruleset_name": "gen_phish_attachments", - "rule_name": "SUSP_ZIP_LNK_PhishAttachment_Pattern_Jun22_1", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 1, - "total_related": 15557, - "prevalence": 6.4279745452208e-05 - }, - { - "value": { - "id": "002bb473a9|Download_in_LNK", - "ruleset_id": "002bb473a9", - "ruleset_name": "LNK_Ruleset", - "rule_name": "Download_in_LNK", - "source": "https://github.com/bartblaze/Yara-rules" - }, - "count": 170, - "total_related": 100000, - "prevalence": 0.0017 - }, - { - "value": { - "id": "002bb473a9|EXE_in_LNK", - "ruleset_id": "002bb473a9", - "ruleset_name": "LNK_Ruleset", - "rule_name": "EXE_in_LNK", - "source": "https://github.com/bartblaze/Yara-rules" - }, - "count": 170, - "total_related": 100000, - "prevalence": 0.0017 - }, - { - "value": { - "id": "002bb473a9|Execution_in_LNK", - "ruleset_id": "002bb473a9", - "ruleset_name": "LNK_Ruleset", - "rule_name": "Execution_in_LNK", - "source": "https://github.com/bartblaze/Yara-rules" - }, - "count": 98, - "total_related": 100000, - "prevalence": 0.00098 - }, - { - "value": { - "id": "002bb473a9|Long_RelativePath_LNK", - "ruleset_id": "002bb473a9", - "ruleset_name": "LNK_Ruleset", - "rule_name": "Long_RelativePath_LNK", - "source": "https://github.com/bartblaze/Yara-rules" - }, - "count": 37, - "total_related": 100000, - "prevalence": 0.00037 - }, - { - "value": { - "id": "0122a7f913|Windows_API_Function", - "ruleset_id": "0122a7f913", - "ruleset_name": "Windows_API_Function", - "rule_name": "Windows_API_Function", - "source": "https://github.com/InQuest/yara-rules-vt" - }, - "count": 23, - "total_related": 100000, - "prevalence": 0.00023 - }, - { - "value": { - "id": "002bb473a9|MSOffice_in_LNK", - "ruleset_id": "002bb473a9", - "ruleset_name": "LNK_Ruleset", - "rule_name": "MSOffice_in_LNK", - "source": "https://github.com/bartblaze/Yara-rules" - }, - "count": 20, - "total_related": 100000, - "prevalence": 0.0002 - }, - { - "value": { - "id": "002bb473a9|PDF_in_LNK", - "ruleset_id": "002bb473a9", - "ruleset_name": "LNK_Ruleset", - "rule_name": "PDF_in_LNK", - "source": "https://github.com/bartblaze/Yara-rules" - }, - "count": 16, - "total_related": 100000, - "prevalence": 0.00016 - }, - { - "value": { - "id": "002bb473a9|Script_in_LNK", - "ruleset_id": "002bb473a9", - "ruleset_name": "LNK_Ruleset", - "rule_name": "Script_in_LNK", - "source": "https://github.com/bartblaze/Yara-rules" - }, - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": { - "id": "0122bae1e9|Base64_Encoded_URL", - "ruleset_id": "0122bae1e9", - "ruleset_name": "Base64_Encoded_URL", - "rule_name": "Base64_Encoded_URL", - "source": "https://github.com/InQuest/yara-rules-vt" - }, - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": { - "id": "00054b746e|SUSP_XORed_MSDOS_Stub_Message", - "ruleset_id": "00054b746e", - "ruleset_name": "gen_xor_hunting", - "rule_name": "SUSP_XORed_MSDOS_Stub_Message", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 8, - "total_related": 100000, - "prevalence": 8e-05 - }, - { - "value": { - "id": "002bb473a9|Archive_in_LNK", - "ruleset_id": "002bb473a9", - "ruleset_name": "LNK_Ruleset", - "rule_name": "Archive_in_LNK", - "source": "https://github.com/bartblaze/Yara-rules" - }, - "count": 8, - "total_related": 100000, - "prevalence": 8e-05 - }, - { - "value": { - "id": "01234b2177|Office_Document_with_VBA_Project", - "ruleset_id": "01234b2177", - "ruleset_name": "Office_Document_with_VBA_Project", - "rule_name": "Office_Document_with_VBA_Project", - "source": "https://github.com/InQuest/yara-rules-vt" - }, - "count": 8, - "total_related": 100000, - "prevalence": 8e-05 - }, - { - "value": { - "id": "0121ae37cc|Adobe_XMP_Identifier", - "ruleset_id": "0121ae37cc", - "ruleset_name": "Adobe_XMP_Identifier", - "rule_name": "Adobe_XMP_Identifier", - "source": "https://github.com/InQuest/yara-rules-vt" - }, - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": { - "id": "0009c8b3d6|SUSP_Excel4Macro_AutoOpen", - "ruleset_id": "0009c8b3d6", - "ruleset_name": "gen_Excel4Macro_Sharpshooter", - "rule_name": "SUSP_Excel4Macro_AutoOpen", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "000e46d4d8|SUSP_obfuscated_JS_obfuscatorio", - "ruleset_id": "000e46d4d8", - "ruleset_name": "gen_susp_js_obfuscatorio", - "rule_name": "SUSP_obfuscated_JS_obfuscatorio", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "00b9150bc4|SparkRAT", - "ruleset_id": "00b9150bc4", - "ruleset_name": "SparkRAT", - "rule_name": "SparkRAT", - "source": "https://github.com/kevoreilly/CAPEv2" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "0121cb9684|Base64_Encoded_Powershell_Directives", - "ruleset_id": "0121cb9684", - "ruleset_name": "Base64_Encoded_Powershell_Directives", - "rule_name": "Base64_Encoded_Powershell_Directives", - "source": "https://github.com/InQuest/yara-rules-vt" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "0124227417|Adobe_Type_1_Font", - "ruleset_id": "0124227417", - "ruleset_name": "Adobe_Type_1_Font", - "rule_name": "Adobe_Type_1_Font", - "source": "https://github.com/InQuest/yara-rules-vt" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "0128bcac9e|Microsoft_Excel_Hidden_Macrosheet", - "ruleset_id": "0128bcac9e", - "ruleset_name": "Microsoft_Excel_Hidden_Macrosheet", - "rule_name": "Microsoft_Excel_Hidden_Macrosheet", - "source": "https://github.com/InQuest/yara-rules-vt" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "embedded_domains": [ - { - "value": "commoncome.online", - "count": 6, - "total_related": 8, - "prevalence": 0.75 - }, - { - "value": "web.commoncome.online", - "count": 6, - "total_related": 8, - "prevalence": 0.75 - }, - { - "value": "datacentre.center", - "count": 6, - "total_related": 10, - "prevalence": 0.6 - }, - { - "value": "www.datacentre.center", - "count": 6, - "total_related": 11, - "prevalence": 0.5454545454545454 - }, - { - "value": "googlesheet.info", - "count": 6, - "total_related": 33, - "prevalence": 0.18181818181818182 - }, - { - "value": "www.googlesheet.info", - "count": 6, - "total_related": 51, - "prevalence": 0.11764705882352941 - }, - { - "value": "bloomcloud.org", - "count": 5, - "total_related": 18, - "prevalence": 0.2777777777777778 - }, - { - "value": "share.bloomcloud.org", - "count": 5, - "total_related": 18, - "prevalence": 0.2777777777777778 - }, - { - "value": "googlesheetpage.org", - "count": 5, - "total_related": 30, - "prevalence": 0.16666666666666666 - }, - { - "value": "fclouddown.co", - "count": 5, - "total_related": 77, - "prevalence": 0.06493506493506493 - }, - { - "value": "file.fclouddown.co", - "count": 5, - "total_related": 86, - "prevalence": 0.05813953488372093 - }, - { - "value": "work.gd", - "count": 5, - "total_related": 330, - "prevalence": 0.015151515151515152 - }, - { - "value": "newcoming.cfd", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "welcome.newcoming.cfd", - "count": 4, - "total_related": 5, - "prevalence": 0.8 - }, - { - "value": "buy2x.com", - "count": 4, - "total_related": 8, - "prevalence": 0.5 - }, - { - "value": "wpsonline.co", - "count": 4, - "total_related": 10, - "prevalence": 0.4 - }, - { - "value": "venturelabo.co", - "count": 4, - "total_related": 28, - "prevalence": 0.14285714285714285 - }, - { - "value": "isosecurity.xyz", - "count": 4, - "total_related": 65, - "prevalence": 0.06153846153846154 - }, - { - "value": "us06st1.zoom.us", - "count": 4, - "total_related": 2252, - "prevalence": 0.0017761989342806395 - }, - { - "value": "tauri.app", - "count": 4, - "total_related": 27649, - "prevalence": 0.0001446706933342978 - }, - { - "value": "spirtblockchain.com", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "wps.wpsonline.co", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "autodynamics.work.gd", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "open.googlesheetpage.org", - "count": 3, - "total_related": 6, - "prevalence": 0.5 - }, - { - "value": "blockverify.com", - "count": 3, - "total_related": 9, - "prevalence": 0.3333333333333333 - }, - { - "value": "www.blockverify.com", - "count": 3, - "total_related": 9, - "prevalence": 0.3333333333333333 - }, - { - "value": "www.docusign.agency", - "count": 3, - "total_related": 12, - "prevalence": 0.25 - }, - { - "value": "docusign.agency", - "count": 3, - "total_related": 13, - "prevalence": 0.23076923076923078 - }, - { - "value": "privacysign.org", - "count": 3, - "total_related": 25, - "prevalence": 0.12 - }, - { - "value": "www.privacysign.org", - "count": 3, - "total_related": 37, - "prevalence": 0.08108108108108109 - }, - { - "value": "filesaves.cloud", - "count": 3, - "total_related": 38, - "prevalence": 0.07894736842105263 - }, - { - "value": "doc.filesaves.cloud", - "count": 3, - "total_related": 39, - "prevalence": 0.07692307692307693 - }, - { - "value": "8marketcap.com", - "count": 3, - "total_related": 63, - "prevalence": 0.047619047619047616 - }, - { - "value": "documentprotect.live", - "count": 3, - "total_related": 63, - "prevalence": 0.047619047619047616 - }, - { - "value": "source.zoom.us", - "count": 3, - "total_related": 590, - "prevalence": 0.005084745762711864 - }, - { - "value": "messari.io", - "count": 3, - "total_related": 1110, - "prevalence": 0.002702702702702703 - }, - { - "value": "www.wolfram.com", - "count": 3, - "total_related": 29235, - "prevalence": 0.0001026167265264238 - }, - { - "value": "niso.org", - "count": 3, - "total_related": 89659, - "prevalence": 3.346010997222811e-05 - }, - { - "value": "doc.gdocshare.one", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "amctradinggroup.biz", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "cloud.dnx.capital", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "abiesvc.jp.net", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "doc-share.cloud", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "docs.azureword.com", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "autoserverupdate.line.pm", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "dnx.capital", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "documentprotect.pro", - "count": 2, - "total_related": 8, - "prevalence": 0.25 - }, - { - "value": "docstream.online", - "count": 2, - "total_related": 25, - "prevalence": 0.08 - }, - { - "value": "capmarketreport.com", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "azure-drive.com", - "count": 2, - "total_related": 34, - "prevalence": 0.058823529411764705 - }, - { - "value": "doc.venturelabo.co", - "count": 2, - "total_related": 40, - "prevalence": 0.05 - }, - { - "value": "azureword.com", - "count": 2, - "total_related": 48, - "prevalence": 0.041666666666666664 - }, - { - "value": "document.fastercapital.cc", - "count": 2, - "total_related": 50, - "prevalence": 0.04 - }, - { - "value": "coindesk.com", - "count": 2, - "total_related": 25456, - "prevalence": 7.856693903205531e-05 - }, - { - "value": "bit.ly", - "count": 88, - "total_related": 100000, - "prevalence": 0.00088 - }, - { - "value": "openxmlformats.org", - "count": 65, - "total_related": 100000, - "prevalence": 0.00065 - }, - { - "value": "schemas.openxmlformats.org", - "count": 65, - "total_related": 100000, - "prevalence": 0.00065 - }, - { - "value": "apple.com", - "count": 37, - "total_related": 100000, - "prevalence": 0.00037 - }, - { - "value": "www.apple.com", - "count": 37, - "total_related": 100000, - "prevalence": 0.00037 - }, - { - "value": "purl.org", - "count": 23, - "total_related": 100000, - "prevalence": 0.00023 - }, - { - "value": "crl.apple.com", - "count": 15, - "total_related": 100000, - "prevalence": 0.00015 - }, - { - "value": "ocsp.apple.com", - "count": 15, - "total_related": 100000, - "prevalence": 0.00015 - }, - { - "value": "docs.rs", - "count": 14, - "total_related": 100000, - "prevalence": 0.00014 - }, - { - "value": "github.com", - "count": 14, - "total_related": 100000, - "prevalence": 0.00014 - }, - { - "value": "microsoft.com", - "count": 14, - "total_related": 100000, - "prevalence": 0.00014 - }, - { - "value": "schemas.microsoft.com", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": "iec.ch", - "count": 8, - "total_related": 100000, - "prevalence": 8e-05 - }, - { - "value": "www.iec.ch", - "count": 8, - "total_related": 100000, - "prevalence": 8e-05 - }, - { - "value": "cacerts.digicert.com", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "crl3.digicert.com", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "digicert.com", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "support.microsoft.com", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "www.style", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "www.world", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "zoom.us", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "adobe.com", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "creativecommons.org", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "crossmark.crossref.org", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "crossref.org", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "doi.org", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "mdpi.com", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "ns.adobe.com", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "prismstandard.org", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "researchgate.net", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "tandfonline.com", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "w3.org", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "wolfram.com", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "www.mdpi.com", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "www.niso.org", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "www.researchgate.net", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "www.tandfonline.com", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "www.w3.org", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "apache.org", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "cdn.jsdelivr.net", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "comodoca.com", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "crl.comodoca.com", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "crl.sectigo.com", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "crl4.digicert.com", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "crt.sectigo.com", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "day.com", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - } - ], - "embedded_ips": [ - { - "value": "125.0.0.0", - "count": 6, - "total_related": 17552, - "prevalence": 0.00034184138559708297 - }, - { - "value": "134.193.128.7", - "count": 5, - "total_related": 9, - "prevalence": 0.5555555555555556 - }, - { - "value": "::", - "count": 4, - "total_related": 2162, - "prevalence": 0.0018501387604070306 - }, - { - "value": "95.179.235.55", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "10.19.12.185", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "149.28.162.113", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "::f", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "152.89.247.236", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "1::2", - "count": 1, - "total_related": 19802, - "prevalence": 5.04999495000505e-05 - }, - { - "value": "24.0.0.22", - "count": 1, - "total_related": 44697, - "prevalence": 2.237286618788733e-05 - }, - { - "value": "17.7.0.0", - "count": 1, - "total_related": 46808, - "prevalence": 2.136386942403008e-05 - }, - { - "value": "24.0.0.1", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "embedded_urls": [ - { - "value": "http://schemas.openxmlformats.org/jpg", - "count": 6, - "total_related": 11, - "prevalence": 0.5454545454545454 - }, - { - "value": "https://support.microsoft.com/imgs", - "count": 4, - "total_related": 6, - "prevalence": 0.6666666666666666 - }, - { - "value": "ws://web.commoncome.online:8080/clientrust-websocketsrc/main.rsEj7bx@YRG2uUhya", - "count": 4, - "total_related": 6, - "prevalence": 0.6666666666666666 - }, - { - "value": "http://schemas.microsoft.com/office/2006/keyEncryptor/certificate", - "count": 4, - "total_related": 12556, - "prevalence": 0.00031857279388340236 - }, - { - "value": "http://schemas.microsoft.com/office/2006/keyEncryptor/password", - "count": 4, - "total_related": 20898, - "prevalence": 0.00019140587616039813 - }, - { - "value": "http://schemas.microsoft.com/office/2006/encryption", - "count": 4, - "total_related": 21289, - "prevalence": 0.0001878904598619005 - }, - { - "value": "http://spirtblockchain.com/PRw8DBaZTPN/jMEaUwfQBd/SwW1t7VQzg/CSBM7BiRDI/UDMurOYsxo/G5A==", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "http://crossmark.crossref.org/dialog/?doi=10.1080/23322039.2022.2087287&domain=pdf", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "http://crossmark.crossref.org/dialog/?doi=10.1080/23322039.2022.2087287&domain=pdf&date_stamp=2022-06-14", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "https://8marketcap.com/metals", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "https://doi.org/10.1007/s10479-021-04000-8", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "https://doi.org/10.1007/s40822-021-00180-7", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "https://doi.org/10.1016/j.qref.2021.02.010", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "https://doi.org/10.1051/e3sconf/202021801050", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "https://doi.org/10.1080/23322039.2022.2087287", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "https://doi.org/10.1111/manc.12352", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "https://doi.org/10.4314/JFAS.V9I3S.61", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "https://doi.org/10.7717/peerj-cs.413", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "https://messari.io/asset/bitcoin/historical", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "https://www.mdpi.com/2227-7390/9/20/2567", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "https://www.researchgate.net/?enrichId=rgreq-570a1d14bdf14e34708cf5206fc22a8f-XXX&enrichSource=Y292ZXJQYWdlOzM2MTMxNzA2ODtBUzoxMTcyMDQ4NTgzODg0ODA3QDE2NTY0NDk1NjY0MTA=&el=1_x_1&_esc=publicationCoverPdf", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "https://www.researchgate.net/institution/University-of-Stavanger-UiS?enrichId=rgreq-570a1d14bdf14e34708cf5206fc22a8f-XXX&enrichSource=Y292ZXJQYWdlOzM2MTMxNzA2ODtBUzoxMTcyMDQ4NTgzODg0ODA3QDE2NTY0NDk1NjY0MTA=&el=1_x_6&_esc=publicationCoverPdf", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "https://www.researchgate.net/profile/Guizhou-Wang?enrichId=rgreq-570a1d14bdf14e34708cf5206fc22a8f-XXX&enrichSource=Y292ZXJQYWdlOzM2MTMxNzA2ODtBUzoxMTcyMDQ4NTgzODg0ODA3QDE2NTY0NDk1NjY0MTA=&el=1_x_4&_esc=publicationCoverPdf", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "https://doi.org/10.1007/s10479-019-03321-z", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "https://doi.org/10.1007/s11408-019-00332-5", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "https://doi.org/10.1016/j.physa.2018.06.131", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "https://doi.org/10.1063/5.0002759", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "https://doi.org/10.1186/s40854-020-0174-9", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "https://doi.org/10.3390/jrfm13020023", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "https://doi.org/10.2139/ssrn.3078248", - "count": 3, - "total_related": 6, - "prevalence": 0.5 - }, - { - "value": "https://doi.org/10.1007/978-981-15-7106-0_54", - "count": 3, - "total_related": 7, - "prevalence": 0.42857142857142855 - }, - { - "value": "https://doi.org/10.1007/s00521-020-05129-6", - "count": 3, - "total_related": 7, - "prevalence": 0.42857142857142855 - }, - { - "value": "https://doi.org/10.1016/j.jfds.2021.03.001", - "count": 3, - "total_related": 7, - "prevalence": 0.42857142857142855 - }, - { - "value": "https://doi.org/10.3390/forecast3020024", - "count": 3, - "total_related": 7, - "prevalence": 0.42857142857142855 - }, - { - "value": "https://doi.org/10.3390/math7100898", - "count": 3, - "total_related": 8, - "prevalence": 0.375 - }, - { - "value": "https://doi.org/10.1016/j.cam.2019.112395", - "count": 3, - "total_related": 12, - "prevalence": 0.25 - }, - { - "value": "https://doi.org/10.1016/j.jisa.2020.102583", - "count": 3, - "total_related": 13, - "prevalence": 0.23076923076923078 - }, - { - "value": "https://us06st1.zoom.us/web_client/4l6uze9/image/zoom.ico", - "count": 3, - "total_related": 13, - "prevalence": 0.23076923076923078 - }, - { - "value": "https://doi.org/10.1093/jxb/10.2.290", - "count": 3, - "total_related": 19, - "prevalence": 0.15789473684210525 - }, - { - "value": "https://doi.org/10.1098/rstl.1825.0026", - "count": 3, - "total_related": 26, - "prevalence": 0.11538461538461539 - }, - { - "value": "http://www.wolfram.com/", - "count": 3, - "total_related": 2017, - "prevalence": 0.001487357461576599 - }, - { - "value": "https://docs.rs/tauri/1/tauri/scope/struct.IpcScope.html", - "count": 10, - "total_related": 33757, - "prevalence": 0.0006628689031463113 - }, - { - "value": "https://tauri.app/v1/api/config/", - "count": 10, - "total_related": 34154, - "prevalence": 0.000650220331986387 - }, - { - "value": "https://github.com/tauri-apps/tauri/issues/8306", - "count": 10, - "total_related": 38964, - "prevalence": 0.0005345481050568493 - }, - { - "value": "https://tauri.app/docs/api/config", - "count": 10, - "total_related": 42538, - "prevalence": 0.0005509152671538753 - }, - { - "value": "https://github.com/tauri-apps/tauri/issues/2549", - "count": 10, - "total_related": 53941, - "prevalence": 0.00041419164864720957 - }, - { - "value": "http://prismstandard.org/namespaces/basic/3.0/", - "count": 3, - "total_related": 62410, - "prevalence": 4.8069219676333924e-05 - }, - { - "value": "http://www.niso.org/schemas/jav/1.0/", - "count": 3, - "total_related": 85220, - "prevalence": 3.520300398967379e-05 - }, - { - "value": "http://schemas.openxmlformats.org/package/2006/relationships", - "count": 33, - "total_related": 100000, - "prevalence": 0.00033 - }, - { - "value": "http://www.apple.com/DTDs/PropertyList-1.0.dtd", - "count": 26, - "total_related": 100000, - "prevalence": 0.00026 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/relationships/attachedTemplate", - "count": 24, - "total_related": 100000, - "prevalence": 0.00024 - }, - { - "value": "http://purl.org/dc/elements/1.1/", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "http://schemas.openxmlformats.org/drawingml/2006/main", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "http://schemas.openxmlformats.org/markup-compatibility/2006", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/relationships", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "http://schemas.openxmlformats.org/wordprocessingml/2006/main", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/math", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "http://schemas.openxmlformats.org/schemaLibrary/2006/main", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "https://docs.rs/getrandom", - "count": 21, - "total_related": 200000, - "prevalence": 0.00021 - }, - { - "value": "http://crl.apple.com/root.crl0", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": "http://crl.apple.com/timestamp.crl0", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": "http://www.apple.com/appleca0", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": "http://www.apple.com/certificateauthority/0", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": "https://www.apple.com/appleca/0", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": "http://ocsp.apple.com/ocsp03-devid060", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/bibliography", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/customXml", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "http://purl.org/dc/dcmitype/", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "http://purl.org/dc/terms/", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/extended-properties", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "http://schemas.openxmlformats.org/package/2006/content-types", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "http://schemas.openxmlformats.org/package/2006/metadata/core-properties", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "http://schemas.openxmlformats.org/drawingml/2006/picture", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "http://www.iec.ch/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "http://cacerts.digicert.com/DigiCertAssuredIDRootCA.crt0E", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "http://cacerts.digicert.com/DigiCertTrustedG4RSA4096SHA256TimeStampingCA.crt0", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "http://cacerts.digicert.com/DigiCertTrustedRootG4.crt0C", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "http://crl3.digicert.com/DigiCertAssuredIDRootCA.crl0", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "http://crl3.digicert.com/DigiCertTrustedG4RSA4096SHA256TimeStampingCA.crl0", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "http://crl3.digicert.com/DigiCertTrustedRootG4.crl0", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "http://creativecommons.org/licenses/by/4.0/", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "http://crossref.org/crossmark/1.0/", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "http://51.79.133.76:8000/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://buy2x.com/OcMySY5QNkY/ABcTDInKWw/4SqSYtx+/EKfP7saoiP/BcA==", - "count": 9, - "total_related": 11, - "prevalence": 0.8181818181818182 - }, - { - "value": "http://matuaner.com/kgtjixwidu", - "count": 5, - "total_related": 6, - "prevalence": 0.8333333333333334 - }, - { - "value": "http://matuaner.com/kgtjixwiduCould", - "count": 5, - "total_related": 6, - "prevalence": 0.8333333333333334 - }, - { - "value": "https://substrate.office.com/search/api/v2/init", - "count": 4, - "total_related": 68758, - "prevalence": 5.81750487216033e-05 - }, - { - "value": "https://outlook.office.com/", - "count": 4, - "total_related": 85838, - "prevalence": 4.659940818751602e-05 - }, - { - "value": "http://weather.service.msn.com/data.aspx", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://analysis.windows.net/powerbi/api", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://apc.learningtools.onenote.com/learningtoolsapi/v2.0/getfreeformspeech", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://api.aadrm.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://api.addins.omex.office.net/api/addins/search", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://api.addins.omex.office.net/appinfo/query", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://api.addins.store.officeppe.com/addinstemplate", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://api.diagnosticssdf.office.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://api.diagnosticssdf.office.com/v2/feedback", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://api.microsoftstream.com/api/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://api.office.net/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://api.powerbi.com/v1.0/myorg/groups", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://apis.live.net/v5.0/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://asgsmsproxyapi.azurewebsites.net/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://autodiscover-s.outlook.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://autodiscover-s.outlook.com/autodiscover/autodiscover.xml", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://clients.config.office.net/user/v1.0/ios", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://clients.config.office.net/user/v1.0/tenantassociationkey", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://cloudfiles.onenote.com/upload.aspx", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://consent.config.office.com/consentcheckin/v1.0/consents", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://cortana.ai/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://cr.office.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://d.docs.live.net/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://dataservice.o365filtering.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://dataservice.protection.outlook.com/PsorWebService/v1/ClientSyncFile/MipPolicies", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://dev.virtualearth.net/REST/V1/GeospatialEndpoint/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://dev0-api.acompli.net/autodetect", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://entitlement.diagnosticssdf.office.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://eur.learningtools.onenote.com/learningtoolsapi/v2.0/getfreeformspeech", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://globaldisco.crm.dynamics.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://graph.ppe.windows.net/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://graph.windows.net/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://incidents.diagnostics.office.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://incidents.diagnosticssdf.office.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://insertmedia.bing.office.net/images/hosted?host=office&adlt=strict&hostType=Immersive", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://insertmedia.bing.office.net/images/officeonlinecontent/browse?cp=Flickr", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://insertmedia.bing.office.net/odc/insertmedia", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://learningtools.onenote.com/learningtoolsapi/v2.0/Getvoices", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://login.microsoftonline.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47/oauth2/authorize", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://lookup.onenote.com/lookup/geolocation/v1", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://make.powerautomate.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://management.azure.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://messaging.engagement.office.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://messaging.lifecycle.office.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://my.microsoftpersonalcontent.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://nam.learningtools.onenote.com/learningtoolsapi/v2.0/getfreeformspeech", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://ofcrecsvcapi-int.azurewebsites.net/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://officeci.azurewebsites.net/api/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://officemobile.uservoice.com/forums/929800-office-app-ios-and-ipad-asks", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://officesetup.getmicrosoftkey.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://onedrive.live.com/about/download/?windows10SyncClientInstalled=false", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://outlook.office.com/autosuggest/api/v1/init?cvid=", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://outlook.office365.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://outlook.office365.com/api/v1.0/me/Activities", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://outlook.office365.com/autodiscover/autodiscover.json", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://outlook.office365.com/connectors", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://pf.directory.live.com/profile/mine/System.ShortCircuitProfile.json", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://portal.office.com/account/?ref=ClientMeControl", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://powerlift-frontdesk.acompli.net/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://powerlift.acompli.net/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://powerpoint.uservoice.com/forums/288952-powerpoint-for-ipad-iphone-ios", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://prod-global-autodetect.acompli.net/autodetect", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://pushchannel.1drv.ms/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://res.getmicrosoftkey.com/api/redemptionevents", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://rpsticket.partnerservices.getmicrosoftkey.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://shell.suite.office.com:1443/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://sr.outlook.office.net/ws/speech/recognize/assistant/work", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://store.office.cn/addinstemplate", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://substrate.office.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://syncservice.protection.outlook.com/PolicySync/PolicySync.svc/SyncFile", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://useraudit.o365auditrealtimeingestion.manage.office.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://web.microsoftstream.com/video/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://webdir.online.lync.com/autodiscover/autodiscoverservice.svc/root/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://word.uservoice.com/forums/304948-word-for-ipad-iphone-ios", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://www.odwebp.svc.ms/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://www.yammer.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://clients.config.office.net/c2r/v1.0/DeltaAdvisory", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "https://clients.config.office.net/user/v1.0/android/policies", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "https://edge.skype.com/registrar/prod", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "https://edge.skype.com/rps", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "https://entitlement.diagnostics.office.com/", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "https://ic3.teams.office.com/", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "https://messagebroker.mobile.m365.svc.cloud.microsoft/", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "https://officepyservice.office.net/service.functionality", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "https://otelrules.svc.static.microsoft/", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "https://pf.directory.live.com/profile/mine/WLX.Profiles.IC.json", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "https://safelinks.protection.outlook.com/api/GetPolicy", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "https://tasks.office.com/", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - } - ], - "mutexes_created": [ - { - "value": "Local\\c:!users!admin!appdata!roaming!microsoft!windows!iecompatcache!", - "count": 4, - "total_related": 22128, - "prevalence": 0.00018076644974692697 - }, - { - "value": "Local\\c:!users!admin!appdata!roaming!microsoft!windows!privacie!", - "count": 4, - "total_related": 57964, - "prevalence": 6.900835001035126e-05 - }, - { - "value": "Local\\!IECompat!Mutex", - "count": 4, - "total_related": 88829, - "prevalence": 4.503033919102996e-05 - }, - { - "value": "Groove:PathMutex:[PmhPKkoAhcO8nWfbySVpRNivfOw=]", - "count": 3, - "total_related": 1481, - "prevalence": 0.002025658338960162 - }, - { - "value": "Local\\Microsoft_Office_16CSI_WDW:{00005173-0666-0667-2166-520100000000}", - "count": 3, - "total_related": 2338, - "prevalence": 0.0012831479897348161 - }, - { - "value": "Local\\Microsoft_Office_16Csi_CTCentralTableIniLock", - "count": 3, - "total_related": 2992, - "prevalence": 0.001002673796791444 - }, - { - "value": "Local\\Microsoft_Office_16Csi_CentralTableDatabaseInitialization", - "count": 3, - "total_related": 3065, - "prevalence": 0.0009787928221859706 - }, - { - "value": "Local\\Microsoft_Office_16Csi-FaultManagement", - "count": 3, - "total_related": 3206, - "prevalence": 0.0009357454772301934 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\Microsoft_Office_16Csi_TableRuntimeBucketsLock:{00005173-0666-0667-78E3-4E01000A252F}", - "count": 3, - "total_related": 17085, - "prevalence": 0.0001755926251097454 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\Microsoft_Office_16_MsoSync_Closing", - "count": 3, - "total_related": 18078, - "prevalence": 0.00016594756057085962 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\Microsoft_Office_16_MsoSync_Running", - "count": 3, - "total_related": 18078, - "prevalence": 0.00016594756057085962 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\Microsoft_Office_16Csi_FileCacheMigrationLock", - "count": 3, - "total_related": 18099, - "prevalence": 0.0001657550140891762 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\Microsoft_Office_16CSI_WDW:{00005173-0666-0667-78E3-4E01000A252F}", - "count": 3, - "total_related": 18819, - "prevalence": 0.00015941335883947074 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\Microsoft_Office_16Csi_CTCentralTableIniLock", - "count": 3, - "total_related": 19246, - "prevalence": 0.0001558765457757456 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\Microsoft_Office_16Csi_CentralTableDatabaseInitialization", - "count": 3, - "total_related": 19246, - "prevalence": 0.0001558765457757456 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\Microsoft_Office_16Csi-FaultManagement", - "count": 3, - "total_related": 20555, - "prevalence": 0.0001459498905375821 - }, - { - "value": "Local\\Microsoft_Office_16Csi_TableRuntimeBucketsLock:{00005173-0666-0667-2166-520100000000}", - "count": 2, - "total_related": 1443, - "prevalence": 0.001386001386001386 - }, - { - "value": "Local\\Microsoft_Office_16_MsoSync_Closing", - "count": 2, - "total_related": 2133, - "prevalence": 0.0009376465072667605 - }, - { - "value": "Local\\Microsoft_Office_16_MsoSync_Running", - "count": 2, - "total_related": 2133, - "prevalence": 0.0009376465072667605 - }, - { - "value": "Local\\Microsoft_Office_16Csi_FileCacheMigrationLock", - "count": 2, - "total_related": 2214, - "prevalence": 0.0009033423667570009 - }, - { - "value": "2AC1A572DB6944B0A65C38C4140AF2F442874506134", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2AC1A572DB6944B0A65C38C4140AF2F46fc6FB86134", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2AC1A572DB6944B0A65C38C4140AF2F46fc72F97468", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2AC1A572DB6944B0A65C38C4140AF2F46fc72F97490", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2AC1A572DB6944B0A65C38C4140AF2F46fc72F974A4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2AC1A572DB6944B0A65C38C4140AF2F46fc72F974CC", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2AC1A572DB6944B0A65C38C4140AF2F46fc72F9758C", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2AC1A572DB6944B0A65C38C4140AF2F46fc72F976DC", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2AC1A572DB6944B0A65C38C4140AF2F442873027468", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2AC1A572DB6944B0A65C38C4140AF2F442873027490", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2AC1A572DB6944B0A65C38C4140AF2F4428730274A4", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2AC1A572DB6944B0A65C38C4140AF2F4428730274CC", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2AC1A572DB6944B0A65C38C4140AF2F44287302758C", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2AC1A572DB6944B0A65C38C4140AF2F4428730276DC", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2AC1A572DB6944B0A65C38C4140AF2F442873027710", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2AC1A572DB6944B0A65C38C4140AF2F442873027750", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2AC1A572DB6944B0A65C38C4140AF2F442873027828", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2AC1A572DB6944B0A65C38C4140AF2F4428730278B0", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2AC1A572DB6944B0A65C38C4140AF2F44587167310C", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\ZonesCacheCounterMutex", - "count": 34, - "total_related": 100000, - "prevalence": 0.00034 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\ZonesLockedCacheCounterMutex", - "count": 34, - "total_related": 100000, - "prevalence": 0.00034 - }, - { - "value": "IESQMMUTEX_0_208", - "count": 31, - "total_related": 100000, - "prevalence": 0.00031 - }, - { - "value": "Local\\ZonesCacheCounterMutex", - "count": 31, - "total_related": 100000, - "prevalence": 0.00031 - }, - { - "value": "Local\\ZonesLockedCacheCounterMutex", - "count": 31, - "total_related": 100000, - "prevalence": 0.00031 - }, - { - "value": "Local\\!IETld!Mutex", - "count": 26, - "total_related": 100000, - "prevalence": 0.00026 - }, - { - "value": "Local\\WininetStartupMutex", - "count": 24, - "total_related": 100000, - "prevalence": 0.00024 - }, - { - "value": "Local\\WininetConnectionMutex", - "count": 23, - "total_related": 100000, - "prevalence": 0.00023 - }, - { - "value": "Local\\WininetProxyRegistryMutex", - "count": 23, - "total_related": 100000, - "prevalence": 0.00023 - }, - { - "value": "Local\\_!MSFTHISTORY!_", - "count": 22, - "total_related": 100000, - "prevalence": 0.00022 - }, - { - "value": "Local\\c:!users!admin!appdata!local!microsoft!windows!temporary internet files!content.ie5!", - "count": 22, - "total_related": 100000, - "prevalence": 0.00022 - }, - { - "value": "Local\\c:!users!admin!appdata!local!microsoft!windows!history!history.ie5!", - "count": 21, - "total_related": 100000, - "prevalence": 0.00021 - }, - { - "value": "Local\\c:!users!admin!appdata!roaming!microsoft!windows!cookies!", - "count": 21, - "total_related": 100000, - "prevalence": 0.00021 - }, - { - "value": "Local\\ZoneAttributeCacheCounterMutex", - "count": 20, - "total_related": 100000, - "prevalence": 0.0002 - }, - { - "value": "Local\\ZonesCounterMutex", - "count": 17, - "total_related": 100000, - "prevalence": 0.00017 - }, - { - "value": "Local\\c:!users!admin!appdata!roaming!microsoft!windows!ietldcache!", - "count": 17, - "total_related": 100000, - "prevalence": 0.00017 - }, - { - "value": "!IECompat!Mutex", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "RasPbFile", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "Global\\MTX_MSO_AdHoc1_S-1-5-21-1547548985-192504236-2982455695-500", - "count": 8, - "total_related": 100000, - "prevalence": 8e-05 - }, - { - "value": "Global\\MTX_MSO_Formal1_S-1-5-21-1547548985-192504236-2982455695-500", - "count": 8, - "total_related": 100000, - "prevalence": 8e-05 - }, - { - "value": "Local\\!BrowserEmulation!SharedMemory!Mutex", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\DBWinMutex", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Global\\552FFA80-3393-423d-8671-7BA046BB5906", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\Acrobat Instance Mutex", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\MSIMGSIZECacheMutex", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\com.adobe.acrobat.rna.RdrCefBrowserLock.DC", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "CicLoadWinStaWinSta0", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "Groove.Mutex.WebServices.Status", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "Groove:PathMutex:QdK2MSVHeUj1majjaFupyLiUjYw=", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "Groove:PathMutex:h1kwmeaFCOs5YDt3Ur7pBe3iRlE=", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "Local\\F99C425F-9135-43ed-BD7D-396DE488DC53_Office16", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "Local\\Feed Eventing Shared Memory Mutex S-1-5-21-870151485-863566166-2146164720-1000", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "Local\\MSCTF.CtfMonitorInstMutexDefault1", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "Local\\c:!users!admin!appdata!local!microsoft!feeds cache!", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "SmartScreen_UrsCacheMutex_2CEDBFBC-DBA8-43AA-B1FD-CC8E6316E3E2High_S-1-5-21-870151485-863566166-2146164720-1000", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Global\\MTX_MSO_AdHoc1_S-1-5-21-1015118539-3749460369-599379286-1001", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Global\\MTX_MSO_Formal1_S-1-5-21-1015118539-3749460369-599379286-1001", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\!PrivacIE!SharedMemory!Mutex", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\F99C425F-9135-43ed-BD7D-396DE488DC53_Office16", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\ZoneAttributeCacheCounterMutex", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "Global\\552FFA80-3393-423d-8671-7BA046BB5906", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "Local\\2BF388D5-6F8C-40A0-A7EE-996D005C4E14_Office16", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "Local\\Acrobat Instance Mutex", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "Local\\Feed Arbitration Shared Memory Mutex [ User : S-1-5-21-870151485-863566166-2146164720-1000 ]", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "Local\\Feeds Store Mutex S-1-5-21-870151485-863566166-2146164720-1000", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "SmartScreen_ClientId_Mutex", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Global\\SyncRootManager", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "Acrobat Instance Mutex", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "DBWinMutex", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "Local\\MSCTF.Asm.MutexDefault1", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "Local\\c:!users!administrator!appdata!roaming!microsoft!windows!ietldcache!", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\2BF388D5-6F8C-40A0-A7EE-996D005C4E14_Office16", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\SessionImmersiveColorMutex", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "5CAC3FAB-87F0-4750-984D-D50144543427Office-VER16", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "Global\\AmiProviderMutex_InventoryApplicationFile", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "Global\\MTX_MSO_AdHoc1_S-1-5-21-4005801669-2598574594-602355426-1001", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "Global\\MTX_MSO_Formal1_S-1-5-21-4005801669-2598574594-602355426-1001", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "Global\\_MSIExecute", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "Local\\SessionImmersiveColorMutex", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\ChromeProcessSingletonStartup!", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\{A946A6A9-917E-4949-B9BC-6BADA8C7FD63}", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - } - ], - "mutexes_opened": [ - { - "value": "Global\\MsoCsi:GC:C:/Users/Administrator/AppData/Local/Microsoft/Office/14.0/OfficeFileCache/LocalCacheFileEditManager/FSF-{0E1EEE64-E8C6-4E2A-9759-63CF07FD8988}.FSF", - "count": 5, - "total_related": 1149, - "prevalence": 0.004351610095735422 - }, - { - "value": "{BDD98A3C-B57F-4199-B92A-95A54AA1132E}-CEE3E977", - "count": 5, - "total_related": 1149, - "prevalence": 0.004351610095735422 - }, - { - "value": "{BDD98A3C-B57F-4199-B92A-95A54AA1132E}-DD9D99D", - "count": 5, - "total_related": 1149, - "prevalence": 0.004351610095735422 - }, - { - "value": "Global\\MsoCsi:GC:C:/Users/Administrator/AppData/Local/Microsoft/Office/14.0/OfficeFileCache/FSF-CTBL.FSF", - "count": 5, - "total_related": 1190, - "prevalence": 0.004201680672268907 - }, - { - "value": "{BDD98A3C-B57F-4199-B92A-95A54AA1132E}-741507CB", - "count": 5, - "total_related": 1190, - "prevalence": 0.004201680672268907 - }, - { - "value": "{BDD98A3C-B57F-4199-B92A-95A54AA1132E}-4DFEAA73", - "count": 5, - "total_related": 1193, - "prevalence": 0.004191114836546521 - }, - { - "value": "Local\\c:!users!admin!appdata!roaming!microsoft!windows!iecompatcache!", - "count": 4, - "total_related": 22131, - "prevalence": 0.00018074194568704532 - }, - { - "value": "Local\\c:!users!admin!appdata!roaming!microsoft!windows!privacie!", - "count": 4, - "total_related": 58698, - "prevalence": 6.81454223312549e-05 - }, - { - "value": "Local\\Microsoft_Office_16_MsoSync_Closing", - "count": 2, - "total_related": 2129, - "prevalence": 0.0009394081728511038 - }, - { - "value": "Local\\Microsoft_Office_16_MsoSync_Running", - "count": 2, - "total_related": 2130, - "prevalence": 0.0009389671361502347 - }, - { - "value": "Local\\MSCTF.CtfMonitorInstMutexDefault1", - "count": 2, - "total_related": 24165, - "prevalence": 8.276432857438444e-05 - }, - { - "value": "Local\\CSI_OMTX:{000F6CB4-B63E-4E78-8288-5C0234DC40F0}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Local\\CSI_OMTX:{0947F223-F13A-46C2-A8DF-5FDE9256D465}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Local\\CSI_OMTX:{121118C9-DAF3-4F24-85F1-518EF055A211}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Local\\CSI_OMTX:{1326692A-B5B2-4FF8-AA58-406FDD3515CF}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Local\\CSI_OMTX:{149DF82A-9B0B-4E55-9E7D-27E6E390B297}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Local\\CSI_OMTX:{21ED91D7-8170-40A0-A6BB-BA66EB887CD1}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Local\\CSI_OMTX:{6DD76685-E15F-42B4-8F6E-7A06F3CB0980}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Local\\CSI_OMTX:{7A54B360-C040-4880-BD79-C800782895FE}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Local\\CSI_OMTX:{844E1CCB-A556-40AB-8EE0-77A91D2A393B}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Local\\CSI_OMTX:{88BD1082-5BFA-4B50-ADBA-7C21A35119CE}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Local\\CSI_OMTX:{8DF89DC0-C9EF-4B7C-9B0B-DCEAEE5DEEBE}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Local\\CSI_OMTX:{958928E4-B66D-44B1-A4C0-448301DEA507}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Local\\CSI_OMTX:{AC31147E-4C1A-4077-AFF2-7AE02E30D1BC}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Local\\CSI_OMTX:{BDAB7A3A-4153-40D0-B6E9-9919C8FFAA09}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Local\\CSI_OMTX:{D89F92CD-A149-49D9-A294-79FC0F93C2CF}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Local\\CSI_OMTX:{E52D7C86-4C8B-4222-BC8D-BAF7A8805ABA}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Local\\CSI_OMTX:{EAF9E725-D5AD-48C8-AAB0-ECBE8A1234BC}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Local\\CSI_OMTX:{FB8A9CA4-2D62-44C9-8CC5-243B40D62ED0}", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Local\\10MU_ACB10_S-1-5-5-0-67319", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "Local\\10MU_ACBPIDS_S-1-5-5-0-67319", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "ConnHashTable<712>_HashTable_Mutex", - "count": 1, - "total_related": 75, - "prevalence": 0.013333333333333334 - }, - { - "value": "ConnHashTable<3484>_HashTable_Mutex", - "count": 1, - "total_related": 308, - "prevalence": 0.003246753246753247 - }, - { - "value": "ConnHashTable<3264>_HashTable_Mutex", - "count": 1, - "total_related": 322, - "prevalence": 0.003105590062111801 - }, - { - "value": "Local\\10MU_ACB10_S-1-5-5-0-188964", - "count": 1, - "total_related": 8800, - "prevalence": 0.00011363636363636364 - }, - { - "value": "Local\\10MU_ACBPIDS_S-1-5-5-0-188964", - "count": 1, - "total_related": 8817, - "prevalence": 0.00011341726210729273 - }, - { - "value": "Local\\10MU_ACB10_S-1-5-5-0-187930", - "count": 1, - "total_related": 8838, - "prevalence": 0.00011314777098891151 - }, - { - "value": "Local\\10MU_ACBPIDS_S-1-5-5-0-187930", - "count": 1, - "total_related": 8860, - "prevalence": 0.0001128668171557562 - }, - { - "value": "ConnHashTable<2116>_HashTable_Mutex", - "count": 1, - "total_related": 9092, - "prevalence": 0.00010998680158380995 - }, - { - "value": "ConnHashTable<2136>_HashTable_Mutex", - "count": 1, - "total_related": 11857, - "prevalence": 8.433836552247617e-05 - }, - { - "value": "Local\\10MU_ACB10_S-1-5-5-0-192178", - "count": 1, - "total_related": 40815, - "prevalence": 2.4500796275878966e-05 - }, - { - "value": "Local\\10MU_ACBPIDS_S-1-5-5-0-192178", - "count": 1, - "total_related": 40901, - "prevalence": 2.4449279968704923e-05 - }, - { - "value": "Local\\10MU_ACB10_S-1-5-5-0-191652", - "count": 1, - "total_related": 47530, - "prevalence": 2.1039343572480537e-05 - }, - { - "value": "Local\\10MU_ACBPIDS_S-1-5-5-0-191652", - "count": 1, - "total_related": 47624, - "prevalence": 2.099781622711238e-05 - }, - { - "value": "Local\\10MU_ACB10_S-1-5-5-0-183240", - "count": 1, - "total_related": 57416, - "prevalence": 1.7416747944823742e-05 - }, - { - "value": "Local\\10MU_ACBPIDS_S-1-5-5-0-183240", - "count": 1, - "total_related": 57515, - "prevalence": 1.7386768669042858e-05 - }, - { - "value": "Local\\!IETld!Mutex", - "count": 61, - "total_related": 100000, - "prevalence": 0.00061 - }, - { - "value": "Local\\WininetStartupMutex", - "count": 61, - "total_related": 100000, - "prevalence": 0.00061 - }, - { - "value": "Local\\WininetConnectionMutex", - "count": 56, - "total_related": 100000, - "prevalence": 0.00056 - }, - { - "value": "Local\\WininetProxyRegistryMutex", - "count": 56, - "total_related": 100000, - "prevalence": 0.00056 - }, - { - "value": "Local\\_!MSFTHISTORY!_", - "count": 55, - "total_related": 100000, - "prevalence": 0.00055 - }, - { - "value": "Local\\c:!users!admin!appdata!local!microsoft!windows!temporary internet files!content.ie5!", - "count": 36, - "total_related": 100000, - "prevalence": 0.00036 - }, - { - "value": "Local\\c:!users!admin!appdata!local!microsoft!windows!history!history.ie5!", - "count": 35, - "total_related": 100000, - "prevalence": 0.00035 - }, - { - "value": "Local\\c:!users!admin!appdata!roaming!microsoft!windows!cookies!", - "count": 35, - "total_related": 100000, - "prevalence": 0.00035 - }, - { - "value": "RasPbFile", - "count": 28, - "total_related": 100000, - "prevalence": 0.00028 - }, - { - "value": "Local\\c:!users!administrator!appdata!local!microsoft!windows!history!history.ie5!", - "count": 27, - "total_related": 100000, - "prevalence": 0.00027 - }, - { - "value": "Local\\c:!users!administrator!appdata!local!microsoft!windows!temporary internet files!content.ie5!", - "count": 27, - "total_related": 100000, - "prevalence": 0.00027 - }, - { - "value": "Local\\c:!users!administrator!appdata!roaming!microsoft!windows!cookies!", - "count": 27, - "total_related": 100000, - "prevalence": 0.00027 - }, - { - "value": "Local\\c:!users!admin!appdata!roaming!microsoft!windows!ietldcache!", - "count": 26, - "total_related": 100000, - "prevalence": 0.00026 - }, - { - "value": "CicLoadWinStaWinSta0", - "count": 23, - "total_related": 100000, - "prevalence": 0.00023 - }, - { - "value": "Local\\MSCTF.Asm.MutexDefault1", - "count": 20, - "total_related": 100000, - "prevalence": 0.0002 - }, - { - "value": "Local\\MU_ACBPIDS09_S-1-5-5-0-101299", - "count": 18, - "total_related": 100000, - "prevalence": 0.00018 - }, - { - "value": "IESQMMUTEX_0_208", - "count": 14, - "total_related": 100000, - "prevalence": 0.00014 - }, - { - "value": "Local\\!PrivacIE!SharedMemory!Mutex", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "Local\\c:!users!administrator!appdata!roaming!microsoft!windows!ietldcache!", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "Global\\MTX_MSO_AdHoc1_S-1-5-21-1547548985-192504236-2982455695-500", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "Global\\MTX_MSO_Formal1_S-1-5-21-1547548985-192504236-2982455695-500", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "Local\\ZoneAttributeCacheCounterMutex", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "Local\\ZonesCacheCounterMutex", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "Local\\ZonesLockedCacheCounterMutex", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "Local\\ZonesCounterMutex", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": "Local\\!BrowserEmulation!SharedMemory!Mutex", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "Groove.Mutex.SystemServices.Lock", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "Local\\c:!users!admin!appdata!local!microsoft!feeds cache!", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "Global\\ARM Update Mutex", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "Global\\Acro Update Mutex", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "Global\\MTX_MSO_AdHoc1_S-1-5-21-729737266-1210198952-1036399698-500", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "Global\\MTX_MSO_Formal1_S-1-5-21-729737266-1210198952-1036399698-500", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "Local\\!IECompat!Mutex", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "Global\\552FFA80-3393-423d-8671-7BA046BB5906", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "Local\\MU_ACBPIDS08", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "Local\\Mso97SharedDg19211105606Mutex", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "Local\\Mso97SharedDg19521105606Mutex", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "Local\\Mso97SharedDg19531105606Mutex", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "Local\\Mso97SharedDg20321105606Mutex", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "Local\\Mutex_MSOSharedMem", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "OfficeAssistantStateMutex", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Global\\TermSrvReadyEvent", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "com.adobe.acrobat.rna.RdrCefBrowserLock.DC", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "Global\\MTX_MSO_AdHoc1_S-1-5-21-4005801669-2598574594-602355426-1001", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "Global\\MTX_MSO_Formal1_S-1-5-21-4005801669-2598574594-602355426-1001", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\!IETld!Mutex", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "\\Sessions\\1\\BaseNamedObjects\\Local\\MSCTF.CtfActivated.Default1", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "_!SHMSFTHISTORY!_", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "com.adobe.acrobat.rna.RdrCefBrowserLock", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "Global\\SyncRootManager", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "Global\\_MSIExecute", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "Groove.Mutex.WebServices.Status", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "Groove:PathMutex:fzOjjMntuO3JoXYqLdBrDPBkpug=", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "Groove:PathMutex:tzanqCjN6dCs1QGzbKslin0UfIk=", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "registry_keys_deleted": [ - { - "value": "\\REGISTRY\\USER\\S-1-5-21-870151485-863566166-2146164720-1000\\Software\\Microsoft\\windows\\CurrentVersion\\Internet Settings", - "count": 16, - "total_related": 6936, - "prevalence": 0.002306805074971165 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-870151485-863566166-2146164720-1000\\Software\\Microsoft\\Office\\14.0\\Word\\Resiliency\\StartupItems", - "count": 5, - "total_related": 7186, - "prevalence": 0.0006957973838018369 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-870151485-863566166-2146164720-1000\\Software\\Microsoft\\Office\\14.0\\Common\\LCCache\\WordDocParts\\2052", - "count": 5, - "total_related": 7219, - "prevalence": 0.0006926167059149467 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-870151485-863566166-2146164720-1000\\Software\\Microsoft\\Office\\14.0\\Common\\LCCache\\SmartArt\\2052", - "count": 5, - "total_related": 8146, - "prevalence": 0.0006137981831573779 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-870151485-863566166-2146164720-1000\\Software\\Microsoft\\Office\\14.0\\Common\\LCCache\\Themes\\2052", - "count": 5, - "total_related": 8146, - "prevalence": 0.0006137981831573779 - }, - { - "value": "\\REGISTRY\\MACHINE\\SOFTWARE\\Microsoft\\SystemCertificates\\AuthRoot\\Certificates\\DAC9024F54D8F6DF94935FB1732638CA6AD77C13", - "count": 4, - "total_related": 19698, - "prevalence": 0.0002030663011473246 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\SystemCertificates\\CA\\Certificates\\48504E974C0DAC5B5CD476C8202274B24C8C7172", - "count": 3, - "total_related": 22, - "prevalence": 0.13636363636363635 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-870151485-863566166-2146164720-1000\\Software\\Microsoft\\Office\\14.0\\Word\\File MRU", - "count": 3, - "total_related": 2558, - "prevalence": 0.0011727912431587178 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-870151485-863566166-2146164720-1000\\Software\\Microsoft\\Office\\14.0\\Word\\Place MRU", - "count": 3, - "total_related": 2558, - "prevalence": 0.0011727912431587178 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-870151485-863566166-2146164720-1000\\Software\\Microsoft\\Office\\14.0\\Common\\Recent Locations\\SharePoint", - "count": 3, - "total_related": 3801, - "prevalence": 0.0007892659826361484 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Services\\WmiApRpl\\Performance\\First Counter", - "count": 18, - "total_related": 100000, - "prevalence": 0.00018 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Services\\WmiApRpl\\Performance\\First Help", - "count": 18, - "total_related": 100000, - "prevalence": 0.00018 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Services\\WmiApRpl\\Performance\\Last Counter", - "count": 18, - "total_related": 100000, - "prevalence": 0.00018 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Services\\WmiApRpl\\Performance\\Last Help", - "count": 18, - "total_related": 100000, - "prevalence": 0.00018 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Services\\WmiApRpl\\Performance\\Object List", - "count": 18, - "total_related": 100000, - "prevalence": 0.00018 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\AutoConfigURL", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ProxyOverride", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ProxyServer", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\IntranetName", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\ProxyBypass", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\IntranetName", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\ProxyBypass", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "\\REGISTRY\\MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\IntranetName", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "\\REGISTRY\\MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\ProxyBypass", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 1", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 10", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 11", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 12", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 13", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 14", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 15", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 16", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 17", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 18", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 19", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 2", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 20", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 21", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 22", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 23", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 24", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 25", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 26", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 27", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 28", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 29", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 3", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 30", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 31", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 32", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 33", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 34", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 35", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 36", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 37", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 38", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 39", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 4", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 40", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 41", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 42", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 43", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\AutoConfigURL", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ProxyOverride", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ProxyServer", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\IntranetName", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\ProxyBypass", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\IntranetName", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\ProxyBypass", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "\\Software\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\IntranetName", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "\\Software\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\ProxyBypass", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 44", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 45", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 46", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 47", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 48", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 49", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 5", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 50", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 6", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 7", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 8", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Item 9", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\File MRU\\Max Display", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-1547548985-192504236-2982455695-500\\Software\\Microsoft\\Office\\12.0\\Word\\Resiliency\\StartupItems\\", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\\\IntranetName", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\\\ProxyBypass", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\\\IntranetName", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\\\ProxyBypass", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\16.0\\Common\\ClientTelemetry\\RulesMetadata\\winword.exe", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\16.0\\Common\\ClientTelemetry\\RulesMetadata\\winword.exe\\ETWMonitor\\{02FD33DF-F746-4A10-93A0-2BC6273BC8E4}", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\16.0\\Common\\ClientTelemetry\\RulesMetadata\\winword.exe\\ETWMonitor\\{BB00E856-A12F-4AB7-B2C8-4E80CAEA5B07}", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\16.0\\Common\\ClientTelemetry\\RulesMetadata\\winword.exe\\ETWMonitor\\{DAF0B914-9C1C-450A-81B2-FEA7244F6FFA}", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\16.0\\Common\\Internet\\WebServiceCache\\AllUsers\\cdn.odc.officeapps.live.com\\odc-stat-images-OneDriveUpsell.png-lcid=1033&syslcid=1033&uilcid=1033&ver=16", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\16.0\\Common\\Internet\\WebServiceCache\\AllUsers\\cdn.odc.officeapps.live.com\\odc-stat-images-OneDriveUpsell.png-lcid=1033&syslcid=1033&uilcid=1033&ver=16\\0", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\16.0\\Common\\Internet\\WebServiceCache\\AllUsers\\cdn.odc.officeapps.live.com\\odc-stat-images-sm-onedrive_16_2.png", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\16.0\\Common\\Internet\\WebServiceCache\\AllUsers\\cdn.odc.officeapps.live.com\\odc-stat-images-sm-onedrive_16_2.png\\0", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\16.0\\Common\\Internet\\WebServiceCache\\AllUsers\\cdn.odc.officeapps.live.com\\odc-stat-images-sm-onedrive_32_2.png", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\16.0\\Common\\Internet\\WebServiceCache\\AllUsers\\cdn.odc.officeapps.live.com\\odc-stat-images-sm-onedrive_32_2.png\\0", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\IntranetName", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - } - ], - "registry_keys_opened": [ - { - "value": "HKEY_CURRENT_USER\\.html\\OpenWithList", - "count": 1, - "total_related": 79145, - "prevalence": 1.2635036957483101e-05 - }, - { - "value": "HKEY_LOCAL_MACHINE\\Software\\Policies\\Microsoft\\Windows NT\\Rpc", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "HKEY_LOCAL_MACHINE\\System\\Setup", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "HKCR\\.vbs", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCR\\.vbs\\0x0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCR\\CLSID\\{0A29FF9E-7F9C-4437-8B11-F424491E3931}\\InprocServer32", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCR\\CLSID\\{0A29FF9E-7F9C-4437-8B11-F424491E3931}\\InprocServer32\\0x0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCR\\CLSID\\{0A29FF9E-7F9C-4437-8B11-F424491E3931}\\Server", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCR\\CLSID\\{0A29FF9E-7F9C-4437-8B11-F424491E3931}\\Server\\0x0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCR\\VBSFile\\ScriptEngine", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCR\\VBSFile\\ScriptEngine\\0x0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCU\\Control Panel\\International", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCU\\Control Panel\\International\\sYearMonth", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCU\\Environment", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCU\\Environment\\PSMODULEPATH", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCU\\Software\\Microsoft\\.NETFramework\\Policy\\Standards", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCU\\Software\\Microsoft\\Installer\\Assemblies\\Global", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCU\\Software\\Microsoft\\Installer\\Assemblies\\c:|windows|system32|WindowsPowerShell|v1.0|powershell.exe", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCU\\Software\\Microsoft\\Windows Script Host\\Settings", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCU\\Software\\Microsoft\\Windows Script Host\\Settings\\Enabled", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCU\\Software\\Microsoft\\Windows Script Host\\Settings\\LogSecuritySuccesses", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCU\\Software\\Microsoft\\Windows Script Host\\Settings\\TrustPolicy", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCU\\Software\\Microsoft\\Windows Script Host\\Settings\\UseWINSAFER", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCU\\Software\\Policies\\Microsoft\\Windows\\PowerShell\\ConsoleSessionConfiguration", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\*", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\*\\ShellEx\\{000214F9-0000-0000-C000-000000000046}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\.URL", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\.htm", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\.htm\\OpenWithList", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\.htm\\OpenWithList\\Excel.exe", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\.htm\\OpenWithList\\Excel.exe\\shell\\edit", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\.htm\\OpenWithList\\Excel.exe\\shell\\edit\\command", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\.htm\\OpenWithList\\MSPub.exe", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\.htm\\OpenWithList\\MSPub.exe\\shell\\edit", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\.htm\\OpenWithList\\MSPub.exe\\shell\\edit\\command", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\.htm\\OpenWithList\\Microsoft Excel", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\.htm\\OpenWithList\\Microsoft Excel\\shell\\edit", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\.htm\\OpenWithList\\Microsoft Excel\\shell\\edit\\command", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\.htm\\OpenWithList\\Microsoft Publisher", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\.htm\\OpenWithList\\Microsoft Publisher\\shell\\edit", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\.htm\\OpenWithList\\Microsoft Publisher\\shell\\edit\\command", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\.htm\\OpenWithList\\Microsoft Word", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\.htm\\OpenWithList\\Microsoft Word\\shell\\edit", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\.htm\\OpenWithList\\Microsoft Word\\shell\\edit\\command", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\.htm\\OpenWithProgids", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\.html", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\.html\\OpenWithProgids", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\.html\\ShellEx\\{000214F9-0000-0000-C000-000000000046}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\.url", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\.url\\OpenWithProgids", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\AllFilesystemObjects", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\AllFilesystemObjects\\BrowseInPlace", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\AllFilesystemObjects\\Clsid", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\AllFilesystemObjects\\DocObject", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\AllFilesystemObjects\\ShellEx\\IconHandler", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\AllFilesystemObjects\\ShellEx\\{000214F9-0000-0000-C000-000000000046}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\AppID\\iexplore.exe", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Applications\\Excel.exe", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Applications\\MSPub.exe", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Applications\\Microsoft Excel", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Applications\\Microsoft Publisher", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Applications\\Microsoft Word", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Applications\\WinWord.exe", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Applications\\Winword.exe", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Applications\\Winword.exe\\shell\\edit", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Applications\\Winword.exe\\shell\\edit\\command", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Applications\\notepad.exe", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Applications\\notepad.exe\\shell\\edit", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Applications\\notepad.exe\\shell\\edit\\command", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\AutoProxyTypes", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\AutoProxyTypes\\Application/x-internet-signup", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\AutoProxyTypes\\Application/x-ns-proxy-autoconfig", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{00020420-0000-0000-C000-000000000046}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{00020420-0000-0000-C000-000000000046}\\InprocHandler", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{00020420-0000-0000-C000-000000000046}\\InprocHandler32", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{00020420-0000-0000-C000-000000000046}\\InprocServer32", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{00020420-0000-0000-C000-000000000046}\\Progid", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{00020420-0000-0000-C000-000000000046}\\TreatAs", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{00020424-0000-0000-C000-000000000046}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{00020424-0000-0000-C000-000000000046}\\InprocHandler", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{00020424-0000-0000-C000-000000000046}\\InprocHandler32", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{00020424-0000-0000-C000-000000000046}\\InprocServer32", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{00020424-0000-0000-C000-000000000046}\\Progid", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{00020424-0000-0000-C000-000000000046}\\TreatAs", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{0002DF01-0000-0000-C000-000000000046}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{0002DF01-0000-0000-C000-000000000046}\\InprocHandler", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{0002DF01-0000-0000-C000-000000000046}\\InprocHandler32", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{0002DF01-0000-0000-C000-000000000046}\\InprocServer32", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{0002DF01-0000-0000-C000-000000000046}\\ProgID", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{0002DF01-0000-0000-C000-000000000046}\\Progid", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{0002DF01-0000-0000-C000-000000000046}\\TreatAs", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{03022430-ABC4-11D0-BDE2-00AA001A1953}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{03022430-ABC4-11D0-BDE2-00AA001A1953}\\InProcServer32", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{03022430-ABC4-11D0-BDE2-00AA001A1953}\\InprocHandler", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{03022430-ABC4-11D0-BDE2-00AA001A1953}\\InprocHandler32", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{03022430-ABC4-11D0-BDE2-00AA001A1953}\\InprocServer32", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKEY_CURRENT_USER\\CLSID\\{03022430-ABC4-11D0-BDE2-00AA001A1953}\\Progid", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "registry_keys_set": [ - { - "value": "\\REGISTRY\\USER\\S-1-5-21-870151485-863566166-2146164720-1000\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap", - "count": 5, - "total_related": 16072, - "prevalence": 0.00031110004977600794 - }, - { - "value": "\\REGISTRY\\MACHINE\\Software\\Microsoft\\Tracing\\mshta_RASAPI32", - "count": 4, - "total_related": 938, - "prevalence": 0.0042643923240938165 - }, - { - "value": "\\REGISTRY\\MACHINE\\Software\\Microsoft\\Tracing\\mshta_RASMANCS", - "count": 4, - "total_related": 938, - "prevalence": 0.0042643923240938165 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-870151485-863566166-2146164720-1000\\Software\\Classes\\Local Settings\\MuiCache\\bf\\AAF68885", - "count": 4, - "total_related": 5705, - "prevalence": 0.0007011393514460999 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-870151485-863566166-2146164720-1000\\Software\\Microsoft\\windows\\CurrentVersion\\Internet Settings\\Wpad", - "count": 4, - "total_related": 7588, - "prevalence": 0.0005271481286241434 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-870151485-863566166-2146164720-1000\\Software\\Microsoft\\windows\\CurrentVersion\\Internet Settings", - "count": 4, - "total_related": 7948, - "prevalence": 0.0005032712632108706 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-870151485-863566166-2146164720-1000\\Software\\Microsoft\\windows\\CurrentVersion\\Internet Settings\\Connections", - "count": 4, - "total_related": 7948, - "prevalence": 0.0005032712632108706 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-870151485-863566166-2146164720-1000\\Software\\Microsoft\\windows\\CurrentVersion\\Internet Settings\\Wpad\\52-54-00-18-40-da_52-54-00-a8-51-97", - "count": 2, - "total_related": 2556, - "prevalence": 0.000782472613458529 - }, - { - "value": "\\REGISTRY\\USER\\S-1-5-21-870151485-863566166-2146164720-1000\\Software\\Microsoft\\windows\\CurrentVersion\\Internet Settings\\Wpad\\52-54-00-9c-65-03_52-54-00-a9-be-b5", - "count": 2, - "total_related": 2563, - "prevalence": 0.0007803355442840422 - }, - { - "value": "\\REGISTRY\\MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\S-1-5-18\\Products\\00004109110000000000000000F01FEC\\Usage", - "count": 2, - "total_related": 8685, - "prevalence": 0.00023028209556706967 - }, - { - "value": "18E33E7", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\SystemCertificates\\Root\\Certificates\\0174E68C97DDF1E0EEEA415EA336A163D2B61AFD\\Blob", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Connections\\SavedLegacySettings", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ProxyEnable", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ProxyServer", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "HKLM\\SOFTWARE\\Microsoft\\WBEM\\PROVIDERS\\Performance\\Performance Data", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "HKLM\\SOFTWARE\\Microsoft\\WBEM\\PROVIDERS\\Performance\\Performance Refresh", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "HKLM\\SOFTWARE\\Microsoft\\WBEM\\PROVIDERS\\Performance\\Performance Refreshed", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Perflib\\Last Counter", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Perflib\\Last Help", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Perflib\\Updating", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Control\\BackupRestore\\FilesNotToBackup\\BITS_BAK", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Control\\BackupRestore\\FilesNotToBackup\\BITS_LOG", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Services\\BITS\\Performance\\PerfMMFileName", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "HKLM\\Software\\Microsoft\\WBEM\\CIMOM\\ConfigValueEssNeedsLoading", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "HKLM\\Software\\Microsoft\\WBEM\\CIMOM\\List of event-active namespaces", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "HKLM\\Software\\Microsoft\\WBEM\\WDM\\%windir%\\System32\\Drivers\\en-US\\portcls.SYS.mui[PortclsMof]", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "HKLM\\Software\\Microsoft\\WBEM\\WDM\\%windir%\\System32\\Drivers\\portcls.SYS[PortclsMof]", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "HKLM\\Software\\Microsoft\\WBEM\\WDM\\%windir%\\system32\\DRIVERS\\HDAudBus.sys[HDAudioMofName]", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "HKLM\\Software\\Microsoft\\WBEM\\WDM\\%windir%\\system32\\DRIVERS\\en-US\\HDAudBus.sys.mui[HDAudioMofName]", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "HKLM\\Software\\Microsoft\\WBEM\\WDM\\%windir%\\system32\\DRIVERS\\en-US\\intelppm.sys.mui[PROCESSORWMI]", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "HKLM\\Software\\Microsoft\\WBEM\\WDM\\%windir%\\system32\\DRIVERS\\intelppm.sys[PROCESSORWMI]", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "HKLM\\Software\\Microsoft\\WBEM\\WDM\\%windir%\\system32\\DRIVERS\\monitor.sys[MonitorWMI]", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "HKLM\\Software\\Microsoft\\WBEM\\WDM\\%windir%\\system32\\advapi32.dll[MofResourceName]", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "HKLM\\Software\\Microsoft\\WBEM\\WDM\\%windir%\\system32\\drivers\\ACPI.sys[ACPIMOFResource]", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "HKLM\\Software\\Microsoft\\WBEM\\WDM\\%windir%\\system32\\drivers\\en-US\\ACPI.sys.mui[ACPIMOFResource]", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "HKLM\\Software\\Microsoft\\WBEM\\WDM\\%windir%\\system32\\drivers\\en-US\\mssmbios.sys.mui[MofResource]", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "HKLM\\Software\\Microsoft\\WBEM\\WDM\\%windir%\\system32\\drivers\\en-US\\ndis.sys.mui[MofResourceName]", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "HKLM\\Software\\Microsoft\\WBEM\\WDM\\%windir%\\system32\\drivers\\mssmbios.sys[MofResource]", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "HKLM\\Software\\Microsoft\\WBEM\\WDM\\%windir%\\system32\\drivers\\ndis.sys[MofResourceName]", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "HKLM\\Software\\Microsoft\\WBEM\\WDM\\%windir%\\system32\\en-US\\advapi32.dll.mui[MofResourceName]", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "HKLM\\Software\\Microsoft\\WBEM\\WDM\\IDE\\DiskAMDX_HARDDISK___________________________2.5+____\\5&2770a7af&0&0.0.0_0-{05901221-D566-11d1-B2F0-00A0C9062910}", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\\\AutoDetect", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\\\UNCAsIntranet", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000_CLASSES\\Local Settings\\MuiCache\\17b\\52C64B7E\\LanguageList", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\BITS\\StateIndex", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\{B5DA8633-954C-4495-AE46-0BB5B5FB1CDC}\\Connection\\PnpInstanceID", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Control\\Nsi\\{eb004a03-9b1a-11d4-9123-0050047759bc}\\22\\(Default)", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Control\\Nsi\\{eb004a03-9b1a-11d4-9123-0050047759bc}\\24\\ffffffffffffffffffffffffffffff00", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Control\\Nsi\\{eb004a03-9b1a-11d4-9123-0050047759bc}\\24\\ffffffffffffffffffffffffffffff01", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Control\\Nsi\\{eb004a03-9b1a-11d4-9123-0050047759bc}\\24\\ffffffffffffffffffffffffffffff02", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Control\\Nsi\\{eb004a03-9b1a-11d4-9123-0050047759bc}\\24\\ffffffffffffffffffffffffffffff03", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Control\\TimeZoneInformation\\ActiveTimeBias", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "HKU\\S-1-5-18\\Software\\Classes\\Local Settings\\MuiCache\\17b\\52C64B7E\\LanguageList", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Internet Explorer\\BrowserEmulation\\IECompatVersionHigh", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Internet Explorer\\BrowserEmulation\\IECompatVersionLow", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Internet Explorer\\GPU\\DXFeatureLevel", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Internet Explorer\\GPU\\DeviceId", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Internet Explorer\\GPU\\Revision", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Internet Explorer\\GPU\\SubSysId", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Internet Explorer\\GPU\\VendorId", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Internet Explorer\\GPU\\VersionHigh", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Internet Explorer\\GPU\\VersionLow", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Internet Explorer\\GPU\\Wow64-DXFeatureLevel", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Internet Explorer\\GPU\\Wow64-DeviceId", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Internet Explorer\\GPU\\Wow64-Revision", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Internet Explorer\\GPU\\Wow64-SubSysId", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Internet Explorer\\GPU\\Wow64-VendorId", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Internet Explorer\\GPU\\Wow64-VersionHigh", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Internet Explorer\\GPU\\Wow64-VersionLow", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\5.0\\Cache\\Content\\CachePrefix", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\5.0\\Cache\\Cookies\\CachePrefix", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "HKU\\S-1-5-21-575823232-3065301323-1442773979-1000\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\5.0\\Cache\\History\\CachePrefix", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "\\\\Registry\\Machine\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Time Zones\\Greenland Standard Time\\TZI", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "\\\\Registry\\Machine\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Time Zones\\Iran Standard Time\\TZI", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "\\\\Registry\\Machine\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Time Zones\\Middle East Standard Time\\TZI", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "\\\\Registry\\Machine\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Time Zones\\Paraguay Standard Time\\TZI", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Adobe\\Acrobat Reader\\DC\\AVGeneral\\cUUIDs", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Adobe\\Acrobat Reader\\DC\\Collab\\cDocumentCenter", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Adobe\\Acrobat Reader\\DC\\Collab\\cDocumentCenter\\cSettings", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Adobe\\Acrobat Reader\\DC\\Collab\\cEmailDistribution", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Adobe\\Acrobat Reader\\DC\\Collab\\cEmailDistribution\\cSettings", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Adobe\\Acrobat Reader\\DC\\Collab\\cInitiationWizardFirstLaunch", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Adobe\\Acrobat Reader\\DC\\Collab\\cInternalServer", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Adobe\\Acrobat Reader\\DC\\Collab\\cInternalServer\\cSettings", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Adobe\\Acrobat Reader\\DC\\SessionManagement\\cWindowsCurrent\\cWin0", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "HKEY_CURRENT_USER\\Software\\Adobe\\Adobe Synchronizer\\DC\\WebServers", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "HKEY_LOCAL_MACHINE\\System\\Acrobatbrokerserverdispatchercpp789", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "HKLM\\SOFTWARE\\Microsoft\\Windows Media Player NSS\\3.0\\Servers\\A70D59A1-8EAD-4F40-AAAB-FBFC460800A4\\FriendlyName", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Control\\DeviceClasses\\{ad498944-762f-11d0-8dcb-00c04fc3358c}\\##?#SW#{eeab7790-c514-11d1-b42b-00805fc1270e}#asyncmac#{ad498944-762f-11d0-8dcb-00c04fc3358c}\\#{78032B7E-4968-42D3-9F37-287EA86C0AAA}\\SymbolicLink", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Control\\DeviceClasses\\{ad498944-762f-11d0-8dcb-00c04fc3358c}\\##?#SW#{eeab7790-c514-11d1-b42b-00805fc1270e}#asyncmac#{ad498944-762f-11d0-8dcb-00c04fc3358c}\\DeviceInstance", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Control\\DeviceClasses\\{cac88484-7515-4c03-82e6-71a87abac361}\\##?#SW#{eeab7790-c514-11d1-b42b-00805fc1270e}#asyncmac#{cac88484-7515-4c03-82e6-71a87abac361}\\#\\SymbolicLink", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "HKLM\\SYSTEM\\ControlSet001\\Control\\DeviceClasses\\{cac88484-7515-4c03-82e6-71a87abac361}\\##?#SW#{eeab7790-c514-11d1-b42b-00805fc1270e}#asyncmac#{cac88484-7515-4c03-82e6-71a87abac361}\\DeviceInstance", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "MTTT", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "52-54-00-e9-99-e1WpadDecisionTime", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "\\Software\\Classes\\Local Settings\\MuiCache\\130\\52C64B7E\\LanguageList", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\AutoDetect", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\UNCAsIntranet", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NetworkList\\Nla\\Cache\\Intranet\\{6A52BE73-EC8E-4F63-A268-7517A50DCB38}", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\5.0\\Cache\\Content\\CachePrefix", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "file_types": [ - { - "value": "lnk", - "count": 71 - }, - { - "value": "zip", - "count": 51 - }, - { - "value": "docx", - "count": 44 - }, - { - "value": "macho", - "count": 41 - }, - { - "value": "text", - "count": 23 - }, - { - "value": "html", - "count": 21 - }, - { - "value": "xml", - "count": 19 - }, - { - "value": "vba", - "count": 18 - }, - { - "value": "pdf", - "count": 13 - }, - { - "value": "doc", - "count": 11 - }, - { - "value": "pedll", - "count": 8 - }, - { - "value": "javascript", - "count": 8 - }, - { - "value": "peexe", - "count": 2 - }, - { - "value": "mp3", - "count": 2 - }, - { - "value": "powershell", - "count": 2 - }, - { - "value": "jpeg", - "count": 1 - }, - { - "value": "appledouble", - "count": 1 - }, - { - "value": "applescript", - "count": 1 - }, - { - "value": "bmp", - "count": 1 - }, - { - "value": "xls", - "count": 1 - }, - { - "value": "one", - "count": 1 - }, - { - "value": "chm", - "count": 1 - }, - { - "value": "msi", - "count": 1 - }, - { - "value": "python", - "count": 1 - }, - { - "value": "shell", - "count": 1 - }, - { - "value": "isoimage", - "count": 1 - } - ], - "crowdsourced_sigma_results": [ - { - "value": { - "id": "25fb50db6056bc3db5e2f3d8d53b6ef8b6fad41ac3ecaf0386e316bd1711baf0", - "level": "high", - "title": "Remotely Hosted HTA File Executed Via Mshta.EXE", - "author": "Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects execution of the \"mshta\" utility with an argument containing the \"http\" keyword, which could indicate that an attacker is executing a remotely hosted malicious hta file" - }, - "count": 33, - "total_related": 6555, - "prevalence": 0.005034324942791762 - }, - { - "value": { - "id": "6c10fa91f51fe5cab32552ba2e84e7ab8d1695e93a2d2582c845a71eb3e0f457", - "level": "high", - "title": "Detects URL shortcut execution (RogueURL campaign)", - "author": "RussianPanda", - "source_url": "https://github.com/RussianPanda95/Sigma-Rules", - "source": "RussianPanda95 Rule Set (GitHub)", - "description": "Detects malicious URL shortcut execution" - }, - "count": 24, - "total_related": 11285, - "prevalence": 0.0021267168808152413 - }, - { - "value": { - "id": "31e1f4457871d51593456a4331811513af82fe4e36d2b26a582dd6baa180a91d", - "level": "high", - "title": "Suspicious Mshta.EXE Execution Patterns", - "author": "Florian Roth (Nextron Systems), Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects suspicious mshta process execution patterns" - }, - "count": 8, - "total_related": 17307, - "prevalence": 0.0004622407118506963 - }, - { - "value": { - "id": "e576f496b0ac03c619b88124a419d2c717d3f5e3f5506a17e145443091bda155", - "level": "low", - "title": "Curl Usage on Linux", - "author": "Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects a curl process start on linux, which indicates a file download from a remote location or a simple web request to a remote server" - }, - "count": 5, - "total_related": 28393, - "prevalence": 0.00017609974289437537 - }, - { - "value": { - "id": "00b61d3ad8d5b276f712ce687ea306dc5b640516a51e65fd05ec277c5b979611", - "level": "high", - "title": "Suspicious Parent Double Extension File Execution", - "author": "frack113, Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detect execution of suspicious double extension files in ParentCommandLine" - }, - "count": 4, - "total_related": 2652, - "prevalence": 0.0015082956259426848 - }, - { - "value": { - "id": "15a88fc8b846a774c398a2350aba9d8b4203f0cbb095abb4035f8f0e2c3ca2d5", - "level": "medium", - "title": "Use of Pcalua For Execution", - "author": "Nasreddine Bencherchali (Nextron Systems), E.M. Anhaus (originally from Atomic Blue Detections, Endgame), oscd.community", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects execition of commands and binaries from the context of The program compatibility assistant (Pcalua.exe). This can be used as a LOLBIN in order to bypass application whitelisting." - }, - "count": 3, - "total_related": 791, - "prevalence": 0.0037926675094816687 - }, - { - "value": { - "id": "93f12e3e5c1af45ad5cce51fca771889beae9d1da27d23d889c557f217fc803f", - "level": "medium", - "title": "Suspicious Curl Change User Agents", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects a suspicious curl process start on Windows with set useragent options" - }, - "count": 3, - "total_related": 1114, - "prevalence": 0.0026929982046678637 - }, - { - "value": { - "id": "2105a0eff0c693326dcb33bbdcfd768fd6c8825061ae9eb48d31703fabf241e5", - "level": "high", - "title": "Potentially Suspicious PowerShell Child Processes", - "author": "Florian Roth (Nextron Systems), Tim Shelton", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects potentially suspicious child processes spawned by PowerShell" - }, - "count": 3, - "total_related": 18633, - "prevalence": 0.00016100466913540493 - }, - { - "value": { - "id": "6ecd0ccd55a70b96ebb8ad35b9fc18b56f99fdae0b1c2d235ba3300b9457b516", - "level": "medium", - "title": "MacOS Scripting Interpreter AppleScript", - "author": "Alejandro Ortuno, oscd.community", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects execution of AppleScript of the macOS scripting language AppleScript." - }, - "count": 3, - "total_related": 22010, - "prevalence": 0.00013630168105406633 - }, - { - "value": { - "id": "d86dfee683d0e96803dc8a153d15f7208afc774045e2d885ccaec10bdcef7831", - "level": "high", - "title": "Suspicious Curl.EXE Download", - "author": "Florian Roth (Nextron Systems), Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects a suspicious curl process start on Windows and outputs the requested document to a local file" - }, - "count": 3, - "total_related": 57952, - "prevalence": 5.176697956929873e-05 - }, - { - "value": { - "id": "85e2c3c8bd260f8a67a582a43493b73662159bf74036dcc05b8952c84be8bc2a", - "level": "medium", - "title": "Suspicious Curl Change User Agents - Linux", - "author": "Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects a suspicious curl process start on linux with set useragent options" - }, - "count": 2, - "total_related": 246, - "prevalence": 0.008130081300813009 - }, - { - "value": { - "id": "63437b0e9c5e21d2823a28f0a428ee4bad8d30ba59ddbfb9227fe13452f1aebe", - "level": "medium", - "title": "DeviceCredentialDeployment Execution", - "author": "Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the execution of DeviceCredentialDeployment to hide a process from view" - }, - "count": 2, - "total_related": 490, - "prevalence": 0.004081632653061225 - }, - { - "value": { - "id": "53df4e098ad6e906fbb05243a95d838a673d2ba830a6c9ee0cabeac59d2f9a9d", - "level": "medium", - "title": "Suspicious Curl File Upload - Linux", - "author": "Nasreddine Bencherchali (Nextron Systems), Cedric MAURUGEON (Update)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects a suspicious curl process start the adds a file to a web request" - }, - "count": 2, - "total_related": 1560, - "prevalence": 0.001282051282051282 - }, - { - "value": { - "id": "62641a1f33f67c78cb5f920f86788ab9e084dd90a20f1bbe56bd0de87f85b129", - "level": "medium", - "title": "Suspicious Msiexec Quiet Install From Remote Location", - "author": "Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects usage of Msiexec.exe to install packages hosted remotely quietly" - }, - "count": 2, - "total_related": 3836, - "prevalence": 0.0005213764337851929 - }, - { - "value": { - "id": "78dc71a5599dc85b3d37a6ab0f014aa5110b2ce1b2346c8f2730e0c481977781", - "level": "high", - "title": "Curl Download And Execute Combination", - "author": "Sreeman, Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Adversaries can use curl to download payloads remotely and execute them. Curl is included by default in Windows 10 build 17063 and later." - }, - "count": 2, - "total_related": 5115, - "prevalence": 0.00039100684261974585 - }, - { - "value": { - "id": "7a63d1c1bf6ebb277b02d4893066d3732e3d7df562cfdbfee275bbc5c4de0951", - "level": "high", - "title": "MSHTA Suspicious Execution 01", - "author": "Diego Perez (@darkquassar), Markus Neis, Swisscom (Improve Rule)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detection for mshta.exe suspicious execution patterns sometimes involving file polyglotism" - }, - "count": 2, - "total_related": 6759, - "prevalence": 0.00029590176061547566 - }, - { - "value": { - "id": "269369cff6a753f9bd7a50d72f15b83a86911e2d6d46e1a38561ac385481c372", - "level": "medium", - "title": "Msiexec Quiet Installation", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Adversaries may abuse msiexec.exe to proxy execution of malicious payloads.\nMsiexec.exe is the command-line utility for the Windows Installer and is thus commonly associated with executing installation packages (.msi)\n" - }, - "count": 2, - "total_related": 43376, - "prevalence": 4.610844706750277e-05 - }, - { - "value": { - "id": "248820e948efae04f89b524348c8398f0b278befcaec4fafddf73e9c5dda0353", - "level": "high", - "title": "Windows Shell/Scripting Application File Write to Suspicious Folder", - "author": "Florian Roth (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects Windows shells and scripting applications that write files to suspicious folders" - }, - "count": 2, - "total_related": 73355, - "prevalence": 2.726467180151319e-05 - }, - { - "value": { - "id": "4a7e3b52f438365db6b61867f157e3bc434b40fb9916eba681bb857e7a1041ee", - "level": "high", - "title": "Msiexec.EXE Initiated Network Connection Over HTTP", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects an initiated network connection by \"Msiexec.exe\" over port 80 or 443.\nAdversaries might abuse \"msiexec.exe\" to install and execute remotely hosted packages.\n" - }, - "count": 2, - "total_related": 75269, - "prevalence": 2.6571364040973043e-05 - }, - { - "value": { - "id": "c2b8793bc5dc3f78c117608b17e59499e853d298dba8c03f56b4bbcd6d0c0f16", - "level": "high", - "title": "Suspicious Microsoft OneNote Child Process", - "author": "Tim Rauch (Nextron Systems), Nasreddine Bencherchali (Nextron Systems), Elastic (idea)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects suspicious child processes of the Microsoft OneNote application. This may indicate an attempt to execute malicious embedded objects from a .one file." - }, - "count": 1, - "total_related": 409, - "prevalence": 0.0024449877750611247 - }, - { - "value": { - "id": "18992bc0af590fff76bc3d6fbd1f89e36882bbae039d8c4ccd73c952397c875e", - "level": "medium", - "title": "Launch Agent/Daemon Execution Via Launchctl", - "author": "Pratinav Chandra", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the execution of programs as Launch Agents or Launch Daemons using launchctl on macOS." - }, - "count": 1, - "total_related": 8946, - "prevalence": 0.000111781801922647 - }, - { - "value": { - "id": "a22ff20d7afa397abe4e6127e6da647b437781be86602fc20a88c1403f1200bc", - "level": "medium", - "title": "Suspicious LNK Double Extension File Created", - "author": "Nasreddine Bencherchali (Nextron Systems), frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the creation of files with an \"LNK\" as a second extension. This is sometimes used by malware as a method to abuse the fact that Windows hides the \"LNK\" extension by default.\n" - }, - "count": 1, - "total_related": 11733, - "prevalence": 8.522969402539845e-05 - }, - { - "value": { - "id": "5e22ec775af6cbc5059b6f7e9228ad35176019128d402f817de8f1d74a4608ba", - "level": "medium", - "title": "Potential Goopdate.DLL Sideloading", - "author": "X__Junior (Nextron Systems), Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects potential DLL sideloading of \"goopdate.dll\", a DLL used by googleupdate.exe" - }, - "count": 1, - "total_related": 11864, - "prevalence": 8.428860418071477e-05 - }, - { - "value": { - "id": "b9bc90b7745bcb3a2cf9de40d1d419d18ead6650040015c7f4755848e9bfdb05", - "level": "high", - "title": "Suspicious MSHTA Child Process", - "author": "Michael Haag", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects a suspicious process spawning from an \"mshta.exe\" process, which could be indicative of a malicious HTA script execution" - }, - "count": 1, - "total_related": 12767, - "prevalence": 7.832693663350827e-05 - }, - { - "value": { - "id": "d2ba63dcfd40541d69308865939969a6282a95c29b46e0eaeb0c39701b6aa2f7", - "level": "medium", - "title": "Local Network Connection Initiated By Script Interpreter", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects a script interpreter (Wscript/Cscript) initiating a local network connection to download or execute a script hosted on a shared folder.\n" - }, - "count": 1, - "total_related": 28127, - "prevalence": 3.555302734027803e-05 - }, - { - "value": { - "id": "c819b1c2210c6c76f29e7d15825b104bbd98de4d9561a6c86a8b158afd0d2be9", - "level": "high", - "title": "Potentially Suspicious Malware Callback Communication", - "author": "Florian Roth (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects programs that connect to known malware callback ports based on statistical analysis from two different sandbox system databases\n" - }, - "count": 1, - "total_related": 29057, - "prevalence": 3.441511511856007e-05 - }, - { - "value": { - "id": "80c9078b4f0a21412506961251c7253e037afc83c8a88cd362377082d1efaa30", - "level": "low", - "title": "Startup Item File Created - MacOS", - "author": "Alejandro Ortuno, oscd.community", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the creation of a startup item plist file, that automatically get executed at boot initialization to establish persistence.\nAdversaries may use startup items automatically executed at boot initialization to establish persistence.\nStartup items execute during the final phase of the boot process and contain shell scripts or other executable files along with configuration information used by the system to determine the execution order for all startup items.\n" - }, - "count": 1, - "total_related": 39042, - "prevalence": 2.5613441934327136e-05 - }, - { - "value": { - "id": "c0ad3fd3010dc41b8f54cd4f911b4bf081d2d195b0e7548cdc60ebcee9250ad3", - "level": "low", - "title": "Suspicious PowerShell Get Current User", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the use of PowerShell to identify the current logged user." - }, - "count": 1, - "total_related": 40520, - "prevalence": 2.4679170779861795e-05 - }, - { - "value": { - "id": "b0d225f3239543a37159ba2855ee1e7972c6bff3c83ce7aed9056599f6ee6314", - "level": "low", - "title": "Suspicious Process Discovery With Get-Process", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Get the processes that are running on the local computer." - }, - "count": 1, - "total_related": 47234, - "prevalence": 2.1171190244315535e-05 - }, - { - "value": { - "id": "8d980d509aaf7ca8f2c6cd9dd23e8ea6eb18328ca64711cb6e059ecec024fe0a", - "level": "high", - "title": "Outbound Network Connection Initiated By Script Interpreter", - "author": "frack113, Florian Roth (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects a script interpreter wscript/cscript opening a network connection to a non-local network. Adversaries may use script to download malicious payloads." - }, - "count": 1, - "total_related": 51059, - "prevalence": 1.9585185765486987e-05 - }, - { - "value": { - "id": "c085cde9af85b182e783b8d7b42d66d3d0efe08696b4fe7946da3d5d1a2cd51e", - "level": "low", - "title": "Potential PowerShell Obfuscation Using Alias Cmdlets", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects Set-Alias or New-Alias cmdlet usage. Which can be use as a mean to obfuscate PowerShell scripts" - }, - "count": 1, - "total_related": 52503, - "prevalence": 1.904653067443765e-05 - }, - { - "value": { - "id": "b5386a23355681c43cfbd2f2ccfe4b16ed45324d0d7b5583487a9f302ee1e427", - "level": "low", - "title": "Creation of an Executable by an Executable", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the creation of an executable by another executable" - }, - "count": 13, - "total_related": 100000, - "prevalence": 0.00013 - }, - { - "value": { - "id": "e4d5f1be0673fa786cc8379c15338af08cdd11eed433bead9e801d6204d42a2d", - "level": "medium", - "title": "Python Initiated Connection", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects a Python process initiating a network connection. While this often relates to package installation, it can also indicate a potential malicious script communicating with a C&C server." - }, - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": { - "id": "f92451c8957e89bb4e61e68433faeb8d7c1461c3b90d06b3403c8f3d87c728b8", - "level": "medium", - "title": "Usage Of Web Request Commands And Cmdlets", - "author": "James Pemberton / @4A616D6573, Endgame, JHasenbusch, oscd.community, Austin Songer @austinsonger", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the use of various web request commands with commandline tools and Windows PowerShell cmdlets (including aliases) via CommandLine" - }, - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": { - "id": "22e867c244280c1d01bcddc8355c10d82b6c69577cd784cefbbe4eb5e7a82f65", - "level": "medium", - "title": "Password Protected Compressed File Extraction Via 7Zip", - "author": "Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects usage of 7zip utilities (7z.exe, 7za.exe and 7zr.exe) to extract password protected zip files." - }, - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": { - "id": "96d2c399118cab5d249093badf4a85f0ef1889872b0191bdf131bcabc0994681", - "level": "high", - "title": "Suspicious Script Execution From Temp Folder", - "author": "Florian Roth (Nextron Systems), Max Altgelt (Nextron Systems), Tim Shelton", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects a suspicious script executions from temporary folder" - }, - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": { - "id": "b7eb83db20f6f8b5f580e107c2b6816110a31869a94de5e2797d917335d9fbc0", - "level": "high", - "title": "Suspicious Call by Ordinal", - "author": "Florian Roth (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects suspicious calls of DLLs in rundll32.dll exports by ordinal" - }, - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": { - "id": "cfd44c3835317e846b18021a9060f4b9b011294ec53eb3ac1fad568abeb37922", - "level": "medium", - "title": "Office Application Initiated Network Connection To Non-Local IP", - "author": "Christopher Peacock '@securepeacock', SCYTHE '@scythe_io', Florian Roth (Nextron Systems), Tim Shelton, Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects an office application (Word, Excel, PowerPoint) that initiate a network connection to a non-private IP addresses.\nThis rule aims to detect traffic similar to one seen exploited in CVE-2021-42292.\nThis rule will require an initial baseline and tuning that is specific to your organization.\n" - }, - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": { - "id": "b5e9f310ab6a8611ea1b7b788e712f0f6bf452c3092675694cf6256931874071", - "level": "low", - "title": "PowerShell Initiated Network Connection", - "author": "Florian Roth (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects a PowerShell process that initiates network connections. Check for suspicious target ports and target systems." - }, - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": { - "id": "3c0434c2b9b483a1c7879404c2a80556dc54436bf222a970ca7131b1f30079f1", - "level": "medium", - "title": "Use Short Name Path in Command Line", - "author": "frack113, Nasreddine Bencherchali", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detect use of the Windows 8.3 short name. Which could be used as a method to avoid command-line detection" - }, - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": { - "id": "a913250de417b0235e4fbff14e07a25585d216d2000ee8ef314227987aef7eb0", - "level": "medium", - "title": "Use Short Name Path in Image", - "author": "frack113, Nasreddine Bencherchali", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detect use of the Windows 8.3 short name. Which could be used as a method to avoid Image detection" - }, - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": { - "id": "06b48fa7870d38bdf92b4d4a9b9c4a4df779bd405fdc5ba0e70911df20027ce1", - "level": "medium", - "title": "Change PowerShell Policies to an Insecure Level", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects changing the PowerShell script execution policy to a potentially insecure level using the \"-ExecutionPolicy\" flag." - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "0db9fba426142aca003830de31e38a7318ed0a3a299852f6bc4cbe8bc905515f", - "level": "medium", - "title": "Read Contents From Stdin Via Cmd.EXE", - "author": "frack113, Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detect the use of \"<\" to read and potentially execute a file via cmd.exe" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "18842e32896dd83b8aca4d5e1ac78c1f66b1d252479c0023cdd02f108c42c8cd", - "level": "medium", - "title": "Wow6432Node CurrentVersion Autorun Keys Modification", - "author": "Victor Sergeev, Daniil Yugoslavskiy, Gleb Sukhodolskiy, Timur Zinniatullin, oscd.community, Tim Shelton, frack113 (split)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects modification of autostart extensibility point (ASEP) in registry." - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "1f7f8b1e9005dd4d64cb9d30ed53ee94f68fb96262fbd72f7a0266881149c79f", - "level": "low", - "title": "Suspicious Get-WmiObject", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "The infrastructure for management data and operations that enables local and remote management of Windows personal computers and servers" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "5572c8188426269a10ccb41fc8e9c8445391ac38a0917621b0a1ee05ec99aac9", - "level": "medium", - "title": "Change PowerShell Policies to an Insecure Level - PowerShell", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects changing the PowerShell script execution policy to a potentially insecure level using the \"Set-ExecutionPolicy\" cmdlet." - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "62ce96b648991749ff9b9ccc7dafa1d8da64d6490e9f469683f00fa248ef9336", - "level": "low", - "title": "Set Files as System Files Using Attrib.EXE", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects the execution of \"attrib\" with the \"+s\" flag to mark files as system files" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "7ca43f2acf2c039e776af286dca2b5216d23967e6e8fe43dd5a5cc95f86e52e5", - "level": "low", - "title": "Modification of IE Registry Settings", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects modification of the registry settings used for Internet Explorer and other Windows components that use these settings. An attacker can abuse this registry key to add a domain to the trusted sites Zone or insert javascript for persistence" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "8919a871f4a52b7af785fab44b4665ab6a3637e6ebeeac0288df8a5012a48be2", - "level": "low", - "title": "User with Privileges Logon", - "author": "frack113", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects logon with \"Special groups\" and \"Special Privileges\" can be thought of as Administrator groups or privileges." - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "8b5db9da5732dc549b0e8b56fe5933d7c95ed760f3ac20568ab95347ef8c5bcc", - "level": "medium", - "title": "CurrentVersion Autorun Keys Modification", - "author": "Victor Sergeev, Daniil Yugoslavskiy, Gleb Sukhodolskiy, Timur Zinniatullin, oscd.community, Tim Shelton, frack113 (split)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects modification of autostart extensibility point (ASEP) in registry." - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "d62173552d7fce98c24a7040b784edf35cc6650d2e68ecf2d04f40c58d58cfda", - "level": "high", - "title": "Scheduled TaskCache Change by Uncommon Program", - "author": "Syed Hasan (@syedhasan009)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Monitor the creation of a new key under 'TaskCache' when a new scheduled task is registered by a process that is not svchost.exe, which is suspicious" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": { - "id": "ffbbcedfb9a1fd41ebb288154c10cf5cf869eb25195708be30f8a9df74f411cc", - "level": "medium", - "title": "Suspicious New Instance Of An Office COM Object", - "author": "Nasreddine Bencherchali (Nextron Systems)", - "source_url": "https://github.com/Neo23x0/sigma", - "source": "Sigma Integrated Rule Set (GitHub)", - "description": "Detects an svchost process spawning an instance of an office application. This happens when the initial word application creates an instance of one of the Office COM objects such as 'Word.Application', 'Excel.Application', etc.\nThis can be used by malicious actors to create malicious Office documents with macros on the fly. (See vba2clr project in the references)\n" - }, - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "debug_codeview_guids": [ - { - "value": "1a3887d-c10b-4252-81f9-ae6f590cc181", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - } - ], - "debug_codeview_names": [ - { - "value": "D:\\Shared\\.NET Samples\\CSharpQRCodeEncoder-master\\ZXing.Common\\ZXing.Common\\obj\\Release\\ZXing.Common.pdb", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - } - ], - "debug_timestamps": [ - { - "value": "Fri Aug 12 07:44:07 2022", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "Fri Mar 10 05:40:39 2023", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Thu Apr 27 07:13:44 2023", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Wed Mar 1 06:45:12 2023", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Tue Aug 9 01:58:58 2022", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - } - ], - "dropped_files_path": [ - { - "value": "C:\\Users\\Admin\\AppData\\Roaming\\Microsoft\\Windows\\Cookies\\admin@bit[1].txt", - "count": 9, - "total_related": 56, - "prevalence": 0.16071428571428573 - }, - { - "value": "C:\\Users\\Admin\\AppData\\Roaming\\Microsoft\\Templates\\~$Normal.dotm", - "count": 8, - "total_related": 41707, - "prevalence": 0.00019181432373462489 - }, - { - "value": "C:\\Users\\Public\\mshta.exe (copy)", - "count": 6, - "total_related": 20, - "prevalence": 0.3 - }, - { - "value": "C:\\Users\\Public\\msh", - "count": 6, - "total_related": 34, - "prevalence": 0.17647058823529413 - }, - { - "value": "%TEMP%\\password.txt", - "count": 5, - "total_related": 38, - "prevalence": 0.13157894736842105 - }, - { - "value": "c:\\users\\administrator\\appdata\\local\\microsoft\\office\\14.0\\officefilecache\\localcachefileeditmanager\\fsd-cnry.fsd", - "count": 4, - "total_related": 966, - "prevalence": 0.004140786749482402 - }, - { - "value": "c:\\users\\administrator\\appdata\\local\\microsoft\\office\\14.0\\officefilecache\\localcachefileeditmanager\\fsf-{0e1eee64-e8c6-4e2a-9759-63cf07fd8988}.fsf", - "count": 4, - "total_related": 980, - "prevalence": 0.004081632653061225 - }, - { - "value": "c:\\users\\administrator\\appdata\\local\\microsoft\\office\\14.0\\officefilecache\\fsf-ctbl.fsf", - "count": 4, - "total_related": 1063, - "prevalence": 0.0037629350893697085 - }, - { - "value": "C:\\Users\\Admin\\AppData\\Local\\Microsoft\\Office\\14.0\\OfficeFileCache\\LocalCacheFileEditManager\\FSD-CNRY.FSD", - "count": 4, - "total_related": 1074, - "prevalence": 0.0037243947858473 - }, - { - "value": "c:\\users\\administrator\\appdata\\local\\microsoft\\office\\14.0\\officefilecache\\fsd-cnry.fsd", - "count": 4, - "total_related": 1085, - "prevalence": 0.003686635944700461 - }, - { - "value": "C:\\Users\\Admin\\AppData\\Local\\Microsoft\\Office\\14.0\\OfficeFileCache\\LocalCacheFileEditManager\\FSF-{0E1EEE64-E8C6-4E2A-9759-63CF07FD8988}.FSF", - "count": 4, - "total_related": 1155, - "prevalence": 0.003463203463203463 - }, - { - "value": "C:\\Users\\Admin\\AppData\\Local\\Microsoft\\Office\\14.0\\OfficeFileCache\\FSF-CTBL.FSF", - "count": 4, - "total_related": 1167, - "prevalence": 0.003427592116538132 - }, - { - "value": "C:\\Users\\Admin\\AppData\\Local\\Microsoft\\Office\\14.0\\OfficeFileCache\\FSD-CNRY.FSD", - "count": 4, - "total_related": 1175, - "prevalence": 0.003404255319148936 - }, - { - "value": "C:\\Users\\Admin\\AppData\\Local\\Microsoft\\Windows\\Temporary Internet Files\\Content.IE5\\NSD0P9E7\\dnserror[1]", - "count": 4, - "total_related": 13756, - "prevalence": 0.0002907822041291073 - }, - { - "value": "C:\\Users\\Admin\\AppData\\Local\\Microsoft\\Windows\\Temporary Internet Files\\Content.IE5\\UVAV0A3U\\errorPageStrings[1]", - "count": 4, - "total_related": 13922, - "prevalence": 0.0002873150409423933 - }, - { - "value": "C:\\Users\\Admin\\AppData\\Local\\Microsoft\\Windows\\Temporary Internet Files\\Content.IE5\\N3K7JNNI\\ErrorPageTemplate[1]", - "count": 4, - "total_related": 13933, - "prevalence": 0.00028708820785186247 - }, - { - "value": "C:\\Users\\Admin\\AppData\\Local\\Microsoft\\Windows\\Temporary Internet Files\\Content.IE5\\NSD0P9E7\\noConnect[1]", - "count": 3, - "total_related": 13149, - "prevalence": 0.00022815423226100844 - }, - { - "value": "C:\\Users\\Admin\\AppData\\Local\\Microsoft\\Windows\\Temporary Internet Files\\Content.IE5\\NSD0P9E7\\tools[1]", - "count": 3, - "total_related": 13200, - "prevalence": 0.00022727272727272727 - }, - { - "value": "C:\\Users\\Admin\\AppData\\Local\\Microsoft\\Windows\\Temporary Internet Files\\Content.IE5\\MXLP1Y01\\favcenter[1]", - "count": 3, - "total_related": 13202, - "prevalence": 0.00022723829722769278 - }, - { - "value": "C:\\Users\\Admin\\AppData\\Local\\Microsoft\\Windows\\Temporary Internet Files\\Content.IE5\\UVAV0A3U\\down[1]", - "count": 3, - "total_related": 13271, - "prevalence": 0.00022605681561299073 - }, - { - "value": "C:\\Users\\Admin\\AppData\\Local\\Microsoft\\Windows\\Temporary Internet Files\\Content.IE5\\N3K7JNNI\\background_gradient[1]", - "count": 3, - "total_related": 13294, - "prevalence": 0.00022566571385587483 - }, - { - "value": "C:\\Users\\Admin\\AppData\\Local\\Microsoft\\Windows\\Temporary Internet Files\\Content.IE5\\MXLP1Y01\\httpErrorPagesScripts[1]", - "count": 3, - "total_related": 13695, - "prevalence": 0.0002190580503833516 - }, - { - "value": "C:\\Users\\Admin\\AppData\\Roaming\\Adobe\\Acrobat\\9.0\\UserCache.bin", - "count": 3, - "total_related": 27743, - "prevalence": 0.00010813538550264931 - }, - { - "value": "C:\\Users\\Admin\\AppData\\Roaming\\Adobe\\Acrobat\\9.0\\SharedDataEvents", - "count": 3, - "total_related": 68355, - "prevalence": 4.3888523151195965e-05 - }, - { - "value": "C:\\Users\\Admin\\AppData\\Roaming\\Adobe\\Acrobat\\9.0\\SharedDataEvents-journal", - "count": 3, - "total_related": 68507, - "prevalence": 4.379114543039397e-05 - }, - { - "value": "C:\\Users\\Admin\\AppData\\Roaming\\Microsoft\\Office\\Recent\\index.dat", - "count": 3, - "total_related": 82852, - "prevalence": 3.620914401583546e-05 - }, - { - "value": "C:\\Users\\Admin\\AppData\\Local\\Temp\\CVR287A.tmp", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "C:\\Users\\Administrator\\AppData\\Local\\Temp\\Risk Assessment Checklist.pdf", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "C:\\Users\\Public\\mshta.exeir (copy)", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "%APPDATA%\\microsoft\\windows\\start menu\\programs\\help.lnk", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "%TEMP%\\box.lnk", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "C:\\users\\public\\scmp.exe", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "%APPDATA%\\microsoft\\windows\\start menu\\programs\\startup\\box.lnk", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "C:\\Users\\Administrator\\AppData\\Local\\Temp\\Password.txt.lnk", - "count": 2, - "total_related": 9, - "prevalence": 0.2222222222222222 - }, - { - "value": "C:\\Users\\Public\\mshta.exe", - "count": 2, - "total_related": 14, - "prevalence": 0.14285714285714285 - }, - { - "value": "C:\\Users\\user\\AppData\\Local\\Microsoft\\Windows\\INetCache\\IE\\R0IAZP7Z\\warning[1].htm", - "count": 2, - "total_related": 67, - "prevalence": 0.029850746268656716 - }, - { - "value": "CentralTable.ini", - "count": 2, - "total_related": 1437, - "prevalence": 0.0013917884481558804 - }, - { - "value": "C:\\Users\\Admin\\AppData\\Local\\Temp\\ArmUI.ini", - "count": 2, - "total_related": 25895, - "prevalence": 7.723498744931454e-05 - }, - { - "value": "C:\\Users\\Admin\\AppData\\Local\\Temp\\AdobeARM.log", - "count": 2, - "total_related": 25950, - "prevalence": 7.707129094412332e-05 - }, - { - "value": "c:\\users\\administrator\\appdata\\locallow\\microsoft\\cryptneturlcache\\content\\103621de9cd5414cc2538780b4b75751", - "count": 2, - "total_related": 50820, - "prevalence": 3.935458480913026e-05 - }, - { - "value": "c:\\users\\administrator\\appdata\\locallow\\microsoft\\cryptneturlcache\\metadata\\103621de9cd5414cc2538780b4b75751", - "count": 2, - "total_related": 56868, - "prevalence": 3.5169163677287755e-05 - }, - { - "value": "c:\\users\\administrator\\appdata\\locallow\\microsoft\\cryptneturlcache\\metadata\\644b8874112055b5e195ecb0e8f243a4", - "count": 2, - "total_related": 59048, - "prevalence": 3.387074922097277e-05 - }, - { - "value": "c:\\users\\administrator\\appdata\\locallow\\microsoft\\cryptneturlcache\\content\\644b8874112055b5e195ecb0e8f243a4", - "count": 2, - "total_related": 59425, - "prevalence": 3.365586874211191e-05 - }, - { - "value": "c:\\users\\administrator\\appdata\\locallow\\microsoft\\cryptneturlcache\\metadata\\e0f5c59f9fa661f6f4c50b87fef3a15a", - "count": 2, - "total_related": 69632, - "prevalence": 2.8722426470588235e-05 - }, - { - "value": "c:\\users\\administrator\\appdata\\locallow\\microsoft\\cryptneturlcache\\content\\e0f5c59f9fa661f6f4c50b87fef3a15a", - "count": 2, - "total_related": 72289, - "prevalence": 2.7666726611240993e-05 - }, - { - "value": "%TEMP%\\emmmx.js", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "%TEMP%\\hgnuuquzrw.vbs", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "%TEMP%\\hoqa.js", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "%TEMP%\\qwgrp.js", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "%TEMP%\\qwuidnvo.js", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "%TEMP%\\ulqxefgoii.vbs", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/Applications/Google Chrome.app/Contents/.Info.plist.E70Hsn", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/Applications/Google Chrome.app/Contents/.Info.plist.OOB5BB", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/Applications/Google Chrome.app/Contents/.PkgInfo.HZfmf1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/Applications/Google Chrome.app/Contents/.PkgInfo.pe49Rg", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/Applications/Google Chrome.app/Contents/.embedded.provisionprofile.MMm6X6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/Applications/Google Chrome.app/Contents/.embedded.provisionprofile.mfbNn4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/Applications/Google Chrome.app/Contents/Library/LaunchServices/.com.google.Chrome.UpdaterPrivilegedHelper.EDQ8oG", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/Applications/Google Chrome.app/Contents/Library/LaunchServices/.com.google.Chrome.UpdaterPrivilegedHelper.xMAeCq", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/Applications/Google Chrome.app/Contents/MacOS/.Google Chrome.1xTTZH", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/Applications/Google Chrome.app/Contents/MacOS/.Google Chrome.VZSkmJ", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/Applications/Google Chrome.app/Contents/Resources/.scripting.sdef.OnVEBg", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/Applications/Google Chrome.app/Contents/Resources/.scripting.sdef.jApuRj", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "%APPDATA%\\microsoft\\windows\\start menu\\programs\\startup\\sppedup.lnk", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "%TEMP%\\sppedup.lnk", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "%APPDATA%\\microsoft\\windows\\start menu\\programs\\startup\\help.lnk", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "%TEMP%\\msedge.lnk", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "%APPDATA%\\microsoft\\windows\\start menu\\programs\\startup\\msedge.lnk", - "count": 1, - "total_related": 33, - "prevalence": 0.030303030303030304 - }, - { - "value": "C:\\Users\\user\\AppData\\LocalLow\\Microsoft\\CryptnetUrlCache\\Content\\77EC63BDA74BD0D0E0426DC8F8008506", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "C:\\Users\\\\AppData\\Local\\Microsoft\\Windows\\PowerShell\\StartupProfileData-NonInteractive", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "C:\\Users\\user\\AppData\\LocalLow\\Adobe\\AcroCef\\DC\\Acrobat\\Cache\\LOG", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "C:\\Users\\user\\AppData\\LocalLow\\Adobe\\AcroCef\\DC\\Acrobat\\Cache\\LOG.old (copy)", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "C:\\Users\\\\AppData\\Local\\Adobe\\Acrobat\\DC\\SOPHIA\\Reader\\SOPHIA.json", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "C:\\Users\\user\\AppData\\Local\\Adobe\\Acrobat\\DC\\SOPHIA\\Reader\\SOPHIA.json", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "C:\\Users\\\\AppData\\Local\\Adobe\\Acrobat\\DC\\SOPHIA\\Reader\\Files\\TESTING", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "C:\\Users\\\\AppData\\Local\\Adobe\\Acrobat\\DC\\UserCache.bin", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "C:\\Users\\\\AppData\\Roaming\\Adobe\\Acrobat\\DC\\Security\\CRLCache\\915DEAC5D1E15E49646B8A94E04E470958C9BB89.crl", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "C:\\Users\\\\AppData\\Roaming\\Adobe\\Acrobat\\DC\\Security\\CRLCache\\DF22CF8B8C3B46C10D3D5C407561EABEB57F8181.crl", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "C:\\Users\\user\\AppData\\Local\\Temp\\unarchiver.log", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "C:\\Users\\user\\AppData\\Roaming\\Microsoft\\Office\\Recent\\attachment.LNK", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "C:\\Users\\\\AppData\\Local\\Microsoft\\Windows\\Temporary Internet Files\\Content.IE5\\2286DCMF\\AcroRdrDCUpd2200320282[1].msi", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "C:\\Users\\\\AppData\\Roaming\\Microsoft\\Templates\\Normal.dotm", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "C:\\Users\\Administrator\\AppData\\LocalLow\\Adobe\\Acrobat\\DC\\ReaderMessages", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "C:\\Users\\Administrator\\AppData\\Local\\Adobe\\Acrobat\\DC\\UserCache.bin", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "C:\\Users\\user\\AppData\\LocalLow\\Adobe\\AcroCef\\DC\\Acrobat\\Cache\\Code Cache\\js\\index-dir\\temp-index", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "C:\\Users\\user\\AppData\\LocalLow\\Adobe\\AcroCef\\DC\\Acrobat\\Cache\\Code Cache\\js\\index-dir\\the-real-index (copy)", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "C:\\Users\\user\\AppData\\Local\\Adobe\\Acrobat\\DC\\SOPHIA\\Reader\\Files\\DC_READER_LAUNCH_CARD", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "C:\\Users\\user\\AppData\\Local\\Adobe\\Acrobat\\DC\\SOPHIA\\Reader\\Files\\DC_Reader_RHP_Banner", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "C:\\Users\\user\\AppData\\Local\\Adobe\\Acrobat\\DC\\SOPHIA\\Reader\\Files\\DC_Reader_RHP_Retention", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "C:\\Users\\user\\AppData\\Local\\Adobe\\Acrobat\\DC\\SOPHIA\\Reader\\Files\\Edit_InApp_Aug2020", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "C:\\Users\\user\\AppData\\Roaming\\Microsoft\\Office\\Recent\\design.LNK", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "C:\\Users\\user\\AppData\\Roaming\\Microsoft\\Office\\Recent\\document.LNK", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "C:\\Users\\user\\AppData\\Roaming\\Microsoft\\Office\\Recent\\index.dat", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "C:\\Users\\user\\AppData\\Roaming\\Microsoft\\Templates\\Normal.dotm (copy)", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "C:\\Users\\user\\AppData\\Roaming\\Microsoft\\Templates\\~WRD0000.tmp", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "C:\\Windows\\Temp\\ArmReport.ini", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "C:\\Windows\\Temp\\ArmUI.ini", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "c:\\users\\administrator\\appdata\\locallow\\microsoft\\cryptneturlcache\\metadata\\94308059b57b3142e455b38a6eb92015", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "c:\\users\\administrator\\appdata\\roaming\\microsoft\\templates\\~$normal.dotm", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "edb.chk", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - } - ], - "exiftool_authors": [ - { - "value": "Marvin", - "count": 3, - "total_related": 995, - "prevalence": 0.003015075376884422 - }, - { - "value": "Pig", - "count": 2, - "total_related": 35, - "prevalence": 0.05714285714285714 - }, - { - "value": "David Martin", - "count": 2, - "total_related": 382, - "prevalence": 0.005235602094240838 - }, - { - "value": "Never3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Douglas Arner, Raphael Auer and Jon Frost", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "James Hokins", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "w7x64", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "Alex Hamilton", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "Wonder", - "count": 1, - "total_related": 21, - "prevalence": 0.047619047619047616 - }, - { - "value": "Christian", - "count": 1, - "total_related": 12422, - "prevalence": 8.050233456770246e-05 - }, - { - "value": "Microsoft Corporation", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "exiftool_create_dates": [ - { - "value": "2021:06:05 12:05:12+00:00", - "count": 13, - "total_related": 315, - "prevalence": 0.04126984126984127 - }, - { - "value": "2020:02:14 14:47:41+00:00", - "count": 12, - "total_related": 12, - "prevalence": 1.0 - }, - { - "value": "2015:10:30 07:18:41+00:00", - "count": 11, - "total_related": 12, - "prevalence": 0.9166666666666666 - }, - { - "value": "2020:02:17 06:46:36+00:00", - "count": 11, - "total_related": 12, - "prevalence": 0.9166666666666666 - }, - { - "value": "2015:10:30 08:18:41+01:00", - "count": 10, - "total_related": 13, - "prevalence": 0.7692307692307693 - }, - { - "value": "2020:02:14 15:47:41+01:00", - "count": 9, - "total_related": 9, - "prevalence": 1.0 - }, - { - "value": "2021:05:13 12:13:51+00:00", - "count": 8, - "total_related": 8, - "prevalence": 1.0 - }, - { - "value": "2019:03:19 04:45:40+00:00", - "count": 8, - "total_related": 97, - "prevalence": 0.08247422680412371 - }, - { - "value": "2020:02:13 02:10:28+00:00", - "count": 7, - "total_related": 8, - "prevalence": 0.875 - }, - { - "value": "2020:02:13 03:10:28+01:00", - "count": 7, - "total_related": 8, - "prevalence": 0.875 - }, - { - "value": "2019:12:07 09:09:39+00:00", - "count": 7, - "total_related": 1753, - "prevalence": 0.003993154592127781 - }, - { - "value": "2019:07:10 01:11:02+00:00", - "count": 6, - "total_related": 6, - "prevalence": 1.0 - }, - { - "value": "2019:07:10 03:11:02+02:00", - "count": 6, - "total_related": 6, - "prevalence": 1.0 - }, - { - "value": "2018:09:15 07:28:38+00:00", - "count": 6, - "total_related": 131, - "prevalence": 0.04580152671755725 - }, - { - "value": "2022:07:11 05:41:15+00:00", - "count": 5, - "total_related": 5, - "prevalence": 1.0 - }, - { - "value": "2019:03:19 05:45:40+01:00", - "count": 5, - "total_related": 21, - "prevalence": 0.23809523809523808 - }, - { - "value": "2018:09:15 08:28:38+01:00", - "count": 5, - "total_related": 49, - "prevalence": 0.10204081632653061 - }, - { - "value": "2021:05:19 05:58:00Z", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "2023:01:14 05:35:57+00:00", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "2021:02:07 03:17:58+00:00", - "count": 4, - "total_related": 5, - "prevalence": 0.8 - }, - { - "value": "2012:07:26 01:26:44+00:00", - "count": 4, - "total_related": 596, - "prevalence": 0.006711409395973154 - }, - { - "value": "2019:07:10 02:11:02+01:00", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "2021:04:22 03:38:09+00:00", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "2019:01:07 13:11:00", - "count": 3, - "total_related": 9, - "prevalence": 0.3333333333333333 - }, - { - "value": "2020:10:09 20:47:15+00:00", - "count": 3, - "total_related": 9, - "prevalence": 0.3333333333333333 - }, - { - "value": "2018:04:11 23:33:56+00:00", - "count": 3, - "total_related": 23, - "prevalence": 0.13043478260869565 - }, - { - "value": "2020:07:31 01:06:00Z", - "count": 3, - "total_related": 25, - "prevalence": 0.12 - }, - { - "value": "2018:09:15 09:28:38+02:00", - "count": 3, - "total_related": 161, - "prevalence": 0.018633540372670808 - }, - { - "value": "2019:09:23 12:56:43+00:00", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "2019:11:08 12:45:59+00:00", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "2019:11:08 13:45:59+01:00", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "2019:11:09 04:10:27+00:00", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "2022:10:20 01:23:23+00:00", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "2022:10:20 01:23:27+00:00", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "2018:11:19 13:10:00", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "2020:09:14 16:54:46+09:00", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "2018:04:12 00:33:56+01:00", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "2021:02:23 07:49:25+00:00", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "2018:04:12 01:33:56+02:00", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "2018:11:22 03:31:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2019:01:16 06:48:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2019:02:27 01:49:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2019:12:07 10:09:39+01:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2021:02:23 01:54:13+00:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2021:04:19 10:22:00Z", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2021:05:26 09:20:49+09:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2021:09:30 01:52:25+00:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2022:03:21 14:52:49+09:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2022:06:24 11:48:35+05:30", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2022:07:26 09:19:19+09:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2022:09:20 19:03:50+09:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2022:09:29 15:43:36+09:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2022:12:19 11:33:28+09:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2023:03:21 07:38:46", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2023:04:14 01:29:12+00:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2023:06:20 21:12:02+09:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2023:07:05 16:19:36+09:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2023:09:25 11:44:54+09:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2017:03:18 20:56:50+00:00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2018:09:15 09:29:18+02:00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2020:11:23 14:30:43+01:00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2023:04:14 01:28:58+00:00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2023:06:30 07:31:00Z", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2023:06:30 16:05:16+09:00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2017:03:18 21:56:50+01:00", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "2018:11:27 03:40:00", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "2020:08:19 13:04:00Z", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "2022:05:07 05:20:45+00:00", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "2011:10:31 04:17:45Z", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "2021:01:27 08:42:45", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "2019:06:13 00:52:00", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "2018:09:15 07:29:18+00:00", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "2019:12:07 09:10:18+00:00", - "count": 1, - "total_related": 28, - "prevalence": 0.03571428571428571 - }, - { - "value": "2009:12:11 11:47:44", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "exiftool_creators": [ - { - "value": "Pig", - "count": 4, - "total_related": 18, - "prevalence": 0.2222222222222222 - }, - { - "value": "Shangping Wang", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Douglas Arner, Raphael Auer and Jon Frost", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "business.gov.au", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - }, - { - "value": "Arbortext Advanced Print Publisher 11.0.3433/W Unicode", - "count": 1, - "total_related": 838, - "prevalence": 0.0011933174224343676 - }, - { - "value": "Microsoft\u00ae Word 2016", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - } - ], - "exiftool_last_printed": [ - { - "value": "2018:11:22 12:19:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2018:11:19 22:30:00Z", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2018:11:22 12:19:00Z", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "2014:07:30 02:39:01Z", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "0000:00:00 00:00:00", - "count": 8, - "total_related": 100000, - "prevalence": 8e-05 - }, - { - "value": "2009:12:11 11:47:44", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "exiftool_producers": [ - { - "value": "Adobe Acrobat Standard DC 20.9.20067", - "count": 1, - "total_related": 137, - "prevalence": 0.0072992700729927005 - }, - { - "value": "PDFlib+PDI 9.0.3p4 (C++/Win32)", - "count": 1, - "total_related": 1258, - "prevalence": 0.000794912559618442 - }, - { - "value": "Microsoft\u00ae Word 2016", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - } - ], - "exiftool_subjects": [ - { - "value": "(EMCO EVALUATION PACKAGE) - OneNote Product Update", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "IEEE Access; ;PP;99;10.1109/ACCESS.2019.2935873", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "HotCoin ICO Project", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "BIS Working Papers No 905, November 2020", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - } - ], - "exiftool_titles": [ - { - "value": "A Bitcoin price prediction model assuming oscillatory growth and lengthening cycles", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Smart Contract-Based Product Traceability System in the Supply Chain Scenario", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Job Description AnD REquirements", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "Stablecoins: risks, potential and regulation", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "Installation Database", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "filecondis_dhash": [ - { - "value": "def0a898a0808080", - "count": 9, - "total_related": 9, - "prevalence": 1.0 - }, - { - "value": "787c7c3c4c790800", - "count": 7, - "total_related": 68, - "prevalence": 0.10294117647058823 - }, - { - "value": "def0e898a0808080", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "fcecccc89e840680", - "count": 2, - "total_related": 9, - "prevalence": 0.2222222222222222 - }, - { - "value": "f0f0f89918000000", - "count": 2, - "total_related": 174, - "prevalence": 0.011494252873563218 - }, - { - "value": "f8f0b09888000000", - "count": 2, - "total_related": 6883, - "prevalence": 0.0002905709719599012 - }, - { - "value": "00343e1c1e0f1704", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "00343e1c2c2d1200", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "203c3e1c3e260700", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "203c3e3e1f270640", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "603c3e3e1e073400", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "747e3c1e1e262700", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "787c783c5d0c0400", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "9cdc9c8c8e868280", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "bcbebc9ebcc69482", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "bd00a48ab4a0a888", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "bd00b8aa90800080", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "be00aea8baa88996", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "c2e0800000008380", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "ce7ccedc9cce42a4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "d6d400c8d8c54614", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "dedcdedede8ec210", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "def0a89890808080", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "defe6cc28e66d786", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "eca098b88c880000", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "f4acf4c8d48a14c8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "f4fac4accea69484", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "f4fec4accea69484", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "00003c3c1e0f0204", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "787c7c7e2e6d1400", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "f0f8b81840000000", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "787e3e1e1e262308", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "8100008080809080", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "587c3c1e1e651010", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "f87c7c1c2d6c0000", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "707e3c1e1e260700", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "0038383d3c280000", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "d4da00d490c80480", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "990000989b008a8a", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "787c7c1c4d2e1000", - "count": 1, - "total_related": 16, - "prevalence": 0.0625 - }, - { - "value": "0028393820000000", - "count": 1, - "total_related": 18, - "prevalence": 0.05555555555555555 - }, - { - "value": "3018383818000000", - "count": 1, - "total_related": 27, - "prevalence": 0.037037037037037035 - }, - { - "value": "f87c7c1c4d6c0000", - "count": 1, - "total_related": 37, - "prevalence": 0.02702702702702703 - }, - { - "value": "787c3c1c1e262d00", - "count": 1, - "total_related": 46, - "prevalence": 0.021739130434782608 - }, - { - "value": "707c3e1c2c260900", - "count": 1, - "total_related": 48, - "prevalence": 0.020833333333333332 - }, - { - "value": "f8a0b0d898000000", - "count": 1, - "total_related": 50, - "prevalence": 0.02 - }, - { - "value": "00001c1e1a191000", - "count": 1, - "total_related": 65, - "prevalence": 0.015384615384615385 - }, - { - "value": "00003c1c1c091000", - "count": 1, - "total_related": 67, - "prevalence": 0.014925373134328358 - }, - { - "value": "00001c1e1e0f1204", - "count": 1, - "total_related": 71, - "prevalence": 0.014084507042253521 - }, - { - "value": "f8b09098a8000000", - "count": 1, - "total_related": 98, - "prevalence": 0.01020408163265306 - }, - { - "value": "f8e098a898000000", - "count": 1, - "total_related": 136, - "prevalence": 0.007352941176470588 - }, - { - "value": "0000381c1c091000", - "count": 1, - "total_related": 146, - "prevalence": 0.00684931506849315 - }, - { - "value": "0000001e0e0b0604", - "count": 1, - "total_related": 159, - "prevalence": 0.006289308176100629 - }, - { - "value": "f8a0908888000000", - "count": 1, - "total_related": 219, - "prevalence": 0.0045662100456621 - }, - { - "value": "000000000c0e0108", - "count": 1, - "total_related": 227, - "prevalence": 0.004405286343612335 - }, - { - "value": "787c3c3c1c510800", - "count": 1, - "total_related": 276, - "prevalence": 0.0036231884057971015 - }, - { - "value": "00303c3c3c2d2000", - "count": 1, - "total_related": 341, - "prevalence": 0.002932551319648094 - }, - { - "value": "787c3c1c1e060900", - "count": 1, - "total_related": 390, - "prevalence": 0.002564102564102564 - }, - { - "value": "0c0c0c0c0c0c0000", - "count": 1, - "total_related": 437, - "prevalence": 0.002288329519450801 - }, - { - "value": "f0f8781849000000", - "count": 1, - "total_related": 439, - "prevalence": 0.002277904328018223 - }, - { - "value": "7078785899000000", - "count": 1, - "total_related": 461, - "prevalence": 0.0021691973969631237 - }, - { - "value": "f878783809000000", - "count": 1, - "total_related": 501, - "prevalence": 0.001996007984031936 - }, - { - "value": "d8f0b09890000000", - "count": 1, - "total_related": 506, - "prevalence": 0.001976284584980237 - }, - { - "value": "f8d0b0b888000000", - "count": 1, - "total_related": 507, - "prevalence": 0.0019723865877712033 - }, - { - "value": "787c7c3c4c390800", - "count": 1, - "total_related": 597, - "prevalence": 0.0016750418760469012 - }, - { - "value": "787c3c1c1e260900", - "count": 1, - "total_related": 630, - "prevalence": 0.0015873015873015873 - }, - { - "value": "f8a0b08888000000", - "count": 1, - "total_related": 671, - "prevalence": 0.0014903129657228018 - }, - { - "value": "787c7c3c0c4d0000", - "count": 1, - "total_related": 784, - "prevalence": 0.0012755102040816326 - }, - { - "value": "0000000c06070600", - "count": 1, - "total_related": 1032, - "prevalence": 0.0009689922480620155 - }, - { - "value": "f8a0b09890000000", - "count": 1, - "total_related": 1120, - "prevalence": 0.0008928571428571428 - }, - { - "value": "7878787849000000", - "count": 1, - "total_related": 1375, - "prevalence": 0.0007272727272727272 - }, - { - "value": "787c7c3c4c590800", - "count": 1, - "total_related": 1423, - "prevalence": 0.0007027406886858749 - }, - { - "value": "000000080f0d0908", - "count": 1, - "total_related": 1750, - "prevalence": 0.0005714285714285715 - }, - { - "value": "f8b0b09890000000", - "count": 1, - "total_related": 1953, - "prevalence": 0.0005120327700972862 - }, - { - "value": "000000000e0f0502", - "count": 1, - "total_related": 2023, - "prevalence": 0.0004943153732081067 - }, - { - "value": "f8e0b09888000000", - "count": 1, - "total_related": 2114, - "prevalence": 0.0004730368968779565 - }, - { - "value": "c0c0000000000080", - "count": 1, - "total_related": 2335, - "prevalence": 0.00042826552462526765 - }, - { - "value": "0000001e1e1e1b00", - "count": 1, - "total_related": 4860, - "prevalence": 0.00020576131687242798 - }, - { - "value": "000000000e0e0b08", - "count": 1, - "total_related": 9183, - "prevalence": 0.00010889687465969727 - }, - { - "value": "000000080e0e0b08", - "count": 1, - "total_related": 16416, - "prevalence": 6.0916179337231965e-05 - }, - { - "value": "f0e0b09100000000", - "count": 1, - "total_related": 19935, - "prevalence": 5.016302984700276e-05 - }, - { - "value": "000000000c0f0c00", - "count": 1, - "total_related": 22718, - "prevalence": 4.401795932740558e-05 - }, - { - "value": "0000000006070504", - "count": 1, - "total_related": 23851, - "prevalence": 4.1926963230053246e-05 - }, - { - "value": "000000080e0f0e00", - "count": 1, - "total_related": 30076, - "prevalence": 3.32491022742386e-05 - }, - { - "value": "000000080d0c0800", - "count": 1, - "total_related": 31018, - "prevalence": 3.22393448965117e-05 - }, - { - "value": "0000000c0f0c0800", - "count": 1, - "total_related": 34079, - "prevalence": 2.9343584025352856e-05 - }, - { - "value": "0000000c0d0c0800", - "count": 1, - "total_related": 50707, - "prevalence": 1.972114303745045e-05 - }, - { - "value": "000000080d080000", - "count": 1, - "total_related": 94735, - "prevalence": 1.0555760806460125e-05 - }, - { - "value": "0000000000020300", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": "0000000000020302", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "0000000000000302", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "0000000000000300", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "0000000000070600", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "0000000000000100", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "0000000000030302", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "0000000000070604", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "0000000004050000", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "0000000004070400", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "0000000006070600", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "000000000c0d0000", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "netassembly_mvid": [ - { - "value": "4fb0c65c-9ed1-4f34-961d-5b2106bab3ad", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - } - ], - "office_application_names": [ - { - "value": "Windows Installer XML Toolset (3.10.1.2213)", - "count": 1, - "total_related": 9527, - "prevalence": 0.00010496483677967881 - }, - { - "value": "Microsoft Office Word", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": "Microsoft Excel", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "office_authors": [ - { - "value": "Rodrigas Hames", - "count": 4, - "total_related": 13, - "prevalence": 0.3076923076923077 - }, - { - "value": "Kevin Buchli", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "James Hokins", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "Easter", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "w7x64", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - }, - { - "value": "Emperor", - "count": 1, - "total_related": 16, - "prevalence": 0.0625 - } - ], - "office_creation_datetimes": [ - { - "value": "2019-01-07 14:11:00", - "count": 3, - "total_related": 6, - "prevalence": 0.5 - }, - { - "value": "2019-01-07 13:11:00", - "count": 3, - "total_related": 8, - "prevalence": 0.375 - }, - { - "value": "2018-11-19 14:10:00", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "2018-11-19 13:10:00", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "2018-11-19 05:10:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2019-01-16 06:48:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2023-03-21 07:38:46", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2018-11-22 03:31:00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2018-11-22 04:31:00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2018-11-27 03:40:00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2019-02-27 01:49:00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2019-02-27 02:49:00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2018-11-27 04:40:00", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "2019-01-16 07:48:00", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "2019-06-13 02:52:00", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "2019-06-13 00:52:00", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "2021-01-27 08:42:45", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "2009-12-11 11:47:44", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "office_last_saved": [ - { - "value": "2018-11-19 05:44:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2018-12-01 15:12:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2019-03-17 15:15:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2019-05-03 05:46:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2019-06-12 04:42:00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2023-03-21 07:38:46", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2018-12-01 16:12:00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2019-01-16 08:48:00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2019-02-27 01:49:00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2019-03-17 14:15:00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2019-05-03 04:46:00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2019-05-03 06:46:00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2019-06-12 02:42:00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2019-06-12 03:42:00", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2018-11-19 14:44:00", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "2018-11-20 12:28:00", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "2019-01-07 16:48:00", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "2019-01-16 07:48:00", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "2019-02-27 02:49:00", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "2019-01-07 17:48:00", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "2018-11-19 13:44:00", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "2018-11-20 11:28:00", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "2019-12-02 16:25:00", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "2021-03-25 01:52:02", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "2019-12-02 15:25:00", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "2020-09-18 14:06:51", - "count": 1, - "total_related": 62225, - "prevalence": 1.6070711128967456e-05 - } - ], - "office_macro_names": [ - { - "value": "NewMacros.bas", - "count": 10, - "total_related": 76081, - "prevalence": 0.00013143886121370644 - } - ], - "pe_info_imports": [ - { - "value": "KERNEL32.dll", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": "USER32.dll", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "SHELL32.dll", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "mscoree.dll", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "pe_info_exports": [ - { - "value": "DllFunc_2", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "DllFunc", - "count": 3, - "total_related": 736, - "prevalence": 0.004076086956521739 - } - ], - "pe_info_section_md5": [ - { - "value": "1ee852b454427f26c87bd10a72f8b363", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "9d8b1f976c7cac7dde65f4888decb0c0", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "ca2fedb488296f04d3198fe56edab8fc", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "dee011295e85eff8496e4ff3f562cb90", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "e6adccb514ec4232af591eaa3596af36", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "2a4b83ae293411aa4eda3b98c7e48479", - "count": 4, - "total_related": 5, - "prevalence": 0.8 - }, - { - "value": "69e21c2ab2503129ef6d2f13cc538014", - "count": 4, - "total_related": 18780, - "prevalence": 0.00021299254526091586 - }, - { - "value": "05b3c0354acc9ebc0f1e7e198b1dc30f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "06c52cef077bf5c0fd3360fc6827f93f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1033465c3180268dc3c2bf86ba8bfc39", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2dd793dc4a27d2cd2341689b0c0795c4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2e37599c41ede6e2f70915f45893493d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2ea6c01c293c730a51dd94db464c8a61", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "30546cbc21a54581f55282af4b60dcee", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "35850188966647dfb0642178215cf9dd", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "55aeb46637035c139ce3cdf6da717bbe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5b9569be766145198e205411ad626177", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "6f935b719b876e9d920491e3df2afa8c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "7a25d0da2e2a955ce835281869b250fa", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "7d5725a7311b33eeea1e74891c96fb23", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "82aa66441860b6edc367842bde3cced9", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "878bbdba92981286be1d77c720657e27", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "99e51e2c746bb231ac7c38c51ef6571d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "a0d1c800ffb6414c094cf44bafa196dc", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "afe6d3e59c25cb50acb052682e3f869d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "b29c4f2b895d0c9f725005b361221963", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "c1e959bcb590b167827ec4579a7907c1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "c276a3dd355b9310c2fbd9fc2de115d0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "d0ece0fc3aeaef3ac4cba3d55cada5d0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "e2af512e6a8324ddc7a74d17e6be4816", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "eb3c1a5c13a43e7b8b571db2cc76e115", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "ef740cf0510a522ff030ff0b4239548a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "f74b76872b9c7418666ff261a392c17d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "228135d44a0d18f7956e8791e0090139", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "4aa09cc7047e9d6b8c4ddeafb9f6ec28", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "6074cbe3899827ec5efae4bc8f8c12df", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "0998013e4c93a93ee44c1ea6f7bf2fb2", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "0b8e1b97130125217314467e974a9d6e", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "9ed3d5065aa72d8422c2fbef210746ba", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "e37be6610bb80ee57722b20405160ce4", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "e3874d44b8936c0dde648608ca057ae8", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "801d2498fc10fdf859df48863bcac421", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "8bf4e9439d44124a3aa927ec8fb3d64e", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "5799024abe8918f1bfa36184590cedf5", - "count": 1, - "total_related": 703, - "prevalence": 0.001422475106685633 - }, - { - "value": "af4c8818534cc8fb1e04e8b7f731187b", - "count": 1, - "total_related": 11690, - "prevalence": 8.554319931565441e-05 - }, - { - "value": "94a4bdad46cd2ba4a61ce55d564521bf", - "count": 1, - "total_related": 17644, - "prevalence": 5.667649059170256e-05 - }, - { - "value": "bf619eac0cdf3f68d496ea9344137e8b", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "d41d8cd98f00b204e9800998ecf8427e", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "pe_info_section_names": [ - { - "value": ".text", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": ".reloc", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": ".rsrc", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": ".data", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": ".pdata", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": ".rdata", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": "_RDATA", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": ".gfids", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": ".idata", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "pwdinfo_values": [ - { - "value": "$office$*2013*100000*256*16*08090a4dd14800b2112500e771b8aad4*c15bc349b4ed3495cdc078248c916cec*f319c40704622974350f1902280fa0bea0ce1b793a342d2ea25c37d54ef2103a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "$office$*2013*100000*256*16*16b431834411ec6e956a0191ba9d08bb*2465dc5fd7383385436c97c00e506be8*b1c027146473a52317d033caf7381054306ea2435e84350879a0992b2b7062c8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "$office$*2013*100000*256*16*34bdd763ddfb9b93d0e20eeab45908ff*d553c4e053c44a2a1ae177a45d4490ef*4d6f8d1e1f550364c81a1b3253e895449b957ab030f618b1b02d0ff4bc8b3524", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "$office$*2013*100000*256*16*375579eba9653ca46653e7355131d1ef*65284b8cf4602692cc1d46d4b3420fa5*86a0484ab5f42d78039578d13030ce5e67f034adaa7ce62088167b6d902c690f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "$office$*2013*100000*256*16*4fd6ea7275e5409d21e5d161b27e5275*2b931be08204001246bbeab723c0cbe5*d33d6fe401d2c9ff4200de8fda91f5bf1d5826e65d86874609f6e5c16d036e19", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "$office$*2013*100000*256*16*620869196c7ec59d13e332256ba76d72*5ef805b5fb2e078f36ab8c28b73a0034*8006449cc14e8a47a1b832f86b43ca43ab153fc43f1eab5ab20afd2b7d60d1fc", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "$office$*2013*100000*256*16*6c5762d139db5ca552312de9ec305f96*d38fbadc0492974ba9ffb3b8ddcfce8f*cc8cb2e5fe028d0900c49f3532a2414eb57559c38742ca2d9e50911328cb90be", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "$office$*2013*100000*256*16*6d13288fb4e61014111b997bde8ce812*e3741db5df5ea4ebca552159de4cb414*6c1ec0bc1516b5f3a4477807e6ef81989df76a5bad83ca606dfc33cc5bdcf066", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "$office$*2013*100000*256*16*717e57a7aaa7e3f63c13eb232174e681*c6fe1b387265015b182ded15c3e2cb61*2b5e27d06a2496123d4f81e6dca53b77aecfd6fc195eeed9399f24a623ab5143", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "$office$*2013*100000*256*16*84e3072ac10d12b07df39db137414f0e*74ec5edbc06aea03a43f3cfdf29b92e0*ab61fd079c93801f03a2e9c2882d6f0379ef6ef7cd79522e46eafa2e1189ba40", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "$office$*2013*100000*256*16*9cc3c0f374a78b8cddfaa35598f970e7*3fcd2133e50e86f21fda45d8566804f2*071921bef2aacd2b764d660193f41b245c1b84488703ee1257767b2c302ce73e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "$office$*2013*100000*256*16*b9695c54d7d4ac583c4da3b8cc5035bf*dbe3faf3a649f16fae054ba8041ad36c*f49f3608a3176527c9e0aad9becd39e730b36c9eb0b0808fc9fb7dcfd1f98227", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "$office$*2013*100000*256*16*dbdbf3f87c33f43edde3d09fe9ca98e2*f74cbd3ccb465506b1f94f7afbe5faa3*89a8c6920c6427e2e6d3a6ccbcad2f85f603d30a92f5c68ba7c5be20b7ab4028", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "$office$*2013*100000*256*16*eaeff56d33cf3a1190e6c3baaf37f42d*3ad6ad0f63f71bf338b355eafda60c4d*0e20e957ca9667bb06a6fe7f34e222f827b624405d19ba577313aa124074f846", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "$office$*2013*100000*256*16*03467a674edddf8a996533ef53916d68*94505211445b360d93cb83e5552cb160*da5b9b348dfcd7f6eedd06670d5e254567845d17b7195169fb051ce16054e45a", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "$office$*2013*100000*256*16*b35a2225089b53a80228c8cce279663a*c5f9e10597712e4a236dab70857194f9*da84360c7bb44620b724ef88388dc7fbe1be469df895921ec1f2b7e39e24d5ee", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - } - ], - "sandbox_verdicts": [ - { - "value": "Malware", - "count": 119, - "sandbox_name": "DAS-Security Orcas" - }, - { - "value": "Clean", - "count": 76, - "sandbox_name": "DAS-Security Orcas" - }, - { - "value": "Clean", - "count": 48, - "sandbox_name": "Zenbox" - }, - { - "value": "Malware", - "count": 47, - "sandbox_name": "C2AE" - }, - { - "value": "Malware", - "count": 34, - "sandbox_name": "Yomi Hunter" - }, - { - "value": "Clean", - "count": 33, - "sandbox_name": "OS X Sandbox" - }, - { - "value": "Malware", - "count": 31, - "sandbox_name": "Dr.Web vxCube" - }, - { - "value": "Malware", - "count": 16, - "sandbox_name": "SecneurX" - }, - { - "value": "Malware", - "count": 16, - "sandbox_name": "Zenbox" - }, - { - "value": "Ransom", - "count": 14, - "sandbox_name": "Zenbox" - }, - { - "value": "Clean", - "count": 11, - "sandbox_name": "Zenbox macOS" - }, - { - "value": "Clean", - "count": 10, - "sandbox_name": "SecneurX" - }, - { - "value": "Evader", - "count": 10, - "sandbox_name": "Zenbox" - }, - { - "value": "Malware", - "count": 8, - "sandbox_name": "DOCGuard" - }, - { - "value": "Malware", - "count": 8, - "sandbox_name": "Lastline" - }, - { - "value": "Exploit", - "count": 7, - "sandbox_name": "Dr.Web vxCube" - }, - { - "value": "Clean", - "count": 5, - "sandbox_name": "Zenbox Linux" - }, - { - "value": "Trojan", - "count": 5, - "sandbox_name": "Zenbox" - }, - { - "value": "Malware", - "count": 3, - "sandbox_name": "OS X Sandbox" - }, - { - "value": "Trojan", - "count": 3, - "sandbox_name": "OS X Sandbox" - }, - { - "value": "Clean", - "count": 3, - "sandbox_name": "Yomi Hunter" - }, - { - "value": "Trojan", - "count": 2, - "sandbox_name": "Lastline" - }, - { - "value": "Evader", - "count": 2, - "sandbox_name": "OS X Sandbox" - }, - { - "value": "Malware", - "count": 2, - "sandbox_name": "ReaQta-Hive" - }, - { - "value": "Malware", - "count": 2, - "sandbox_name": "SecondWrite" - }, - { - "value": "Trojan", - "count": 2, - "sandbox_name": "SecondWrite" - }, - { - "value": "Malware", - "count": 1, - "sandbox_name": "BitDam ATP" - }, - { - "value": "Clean", - "count": 1, - "sandbox_name": "DOCGuard" - }, - { - "value": "Ransom", - "count": 1, - "sandbox_name": "OS X Sandbox" - }, - { - "value": "Clean", - "count": 1, - "sandbox_name": "SecondWrite" - }, - { - "value": "Spreader", - "count": 1, - "sandbox_name": "VMRay" - } - ], - "signature_info_copyrights": [ - { - "value": "Copyright \u00a9 2023", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "signature_info_descriptions": [ - { - "value": "ZXing.Common", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - } - ], - "signature_info_internal_names": [ - { - "value": "ZXing.Common.dll", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - } - ], - "signature_info_original_names": [ - { - "value": "ZXing.Common.dll", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - } - ], - "signature_info_products": [ - { - "value": "ZXing.Common", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - } - ], - "symhash": [ - { - "value": "b6232aec3cbf2d707e2589e6f7a6d9d9", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "21f2fe50681644f68b65c2c39008b109", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "36ed93aa94af4542a590f50ce6fe50ae", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "3906bad88d7793cf66f227699b643d52", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "3b84cb3e259307fef7573614fe642d05", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "76c27fda2f5f7500b62e406cffdb81de", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "820d5607cd13db1a73696cd21fa75846", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "baf758c0c9e1ab94befa0e4eb5ce91a8", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "c9c2b1878ffcac432506397c5b998310", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "d0d3c332eaf76287b16a77da78114430", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "daa8f90922fba00645999a4befcaf806", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "d9a8404e0b917ecad73a13ecc574e6b1", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "006dcc6ffd67d23d98460a1e43be3cb0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "15bbb392fa72d45b42d869851f1955ba", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2db44cdee4beec4abfc67b8c1543f532", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2dd3316208f894cd311261ec59e247c4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5005f829f9355fbf0f5c8b35852daab6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cb593e14a89e9b5e6b8af978b5b53f67", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0a7c29d82c5788fad2537b77da09347c", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "4ccef98a6e90ddf0c1107cee698e3876", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "b90af07bd2259580d8364486fb2eeb28", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "dc2fc78d0ec5c9968205e7003c04274f", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "ebc537979404949455645b2cc5286947", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "fa68827cbe5748385aad3e0179076f8c", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "e999776af01852fdad0a50d52b9917e3", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "5ba8dbd0b36adecb923735f08cfc0968", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "7cf373f4df5c6f087db17254a23260e9", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - } - ], - "trusted_verdict_filenames": [ - { - "value": "Lzma.dll.config", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - } - ], - "rich_pe_header_hash": [ - { - "value": "fd0455e92fc7bdbfcd25525e363c7582", - "count": 4, - "total_related": 5, - "prevalence": 0.8 - }, - { - "value": "adfcdffa1a8040dc09564330361c3af4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "c164cf512c87abcda41618e279b4c30b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "dddb608e4fe0af52bc3989321090b4ac", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "84f6499eb66496adac387d02573ae890", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - } - ], - "popular_threat_category": [ - { - "value": "trojan", - "count": 534 - }, - { - "value": "downloader", - "count": 432 - }, - { - "value": "dropper", - "count": 26 - } - ], - "popular_threat_name": [ - { - "value": "winlnk", - "count": 177 - }, - { - "value": "nukesped", - "count": 163 - }, - { - "value": "nioc", - "count": 127 - } - ], - "suggested_threat_label": "trojan.winlnk/nukesped", - "attack_techniques": [ - { - "value": "T1497.003", - "count": 41, - "total_related": 94867, - "prevalence": 0.0004321840049753866 - }, - { - "value": "T1218.005", - "count": 30, - "total_related": 13070, - "prevalence": 0.0022953328232593728 - }, - { - "value": "T1546.006", - "count": 5, - "total_related": 90645, - "prevalence": 5.516024049864857e-05 - }, - { - "value": "T1036.001", - "count": 5, - "total_related": 94548, - "prevalence": 5.2883191606379826e-05 - }, - { - "value": "T1559.002", - "count": 4, - "total_related": 36154, - "prevalence": 0.00011063782707307629 - }, - { - "value": "T1546.001", - "count": 4, - "total_related": 41765, - "prevalence": 9.577397342272237e-05 - }, - { - "value": "T1059.002", - "count": 3, - "total_related": 38062, - "prevalence": 7.88187693762808e-05 - }, - { - "value": "T1550.004", - "count": 3, - "total_related": 39676, - "prevalence": 7.561246093356185e-05 - }, - { - "value": "T1574.008", - "count": 2, - "total_related": 3881, - "prevalence": 0.000515331100231899 - }, - { - "value": "T1543.004", - "count": 2, - "total_related": 23807, - "prevalence": 8.400890494392406e-05 - }, - { - "value": "T1543.001", - "count": 2, - "total_related": 51219, - "prevalence": 3.904800952771433e-05 - }, - { - "value": "T1078", - "count": 2, - "total_related": 70752, - "prevalence": 2.8267752148349163e-05 - }, - { - "value": "T1553.004", - "count": 2, - "total_related": 87567, - "prevalence": 2.2839654207635296e-05 - }, - { - "value": "T1036.003", - "count": 1, - "total_related": 4903, - "prevalence": 0.00020395676116663266 - }, - { - "value": "T1569.001", - "count": 1, - "total_related": 19350, - "prevalence": 5.167958656330749e-05 - }, - { - "value": "T1022", - "count": 1, - "total_related": 42759, - "prevalence": 2.3386889309852897e-05 - }, - { - "value": "T1082", - "count": 91, - "total_related": 100000, - "prevalence": 0.00091 - }, - { - "value": "T1036", - "count": 75, - "total_related": 100000, - "prevalence": 0.00075 - }, - { - "value": "T1114", - "count": 55, - "total_related": 100000, - "prevalence": 0.00055 - }, - { - "value": "T1071", - "count": 54, - "total_related": 100000, - "prevalence": 0.00054 - }, - { - "value": "T1573", - "count": 47, - "total_related": 100000, - "prevalence": 0.00047 - }, - { - "value": "T1518", - "count": 45, - "total_related": 100000, - "prevalence": 0.00045 - }, - { - "value": "T1095", - "count": 43, - "total_related": 100000, - "prevalence": 0.00043 - }, - { - "value": "T1083", - "count": 36, - "total_related": 100000, - "prevalence": 0.00036 - }, - { - "value": "T1120", - "count": 27, - "total_related": 100000, - "prevalence": 0.00027 - }, - { - "value": "T1518.001", - "count": 27, - "total_related": 100000, - "prevalence": 0.00027 - }, - { - "value": "T1018", - "count": 26, - "total_related": 100000, - "prevalence": 0.00026 - }, - { - "value": "T1057", - "count": 26, - "total_related": 100000, - "prevalence": 0.00026 - }, - { - "value": "T1055", - "count": 24, - "total_related": 100000, - "prevalence": 0.00024 - }, - { - "value": "T1564.001", - "count": 18, - "total_related": 100000, - "prevalence": 0.00018 - }, - { - "value": "T1564.003", - "count": 17, - "total_related": 100000, - "prevalence": 0.00017 - }, - { - "value": "T1064", - "count": 16, - "total_related": 100000, - "prevalence": 0.00016 - }, - { - "value": "T1005", - "count": 14, - "total_related": 100000, - "prevalence": 0.00014 - }, - { - "value": "T1012", - "count": 14, - "total_related": 100000, - "prevalence": 0.00014 - }, - { - "value": "T1070.006", - "count": 14, - "total_related": 100000, - "prevalence": 0.00014 - }, - { - "value": "T1497", - "count": 13, - "total_related": 100000, - "prevalence": 0.00013 - }, - { - "value": "T1059", - "count": 12, - "total_related": 100000, - "prevalence": 0.00012 - }, - { - "value": "T1106", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "T1203", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "T1027", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": "T1553.002", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": "T1574.002", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": "T1564", - "count": 8, - "total_related": 100000, - "prevalence": 8e-05 - }, - { - "value": "T1070.004", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "T1218.011", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "T1562.001", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "T1129", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "T1010", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "T1221", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "T1222", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "T1539", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "T1547.011", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "T1614.001", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "T1055.011", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "T1105", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "T1548", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "T1566.002", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "T1571", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "T1048", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "T1070", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "T1071.001", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "T1140", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "T1202", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "T1543.003", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "T1569.002", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "T1622", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "T1003", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "T1036.005", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "T1124", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "T1218", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "T1485", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "T1547.001", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "T1562", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "T1014", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "T1016", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "T1027.005", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "T1033", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "T1046", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "T1047", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "T1056", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "T1059.001", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "T1089", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "T1091", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "T1158", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "T1185", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "T1189", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "T1496", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "T1542", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "T1542.003", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "T1543.002", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "T1552", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "T1552.001", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "T1555", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "T1555.003", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "T1559.001", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "T1560", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "T1565", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "malware_config_family_name": [ - { - "value": "sparkrat", - "count": 1, - "total_related": 386, - "prevalence": 0.0025906735751295338 - } - ], - "malware_config_c2_url": [ - { - "value": "http://51.79.133.76:8000/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - } - ], - "malware_config_host_port": [ - { - "value": "51.79.133.76:8000", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - } - ], - "memory_pattern_urls": [ - { - "value": "http://buy2x.com/OcMySY5QNkY/ABcTDInKWw/4SqSYtx+/EKfP7saoiP/BcA==", - "count": 9, - "total_related": 11, - "prevalence": 0.8181818181818182 - }, - { - "value": "https://docs.rs/tauri/1/tauri/scope/struct.IpcScope.html", - "count": 7, - "total_related": 13622, - "prevalence": 0.0005138746145940391 - }, - { - "value": "https://tauri.app/v1/api/config/", - "count": 7, - "total_related": 13952, - "prevalence": 0.0005017201834862386 - }, - { - "value": "https://tauri.app/docs/api/config", - "count": 7, - "total_related": 15984, - "prevalence": 0.00043793793793793793 - }, - { - "value": "https://github.com/tauri-apps/tauri/issues/8306", - "count": 7, - "total_related": 17830, - "prevalence": 0.0003925967470555244 - }, - { - "value": "https://github.com/tauri-apps/tauri/issues/2549", - "count": 7, - "total_related": 21821, - "prevalence": 0.00032079189771321205 - }, - { - "value": "http://matuaner.com/kgtjixwidu", - "count": 5, - "total_related": 6, - "prevalence": 0.8333333333333334 - }, - { - "value": "http://matuaner.com/kgtjixwiduCould", - "count": 5, - "total_related": 6, - "prevalence": 0.8333333333333334 - }, - { - "value": "https://substrate.office.com/search/api/v2/init", - "count": 4, - "total_related": 68758, - "prevalence": 5.81750487216033e-05 - }, - { - "value": "https://outlook.office.com/", - "count": 4, - "total_related": 85838, - "prevalence": 4.659940818751602e-05 - }, - { - "value": "https://docs.rs/getrandom", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "http://weather.service.msn.com/data.aspx", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://analysis.windows.net/powerbi/api", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://apc.learningtools.onenote.com/learningtoolsapi/v2.0/getfreeformspeech", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://api.aadrm.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://api.addins.omex.office.net/api/addins/search", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://api.addins.omex.office.net/appinfo/query", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://api.addins.store.officeppe.com/addinstemplate", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://api.diagnosticssdf.office.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://api.diagnosticssdf.office.com/v2/feedback", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://api.microsoftstream.com/api/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://api.office.net/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://api.powerbi.com/v1.0/myorg/groups", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://apis.live.net/v5.0/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://asgsmsproxyapi.azurewebsites.net/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://autodiscover-s.outlook.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://autodiscover-s.outlook.com/autodiscover/autodiscover.xml", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://clients.config.office.net/user/v1.0/ios", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://clients.config.office.net/user/v1.0/tenantassociationkey", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://cloudfiles.onenote.com/upload.aspx", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://consent.config.office.com/consentcheckin/v1.0/consents", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://cortana.ai/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://cr.office.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://d.docs.live.net/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://dataservice.o365filtering.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://dataservice.protection.outlook.com/PsorWebService/v1/ClientSyncFile/MipPolicies", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://dev.virtualearth.net/REST/V1/GeospatialEndpoint/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://dev0-api.acompli.net/autodetect", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://entitlement.diagnosticssdf.office.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://eur.learningtools.onenote.com/learningtoolsapi/v2.0/getfreeformspeech", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://globaldisco.crm.dynamics.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://graph.ppe.windows.net/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://graph.windows.net/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://incidents.diagnostics.office.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://incidents.diagnosticssdf.office.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://insertmedia.bing.office.net/images/hosted?host=office&adlt=strict&hostType=Immersive", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://insertmedia.bing.office.net/images/officeonlinecontent/browse?cp=Flickr", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://insertmedia.bing.office.net/odc/insertmedia", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://learningtools.onenote.com/learningtoolsapi/v2.0/Getvoices", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://login.microsoftonline.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47/oauth2/authorize", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://lookup.onenote.com/lookup/geolocation/v1", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://make.powerautomate.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://management.azure.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://messaging.engagement.office.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://messaging.lifecycle.office.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://my.microsoftpersonalcontent.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://nam.learningtools.onenote.com/learningtoolsapi/v2.0/getfreeformspeech", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://ofcrecsvcapi-int.azurewebsites.net/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://officeci.azurewebsites.net/api/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://officemobile.uservoice.com/forums/929800-office-app-ios-and-ipad-asks", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://officesetup.getmicrosoftkey.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://onedrive.live.com/about/download/?windows10SyncClientInstalled=false", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://outlook.office.com/autosuggest/api/v1/init?cvid=", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://outlook.office365.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://outlook.office365.com/api/v1.0/me/Activities", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://outlook.office365.com/autodiscover/autodiscover.json", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://outlook.office365.com/connectors", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://pf.directory.live.com/profile/mine/System.ShortCircuitProfile.json", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://portal.office.com/account/?ref=ClientMeControl", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://powerlift-frontdesk.acompli.net/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://powerlift.acompli.net/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://powerpoint.uservoice.com/forums/288952-powerpoint-for-ipad-iphone-ios", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://prod-global-autodetect.acompli.net/autodetect", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://pushchannel.1drv.ms/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://res.getmicrosoftkey.com/api/redemptionevents", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://rpsticket.partnerservices.getmicrosoftkey.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://shell.suite.office.com:1443/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://sr.outlook.office.net/ws/speech/recognize/assistant/work", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://store.office.cn/addinstemplate", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://substrate.office.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://syncservice.protection.outlook.com/PolicySync/PolicySync.svc/SyncFile", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://useraudit.o365auditrealtimeingestion.manage.office.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://web.microsoftstream.com/video/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://webdir.online.lync.com/autodiscover/autodiscoverservice.svc/root/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://word.uservoice.com/forums/304948-word-for-ipad-iphone-ios", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://www.odwebp.svc.ms/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://www.yammer.com/", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "https://clients.config.office.net/c2r/v1.0/DeltaAdvisory", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "https://clients.config.office.net/user/v1.0/android/policies", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "https://edge.skype.com/registrar/prod", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "https://edge.skype.com/rps", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "https://entitlement.diagnostics.office.com/", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "https://ic3.teams.office.com/", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "https://messagebroker.mobile.m365.svc.cloud.microsoft/", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "https://officepyservice.office.net/service.functionality", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "https://otelrules.svc.static.microsoft/", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "https://pf.directory.live.com/profile/mine/WLX.Profiles.IC.json", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "https://safelinks.protection.outlook.com/api/GetPolicy", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "https://tasks.office.com/", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - } - ], - "attack_tactics": [ - { - "value": "TA0007", - "count": 948 - }, - { - "value": "TA0005", - "count": 697 - }, - { - "value": "TA0011", - "count": 289 - }, - { - "value": "TA0002", - "count": 176 - }, - { - "value": "TA0009", - "count": 155 - }, - { - "value": "TA0004", - "count": 128 - }, - { - "value": "TA0003", - "count": 62 - }, - { - "value": "TA0006", - "count": 24 - }, - { - "value": "TA0008", - "count": 14 - }, - { - "value": "TA0040", - "count": 13 - }, - { - "value": "TA0010", - "count": 11 - }, - { - "value": "TA0001", - "count": 4 - } - ], - "parent_contacted_domains": [ - { - "value": "bitly.com", - "count": 11, - "total_related": 15378, - "prevalence": 0.000715307582260372 - }, - { - "value": "lencr.org", - "count": 101, - "total_related": 650425, - "prevalence": 0.00015528308413729485 - }, - { - "value": "googlesheet.info", - "count": 12, - "total_related": 22, - "prevalence": 0.5454545454545454 - }, - { - "value": "fclouddown.co", - "count": 8, - "total_related": 19, - "prevalence": 0.42105263157894735 - }, - { - "value": "googleapis.com", - "count": 19, - "total_related": 308250, - "prevalence": 6.16382806163828e-05 - }, - { - "value": "commoncome.online", - "count": 8, - "total_related": 12, - "prevalence": 0.6666666666666666 - }, - { - "value": "googlesheetpage.org", - "count": 4, - "total_related": 7, - "prevalence": 0.5714285714285714 - }, - { - "value": "1drvmicrosoft.com", - "count": 6, - "total_related": 10, - "prevalence": 0.6 - }, - { - "value": "azureword.com", - "count": 4, - "total_related": 8, - "prevalence": 0.5 - }, - { - "value": "104.in-addr.arpa", - "count": 6, - "total_related": 141830, - "prevalence": 4.2304166960445605e-05 - }, - { - "value": "venturelabo.co", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "datacentre.center", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "149.in-addr.arpa", - "count": 3, - "total_related": 8, - "prevalence": 0.375 - }, - { - "value": "bloomcloud.org", - "count": 3, - "total_related": 14, - "prevalence": 0.21428571428571427 - }, - { - "value": "67.in-addr.arpa", - "count": 3, - "total_related": 453, - "prevalence": 0.006622516556291391 - }, - { - "value": "letsencrypt.org", - "count": 9, - "total_related": 204282, - "prevalence": 4.405674508767292e-05 - }, - { - "value": "52.in-addr.arpa", - "count": 5, - "total_related": 89476, - "prevalence": 5.588090661182887e-05 - }, - { - "value": "23.in-addr.arpa", - "count": 3, - "total_related": 34765, - "prevalence": 8.629368617862792e-05 - }, - { - "value": "apple-dns.net", - "count": 15, - "total_related": 251318, - "prevalence": 5.968533889335424e-05 - }, - { - "value": "87.in-addr.arpa", - "count": 2, - "total_related": 58007, - "prevalence": 3.447859741065733e-05 - }, - { - "value": "20.in-addr.arpa", - "count": 8, - "total_related": 258859, - "prevalence": 3.090485553911589e-05 - }, - { - "value": "13.in-addr.arpa", - "count": 4, - "total_related": 123980, - "prevalence": 3.2263268269075654e-05 - }, - { - "value": "40.in-addr.arpa", - "count": 2, - "total_related": 71854, - "prevalence": 2.7834219389317228e-05 - }, - { - "value": "bit.ly", - "count": 44, - "total_related": 100000, - "prevalence": 0.00044 - }, - { - "value": "identrust.com", - "count": 60, - "total_related": 500000, - "prevalence": 0.00012 - }, - { - "value": "windowsupdate.com", - "count": 67, - "total_related": 400000, - "prevalence": 0.0001675 - }, - { - "value": "apple-cloudkit.com", - "count": 16, - "total_related": 100000, - "prevalence": 0.00016 - }, - { - "value": "llnwi.net", - "count": 18, - "total_related": 200000, - "prevalence": 9e-05 - }, - { - "value": "gstatic.com", - "count": 39, - "total_related": 400000, - "prevalence": 9.75e-05 - }, - { - "value": "bing.com", - "count": 18, - "total_related": 200000, - "prevalence": 9e-05 - }, - { - "value": "live.com", - "count": 14, - "total_related": 200000, - "prevalence": 7e-05 - }, - { - "value": "adobe.com", - "count": 27, - "total_related": 500000, - "prevalence": 5.4e-05 - }, - { - "value": "apple.news", - "count": 8, - "total_related": 100000, - "prevalence": 8e-05 - }, - { - "value": "akamaized.net", - "count": 8, - "total_related": 100000, - "prevalence": 8e-05 - }, - { - "value": "msn.com", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "googleusercontent.com", - "count": 12, - "total_related": 200000, - "prevalence": 6e-05 - }, - { - "value": "msidentity.com", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "msftncsi.com", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "icloud.com", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "microsoft.com", - "count": 12, - "total_related": 200000, - "prevalence": 6e-05 - }, - { - "value": "adobe.io", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "yahoo.com", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "digicert.com", - "count": 10, - "total_related": 200000, - "prevalence": 5e-05 - }, - { - "value": "phicdn.net", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "windows.com", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "95.in-addr.arpa", - "count": 7, - "total_related": 200000, - "prevalence": 3.5e-05 - }, - { - "value": "gvt1.com", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "bootstrapcdn.com", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "pki.goog", - "count": 7, - "total_related": 200000, - "prevalence": 3.5e-05 - }, - { - "value": "168.in-addr.arpa", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "mzstatic.com", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "trafficmanager.net", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "nsatc.net", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "icloud-content.com", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "amazonaws.com", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "google-analytics.com", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - } - ] - }, - "ip_addresses": { - "attributions": [ - { - "value": "cobaltstrike", - "count": 3, - "total_related": 44583, - "prevalence": 6.729022273063724e-05 - }, - { - "value": "danabot", - "count": 2, - "total_related": 686, - "prevalence": 0.0029154518950437317 - }, - { - "value": "beacon", - "count": 2, - "total_related": 30228, - "prevalence": 6.616382162233691e-05 - }, - { - "value": "kandykorn", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "powerhouse", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "faketreff", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "imminentmonitor", - "count": 1, - "total_related": 28, - "prevalence": 0.03571428571428571 - }, - { - "value": "iceball", - "count": 1, - "total_related": 51, - "prevalence": 0.0196078431372549 - }, - { - "value": "sparkrat", - "count": 1, - "total_related": 93, - "prevalence": 0.010752688172043012 - }, - { - "value": "systembc_v2", - "count": 1, - "total_related": 329, - "prevalence": 0.00303951367781155 - }, - { - "value": "systembc", - "count": 1, - "total_related": 578, - "prevalence": 0.0017301038062283738 - }, - { - "value": "hydra", - "count": 1, - "total_related": 1002, - "prevalence": 0.000998003992015968 - }, - { - "value": "shellsting", - "count": 1, - "total_related": 3106, - "prevalence": 0.0003219575016097875 - } - ], - "communicating_files": [ - { - "value": "60674602836323647634016774ea123232160c1b4dfcf3fcd2d2c28c652aa00e", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "353f82475fcfad5b3f06ed85a931bda46ec34279793b5d70085aa8c603e8ebec", - "count": 2, - "total_related": 9, - "prevalence": 0.2222222222222222 - }, - { - "value": "52e9361cfec3bc643f5ac715709e1818766e1790c7f83e93e3ee7cc96fd1a473", - "count": 2, - "total_related": 10, - "prevalence": 0.2 - }, - { - "value": "689ea0e58022b86655596c946591a5b99b051f96e5cb0b0fd60dea302bbf91d2", - "count": 2, - "total_related": 13, - "prevalence": 0.15384615384615385 - }, - { - "value": "a08d97cb6da1eeb2223e8d3d243e7a830b6b081a6e08f2a2b1ab2cee354259a4", - "count": 2, - "total_related": 19, - "prevalence": 0.10526315789473684 - }, - { - "value": "1b93ae0ea729f6cf0ce33fddbfc163265fd0132a3e452883cc2cdfb3b059d836", - "count": 2, - "total_related": 23, - "prevalence": 0.08695652173913043 - }, - { - "value": "000100a845e6c239bca93fa611b83e531d844409fd2df6ca4e351cd8cdd6f65f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0004788b61e5ed5399d3873b53813772a10478d4ae1116452b63ca41b120f94a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0006aeb2a44c1a03e6ceba9a08162c0f9f741cecce4a2d7b2fcf42524dfc89ae", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "000d8b449f1f47aeff8d9dfe54a3d828f2f60de1894de0b89967ba6d06693faf", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "000e1acc9696d12337cb9b5c7a94b2cc7700b1fed267061a6cc3e863b09f4937", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0020b517dae0f5d024d465f21511a39ebabcb996c2d4af49fe73432da07df73c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0020f7dcf3bc18efedf5637a2279ad1cd74f6ba854fa5fc5d4217a159d54b110", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0021a762a492875be3b0a8ce93acb0914d0750e9d78532fb5c5509c4c7b23da1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0021d5d631ef964d699d2c806cb89612ac0df44000b67d21e148ff6acfec3c73", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "00223bad5347d0d7f5e27798e140f39f4d9e0efd557a9db179a1e4f51a061c7b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0022631ac796e54356e2953b0dbc23ed5a88dd3b97282a1778369f44a7a26498", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "002461bb0d96425a0b9ff423be700b98c5721d51aefbcd8bc8000802f0cb598c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "000ce586746d8ceb5efe9317b200b83ddd5ba2cbf78479da553f435b05182187", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "00129734c3fa67f8cb4d83cf79ebd434f3b16ea318864e0a4f3ac9da3b725139", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "0015ef259d4a469f98851b4cb8c5b520317ea59be11268c394d9b9caf49e70a1", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "0020cf25eb5998bcdad6cff3609a8bb3c61d0fe1da6c6a4f48b269a462a1b87b", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "00239cb2dffb54d1b733a83802fbee1cfcdb89d33b3a647cb9c9a983530ec0b2", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "002409e6f945f47d3289e449777daca260d5534f9e844c84559ee49affc6957b", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "000081af3d55a76378a162620f4744b2e58546791c2a4c7b67779f17e7a5182b", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "00021255935930edb3507b1db6db1f7b1af7d7ef2a42699304e54c36e47f1d0d", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "00051b082d4d95d6215fee67d97aee75c91bedf119479f314b24107c7e57c59a", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "0005da96ea5ed90407ad1d9a4104c28bc3b12c2edf65012ff8c850998a4d8079", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "000686912d316f6fcb514f1abdd98b0fb0cf37768feaee429d23c5c6fafe55b8", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "000aa5ad06675d8bc59738c0955c424152b48d460fa625b54092f563415abdb3", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "000d631b4f8232e1444027deebb30d869776399ce1f33a2e3d948aea4a1a5d4d", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "000d80f36d83465b1cbc1adb8c4d3dfb051ea1f7af83cbd38f4fe88286d99732", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "000fc04f0a989b2c2161389fe9987970e21973a09cf89ebcc753e5b67759c8f6", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "0011b5225551b1ab5ab6a173479d01fc74e37ff167ff4e49895b99921ea7a23e", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "00120e5befa7c0efb5ead82da01d69c95f86c21864d24fabf41c8d0151cd4a27", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "001264966a4414d31472d35ff9c070aa3808f012b4cc2b700e22c90376477c58", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "00129a8585697fa60e1e5a7693281f9fd5743b58de1b3290a66775fcf2fa8a1e", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "00130627c3ec9e3b8f04c5e5b07e254049c233299251e41a62838ec91bde8795", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "001603fd33fac3ec871e5149772f8ef6847ebdbfb665ea00556e21352a7f31ae", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "0016255cae49594bfb84b6ab4b5be455af761a4b7f92c34f94da98684639d129", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "0018c74fbb9c43218ebf0c9be420069e669165181faa86f7e659dc4c075df795", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "00196222948fcf9bc5ef8036c2bc645a84b360b42d39b2fc41e99fad6646e034", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "0019c79d05de8bf4eebcff987a485766e831e5cc3d9a49c4cfa3e185a6bbd91a", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "001cd745465262e5fa339db59f4c8505cf0a4070365caae781459576362223c0", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "001dd0e4378df70e58381fa5ae8173b7de3271b0f2f240cc4f98ad502cee2204", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "001fcf08d27b003e3bc37b3c81aa7ac8690f39a70140b4d45dfe16ccbae0e7a2", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "00201a610784fd1e529312a7ea3e0bac654a73773883c4e60e3e580bc8958eae", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "0020cd01c5037cf53a5cbfd2c101877dfaa66c7fc28f3c2f1ef2dd43fde9d140", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "0021130646f54ca4446a39b2084312d42a433591ea95f431e18495e0fa0539b6", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "0021d2bdf206f8e9cba5c52b6955d5e59830bc73cedefa210df0337e9f8032c4", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "002473b58e968815928c8af5eabfdefee1c34b513f42a860af382874d4da8268", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "000e4e8fc9365a0723bb71b80f8a2e3e9bd21ec1db1b12a4320afed4021ead45", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "000f4e8d5bffe766e7de0a1f9ef23b052d212a49598268119ed58f9622cf90d4", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "0010b836d6af62b0c6cd22c7503029f2fa04b0555b8df887494939f5f1d38de1", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "001426d18ef1afe173da689ba1fd9abaf365caa1d4745ece51d15ded81f3e3fc", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "000accc73f47ca73fd0ec1582fa748b9fec1867fc20005be577aa424f5ad6e9e", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "001a7c4aac33dca7f296f32e62335e729743f509dfad08161640199fec732bc9", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "00014f9f168b780fc51e2746ffa5fe577b9c0a6fdc555cf6a544484856da7511", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "00070a3b71cd3f36c7c73ceeec7facc3f184d4eeba6af2cd8cf91eb51d6b52f5", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "000966a79a01accef8fdca28a025fbe25d0d6841eea2319ece15c2e509dc474d", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "000ee20e300a7a39f330da32a6e8cf958f046687f0eba006aad01972cf752987", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "001493f2a4c4c9d4ed0925a63feeb7f38cdacb8248897f98eca3ee7ed10671b2", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "00189f9d00fbbca25950fc0ff99a08f6fd6ef386b6645631a0dbb56480fdbb8c", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "001d26aa1c362541132da716add5526b50cf5fdb77754b0bb7b84ebe84fac6b6", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "00013023fe98842bc7d4db58386ef98c33fca7aafab2efb8067b262f8d1a6160", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "00022d73cc684a1db747f874cdf753d90bb8339113716e35b57326ec5ddd2b66", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "0006d1823541901c566a3f6644aabe255021163ccbf11763ce957602c3a1cfb0", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "000a3ac8c283c8a9bf752ba2a90a7d0272af659030d9a42a36ffb64c948a5dda", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "0000ecf51e8a2bc56dad7c8c3d11cb86191e10f574de355bea703e0446641989", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "0009cffe07820024989335545eba72e045ea3717d7015d374750e6c817128a89", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "0013a7ccf744679b7c28731d275b0bc13ac68b99ef88b4a716a32881ec75a0df", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "001dc5947d610ab54dee089fcd2f7622e4274ccb0d7fdb4266a36b191a1c798b", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "0003bf5f14db144ca9303a94491ca423fe5c6c8ceddfaa9b35a437c0996479a1", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "0003f5ed7b62098980620987f051915165191bf9b969f00495b1fc80c06e2ecc", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "0005988fbc9ef1f288d782daa451b8927fa14910261721fa060d1bc7ad8752e2", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "0011618804d0e88f2f5d639d2733684854276e147961b4f92ef569fbb2fb2409", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "001a5e18f706f1e02f9ba5524fe279c063a30d48d7578f23f26b785b2c964127", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "0023cf59da0325892039ec7ed152345b53a8223ee65e8abbadc3bc75ce5d0a42", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "000d03ce035bbc77fedd5246ab69e65c243c579bb1c8cf6dc75c5fb4ec9766e6", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "00088baf6ba2f0447aa4881eac5650c6649d75d19d9b86e1b28425280bd6001e", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "001625560c5e829baf68dadfd7c3eb180f48de139ede9ddf1cb35b2cc1ae5be2", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - }, - { - "value": "00002efd61168dc25633e201af2838cdff85ca65bcfffab1d0e114b392153c38", - "count": 1, - "total_related": 15, - "prevalence": 0.06666666666666667 - }, - { - "value": "001d8053bfc5d9d24785010811c072973777562b2b667467e6ba30451cb66e9a", - "count": 1, - "total_related": 16, - "prevalence": 0.0625 - }, - { - "value": "00110954ba39a36d7b84f1db2ab1368ee9184c1c9fa555505d0c2123538f5283", - "count": 1, - "total_related": 19, - "prevalence": 0.05263157894736842 - }, - { - "value": "00067be1e5e4610d286b3935976d64ec1bad9636d37cf34e622c97267d933f1f", - "count": 1, - "total_related": 23, - "prevalence": 0.043478260869565216 - }, - { - "value": "00217a0033bc94dc9d2b2057d117ad4e1e5882bc08a2d4739daf44f033284a9c", - "count": 1, - "total_related": 24, - "prevalence": 0.041666666666666664 - }, - { - "value": "000f24d0bc57db59db6ce0c028087d62226d3f791421bc22d2b9be1174a2f38f", - "count": 1, - "total_related": 28, - "prevalence": 0.03571428571428571 - }, - { - "value": "000a4f2d41c6fb81aecd49b508f6a21b1d90cdae1cca15c386b09ae8e49a805c", - "count": 1, - "total_related": 30, - "prevalence": 0.03333333333333333 - }, - { - "value": "001a66d68db79e1f7288d2550bf0fca1efa778a2d93bf17d60644bd2cd658449", - "count": 1, - "total_related": 32, - "prevalence": 0.03125 - }, - { - "value": "001c338533b60d1aa05f5ce11b1b441c2f3ebd791dff486b0fd3055c180461bd", - "count": 1, - "total_related": 42, - "prevalence": 0.023809523809523808 - }, - { - "value": "00118f96aac0bf3a5b09d065fe99a0e50a47cb58a3fc59a89d3f5c462b03bb12", - "count": 1, - "total_related": 52, - "prevalence": 0.019230769230769232 - }, - { - "value": "0008172e7e6fea55a4a4bf1eb017c8c2cb1581d316b47a3f3695374097f4504d", - "count": 1, - "total_related": 53, - "prevalence": 0.018867924528301886 - }, - { - "value": "000323c9281081eae3b0fa5abe94dce5e515f330abec382b6b966c25ec94a260", - "count": 1, - "total_related": 55, - "prevalence": 0.01818181818181818 - }, - { - "value": "001831e9dce8c794aaaf3c05ff16906fe9d66fe73ffac6c6af79ed20747bd0b4", - "count": 1, - "total_related": 55, - "prevalence": 0.01818181818181818 - }, - { - "value": "001061ca3c21ab314e01c01d6338023415f21e5ff9c18ef8de8ec2a98927c99e", - "count": 1, - "total_related": 64, - "prevalence": 0.015625 - }, - { - "value": "001150a1f4062ef1fc0605506dc42ef4da39f29ef61947a24ca837fa0bd7b507", - "count": 1, - "total_related": 64, - "prevalence": 0.015625 - }, - { - "value": "0008d173c7acdee23a6254053eab21d46a849289948f2835103748f4f57c82f2", - "count": 1, - "total_related": 67, - "prevalence": 0.014925373134328358 - }, - { - "value": "000f6f8d3ff60cb3ecf29fa5489c739868c6af9eb8f9f1fe1af7ffd97488d807", - "count": 1, - "total_related": 72, - "prevalence": 0.013888888888888888 - }, - { - "value": "0007d7efb96823f382bc2e8429801cc61a647fc18c3c091988bf7e7e07b30f5c", - "count": 1, - "total_related": 74, - "prevalence": 0.013513513513513514 - }, - { - "value": "000e4b0e9c5397216630fdc0fa747eda9665e48635649acb3ed3ab9b02c4b62c", - "count": 1, - "total_related": 78, - "prevalence": 0.01282051282051282 - } - ], - "downloaded_files": [ - { - "value": "6419f11e727f620019c38b901d0239e077a1820247a3429386c65474e0b6f605", - "count": 8, - "total_related": 8, - "prevalence": 1.0 - }, - { - "value": "63a6580d9ee8d5a632886585ab8f7ab59c87d4e2717181c191cac236cd1e1de4", - "count": 5, - "total_related": 5, - "prevalence": 1.0 - }, - { - "value": "e1b08ef93178fd96fc2ae4f1998f441bf73b105a3fb62a9bf19dae4d55a2b9b2", - "count": 5, - "total_related": 5, - "prevalence": 1.0 - }, - { - "value": "b0893b6c9225a4291ffc5cd7164a96304aed135dfd40763b4fedc970bf0abe3d", - "count": 5, - "total_related": 28674, - "prevalence": 0.00017437399734951525 - }, - { - "value": "1f1851ea45175dfd9490310acd822fa980c2d766aa5701e7a44231d686b3bf3f", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "4f1987847e23e9c9debb64481372b00fb0194a615154a7f87d2ac992dac70306", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "dd49af65cd3c902f4d2acc8da2fc61a558dc1b2c11ba8876cb734d6768c295f9", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "994e4d9bacbacb4ff7621c7f2b2abf8900994212bb808b08f7b41b1ac29c30e2", - "count": 3, - "total_related": 1463, - "prevalence": 0.002050580997949419 - }, - { - "value": "0f3a07f36d6bddee418f7d7548bc165b09817e10764a359d2773388cdec9ff8a", - "count": 3, - "total_related": 9847, - "prevalence": 0.00030466131816796996 - }, - { - "value": "6faef4d5d777fdcaa653766b0ac8b9ed32d0fd87f7dcd79f02ff524dd1b0eb69", - "count": 3, - "total_related": 58585, - "prevalence": 5.120764700861995e-05 - }, - { - "value": "01e6ec285041d43d097de0683d2b6830c39d7fced0de937786787dd630b1f805", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "37e75280f3ee7801b06a9ea2c72b4463de5c3fa877f08f6aaeed79815128bc8e", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "49ce3656c6db6d4af1d808e9e96fa09b57a4c9845b61be90b5d1db02cae6a2b4", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "aebe53d8cd6bd7cb29e0af6cae7df5c1e302d7cab15c714510ce151a5f658590", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "7516bd5d7d369209ec02b41dd894c357c00b197c03b05064225ae368d233e287", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "01620f6ac7699d02567f69a6a7dd7f5a6061d01e7a54b161eb59db5028e4ed72", - "count": 2, - "total_related": 32, - "prevalence": 0.0625 - }, - { - "value": "f02ae208e27a55b6eeaebfb03b2af169aa7b0fcb5c2e24dcd1d61e039771b598", - "count": 2, - "total_related": 178, - "prevalence": 0.011235955056179775 - }, - { - "value": "92213166b606712b238db29140eaaac87be277b693b020226bd5bc78478838d5", - "count": 2, - "total_related": 291, - "prevalence": 0.006872852233676976 - }, - { - "value": "4a716cf2502195ea929e153f7fb97258fa7c903bd34fe654d5c8d7caab2d7ddb", - "count": 2, - "total_related": 576, - "prevalence": 0.003472222222222222 - }, - { - "value": "a78efa0170269abc055465625747c82b51732bbf3cac05e733e9147543221712", - "count": 2, - "total_related": 1836, - "prevalence": 0.0010893246187363835 - }, - { - "value": "fe5cb372aa2fc74c4e1458045868e7d13c64ea2f48640a8e9bea6ab15a5bd9fb", - "count": 2, - "total_related": 4607, - "prevalence": 0.0004341219882787063 - }, - { - "value": "7f8c7f918148b32820b0c39f8904de975147f2a5d34a3f676298a691ae857284", - "count": 2, - "total_related": 6035, - "prevalence": 0.00033140016570008286 - }, - { - "value": "63502872fc0160f91e0bff05a1a9427a4c5c7ee4fdd9b733797cd98dead3048a", - "count": 2, - "total_related": 6348, - "prevalence": 0.000315059861373661 - }, - { - "value": "f20931e6108493a67cb20a1ca0b266f5c8c96509aa644f9d3f3d31f90c41240e", - "count": 2, - "total_related": 14130, - "prevalence": 0.00014154281670205238 - }, - { - "value": "ea8fac7c65fb589b0d53560f5251f74f9e9b243478dcb6b3ea79b5e36449c8d9", - "count": 2, - "total_related": 16413, - "prevalence": 0.00012185462742947664 - }, - { - "value": "0cd6aed5d21ae37310b3c4e0facf48009005018bf4402fbcda1cb66d69b03346", - "count": 2, - "total_related": 22059, - "prevalence": 9.066594133913595e-05 - }, - { - "value": "e1000a70177aefc85a9ce7c3f614696aee966fe020696b6bd025c16ad80d054c", - "count": 2, - "total_related": 23692, - "prevalence": 8.441668073611346e-05 - }, - { - "value": "2689367b205c16ce32ed4200942b8b8b1e262dfc70d9bc9fbc77c49699a4f1df", - "count": 2, - "total_related": 32748, - "prevalence": 6.107243190423842e-05 - }, - { - "value": "61b30d408583991fd69f3dec694e154cb652471e663328ad9c8482c9021ab5db", - "count": 2, - "total_related": 37429, - "prevalence": 5.3434502658366506e-05 - }, - { - "value": "8437bd0ef46a19c9a7c294c53e0429b40e76ebbd5fe9fd73a9025752495ddb1c", - "count": 2, - "total_related": 42220, - "prevalence": 4.737091425864519e-05 - }, - { - "value": "679e7e62b81267c93d0778083ae0fd0efe24172ff0ac581835b54165b3d9ed43", - "count": 2, - "total_related": 44264, - "prevalence": 4.518344478583047e-05 - }, - { - "value": "36a9e7f1c95b82ffb99743e0c5c4ce95d83c9a430aac59f84ef3cbfab6145068", - "count": 2, - "total_related": 72823, - "prevalence": 2.746385070650756e-05 - }, - { - "value": "258682bcb3d7d927aaf47bfe1c01788db1f0cda4bf2240001e5e7408a6f559ae", - "count": 2, - "total_related": 77670, - "prevalence": 2.5749967812540233e-05 - }, - { - "value": "008aba818b12516d975eb00121e706f6aad665c83a1fde9a25ffbdde87930d57", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0251e93999f120d31b70c2b99a45ab36785c22e7c7067b9bb32c3531efd86b2a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0693b145179a46a96e4d83fb6960425e0ec6b7dc648c9f52cf208b4da6795560", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "11a4b7da7ee10e81accae81e7fe801706ec9ad0d88d0b625975152f5559d2745", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1374c0dec51a09bdd34b994ecf0574d1c0c6e09603122dbc1a3e795265105556", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "141176af90ce5e47e574edf49e7fa8425b862e089de91bcfbd7a50729b5ff095", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "161be12352fceb9271db50a043dcfd8eb6921a7c84941a588cb1b2cb4718e8d1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1f62d02cb6b1dea4797ae1a178611948291d95043dfa77ba7d61a5a9de61e7f6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "286f33557b673af0954497fa88d61849151a56e19ee8f70fe5c712a79da4b49a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2fdf8330cc10eae856579f60e793a3d079224e9c348efe81eeccaeb377b91e78", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "31ce57628555f504952c59f3b29508737dfbb63049f1ecfc7ff5557efe3339a6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0a9b47c2df22eeb836319da8eb9875f3ebae0769ebcfac648b7d84f00e2946d7", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "15cc8a7edbd34224437701a57e4c49bcde26d315fa41d6a7e00aa63c7e35ea32", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "02a69029bf2b0c97bfb9ddbbe6e89409f1b11007a92d8ca4a6df6597b72eb453", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "3404531810304f334e2af9d829291e7ac93d5af7a82e3441e62c1f60235232e9", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "302a65df1b4e2640529d2b98d0f5b21aaa56424ea946b943fc01e1b7d625b87b", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "2bbe8a349310c215a00abc02e3244cb77c82f6b3ac64a17c72e28c9f88299c3c", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "2699e0a8dba6f3e8fbc20a5749af6c94426dd95e7257bc715d6881e1aee7f207", - "count": 1, - "total_related": 14, - "prevalence": 0.07142857142857142 - }, - { - "value": "2c042d454d75f422027cd19bb34ff93ca4ede1408b2ea97b547e9b481eb728d4", - "count": 1, - "total_related": 22, - "prevalence": 0.045454545454545456 - }, - { - "value": "2d490570a7a15948f6c0e12b9f78b789dcb5ad8b64a934a1d27211e1b73a2adc", - "count": 1, - "total_related": 29, - "prevalence": 0.034482758620689655 - }, - { - "value": "0edcdebd22038b5ec22d73fea33c560d2e796ab17177124520206107654e57cb", - "count": 1, - "total_related": 40, - "prevalence": 0.025 - }, - { - "value": "114f74dc7513187ef0d5e22f1da6ac6859e712d46622a1da04a9a8ff70266499", - "count": 1, - "total_related": 60, - "prevalence": 0.016666666666666666 - }, - { - "value": "3042c21992afb4848f6365ee63862ba3374d6549acfef14dcbd4497e73be85fe", - "count": 1, - "total_related": 116, - "prevalence": 0.008620689655172414 - }, - { - "value": "1ee01cc6701e8bfb4d21161c9e414870dbb33e9d515e4015dbb85b719d9d1efc", - "count": 1, - "total_related": 128, - "prevalence": 0.0078125 - }, - { - "value": "1065f1c9d70d2009dd4abe566364ea819577c229b297414a8d6aef43dd86b437", - "count": 1, - "total_related": 133, - "prevalence": 0.007518796992481203 - }, - { - "value": "0482701066c79013f90c02b8e7fe2a4cb8f9f59cb321165d55253baa320ffae8", - "count": 1, - "total_related": 148, - "prevalence": 0.006756756756756757 - }, - { - "value": "10c1227a1269693871f997cb9fb14b8cabe4046e82bec4aa2bf7de94b8029a34", - "count": 1, - "total_related": 161, - "prevalence": 0.006211180124223602 - }, - { - "value": "0d2a2df93b58acee67f156332bc60954e148b78c88359535b298127203466a3e", - "count": 1, - "total_related": 165, - "prevalence": 0.006060606060606061 - }, - { - "value": "29ce674e9a5cbf937750cc5c877ee6ed633a0ba70379a33f064b9c51e930af59", - "count": 1, - "total_related": 218, - "prevalence": 0.0045871559633027525 - }, - { - "value": "069bd2442733ee025eb1b7095ec527fc100d8ba4b025ad98c4ad34d9cd4a3081", - "count": 1, - "total_related": 240, - "prevalence": 0.004166666666666667 - }, - { - "value": "205235ba6ef925ba5726670c1c552c0b108f6b3daed1eefd037b6a156ecde70a", - "count": 1, - "total_related": 310, - "prevalence": 0.0032258064516129032 - }, - { - "value": "33c1c92944a084e89ac8cbfe15da3c741575cbddd50a0301b946fb6da8441a93", - "count": 1, - "total_related": 555, - "prevalence": 0.0018018018018018018 - }, - { - "value": "0cc97ae563637cf9a53f02413c9c83e0359ed845e8b8f31590940bd111de7f62", - "count": 1, - "total_related": 878, - "prevalence": 0.0011389521640091116 - }, - { - "value": "06e1f264a5379e9ec2cf182321d0df2bf36ee205187d9a38906519ef4c9dc6f1", - "count": 1, - "total_related": 910, - "prevalence": 0.001098901098901099 - }, - { - "value": "28b5becabf7acd54aceeb1bc9d8e1674e64589745e9e21b48bcf2fc64694a9b8", - "count": 1, - "total_related": 3955, - "prevalence": 0.00025284450063211124 - }, - { - "value": "185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969", - "count": 1, - "total_related": 4847, - "prevalence": 0.00020631318341242006 - }, - { - "value": "068d6b5a41c3a8e4c7b9308647179734e22a89533ac6317f43a7e29402823539", - "count": 1, - "total_related": 7515, - "prevalence": 0.0001330671989354624 - }, - { - "value": "14a6c8fc65d1762f94935d61393d70374f32d0a8acbaf9c21d243ee28333be94", - "count": 1, - "total_related": 11905, - "prevalence": 8.399832003359933e-05 - }, - { - "value": "1d04e8d3f8cea7e75beaa2a27688749050dbf6e944dc63450a6dcc948c884658", - "count": 1, - "total_related": 15216, - "prevalence": 6.572029442691903e-05 - }, - { - "value": "23d32b79f3e71e41c2eb3d8811f58f72a2b6b5eb04c0981f16f61ab009945054", - "count": 1, - "total_related": 19722, - "prevalence": 5.0704796673765336e-05 - }, - { - "value": "0bbd7f2bfcb406b811bf0a028e458ff49d3cb52e56935a030f93e206e9bfba76", - "count": 1, - "total_related": 35760, - "prevalence": 2.796420581655481e-05 - }, - { - "value": "1d08335e65da7cf40d1c4a7ba0088e0f39b9c5a4b2e42de95fc9ffa69fb96c7a", - "count": 1, - "total_related": 39232, - "prevalence": 2.5489396411092986e-05 - }, - { - "value": "340c8464c2007ce3f80682e15dfafa4180b641d53c14201b929906b7b0284d87", - "count": 1, - "total_related": 46478, - "prevalence": 2.151555574680494e-05 - }, - { - "value": "20d529ea8a9e04e621c1a8c952350dd0e5e8e2baa4ebba894e1113ae45bb5dd0", - "count": 1, - "total_related": 50923, - "prevalence": 1.9637491899534592e-05 - }, - { - "value": "29a8b2a2dbac349f919923d25af4f9162bc58c29b2daac41a56f5b25ba24276d", - "count": 1, - "total_related": 61438, - "prevalence": 1.6276571502978613e-05 - }, - { - "value": "23926e9185d8d43c02807a838ffb373cc1977726094a4e46807c66ada9dd7660", - "count": 1, - "total_related": 90062, - "prevalence": 1.1103462059470143e-05 - }, - { - "value": "b16e15764b8bc06c5c3f9f19bc8b99fa48e7894aa5a6ccdad65da49bbf564793", - "count": 21, - "total_related": 100000, - "prevalence": 0.00021 - }, - { - "value": "38ffd4972ae513a0c79a8be4573403edcd709f0f572105362b08ff50cf6de521", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "ce7127c38e30e92a021ed2bd09287713c6a923db9ffdb43f126e8965d777fbf0", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "d465172175d35d493fb1633e237700022bd849fa123164790b168b8318acb090", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "b663321ab439cc53a329ee352c1b855d9998d3af95524a05795a88b42a9acf07", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "cdf9d8eee8c4fe967fac3aa9218a7227647ae7aaaa4221c688e1aab7a9180f69", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "25fb23868ebf48348f9e438e00cb9b9d9b3a054f32482a781c762cc4f9cc6393", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "557b5e9015b4963a130c7039e077b3ec0306d401b6ee13d631721d5d969d2917", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "dc1d54dab6ec8c00f70137927504e4f222c8395f10760b6beecfcfa94e08249f", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "0b52c5338af355699530a47683420e48c7344e779d3e815ff9943cbfdc153cf2", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "32f2fa940d4b4fe19aca1e53a24e5aac29c57b7c5ee78588325b87f1b649c864", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "9ec2f0698f1c3497de39a192dd1c3f3e4506ff1a84dbf85082344297dc52e681", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "d5a89e26beae0bc03ad18a0b0d1d3d75f87c32047879d25da11970cb5c4662a3", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "2c3adc6b6fb69d3a4e7b75b64e913dc96d21dbaf436bf69e773589b6a6952c47", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "55f7d9e99b8e2d4e0e193b2f0275501e6d9c1ebd29cadbea6a0da48a8587e3e0", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "5fd55da8747d933410bb637571802aca2eedf3314039722e2b9d6f37afdad97e", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "8a482f2271a42c5f54c96e816a84340a6f2357a5b81f927d07d00788f5140a41", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "cab538fd1647961eb35348c1bd84e1fde389ad89672587d2fe3c007a0bc9e67f", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "fb47468a2cd3953c7131431991afcc6a2703f14640520102eea0a685a7e8d6de", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "urls": [ - { - "value": "http://cloudprotect.us.org/", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "http://103.130.195.170/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://103.205.179.4/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://103.205.179.4/edit", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://103.205.179.4:8080/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://103.205.179.4:8080/edit", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://103.31.249.62/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://104.112.11.55/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://104.143.146.80/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://104.156.149.130/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://104.156.149.130/OfhgAKdvDk9/nHIz5EQ3zp/YaXHtxk13S/AJaYaoyLAe/bvamQ==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://104.156.149.130/www.j-ic.co.in", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://104.156.232.106/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://104.156.253.248/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://104.168.136.24/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://104.168.137.21/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://104.168.137.213/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://104.168.137.213:8080/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://104.168.138.7/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://104.168.138.7:22/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://104.168.143.222/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://104.168.144.212/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://104.168.144.212:443/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://104.168.145.52/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://104.168.146.15/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://1driv.org/open?id=D6GApoc41tPmtlZmx71ETXPrHCHSuFgVvbvM0fzPaOYN7T4IQdG3w4Pcz8VfDy/G", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://1drv.linkpc.net/open?id=RQ%20FGpdl8wOhRM0SuoR2zaYVX3UBtv6e7vkM53Q98AY=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://1drv.linkpc.net/open?id=cH3xWy8JlHksOe0dbYaVg01Y%20YQyhNPbcaeCjD7YCeWp1mgY2UXk%203vyV9Ah1EQJ", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://1drv.linkpc.net/open?id=jPceEK7ZXyj06IjV9qVgPHzDhRQAAVf6ZEP3WmZLTwA%20bITvvGgitAbKKG50u990", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://1drv.linkpc.net/open?id=m64e6/3C3ogDtGvtP/3ZDB%20nkyhz5qy1G82Nl9V4hIGVUbdAGSGDFC67FBZFw0Eu", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://778xstore.net/cgi-sys", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://addrcheck.corecheckmailsrv.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://admin.ubi-safemeeting.live/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://alayensince.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://alwarinasikon.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://antler.linkpc.net/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://antler.linkpc.net/open?id=w54h4KVP1uxU2RKEh58YS2TIAwiHcFO8OPU43dZSBOMkKNMG5T2irCOT4fqBTG6N", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://app.onlinedrives.cloud/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://archax.skyboxdrive.cloud/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://archax.trustmeeting.live/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://auth.secureshares.online/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://auth.secureshares.online:8080/edit?id=1/f2LPTTiGZfu5soYJ5BFWlfWk2%201whn1goWtcNRLVBf5P9PjAlKbtnBqZwUaiKfZUzkvZyJhkW%20T1ssqQUPkQ==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://auth.secureshares.online:8080/edit?id=3DynNFbljEykzjbq63ySnnZCDbBbUOKOXPGORLtwSnQpPBQ0jFczG7J6qcBkT1aAQBl1yqu/mkRPEaIRdP6X0zJg==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://auth.secureshares.online:8080/edit?id=f6rv2xvrYh3p10dMXKzT2Mn7TYwR7us3PPFTZtR6JAhz1AA3VqC9vMqh49sFdhDj", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://auth.secureshares.online:8080/edit?id=tkJj%20zjKJVQW4FzJQf7Fr9kVPqYMb1vvOhZZC0RpelRxl1NqHpw//i%20PGioFIqoRNuv%20l4dkgrdA/1JPcVs0AA==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://azure.doc-protect.cloud/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://backup.163qiye.top/edit", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://backup.163qiye.top:8080/edit", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://barkamaosa.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://barkomarda.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://blogwriter.co.in/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://cintralmaro.co.in/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://clean.net.in/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://cloud.anri.us/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://cloud.emurgo.sbs/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://cloud.jaic-vc.cc/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://cloud.optvers.net/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://cloud.prosec.ink/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://cloud.youbicapital.co/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://cloudshare.jumpshare.vip:443/txqxypqfbxm/xsmifq%209/lvlg6bk6xp/qrqbu0a2xt/q_f%20p9oq/ehwn7hg/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://coinsanddaggers.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://coonbear.in/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://coonbear.in/jsp/Sbeictrl.exe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://coupangservices.sbs/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://crtypk.run.place/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://cryptyk.cloud/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://cryptyk.cloud/files", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://cryptyk.ddns.net/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://cryptyk.ddns.net/oipYhEuV1K+2d2U95Ul/S1JACy1Qyn/tOWT1sZD_4/Vx9sabJQMh/uj9hw==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://cryptyk.ddns.net/oipyheuv1k%202d2u95ul/s1jacy1qyn/towt1szd_4/vx9sabjqmh/uj9hw==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://cryptyk.hopto.org/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://cryptyk.sytes.net/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://cvps11294282336.hostwindsdns.com/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://d1.skyboxdrive.cloud/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://dev.team-meet.xyz/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://docs.cointelegraph.online/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://1drv.linkpc.net/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://archax.privymeet.com/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://authenticate.azure-drive.com/07ma_Au4+/Yw4eJeQPBd/Mc2+9HmC/tEEpDOXyWw/ebmlHbfcsv/4CYQUEdr2Z/xdkvHBA", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://belivestore.live/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://cryptykhost.work.gd/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://deck.altair-vc.info/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://deck.altairvc.com/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://deck.work.gd/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "http://1drv.email/", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "http://ac-2501.amazonaws1.info:8080/edit?id=%20Ez5uVZGMrxUYrlBXm3JSG3aYhUjxT7lVJ%20Xgy1REwbyAQCgnSvj5VgENUfP05sEjCpXZgw3AbwjXurN2Zfwlw==", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "http://arizonamaternityclinic.com/", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "http://cloud.azure-service.com/", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "http://deck.altair-vc.com/", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "http://doc.linkpc.net/", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "http://ac-2501.amazonaws1.info/", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "http://autoprotect.com.se/", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "http://beenos.biz/", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "http://chromeupdate.publicvm.com/", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "http://cloud.daiwa.ventures/", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "http://authenticate.azure-drive.com/", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "http://coin-squad.co/", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "http://cloud.venturelabo.co/", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "http://cloudshare.jumpshare.vip/", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "http://cloud.globalbrains.co/", - "count": 1, - "total_related": 28, - "prevalence": 0.03571428571428571 - } - ] - }, - "urls": { - "attributions": [ - { - "value": "lonejogger", - "count": 167, - "total_related": 178, - "prevalence": 0.9382022471910112 - }, - { - "value": "flatdirt", - "count": 9, - "total_related": 9, - "prevalence": 1.0 - }, - { - "value": "rustbucket", - "count": 7, - "total_related": 7, - "prevalence": 1.0 - }, - { - "value": "powerhouse", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "covertcatch", - "count": 3, - "total_related": 6, - "prevalence": 0.5 - }, - { - "value": "shortfawn", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "todoswift", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "lonerunner", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "sparkrat", - "count": 2, - "total_related": 187, - "prevalence": 0.0106951871657754 - }, - { - "value": "hiddenagent", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "tallcoral", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - } - ], - "http_response_contents": [ - { - "value": "1f1851ea45175dfd9490310acd822fa980c2d766aa5701e7a44231d686b3bf3f", - "count": 61, - "total_related": 108, - "prevalence": 0.5648148148148148 - }, - { - "value": "4f1987847e23e9c9debb64481372b00fb0194a615154a7f87d2ac992dac70306", - "count": 61, - "total_related": 121, - "prevalence": 0.5041322314049587 - }, - { - "value": "6419f11e727f620019c38b901d0239e077a1820247a3429386c65474e0b6f605", - "count": 32, - "total_related": 44, - "prevalence": 0.7272727272727273 - }, - { - "value": "3bba19db251e48fc9282b9dc02670b2a69fcba669b34207b9d1df050e986c4ec", - "count": 31, - "total_related": 93, - "prevalence": 0.3333333333333333 - }, - { - "value": "d03244a7b900e22e01849c6da1cb01ca30e3fa5853b6d5f5029d1498ea4a1d97", - "count": 29, - "total_related": 41, - "prevalence": 0.7073170731707317 - }, - { - "value": "e1b08ef93178fd96fc2ae4f1998f441bf73b105a3fb62a9bf19dae4d55a2b9b2", - "count": 20, - "total_related": 27, - "prevalence": 0.7407407407407407 - }, - { - "value": "aebe53d8cd6bd7cb29e0af6cae7df5c1e302d7cab15c714510ce151a5f658590", - "count": 15, - "total_related": 22, - "prevalence": 0.6818181818181818 - }, - { - "value": "63a6580d9ee8d5a632886585ab8f7ab59c87d4e2717181c191cac236cd1e1de4", - "count": 13, - "total_related": 15, - "prevalence": 0.8666666666666667 - }, - { - "value": "37e75280f3ee7801b06a9ea2c72b4463de5c3fa877f08f6aaeed79815128bc8e", - "count": 8, - "total_related": 14, - "prevalence": 0.5714285714285714 - }, - { - "value": "d266e47dd456fd2d97947ced1677bbb9eba96ff0582096b508d9e930116ad9aa", - "count": 7, - "total_related": 10, - "prevalence": 0.7 - }, - { - "value": "dd49af65cd3c902f4d2acc8da2fc61a558dc1b2c11ba8876cb734d6768c295f9", - "count": 7, - "total_related": 11, - "prevalence": 0.6363636363636364 - }, - { - "value": "5f18e872712ba761b5e74d9672813ef7c11bc996779053063b9cfd557bdb2352", - "count": 6, - "total_related": 11, - "prevalence": 0.5454545454545454 - }, - { - "value": "79de30973b69aa4c44574a512e7820cc0a00f1241930ea361b7b0afcb1cccf2d", - "count": 4, - "total_related": 6, - "prevalence": 0.6666666666666666 - }, - { - "value": "d9193d06d98b15524bbce2a948b664b36d78f545b67a81ec2e894ee1b00b9161", - "count": 4, - "total_related": 9, - "prevalence": 0.4444444444444444 - }, - { - "value": "a4c04448088d12494af1c1ff48dcbc11045f5f4674b681a6177a52e0af696274", - "count": 4, - "total_related": 2519, - "prevalence": 0.0015879317189360857 - }, - { - "value": "0dda8fdb5ca88763b73cfc4bac99f365ac9c90154cc48df40ba83c3aefd4d372", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "c6ed4f5b1f3952bff700a6d5755c0534aa9a222e566a206cf5c8149c8a377f7f", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "994e4d9bacbacb4ff7621c7f2b2abf8900994212bb808b08f7b41b1ac29c30e2", - "count": 3, - "total_related": 6848, - "prevalence": 0.0004380841121495327 - }, - { - "value": "766c1d6bcb81d3e983fb7adbc19c616d7fc01dafb7893738edc242e2adc59c07", - "count": 3, - "total_related": 21975, - "prevalence": 0.00013651877133105802 - }, - { - "value": "e718083b67de582dc0a7dbedea0e1bc4c9847fcf235071a78f0e3015ab886d3f", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "ed06fc8b097fad7db2908265afecb3232deff5baca29ea8438df55cefc01dea9", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "f680637e7895b353a38e3d5a606e7c8bf66874455237ddbbddf9adc9a3076981", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "899b2da752ad50f525e364f0af930dec91a128effbe8bb601803226604038d5b", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "30146d9be8094beaa2a2634dd07de00046be474aece6400f8976c698262b44d3", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "72a41015b94eaae52495f1d0852fb16f827a34988f6bc4487bd580c8402e5c7e", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "8a649bb66b2a3b014e226da08118439611f6fdc91c69949ad0e04c3cdd7b12b5", - "count": 2, - "total_related": 8, - "prevalence": 0.25 - }, - { - "value": "cce2575f8a0406a2ac98c87e17f20c4a82c9fb1f7370b9a57d0d886e41b0d26f", - "count": 2, - "total_related": 8, - "prevalence": 0.25 - }, - { - "value": "e1443334a5e7b905b15b2f7d2000d696d3dc3d968956c1953476ab8eb9e360f2", - "count": 2, - "total_related": 24, - "prevalence": 0.08333333333333333 - }, - { - "value": "3615637bb44c7dfa79bbfcd74e36b736a8d7383dae766f35b6ca5101ae8aa909", - "count": 2, - "total_related": 744, - "prevalence": 0.002688172043010753 - }, - { - "value": "059bbd9cb679779f4a1bdc953dd10dee88ad6dd510ce147bc5885ee06bf83ae9", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "05fd254df41265e931ce4c35c1def5ccc42c8b9de0070bdde5ebaa90c3727f15", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "06c0a3691612c0c30cf664a4368b7477f2eff21f423d6f9152f2934ca862d5b2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0807e18327656c6723608b2e1579de0d657abb9316abbc94e8f9743f4a913534", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "084ec3a594093397227e30370c2cc42a15093fa81b71c3dda77e59e1edc5f1af", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "096a4e9800dc132b242a31a3910904c0e7adb017835ab6d42211e9901c003bf8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0a9c488fa35f8f6a538648d4cd88074f3da3320f3d0c9f29ba35bd2b8080a50b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0b1e8fb6f46b5d99c7b24a0e9d4ed36c37f39ffb37f19e8d951ba0581c1985b2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0ca80a6e76d97403ccb9e87ca35d42f280c73ae7557ccd41b90b01fafbb45e41", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0e711fa5501c993af8498f0148ba6b6810ab8c769078c3dadb0dae11a080bac3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "10056ba4bd97e7f1e3a5ab742addac29597a6ecd40289e720985fca9e1435697", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1136f931ba561c092a0a3a4f13719a9c95999c24f25ab22a0d6b94108ce58817", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "146bf40007cedbbec26ef4e89069eba0e184e6cac6bd44bcd40e8937e210887f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "154fbf02a87104b7a58429158e69abcf23782fc9951279a8d3c97c8419dc7d50", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1738bf0854c7ad33855c173dda85e386100892ce79ba73407fca2465ea0afb29", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "178096c529a3243d1c3c42eaf2c94aa3481acd5d9e330292f021f975985dc69f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1782967b37f032177361a10089a75ca660d50b01cfd23f1aa2b030cb6babab98", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1e5e12929f9caf1d05f7c7a69bb76ea4ad428a473e92930226def05f67cbf7de", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "22912a3e0cccfddaf1102d313c62013658d588540eae40793d9074965d40a82d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2462adb08fd9ed5cd2a303b96ba96ffb6d5edccadf529141b6797b42765fe8a9", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2476d19ad8c3da93eb11d7571b1d6ee25fa63a3c6dd0cf48fa400fa773cb0d8d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "24af4518dd8d1ee3b3307b6a60bbb18b60d393cbd734002d7f178e189e1df900", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "24c4ffb5dcd39306042eddda28519c1b962756d405f0f2b4d386ceee1c6bee86", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2727e1775588fee0f9e6d69460338cb526a8d0bb34c5d9df6e4609d1b3d56386", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "27586d3126cfe3325660dcf3dab71e8a59f29616cc37ed827837ae4b1611dfee", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2815afccf5c1b8cb4edaa1548b0db6f6deb59125e5da7a859cf7c0d12ad4b5c5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2981da0207b5144e7b950a169d4e6a1cc258beeb2cac0fab7048b3ca3d07a538", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "30eff61feb13bea95da983ca6dee9e61ed2a9ef164245efecf91451d7271695f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "31021d73a1607238408d3e9ef3d8f4fcb89f2db44e4ac50744e1b7b59e64c01a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "321e2371b35415433ec04c0b848cb64ecc11eb3c6554e9e6a5c18a56262475b5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "33b0ea66772ba0f50cf974840c0373aaa38fedd9fc260be7b007c0b9db969ce8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "370e927168f556b0bf84e50eed19e46a322c606af34063287be768486079a9bb", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "39759f739c27450e94fe1a0ee2621f1d9b55f5c5bb9f64896dc42b105927730f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0600d7adbc5d399857d58d011cc0a307faf14645c52804097242dbd277fe3ea6", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "0def651f832d40a8dd99184e173c69f273947e7080550d217a403e7506aa180e", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "0e5014189f19bc3e758b9f589d13ec2acbff7361d02e0f660b883aeceb6f3ba5", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "1140f339ced538685f67d7b5026582664c81f7654237c51ded1a27f2fb2e7f5b", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "18145ead6695e311e33e594dd052e3a36fc2eabfee935d35f9089fce9267ae1e", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "1887a4d2d0d500bde157cfee55901c63a7252b70aa4931b4c32236fdf4bdb2af", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "18977ffa1d19ceca67c5afb50e60078380ece9bb1e10f33bff74c7c97aad95bd", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "1bf991c4d81feb70a31afd77b6b70217fe46bdf506e525aea641aebc24401087", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "1ee8c24c2d7d8bcf559200742775bd1dd83cdf1f6896b269f9563b25ef3d908f", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "239665526a06c59e1228781cbbbbbc8ca96b95bcd229416f2c6a756c240618b6", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "26cacd7c61c6be9ef018c175316f278d6137473ec7cedc9f4ad7c486e3063362", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2ee5b0cddc4567ae033640a6ba6a75233ed8fd7fd804dfff0aa4381f0ca83477", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "3125619db79a896ed2651b3c9f6a0418aa4e34faf4fb622054356bbfbd238c66", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "3258a12e5e1f0088b09b319ab001b72fc8c34bc7b72b0a880731c8a5de9fdc68", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "37396148a54650caf6d64778c163b1e01b36b78838b6c53a61fda64d41e7e5f4", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "0251e93999f120d31b70c2b99a45ab36785c22e7c7067b9bb32c3531efd86b2a", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "04e6337a10a3e1c1ed312d74c5eba15e61ea67673cc836ac0d1d0083cdaf78d8", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "2ffb004d2f1a8317d1985ade9052aae9802e14c273eb702a67c10e83e2e18dcc", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "01e5dc64a75bcb4704491dc204ce5eb2e043e6492fa45b6fd041bf5c9f7ee495", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "0da45cb20d7fb6fc4cc347cd3507d8247d10c1b0d52fc7974d25ec23ed39a729", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "1a9fa629658d0ad81744837922c8b833a5956f9cf0a210a3326253495e592177", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "0c2c24f3c511be3b11f2ade1684d694d661bb4de02516111dfd598eba718c1c8", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "1ba2075001139f7572f044900ba00fa9a915b344df03d2549ace8b5b1c865373", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "06614ecb445001d94dac3ec5975c3b1a3f7525e7db784370109a64294f9bcc47", - "count": 1, - "total_related": 24, - "prevalence": 0.041666666666666664 - }, - { - "value": "21010f823005d26b7ab0dba77db368c2d1c4fb9b939b7dbc6c97450541b60b9a", - "count": 1, - "total_related": 1370, - "prevalence": 0.00072992700729927 - }, - { - "value": "33c1c92944a084e89ac8cbfe15da3c741575cbddd50a0301b946fb6da8441a93", - "count": 1, - "total_related": 5422, - "prevalence": 0.00018443378827001107 - }, - { - "value": "0cd6aed5d21ae37310b3c4e0facf48009005018bf4402fbcda1cb66d69b03346", - "count": 1, - "total_related": 44342, - "prevalence": 2.255198231924586e-05 - }, - { - "value": "b16e15764b8bc06c5c3f9f19bc8b99fa48e7894aa5a6ccdad65da49bbf564793", - "count": 22, - "total_related": 100000, - "prevalence": 0.00022 - }, - { - "value": "ed6f6f2144998175c846a99d2a0faab5bf7b6ace318f0fe2dc4bfeaf4700c1d8", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "982b986bb578e137f062099427a8caec3c501c84a9e4b22369ebd2badec42fe7", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "0f3a07f36d6bddee418f7d7548bc165b09817e10764a359d2773388cdec9ff8a", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "8437bd0ef46a19c9a7c294c53e0429b40e76ebbd5fe9fd73a9025752495ddb1c", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "9ec2f0698f1c3497de39a192dd1c3f3e4506ff1a84dbf85082344297dc52e681", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "dc1d54dab6ec8c00f70137927504e4f222c8395f10760b6beecfcfa94e08249f", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "e14487407359a2b8c009bbaab7656357d5a9f315948ef97181e8e41711411593", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "25fb23868ebf48348f9e438e00cb9b9d9b3a054f32482a781c762cc4f9cc6393", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "32f2fa940d4b4fe19aca1e53a24e5aac29c57b7c5ee78588325b87f1b649c864", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "contacted_domains": [ - { - "value": "googleservice.icu", - "count": 5, - "total_related": 9, - "prevalence": 0.5555555555555556 - }, - { - "value": "amctradinggroup.biz", - "count": 4, - "total_related": 6, - "prevalence": 0.6666666666666666 - }, - { - "value": "circlecapital.us", - "count": 3, - "total_related": 6, - "prevalence": 0.5 - }, - { - "value": "googleservice.xyz", - "count": 3, - "total_related": 6, - "prevalence": 0.5 - }, - { - "value": "docstream.online", - "count": 3, - "total_related": 10, - "prevalence": 0.3 - }, - { - "value": "drop.trailads.net", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "lundbergs.cc", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "smbc.ltd", - "count": 2, - "total_related": 110, - "prevalence": 0.01818181818181818 - }, - { - "value": "docuserver.xyz", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "download.cloud-sheet.net", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "eu.euprotect.net", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "deepmind.fund", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "gbackup.gogleshare.xyz", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "1driv.org", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "docs.dsharefile.tech", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "mse.theworkpc.com", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "cloud.blockchaintransparency.institute", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "shop.newsbtctech.com", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "docs.gdriveshare.top", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "up.digifincx.com", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "www.cloudfiles.club", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "drives.googlecloud.live", - "count": 1, - "total_related": 15, - "prevalence": 0.06666666666666667 - }, - { - "value": "name.ownemail.me", - "count": 1, - "total_related": 16, - "prevalence": 0.0625 - }, - { - "value": "bit.ly", - "count": 48, - "total_related": 100000, - "prevalence": 0.00048 - } - ], - "communicating_files": [ - { - "value": "26a98b752fd8e700776f11bad4169a0670824d5b5b9337f3c8f46fac33bc03e8", - "count": 4, - "total_related": 35, - "prevalence": 0.11428571428571428 - }, - { - "value": "45c0007e4c744c6f9ba43660cc7edb9a2deb27580e160f8a0e56585401ee9ee3", - "count": 4, - "total_related": 52, - "prevalence": 0.07692307692307693 - }, - { - "value": "a6d614ec8d8135a7250d76d6c575da0de69efd862ea936af66a3cabb50e50789", - "count": 3, - "total_related": 9, - "prevalence": 0.3333333333333333 - }, - { - "value": "52e9361cfec3bc643f5ac715709e1818766e1790c7f83e93e3ee7cc96fd1a473", - "count": 3, - "total_related": 25, - "prevalence": 0.12 - }, - { - "value": "e6e60f07583f397c915b6b448f7521b236df07e0236851e445844ea6c9a11278", - "count": 3, - "total_related": 25, - "prevalence": 0.12 - }, - { - "value": "01184a5acb8b3ec56c9e90f2e6cd6673ae83b4fd6982e17329b33da2f77bcf5b", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "1454e53a6ffe2182be96391fb6f2cb5783142e2e0e03f26abab027e9c296088e", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "70c4600d6920dadc1899603b131119427784fcd83d04da5c886bcad5a7af913b", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "b807d42926b94116ab57c8c40d5b4795b97375c150e1ec97a6520225dd0d4a0e", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "e9f9ab0b0e48d81de10ecd75090f78e07dfaedcb14f1bc3e745823d5919bb6c1", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "03cd4ec3defa490e68b1ca2efaf8daea6f89d3cceed51c91f4c4f9e2222d258d", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "0d79b66f41858a336a385a7f6cc9e4e2fa06097b0ec422ce2d18bc6eabe5afee", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "1b93ae0ea729f6cf0ce33fddbfc163265fd0132a3e452883cc2cdfb3b059d836", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "1e154b2976cc00d457c0dc2b83ebe81911294c8276691617085c03a3304fd87f", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "1fba098a58f8326c59b39045c3f07a1adce1bbfa23225e240e0f6fc5a2b2605d", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "292207998d2aced2a7d8dcbbb43a5fded2f5a27cf590f43c0eb800341b237fce", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "48bd1c5cf9ccc3d454ab80d7284abaf39028a228607d132bfa92ab2ceca47ca2", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "68a5a26836e3ddc176c31a7e0fccd797a387e29433b64ead5617b356976b979e", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "7cb4365e642d52118bc0cd1dc0a33b613759335efe0e764d403847f63961557a", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "c3d403b78b4f4aebf1e4b7447f39142d27029011a442fe19219a0ed148de49c3", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "d1223db1e8dd0aa13b9bff498f47e103fc6d02e602ff168dc53c91faf9778a6c", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "f7fa68cb3c1761a12969fd8675fbc56fb20a7e21bc23874a5aa58400be40e0bd", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "26e376fc80b090b2ee04e7d3104d308a150e58538580109a74f4ac49bf362423", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "47b8b4d55d75505d617e53afcb6c32dd817024be209116f98cbbc3d88e57b4d1", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "9bc513a9e633ffd660a88e4c960b6637a8104fc7a61bb6930b9a4a166ce695eb", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "bce448c7b618496741375f01c9aa8824ce65b637c9d91d98c55d693305ff395e", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "d287388e5ff978bf6f8af477460a9b76a74fdc33535e392b70e58176fc9ad805", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "26636fb57a98425ddc6401bf7cca2948392dd620393494c2ae4e6adfb0ff6ba4", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "689ea0e58022b86655596c946591a5b99b051f96e5cb0b0fd60dea302bbf91d2", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "997c4f7695a6a615da069d5f839582fdb83f215bc999e8af492636b2b5e3436c", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "a08d97cb6da1eeb2223e8d3d243e7a830b6b081a6e08f2a2b1ab2cee354259a4", - "count": 2, - "total_related": 9, - "prevalence": 0.2222222222222222 - }, - { - "value": "4786d881b14712866fe9953ad039197e630007ea19c0f0d3bf6c52598e26210c", - "count": 2, - "total_related": 10, - "prevalence": 0.2 - }, - { - "value": "9d6fdb5344f64e059043980c5bb80e9c8986f1a5a62d7d7871144b388df65262", - "count": 2, - "total_related": 25, - "prevalence": 0.08 - }, - { - "value": "825c84154c85b2f8213aaa7902f015c4478ddcd3172c48542688be2675d6e305", - "count": 2, - "total_related": 26, - "prevalence": 0.07692307692307693 - }, - { - "value": "9973848877ce1f81bf1e86e3fac82c71f9a05793daf1e7b66aed9e06b7be12b8", - "count": 2, - "total_related": 27, - "prevalence": 0.07407407407407407 - }, - { - "value": "fff9f847b0dab68a2f219c390dc16c066e05830aa6d1bd0cd991000334b12471", - "count": 2, - "total_related": 28, - "prevalence": 0.07142857142857142 - }, - { - "value": "0f73d0269cf77c53a38fb5863258755e3055979a6343d15573ab2222ce75f49b", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "e9894893a8a1f74d7d6a8768dda9ef5ddaf8aac18634a1110e9a79652c9f13ee", - "count": 2, - "total_related": 32, - "prevalence": 0.0625 - }, - { - "value": "2597137783fa87ea31eca22222b7118807f2e83e2421f3de78ff1674cc0926b3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2727e1775588fee0f9e6d69460338cb526a8d0bb34c5d9df6e4609d1b3d56386", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2ade7f8def7eceba3e8f0e5d29d0a19626bfc595aeb1ed95b7404210569c6304", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "3d79f0886b7586240de217e7cd6902619c6a6c170ded4cb6655361ceaf1bd52f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4906c6294ac0d3510b0a89d840f11dbcfe6dadcf708feefbaa7f7ed2a4deb5d6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5115be816d0cd579915d079573bfa384d78ac0bd33cc845b7a83a488b0fc1b99", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "53d32b2a44271fd04244354342e9fc495c11df396a055f831f5b69eecae10f73", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "576d1688f744a9f6ae4c1fb4cec1cda3daecabf3a13cb3bafabf083c54d1fcb6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5d3e48ac31ca012603391afc2c44e59846958001823c04733ebd1b5d3cf6bd07", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5f4063e3a5583e62ddec2f84ca88eb97fbcfbee31d9269742ab438f441f0cd58", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "739e613e768e98456ac040a29e61b446de533312c07412e986344ae2b9c53c48", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "76e818fdc347fedf438d16fd0f81cffac7a610bcd5c0145c382d8490705b0b4a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "8949207761f3d09734aa716da1e6c182425bcde2a95dacb3320085f1fe66069c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "8a7ba38d597e8230609df4153039d1bb898479d486e653a6d92d206dd4848c80", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "070be2bfc60d1616afb196d523f1540d5fb62867d379f6e87b6f65bc38455c5a", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "2c338055e8245057169f1733846e0490bc4ae117d1dadefe0a3f07a63dc87520", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "4c574c1a2b126c8a5ba1ef9560516d0ac9990c0253119f874eb084b57742e3d7", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "4e1ba61bd883858330af54ac00150816587bd2152e1d371c0c6187cb26ad12df", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "5842272c3dfa8153a147bf5cdefc0f9fc514e66fe9138585639529127d058e47", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "5d183e8950c7fd56350d5c7edd42481b7f164e34243fe832b1f4dd125da08b32", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "7ad1f7c989d7d8937bf9a1aca255c273a0bede03e6d26f5537971bd264fbadd9", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "10d83ed487de6ddbd99011f405006efbd415e24037cfd9c724628decffd5aadd", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "15d53bb839e00405a34a8b690ec181f5555fc4f891b8248ae7fa72bad28315a9", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "1997c68e44ab32be9003ca34a4285ffc53da51e2a6447c8824e27a6ce556a5ec", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "26e59279588902fe923bf88640d6640ecfd0823684799c783167062280fe1783", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "2b3fb6bda062f520155d55603e723ea927cfe6367fcc2eb67aa317790f86704e", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "3315e5a4590e430550a4d85d0caf5f521d421a2966b23416fcfc275a5fd2629a", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "3debe73d29fd2c0a8eca0f701c30870af25986189790322a45a9526f1603d12b", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "45c0b6db2c502796429e9a80c13ead3b80f835cd6c7a80b818fbb1c5c0ec3e9c", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "60674602836323647634016774ea123232160c1b4dfcf3fcd2d2c28c652aa00e", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "6f2eba03f19846814e3471453a161ce31e39ff2b6b0a820bf232fd085b46324e", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "7580aa32c9b02b527c536dd4ec0a5890d9d4d36c3fef30d0a2501daf53ef821c", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "7dcbeb1806296739acfa5819872e8d9669a9c60be1fc96be9cb73ca519917ae8", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "80bceed23c3bd2999adaca3190388fc4d69360486f931099e3684434e4968850", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "82f446528560789d2f79a9c5f1b8cf3e5eb20468bd567ef9735672748aa00b06", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "8afdf8513a6e3bede16187004daccc95e193a29062415d9ba0c29b98a5a927d1", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "07df3733b75e6e23d2217a6548ed66654793b20a0674b22187e558c3284c0055", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "1c451f6ebd58cbe1dee85a0451badd4edc9de58f4fd17d480f53542b9e5e2072", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "1ea8699dc216353ba29c5d3ca7fcbca59c02ca5969a554faf08f8aa0488e6a6f", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "4c4cc3abd3ddb15d5306fb647c6d779b18df5b949673bb3f3f87faa2c5f56a6a", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "51eaf8af57211f8d9e534f98413e71f4ddf5abcce806a111fc49a30d3bcec696", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "7ee88c6f150ca4ed19655146d644024d5034ce93686900eff0b3521f66ed55c6", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "8a8ad30c6c19d6267cd6de2eb82ed945d562ab463d3e7c4dde107ffa633a14c7", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "413c8b5d9156c4b399a180bc395d90a4bb8aa78df35b75241d33e186ea120f0f", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "48a16c721e620d2d00d4beb7e80531a205dc7e11f03573e650ad1e79b90b67be", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "516e58ddabe506c18098bd0ee842edb6c3ae4b49cbe51b844e79009d070ccc39", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "59469f24e845cea12de9b5e80ca06ccc4d27fb912b0d93a2125ddf1665077f4f", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "60f5f52653589ea35180538c9c6598c94691e7c99f7f62ffadcc2e7abdb7e296", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "51d53ca36a662b4aad5878987548f0f22f2a53545790577d8043373b6bf7eb75", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "65777672f94cfec5c3198c043cef9621b86a51a8f836a6b098d60e6d99a5abe0", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "6b0a93826b47e2b96fd79f19d02d9be1034958b30ef246ae57612b84c2ff5041", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "3656925f16d5fb5e1e1ad82d96c270935ff4cc65a3ced68fa6896efffbbc01ea", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "887fda691d4659af5ad5b1f5a51fc04335fdb55e53a7930be438e56f1e394edd", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "353f82475fcfad5b3f06ed85a931bda46ec34279793b5d70085aa8c603e8ebec", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "887fbf39125451a667977c82b989a2cdba78a888d228f941b8bae6d7dbb26433", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "09b83a501b8f919fc4861735097dd50957f21e81209d362b4fa425bd3348a495", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "1939d9fdcf831dc4cac001ba193669c75a336258bc99a1775471554229e4a69b", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "290c2e4d0efbed23de0d41d1b821396f5f1003f6f123ee6160d6d5028d01b961", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "0b8d7a851920d4584777505f9fb484b226a8457d4049885a87c847f7d3532d28", - "count": 1, - "total_related": 24, - "prevalence": 0.041666666666666664 - }, - { - "value": "81554ae36513b4a637d72db864f31e39ef3ae35ad402fb170f5e5fddee2d4589", - "count": 1, - "total_related": 32, - "prevalence": 0.03125 - }, - { - "value": "38ed248501bd35cd140f8376ac42e2c5a46ed4ec71cff0cec290fbc93678f323", - "count": 1, - "total_related": 34, - "prevalence": 0.029411764705882353 - }, - { - "value": "2d9d95bed6a6108802fa7c750cb66f2acce7b124f790ba552ec009c4d1d20744", - "count": 1, - "total_related": 38, - "prevalence": 0.02631578947368421 - } - ], - "cookie_names": [ - { - "value": "anon_u", - "count": 23, - "total_related": 100000, - "prevalence": 0.00023 - }, - { - "value": "parking_session", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": "NID", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": "SameSite", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "sid", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "cookie_values": [ - { - "value": "05a39ca9-4249-4e6a-89fd-073124bae728", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "071ca89e-15b7-4776-af8e-1a3f00a540f2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "11f5a74a-e556-4dd3-be3e-0a4efa8ec44a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "204=tjB2ZpmoajWBBYw7X7gIw1_JUh-8G92S7ZYXrzs2N0-dStJ4PpgBTA0fX_bPPl7ibFI9eRoT3adFWMzSvkz7fOvn-yR_cfpiRrDjIXaIL9K1eYmG_7KpjB2UE0zGpqPkowFjdnecV2_ix0dMLWk4z9PTA6ZnSFQyD1_BuCcUBMU", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "210=hpk0ghcz86RfX4D9suKNvGkyBhJvZ6zRE0fsj-2StSLKX6RCTzPs9WFOGH7aANbod7Z6uW_SbQ86FSA3A52IG1urYYcsJB9BqlGsSaYlx7EUk-n1d-OPbQJMqUmgV70jyFeJ_BLtxsnWzPogqs3saBoLfR-ovT2ZFUvM8_l9en0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "215=SiKHFgRCf1wGjnY-ZIB9epA67IlFjpzCYI9l5QVgJYICxjPsFma-RLXlPU3yhMlc1KA1uXMqUwDzgSNo7szni4rklNFVy-yodA8DNVshhiSYCpVsdmZTXHRVWKFaMB9xsmyqfse0J6ulgjlZjgZgPOg8gPkt0Uom_PDH2NlaRug", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "216=R74gwHcN0FxQ4wzMb1Shklipy2FdVjAAjrxOaiRGCGH9Bkxzuaa4ImEndX0zAE1tvjOi8pUZnA5EnQGIDc_tS-DJuu3oU-VRHna5AkBYPswURsY44zA4NWKRvONp7B9eyyhdDqeIBDZwfMw4YAJ_lrGxGumQxY5J9qqJ5y8jWMM", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "217=0K2Kif5BKrQWlwcN7lWE_Qyc7uCwnkGXEloKHG_YSr8TspXsP3XVs51GD3qPRX446fkB96jCQEoPp7TWFGy-XUOctDhjc_SW5wIVPIOexwK0svRPeW8jxbSRrKfcdR11wHfx2ETe-1pPCpOLz7Ys82a_q-yGylVXaGKN3dz320c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "217=f-2RXX77NeBYV4zCWVq7Fv3KyoXiiJLUSVuojsj6X9XANktNCcLUyCfrMauRbGJACDkjyR2lzRZL31Al992T72hLzwKvi1fuq3PjpBl-A_1ZbvaHKBcK1D-FM7jSodXa0cJefOy09RpTzfRoH7zSdb6G36p8yT6ANoVVygF1gCs", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "223=lqA53WDXs7hrgXC7SI5Zcwh_b7PiqoleDacvi-fe2U80ZR5kGJBiSGTnC7g7M-lKAVPkSd_GE67JXaZZHP8clJGYE1085jP7dLu6bVQBf0EznSiPIyKisrCYYkHEo8LAiFzFwLZAXGoOKgk-5y6mld_FZd7_zrLdcptHLMvkez8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "29781a76-2a12-4c1a-aa01-0a03252fa19a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "3a5a7de9-2e99-41e6-ab0a-4e290cc61728", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "511=DsjUGjIyvz9lIcHbLDwc_H5_bZOtvnbsuH3nepkT-kPtZKabsgN8Ly9EPply9Re1a-40_l3Waxortcu1-aVcrdEknjEHGZiKbM7dvqkuiH9cBOwa-UvACrMldQaVhArlmTaQkOCJGdEXYbLkRo9jQGiV2ULwl4u1WzgRvMPaQxU", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "511=eprfsjUGGPg0ZQ636wxRfwwx1URknLJZfEAqSXIqBr-WVj56zl1eI19iR5UiVFE4AHVjL1Lal3eoLIvZJ6skJT-_B-We3m0l_pQvnDTncNSJJOZjm16xJ1tZLul-giSfc1eY3nSSDGu1RlxSjX2GwLYiXuK_YqLpRG-JKro3Z24", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "511=oYMBI-eFPy55afGCsJee497bGbuXWvTFtyGf2G9r_tbnfNVcJMKDeVGPjYgHrobDOwRZNke0VEnO33dXjqHW4DflsnPk5e_TDQeTzN3XheV6KzdNUpH3SQ3RrxsssoiyFOFqFHYenvKt9NFq9lqO9ifNI2nlmvGJc_8NUkFhcyE", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "514=LIVCRMngVCPLmc_uaQ4uUXFkqDppZl_I3yw_15pjwfFic7MZN4nS_DbvT7drOE_lRR43h1O9swwOOcdCu2w_7v0Sqooj-RWssUOHQ0D8PYCJ_cBN4MkUQwCMIatcFTYMkQiNe42zkTE9SA9EbEOBHIeOZtD7PZcm9AQAFXv2DpQ", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "514=N86yh5WBGwGg5GB5xpYnO2Uy407TR6i4PeqQm7OK9EuMDho2wnxSRus4ok1LzKtByLsu4jCNQTaidcrbuqyM_GDloF_E5zxEjICNP35V1dIEI_yCXwXo8W7OuahDliNTO8HHAFzOQRLz7Gku1oySdf4A5tY2TqX0PgWviRW44S0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "516=GlVQYicMvbugPqdYb2sfBC6BfjY9Qx4ga9NpOXawvD0oPppeJ5LREqi4NLwkgXNZvkjcqTQLJmWozP4ELfh47W7tlOf6jk60vZGrOfBjnk8OJqkHkWmklM9eJ-r7tqCPA7w7zUADceYlnu6vLFwE_L5pLr3SDBP3SnUYJRqvgnE", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "516=J2v8AkVAF6evseVLAPv6IxORINDrNZT8vJ3T0a0aQmFXh93l561UfnVrMJ6Uxl5oQuF6n_NAv6j3HYh34PaUjRC1HpqdyBabtzxGcySzCStRp-Z8x8KX9hVZAbywrhVMlxP2JYVTPicnfdaVTbHlKZ7Emwg9zwrFPoEom0up0DU", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "516=mDe5ycPvXHBe8fsM6gqAvVb1tp9lQBR0O5ypsnXQitqCecrmOiQEcqsRtUl4UFTTvM5colarZKVNF3APrzunD0gcC7g2_8DCiM1c2uj448gmoOaRJSocwVfPvx8J83fGypVcR3YdntRmWMJHdw_J7sDx9araVa3ikMyMukTT2Zs", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "516=m_PdotOo4t_QyN2HwPP3gBCAFfcQoaEMU1pWbD5dwlA5aIhJVRbwSxJY2qZxxRUrtoqvGzdxu7y-gUfI1m_oM4tNhTaRW7q8vj7Ij5EWQwmWV8tQc_WpU9js67tyfOeLoyGd1BeT1TLVKaAP1TOQyO3_jcKMd4GeNoe_8Ep6lnQ", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "516=o32IaNEEOOQK8lgBdqwdg_YvH03oKUgsWA18HQ6eUmdVo8jWIMGFX-FWKOiccsBEUf03gM47P5W1bNmzIdOurPHgNIEuVsvKCe9vOnR5a_dwHVwZR7jAxi6qrS-ZFg-pCu_a6sLrSQ4w-opBZm_ms-cIQ6b3G1IaO0WC4WUsdAg", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "516=qfS4kd6Ek1XnrdwkKSGkR3dgs8Ujv60vAIPsLNoGUHsLP-UQTVIP0EtjG92FSPaWLzUzsqVCTYeVi29-ky1w74x5YaqBzvVXgDRusHPzjd7NSbg2hhD5vUniUrMBQz5WHwY0b9k_rSLZ6Nz2J78Pzko-LkoN7Dt7zFDSnBPcm4c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "518=lVFWrh76kaIOgT2LCUhkYI-Pw8i5yc14iPfIZE_HBhTiv0VftJnYAqwFNVozpSLX6oBh5WmUQ41CGrFA5Wlt2xBBqVSHDzNXjTTpoFvrLfp5QZ_Wo40rbdgkHi2S2ltL79fdGBBaN47vgo-wfO9rBjJ_RgW0tOpxeyuDMhmdI-M", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "520=gmcYFkzwUwrkm4EqD8HefajRfUIKBH5dxrYjugJGzkSpYj9FXPOE3R0Fk9oXp-qF_2txCTXix3Tr2DphUAhCxQ9UXcPWIWm38yxGAFigeHfGTf8R0OvwepDUj1enRumCtVVV04n-_Cp8VIGZ0LD0kkZAiJqwz9A-LA_RmXFcfVY", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "520=sYmveBZeh0XIaIv-1JdM71zjWNe_NiQL1OnMRYEAuJAFj7c55ppYqVAYN5klpXrbAEQ_IuUPrGXftn7mUp0oS-EhPTqSZnhLAIUQ1Sav_huKeD_hdsc4aUYeU-RIZ45JKFkeXMd1YtivJTN6qEe1bLNvTOzSL7FQGRdL1cH8Qew", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "521=oKPnfCFSIqy18M5HNKw9Q99z7rUeWIBcaAj3GDeAyN8--akhL0sdGDN3Kvzh1_1euzi8KvZPO8v7GttOxIDCbRIujN9SVRNoMLPkqThNrxqf9yUHPhfScVfFUppS7pmX0Bn7ARSQJ0kJEswb6wfr41ff1BhRJ6Saf7lpkGrtJCw", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "593396e5-f52d-463b-9b97-bb20094c720f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "7c7d2a80-362b-4526-987a-a456fe8edc01", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "802f7561-9ab1-498a-a02d-d3b859bfe57a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "866971f4-3986-11ed-a8da-294ad0b4d10b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "8d37189b-8fa6-4a22-ba3c-1dd64b03d877", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "904d3e7c-199a-4e71-831d-f55a67984bb0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "a8bd9bc1-ad13-4c0e-a2f6-f674c31e5208", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "b46d99fb-b20f-4902-88aa-a5f5870183df", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "c0c2366b-db1a-40b9-b115-00f8076052c2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "c3c3c6d7-b805-4574-aaf8-5436fe6c36ed", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X180MDljMmYwZi05ZWE4LTQ5MmItOGM2MS0zYjFlZTVkYjE2MTg=|1601502218|575fe56b5136156c4ac03a5ed34b3b0c123ac991", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X180MjA3M2YzZS04M2ZiLTQxMWMtYTQyNS0yNWUwOTllNWEzNDA=|1612362979|a83ef17444b4b850abc52392376aaed2cda4fc75", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X180MjE0OGYxNS1hYWZmLTQ4NmMtODFlZC1mNmQwNGRkY2U2NmY=|1598609607|6bf9330020dcc1a924a2204ca5452143cec3df6b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X180MmYyOTViZC0yMjI4LTQzMmItODQ3OS1lODIzZWE4NTg1NTE=|1601502206|7990028ab5877231e4668d4d5bff5b7dc050960b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X180N2IxYjI0Yi1hMzJlLTRmNjAtODA3Zi1iMzg0NjJmYjA4YzQ=|1598476906|8961b53a8f773bb4050195abeb1fde892e0658f1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X180NTMwMWZiMy1iYjVhLTQzY2QtODYxOC01N2EzNjhjODMyNjc=|1598609620|c780147a905ab3abd529bc5adb95524a51d71abf", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X180NmRkZmIzZC1hZDhjLTRkNmUtYmMzNS1lNTBmMjhmOGUxOTU=|1601502222|b97554aaacbac333cd21697365a6a54e1cb3d14e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X180NmZmYTg3NC1hYzlkLTQ5MGUtODMzMy1mNmQ4YjBmYWEyMTM=|1612363630|20f1593634f9fc2b110ff62a9d0595271983c4ba", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X180NzBjYjVkNi1hOTUzLTRiOTktODExZS1lMTQzNjRmNzhjMmI=|1616989853|9be30c34322eaffdcad7608b13287cb95fd5b7b1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X180NzFmOGY2Yy1iMjk1LTQ3YTgtYjU4ZC1lOGMwYjk4MmEwMzA=|1601502207|c30ad62926156d7d9e5445c18338bdecd77934a1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X180ODhmMmYzOS1hOGViLTRjZGItYjc4Zi01YzRlMDI5ZDI5MjE=|1601502197|cc16642284d4297466eff9ccbf731c3383f80490", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X180YWU3OWQzMC0zOTllLTQxMWYtOTBlOS04YWRkZmNmYTk0MmY=|1601502221|4dfbc232906a9402ea3fb0b44d4474c024bb29ff", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X181MTU2NDVmYS0yZDM4LTQyY2YtYjY2ZS1jNGNhZGI1OGUxMzE=|1612363647|55eeb1ff7fa4f88c4379f2275aa6a2b02aa2d51f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X181MjM4ZTQwNS02YTgyLTQ5NTMtYTVjMi03NmUwMjM4MDYxNzM=|1598476896|cdf37c709609eccc49fd1a2f92d53ab22bf9b5aa", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X181MzdmMWI0NS1kMTMwLTQ3YTEtODM1Yi0yMmEzZTZhNjlmNGU=|1598609592|bb973f944cc45e21b5a7a019a4ef7e634b647105", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X181NTZjODk1OS1mNTkwLTQwZDgtYTVlMS1lNmYxNzE1YjIxNTI=|1598609591|c369b6fc86005e6099a457cc248f2cae4227965b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X181YmY5NmQxNC1iMjNiLTQ5MDktOTZmMy0wNDkxMzM2OTRhMWQ=|1598476893|8abe94c1ee84d5f9512e1087c95475cea102697c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X182M2VhNDcyYS1kYjIyLTRlYzktYTU5NS1jNGJlNGY5ZWM1Mjk=|1598476918|6132145449ef6515caf2f23bcd8b2e7b6081b9c5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X182MjA1ZTI5YS0xMDQxLTRmMjUtYjIwMy1kZGJlY2U3ODlkOWE=|1598609602|4afe8ba0b481b23c101b0d4f01d125f0d63bfd6e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X182OGZkNjJlMS00ZmMwLTQzMWEtOGVjNS03ZmNkMjZhYzM4ODc=|1612363655|bcdcd3582a09f308fc27837894081cd852b51b5c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X182OTM4YTU2Zi05M2U4LTRhOGMtYWYyOS03MTc1ZmUxODA1Zjk=|1601502181|6de09b5559124df495e41f3c4961d112f2340661", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X182OWFjMThiZi0xMWU5LTRlODEtOTM3NC04OTliMmNjN2Y4OGY=|1598476895|f174dda93e7732ecb00211d5b9aa9c2d95f93fe4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X182YjViOGU0Ni04Y2M2LTQ5ZjUtOTkzMi1iYjQ1Yzg1NzQyNjY=|1598476921|ca764a02cfa5b6fa4990cb1babee7a0b6bef411b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X182ZTE3ZTY0ZC03YzljLTRhNjEtYjFiMy02YzFjMzEzODY2ZDk=|1612363649|9891ac192e6b50db167f232aa6bf985c4f9f6651", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X183MDNiYmVmNC1iNzcwLTQ0ZGYtYjhkYi1mOWQwODM0MGM3Mzc=|1612363638|d91b44eb29963744157b8d7d322401249443358f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X183MTlmNWRhMC04YWNlLTQ5NmEtOGI2Yi1kNjk4YTIyMDk3Yjk=|1598609604|4b68949b10e96c43c7309ce27c2dda8ef2555f92", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X183NDJkYWFlMC0xZjdkLTRkM2QtYjlkYi01ODRhNjJkZDFmNTQ=|1601502194|ac0085790684fb2012cb43f70ee39a79b29f58f7", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X183NTkxMjJhYy03ZWU2LTRiYzItOTEwYS00NjExZjA3YjVlZWI=|1612363912|9fc07f6dd0e8fc7ef253c1871ce11941dee458b6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X184MzA3ODA3OC05MWFkLTQzOTktYjFhNi04NzUzMmI2OTg5NzE=|1598609583|99251bbf9be9b5ca7b6409befc00443b6cd5af12", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X184NTRkMjAxMy1iYzJlLTRiNWYtOGIzMC1iZGE1MWMxNTVmYzM=|1598476881|11a66ba38c76344681b47065f1889c2a1456165a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X184NzE0MmI4ZC1lMDZhLTQ2MDEtOTBlZS01MjJkMDUwYWI3Nzk=|1612362982|739541234db00e6396be323e82225057791b6942", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X184NzcxMzMyZi0zOWFmLTQ3ZjMtYmNjZC02MDliY2NhODdjYjQ=|1598476917|4a68e07814e744afd4908f4342fabdb1b808dab3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X184ODdiMDY1Ny1kMTI2LTQwZjQtOTFmMi1iMzYxYWM1MmIyNTQ=|1601502177|dd619ec2d4a10f667a3249d734adf6165623fade", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X184Y2EyZTEyMi0yY2E4LTQ4OWMtYWYwZS03ZDIyMjkxN2ZlYjY=|1598609600|aa469975d2e09b05fc632b6a43b2e5cf9efb5b56", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X184YTJlYjI5Zi1kNmMyLTRlNTAtOGYxNS01ZTE2YTg5MTlmMDc=|1598476903|4f6a4ecf1a253408cc58b74821b9cc1e0eb3c4b3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X184ZjkwYTgzZC05ZTM5LTQ0MmUtYTBkZi02N2NiYzA5YjZmZjg=|1601502212|5d71f392c2cd80c858f61b22fe84c11581893ab3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X185MDVmMGVkZi0zMTY4LTRhZTQtYWNmNi1hOWM4NGYzM2FmZDI=|1612363909|b07bf04cf178bd5b4d537ffb430c65599cde621d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X185MTBjMTM1Zi03MGZhLTQ1NTUtOGQzZC0yODllOGYxYjcwYTk=|1601502183|05e02bda1afb4889414e6b865099fbdf90144c86", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X185N2MwNDViZi02YmY2LTQ5ZTgtYTcyYy1kNjYzMTZlNTJjMGY=|1598398231|c4183a22fb1a36f41f1e97b652678cde3af26089", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X185NTJhMzlmMC01MjE0LTQ4ZTgtOTNlMC0zMDc1NGEyYzljZWY=|1598476911|c7dbba00a1630f92753f05b40680da4590fe88c0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X185NjI5OTc4NS0wODQ5LTQ5OTYtOGU3OS05NmViOTIyYzM0ZDY=|1601502189|9b2b0b4dbfd3b97398338ebe1026bce79c5f66be", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X185NjM2MWE1Mi00OTA4LTQ2NjYtODJjOC1jY2EzYzI1NmUxZDk=|1598397459|9eb8410272f4b7bdd3099afad9a8eaac004fd67d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X185YTI3MDk5OC00Mjg4LTQ0NzQtODA3NS1jMWQyOTYyYmY0NTI=|1601502220|dd2e55614df0d9e84129156a59694fe98626249e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X185YzlkOTdjYy1kMmYzLTRjZDYtYWU4Ny0zNDQzMTA1MjUyZjM=|1598609610|89ce403211d76b844101b0ae77b9825b7d893ba5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X185ZGFjYjdlYi1jYzJlLTQyNzctOGQ3MC0wOGQ4OGIyM2Y4N2U=|1601502202|319c3991741798898c2a91cd398a816b675d03aa", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X18wNTVmY2M2Yy05NTE4LTRhNTctYWE5MS1lOWE2MDlhZmZhYzY=|1598609584|00fadb00b235b112abae541c819bdfa6b5240bbf", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X18wY2UyOWYxOS04OTI5LTQ2MDMtYjkzMS0wYWIwY2E1MmE0YjA=|1598476878|8ed2ec8a62bb14317960c65848024d3da12d8426", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X18wYTI5MTUyMy0yNDIxLTQ3NTYtOGU1OS1kMzgyZjNjMTk1MmM=|1601502176|0d5baee9e7a8f25c27e71fe28ea97b1a87d1eac1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X18wYTQ5NDUyNS04NTg2LTRjZDEtOWJkYS0wNGY5ODFmNmRlZGQ=|1598476908|932ebbcc83b791df34419bf009343e217ca1bb8c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X18wZjE5MGEwMS04YTVkLTQzMjgtYjFlOC0wMDU1Nzg5ZjEzNzY=|1598476922|11c74294867997bf598b5aaf814a45c89fa953a1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X18wZjcxYWFiOC0xOWJiLTQzMGEtODE1Zi05YzMzMTUwODk5ZTI=|1612363635|5872feb08bf02e71b773cc75cdcb0e9a74349092", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X18xMTM1ZWMyYi05YjQ1LTQwN2ItOWU4NS01ZjQ0NDllOGQzNzg=|1598476880|a84d918cf9cab3df7c8817951f3402f0df2534cb", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X18xNjI5MjYxZi1hYTkyLTQyMTItODI5NS1iNjYzMzBkMTc0OTY=|1598609595|29dc3a8b74a05ecf1ba5463d6c439b72e0810aa7", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X18xYzM0YjJlOS1iZDk1LTRkZTMtYTc2Yy05MTllMjU3YmM0MWU=|1598609614|e17acbbf92e14be43a239d706b0b34ddd4234c51", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X18xZDE4YTdlYi02ODk5LTQzNDYtYWRkZS1iN2JhZmQ2ZGMzMTE=|1601502200|b50f953f367d5a2b6700751590c6fee7ea61cedd", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X18xZmQ2NTViYy1hNjc3LTRlM2ItOGQ1Ny00ZjgwNWMxOGNjYzU=|1601502192|529742e9227d71cfe9a25fc6a8d480350f986c7f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X18yNjVmNjExNy03NjIyLTRhMWYtODIwYS1jYjFiMjQ0MTgxZTU=|1612363412|3ae410211a889d04237ef832a89682fac0f6f492", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X18yNjdjMTMxNS1kODYwLTRlYTgtYjNjNy05YTllNDczMzkxODk=|1612363660|9500c1bfdb475417d6d4c538758422496e6a1bde", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X18yODBiYzA3MC1jZGM1LTQxMzAtOGM0OC1lYjUyYmZmMTcyMWE=|1598476888|12f933d50975b664fb31a720b3cc71de7f398fe6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X18yOWJmNGQxNS1hY2FlLTQ0YjctYTkzYy00NGE4N2RhZTNhNmQ=|1598398230|a1e914693a4ae50c344464191f07fd00cafc6285", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X18yZWI5YmQyOS0wYmI4LTQ0Y2EtOWNmNy0yMDc4NDRhYTEzOGI=|1598398230|f7506349c1500cf074e831fba7ef2511066e52ff", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X18yZWY2NDJjOC0wYjkxLTQ1YjYtYjZmOS0xZWE1NGI0YWEwMTk=|1612363415|ee93d6d790853ecbada61b42a3cbaf3b50df7244", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cHN1X18zMzRiZjNiNS0xOGFkLTQ2MDEtYWUyMC1lNjEyODFjYjIwMjg=|1598609597|94aadc4b33d004552e5f30175290107f840e4279", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - } - ], - "downloaded_files": [ - { - "value": "6419f11e727f620019c38b901d0239e077a1820247a3429386c65474e0b6f605", - "count": 32, - "total_related": 43, - "prevalence": 0.7441860465116279 - }, - { - "value": "1f1851ea45175dfd9490310acd822fa980c2d766aa5701e7a44231d686b3bf3f", - "count": 24, - "total_related": 27, - "prevalence": 0.8888888888888888 - }, - { - "value": "4f1987847e23e9c9debb64481372b00fb0194a615154a7f87d2ac992dac70306", - "count": 21, - "total_related": 21, - "prevalence": 1.0 - }, - { - "value": "e1b08ef93178fd96fc2ae4f1998f441bf73b105a3fb62a9bf19dae4d55a2b9b2", - "count": 15, - "total_related": 20, - "prevalence": 0.75 - }, - { - "value": "63a6580d9ee8d5a632886585ab8f7ab59c87d4e2717181c191cac236cd1e1de4", - "count": 11, - "total_related": 11, - "prevalence": 1.0 - }, - { - "value": "aebe53d8cd6bd7cb29e0af6cae7df5c1e302d7cab15c714510ce151a5f658590", - "count": 7, - "total_related": 9, - "prevalence": 0.7777777777777778 - }, - { - "value": "d266e47dd456fd2d97947ced1677bbb9eba96ff0582096b508d9e930116ad9aa", - "count": 6, - "total_related": 6, - "prevalence": 1.0 - }, - { - "value": "dd49af65cd3c902f4d2acc8da2fc61a558dc1b2c11ba8876cb734d6768c295f9", - "count": 6, - "total_related": 8, - "prevalence": 0.75 - }, - { - "value": "37e75280f3ee7801b06a9ea2c72b4463de5c3fa877f08f6aaeed79815128bc8e", - "count": 6, - "total_related": 9, - "prevalence": 0.6666666666666666 - }, - { - "value": "79de30973b69aa4c44574a512e7820cc0a00f1241930ea361b7b0afcb1cccf2d", - "count": 4, - "total_related": 6, - "prevalence": 0.6666666666666666 - }, - { - "value": "a4c04448088d12494af1c1ff48dcbc11045f5f4674b681a6177a52e0af696274", - "count": 4, - "total_related": 2002, - "prevalence": 0.001998001998001998 - }, - { - "value": "ed6f6f2144998175c846a99d2a0faab5bf7b6ace318f0fe2dc4bfeaf4700c1d8", - "count": 4, - "total_related": 24084, - "prevalence": 0.00016608536787908985 - }, - { - "value": "5f18e872712ba761b5e74d9672813ef7c11bc996779053063b9cfd557bdb2352", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "e718083b67de582dc0a7dbedea0e1bc4c9847fcf235071a78f0e3015ab886d3f", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "ed06fc8b097fad7db2908265afecb3232deff5baca29ea8438df55cefc01dea9", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "c6ed4f5b1f3952bff700a6d5755c0534aa9a222e566a206cf5c8149c8a377f7f", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "899b2da752ad50f525e364f0af930dec91a128effbe8bb601803226604038d5b", - "count": 2, - "total_related": 6, - "prevalence": 0.3333333333333333 - }, - { - "value": "8a649bb66b2a3b014e226da08118439611f6fdc91c69949ad0e04c3cdd7b12b5", - "count": 2, - "total_related": 8, - "prevalence": 0.25 - }, - { - "value": "e1443334a5e7b905b15b2f7d2000d696d3dc3d968956c1953476ab8eb9e360f2", - "count": 2, - "total_related": 17, - "prevalence": 0.11764705882352941 - }, - { - "value": "d93d30e04aae04c0f8a867b2b7c349b80fe32e393373d97ab788b61c6967b2ad", - "count": 2, - "total_related": 49, - "prevalence": 0.04081632653061224 - }, - { - "value": "994e4d9bacbacb4ff7621c7f2b2abf8900994212bb808b08f7b41b1ac29c30e2", - "count": 2, - "total_related": 3520, - "prevalence": 0.0005681818181818182 - }, - { - "value": "766c1d6bcb81d3e983fb7adbc19c616d7fc01dafb7893738edc242e2adc59c07", - "count": 2, - "total_related": 15407, - "prevalence": 0.0001298111248133965 - }, - { - "value": "059bbd9cb679779f4a1bdc953dd10dee88ad6dd510ce147bc5885ee06bf83ae9", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "05fd254df41265e931ce4c35c1def5ccc42c8b9de0070bdde5ebaa90c3727f15", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "10056ba4bd97e7f1e3a5ab742addac29597a6ecd40289e720985fca9e1435697", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1738bf0854c7ad33855c173dda85e386100892ce79ba73407fca2465ea0afb29", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "18977ffa1d19ceca67c5afb50e60078380ece9bb1e10f33bff74c7c97aad95bd", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1bf991c4d81feb70a31afd77b6b70217fe46bdf506e525aea641aebc24401087", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "24c4ffb5dcd39306042eddda28519c1b962756d405f0f2b4d386ceee1c6bee86", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "2727e1775588fee0f9e6d69460338cb526a8d0bb34c5d9df6e4609d1b3d56386", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "6f9b6fad34a07d1c2321bd281e8333fbef39329307be4bbb00cf1196577933de", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "7b68cf23354c876f8087b99efc4f6ff40dadf2bcf7c39dd2e8d84beb602c3d93", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "889cc2f9cd7bcddec734976959f793f530ddb1dac839a99cbf032a52fc4c7783", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "8935155b4d1f5c1d385caa01a2a0b3e88f3403f015a42e3001fda0b6dabd84d2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "9080f87a27c57feae977e15960aa4215cc3092474bd780ce8cbcdc57858c07a8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "9b46ee407989c21ad5d2a62ce1d32f5c9e52aee04fbd1a816ad5b26db5943659", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "afa2ff0e46d0f2485115dedd5aef6fee4421f618c414951d63a3d4c63715eb65", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "b2da30969ce002c2295b5454ca4ba67724cf53252823eb23b07d50f55cad0d71", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "b4530809f22f5ff01e8adfa3f5719b7427bd022f1740d0b1dbc8da99bc9fa6bd", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "c1d518080285bc71343620f32f408533fae1e0348234f0be7be1bd0e6c83ff2d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "c5d793efe8861adff03bbe9a5b5f4206b5d84b19549a2a4e028bc7785c4e3ee9", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "ca2c4e51e9cbb0bd8a43a593ed0d0d68b8799cc4e0e090e5998370c362051cba", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "ca96ee8738184d1988d27801bdece3c6ae91496565476e3c56d185ff5aae6ebe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "dd84a9e10b7f04ba6ca8f6f839292ff2b439fd3b2fef5c97a25c52fa45ad797d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "f680637e7895b353a38e3d5a606e7c8bf66874455237ddbbddf9adc9a3076981", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "fb7c2cc23af35ba810b5cd2a450bc01be8a22ac168aed6c16a1debcf873bc72d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cadd48debc8640828d9c119789666e3402d3f6fc4f98519c6024b9b03c09e598", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "ccdddfebb725c75668958401c296d060e3035a9dd9d304dada258d3515c010db", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "0251e93999f120d31b70c2b99a45ab36785c22e7c7067b9bb32c3531efd86b2a", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "cce2575f8a0406a2ac98c87e17f20c4a82c9fb1f7370b9a57d0d886e41b0d26f", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "e73d8dd18666e55cd47255b8adc26748be8907f6fcd9d2a45eb2c9337b830159", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "9fda3e5c67b63a784c1651c49ed49b4a565e29ac4b026186c442ad7a2578d6ae", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "b57dd6433f6ae3a8c0a8d555cdd2998ac9c3deb277378120d07da51539889c84", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "3c60ed5292a231aa1010565f3aa1f2ae32d43eed677a064000db388c52badaa2", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "b7140094775a33a7a3c781509ac244329d903e2e06f6b456c4b0b4f58a304956", - "count": 1, - "total_related": 58, - "prevalence": 0.017241379310344827 - }, - { - "value": "9e65307beeff44ef2548eabf897ae52382930923c74aa9ca1c3f9b857ed871c7", - "count": 1, - "total_related": 105, - "prevalence": 0.009523809523809525 - }, - { - "value": "669bb658059b0d13e583d42c2de2a8b0988a64c2febec0f8b47a963b9780d5a6", - "count": 1, - "total_related": 154, - "prevalence": 0.006493506493506494 - }, - { - "value": "21010f823005d26b7ab0dba77db368c2d1c4fb9b939b7dbc6c97450541b60b9a", - "count": 1, - "total_related": 1214, - "prevalence": 0.0008237232289950577 - }, - { - "value": "b22a479c3b1c5dff14526d6f3004b71eaf62af18dde0386d89d44ba965955b20", - "count": 1, - "total_related": 1567, - "prevalence": 0.0006381620931716656 - }, - { - "value": "83c945c6dbafdb7d8448848d2957ca71bf172117b459e8be35b76de92d0f072f", - "count": 1, - "total_related": 1673, - "prevalence": 0.0005977286312014345 - }, - { - "value": "33c1c92944a084e89ac8cbfe15da3c741575cbddd50a0301b946fb6da8441a93", - "count": 1, - "total_related": 1795, - "prevalence": 0.0005571030640668524 - }, - { - "value": "f434e4bfd4932da1621fe1a5dc44d923ea30d42d70cab656b1e80aae124da340", - "count": 1, - "total_related": 10949, - "prevalence": 9.133254178463786e-05 - }, - { - "value": "4528209b26ac18543eac46381a27150e0d145fd8537514b701b44339e9c66671", - "count": 1, - "total_related": 11511, - "prevalence": 8.687342541916427e-05 - }, - { - "value": "0cd6aed5d21ae37310b3c4e0facf48009005018bf4402fbcda1cb66d69b03346", - "count": 1, - "total_related": 29303, - "prevalence": 3.412619868272873e-05 - }, - { - "value": "77df749f6bbe85442500437f7e798f46b9635da344811ae3b4bf7d43048ee9bb", - "count": 1, - "total_related": 30574, - "prevalence": 3.27075292732387e-05 - }, - { - "value": "e14487407359a2b8c009bbaab7656357d5a9f315948ef97181e8e41711411593", - "count": 1, - "total_related": 57786, - "prevalence": 1.730522964039733e-05 - }, - { - "value": "b16e15764b8bc06c5c3f9f19bc8b99fa48e7894aa5a6ccdad65da49bbf564793", - "count": 13, - "total_related": 100000, - "prevalence": 0.00013 - }, - { - "value": "982b986bb578e137f062099427a8caec3c501c84a9e4b22369ebd2badec42fe7", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "9ec2f0698f1c3497de39a192dd1c3f3e4506ff1a84dbf85082344297dc52e681", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "0f3a07f36d6bddee418f7d7548bc165b09817e10764a359d2773388cdec9ff8a", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "8437bd0ef46a19c9a7c294c53e0429b40e76ebbd5fe9fd73a9025752495ddb1c", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "887c8ada6058f01125a5131f1c495ba5f0171b2c40466ea824494403b87c1a22", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "cbf1fdfdb7257daf8b0905d94bd04e2829c502c9c01b1d96bb979069e2ebc895", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "dc1d54dab6ec8c00f70137927504e4f222c8395f10760b6beecfcfa94e08249f", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "domains": [ - { - "value": "cloud.dnx.capital", - "count": 21, - "total_related": 42, - "prevalence": 0.5 - }, - { - "value": "bankofamerica.us.org", - "count": 20, - "total_related": 31, - "prevalence": 0.6451612903225806 - }, - { - "value": "welcome.newcoming.cfd", - "count": 14, - "total_related": 25, - "prevalence": 0.56 - }, - { - "value": "on-global.xyz", - "count": 12, - "total_related": 20, - "prevalence": 0.6 - }, - { - "value": "docs.azurehosting.co", - "count": 12, - "total_related": 23, - "prevalence": 0.5217391304347826 - }, - { - "value": "cloud.espcapital.pro", - "count": 12, - "total_related": 24, - "prevalence": 0.5 - }, - { - "value": "share.bloomcloud.org", - "count": 12, - "total_related": 54, - "prevalence": 0.2222222222222222 - }, - { - "value": "info.publicvm.com", - "count": 11, - "total_related": 18, - "prevalence": 0.6111111111111112 - }, - { - "value": "it.zvc.capital", - "count": 10, - "total_related": 16, - "prevalence": 0.625 - }, - { - "value": "www.googlesheetpage.org", - "count": 10, - "total_related": 40, - "prevalence": 0.25 - }, - { - "value": "support.online-meets.store", - "count": 9, - "total_related": 10, - "prevalence": 0.9 - }, - { - "value": "verify.azure-protect.online", - "count": 9, - "total_related": 15, - "prevalence": 0.6 - }, - { - "value": "arm.texchi.xyz", - "count": 9, - "total_related": 17, - "prevalence": 0.5294117647058824 - }, - { - "value": "offerings.cloud", - "count": 9, - "total_related": 19, - "prevalence": 0.47368421052631576 - }, - { - "value": "share.stablemarket.org", - "count": 9, - "total_related": 48, - "prevalence": 0.1875 - }, - { - "value": "file.fclouddown.co", - "count": 9, - "total_related": 51, - "prevalence": 0.17647058823529413 - }, - { - "value": "support.video-meeting.site", - "count": 8, - "total_related": 10, - "prevalence": 0.8 - }, - { - "value": "fuzhifei.online", - "count": 8, - "total_related": 11, - "prevalence": 0.7272727272727273 - }, - { - "value": "sharemanage.elwoodasset.xyz", - "count": 8, - "total_related": 24, - "prevalence": 0.3333333333333333 - }, - { - "value": "avid.lno-prima.lol", - "count": 8, - "total_related": 28, - "prevalence": 0.2857142857142857 - }, - { - "value": "cryptyk.ddns.net", - "count": 7, - "total_related": 10, - "prevalence": 0.7 - }, - { - "value": "support.video-meets.online", - "count": 7, - "total_related": 11, - "prevalence": 0.6363636363636364 - }, - { - "value": "secure.azure-protection.cloud", - "count": 7, - "total_related": 12, - "prevalence": 0.5833333333333334 - }, - { - "value": "cdn.onlinedocview.biz", - "count": 7, - "total_related": 13, - "prevalence": 0.5384615384615384 - }, - { - "value": "app.aixstore.info", - "count": 7, - "total_related": 17, - "prevalence": 0.4117647058823529 - }, - { - "value": "product.onlinedoc.dev", - "count": 7, - "total_related": 21, - "prevalence": 0.3333333333333333 - }, - { - "value": "www.docusign.agency", - "count": 7, - "total_related": 27, - "prevalence": 0.25925925925925924 - }, - { - "value": "www.datacentre.center", - "count": 7, - "total_related": 33, - "prevalence": 0.21212121212121213 - }, - { - "value": "meet.twosigmacap.com", - "count": 6, - "total_related": 6, - "prevalence": 1.0 - }, - { - "value": "ps.azurehosting.co", - "count": 6, - "total_related": 9, - "prevalence": 0.6666666666666666 - }, - { - "value": "cloud.anobaka.info", - "count": 6, - "total_related": 13, - "prevalence": 0.46153846153846156 - }, - { - "value": "indeed-ministry.com", - "count": 6, - "total_related": 14, - "prevalence": 0.42857142857142855 - }, - { - "value": "drive.cloudplus.one", - "count": 6, - "total_related": 23, - "prevalence": 0.2608695652173913 - }, - { - "value": "googleservice.xyz", - "count": 6, - "total_related": 211, - "prevalence": 0.02843601895734597 - }, - { - "value": "support.general-meet.site", - "count": 5, - "total_related": 6, - "prevalence": 0.8333333333333334 - }, - { - "value": "web.interzoom.us", - "count": 5, - "total_related": 6, - "prevalence": 0.8333333333333334 - }, - { - "value": "cloud.anri.us", - "count": 5, - "total_related": 7, - "prevalence": 0.7142857142857143 - }, - { - "value": "floriventures.linkpc.net", - "count": 5, - "total_related": 7, - "prevalence": 0.7142857142857143 - }, - { - "value": "word.azurehosting.co", - "count": 5, - "total_related": 7, - "prevalence": 0.7142857142857143 - }, - { - "value": "zoom.communicationhub.us", - "count": 5, - "total_related": 8, - "prevalence": 0.625 - }, - { - "value": "googleservice.icu", - "count": 5, - "total_related": 9, - "prevalence": 0.5555555555555556 - }, - { - "value": "in-zoom.us", - "count": 5, - "total_related": 9, - "prevalence": 0.5555555555555556 - }, - { - "value": "web.commoncome.online", - "count": 5, - "total_related": 11, - "prevalence": 0.45454545454545453 - }, - { - "value": "autoserverupdate.line.pm", - "count": 5, - "total_related": 13, - "prevalence": 0.38461538461538464 - }, - { - "value": "key.sharedrive.ink", - "count": 5, - "total_related": 18, - "prevalence": 0.2777777777777778 - }, - { - "value": "signverydn.sharebusiness.xyz", - "count": 5, - "total_related": 18, - "prevalence": 0.2777777777777778 - }, - { - "value": "share.devprocloud.com", - "count": 5, - "total_related": 19, - "prevalence": 0.2631578947368421 - }, - { - "value": "cloudshare.jumpshare.vip", - "count": 5, - "total_related": 28, - "prevalence": 0.17857142857142858 - }, - { - "value": "doc.filesaves.cloud", - "count": 5, - "total_related": 32, - "prevalence": 0.15625 - }, - { - "value": "j-ic.co.intneral-document-he-gr-me.run.place", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "meet.rwa-team.video", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "zoom-client.xyz", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "ignite.onlinemeet.pro", - "count": 4, - "total_related": 5, - "prevalence": 0.8 - }, - { - "value": "api.zoom-sdk.us", - "count": 4, - "total_related": 6, - "prevalence": 0.6666666666666666 - }, - { - "value": "civ.team-meeting.net", - "count": 4, - "total_related": 6, - "prevalence": 0.6666666666666666 - }, - { - "value": "cloud.sharedrive.ink", - "count": 4, - "total_related": 6, - "prevalence": 0.6666666666666666 - }, - { - "value": "download.azure-drive.com", - "count": 4, - "total_related": 6, - "prevalence": 0.6666666666666666 - }, - { - "value": "kustovc.publicvm.com", - "count": 4, - "total_related": 6, - "prevalence": 0.6666666666666666 - }, - { - "value": "xn--rxamia.com", - "count": 4, - "total_related": 6, - "prevalence": 0.6666666666666666 - }, - { - "value": "journal.linkpc.net", - "count": 4, - "total_related": 7, - "prevalence": 0.5714285714285714 - }, - { - "value": "metaschool.video-meets.online", - "count": 4, - "total_related": 7, - "prevalence": 0.5714285714285714 - }, - { - "value": "perseus.bond", - "count": 4, - "total_related": 7, - "prevalence": 0.5714285714285714 - }, - { - "value": "zoom.usweb01.us", - "count": 4, - "total_related": 8, - "prevalence": 0.5 - }, - { - "value": "azure.online-protection.cloud", - "count": 4, - "total_related": 10, - "prevalence": 0.4 - }, - { - "value": "cloud.azure-company.net", - "count": 4, - "total_related": 13, - "prevalence": 0.3076923076923077 - }, - { - "value": "docsend.camdvr.org", - "count": 4, - "total_related": 13, - "prevalence": 0.3076923076923077 - }, - { - "value": "open.googlesheetpage.org", - "count": 4, - "total_related": 14, - "prevalence": 0.2857142857142857 - }, - { - "value": "support.video-meet.team", - "count": 4, - "total_related": 15, - "prevalence": 0.26666666666666666 - }, - { - "value": "dockerstore.net", - "count": 4, - "total_related": 16, - "prevalence": 0.25 - }, - { - "value": "note.onedocshare.com", - "count": 4, - "total_related": 17, - "prevalence": 0.23529411764705882 - }, - { - "value": "azure.protection-service.cloud", - "count": 4, - "total_related": 19, - "prevalence": 0.21052631578947367 - }, - { - "value": "download.azure-service.com", - "count": 4, - "total_related": 22, - "prevalence": 0.18181818181818182 - }, - { - "value": "www.googledocpage.com", - "count": 4, - "total_related": 25, - "prevalence": 0.16 - }, - { - "value": "app.developcore.org", - "count": 4, - "total_related": 30, - "prevalence": 0.13333333333333333 - }, - { - "value": "www.googlesheet.info", - "count": 4, - "total_related": 48, - "prevalence": 0.08333333333333333 - }, - { - "value": "line.pm", - "count": 4, - "total_related": 1267, - "prevalence": 0.0031570639305445935 - }, - { - "value": "meet.globiscapital.co", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "meet.superstatefund.co", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "civ.biz-meeting.site", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "cloud.jumpshare.vip", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "innerteams.us", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "meet.capitalviabtc.com", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "careers.smbcgroup.us", - "count": 3, - "total_related": 6, - "prevalence": 0.5 - }, - { - "value": "daiwa.in-zoom.us", - "count": 3, - "total_related": 6, - "prevalence": 0.5 - }, - { - "value": "amctradinggroup.biz", - "count": 3, - "total_related": 7, - "prevalence": 0.42857142857142855 - }, - { - "value": "group.pro-tokyo.top", - "count": 3, - "total_related": 7, - "prevalence": 0.42857142857142855 - }, - { - "value": "meet.playgroundvc.capital", - "count": 3, - "total_related": 7, - "prevalence": 0.42857142857142855 - }, - { - "value": "circlecapital.us", - "count": 3, - "total_related": 8, - "prevalence": 0.375 - }, - { - "value": "meet.twosigmaventures.us", - "count": 3, - "total_related": 8, - "prevalence": 0.375 - }, - { - "value": "cloud.mufg.tokyo", - "count": 3, - "total_related": 9, - "prevalence": 0.3333333333333333 - }, - { - "value": "file.venturelabo.co", - "count": 3, - "total_related": 9, - "prevalence": 0.3333333333333333 - }, - { - "value": "global-pro.xyz", - "count": 3, - "total_related": 10, - "prevalence": 0.3 - }, - { - "value": "docs.gsheetpage.com", - "count": 3, - "total_related": 13, - "prevalence": 0.23076923076923078 - }, - { - "value": "dev.sslsharecloud.net", - "count": 3, - "total_related": 19, - "prevalence": 0.15789473684210525 - }, - { - "value": "docstream.online", - "count": 3, - "total_related": 19, - "prevalence": 0.15789473684210525 - }, - { - "value": "ny.silvergatehr.com", - "count": 3, - "total_related": 20, - "prevalence": 0.15 - }, - { - "value": "docs.azure-protection.cloud", - "count": 3, - "total_related": 43, - "prevalence": 0.06976744186046512 - }, - { - "value": "bit.ly", - "count": 72, - "total_related": 100000, - "prevalence": 0.00072 - }, - { - "value": "drive.google.com", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "onedrive.live.com", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - } - ], - "embedded_js": [ - { - "value": "3e07d1c91caa7fa01ef9222bdcea0f1e745405468dd3140725961347affa2306", - "count": 38, - "total_related": 42, - "prevalence": 0.9047619047619048 - }, - { - "value": "f68f20a7fe9562310cb20b05a5ed9f99119861301bde296d931a46f89731e51f", - "count": 38, - "total_related": 51, - "prevalence": 0.7450980392156863 - }, - { - "value": "54574af2c55419f25dda6b62ba361fc7a4359146ccbb467c3473ca686a0347f7", - "count": 38, - "total_related": 7987, - "prevalence": 0.004757731313384249 - }, - { - "value": "db1c393293dc76ef36fe7996d9743a22c7bd84ac7388b595d86ba9912f649eec", - "count": 38, - "total_related": 46969, - "prevalence": 0.0008090442632374545 - }, - { - "value": "a0a8e807a95539a2c8c5323a830e7ec6048396f13432e21228fbf47c6b2718dd", - "count": 23, - "total_related": 78395, - "prevalence": 0.00029338605778429745 - }, - { - "value": "5d5a4908393fb1b61bfdbd9d08000abf935ede30438918f80c25b8ccc156fc18", - "count": 22, - "total_related": 5193, - "prevalence": 0.004236472174080493 - }, - { - "value": "c83aa34b2bfa105226ba988be22dd64c3087d6be077c8fc6e683bac1756e2cc1", - "count": 22, - "total_related": 6226, - "prevalence": 0.0035335689045936395 - }, - { - "value": "df7b4ba4baa7aa5443f88142285eaa8bc3d7ede8ab72854d19fbd5b497ddfa64", - "count": 21, - "total_related": 27, - "prevalence": 0.7777777777777778 - }, - { - "value": "aebe53d8cd6bd7cb29e0af6cae7df5c1e302d7cab15c714510ce151a5f658590", - "count": 14, - "total_related": 15, - "prevalence": 0.9333333333333333 - }, - { - "value": "1f1851ea45175dfd9490310acd822fa980c2d766aa5701e7a44231d686b3bf3f", - "count": 11, - "total_related": 11, - "prevalence": 1.0 - }, - { - "value": "5ede7abd188b3bb0828cfc91bb3b54d0d3eb630c78205214687a5dc566c538a6", - "count": 10, - "total_related": 24471, - "prevalence": 0.00040864696988271833 - }, - { - "value": "5911b2eebb062646ff5945fd3e5bf3212cc5a87694318fd0e481665c1e49c9ec", - "count": 8, - "total_related": 11, - "prevalence": 0.7272727272727273 - }, - { - "value": "983e781e5827731d09b025640172dab5cfd6a80615c46626a77ea478e05c749f", - "count": 8, - "total_related": 181, - "prevalence": 0.04419889502762431 - }, - { - "value": "a40549f5234f8d7a6e55f17d05b5984bda19d34cb0940558cf4b5b97f8578511", - "count": 8, - "total_related": 259, - "prevalence": 0.03088803088803089 - }, - { - "value": "5f18e872712ba761b5e74d9672813ef7c11bc996779053063b9cfd557bdb2352", - "count": 6, - "total_related": 6, - "prevalence": 1.0 - }, - { - "value": "4f1987847e23e9c9debb64481372b00fb0194a615154a7f87d2ac992dac70306", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "f32e3306077f68fe6bd12e13020eadfe573915f822861f168a98bf6c9a64e961", - "count": 4, - "total_related": 9, - "prevalence": 0.4444444444444444 - }, - { - "value": "b76c1d2e43e20bee6db155a16a0da1e6048c883718ff82c8006434b5e55d4a15", - "count": 4, - "total_related": 229, - "prevalence": 0.017467248908296942 - }, - { - "value": "37d5d552eddfc294658c5cc1e494891106e893f5e894e2a0c27f3b69a9dd7ff7", - "count": 4, - "total_related": 310, - "prevalence": 0.012903225806451613 - }, - { - "value": "057b393005596fe96133cb59f24685a1c55889ba98ff34664d0d615d9e5b8231", - "count": 4, - "total_related": 497, - "prevalence": 0.008048289738430584 - }, - { - "value": "bb02884ea58c8b3dbf34007f591ba4f278bb7668d36ee3d4e83a7c051b1edd2a", - "count": 4, - "total_related": 758, - "prevalence": 0.005277044854881266 - }, - { - "value": "57b8ca9e00f370f6f36f9b598ee64964e9b95f9d01eb78c1e5f75a89b28835d5", - "count": 4, - "total_related": 2592, - "prevalence": 0.0015432098765432098 - }, - { - "value": "9442039513d08f0c9459b446fa9f96b1756fd47c888a6a464e853a50adbb1b82", - "count": 4, - "total_related": 3519, - "prevalence": 0.0011366865586814436 - }, - { - "value": "4ba00abfb7f2df03e1491267f3a831abf7f654762356758dac546f96d523ecb9", - "count": 4, - "total_related": 4109, - "prevalence": 0.0009734728644439036 - }, - { - "value": "6c93eaa915a45e410ab9103be6b732e2fd834e23592fb91bad3e8ee83fb2bc3c", - "count": 4, - "total_related": 4111, - "prevalence": 0.0009729992702505473 - }, - { - "value": "da010877da0052284b046c50d99f4ba165a1d45254233ea27478b827dc196ac3", - "count": 4, - "total_related": 4258, - "prevalence": 0.0009394081728511038 - }, - { - "value": "341d69d4123e5baf54dc2beab632e361767740ec6081cb6a17fe1010db7e317e", - "count": 4, - "total_related": 4557, - "prevalence": 0.0008777704630239193 - }, - { - "value": "026f9bd23f38ce042caabe0523782c0102177e37263d0a3c5bbfaf7a909d336c", - "count": 3, - "total_related": 99, - "prevalence": 0.030303030303030304 - }, - { - "value": "9a539e53f88faf51e3086d99cfbbf85d7c49677056aaffa5b00c47a1d034a258", - "count": 3, - "total_related": 516, - "prevalence": 0.005813953488372093 - }, - { - "value": "b1f2918a0490a2238c74f541ad71f557d0121adffc2304641c0e73bb166a1108", - "count": 3, - "total_related": 807, - "prevalence": 0.0037174721189591076 - }, - { - "value": "0dda8fdb5ca88763b73cfc4bac99f365ac9c90154cc48df40ba83c3aefd4d372", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "41b667909c3ddc00648b430f8b1b84c0dd5f409cdc4ca9890b91d24e90838da1", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "8c49a06fdfeb4b1f979ac6b6ab3609433318688f13e23275c48ff92f47a8bb70", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "b6c663de4f382e23fa4c10a271636ed15611c5ba4b53a36c6265eb464393e9b0", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "c6ed4f5b1f3952bff700a6d5755c0534aa9a222e566a206cf5c8149c8a377f7f", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "59762bce17ef78bb8a017588ec441ceba12c020225fcbb316bf10663734b4808", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "d576f42810cfce332e4df4e4b8a07e44d45d610967743d7e4bb59adf52de4ae9", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "3a6903189ab2e3388c8d042f09002e98ee2e6bd34899584ea0f8831e5eca6848", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "88b4bfdb0597349a9af286b15aebf80b09ebd5747d6b0797927c5e6834078494", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "d0df0d65947f38a339eb69351e027be83bf2be0b0587fc42eda3e5b238b7f072", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "59910166ea0ace77aba5fa93b606ad93992decd688d2defb322aaf4eb247d4eb", - "count": 2, - "total_related": 52, - "prevalence": 0.038461538461538464 - }, - { - "value": "6e5f9c7ce4bd6153313bd4b8157b718112f6be0f429b21b49c35f37ffb30b008", - "count": 2, - "total_related": 78, - "prevalence": 0.02564102564102564 - }, - { - "value": "4afc290cc22b0da55fa00a89283d69f462d8bebc8ed06dfd63d3388c969be3a4", - "count": 2, - "total_related": 21155, - "prevalence": 9.454029780193807e-05 - }, - { - "value": "33f596d90adab57bfa28cff9fb915f1cf7b71891222750823557002ce1d551d2", - "count": 2, - "total_related": 26041, - "prevalence": 7.680196613033293e-05 - }, - { - "value": "62ea70774378d3117275cb0229fef0963728b31cebb0a9cf23b93258e14dde82", - "count": 2, - "total_related": 36167, - "prevalence": 5.529902950203224e-05 - }, - { - "value": "4e3af5f197afb737e00e7207984d778d6683815ffa1fda9a42eda826544d85b3", - "count": 2, - "total_related": 39926, - "prevalence": 5.0092671442168013e-05 - }, - { - "value": "a0d204d4f59032727f3a3782262478272c5198f969774c26685fe7b254d61344", - "count": 2, - "total_related": 39926, - "prevalence": 5.0092671442168013e-05 - }, - { - "value": "8f0b7817088a6bdf13a43c49b6970236635411f5568534a8587ee3c188e719f6", - "count": 2, - "total_related": 40450, - "prevalence": 4.9443757725587144e-05 - }, - { - "value": "fc20184024142aa59e523e7f78403a38dc192297fe81c5549cd4573d0ba187c2", - "count": 2, - "total_related": 42163, - "prevalence": 4.743495481820553e-05 - }, - { - "value": "43330aded0f4267f5ee70e20c6374ba6965a6367f8c0b15efcf4b9a4cfac986d", - "count": 2, - "total_related": 44506, - "prevalence": 4.493776120073698e-05 - }, - { - "value": "f9b2277cb79f77cfa984fc713bda988da89f9699509a30eee234404efa79b32e", - "count": 2, - "total_related": 52484, - "prevalence": 3.810685161191982e-05 - }, - { - "value": "0e15a24962923ad85e5d4a9f88296aa65c429af73a1c0febdd9a231d0371cd12", - "count": 2, - "total_related": 82509, - "prevalence": 2.4239779902798483e-05 - }, - { - "value": "a86df3be0eff7f90991f057c21e6907c16391e6f8cd0a4773cc93d9401e9dfdb", - "count": 2, - "total_related": 88309, - "prevalence": 2.264774824763048e-05 - }, - { - "value": "009ac7003563f12c275fcf0ee1e0a613e4f8efa5de500f5df0ba77644e5a0e31", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0180ba4f6790c1a44b290df8449d3eb2e72a0dcc99539ec2ddefe1dd5c309458", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "04bcab88a9f88660700dce9843b62360588d747e81e9e6949732015f83e14c73", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "078c4c0bf669e0b7f245b4fdf4f26373c318d2d15fc5eecb2bc4f8c81da6096c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0909c3666a7263e00016e3292a245a487d83adfa46d048537a454ef66a8ec4ac", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0aa9d69168841f19c560472a71677aaa99f5acb14d1d96a7a1f0f17b7cdbfa78", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0aeb441a1607abbcddb7e5312c79aa5c48cb12b4000a87a8a4ad30a8c36ef2d6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0d5ae63bb2823bab89dcfe7fa575dd3a216d0f56907cab0ecf8e3d2b7d5886de", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0fef48b1b4f958cee24e0f2f139fa81c9aff32f378e9e68e7f38996feab02685", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1a9fa629658d0ad81744837922c8b833a5956f9cf0a210a3326253495e592177", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1dc8a43ca7c85dfaf7a1c8f8050e99b9b8792358d0c2f22336380fd339fee230", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1e3c2e87f5f523a03bd70bc99c3e0585e6d6ca39cefbbff12ff793df63ee2e89", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "206edb08bb4c6c7ac9531354b21d6c23859e18d9d829a8df8d4e10336e3e04e2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "216fec46a131b69a45c9422ccf4069997c4b5f410b6d0e8896887625f6e9d9f7", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1b9fdd41a54ef0ad8a7c029ed4cd043fdc59cadfa7e9430430dd3961478cca9d", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "1fd468446ac4ffd66cce3215407f6af48db7f48b89513f06e66924d24f706a01", - "count": 1, - "total_related": 22, - "prevalence": 0.045454545454545456 - }, - { - "value": "1643c33edc571232c963762e023c05647cae0d22bc1e7f4b6c1343ebdefa48fa", - "count": 1, - "total_related": 50, - "prevalence": 0.02 - }, - { - "value": "2065b85975bb63cb9b994d080211c9bce8da6c1753e64833fc2c9f67cf8a7db2", - "count": 1, - "total_related": 4172, - "prevalence": 0.00023969319271332693 - }, - { - "value": "185881248aa3f56ad27d04fba627481b19e675a984e95bfcaab481d0ccfa7dff", - "count": 1, - "total_related": 4999, - "prevalence": 0.00020004000800160032 - }, - { - "value": "14caf00a5f9a8b3cde967ee9fa229cea0f654c72e47b82862aae43fc0328a26b", - "count": 1, - "total_related": 14389, - "prevalence": 6.949753283758427e-05 - }, - { - "value": "1dcf3b0e1f92d593867169c5ee26771d2f3b77f552eee6c73beba961b91d61b7", - "count": 1, - "total_related": 20189, - "prevalence": 4.9531923324582696e-05 - }, - { - "value": "06cb3f46b9aaef48a1145ee400f54476f3721979d47e8e0df87b339e86f84102", - "count": 1, - "total_related": 34929, - "prevalence": 2.862950556843883e-05 - }, - { - "value": "21758ed084cd0e37e735722ee4f3957ea960628a29dfa6c3ce1a1d47a2d6e4f7", - "count": 38, - "total_related": 100000, - "prevalence": 0.00038 - }, - { - "value": "4b4969fa4ef3594324da2c6d78ce8766fbbc2fd121fff395aedf997db0a99a06", - "count": 38, - "total_related": 100000, - "prevalence": 0.00038 - }, - { - "value": "a9705dfc47c0763380d851ab1801be6f76019f6b67e40e9b873f8b4a0603f7a9", - "count": 38, - "total_related": 100000, - "prevalence": 0.00038 - }, - { - "value": "0833b2e9c3a26c258476c46266e6877fc75218625162e0460be9a3a098a61c6c", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": "2d9b07a0704d92dda4deae88bc582aeb659923c8d44d0e7362e13cb28d88d250", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "42591f96b9a41a7e2e5ecd0240dd7fecdcf03ef8454b57c68f08697474a4b579", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "540bc6dec1dd4b92ea4d3fb903f69eabf6d919afd48f4e312b163c28cff0f441", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "c06ec88641687c7f653a3e6b3a601130400dc1698afe67c531d693406cd99440", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "c3f831fe1717c6d76a8950ac5e7dc88ceee7440d079b11584be5c6c5b3269e77", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "bf501fe693bbbfdd3cc98546a1aad9f6111ac826f59ef1ee37da5101497dc9b7", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "081ae9baaacc857c1c2cb51de6dbd0e1eb811c2761ef01a50df373f2f6eefe22", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "0a34a87842c539c1f4feec56bba982fd596b73500046a6e6fe38a22260c6577b", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "160a426ff2894252cd7cebbdd6d6b7da8fcd319c65b70468f10b6690c45d02ef", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "175f65341d1e1d4734ccd10be113b649c286d4cf8c94307e5514632a84db743f", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "18396e46ad65b630911ed42e114895cc4d5e02e7f0461f27bf074b2e91c0ccfe", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "24f07d59fd81bfe363668ba707eda0644c3b156f000da1b110ff362ca8214c57", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "6f9ca7345dc51a3171d9ad0f7cf96e425c3d2a770e2bc9b947773b1e82aa6d36", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "71ef7c16d75da75a5d417df75ed72144bc5ec65a9c0429b7dee0988adc3e8d29", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "765d1654297c8d730165fbe731eca09c1d3e6efaa9e7006aaa567c5a2f7994ba", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "880cd2ae80b6bba8fa9b8e1231c309159fad7568308d6976735069eba9b64fec", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "dcda57bf6c8a157067fb187a710a309b2ca187d5cffafab9611743507544da39", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "fc9a93dd241f6b045cbff0481cf4e1901becd0e12fb45166a8f17f95823f0b1a", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "0925e8ad7bd971391a8b1e98be8e87a6971919eb5b60c196485941c3c1df089a", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "18d9d050df7998e9bf7818ee86fe38893c4641d4e8f077ef6220b6b0ca0a4eaf", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "favicon_dhash": [ - { - "value": "455555610d55555d", - "count": 5, - "total_related": 94106, - "prevalence": 5.313157503241026e-05 - }, - { - "value": "30e0e4d0c8ccc4e4", - "count": 4, - "total_related": 9, - "prevalence": 0.4444444444444444 - }, - { - "value": "e8ca234d4d3baae8", - "count": 3, - "total_related": 58, - "prevalence": 0.05172413793103448 - }, - { - "value": "a2484e362fa50ca2", - "count": 3, - "total_related": 982, - "prevalence": 0.003054989816700611 - }, - { - "value": "c2f8f031d1d0ecf0", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "33ccb29696e0cc32", - "count": 2, - "total_related": 57024, - "prevalence": 3.507295173961841e-05 - }, - { - "value": "6161c4cc8cf6e0c4", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "3369c8b2b2c86933", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "24f0cc64e6c488ca", - "count": 1, - "total_related": 17, - "prevalence": 0.058823529411764705 - }, - { - "value": "e35813555537c612", - "count": 1, - "total_related": 33, - "prevalence": 0.030303030303030304 - }, - { - "value": "e896624ccd3996e8", - "count": 1, - "total_related": 120, - "prevalence": 0.008333333333333333 - }, - { - "value": "e0c89c3b3b9cf072", - "count": 1, - "total_related": 124, - "prevalence": 0.008064516129032258 - }, - { - "value": "9671f0eafb9aa411", - "count": 1, - "total_related": 28689, - "prevalence": 3.485656523406183e-05 - }, - { - "value": "f0c48e3969cadae0", - "count": 1, - "total_related": 37424, - "prevalence": 2.672082086361693e-05 - }, - { - "value": "21414963c9a4a449", - "count": 1, - "total_related": 58663, - "prevalence": 1.7046519952951604e-05 - }, - { - "value": "e08c9a392bdadaf0", - "count": 77, - "total_related": 100000, - "prevalence": 0.00077 - }, - { - "value": "68cc8a392bcaca70", - "count": 47, - "total_related": 100000, - "prevalence": 0.00047 - }, - { - "value": "d4a2f8d0d0f182d4", - "count": 14, - "total_related": 100000, - "prevalence": 0.00014 - }, - { - "value": "2424242424242424", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": "f08c9a392bdadaf0", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "c0cc9efcc086c6f0", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "e88e931939338ee8", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "4869e4cc8ec9e9c4", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "a2a2a2a2a2a2a2a2", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "c03ae59890e12cd0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "c081c4e4b4980107", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "c082c4e4b48c82c0", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "e0cc9abb23a6ccf8", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "favicon_raw_md5": [ - { - "value": "a64ef4e756a8d0d2ed7a7ee8dc39a310", - "count": 5, - "total_related": 94106, - "prevalence": 5.313157503241026e-05 - }, - { - "value": "d798d5b7672bcb9777a792f002d29986", - "count": 4, - "total_related": 9, - "prevalence": 0.4444444444444444 - }, - { - "value": "e84040906a731400d7933980b56d26c1", - "count": 3, - "total_related": 30, - "prevalence": 0.1 - }, - { - "value": "891e9a9607b09bdcd9b71bd05691f0dd", - "count": 3, - "total_related": 740, - "prevalence": 0.004054054054054054 - }, - { - "value": "ea5deece3fec5daead44151eaa97c284", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "ce0260c17b7f1dbdb7726ef7e8fd8c7a", - "count": 2, - "total_related": 43239, - "prevalence": 4.625453872661255e-05 - }, - { - "value": "9c91c255e6b97151401e2006bdde8cad", - "count": 2, - "total_related": 57023, - "prevalence": 3.507356680637637e-05 - }, - { - "value": "8ce44c17b009f0bf1f81cecd58972a8b", - "count": 2, - "total_related": 84228, - "prevalence": 2.3745072897373797e-05 - }, - { - "value": "4437c906077600f12297b30fac0496bf", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "a9c5f68e7b11aed19a7b0e39747d7ddc", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "d3f602b578974182f61a34876b0a1344", - "count": 1, - "total_related": 17, - "prevalence": 0.058823529411764705 - }, - { - "value": "e0c2d31c985aaeaf608d3e0500f39829", - "count": 1, - "total_related": 29, - "prevalence": 0.034482758620689655 - }, - { - "value": "6e6d0753d1e5c8186583fb3ead48b3cd", - "count": 1, - "total_related": 120, - "prevalence": 0.008333333333333333 - }, - { - "value": "b65eb5319d429dbba0cad06ea2729a52", - "count": 1, - "total_related": 124, - "prevalence": 0.008064516129032258 - }, - { - "value": "bd1a47f2a26158af38f5ab0e783a313f", - "count": 1, - "total_related": 28615, - "prevalence": 3.4946706272933774e-05 - }, - { - "value": "ff2471447ae22d3893b9ab755042adca", - "count": 1, - "total_related": 37424, - "prevalence": 2.672082086361693e-05 - }, - { - "value": "26aa67930614edc5e27b5f080743e715", - "count": 1, - "total_related": 58661, - "prevalence": 1.7047101140451067e-05 - }, - { - "value": "10287e015f912bd4952db8aa86c0022b", - "count": 77, - "total_related": 100000, - "prevalence": 0.00077 - }, - { - "value": "423f45ef2d8751084ba7c633d0c037f5", - "count": 47, - "total_related": 100000, - "prevalence": 0.00047 - }, - { - "value": "daefa8ad6cd307683e9b4bb2a2ce7186", - "count": 14, - "total_related": 100000, - "prevalence": 0.00014 - }, - { - "value": "a1112fa6a8056cae16df75c687033022", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "c9ac92eecdcf2fd9ed909a82ce81cb8d", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "ca8fa47ba1bbc14446b64d55a55ce87a", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "b4db2a4b6d91e0df5850a3fdcee9c8df", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "b93de97a3fd2820b82dee7bede9643f5", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "008b0d98aabf69c4bded122ab4318173", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "8c584a88c3fc48d6186d18673b6c34c9", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "0420337c301a063a2b87252070748d35", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "9f408ad234d000680f954579e5a62440", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "aa07959aa4e6a848b23c3314e1a5ffea", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "e8ddeff5fb0111b746c24009398374e2", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "html_titles": [ - { - "value": "Zoom Meeting", - "count": 160, - "total_related": 685, - "prevalence": 0.23357664233576642 - }, - { - "value": "Joining Meeting...", - "count": 21, - "total_related": 31, - "prevalence": 0.6774193548387096 - }, - { - "value": "porkbun.com | domain for sale", - "count": 8, - "total_related": 78945, - "prevalence": 0.00010133637342453606 - }, - { - "value": ".us.org", - "count": 4, - "total_related": 4201, - "prevalence": 0.0009521542489883361 - }, - { - "value": "Blockchain.com Wallet - Exchange Cryptocurrency", - "count": 3, - "total_related": 5650, - "prevalence": 0.0005309734513274337 - }, - { - "value": "j-ic.co.jp.internal-info.deck.line.pm", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "meet.twosigmacap.com", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "twosigmavc.work.gd", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "team-meeting.net", - "count": 2, - "total_related": 11, - "prevalence": 0.18181818181818182 - }, - { - "value": "googlesheet.info", - "count": 2, - "total_related": 18, - "prevalence": 0.1111111111111111 - }, - { - "value": "SITUS SLOT DEPO 10K \ud83d\udc8e Situs Viral Minimal DP 10.000 Gampang Menang", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "porkbun.com | expired domain", - "count": 2, - "total_related": 11459, - "prevalence": 0.00017453529976437735 - }, - { - "value": "One platform to connect | Zoom", - "count": 2, - "total_related": 32761, - "prevalence": 6.104819755196727e-05 - }, - { - "value": "192.119.64.43", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "192.119.64.43 | Go Away From Here", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Bitly | bit.ly/2LwMGCD", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Bitly | bit.ly/2O9lrNT", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Bitly | bit.ly/2vwLE0m", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "DACM Opportunities.docx - Google Drive", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cloud.blockchaintransparency.institute", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "docs-send.online\u00a0-\u00a0docs send Resources and Information.", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "innerteams.us", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "j-ic.co.intneral-document-he-gr-me.run.place", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "safe-meeting.site", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Blockchain Intelligence Group Opportunities.docx - Google Drive", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "Coming Soon - bnocjk.pro", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "Page not found \u2013 Reddinu", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "autoserverupdate.line.pm", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "internal.group.link-net.publicvm.com", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "nasho.xyz", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "support.meeting-zone.online", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "\u5b89\u5168\u72b6\u6001\u68c0\u67e5\u6307\u5357_signed.pdf - Google Drive", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "Joining meeting timeout", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "Profit and Loss Statement.xlsx - Google Drive", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "Security Bugs in rigs.pdf - Google Drive", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "europasec.dnsabr.com", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "tp-globa.xyz", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "Anchorage Digital Opportunities.pdf - Google \u00e3\u0083\u0089\u00e3\u0083\u00a9\u00e3\u0082\u00a4\u00e3\u0083\u0096", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "cloudshare.jumpshare.vip", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "wassbetaashh.pro", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "global-pro.xyz", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "zoom.ico (32\u00d732)", - "count": 1, - "total_related": 9, - "prevalence": 0.1111111111111111 - }, - { - "value": "stablemarket.org", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "zvc.capital", - "count": 1, - "total_related": 16, - "prevalence": 0.0625 - }, - { - "value": "Coming Soon - gtuhfra.pro", - "count": 1, - "total_related": 17, - "prevalence": 0.058823529411764705 - }, - { - "value": "password.txt - Google Drive", - "count": 1, - "total_related": 17, - "prevalence": 0.058823529411764705 - }, - { - "value": "ssimkolabazzooz.store", - "count": 1, - "total_related": 24, - "prevalence": 0.041666666666666664 - }, - { - "value": "Home | SMBC", - "count": 1, - "total_related": 25, - "prevalence": 0.04 - }, - { - "value": "jumpshare.vip", - "count": 1, - "total_related": 91, - "prevalence": 0.01098901098901099 - }, - { - "value": "Bad request!", - "count": 1, - "total_related": 2723, - "prevalence": 0.0003672420124862284 - }, - { - "value": "pCloud - 404 File not found", - "count": 1, - "total_related": 6418, - "prevalence": 0.0001558117793705204 - }, - { - "value": "\u4e09\u4e95\u4f4f\u53cb\u30ab\u30fc\u30c9\u4f1a\u54e1\u5411\u3051\u30b5\u30fc\u30d3\u30b9\u300cVpass\u300d\u30ed\u30b0\u30a4\u30f3", - "count": 1, - "total_related": 7604, - "prevalence": 0.0001315097317201473 - }, - { - "value": "Access Restricted", - "count": 1, - "total_related": 13262, - "prevalence": 7.540340823405218e-05 - }, - { - "value": "404 Not Found", - "count": 43, - "total_related": 100000, - "prevalence": 0.00043 - }, - { - "value": "Warning! | There might be a problem with the requested link", - "count": 23, - "total_related": 100000, - "prevalence": 0.00023 - }, - { - "value": "Error 404 (Not Found)!!1", - "count": 11, - "total_related": 100000, - "prevalence": 0.00011 - }, - { - "value": "403 Forbidden", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": "400 Bad Request", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "403", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "404 - File or directory not found.", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "404 - Page not found", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "Apache HTTP Server Test Page powered by CentOS", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "Not Found", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "Access forbidden!", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "Attention Required! | Cloudflare", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "Bitly | Page Not Found | 404", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "Loading...", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "Object not found!", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "OneDrive", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "Page Not Found", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "porkbun.com | parked domain", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "\u767b\u5f55", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "ip_addresses": [ - { - "value": "149.28.162.113", - "count": 57, - "total_related": 214, - "prevalence": 0.26635514018691586 - }, - { - "value": "23.254.164.232", - "count": 56, - "total_related": 79, - "prevalence": 0.7088607594936709 - }, - { - "value": "104.255.172.56", - "count": 50, - "total_related": 144, - "prevalence": 0.3472222222222222 - }, - { - "value": "104.168.146.15", - "count": 38, - "total_related": 75, - "prevalence": 0.5066666666666667 - }, - { - "value": "104.168.165.165", - "count": 33, - "total_related": 112, - "prevalence": 0.29464285714285715 - }, - { - "value": "152.89.247.87", - "count": 32, - "total_related": 71, - "prevalence": 0.4507042253521127 - }, - { - "value": "139.180.164.131", - "count": 28, - "total_related": 103, - "prevalence": 0.27184466019417475 - }, - { - "value": "5.230.44.79", - "count": 26, - "total_related": 34, - "prevalence": 0.7647058823529411 - }, - { - "value": "142.11.209.144", - "count": 25, - "total_related": 83, - "prevalence": 0.30120481927710846 - }, - { - "value": "23.254.247.53", - "count": 25, - "total_related": 119, - "prevalence": 0.21008403361344538 - }, - { - "value": "104.168.249.49", - "count": 19, - "total_related": 30, - "prevalence": 0.6333333333333333 - }, - { - "value": "64.44.141.12", - "count": 19, - "total_related": 49, - "prevalence": 0.3877551020408163 - }, - { - "value": "104.156.149.130", - "count": 19, - "total_related": 66, - "prevalence": 0.2878787878787879 - }, - { - "value": "108.61.173.33", - "count": 18, - "total_related": 46, - "prevalence": 0.391304347826087 - }, - { - "value": "162.33.179.165", - "count": 17, - "total_related": 46, - "prevalence": 0.3695652173913043 - }, - { - "value": "23.254.129.6", - "count": 16, - "total_related": 56, - "prevalence": 0.2857142857142857 - }, - { - "value": "155.138.219.140", - "count": 15, - "total_related": 97, - "prevalence": 0.15463917525773196 - }, - { - "value": "104.168.157.45", - "count": 15, - "total_related": 154, - "prevalence": 0.09740259740259741 - }, - { - "value": "104.168.137.21", - "count": 15, - "total_related": 470, - "prevalence": 0.031914893617021274 - }, - { - "value": "5.230.252.157", - "count": 14, - "total_related": 27, - "prevalence": 0.5185185185185185 - }, - { - "value": "172.86.121.130", - "count": 14, - "total_related": 48, - "prevalence": 0.2916666666666667 - }, - { - "value": "192.119.64.43", - "count": 12, - "total_related": 112, - "prevalence": 0.10714285714285714 - }, - { - "value": "104.168.160.6", - "count": 12, - "total_related": 120, - "prevalence": 0.1 - }, - { - "value": "104.168.249.50", - "count": 11, - "total_related": 18, - "prevalence": 0.6111111111111112 - }, - { - "value": "139.99.66.103", - "count": 11, - "total_related": 16099, - "prevalence": 0.0006832722529349649 - }, - { - "value": "15.3.23.45", - "count": 10, - "total_related": 14, - "prevalence": 0.7142857142857143 - }, - { - "value": "104.168.174.80", - "count": 8, - "total_related": 19, - "prevalence": 0.42105263157894735 - }, - { - "value": "104.168.163.124", - "count": 8, - "total_related": 28, - "prevalence": 0.2857142857142857 - }, - { - "value": "104.168.138.7", - "count": 8, - "total_related": 60, - "prevalence": 0.13333333333333333 - }, - { - "value": "104.168.158.224", - "count": 8, - "total_related": 69, - "prevalence": 0.11594202898550725 - }, - { - "value": "45.42.40.208", - "count": 7, - "total_related": 11, - "prevalence": 0.6363636363636364 - }, - { - "value": "172.86.121.143", - "count": 7, - "total_related": 26, - "prevalence": 0.2692307692307692 - }, - { - "value": "104.156.232.106", - "count": 7, - "total_related": 30, - "prevalence": 0.23333333333333334 - }, - { - "value": "138.197.134.87", - "count": 7, - "total_related": 45, - "prevalence": 0.15555555555555556 - }, - { - "value": "103.130.195.170", - "count": 7, - "total_related": 56, - "prevalence": 0.125 - }, - { - "value": "104.168.249.10", - "count": 6, - "total_related": 23, - "prevalence": 0.2608695652173913 - }, - { - "value": "104.168.172.20", - "count": 6, - "total_related": 34, - "prevalence": 0.17647058823529413 - }, - { - "value": "64.44.141.13", - "count": 6, - "total_related": 35, - "prevalence": 0.17142857142857143 - }, - { - "value": "104.168.167.88", - "count": 6, - "total_related": 115, - "prevalence": 0.05217391304347826 - }, - { - "value": "155.138.159.45", - "count": 6, - "total_related": 136, - "prevalence": 0.04411764705882353 - }, - { - "value": "172.105.27.36", - "count": 5, - "total_related": 1913, - "prevalence": 0.0026136957658128594 - }, - { - "value": "38.110.228.112", - "count": 4, - "total_related": 5, - "prevalence": 0.8 - }, - { - "value": "5.230.44.71", - "count": 4, - "total_related": 5, - "prevalence": 0.8 - }, - { - "value": "104.168.159.55", - "count": 4, - "total_related": 13, - "prevalence": 0.3076923076923077 - }, - { - "value": "172.93.193.219", - "count": 4, - "total_related": 14, - "prevalence": 0.2857142857142857 - }, - { - "value": "10.18.1.69", - "count": 4, - "total_related": 18, - "prevalence": 0.2222222222222222 - }, - { - "value": "104.168.165.173", - "count": 4, - "total_related": 19, - "prevalence": 0.21052631578947367 - }, - { - "value": "84.201.189.216", - "count": 4, - "total_related": 30, - "prevalence": 0.13333333333333333 - }, - { - "value": "23.254.204.173", - "count": 4, - "total_related": 33, - "prevalence": 0.12121212121212122 - }, - { - "value": "51.79.133.76", - "count": 4, - "total_related": 38, - "prevalence": 0.10526315789473684 - }, - { - "value": "104.168.203.159", - "count": 4, - "total_related": 39, - "prevalence": 0.10256410256410256 - }, - { - "value": "160.16.200.77", - "count": 4, - "total_related": 3243, - "prevalence": 0.0012334258402713536 - }, - { - "value": "54.153.56.183", - "count": 4, - "total_related": 96384, - "prevalence": 4.150066401062417e-05 - }, - { - "value": "13.107.42.13", - "count": 4, - "total_related": 99055, - "prevalence": 4.0381606178385745e-05 - }, - { - "value": "65.33.26.12", - "count": 3, - "total_related": 15, - "prevalence": 0.2 - }, - { - "value": "202.117.170.240", - "count": 3, - "total_related": 16, - "prevalence": 0.1875 - }, - { - "value": "104.168.163.149", - "count": 3, - "total_related": 18, - "prevalence": 0.16666666666666666 - }, - { - "value": "45.61.136.204", - "count": 3, - "total_related": 23, - "prevalence": 0.13043478260869565 - }, - { - "value": "216.107.136.10", - "count": 3, - "total_related": 33, - "prevalence": 0.09090909090909091 - }, - { - "value": "88.204.166.59", - "count": 3, - "total_related": 87, - "prevalence": 0.034482758620689655 - }, - { - "value": "140.117.91.22", - "count": 3, - "total_related": 103, - "prevalence": 0.02912621359223301 - }, - { - "value": "149.248.52.31", - "count": 3, - "total_related": 112, - "prevalence": 0.026785714285714284 - }, - { - "value": "104.168.158.103", - "count": 3, - "total_related": 123, - "prevalence": 0.024390243902439025 - }, - { - "value": "212.90.120.180", - "count": 3, - "total_related": 949, - "prevalence": 0.003161222339304531 - }, - { - "value": "34.136.111.81", - "count": 3, - "total_related": 41630, - "prevalence": 7.20634158059092e-05 - }, - { - "value": "34.132.102.6", - "count": 3, - "total_related": 41756, - "prevalence": 7.184596225692116e-05 - }, - { - "value": "172.93.193.45", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "61.216.32.172", - "count": 2, - "total_related": 8, - "prevalence": 0.25 - }, - { - "value": "5.230.251.49", - "count": 2, - "total_related": 11, - "prevalence": 0.18181818181818182 - }, - { - "value": "103.31.249.62", - "count": 2, - "total_related": 12, - "prevalence": 0.16666666666666666 - }, - { - "value": "64.44.141.15", - "count": 2, - "total_related": 12, - "prevalence": 0.16666666666666666 - }, - { - "value": "142.11.209.131", - "count": 2, - "total_related": 13, - "prevalence": 0.15384615384615385 - }, - { - "value": "149.248.8.85", - "count": 2, - "total_related": 14, - "prevalence": 0.14285714285714285 - }, - { - "value": "31.170.160.248", - "count": 2, - "total_related": 19, - "prevalence": 0.10526315789473684 - }, - { - "value": "149.28.247.34", - "count": 2, - "total_related": 21, - "prevalence": 0.09523809523809523 - }, - { - "value": "152.89.247.194", - "count": 2, - "total_related": 31, - "prevalence": 0.06451612903225806 - }, - { - "value": "45.61.138.207", - "count": 2, - "total_related": 34, - "prevalence": 0.058823529411764705 - }, - { - "value": "172.93.181.221", - "count": 2, - "total_related": 37, - "prevalence": 0.05405405405405406 - }, - { - "value": "192.119.84.22", - "count": 2, - "total_related": 43, - "prevalence": 0.046511627906976744 - }, - { - "value": "35.225.54.236", - "count": 2, - "total_related": 116, - "prevalence": 0.017241379310344827 - }, - { - "value": "104.168.214.151", - "count": 2, - "total_related": 123, - "prevalence": 0.016260162601626018 - }, - { - "value": "142.250.1.113", - "count": 2, - "total_related": 46592, - "prevalence": 4.292582417582418e-05 - }, - { - "value": "173.194.74.113", - "count": 2, - "total_related": 47095, - "prevalence": 4.2467353222210424e-05 - }, - { - "value": "1.1.1.1", - "count": 2, - "total_related": 47222, - "prevalence": 4.235314048536699e-05 - }, - { - "value": "173.194.192.101", - "count": 2, - "total_related": 48142, - "prevalence": 4.1543766357858004e-05 - }, - { - "value": "104.168.151.34", - "count": 1, - "total_related": 11, - "prevalence": 0.09090909090909091 - }, - { - "value": "104.168.198.3", - "count": 1, - "total_related": 13, - "prevalence": 0.07692307692307693 - }, - { - "value": "104.168.162.167", - "count": 1, - "total_related": 47, - "prevalence": 0.02127659574468085 - }, - { - "value": "104.168.137.213", - "count": 1, - "total_related": 78, - "prevalence": 0.01282051282051282 - }, - { - "value": "103.224.182.208", - "count": 1, - "total_related": 73590, - "prevalence": 1.3588802826470989e-05 - }, - { - "value": "67.199.248.10", - "count": 28, - "total_related": 100000, - "prevalence": 0.00028 - }, - { - "value": "67.199.248.11", - "count": 24, - "total_related": 100000, - "prevalence": 0.00024 - }, - { - "value": "44.227.76.166", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "104.155.138.21", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "44.227.65.245", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "107.178.223.183", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "209.99.40.222", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "1.179.112.195", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "1.179.112.196", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "1.179.112.197", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "memory_patterns": [ - { - "value": "f4d1a671dff700041255c7242d3abb8376ca9bc94ca44daadda35c5c924eb50e", - "count": 4, - "total_related": 10, - "prevalence": 0.4 - }, - { - "value": "d6ec3d12319d37f874d9cfdb8aee498a520c9ff299d0d6ed84f3635ec2bb72ce", - "count": 4, - "total_related": 38, - "prevalence": 0.10526315789473684 - }, - { - "value": "ef0854adca7503e8b0333b88e37e7625964bd3e04c3e20b1d3bfc1e82d0a24e2", - "count": 4, - "total_related": 38, - "prevalence": 0.10526315789473684 - }, - { - "value": "38480d95965add730f1ea758a4afdf8b156e71bbfcf912e09397a2d82f27d4c9", - "count": 3, - "total_related": 187, - "prevalence": 0.016042780748663103 - }, - { - "value": "c8ae9fd4d86a21a0b1b88a4c7ad5110291ef8c534f4c993d6cc186bc22a96945", - "count": 3, - "total_related": 187, - "prevalence": 0.016042780748663103 - }, - { - "value": "726ea6910cf9b5585dcb92315c25c6397be35550a72968f01e61d35c1ceaa742", - "count": 3, - "total_related": 188, - "prevalence": 0.015957446808510637 - }, - { - "value": "a50ec2f42bec1c43e952de2728de0217f178440bdd8fcef70bb6db4c27e9b4bb", - "count": 2, - "total_related": 39, - "prevalence": 0.05128205128205128 - }, - { - "value": "6680f9b51d53af540951b400b1024cb0e13792c4ed8e16b0ad03679d30a1da94", - "count": 2, - "total_related": 298, - "prevalence": 0.006711409395973154 - }, - { - "value": "06656f08f01f3d6e40710a4d8619d39d544a45b5fd69b0b29799400ebbd119c0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "07df3733b75e6e23d2217a6548ed66654793b20a0674b22187e558c3284c0055", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "126627f54de53d366741693528685ce714f60b3ca9d45cfd4ec5a14d3025b591", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "19fda30a4f30a132d507e9b9415f889a139f5a3e80865b8d6837b54bd42574c1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1e154b2976cc00d457c0dc2b83ebe81911294c8276691617085c03a3304fd87f", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "26e376fc80b090b2ee04e7d3104d308a150e58538580109a74f4ac49bf362423", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "3eef99e47c53edcca574b3ca684be958ac5c1867c218f0711b66bd01623e48b6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "45c0007e4c744c6f9ba43660cc7edb9a2deb27580e160f8a0e56585401ee9ee3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "46144dd7262504a58ccb442eb77aef7d3a2790548f2871af5dfe30f63898926d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "48158624f32e8fdc56686f735bf487c0f7279913f29e34b2cb3a42d7886d1c8b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4c3ab4798357e32e0c443f2dcb8261915f32de3fc7f219047c7993cb18c756cd", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4f1987847e23e9c9debb64481372b00fb0194a615154a7f87d2ac992dac70306", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "5842272c3dfa8153a147bf5cdefc0f9fc514e66fe9138585639529127d058e47", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "621a8b4ab9858f14ffbd1b17c915acc9a85e33737f9e11cef56de2db82a2f92b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "633f75f86a9cd02f32ac58703562bc5ed44a6506f180c0aaa561118e699493a4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "63a6580d9ee8d5a632886585ab8f7ab59c87d4e2717181c191cac236cd1e1de4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "70c4600d6920dadc1899603b131119427784fcd83d04da5c886bcad5a7af913b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "7697a511692b1150d46cb98e7f55d67ae7ef622c0f732d7824bc0d1fd94a4a6e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "7c66d2d75be43d2c17e75d37c39344a9b5d29ee5c5861f178aa7d9f34208eb48", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "82f446528560789d2f79a9c5f1b8cf3e5eb20468bd567ef9735672748aa00b06", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "8949207761f3d09734aa716da1e6c182425bcde2a95dacb3320085f1fe66069c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "9623c98f7338d56b07b35cd379e31e685e32a9c5317d7bc4af5276916cef4ed3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "979ef0f43f25a6707fd98f6f0cb6e8452c24f41216ff53486781f487803d69c4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "9b839e9169babff1d14468d9f8497c165931dc65d5ff1f4b547925ff924c43fe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "a2528017edb01304f073d31423b02a4de4b0052627cb161e15f4b965306154a3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "b765f7e767a322628113be3b2e557c12bb9f22998e2830ad0fe450f518705c86", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "b884c4e176b894805e9346f73f3b96a5dacdd69ba68d6be713255597f174f93d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "c0110bd55f9b115f84c255342f8afaa4aef53ec5e7a7298165678f2f8fc06e00", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "c08ba7c0297cd515c5a24918f6e1ec705b72cdeea40078494d8b51de447b6b8c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "c52e3e73d7870bf8edc1b9ae52b26c08ef2466f948ef3446b2c865fd53d859dd", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "d7da9320165563a7346583b1d457236c479585ebf23521e34d5819f288bbcef4", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "e132f74231954cb91d7c83c8cbb92626baa55d5db99ace2f7853943a8bd2dcfe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "e4c9fe57a22be3a31be9d3c4309f8855d630e4cc2afd582932eda54350e7381d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "eaaf0271092d1266c2f3212fa4c47051b357a0617f634644e4f5d3ff9aa9be6c", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "ebaaf177e746f9f0e16c906f1ffea95af771252b07136ca6a13995508fce34aa", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "eee9b6e401b731e30447f5d8c944a243346f756f1665d9a0872f446cf8a7ab6a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "f1b3ce96462027644f9caa314d3da745dab139ee1cb14fe508234e76bd686f93", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "f7170b70a89f4b5d196e3a09c1d6135d36320548f66cdc2c55bf725b0f8d4ab8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "fdacd42a9fa5043487ab6c6d52b612e0eeab9beb61aa9bde1433655688638c7b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "02d97b6501ca257e0867b5a271bac707ea79de2010e7f671b84286e3e5affbff", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "274f4412999f561428930bd6ff38cd8e0062e5a6c9aea3e851c6752b7940ff08", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "30916214107e71de23a76842661cc33986e4e914c3124b2da1d446e9c5add9ae", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "54bbf9a07b0b89c0501359077aa98d707ac42b22b0f628265f70237e8a71194f", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "75c81169d679fab821d77ea672f5a878626eb22d2110ffd7407623cb154ededd", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "8b5b6c3b450d3610e62830dee79d9358120d2247b81cb9676a279dd267701f08", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "8bfa4fe0534c0062393b6a2597c3491f7df3bf2eabfe06544c53bdf1f38db6d4", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "d7bfa626bbc8e7db06fec500a84bcb25505119cd470bf3acdfd8252a270d2662", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "e3c505b2457b1ac51c32bf428df070be0aa01fc90f3e35c68224832d83250c46", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "f0f6135eadc541451ac34ad4f4ca1db110fb2994585469b725ed39577e88d0dc", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "f1713afaf5958bdf3e975ebbab8245a98a84e03f8ce52175ef1568de208116e0", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "544d38f93df5c42b9b4482f365f4c274f2e8fae1fd697275cd9b23934402ee6a", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "e3503a7aa046947430d1a4e29d25ea86ef2c6f4120e18cbd50df5afb314b30b3", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "07c5a71b7e8092de7597269cb5bd447525a852dc742083a4599e253291d18b5f", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "05fd254df41265e931ce4c35c1def5ccc42c8b9de0070bdde5ebaa90c3727f15", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "42c1869c0608beb61e63cd44d3d2db90231c6b1203380d5791387ead76430cb3", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "5f18e872712ba761b5e74d9672813ef7c11bc996779053063b9cfd557bdb2352", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "776965310c8688f4c0579e97f9c89bf4cd552513432e6abb010b0fd9bd93cdbf", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "889cc2f9cd7bcddec734976959f793f530ddb1dac839a99cbf032a52fc4c7783", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "c6ed4f5b1f3952bff700a6d5755c0534aa9a222e566a206cf5c8149c8a377f7f", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "d266e47dd456fd2d97947ced1677bbb9eba96ff0582096b508d9e930116ad9aa", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "d786b025e640825af8930b14f884adc3858fe6e8511fa6e7244fbb3a094486f7", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "ed06fc8b097fad7db2908265afecb3232deff5baca29ea8438df55cefc01dea9", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "10056ba4bd97e7f1e3a5ab742addac29597a6ecd40289e720985fca9e1435697", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "aebe53d8cd6bd7cb29e0af6cae7df5c1e302d7cab15c714510ce151a5f658590", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "47767ad1356597fb1fdcb440a6907f7196b029a568bb83343467e4a6625c52ac", - "count": 1, - "total_related": 10, - "prevalence": 0.1 - }, - { - "value": "0b0b07569c508e47b1a9a76e949740bde9add49c2bea487d42142d579858da1d", - "count": 1, - "total_related": 14, - "prevalence": 0.07142857142857142 - }, - { - "value": "27f82b4e513263433150138fea66f9bf9ca68e434c8990dbffe52be4c5234735", - "count": 1, - "total_related": 14, - "prevalence": 0.07142857142857142 - }, - { - "value": "5d3e48ac31ca012603391afc2c44e59846958001823c04733ebd1b5d3cf6bd07", - "count": 1, - "total_related": 14, - "prevalence": 0.07142857142857142 - }, - { - "value": "7ad1f7c989d7d8937bf9a1aca255c273a0bede03e6d26f5537971bd264fbadd9", - "count": 1, - "total_related": 14, - "prevalence": 0.07142857142857142 - }, - { - "value": "60674602836323647634016774ea123232160c1b4dfcf3fcd2d2c28c652aa00e", - "count": 1, - "total_related": 15, - "prevalence": 0.06666666666666667 - }, - { - "value": "d0072130eb4ee81ffba5b703a16c276b0c59b408cb8aa3915980f0f098f04984", - "count": 1, - "total_related": 16, - "prevalence": 0.0625 - }, - { - "value": "c2d9a510d82a3e003a059c6448fff61ba9e39fe8ec6f079b90adabfc93f72b4e", - "count": 1, - "total_related": 29, - "prevalence": 0.034482758620689655 - }, - { - "value": "e9a4c33651d8d22267ae35b3ddb7817be98d10936f9ebeabdc6c6a5c06496cd3", - "count": 1, - "total_related": 36, - "prevalence": 0.027777777777777776 - }, - { - "value": "c43dfda63e6e534776eb24d284d0bdf21115181b49d6e31091de795d957cb5fc", - "count": 1, - "total_related": 94, - "prevalence": 0.010638297872340425 - }, - { - "value": "5e46c630fafef1dd3b5fd76a406e9a3e2b845274e559ba0f87eeb6e8035dc5cd", - "count": 1, - "total_related": 140, - "prevalence": 0.007142857142857143 - }, - { - "value": "b71a4c362a29cda2f327364cb22a3bd58af8b8ff32520bd01e132c6e40c3e072", - "count": 1, - "total_related": 299, - "prevalence": 0.0033444816053511705 - }, - { - "value": "d04b390473fd8a17816d077c2d20763ebdfa943b58cb3171f23872bb653351b6", - "count": 1, - "total_related": 339, - "prevalence": 0.0029498525073746312 - } - ], - "outgoing_links": [ - { - "value": "https://source.zoom.us/3.10.0/zoom-meeting-3.10.0.min.js", - "count": 34, - "total_related": 38, - "prevalence": 0.8947368421052632 - }, - { - "value": "https://source.zoom.us/3.10.0/lib/vendor/react-dom.min.js", - "count": 34, - "total_related": 39, - "prevalence": 0.8717948717948718 - }, - { - "value": "https://source.zoom.us/3.10.0/lib/vendor/react.min.js", - "count": 34, - "total_related": 39, - "prevalence": 0.8717948717948718 - }, - { - "value": "https://source.zoom.us/3.10.0/lib/vendor/redux-thunk.min.js", - "count": 34, - "total_related": 39, - "prevalence": 0.8717948717948718 - }, - { - "value": "https://source.zoom.us/3.10.0/lib/vendor/redux.min.js", - "count": 34, - "total_related": 39, - "prevalence": 0.8717948717948718 - }, - { - "value": "https://source.zoom.us/3.10.0/lib/vendor/lodash.min.js", - "count": 34, - "total_related": 43, - "prevalence": 0.7906976744186046 - }, - { - "value": "https://www.antiphishing.org/", - "count": 22, - "total_related": 36259, - "prevalence": 0.0006067459113599383 - }, - { - "value": "https://www.stopbadware.org/", - "count": 22, - "total_related": 44746, - "prevalence": 0.000491664059357261 - }, - { - "value": "https://www.mediafire.com/file_premium/c69fpniger982ih/laptopnew.jpg/file", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "https://porkbun.com/tools/auctionRedirect/bloomcloud.org", - "count": 4, - "total_related": 9, - "prevalence": 0.4444444444444444 - }, - { - "value": "https://gen.xyz/account/cart.php?a=add&domain=register&sld=&tld=.us.org", - "count": 4, - "total_related": 4201, - "prevalence": 0.0009521542489883361 - }, - { - "value": "https://www.centralnic.com", - "count": 4, - "total_related": 4820, - "prevalence": 0.0008298755186721991 - }, - { - "value": "https://login.blockchain.com/#/login/", - "count": 3, - "total_related": 95, - "prevalence": 0.031578947368421054 - }, - { - "value": "https://login.blockchain.com/#/help", - "count": 3, - "total_related": 150, - "prevalence": 0.02 - }, - { - "value": "https://login.blockchain.com/#/signup", - "count": 3, - "total_related": 1720, - "prevalence": 0.0017441860465116279 - }, - { - "value": "https://github.com/blockchain/blockchain-wallet-v4-frontend/releases", - "count": 3, - "total_related": 4967, - "prevalence": 0.0006039863096436481 - }, - { - "value": "https://d1ayxb9ooonjts.cloudfront.net/d/C5F6F6EF5C67BE2C8F62F369186C92A0BBCE05E1.svg", - "count": 3, - "total_related": 8592, - "prevalence": 0.00034916201117318437 - }, - { - "value": "https://d1ayxb9ooonjts.cloudfront.net/d/716B7C5AED6F8EE92E2EFBFEEFDCA112010264F4.svg", - "count": 3, - "total_related": 12099, - "prevalence": 0.0002479543763947434 - }, - { - "value": "https://d1ayxb9ooonjts.cloudfront.net/d/7AD8772BD1C47740F140231A2A6797014CE99924.svg", - "count": 3, - "total_related": 12099, - "prevalence": 0.0002479543763947434 - }, - { - "value": "https://d1ayxb9ooonjts.cloudfront.net/d/86FCD201EC0B15255F54D03EA0F6D6CC0DE44D70.svg", - "count": 3, - "total_related": 12099, - "prevalence": 0.0002479543763947434 - }, - { - "value": "https://d1ayxb9ooonjts.cloudfront.net/d/A80E1EC0ADE0D3D2D85DEDC41BC3390A09183734.svg", - "count": 3, - "total_related": 12099, - "prevalence": 0.0002479543763947434 - }, - { - "value": "https://d1ayxb9ooonjts.cloudfront.net/d/CDB42D1F6E7A347BF4B6F8FDBDBFB2B9CF1B9FCA.svg", - "count": 3, - "total_related": 12099, - "prevalence": 0.0002479543763947434 - }, - { - "value": "https://d1ayxb9ooonjts.cloudfront.net/d/E716B6F26A66BBAEF022AD3D60349CB2152D3FBE.svg", - "count": 3, - "total_related": 12099, - "prevalence": 0.0002479543763947434 - }, - { - "value": "https://d1ayxb9ooonjts.cloudfront.net/d/EB0C87D7584B93A00E60C42D105830EE697021BC.png", - "count": 3, - "total_related": 12099, - "prevalence": 0.0002479543763947434 - }, - { - "value": "http://bitly.com/?utm_source=Bitly&utm_medium=referral&utm_campaign=preview_page", - "count": 3, - "total_related": 39834, - "prevalence": 7.531254707034192e-05 - }, - { - "value": "https://www.linkedin.com/company/bitly/mycompany/", - "count": 3, - "total_related": 39834, - "prevalence": 7.531254707034192e-05 - }, - { - "value": "https://x.com/bitly", - "count": 3, - "total_related": 39864, - "prevalence": 7.525586995785671e-05 - }, - { - "value": "https://www.instagram.com/bitly/", - "count": 3, - "total_related": 55676, - "prevalence": 5.388318126302177e-05 - }, - { - "value": "https://www.facebook.com/bitly", - "count": 3, - "total_related": 57357, - "prevalence": 5.230399079449762e-05 - }, - { - "value": "https://filedn.com/lMLD9KjI90lFxgNbWwELvpf/Wartr/laptopnew.jpg", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "https://partner.googleadservices.com/gampad/cookie.js?domain=www.googlesheet.info&client=partner-dp-bodis30_3ph&product=SAS&callback=__sasCookie", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "https://porkbun.com/tools/auctionRedirect/googlesheetpage.org", - "count": 2, - "total_related": 7, - "prevalence": 0.2857142857142857 - }, - { - "value": "https://partner.googleadservices.com/gampad/cookie.js?domain=ww25.global-pro.xyz&client=partner-dp-bodis31_3ph&product=SAS&callback=__sasCookie&cookie_types=v1%2Cv2", - "count": 2, - "total_related": 9, - "prevalence": 0.2222222222222222 - }, - { - "value": "https://api.zoom.us", - "count": 2, - "total_related": 18, - "prevalence": 0.1111111111111111 - }, - { - "value": "https://plcl.me/images/XHb7L.png", - "count": 2, - "total_related": 28, - "prevalence": 0.07142857142857142 - }, - { - "value": "https://plcl.me/images/qMFnZ.png", - "count": 2, - "total_related": 28, - "prevalence": 0.07142857142857142 - }, - { - "value": "https://situsslotdepo10k.org/", - "count": 2, - "total_related": 28, - "prevalence": 0.07142857142857142 - }, - { - "value": "https://plcl.me/images/2JNhx.png", - "count": 2, - "total_related": 33, - "prevalence": 0.06060606060606061 - }, - { - "value": "https://explore.zoom.us/en/search/#q=", - "count": 2, - "total_related": 41, - "prevalence": 0.04878048780487805 - }, - { - "value": "https://st3.zoom.us/static/6.2.7916/image/thumb.png", - "count": 2, - "total_related": 76, - "prevalence": 0.02631578947368421 - }, - { - "value": "https://login.blockchain.com/#/mobile-login", - "count": 2, - "total_related": 90, - "prevalence": 0.022222222222222223 - }, - { - "value": "https://login.blockchain.com/#/reminder", - "count": 2, - "total_related": 121, - "prevalence": 0.01652892561983471 - }, - { - "value": "https://g.co/kgs/UdsQY1Y", - "count": 2, - "total_related": 133, - "prevalence": 0.015037593984962405 - }, - { - "value": "https://space88.fun/renseo", - "count": 2, - "total_related": 147, - "prevalence": 0.013605442176870748 - }, - { - "value": "https://support.zoom.com/", - "count": 2, - "total_related": 223, - "prevalence": 0.008968609865470852 - }, - { - "value": "https://en.wikipedia.org/wiki/Zoom_Video_Communications", - "count": 2, - "total_related": 261, - "prevalence": 0.007662835249042145 - }, - { - "value": "https://i.imgur.com/2001Pcz.png", - "count": 2, - "total_related": 416, - "prevalence": 0.004807692307692308 - }, - { - "value": "https://i.imgur.com/WmADymD.png", - "count": 2, - "total_related": 436, - "prevalence": 0.0045871559633027525 - }, - { - "value": "https://secure.livechatinc.com/licence/17223693/v2/open_chat.cgi", - "count": 2, - "total_related": 503, - "prevalence": 0.003976143141153081 - }, - { - "value": "https://i.imgur.com/eql8hrp.png", - "count": 2, - "total_related": 510, - "prevalence": 0.00392156862745098 - }, - { - "value": "https://i.imgur.com/BV4Xq3y.png", - "count": 2, - "total_related": 545, - "prevalence": 0.003669724770642202 - }, - { - "value": "https://explore.zoom.us/en/trust/legal-compliance/", - "count": 2, - "total_related": 5398, - "prevalence": 0.0003705075954057058 - }, - { - "value": "https://explore.zoom.us/en/terms/", - "count": 2, - "total_related": 6149, - "prevalence": 0.0003252561392096276 - }, - { - "value": "https://explore.zoom.us/en/acceptable-use-guidelines/", - "count": 2, - "total_related": 8071, - "prevalence": 0.00024780076818238137 - }, - { - "value": "https://support.bitly.com/hc/en-us/articles/32500359495565-Free-Short-Link-Generator-Anonymous-Link-FAQ", - "count": 2, - "total_related": 8580, - "prevalence": 0.0002331002331002331 - }, - { - "value": "https://explore.zoom.us/docs/js/optimizely/optimizely.js", - "count": 2, - "total_related": 11009, - "prevalence": 0.0001816695431010991 - }, - { - "value": "https://go.pardot.com/l/84442/2015-10-23/mspcv", - "count": 2, - "total_related": 13325, - "prevalence": 0.000150093808630394 - }, - { - "value": "https://go.pardot.com/l/84442/2015-07-23/mv5y", - "count": 2, - "total_related": 13334, - "prevalence": 0.00014999250037498125 - }, - { - "value": "https://go.pardot.com/l/84442/2015-07-14/4xht", - "count": 2, - "total_related": 13342, - "prevalence": 0.00014990256333383302 - }, - { - "value": "https://go.pardot.com/l/84442/2015-07-23/mw5t", - "count": 2, - "total_related": 13347, - "prevalence": 0.0001498464074323818 - }, - { - "value": "https://log-gateway.zoom.us/nws/join/logger/felog", - "count": 2, - "total_related": 13349, - "prevalence": 0.00014982395685070042 - }, - { - "value": "https://apps.facebook.com/zoomvideocall/", - "count": 2, - "total_related": 14825, - "prevalence": 0.00013490725126475548 - }, - { - "value": "https://rakkoma.com/", - "count": 2, - "total_related": 20865, - "prevalence": 9.58543014617781e-05 - }, - { - "value": "https://inovatik.com", - "count": 2, - "total_related": 30081, - "prevalence": 6.648715135800007e-05 - }, - { - "value": "https://explore.zoom.us/en/accessibility", - "count": 2, - "total_related": 61464, - "prevalence": 3.2539372640895484e-05 - }, - { - "value": "https://explore.zoom.us/en/trust/", - "count": 2, - "total_related": 65526, - "prevalence": 3.052223544852425e-05 - }, - { - "value": "https://cdn.ampproject.org/rtv/012502032353000/v0/amp-loader-0.1.js", - "count": 2, - "total_related": 84420, - "prevalence": 2.369106846718787e-05 - }, - { - "value": "https://code.jquery.com/jquery-1.11.1.min.js", - "count": 2, - "total_related": 86343, - "prevalence": 2.3163429577383226e-05 - }, - { - "value": "https://cdn.ampproject.org/rtv/012502032353000/v0/amp-auto-lightbox-0.1.js", - "count": 2, - "total_related": 86961, - "prevalence": 2.299881556099861e-05 - }, - { - "value": "http://www.html5rocks.com/en/tutorials/canvas/hidpi/", - "count": 27, - "total_related": 100000, - "prevalence": 0.00027 - }, - { - "value": "https://crbug.com/740629)", - "count": 27, - "total_related": 100000, - "prevalence": 0.00027 - }, - { - "value": "https://w3c.github.io/gamepad/#remapping", - "count": 27, - "total_related": 100000, - "prevalence": 0.00027 - }, - { - "value": "https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js", - "count": 20, - "total_related": 100000, - "prevalence": 0.0002 - }, - { - "value": "https://www.google.com/adsense/domains/caf.js?abp=1&bodis=true", - "count": 10, - "total_related": 100000, - "prevalence": 0.0001 - }, - { - "value": "https://porkbun.com", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": "https://schema.org", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "https://ep2.adtrafficquality.google/sodar/sodar2/232/runner.html", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "https://securepubads.g.doubleclick.net/static/topics/topics_frame.html", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "https://securepubads.g.doubleclick.net/tag/js/gpt.js", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "https://www.google.com/recaptcha/api2/aframe", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "https://www.googletagmanager.com/gtm.js?id=", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "http://apache.org", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "http://centos.org", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "http://httpd.apache.org/", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "http://schema.org", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "http://www.centos.org/", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "http://www.internic.net/whois.html", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "https://apis.google.com/js/plusone.js", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "https://bitly.com/", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "https://cdn.ampproject.org/v0.js", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "https://cdn.ampproject.org/v0/amp-analytics-0.1.js", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "https://cdn.ampproject.org/v0/amp-anim-0.1.js", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "https://cdn.cookielaw.org/scripttemplates/otSDKStub.js", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "https://code.jquery.com/jquery-3.7.1.min.js", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "https://euob.netgreencolumn.com/sxp/i/c4601e5f6cdd73216cafdd5af209201c.js", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "https://explore.zoom.us/en/privacy/", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "https://explore.zoom.us/wp-content/themes/zoom-cms-wp/assets/img/icon-check.png", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "https://platform-api.sharethis.com/panorama.js", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "https://schema.org/", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "https://securepubads.g.doubleclick.net/pagead/managed/js/gpt/m202412090101/pubads_impl.js", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - } - ], - "path": [ - { - "value": "/zoom/join", - "count": 83, - "total_related": 152, - "prevalence": 0.5460526315789473 - }, - { - "value": "/edit", - "count": 17, - "total_related": 18879, - "prevalence": 0.0009004714232745378 - }, - { - "value": "/zoom/error", - "count": 7, - "total_related": 16, - "prevalence": 0.4375 - }, - { - "value": "/wcqtZBk3pEs/fD5ZkUg7TL/n_W_EPni7p/+ZWEU3fn/bOX6afSoRA/FOrtg==", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "/zoom/join/", - "count": 3, - "total_related": 11, - "prevalence": 0.2727272727272727 - }, - { - "value": "/pdfviewer.php", - "count": 3, - "total_related": 138, - "prevalence": 0.021739130434782608 - }, - { - "value": "/client", - "count": 3, - "total_related": 31247, - "prevalence": 9.600921688482094e-05 - }, - { - "value": "/ss", - "count": 3, - "total_related": 39696, - "prevalence": 7.557436517533252e-05 - }, - { - "value": "/+WZKqbW/mYBMqA23aeG/5QUlJVz9ETO/588wfC%20eoru/eIXfGGPnm0Ki/1Ww==", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/191239/send-ip-request", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/265446/check", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/265590/check", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/291591/check", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/291591/check/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/292097/check", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/2pY8VVB", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/462833/check", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/494933/check", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/4kor+UlHd98m5hsroSbTrgoWzqs7WILRXUJWI43fJ5s=.msi", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/553619/check", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/749109/check", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/8orFaRkD8yM5hUXCngKhpXaNWdt8aYpUd/99Y43R2FQ=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/970418/send-ip-request", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/CpA2wiAU77L/1UcbAYHGoi/faSubLvyJe/ad8WJlxeal/Z4=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/EcCm9WiaysW/D+sYq1Io/yVMuSbkgQZ/Vp6bzP5LXe/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/G9QSB8DHRcQ/4ShCSu6nDj/h7WF2RW+/PU2QlUJogi/GsAsAQyu6L/uGoMw==", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/H9Zhw04fTVZQQgvv9DUjePZmbeab7RExI76EE6+u1jg=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/MgHT9botGGYuJmLRBebwuhwPYXlcd5CeNCn+LWYmSXU=.msi", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/NWjtAzRCOsN/wH3NF19ZGr/R6GKptoWaQ/mwdHY+k8/XJpKafSoRA/FOrtg==", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/OdxgSIF", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/OdxgSIF+I/EB3Dr_IYUD/0haO8NLJM5/HSHOJIzrj_/6eLPdng=/=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/Of43RYJPMU1/lJLnDAWalt/NyRAItr2WS/HOJIzrj_6c/77bgHY=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/OstpfpplSmd/kB7XqC07xt/pvsON52yWS/CLpIorS_6Y/aXbgXY=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/OuxGRtlwFU5/RGpO3A3iyi/J6ED6ZY42S/HOJIorS_6e/73Ak23qSow/ZVw==", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/OvJhf8twMUF/PIsP0a3v0v/aOMFpJ1_VK/CLpIorS_6Z/qbVkHPmQIE/R", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/TzYOiYx", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/ZyCws4dD_zE/aUhUJV0p6P/S9XrRH9+/R51g4b5Kjj/abnY=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/cqqhh7hzahw2b8t1mnyg/mkf9hhvwfjxnb0f2kknf0o=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/eccm9wiaysw/d+syq1io/yvmusbkgqz/vp6bzp5lxe/ec08p4lt6g/cbsbq==", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/en/id/t56/home", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/en/id/t56/home/2fa.php", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/hVrk+OKVU/B57xnhwLfy/p5NUjgD9zN/vFdgk30Njh/4B3TEuCfGe/cEEIQ==", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/lsiztzcsljm/w+ltv_pa/qui+ksad/_rznkkguw6/cqhgse=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/oQ6pgIjI+MhZwM0JzshhFCc9j8v8L0Ovb+DOKuRm9UI=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/of43ryjpmu1/ljlndawalt/nyraitr2ws/hojizrj_6c/77bghy=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/oipYhEuV1K+2d2U95Ul/S1JACy1Qyn/tOWT1sZD_4/Vx9sabJQMh/uj9hw==", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/roundtable-talk-with-civ-team/roomID=3570947&meetingID=5161127", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/roundtable-talk-with-civ-team/roomID=3570947&meetingID=7734338", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/roundtable-talk-with-foresight-team/roomID=3570947&meetingID=0762138", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/roundtable-talk-with-longhash-team/roomID=3570947&meetingID=1185874", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/roundtable-talk-with-metaschool-team/roomID=3570947&meetingID=0657012", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/troubleshoot-issue-046966", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/troubleshoot-issue-331932", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/troubleshoot-issue-493960", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/troubleshoot-issue-597573", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/troubleshoot-issue-775629", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/troubleshoot-issue-931003", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/troubleshoot-issue-939046", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/wcqtzbk3pes/fd5zkug7tl/n_w_epni7p/+zweu3fn/box6afsora/fortg==", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/xg/XjyZ4liSxPxR8N07y5jfDBK7JxlNhTOM0rkJaZ8w=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/2qRa60mv2a5zatU3RmgAHlbjRh1klMFjgezI2pOL0Tk=", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "/OelnZtFfCGl/eeprSKlqMp/qCKN4F5mmS/YJJIhqSrAe/6HRrW3sRIA/aAg==", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "/Tn_o2MrOPqQ/pAJOK3GxdZ/Ul4yGvEIjY/LSBM7BiRDI/UDMurOYsxo/G5A==", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "/bSQphSxgStENEhz5Y+PZCpjr/NBSWGWjjhkJi/PvaqE=", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "/lSDkdt63T02/ouofDDiKyC/t7G8s+ug/C3hXppThya/naeJfyQcl0/gLLAA==", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "/lsizTZCslJm/W+Ltv_Pa/qUi+KSaD/_rzNkkGuW6/cQHgsE=", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "/roundtable-talk-with-ryzelabs-team/roomID=3570947&meetingID=9960215", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "/zoom/meeting", - "count": 2, - "total_related": 9, - "prevalence": 0.2222222222222222 - }, - { - "value": "/packageupd.msi", - "count": 2, - "total_related": 29, - "prevalence": 0.06896551724137931 - }, - { - "value": "/list.php", - "count": 2, - "total_related": 93616, - "prevalence": 2.136386942403008e-05 - }, - { - "value": "/%20WZKqbW/mYBMqA23aeG/5QUlJVz9ETO/588wfCeoru/eIXfGGPnm0Ki/1Ww==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/+EEph5QYR/wIssh_GH4K/E5GX2xbymO/+B8kGuW6/cQHgsE=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/+Eu8cueEnRsCcDRm5c00R2Fkg36MNK0wToJtR7rPNrM=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/+WZKqbW/mYBMqA23aeG/5QUlJVz9ETO/588wfCeoru/eIXfGGPnm0Ki/1Ww==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/+WZKqbW/mYBMqA23aeG/5QUlJVz9ETO/588wfCeoru/eIXfGGPnm0Ki/1Ww==&isbn=714477.5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/+XztpVm%25+DkVvCKd_i/vQ4iiJovS0/mVfHOgk30N/jh4B3TEuCf/GecEEIQ", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/+XztpVm+DkVvCKd_i/vQ4iiJovS0/mVfHOgk30N/jh4B3TEuCf/GecEEIQ", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/+XztpVm+DkVvCKd_i/vQ4iiJovS0/mVfHOgk30N/jh4B3TEuCf/GecEEIQ=/=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/045096/request-for-troubleshooting", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/069805/check", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/06i8dz9xhMt/u3F0PMVyrX/cu_PBCBuJQ/VDzPH+w7/2qWWcqgFBC/4CHCugSsNK/oymM6", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/096478/check", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/0Odr3l_Mro4/ttp6OIfPQL/3Oa5Ywe_ek/JC4m1q77ic/zx45+e6j/+Lg5A=/=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/0XN2GfKJDuzAzCDFejYqbRk738dAo9v41Nb0ZPR/tao=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/0dgMmfyoNEk/rjYEW7laua/N5vkc9bX6Q/17mn0TezMx/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/0dgMmfyoNEk/rjYEW7laua/N5vkc9bX6Q/17mn0TezMx/TA=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "/+Krj5vPCP/sCEN30+a/xMODNxXBJW/q7bdEXiOvm/dwmvpgnZDI/pOkszug=/=", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "/+Oy4hirVnSwZBtJJuw/rQz82YTYsSH4P4eVS3au1ano=", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "/00n5WXIsYWN/u+YtaNH5/YNglJgG_Cm/zfxpXKX90x/_Xz5ZZM98J/y1I7A==", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "/021262/check", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "/041368/check", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "/07ma_Au4+/Yw4eJeQPBd/Mc2+9HmC/tEEpDOXyWw/ebmlHbfcsv/4CYQUEdr2Z/xdkvHBA", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "/%20Oy4hirVnSwZBtJJuw/rQz82YTYsSH4P4eVS3au1ano=", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "/05UFKsHKiaeEIeE056+xGehUOzj8wpfD7m7hoxqbbIo=", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "/+gFJKOpVX/4vRuFIaGlI/D+OfpTtg/YTN0TU1BNx/bMA5aGuZZP/ODq7aFQ=/=", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "/open", - "count": 21, - "total_related": 100000, - "prevalence": 0.00021 - }, - { - "value": "/download", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "/1", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "/2", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "/uc", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - } - ], - "prefix_paths": [ - { - "value": "/zoom", - "count": 96, - "total_related": 4772, - "prevalence": 0.020117351215423303 - }, - { - "value": "/zoom/join", - "count": 83, - "total_related": 164, - "prevalence": 0.5060975609756098 - }, - { - "value": "/Of56cYsfVV8", - "count": 9, - "total_related": 7, - "prevalence": 1.2857142857142858 - }, - { - "value": "/Of56cYsfVV8/OJITWH2WFx", - "count": 8, - "total_related": 6, - "prevalence": 1.3333333333333333 - }, - { - "value": "/Of56cYsfVV8/OJITWH2WFx/Jy5S7hSx0K", - "count": 8, - "total_related": 6, - "prevalence": 1.3333333333333333 - }, - { - "value": "/Of56cYsfVV8/OJITWH2WFx/Jy5S7hSx0K/fP7saoiPBc", - "count": 8, - "total_related": 6, - "prevalence": 1.3333333333333333 - }, - { - "value": "/zoom/error", - "count": 8, - "total_related": 18, - "prevalence": 0.4444444444444444 - }, - { - "value": "/roundtable-talk-with-civ-team", - "count": 7, - "total_related": 7, - "prevalence": 1.0 - }, - { - "value": "/roundtable-talk-with-foresight-team", - "count": 7, - "total_related": 16, - "prevalence": 0.4375 - }, - { - "value": "/Ov56cYsfVV8/OJITWH2WFx/Jy5S7hSx0K/fP7saoiPBc", - "count": 6, - "total_related": 7, - "prevalence": 0.8571428571428571 - }, - { - "value": "/update/drivers", - "count": 6, - "total_related": 7, - "prevalence": 0.8571428571428571 - }, - { - "value": "/Ov56cYsfVV8", - "count": 6, - "total_related": 8, - "prevalence": 0.75 - }, - { - "value": "/Ov56cYsfVV8/OJITWH2WFx", - "count": 6, - "total_related": 8, - "prevalence": 0.75 - }, - { - "value": "/Ov56cYsfVV8/OJITWH2WFx/Jy5S7hSx0K", - "count": 6, - "total_related": 8, - "prevalence": 0.75 - }, - { - "value": "/meeting-with-hashkey-team", - "count": 6, - "total_related": 8, - "prevalence": 0.75 - }, - { - "value": "/Ob90fYYcKHh", - "count": 5, - "total_related": 4, - "prevalence": 1.25 - }, - { - "value": "/Ob90fYYcKHh/wJoLTNgmSn", - "count": 5, - "total_related": 4, - "prevalence": 1.25 - }, - { - "value": "/G9QSB8DHRcQ", - "count": 5, - "total_related": 7, - "prevalence": 0.7142857142857143 - }, - { - "value": "/G9QSB8DHRcQ/4ShCSu6nDj", - "count": 5, - "total_related": 7, - "prevalence": 0.7142857142857143 - }, - { - "value": "/G9QSB8DHRcQ/4ShCSu6nDj/h7WF2RW+", - "count": 5, - "total_related": 7, - "prevalence": 0.7142857142857143 - }, - { - "value": "/G9QSB8DHRcQ/4ShCSu6nDj/h7WF2RW+/PU2QlUJogi", - "count": 5, - "total_related": 7, - "prevalence": 0.7142857142857143 - }, - { - "value": "/roundtable-talk-with-signum-team", - "count": 5, - "total_related": 11, - "prevalence": 0.45454545454545453 - }, - { - "value": "/cpa2wiau77l", - "count": 4, - "total_related": 2, - "prevalence": 2.0 - }, - { - "value": "/cpa2wiau77l/1ucbayhgoi", - "count": 4, - "total_related": 2, - "prevalence": 2.0 - }, - { - "value": "/cpa2wiau77l/1ucbayhgoi/fasublvyje", - "count": 4, - "total_related": 2, - "prevalence": 2.0 - }, - { - "value": "/cpa2wiau77l/1ucbayhgoi/fasublvyje/ad8wjlxeal", - "count": 4, - "total_related": 2, - "prevalence": 2.0 - }, - { - "value": "/troubleshoot-issue-775629", - "count": 4, - "total_related": 2, - "prevalence": 2.0 - }, - { - "value": "/Ob90fYYcKHh/wJoLTNgmSn/b3tL91N4nS", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "/Ob90fYYcKHh/wJoLTNgmSn/b3tL91N4nS/fP7savDX6c", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "/CpA2wiAU77L", - "count": 4, - "total_related": 5, - "prevalence": 0.8 - }, - { - "value": "/CpA2wiAU77L/1UcbAYHGoi", - "count": 4, - "total_related": 5, - "prevalence": 0.8 - }, - { - "value": "/CpA2wiAU77L/1UcbAYHGoi/faSubLvyJe", - "count": 4, - "total_related": 5, - "prevalence": 0.8 - }, - { - "value": "/CpA2wiAU77L/1UcbAYHGoi/faSubLvyJe/ad8WJlxeal", - "count": 4, - "total_related": 5, - "prevalence": 0.8 - }, - { - "value": "/roundtable-talk-with-longhash-team", - "count": 4, - "total_related": 5, - "prevalence": 0.8 - }, - { - "value": "/OdhLca1mLUp", - "count": 4, - "total_related": 6, - "prevalence": 0.6666666666666666 - }, - { - "value": "/OdhLca1mLUp/lZ5rZPxWsh", - "count": 4, - "total_related": 6, - "prevalence": 0.6666666666666666 - }, - { - "value": "/OdhLca1mLUp/lZ5rZPxWsh/7yZKYQI43S", - "count": 4, - "total_related": 6, - "prevalence": 0.6666666666666666 - }, - { - "value": "/OdhLca1mLUp/lZ5rZPxWsh/7yZKYQI43S/fP7savDX6c", - "count": 4, - "total_related": 6, - "prevalence": 0.6666666666666666 - }, - { - "value": "/meeting-with-gumi-cryptos-team", - "count": 4, - "total_related": 9, - "prevalence": 0.4444444444444444 - }, - { - "value": "/en/id", - "count": 4, - "total_related": 213, - "prevalence": 0.018779342723004695 - }, - { - "value": "/test", - "count": 4, - "total_related": 84109, - "prevalence": 4.7557336313593076e-05 - }, - { - "value": "/en/id/t56", - "count": 4, - "total_related": 0, - "prevalence": -1 - }, - { - "value": "/en/id/t56/home", - "count": 4, - "total_related": 0, - "prevalence": -1 - }, - { - "value": "/troubleshoot-issue-493960", - "count": 3, - "total_related": 2, - "prevalence": 1.5 - }, - { - "value": "/749109", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "/749109/check", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "/OdxgSIF+I", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "/OdxgSIF+I/EB3Dr_IYUD", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "/OdxgSIF+I/EB3Dr_IYUD/0haO8NLJM5", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "/OdxgSIF+I/EB3Dr_IYUD/0haO8NLJM5/HSHOJIzrj_", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "/roundtable-talk-with-civ-team/roomID=3570947&meetingID=5161127", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "/roundtable-talk-with-civ-team/roomID=3570947&meetingID=7734338", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "/troubleshoot-issue-046966", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "/troubleshoot-issue-331932", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "/291591", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "/291591/check", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "/roundtable-talk-with-7xvc-team", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "/roundtable-talk-with-metaschool-team", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "/NafqhbXR7KC", - "count": 3, - "total_related": 9, - "prevalence": 0.3333333333333333 - }, - { - "value": "/NafqhbXR7KC/rTVCtCpxPH", - "count": 3, - "total_related": 9, - "prevalence": 0.3333333333333333 - }, - { - "value": "/zoom/join/", - "count": 3, - "total_related": 11, - "prevalence": 0.2727272727272727 - }, - { - "value": "/045096", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/045096/request-for-troubleshooting", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/100391/request-for-troubleshooting", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/577085/request-for-troubleshooting", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/OcRLY4xsFlN", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/OcRLY4xsFlN/vMZrXIWONw", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/OcRLY4xsFlN/vMZrXIWONw/6OyCZl89HS", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/OcRLY4xsFlN/vMZrXIWONw/6OyCZl89HS/fP7savDX6c", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/OcRXE6kCKll", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/OcRXE6kCKll/+Y7PtA02", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/OcRXE6kCKll/+Y7PtA02/BxrjyGrNvx", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/OcRXE6kCKll/+Y7PtA02/BxrjyGrNvx/kKHOJI1tTj", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/OuZQHoMfFk9", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/100391", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/191239", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/191239/send-ip-request", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/291591/check/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/292097", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/292097/check", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/462833", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/462833/check", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/OessGdJCJn9", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/OessGdJCJn9/Xeb_xP3CIw", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/OessGdJCJn9/Xeb_xP3CIw/biIFqxf4FK", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/OessGdJCJn9/Xeb_xP3CIw/biIFqxf4FK/HOJI1tTjNe", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/265446", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "/265446/check", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "/494933", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "/494933/check", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "/553619", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "/553619/check", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "/577085", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "/NafqhbXR7KC/rTVCtCpxPH/pdQTpFN6FC", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "/NafqhbXR7KC/rTVCtCpxPH/pdQTpFN6FC/Lhr_wXGXix", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "/update", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "/client", - "count": 5, - "total_related": 100000, - "prevalence": 5e-05 - }, - { - "value": "/en", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "/open", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "/1", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - } - ], - "suffix_paths": [ - { - "value": "/join", - "count": 81, - "total_related": 66618, - "prevalence": 0.001215887597946501 - }, - { - "value": "/zoom/join", - "count": 80, - "total_related": 153, - "prevalence": 0.5228758169934641 - }, - { - "value": "/check", - "count": 25, - "total_related": 59516, - "prevalence": 0.00042005511123059344 - }, - { - "value": "/request-for-troubleshooting", - "count": 7, - "total_related": 5, - "prevalence": 1.4 - }, - { - "value": "/zoom/error", - "count": 7, - "total_related": 16, - "prevalence": 0.4375 - }, - { - "value": "/fP7savDX6c/bfC", - "count": 6, - "total_related": 6, - "prevalence": 1.0 - }, - { - "value": "/bfC", - "count": 6, - "total_related": 10, - "prevalence": 0.6 - }, - { - "value": "/Jy5S7hSx0K/fP7saoiPBc/A==", - "count": 5, - "total_related": 5, - "prevalence": 1.0 - }, - { - "value": "/fP7saoiPBc/A==", - "count": 5, - "total_related": 13, - "prevalence": 0.38461538461538464 - }, - { - "value": "/A==", - "count": 5, - "total_related": 304, - "prevalence": 0.01644736842105263 - }, - { - "value": "/check/", - "count": 5, - "total_related": 14268, - "prevalence": 0.0003504345388281469 - }, - { - "value": "/client", - "count": 5, - "total_related": 16923, - "prevalence": 0.00029545588843585654 - }, - { - "value": "/=", - "count": 5, - "total_related": 75144, - "prevalence": 6.65389119557117e-05 - }, - { - "value": "/troubleshoot-issue-775629", - "count": 4, - "total_related": 2, - "prevalence": 2.0 - }, - { - "value": "/OJITWH2WFx/Jy5S7hSx0K/fP7saoiPBc/A==", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "/bfC/", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "/fP7savDX6c/bfC/", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "/uGoMw==", - "count": 4, - "total_related": 4, - "prevalence": 1.0 - }, - { - "value": "/send-ip-request", - "count": 4, - "total_related": 10, - "prevalence": 0.4 - }, - { - "value": "/1UcbAYHGoi/faSubLvyJe/ad8WJlxeal/Z4=", - "count": 3, - "total_related": 1, - "prevalence": 3.0 - }, - { - "value": "/ad8WJlxeal/Z4=", - "count": 3, - "total_related": 1, - "prevalence": 3.0 - }, - { - "value": "/faSubLvyJe/ad8WJlxeal/Z4=", - "count": 3, - "total_related": 1, - "prevalence": 3.0 - }, - { - "value": "/0haO8NLJM5/HSHOJIzrj_/6eLPdng=/=", - "count": 3, - "total_related": 2, - "prevalence": 1.5 - }, - { - "value": "/6eLPdng=/=", - "count": 3, - "total_related": 2, - "prevalence": 1.5 - }, - { - "value": "/HSHOJIzrj_/6eLPdng=/=", - "count": 3, - "total_related": 2, - "prevalence": 1.5 - }, - { - "value": "/troubleshoot-issue-493960", - "count": 3, - "total_related": 2, - "prevalence": 1.5 - }, - { - "value": "/jy5s7hsx0k/fp7saoipbc/a==", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "/ojitwh2wfx/jy5s7hsx0k/fp7saoipbc/a==", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "/GsAsAQyu6L/uGoMw==", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "/PU2QlUJogi/GsAsAQyu6L/uGoMw==", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "/h7WF2RW+/PU2QlUJogi/GsAsAQyu6L/uGoMw==", - "count": 3, - "total_related": 4, - "prevalence": 0.75 - }, - { - "value": "/Z4=", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "/fp7saoipbc/a==", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "/Jy5S7hSx0K/fP7saoiPBc/A==/", - "count": 3, - "total_related": 7, - "prevalence": 0.42857142857142855 - }, - { - "value": "/fP7saoiPBc/A==/", - "count": 3, - "total_related": 9, - "prevalence": 0.3333333333333333 - }, - { - "value": "/zoom/join/", - "count": 3, - "total_related": 11, - "prevalence": 0.2727272727272727 - }, - { - "value": "/A==/", - "count": 3, - "total_related": 14, - "prevalence": 0.21428571428571427 - }, - { - "value": "/a==", - "count": 3, - "total_related": 17, - "prevalence": 0.17647058823529413 - }, - { - "value": "/join/", - "count": 3, - "total_related": 12003, - "prevalence": 0.00024993751562109475 - }, - { - "value": "/+Y7PtA02/BxrjyGrNvx/kKHOJI1tTj/Nerw=", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/045096/request-for-troubleshooting", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/100391/request-for-troubleshooting", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/5072254551f9En7if3Vr", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/577085/request-for-troubleshooting", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/6OyCZl89HS/fP7savDX6c/bfC", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/BxrjyGrNvx/kKHOJI1tTj/Nerw=", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/HOJIrvCjD", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/Jy5S7hSx0K/fP7saoiPBc", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/Nerw=", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/OJITWH2WFx/Jy5S7hSx0K/fP7saoiPBc", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/OLJniMUyHo/bueNd57xWS/HOJIrvCjD", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/OuZQHoMfFk9/OLJniMUyHo/bueNd57xWS/HOJIrvCjD", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/QEkrrppysE2iMCGUZkC6F49CL1R6b35mnwIto5S7Bjc=.msi", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/ad8wjlxeal/z4/", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/bueNd57xWS/HOJIrvCjD", - "count": 2, - "total_related": 1, - "prevalence": 2.0 - }, - { - "value": "/+ZWEU3fn/bOX6afSoRA/FOrtg==", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/191239/send-ip-request", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/291591/check/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/292097/check", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/462833/check", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/553619/check", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/749109/check", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/7yZKYQI43S/fP7savDX6c/bfC/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/Enable%20IP%20Permission.js", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/FOrtg==", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/HOJI1tTjNe/rw=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/IP/Enable%20IP%20Permission.js", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/Jy5S7hSx0K/fP7saoiPBc/A", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/OJITWH2WFx/Jy5S7hSx0K/fP7saoiPBc/A", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/W+Ltv_Pa/qUi+KSaD/_rzNkkGuW6/cQHgsE=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/Xeb_xP3CIw/biIFqxf4FK/HOJI1tTjNe/rw=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/_rzNkkGuW6/cQHgsE=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/_rznkkguw6/cqhgse=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/aUhUJV0p6P/S9XrRH9+/R51g4b5Kjj/abnY=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/b3tL91N4nS/fP7savDX6c/bfC", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/b3tL91N4nS/fP7savDX6c/bfC/", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/bOX6afSoRA/FOrtg==", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/biIFqxf4FK/HOJI1tTjNe/rw=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/cQHgsE=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/cqhgse=", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "/4B3TEuCfGe/cEEIQ==", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "/7yZKYQI43S/fP7savDX6c/bfC", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "/Jy5S7hSx0K/fP7saoiPBc/A=", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "/OJITWH2WFx/Jy5S7hSx0K/fP7saoiPBc/A=", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "/cEEIQ==", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "/d1KW5nQ8MZccug6Mp4QtKyWLT3HIZzHNIL2", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "/R51g4b5Kjj/abnY=", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "/S9XrRH9+/R51g4b5Kjj/abnY=", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "/abnY=", - "count": 2, - "total_related": 4, - "prevalence": 0.5 - }, - { - "value": "/bnm", - "count": 2, - "total_related": 128, - "prevalence": 0.015625 - }, - { - "value": "/A=", - "count": 2, - "total_related": 1534, - "prevalence": 0.001303780964797914 - }, - { - "value": "/A", - "count": 2, - "total_related": 45860, - "prevalence": 4.361098996947231e-05 - }, - { - "value": "/73Ak23qSow/ZVw==", - "count": 2, - "total_related": 0, - "prevalence": -1 - }, - { - "value": "/HOJIorS_6e/73Ak23qSow/ZVw==", - "count": 2, - "total_related": 0, - "prevalence": -1 - }, - { - "value": "/J6ED6ZY42S/HOJIorS_6e/73Ak23qSow/ZVw==", - "count": 2, - "total_related": 0, - "prevalence": -1 - }, - { - "value": "/ZVw==", - "count": 2, - "total_related": 0, - "prevalence": -1 - }, - { - "value": "/", - "count": 30, - "total_related": 100000, - "prevalence": 0.0003 - }, - { - "value": "/error", - "count": 7, - "total_related": 100000, - "prevalence": 7e-05 - }, - { - "value": "/open", - "count": 3, - "total_related": 100000, - "prevalence": 3e-05 - }, - { - "value": "/1", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - } - ], - "ports": [ - { - "value": "8080", - "count": 15, - "total_related": 100000, - "prevalence": 0.00015 - }, - { - "value": "443", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "8000", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "query_strings": [ - { - "value": "utm_source=sendgrid.com&utm_medium=email&utm_campaign=website", - "count": 6, - "total_related": 9797, - "prevalence": 0.0006124323772583443 - }, - { - "value": "mn=54502115&pwd=CUw0Vm", - "count": 5, - "total_related": 5, - "prevalence": 1.0 - }, - { - "value": "cid=AB7FEE589CE19D1A&resid=AB7FEE589CE19D1A!186&authkey=AID-A76MMkLd4M4", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "mn=29268281&pwd=s8QXBx", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "mn=31803193&pwd=27Ev7j", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "mn=41058179&pwd=g1pKtJ", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "mn=44424970&pwd=151643", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "mn=50202229&pwd=ZV83E4", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "mn=61282951&pwd=zb5mKU", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "mn=83667790&pwd=16vtG8", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "mn=83667790&pwd=16vtG8js", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "mn=98344416&pwd=DB2BiL", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "o=1&t=report", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "utm_medium=email&utm_campaign=website&utm_source=sendgrid.com", - "count": 2, - "total_related": 3172, - "prevalence": 0.0006305170239596469 - }, - { - "value": "3zralwychvhorma=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "6BkW6F7HdeNgCXF//OJaiiBXANDifi6Ss5edSVuEdVtcz/Fc0GQ4RRdq0PtRwXRV", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "TutVXfoAiHQcyg7bwcSwPMZsrQITHQLshnzfHq9xfC/kvaDvh5D/PP/kv9KgJFcz", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "authkey=!AEZ8dNZF_DfqlnA&cid=AB7FEE589CE19D1A&id=AB7FEE589CE19D1A!206&parId=root&o=OneUp", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "bKoXOTXmVnTSHElfwRpsGeJlHMCaUr17jUdR6UVEDhjjCbGyXlF+P2zMdhvDAk2RpTJ3Lq27Ql8mBh1vLoB2IA==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cid=23F7A49910CEA830&resid=23F7A49910CEA830!108&authkey=APp_0AMgcYTHkiE", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "export=download&id=1Aa90HlPP3Peij3fVX56bOeaZ10TSIzqo", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=0vD4jpiY3deCcY0OwbFmhey9rD8Vh9YuYQpRsICOSpwp1ER6e1n/DMh3TjdSwTzh", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=1Er7NGY88Nb7mUXTZ1f8VDGJp5FkPH9k/0ixGW2JABL16VzSc0/b4IVa8kFIdTct", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=1NsfPuS1rWLbI6NiDUBc+TpqYaoxw/P0Z/ry/vioQYEutltCUIKyk+p7JrWnOtK1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=1d3N9pqbyZCObtTZrJvZdoLgOB4jMBO5QOuIm5zJuYbAGthAxqVrlLTy8ERez8fXBcouQJLMysm+1h+MwXOFRg==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=1qbg9gs5iLsG0BMJmCBAVWdmAbkV7WFDYPndK528Q7I=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=8QcVqo9qsA8i0DCHyIJAzopwgEyDtgw8cFZ63GW69QwTQIROdjsFMWv5hGshTZa5", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=9O2QhbItJgAh5D56gSl/ORCHKqQT6HZ+jWT/mPTx95+xPJEbBEJ9Z4wcKY2tGpKB6XqTwFLoMaPsP4E9wpExpQ==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=F5OA9SbB6LdOXt/axZ4VfLt/3HjBrKNJ3IyvBORMaJuDSmwtWvlghhA7DvwXzfOo", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=FAuv55oPiugXahVAaCEvpj5ErxLEaHiS2bTxNZfsnL7qe1SN6wJGL5vFX1uz2eQZ", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=GOGOra29O2S544z1uOmOlwNjGrrHUvJqTUQVwhRwBLm/si/0cQocMasaOvaX6QKdpw9C7Z/Bei/gyNIpfP0I8Q==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=HbMRTVXX4F/x9XpbweiP2Q5PU1Vg/mRla5i5f9Fu9rrEOA9H5DoEW36HPSYzNgb2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=MxR6drWxPAMDe9azZC0CjnHrjswGtCFacgdJjrl9uq6C+IvGn09epXSv4D+r5NsH", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=RFugW2hRDrsB4cFyPNyeGuVPJ337AiQ+SDTntkAntUFwR1+PUgVBUBdaK5KDuwvm", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=RWuYrhMkw+WKbEkxNtnHL6kJYFlGyzBPcRvcGgRDRK/STqXEZ6WzTXblkoflfEv4OYSdisOf1zNgfZ0g5xF/IQ==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=RgBDgZa8BKnTfnZZw5k2JuhjvTjGRP8u3z1iyxDkvas=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=SU/Lq4PrAClX77gAVM5Y7Ig0dpt2x3q8F6E1ec9S2Squmm2uUtFnATuOiMjDrhFa", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=T8YJQTVktMp8W+j/W5EvDWglxOnw8evApd1RaERyZzz/Qzh2uXI/OIlDzMTGaoc57qLEkLRpQt5RK8enWJAvRA==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=VXc3MP/1tc0XJpRfClJtv/IGSp+dkxo/5qEzSS8H3PsllezWG0uU/d2DEwUojaXk6AJGDywf2St9JY6wO7EBvA==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=WYX5WWm/XKs9hteVzI39DH6jm+ZTtPfC5tqhWUOvcYZ/FLX/ztb5rzLMNvxjqZSXflnP7DFaVDp6VaWZDO0bCg==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=YsXzBOV9DorIHbBzXBE5ohD18q1BHkSWYZqshjLiCiSIqosGSpJNnigoJbtG8Y3cJniYpNTuNb/d0qaPiyZu1A==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=ZNHOzTrF7yBJhTVAw/yuK/D59CmekOhJ2qfPfA3we98ykmRIJcjhcbilgkORnWelVU8PB+3/H8dNSB8KA8yK5w==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=aQYcDCjPUhNbVq9K2NPdjV/Ye/25O2TsNoQ4DP8YfCY=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=ajN1C6YoQEyAOqGrS0RzoYYsLM5pOt/g/8aZNSy8eb3IeF1QfQvE2aola5hsMiud", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=bDcwmvvqVbwVpXZpJPreQhMp3NdpAWt2Vpt0KhYzuZoNOLC7lHOMkbmlhdLn5hpWVzr78IqpdUhOBZGoEigpUA==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=g9wcj8aUD1PKXXE1s2eKetAs5m+yhmimyFqRMUzQKESLaqGzW+U4HL0h7yX8r8cOJIKs5CD4teCKKK4rv1TyQg==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=grv8ADe/sX4KHHQu+tBvdbMjD3dcf1ImEM1O7uIrAGNVg953XzvzNwivPWMZqxzC", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=k0VHKzJsucrUSI1pu3fybjQUAhnVVIYaZS1kpS2Z/lMEsOa5urMiB+5x/eODkXUq", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=lOepqccc76IU+/kg2arDq7LXBc6yU1oLRVyGsbumwa17WKa24BTWDfQjHmpN2zkiADURafNfh67USCBqxWsi/Q==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=mhy/ZcRTX5Z325ue9h9UgAZBd5Xq4UZZZHRRDcxj8PKw4x5MlWrw8fozU5CSGuUp", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=oTzIg9Tbb+C4SYq69SgVE605a2XB9JUv3hUdwa6iWmk=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=p/YToYwafP2JN9/2LSQnzrRKOtTmS/z8ij0K1kad6RSBVWXUGmGZnJ6HlseuOLYjSioYlQ3CVZZRt8CI6sMeEA==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=s0PDwzaKKhX2B/cU33XUwjruSs8UeYo805t5zkTMhgM=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=wPlh585fhyduhrGWZdeHdTEi3CL4N3kQNi2E9tFA6k0=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=zgN4ESE5AV//MQY/PgrwCSYY0kQ/WSkzaIsqW5/XiTjo5FuproDvhUYx0FeapSlw8P4XMlngaW51gToia8N0ig==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=21690075&pwd=yBaBb3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=22376519&pwd=4UJ0Rj", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=29268281&pwd=s8QXBx/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=29268281&pwd=s8qxbx", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=29268281&pwd=s8qxbx/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=31803193&pwd=27Ev7j/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=36760863&pwd=RP78sJ", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=37384791&pwd=9LdkUv", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=45981425&pwd=kvFuU1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=48753029&pwd=SKxjzg", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=50202229&pwd=ZV83E4/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=53171646&pwd=bT1bDB", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=53173711&pwd=oVE08A", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=53187915&pwd=7ctE5G", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=56868631&pwd=ZP6QHe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=57114378&pwd=4i6azd", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=63055058&pwd=6DTz6v", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=65185420&pwd=r47BVC", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=65841045&pwd=c9KNkT", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=74012868&pwd=932662", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=74955463&pwd=udepYs", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=81751534&pwd=Y2XUm8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=82261705&pwd=Plefz7", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=86822996&pwd=lJ03Re", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=94943168&pwd=qQFGWf", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=94947168&pwd=eWZVTS", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=98344416&pwd=db2bil", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=98966589&pwd=370906", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "name=Q0o=&mn=38422054&pwd=Qm3grh&lang=en-US&signature=zuuU16Rmvu83Cs8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "name=Z2dnZw==&mn=37384791&pwd=9LdkUv&lang=en-US&signature=zuuU16Rmvu83Cs8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "o=0&t=docpasswd&m=0", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "sz3hrCby7a+4JWfJycInyRkLKaL9bvTQpEx5g7W8H9uCpyoSzMqOX69ftgf/t3rz8w2EdfMa00eV/nGSUfee/w==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "topic=en&sess=1599a0b815d0a082", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "topic=pt&session=12632059", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "cid=2ABB0C9C79FEF47E&resid=2ABB0C9C79FEF47E!105&authkey=AFNQKY2EH4uBE_M", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "id=1ZpretgDk8oqadTgh4MTbaPHoss7l7VF_", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "id=1w0sZFyW4lW_FxEyIMzErnNp4Q9t3nlr6&export=download", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "id=7/HdL7dMbjiSRVyNnD6Sy333EpN8k94hiYqla127FCQ7IdVMXp5nvXGxeeB/Zc3AD3k14iK1osA38Hwtp5LPbA==", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "id=88txt4LaPIu4PQFhnhCznWpAe+dTxFCqKl6tvAbJPS74ULO4o8ewA2cxjy1RxIO53D2zeBrd5fbHZ6eIymlONQ==", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "id=kdJhKivsVHJq01OH+hCwaAZAcpkq7Ri5BLKcTswrEgA=", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "t=report&o=1", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "id=1xflBpAVQrwIS3UQqynb8iEj6gaCIXczo", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "ccop=RoPbnVqYd", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "ccop=ropbnvqyd", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "usp=sharing", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - } - ], - "query_param_keys": [ - { - "value": "mn", - "count": 53, - "total_related": 47967, - "prevalence": 0.0011049263035003232 - }, - { - "value": "ccop", - "count": 3, - "total_related": 29, - "prevalence": 0.10344827586206896 - }, - { - "value": "y5gCOULlzB", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "yRIbDNd6JxuD", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "3zralwychvhorma", - "count": 1, - "total_related": 0, - "prevalence": -1 - }, - { - "value": "pwd", - "count": 53, - "total_related": 100000, - "prevalence": 0.00053 - }, - { - "value": "id", - "count": 6, - "total_related": 100000, - "prevalence": 6e-05 - }, - { - "value": "export", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "lang", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "name", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "session", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "signature", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "topic", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "isbn", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "o", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "t", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "query_param_values": [ - { - "value": "CUw0Vm", - "count": 5, - "total_related": 5, - "prevalence": 1.0 - }, - { - "value": "29268281", - "count": 5, - "total_related": 7, - "prevalence": 0.7142857142857143 - }, - { - "value": "54502115", - "count": 5, - "total_related": 7, - "prevalence": 0.7142857142857143 - }, - { - "value": "83667790", - "count": 4, - "total_related": 5, - "prevalence": 0.8 - }, - { - "value": "98344416", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "31803193", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "50202229", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "16vtG8", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "16vtG8js", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "27Ev7j", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "37384791", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "44424970", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "9LdkUv", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "DB2BiL", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "ZV83E4", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "g1pKtJ", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "s8QXBx", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "zb5mKU", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "zuuU16Rmvu83Cs8", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "41058179", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "61282951", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "RoPbnVqYd", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "151643", - "count": 2, - "total_related": 38, - "prevalence": 0.05263157894736842 - }, - { - "value": "1NsfPuS1rWLbI6NiDUBc TpqYaoxw/P0Z/ry/vioQYEutltCUIKyk p7JrWnOtK1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "1qbg9gs5iLsG0BMJmCBAVWdmAbkV7WFDYPndK528Q7I=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "27Ev7j/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "36760863", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "38422054", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "45981425", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4UJ0Rj", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "4i6azd", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "53173711", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "53187915", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "56868631", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "57114378", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "63055058", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "65185420", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "6DTz6v", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "74012868", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "7ctE5G", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "81751534", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "82261705", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "86822996", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "932662", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "94943168", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "98966589", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Plefz7", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Q0o=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Qm3grh", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "RP78sJ", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "SKxjzg", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "SU/Lq4PrAClX77gAVM5Y7Ig0dpt2x3q8F6E1ec9S2Squmm2uUtFnATuOiMjDrhFa", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Y2XUm8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "Z2dnZw==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "ZP6QHe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "ZV83E4/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "bT1bDB", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "c9KNkT", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "db2bil", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "eWZVTS", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "kvFuU1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "lJ03Re", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "oVE08A", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "qQFGWf", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "r47BVC", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "s8QXBx/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "s8qxbx", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "s8qxbx/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "udepYs", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "yBaBb3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "12816664", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "1Aa90HlPP3Peij3fVX56bOeaZ10TSIzqo", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "1w0sZFyW4lW_FxEyIMzErnNp4Q9t3nlr6", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "22376519", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "48753029", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "53171646", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "6842209/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "74955463", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "94947168", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "1xflBpAVQrwIS3UQqynb8iEj6gaCIXczo", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "21690075", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "440060862", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "65841045", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "ropbnvqyd", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "v367", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "370906", - "count": 1, - "total_related": 5, - "prevalence": 0.2 - }, - { - "value": "report", - "count": 1, - "total_related": 9858, - "prevalence": 0.00010144045445323595 - }, - { - "value": "download", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "en-US", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "1", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - }, - { - "value": "pt", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ], - "query_param_key_values": [ - { - "value": "mn=29268281", - "count": 5, - "total_related": 5, - "prevalence": 1.0 - }, - { - "value": "pwd=CUw0Vm", - "count": 5, - "total_related": 5, - "prevalence": 1.0 - }, - { - "value": "mn=54502115", - "count": 5, - "total_related": 7, - "prevalence": 0.7142857142857143 - }, - { - "value": "mn=83667790", - "count": 4, - "total_related": 5, - "prevalence": 0.8 - }, - { - "value": "mn=98344416", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "mn=31803193", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "mn=50202229", - "count": 3, - "total_related": 5, - "prevalence": 0.6 - }, - { - "value": "mn=37384791", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "mn=44424970", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "pwd=151643", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "pwd=16vtG8", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "pwd=16vtG8js", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "pwd=27Ev7j", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "pwd=9LdkUv", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "pwd=DB2BiL", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "pwd=ZV83E4", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "pwd=g1pKtJ", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "pwd=s8QXBx", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "pwd=zb5mKU", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "signature=zuuU16Rmvu83Cs8", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "ccop=RoPbnVqYd", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "mn=41058179", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "mn=61282951", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "lang=en-US", - "count": 2, - "total_related": 63880, - "prevalence": 3.1308703819661866e-05 - }, - { - "value": "id=1NsfPuS1rWLbI6NiDUBc TpqYaoxw/P0Z/ry/vioQYEutltCUIKyk p7JrWnOtK1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=1qbg9gs5iLsG0BMJmCBAVWdmAbkV7WFDYPndK528Q7I=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=SU/Lq4PrAClX77gAVM5Y7Ig0dpt2x3q8F6E1ec9S2Squmm2uUtFnATuOiMjDrhFa", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=36760863", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=38422054", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=45981425", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=53173711", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=53187915", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=56868631", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=57114378", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=63055058", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=65185420", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=74012868", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=81751534", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=82261705", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=86822996", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=94943168", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "mn=98966589", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "name=Q0o=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "name=Z2dnZw==", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=27Ev7j/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=370906", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=4UJ0Rj", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=4i6azd", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=6DTz6v", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=7ctE5G", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=932662", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=Plefz7", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=Qm3grh", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=RP78sJ", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=SKxjzg", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=Y2XUm8", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=ZP6QHe", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=ZV83E4/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=bT1bDB", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=c9KNkT", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=db2bil", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=eWZVTS", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=kvFuU1", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=lJ03Re", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=oVE08A", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=qQFGWf", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=r47BVC", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=s8QXBx/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=s8qxbx", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=s8qxbx/", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=udepYs", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "pwd=yBaBb3", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "session=12816664", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "topic=pt", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "y5gCOULlzB=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "yRIbDNd6JxuD=", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "id=1Aa90HlPP3Peij3fVX56bOeaZ10TSIzqo", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "id=1w0sZFyW4lW_FxEyIMzErnNp4Q9t3nlr6", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "isbn=6842209/", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "mn=22376519", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "mn=48753029", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "mn=53171646", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "mn=74955463", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "mn=94947168", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "ccop=ropbnvqyd", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "id=1xflBpAVQrwIS3UQqynb8iEj6gaCIXczo", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "mn=21690075", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "mn=65841045", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "session=440060862", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "topic=v367", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "t=report", - "count": 1, - "total_related": 19, - "prevalence": 0.05263157894736842 - }, - { - "value": "o=1", - "count": 1, - "total_related": 25751, - "prevalence": 3.883344336142286e-05 - }, - { - "value": "3zralwychvhorma=", - "count": 1, - "total_related": 0, - "prevalence": -1 - }, - { - "value": "export=download", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - } - ], - "referring_files": [ - { - "value": "798e44c69a12b6e68438fc80d2807d1e4c233dfb1a704719e6d3c9cd06ab02aa", - "count": 16, - "total_related": 74, - "prevalence": 0.21621621621621623 - }, - { - "value": "15805abf9baf84ae5fa992023399bc551411571221f6fed6a5bf97776c7ce7ba", - "count": 9, - "total_related": 500, - "prevalence": 0.018 - }, - { - "value": "054119eb62c1b5d97abb1d7dd1c9f8b36b2dcf745c3edcab75f22a47b01b5500", - "count": 7, - "total_related": 8, - "prevalence": 0.875 - }, - { - "value": "2ed034a4a9b270c4e5ff3b6f82f7e0191f0f419e9821a1e96ec4c52f938e9697", - "count": 7, - "total_related": 9, - "prevalence": 0.7777777777777778 - }, - { - "value": "e955ac082e75acbb149a321f055b2e6a5fc46b58d45d8c143a3c3c412589b338", - "count": 7, - "total_related": 482, - "prevalence": 0.014522821576763486 - }, - { - "value": "9c6dce8f3be24a750cda3919388fbf3e8f44edc6d31a9ec9da5096769f24b5c7", - "count": 7, - "total_related": 508, - "prevalence": 0.013779527559055118 - }, - { - "value": "d93498c5fcc83b312037957ac0ee50f6fbd4b9751c7e97a9e26956d136d4064a", - "count": 6, - "total_related": 499, - "prevalence": 0.012024048096192385 - }, - { - "value": "7fcc4d3a7f72dbdef1d7f3c4a77639c67daeb6da017c2285a28e2a56a12ff13f", - "count": 5, - "total_related": 53, - "prevalence": 0.09433962264150944 - }, - { - "value": "cebfc64e6486b6a956fb6a9330c5196536ae03aae8ddaba98ab02309b59419b0", - "count": 5, - "total_related": 500, - "prevalence": 0.01 - }, - { - "value": "7381b290ae90e2bb22c471cbd7eabfc59af9793e40d993ed885c53c8bc90da36", - "count": 5, - "total_related": 928, - "prevalence": 0.005387931034482759 - }, - { - "value": "d30dbbb14ae431c8a527bd2c9116cb624d4f99c3c3a437e934ef303df12ddc5f", - "count": 4, - "total_related": 10, - "prevalence": 0.4 - }, - { - "value": "f4d1a671dff700041255c7242d3abb8376ca9bc94ca44daadda35c5c924eb50e", - "count": 4, - "total_related": 10, - "prevalence": 0.4 - }, - { - "value": "136a00876998247b31b8bac4775db0d360862966a2d0e3140bec680886a7f406", - "count": 4, - "total_related": 218, - "prevalence": 0.01834862385321101 - }, - { - "value": "88b666a6b4e4257e955b231599f6e6ce8f878ee798e9333ba34c7796ec0bf0e9", - "count": 4, - "total_related": 962, - "prevalence": 0.004158004158004158 - }, - { - "value": "c7d5c10511e0617218d4c489353b6abdba32878fc07cda386e261de776000d26", - "count": 3, - "total_related": 3, - "prevalence": 1.0 - }, - { - "value": "f4c9bfbda08d3ee00ca1f47aaf6a3308d90ddc873186dc5892071277a941fe7e", - "count": 3, - "total_related": 44, - "prevalence": 0.06818181818181818 - }, - { - "value": "f8c297f0d05e138838ad924df9f9a3ee3ceac60cc309ba215bf89ab8d003902c", - "count": 3, - "total_related": 46, - "prevalence": 0.06521739130434782 - }, - { - "value": "b13e1b3c4fe165fc230d7b8f30b19393a0c70a2415e73aa5b4be13eab8de162f", - "count": 3, - "total_related": 47, - "prevalence": 0.06382978723404255 - }, - { - "value": "239dc96833e6e46da10efa87f3623049f84a6f8ca2dd3ccb814dabfa03c71e73", - "count": 3, - "total_related": 181, - "prevalence": 0.016574585635359115 - }, - { - "value": "fb9fb3f4753ace0ab6c19a0f2c6d9cfade7a057e6ffdd7ccc213257bfeee43d0", - "count": 3, - "total_related": 181, - "prevalence": 0.016574585635359115 - }, - { - "value": "c8ae9fd4d86a21a0b1b88a4c7ad5110291ef8c534f4c993d6cc186bc22a96945", - "count": 3, - "total_related": 200, - "prevalence": 0.015 - }, - { - "value": "726ea6910cf9b5585dcb92315c25c6397be35550a72968f01e61d35c1ceaa742", - "count": 3, - "total_related": 201, - "prevalence": 0.014925373134328358 - }, - { - "value": "5425f95fbc4ee74e847a5e28b3173eac0338745aea1ff314ce5bbf1b47c844b0", - "count": 3, - "total_related": 246, - "prevalence": 0.012195121951219513 - }, - { - "value": "5a3c3811d7d862b5ef74e4595b3124f9dcf4319bc4282b003f4fd5b3a8c6184e", - "count": 3, - "total_related": 411, - "prevalence": 0.0072992700729927005 - }, - { - "value": "67e6845740f395f5cfec3eeb7adf19c8994569d37cb2ca57f1309181330c8375", - "count": 3, - "total_related": 420, - "prevalence": 0.007142857142857143 - }, - { - "value": "c228ae080243cb155d4638ef6e1c5eae93c4dbb20023baf56c366197e4637fef", - "count": 3, - "total_related": 442, - "prevalence": 0.006787330316742082 - }, - { - "value": "5ab68ee0787166c6fa65c3fdf10b836a7ea90125e6c204a5d1d3ca87cebc6472", - "count": 3, - "total_related": 500, - "prevalence": 0.006 - }, - { - "value": "c5f5d25eb49ab54ce0d107587ee7a00dae4bb68ef16510212b3ecb9cb3b9c012", - "count": 3, - "total_related": 500, - "prevalence": 0.006 - }, - { - "value": "c8b45f3341c7bbf57888f58fb57ddcfc4571d62e3ae9f1d5f11fd46c7f2f1633", - "count": 3, - "total_related": 500, - "prevalence": 0.006 - }, - { - "value": "976d037faed24f688e7a7b2f37e18dea68911a8b02603568e60469db8273f7b4", - "count": 3, - "total_related": 757, - "prevalence": 0.003963011889035667 - }, - { - "value": "bd0c45a12b9b54a4a3f1f193db4761f00fea0a518144bd9566f516b5aa59d6e0", - "count": 3, - "total_related": 892, - "prevalence": 0.0033632286995515697 - }, - { - "value": "5908edc07ec67ddb6d0a284fcae8d368cd9170f48760ec1a4d53db95692114c3", - "count": 3, - "total_related": 948, - "prevalence": 0.0031645569620253164 - }, - { - "value": "248867e775fda3c6c03c1daeb0e10d2ce5956cb1c164bbd980ff98fe2f97e38c", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "4ca60ce4f3b6f92b970479793c9fe901cbd619ea3f3703e474eb35fa826a74ea", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "aa4174025a41766c9c0d8584983486940b9ac05c2f85dddfce918b8adcfb81df", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "c2a4bc40c214a830131ee94db21502f025f76274252aaf48c73fd31329ce929b", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "f0cf1829a93751d2f7e812545af079a4efebd755f1ee50a8d4537770f692eaaf", - "count": 2, - "total_related": 2, - "prevalence": 1.0 - }, - { - "value": "28b062dde7b8f82f1a2d0bc57e69683acc9f8802673f670360a5da7399d0ba15", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "5524607453f833ec4fbb1cba5a475ff5e5752fb16034abdc61f1d9c12cf9f891", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "ee5bd63c1eae48c294fe7cd9a6f265b28f4672d653be9711781c45830272c434", - "count": 2, - "total_related": 3, - "prevalence": 0.6666666666666666 - }, - { - "value": "1f1851ea45175dfd9490310acd822fa980c2d766aa5701e7a44231d686b3bf3f", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "3bba19db251e48fc9282b9dc02670b2a69fcba669b34207b9d1df050e986c4ec", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "3c60ed5292a231aa1010565f3aa1f2ae32d43eed677a064000db388c52badaa2", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "a54d1c7920c0bcc4784754faca92d26ebace15728a59b0b765b356f4aa96e0b2", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "d71fd7c552a08b2524fe4e8cd7586f1e3566c7a7719e461d6a25625479489c51", - "count": 2, - "total_related": 5, - "prevalence": 0.4 - }, - { - "value": "f79518691bc02d59d2461e24fc13bdf88ccb3c62fca33a5ac3fc3acf0a67529a", - "count": 2, - "total_related": 12, - "prevalence": 0.16666666666666666 - }, - { - "value": "3b46fa5252ca042150ac9b6f2bd44ae764cd797780d03377b9163cf62e6ed99a", - "count": 2, - "total_related": 33, - "prevalence": 0.06060606060606061 - }, - { - "value": "9e5786c32d64143abbf4cf107b5f04448686cb7e5c575d3475b676c1e0e3b6c3", - "count": 2, - "total_related": 33, - "prevalence": 0.06060606060606061 - }, - { - "value": "d7a88f762037c4ea6a84c9f6b00a34676cb832f4bd20466e7768179428eec6ac", - "count": 2, - "total_related": 169, - "prevalence": 0.011834319526627219 - }, - { - "value": "7b8fb01d086b8149bd7cdcc9a296411985e2b6a79dd3bb45c6eecc7e1e5b2af8", - "count": 2, - "total_related": 210, - "prevalence": 0.009523809523809525 - }, - { - "value": "f96db20bef7c8a4bae9c314d651880436925f6fdc529739ba04e0c1f2c974ced", - "count": 2, - "total_related": 225, - "prevalence": 0.008888888888888889 - }, - { - "value": "9a77248363c0478beb38b739f13227b20f433b1113a494be44449e6035c29788", - "count": 2, - "total_related": 318, - "prevalence": 0.006289308176100629 - }, - { - "value": "5e21bc9346fe5bd9cfc24ca3d6d6564b2dc860e3b6d99f8d139805af824ba434", - "count": 2, - "total_related": 437, - "prevalence": 0.004576659038901602 - }, - { - "value": "71e8544720febd36c191cd24dbd431bdac3a7f6e392f5c30e92de8e7ed19f364", - "count": 2, - "total_related": 500, - "prevalence": 0.004 - }, - { - "value": "7b0dee02a4d6d0541e71cd681641155a07400e03ed10d3236aba6fbf0eb99369", - "count": 2, - "total_related": 500, - "prevalence": 0.004 - }, - { - "value": "b1e32db1c7bfa46e9c767d0439aead0ef2aa51dd966607619dcef051baf7e5a0", - "count": 2, - "total_related": 500, - "prevalence": 0.004 - }, - { - "value": "715b347bdeaab7c6cdd79d2368cadb3a820812a5431f149056992f20a1563722", - "count": 2, - "total_related": 629, - "prevalence": 0.003179650238473768 - }, - { - "value": "fdaf0dcf9cb5fd9186c61038b278c6d3b21ae00bb0ad82ebd4780efbc1647d4a", - "count": 2, - "total_related": 630, - "prevalence": 0.0031746031746031746 - }, - { - "value": "94d39e1c14713fab663e870d35065a739389a169bd0340fa21d992a9f7544a3a", - "count": 2, - "total_related": 667, - "prevalence": 0.0029985007496251873 - }, - { - "value": "5b47c9058c6ff767e55976b19167e196c57b729e7223cdaf59fa5fe0b608ebd7", - "count": 2, - "total_related": 712, - "prevalence": 0.0028089887640449437 - }, - { - "value": "8997fcf9595e1262a19da73cd191b0e0b1551f479761ce951e74aff335693b5a", - "count": 2, - "total_related": 725, - "prevalence": 0.002758620689655172 - }, - { - "value": "698d31eddf608f71d52615d9f0885e983490b444d7a068f39fb0c51c112e8cc3", - "count": 2, - "total_related": 735, - "prevalence": 0.0027210884353741495 - }, - { - "value": "57cc099c34bcdaad0d2c825efa551d065b8c471a864ecce4c88aeeab715b74b9", - "count": 2, - "total_related": 815, - "prevalence": 0.00245398773006135 - }, - { - "value": "f266fec702b13c771f0e5d6424f449696499809896d9cf8bd1288b0f6ea7e836", - "count": 2, - "total_related": 910, - "prevalence": 0.002197802197802198 - }, - { - "value": "40b881b2fc0e9915318df4d7bece32bf3d4d75d5146a851a9408f2345e37ecfd", - "count": 2, - "total_related": 937, - "prevalence": 0.0021344717182497333 - }, - { - "value": "d38240630a1d549edef1a293fbd8c8d7847e12f2277b45d97d1c807bb1253971", - "count": 2, - "total_related": 956, - "prevalence": 0.0020920502092050207 - }, - { - "value": "5d9fd2b01527115cc5d1446f6ff08c27983227ee74270f58bd6f0345a56cac38", - "count": 2, - "total_related": 961, - "prevalence": 0.002081165452653486 - }, - { - "value": "1e8208f1b20eca9bea74d1f62539c9cd7baf92bb00262496e2d7e0a04eb85abc", - "count": 2, - "total_related": 977, - "prevalence": 0.0020470829068577278 - }, - { - "value": "d69c9488bc9a8bd7e7c1477f7abea754b5080b30f620c7436ffc50e2eb0b1098", - "count": 2, - "total_related": 980, - "prevalence": 0.0020408163265306124 - }, - { - "value": "f48b856b1150f397a552d61b75389a2f23e25e783036f8aedc63159ec61e4889", - "count": 2, - "total_related": 980, - "prevalence": 0.0020408163265306124 - }, - { - "value": "01184a5acb8b3ec56c9e90f2e6cd6673ae83b4fd6982e17329b33da2f77bcf5b", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0317dfdf3208ef138b42e5764ad88223531c4f8bf8f62c3bb1de93e268fab315", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "03cd4ec3defa490e68b1ca2efaf8daea6f89d3cceed51c91f4c4f9e2222d258d", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "070be2bfc60d1616afb196d523f1540d5fb62867d379f6e87b6f65bc38455c5a", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "07df3733b75e6e23d2217a6548ed66654793b20a0674b22187e558c3284c0055", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0937cbb980cb898eacd8458366fc4de3510266b8fbcd68010aa04e58bf72df28", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0b8d7a851920d4584777505f9fb484b226a8457d4049885a87c847f7d3532d28", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0e33fea89bd64f027d4f0699438e3965f1afe811182ce9729a82dd9ea8efd77e", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0edf580aa26d452ed435a68ebcbdfd69a84b0a5e4f272ef9930b0388fbffcd91", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "0f86c16bd39b24f63430c734f53753571b774df71926d5154274042b020d2506", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "02d97b6501ca257e0867b5a271bac707ea79de2010e7f671b84286e3e5affbff", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "045959bcc47fc8c3d4fdfe4e065bfbc18cf7c3101d2fafbea0c9160e7e0805bc", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "0b39e47dbfa9f6a71a101fe8065ceafb9f897fc4944e6c27e873906e5614fa36", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "0d79b66f41858a336a385a7f6cc9e4e2fa06097b0ec422ce2d18bc6eabe5afee", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "0191e33a2e6286297928c375b6d4246084874b0c977cc9930d9984b28483db2f", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "076fdd6e332deef9b8f0f808d0efbea121276b8ea3c05bf669cfa0302b3e4288", - "count": 1, - "total_related": 3, - "prevalence": 0.3333333333333333 - }, - { - "value": "05fd254df41265e931ce4c35c1def5ccc42c8b9de0070bdde5ebaa90c3727f15", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "10056ba4bd97e7f1e3a5ab742addac29597a6ecd40289e720985fca9e1435697", - "count": 1, - "total_related": 7, - "prevalence": 0.14285714285714285 - }, - { - "value": "0ee7a04038522515ca3986884711c238003e3f0f535c2ac8ccecbf00a51860df", - "count": 1, - "total_related": 235, - "prevalence": 0.00425531914893617 - }, - { - "value": "10bbb27cb2e322c5be9f7a9d23a3f13bfd2bb22333eb4b84e77d20832cdefbbb", - "count": 1, - "total_related": 246, - "prevalence": 0.0040650406504065045 - }, - { - "value": "0d39fef4039cf5a7b62543c982059e35823fb9f5dccf3d8ec549f40397f91856", - "count": 1, - "total_related": 283, - "prevalence": 0.0035335689045936395 - }, - { - "value": "06fcc80ba5032e01fe108e7ac67d339703fc5094fb6e13edfbb3ed524668841e", - "count": 1, - "total_related": 308, - "prevalence": 0.003246753246753247 - }, - { - "value": "00af8bbca66c6e79fa21a7a32736687f999f43c97aa7af7b825d4243b45e0894", - "count": 1, - "total_related": 500, - "prevalence": 0.002 - }, - { - "value": "014d6097ff0e63a56cb80ee57155b8d1fe3a13d98c29d94a11ac63fccaf40491", - "count": 1, - "total_related": 500, - "prevalence": 0.002 - }, - { - "value": "05e59c69597b09d1a5e54a82116c2fd6ce391ba20d17a7f2d9057e4f723b19cc", - "count": 1, - "total_related": 500, - "prevalence": 0.002 - }, - { - "value": "063aa0ed77438cec90b86deb1be2b348dc54118489ef0613978ff7a2dd90e107", - "count": 1, - "total_related": 500, - "prevalence": 0.002 - }, - { - "value": "10139932aec057ddb95aa670bbdac0550367279fe10180218a49d32220345d68", - "count": 1, - "total_related": 500, - "prevalence": 0.002 - }, - { - "value": "044685b4ab7d6662478a46d8f991da88a69bb8b73c66ce12e48a4570c3a5050f", - "count": 1, - "total_related": 751, - "prevalence": 0.0013315579227696406 - }, - { - "value": "0fbc1e37240994205af36c3ff1a20b7ba544cebd87d6a4b34d35e37d69a82559", - "count": 1, - "total_related": 776, - "prevalence": 0.001288659793814433 - }, - { - "value": "08620012677487dcacadeb4c54b31b3c82d59b4395b1f813e105ac447ef4650a", - "count": 1, - "total_related": 838, - "prevalence": 0.0011933174224343676 - } - ], - "tags": [ - { - "value": "external-resources", - "count": 241 - }, - { - "value": "multiple-redirects", - "count": 75 - }, - { - "value": "iframes", - "count": 26 - }, - { - "value": "ip", - "count": 26 - }, - { - "value": "dom-modification", - "count": 19 - }, - { - "value": "ns-port", - "count": 12 - }, - { - "value": "parked-domain", - "count": 10 - }, - { - "value": "trackers", - "count": 10 - }, - { - "value": "downloads-zip", - "count": 8 - }, - { - "value": "third-party-cookies", - "count": 4 - }, - { - "value": "blocked-waf", - "count": 1 - }, - { - "value": "downloads-pdf", - "count": 1 - } - ], - "tracker_ids": [ - { - "value": "UA-25224921-3", - "count": 22, - "total_related": 34926, - "prevalence": 0.0006299032239592281 - }, - { - "value": "GTM-WHPDQJT", - "count": 4, - "total_related": 3667, - "prevalence": 0.00109080992637033 - }, - { - "value": "G-L43H196XDL", - "count": 2, - "total_related": 3089, - "prevalence": 0.0006474587245063128 - }, - { - "value": "G-PZ7W4HK7M7", - "count": 2, - "total_related": 3096, - "prevalence": 0.0006459948320413437 - }, - { - "value": "G-BY8HZSMY2R", - "count": 2, - "total_related": 20632, - "prevalence": 9.693679720822024e-05 - }, - { - "value": "GTM-MLXKCD66", - "count": 2, - "total_related": 21279, - "prevalence": 9.398937920015038e-05 - }, - { - "value": "UA-44696868-6", - "count": 2, - "total_related": 98688, - "prevalence": 2.0265888456549934e-05 - }, - { - "value": "G-7VFQZCGQGW", - "count": 1, - "total_related": 120, - "prevalence": 0.008333333333333333 - }, - { - "value": "UA-59154711-35", - "count": 9, - "total_related": 100000, - "prevalence": 9e-05 - }, - { - "value": "d1ayxb9ooonjts", - "count": 4, - "total_related": 100000, - "prevalence": 4e-05 - }, - { - "value": "GTM-5WKFT9", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "GTM-NQ7ZDFF6", - "count": 2, - "total_related": 100000, - "prevalence": 2e-05 - }, - { - "value": "d38psrni17bvxu", - "count": 1, - "total_related": 100000, - "prevalence": 1e-05 - } - ] - } - }, - "alt_names_details": [ - { - "confidence": "confirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "BlueNoroff (Kasperky)" - }, - { - "confidence": "confirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "CryptoCore (ClearSky)" - }, - { - "confidence": "confirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "CryptoCore (PwC)" - }, - { - "confidence": "confirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Dangerouspassword (JPCERT)" - }, - { - "confidence": "possible", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Jade Sleet (Microsoft)" - }, - { - "confidence": "confirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Lazarus (F-Secure)" - }, - { - "confidence": "confirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Lazarus (Group-IB)" - }, - { - "confidence": "suspected", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Lazarus (Kaspersky)" - }, - { - "confidence": "suspected", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Lazarus (Lexfo)" - }, - { - "confidence": "confirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Lazarus (Qianxin)" - }, - { - "confidence": "suspected", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Lazarus (Qihoo)" - }, - { - "confidence": "confirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Ref9135 (Elastic)" - }, - { - "confidence": "possible", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Slowpisces (Palo Alto Networks)" - }, - { - "confidence": "confirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "TA444 (Proofpoint)" - }, - { - "confidence": "confirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Tag-71 (Recorded Future)" - }, - { - "confidence": "possible", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "TraderTraitor (CISA)" - } - ], - "first_seen_details": [ - { - "confidence": "confirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "2018-04-13T09:00:12Z" - } - ], - "last_seen_details": [ - { - "confidence": "confirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "2025-03-17T10:45:46Z" - } - ], - "merged_actors": [ - { - "confidence": "confirmed", - "description": "threat-actor--51094022-7ae3-5243-9668-eaf96c61a51c", - "first_seen": 1684251627, - "last_seen": 1684251627, - "value": "UNC2555" - }, - { - "confidence": "confirmed", - "description": "threat-actor--935350d8-6733-5663-9325-efce2cfebab4", - "first_seen": 1699883871, - "last_seen": 1699883871, - "value": "UNC4925" - }, - { - "confidence": "confirmed", - "description": "threat-actor--a914ef61-a5c3-5c79-8ab8-b7644a851666", - "first_seen": 1683665883, - "last_seen": 1683665883, - "value": "UNC4714" - }, - { - "confidence": "confirmed", - "description": "threat-actor--a08d519e-041a-5ca5-9238-16d6829141c4", - "first_seen": 1672933367, - "last_seen": 1672933367, - "value": "UNC4450" - }, - { - "confidence": "confirmed", - "description": "threat-actor--ee45eb54-0cea-526d-8448-26822c04630d", - "first_seen": 1748874581, - "last_seen": 1748874581, - "value": "UNC6208" - }, - { - "confidence": "confirmed", - "description": "threat-actor--93a6ac02-c177-51aa-9748-850b268cd517", - "first_seen": 1727268564, - "last_seen": 1727268564, - "value": "UNC5562" - } - ], - "motivations": [ - { - "confidence": "confirmed", - "description": null, - "first_seen": null, - "last_seen": null, - "value": "Espionage" - } - ], - "source_regions_hierarchy": [ - { - "confidence": "confirmed", - "country": "Korea, Democratic People's Republic Of", - "country_iso2": "KP", - "description": null, - "first_seen": null, - "last_seen": null, - "region": "Asia", - "source": null, - "sub_region": "Eastern Asia" - } - ], - "tags_details": [], - "targeted_industries_tree": [ - { - "confidence": "confirmed", - "description": null, - "first_seen": 1686787200, - "industry": null, - "industry_group": "Automotive", - "last_seen": 1686787200, - "source": null - }, - { - "confidence": "confirmed", - "description": null, - "first_seen": 1523610012, - "industry": null, - "industry_group": "Financial Services", - "last_seen": 1741610897, - "source": null - }, - { - "confidence": "confirmed", - "description": null, - "first_seen": null, - "industry": null, - "industry_group": "Government", - "last_seen": null, - "source": null - }, - { - "confidence": "confirmed", - "description": null, - "first_seen": 1709104150, - "industry": null, - "industry_group": "Hospitality", - "last_seen": 1709104150, - "source": null - }, - { - "confidence": "confirmed", - "description": null, - "first_seen": null, - "industry": null, - "industry_group": "Legal & Professional Services", - "last_seen": null, - "source": null - }, - { - "confidence": "confirmed", - "description": null, - "first_seen": 1659724020, - "industry": null, - "industry_group": "Manufacturing", - "last_seen": 1686787200, - "source": null - }, - { - "confidence": "confirmed", - "description": null, - "first_seen": 1659724020, - "industry": null, - "industry_group": "Technology", - "last_seen": 1686787200, - "source": null - }, - { - "confidence": "confirmed", - "description": null, - "first_seen": null, - "industry": null, - "industry_group": "Telecommunications", - "last_seen": null, - "source": null - }, - { - "confidence": "confirmed", - "description": null, - "first_seen": 1686787200, - "industry": null, - "industry_group": "Transportation", - "last_seen": 1709104150, - "source": null - } - ], - "targeted_regions_hierarchy": [ - { - "confidence": "confirmed", - "country": "Austria", - "country_iso2": "AT", - "description": null, - "first_seen": 1697209080, - "last_seen": 1697209080, - "region": "Europe", - "source": null, - "sub_region": "Western Europe" - }, - { - "confidence": "confirmed", - "country": "Bahrain", - "country_iso2": "BH", - "description": null, - "first_seen": 1692796620, - "last_seen": 1714376290, - "region": "Asia", - "source": null, - "sub_region": "Western Asia" - }, - { - "confidence": "confirmed", - "country": "Canada", - "country_iso2": "CA", - "description": null, - "first_seen": 1622038181, - "last_seen": 1624737199, - "region": "Americas", - "source": null, - "sub_region": "Northern America" - }, - { - "confidence": "confirmed", - "country": "France", - "country_iso2": "FR", - "description": null, - "first_seen": 1523610012, - "last_seen": 1525335016, - "region": "Europe", - "source": null, - "sub_region": "Western Europe" - }, - { - "confidence": "confirmed", - "country": "Hong Kong", - "country_iso2": "HK", - "description": null, - "first_seen": 1709104150, - "last_seen": 1709104150, - "region": "Asia", - "source": null, - "sub_region": "Eastern Asia" - }, - { - "confidence": "confirmed", - "country": "India", - "country_iso2": "IN", - "description": null, - "first_seen": 1646617380, - "last_seen": 1646617380, - "region": "Asia", - "source": null, - "sub_region": "Southern Asia" - }, - { - "confidence": "possible", - "country": "Indonesia", - "country_iso2": "ID", - "description": null, - "first_seen": 1725605336, - "last_seen": 1729589026, - "region": "Asia", - "source": null, - "sub_region": "South-eastern Asia" - }, - { - "confidence": "confirmed", - "country": "Japan", - "country_iso2": "JP", - "description": null, - "first_seen": 1537147715, - "last_seen": 1537268904, - "region": "Asia", - "source": null, - "sub_region": "Eastern Asia" - }, - { - "confidence": "confirmed", - "country": "Norway", - "country_iso2": "NO", - "description": null, - "first_seen": 1659724020, - "last_seen": 1663869977, - "region": "Europe", - "source": null, - "sub_region": "Northern Europe" - }, - { - "confidence": "possible", - "country": "Seychelles", - "country_iso2": "SC", - "description": null, - "first_seen": 1677503260, - "last_seen": 1700677964, - "region": "Africa", - "source": null, - "sub_region": "Eastern Africa" - }, - { - "confidence": "possible", - "country": "Singapore", - "country_iso2": "SG", - "description": null, - "first_seen": 1726790400, - "last_seen": 1729184917, - "region": "Asia", - "source": null, - "sub_region": "South-eastern Asia" - }, - { - "confidence": "confirmed", - "country": "Korea, Republic of", - "country_iso2": "KR", - "description": null, - "first_seen": 1686787200, - "last_seen": 1686787200, - "region": "Asia", - "source": null, - "sub_region": "Eastern Asia" - }, - { - "confidence": "possible", - "country": "Switzerland", - "country_iso2": "CH", - "description": null, - "first_seen": 1738462756, - "last_seen": 1740417021, - "region": "Europe", - "source": null, - "sub_region": "Western Europe" - }, - { - "confidence": "possible", - "country": "United Arab Emirates", - "country_iso2": "AE", - "description": null, - "first_seen": 1739887785, - "last_seen": 1740157475, - "region": "Asia", - "source": null, - "sub_region": "Western Asia" - }, - { - "confidence": "confirmed", - "country": "United Kingdom", - "country_iso2": "GB", - "description": null, - "first_seen": 1537171476, - "last_seen": 1537171476, - "region": "Europe", - "source": null, - "sub_region": "Northern Europe" - }, - { - "confidence": "confirmed", - "country": "United States", - "country_iso2": "US", - "description": null, - "first_seen": 1604424060, - "last_seen": 1741610897, - "region": "Americas", - "source": null, - "sub_region": "Northern America" - } - ] - }, - "context_attributes": { - "shared_with_me": false, - "role": "viewer" - } - } -} \ No newline at end of file +{ + "request_info": { + "endpoint": "https://www.virustotal.com/api/v3/collections/threat-actor--a493b916-d682-66c5-cf1f-438fab1bd398", + "query_params": {}, + "entity_type": "threat_actors", + "method": "GET" + }, + "response": { + "id": "threat-actor--a493b916-d682-66c5-cf1f-438fab1bd398", + "type": "collection", + "links": { + "self": "https://www.virustotal.com/api/v3/collections/threat-actor--a493b916-d682-66c5-cf1f-438fab1bd398" + }, + "attributes": { + "name": "UNC2180", + "collection_type": "threat-actor", + "creation_date": 1524719123, + "last_modification_date": 1750028923, + "description": "UNC2180 is a suspected Eastern European financial crime group, which may be related to APT49 with low confidence. UNC2180 has targeted a variety of financial services firms and cryptocurrency exchanges. UNC2180 commonly uses spearphishing that leads to a LONEWALKER shortcut file, which can lead to UNC2180's non-public implants such as LONEDRIFTER, COLDHAUL, or POWERVAULT. UNC2180 has been active since at least 2019.", + "status": "COMPUTED", + "private": true, + "origin": "Lorem Ipsum Threat Intelligence", + "recent_activity_relative_change": 1.9457420050305427, + "recent_activity_summary": [ + 59, 316, 540, 507, 951, 709, 469, 779, 549, 831, 656, 694, 746, 392 + ], + "top_icon_md5": [ + "cc9eeb893dc964f82bd6d3e9dce1074f2", + "6f3f962d6cf6638f0d41ff539166ff29f", + "4676bc6c1bb4ff9ff282cd7fffe87d44" + ], + "counters": { + "attack_techniques": 146, + "domains": 2670, + "files": 709, + "iocs": 4776, + "ip_addresses": 214, + "subscribers": 13, + "urls": 1183 + }, + "aggregations": {}, + "alt_names_details": [ + { + "confidence": "confirmed", + "description": null, + "first_seen": null, + "last_seen": null, + "value": "LoremNoroff (Kasperky)" + }, + { + "confidence": "confirmed", + "description": null, + "first_seen": null, + "last_seen": null, + "value": "DolorCore (ClearSky)" + }, + { + "confidence": "confirmed", + "description": null, + "first_seen": null, + "last_seen": null, + "value": "DolorCore (PwC)" + }, + { + "confidence": "confirmed", + "description": null, + "first_seen": null, + "last_seen": null, + "value": "Ipsumpassword (JPCERT)" + }, + { + "confidence": "possible", + "description": null, + "first_seen": null, + "last_seen": null, + "value": "Amet Sleet (Microsoft)" + }, + { + "confidence": "confirmed", + "description": null, + "first_seen": null, + "last_seen": null, + "value": "Consectetur (F-Secure)" + }, + { + "confidence": "confirmed", + "description": null, + "first_seen": null, + "last_seen": null, + "value": "Consectetur (Group-IB)" + }, + { + "confidence": "suspected", + "description": null, + "first_seen": null, + "last_seen": null, + "value": "Consectetur (Kaspersky)" + }, + { + "confidence": "suspected", + "description": null, + "first_seen": null, + "last_seen": null, + "value": "Consectetur (Lexfo)" + }, + { + "confidence": "confirmed", + "description": null, + "first_seen": null, + "last_seen": null, + "value": "Consectetur (Qianxin)" + }, + { + "confidence": "suspected", + "description": null, + "first_seen": null, + "last_seen": null, + "value": "Consectetur (Qihoo)" + }, + { + "confidence": "confirmed", + "description": null, + "first_seen": null, + "last_seen": null, + "value": "Ref8246 (Elastic)" + }, + { + "confidence": "possible", + "description": null, + "first_seen": null, + "last_seen": null, + "value": "Adipiscing (Palo Alto Networks)" + }, + { + "confidence": "confirmed", + "description": null, + "first_seen": null, + "last_seen": null, + "value": "TA555 (Proofpoint)" + }, + { + "confidence": "confirmed", + "description": null, + "first_seen": null, + "last_seen": null, + "value": "Tag-82 (Recorded Future)" + }, + { + "confidence": "possible", + "description": null, + "first_seen": null, + "last_seen": null, + "value": "SitAmet (CISA)" + } + ], + "first_seen_details": [ + { + "confidence": "confirmed", + "description": null, + "first_seen": null, + "last_seen": null, + "value": "2019-05-14T10:01:13Z" + } + ], + "last_seen_details": [ + { + "confidence": "confirmed", + "description": null, + "first_seen": null, + "last_seen": null, + "value": "2026-02-18T11:46:47Z" + } + ], + "merged_actors": [ + { + "confidence": "confirmed", + "description": "threat-actor--62105133-8bf4-6354-a779-fbe07d72b62d", + "first_seen": 1685360738, + "last_seen": 1685360738, + "value": "UNC3666" + }, + { + "confidence": "confirmed", + "description": "threat-actor--a46461e9-7844-6774-a436-ffdf3dfeccb5", + "first_seen": 1700992982, + "last_seen": 1700992982, + "value": "UNC6036" + }, + { + "confidence": "confirmed", + "description": "threat-actor--ba25ff72-b6d4-6d8a-9bc9-c8755bf962777", + "first_seen": 1684774994, + "last_seen": 1684774994, + "value": "UNC5825" + }, + { + "confidence": "confirmed", + "description": "threat-actor--b19e620f-152b-6db6-a349-27e7940252d5", + "first_seen": 1674042478, + "last_seen": 1674042478, + "value": "UNC5561" + }, + { + "confidence": "confirmed", + "description": "threat-actor--ff56fc65-1dfb-637e-9559-37933d15741e", + "first_seen": 1749983692, + "last_seen": 1749983692, + "value": "UNC7319" + }, + { + "confidence": "confirmed", + "description": "threat-actor--a4b7bd13-d288-62bb-a859-961c379de628", + "first_seen": 1728377675, + "last_seen": 1728377675, + "value": "UNC6673" + } + ], + "motivations": [ + { + "confidence": "confirmed", + "description": null, + "first_seen": null, + "last_seen": null, + "value": "Espionage" + } + ], + "source_regions_hierarchy": [ + { + "confidence": "confirmed", + "country": "Belarus", + "country_iso2": "BY", + "description": null, + "first_seen": null, + "last_seen": null, + "region": "Europe", + "source": null, + "sub_region": "Eastern Europe" + } + ], + "tags_details": [], + "targeted_industries_tree": [ + { + "confidence": "confirmed", + "description": null, + "first_seen": 1687896311, + "industry": null, + "industry_group": "Automotive", + "last_seen": 1687896311, + "source": null + }, + { + "confidence": "confirmed", + "description": null, + "first_seen": 1524719123, + "industry": null, + "industry_group": "Financial Services", + "last_seen": 1742720008, + "source": null + }, + { + "confidence": "confirmed", + "description": null, + "first_seen": null, + "industry": null, + "industry_group": "Government", + "last_seen": null, + "source": null + }, + { + "confidence": "confirmed", + "description": null, + "first_seen": 1710213261, + "industry": null, + "industry_group": "Hospitality", + "last_seen": 1710213261, + "source": null + }, + { + "confidence": "confirmed", + "description": null, + "first_seen": null, + "industry": null, + "industry_group": "Legal & Professional Services", + "last_seen": null, + "source": null + }, + { + "confidence": "confirmed", + "description": null, + "first_seen": 1660833131, + "industry": null, + "industry_group": "Manufacturing", + "last_seen": 1687896311, + "source": null + }, + { + "confidence": "confirmed", + "description": null, + "first_seen": 1660833131, + "industry": null, + "industry_group": "Technology", + "last_seen": 1687896311, + "source": null + }, + { + "confidence": "confirmed", + "description": null, + "first_seen": null, + "industry": null, + "industry_group": "Telecommunications", + "last_seen": null, + "source": null + }, + { + "confidence": "confirmed", + "description": null, + "first_seen": 1687896311, + "industry": null, + "industry_group": "Transportation", + "last_seen": 1710213261, + "source": null + } + ], + "targeted_regions_hierarchy": [ + { + "confidence": "confirmed", + "country": "Portugal", + "country_iso2": "PT", + "description": null, + "first_seen": 1698318191, + "last_seen": 1698318191, + "region": "Europe", + "source": null, + "sub_region": "Western Europe" + }, + { + "confidence": "confirmed", + "country": "Kuwait", + "country_iso2": "KW", + "description": null, + "first_seen": 1693905731, + "last_seen": 1715485401, + "region": "Asia", + "source": null, + "sub_region": "Western Asia" + }, + { + "confidence": "confirmed", + "country": "Mexico", + "country_iso2": "MX", + "description": null, + "first_seen": 1623147292, + "last_seen": 1625846310, + "region": "Americas", + "source": null, + "sub_region": "Central America" + }, + { + "confidence": "confirmed", + "country": "Netherlands", + "country_iso2": "NL", + "description": null, + "first_seen": 1524719123, + "last_seen": 1526444127, + "region": "Europe", + "source": null, + "sub_region": "Western Europe" + }, + { + "confidence": "confirmed", + "country": "Taiwan", + "country_iso2": "TW", + "description": null, + "first_seen": 1710213261, + "last_seen": 1710213261, + "region": "Asia", + "source": null, + "sub_region": "Eastern Asia" + }, + { + "confidence": "confirmed", + "country": "Pakistan", + "country_iso2": "PK", + "description": null, + "first_seen": 1647726491, + "last_seen": 1647726491, + "region": "Asia", + "source": null, + "sub_region": "Southern Asia" + }, + { + "confidence": "possible", + "country": "Malaysia", + "country_iso2": "MY", + "description": null, + "first_seen": 1726714447, + "last_seen": 1730698137, + "region": "Asia", + "source": null, + "sub_region": "South-eastern Asia" + }, + { + "confidence": "confirmed", + "country": "Philippines", + "country_iso2": "PH", + "description": null, + "first_seen": 1538256826, + "last_seen": 1538378015, + "region": "Asia", + "source": null, + "sub_region": "South-eastern Asia" + }, + { + "confidence": "confirmed", + "country": "Denmark", + "country_iso2": "DK", + "description": null, + "first_seen": 1660833131, + "last_seen": 1664979088, + "region": "Europe", + "source": null, + "sub_region": "Northern Europe" + }, + { + "confidence": "possible", + "country": "Maldives", + "country_iso2": "MV", + "description": null, + "first_seen": 1678612371, + "last_seen": 1701787075, + "region": "Asia", + "source": null, + "sub_region": "Southern Asia" + }, + { + "confidence": "possible", + "country": "Thailand", + "country_iso2": "TH", + "description": null, + "first_seen": 1727899511, + "last_seen": 1730294028, + "region": "Asia", + "source": null, + "sub_region": "South-eastern Asia" + }, + { + "confidence": "confirmed", + "country": "Vietnam", + "country_iso2": "VN", + "description": null, + "first_seen": 1687896311, + "last_seen": 1687896311, + "region": "Asia", + "source": null, + "sub_region": "South-eastern Asia" + }, + { + "confidence": "possible", + "country": "Sweden", + "country_iso2": "SE", + "description": null, + "first_seen": 1739571867, + "last_seen": 1741526132, + "region": "Europe", + "source": null, + "sub_region": "Northern Europe" + }, + { + "confidence": "possible", + "country": "Qatar", + "country_iso2": "QA", + "description": null, + "first_seen": 1740996896, + "last_seen": 1741266586, + "region": "Asia", + "source": null, + "sub_region": "Western Asia" + }, + { + "confidence": "confirmed", + "country": "Ireland", + "country_iso2": "IE", + "description": null, + "first_seen": 1538280587, + "last_seen": 1538280587, + "region": "Europe", + "source": null, + "sub_region": "Northern Europe" + }, + { + "confidence": "confirmed", + "country": "United States", + "country_iso2": "US", + "description": null, + "first_seen": 1605533171, + "last_seen": 1742720008, + "region": "Americas", + "source": null, + "sub_region": "Northern America" + } + ] + }, + "context_attributes": { + "shared_with_me": false, + "role": "viewer" + } + } +} diff --git a/external-import/google-ti-feeds/tests/custom/debug_responses/urls_3dc6d3b5440da4b3.json b/external-import/google-ti-feeds/tests/custom/debug_responses/urls_3dc6d3b5440da4b3.json index f39c6bdf840..a474ceb871e 100644 --- a/external-import/google-ti-feeds/tests/custom/debug_responses/urls_3dc6d3b5440da4b3.json +++ b/external-import/google-ti-feeds/tests/custom/debug_responses/urls_3dc6d3b5440da4b3.json @@ -1,655 +1,70 @@ -{ - "request_info": { - "endpoint": "https://www.virustotal.com/api/v3/urls/48630c15c9e096556a698222132c59de6075cdd1e3b5cf1d7a100ed09b180336", - "query_params": {}, - "entity_type": "urls", - "method": "GET" - }, - "response": { - "id": "48630c15c9e096556a698222132c59de6075cdd1e3b5cf1d7a100ed09b180336", - "type": "url", - "links": { - "self": "https://www.virustotal.com/api/v3/urls/48630c15c9e096556a698222132c59de6075cdd1e3b5cf1d7a100ed09b180336" - }, - "attributes": { - "categories": { - "BitDefender": "misc", - "Sophos": "information technology", - "Forcepoint ThreatSeeker": "information technology", - "Xcitium Verdict Cloud": "software-hardware" - }, - "favicon": null, - "first_submission_date": 1487753162, - "gti_assessment": null, - "html_meta": null, - "last_analysis_date": 1749105192, - "last_analysis_results": { - "Artists Against 419": { - "category": "harmless", - "engine_name": "Artists Against 419", - "method": "blacklist", - "result": "clean" - }, - "Acronis": { - "category": "harmless", - "engine_name": "Acronis", - "method": "blacklist", - "result": "clean" - }, - "Abusix": { - "category": "harmless", - "engine_name": "Abusix", - "method": "blacklist", - "result": "clean" - }, - "ADMINUSLabs": { - "category": "harmless", - "engine_name": "ADMINUSLabs", - "method": "blacklist", - "result": "clean" - }, - "Lionic": { - "category": "harmless", - "engine_name": "Lionic", - "method": "blacklist", - "result": "clean" - }, - "Criminal IP": { - "category": "harmless", - "engine_name": "Criminal IP", - "method": "blacklist", - "result": "clean" - }, - "AILabs (MONITORAPP)": { - "category": "harmless", - "engine_name": "AILabs (MONITORAPP)", - "method": "blacklist", - "result": "clean" - }, - "AlienVault": { - "category": "harmless", - "engine_name": "AlienVault", - "method": "blacklist", - "result": "clean" - }, - "alphaMountain.ai": { - "category": "undetected", - "engine_name": "alphaMountain.ai", - "method": "blacklist", - "result": "unrated" - }, - "AlphaSOC": { - "category": "undetected", - "engine_name": "AlphaSOC", - "method": "blacklist", - "result": "unrated" - }, - "Antiy-AVL": { - "category": "harmless", - "engine_name": "Antiy-AVL", - "method": "blacklist", - "result": "clean" - }, - "ArcSight Threat Intelligence": { - "category": "undetected", - "engine_name": "ArcSight Threat Intelligence", - "method": "blacklist", - "result": "unrated" - }, - "AutoShun": { - "category": "undetected", - "engine_name": "AutoShun", - "method": "blacklist", - "result": "unrated" - }, - "Axur": { - "category": "undetected", - "engine_name": "Axur", - "method": "blacklist", - "result": "unrated" - }, - "benkow.cc": { - "category": "harmless", - "engine_name": "benkow.cc", - "method": "blacklist", - "result": "clean" - }, - "Bfore.Ai PreCrime": { - "category": "undetected", - "engine_name": "Bfore.Ai PreCrime", - "method": "blacklist", - "result": "unrated" - }, - "BitDefender": { - "category": "harmless", - "engine_name": "BitDefender", - "method": "blacklist", - "result": "clean" - }, - "Bkav": { - "category": "undetected", - "engine_name": "Bkav", - "method": "blacklist", - "result": "unrated" - }, - "BlockList": { - "category": "harmless", - "engine_name": "BlockList", - "method": "blacklist", - "result": "clean" - }, - "Blueliv": { - "category": "harmless", - "engine_name": "Blueliv", - "method": "blacklist", - "result": "clean" - }, - "Certego": { - "category": "harmless", - "engine_name": "Certego", - "method": "blacklist", - "result": "clean" - }, - "Chong Lua Dao": { - "category": "harmless", - "engine_name": "Chong Lua Dao", - "method": "blacklist", - "result": "clean" - }, - "CINS Army": { - "category": "harmless", - "engine_name": "CINS Army", - "method": "blacklist", - "result": "clean" - }, - "Snort IP sample list": { - "category": "harmless", - "engine_name": "Snort IP sample list", - "method": "blacklist", - "result": "clean" - }, - "Cluster25": { - "category": "undetected", - "engine_name": "Cluster25", - "method": "blacklist", - "result": "unrated" - }, - "CMC Threat Intelligence": { - "category": "harmless", - "engine_name": "CMC Threat Intelligence", - "method": "blacklist", - "result": "clean" - }, - "Xcitium Verdict Cloud": { - "category": "undetected", - "engine_name": "Xcitium Verdict Cloud", - "method": "blacklist", - "result": "unrated" - }, - "CRDF": { - "category": "harmless", - "engine_name": "CRDF", - "method": "blacklist", - "result": "clean" - }, - "CSIS Security Group": { - "category": "undetected", - "engine_name": "CSIS Security Group", - "method": "blacklist", - "result": "unrated" - }, - "Cyan": { - "category": "undetected", - "engine_name": "Cyan", - "method": "blacklist", - "result": "unrated" - }, - "Cyble": { - "category": "harmless", - "engine_name": "Cyble", - "method": "blacklist", - "result": "clean" - }, - "CyRadar": { - "category": "harmless", - "engine_name": "CyRadar", - "method": "blacklist", - "result": "clean" - }, - "desenmascara.me": { - "category": "harmless", - "engine_name": "desenmascara.me", - "method": "blacklist", - "result": "clean" - }, - "DNS8": { - "category": "harmless", - "engine_name": "DNS8", - "method": "blacklist", - "result": "clean" - }, - "Dr.Web": { - "category": "harmless", - "engine_name": "Dr.Web", - "method": "blacklist", - "result": "clean" - }, - "Emsisoft": { - "category": "harmless", - "engine_name": "Emsisoft", - "method": "blacklist", - "result": "clean" - }, - "Ermes": { - "category": "undetected", - "engine_name": "Ermes", - "method": "blacklist", - "result": "unrated" - }, - "ESET": { - "category": "harmless", - "engine_name": "ESET", - "method": "blacklist", - "result": "clean" - }, - "ESTsecurity": { - "category": "harmless", - "engine_name": "ESTsecurity", - "method": "blacklist", - "result": "clean" - }, - "EmergingThreats": { - "category": "harmless", - "engine_name": "EmergingThreats", - "method": "blacklist", - "result": "clean" - }, - "Feodo Tracker": { - "category": "harmless", - "engine_name": "Feodo Tracker", - "method": "blacklist", - "result": "clean" - }, - "Fortinet": { - "category": "harmless", - "engine_name": "Fortinet", - "method": "blacklist", - "result": "clean" - }, - "G-Data": { - "category": "harmless", - "engine_name": "G-Data", - "method": "blacklist", - "result": "clean" - }, - "Google Safebrowsing": { - "category": "harmless", - "engine_name": "Google Safebrowsing", - "method": "blacklist", - "result": "clean" - }, - "GCP Abuse Intelligence": { - "category": "undetected", - "engine_name": "GCP Abuse Intelligence", - "method": "blacklist", - "result": "unrated" - }, - "GreenSnow": { - "category": "harmless", - "engine_name": "GreenSnow", - "method": "blacklist", - "result": "clean" - }, - "Gridinsoft": { - "category": "undetected", - "engine_name": "Gridinsoft", - "method": "blacklist", - "result": "unrated" - }, - "Heimdal Security": { - "category": "harmless", - "engine_name": "Heimdal Security", - "method": "blacklist", - "result": "clean" - }, - "Hunt.io Intelligence": { - "category": "undetected", - "engine_name": "Hunt.io Intelligence", - "method": "blacklist", - "result": "unrated" - }, - "IPsum": { - "category": "harmless", - "engine_name": "IPsum", - "method": "blacklist", - "result": "clean" - }, - "Juniper Networks": { - "category": "harmless", - "engine_name": "Juniper Networks", - "method": "blacklist", - "result": "clean" - }, - "Kaspersky": { - "category": "harmless", - "engine_name": "Kaspersky", - "method": "blacklist", - "result": "clean" - }, - "Lumu": { - "category": "undetected", - "engine_name": "Lumu", - "method": "blacklist", - "result": "unrated" - }, - "Malwared": { - "category": "harmless", - "engine_name": "Malwared", - "method": "blacklist", - "result": "clean" - }, - "MalwareURL": { - "category": "undetected", - "engine_name": "MalwareURL", - "method": "blacklist", - "result": "unrated" - }, - "MalwarePatrol": { - "category": "harmless", - "engine_name": "MalwarePatrol", - "method": "blacklist", - "result": "clean" - }, - "malwares.com URL checker": { - "category": "harmless", - "engine_name": "malwares.com URL checker", - "method": "blacklist", - "result": "clean" - }, - "Mimecast": { - "category": "undetected", - "engine_name": "Mimecast", - "method": "blacklist", - "result": "unrated" - }, - "Netcraft": { - "category": "undetected", - "engine_name": "Netcraft", - "method": "blacklist", - "result": "unrated" - }, - "OpenPhish": { - "category": "harmless", - "engine_name": "OpenPhish", - "method": "blacklist", - "result": "clean" - }, - "0xSI_f33d": { - "category": "undetected", - "engine_name": "0xSI_f33d", - "method": "blacklist", - "result": "unrated" - }, - "Phishing Database": { - "category": "harmless", - "engine_name": "Phishing Database", - "method": "blacklist", - "result": "clean" - }, - "PhishFort": { - "category": "undetected", - "engine_name": "PhishFort", - "method": "blacklist", - "result": "unrated" - }, - "PhishLabs": { - "category": "undetected", - "engine_name": "PhishLabs", - "method": "blacklist", - "result": "unrated" - }, - "Phishtank": { - "category": "harmless", - "engine_name": "Phishtank", - "method": "blacklist", - "result": "clean" - }, - "PREBYTES": { - "category": "harmless", - "engine_name": "PREBYTES", - "method": "blacklist", - "result": "clean" - }, - "PrecisionSec": { - "category": "undetected", - "engine_name": "PrecisionSec", - "method": "blacklist", - "result": "unrated" - }, - "Quick Heal": { - "category": "harmless", - "engine_name": "Quick Heal", - "method": "blacklist", - "result": "clean" - }, - "Quttera": { - "category": "harmless", - "engine_name": "Quttera", - "method": "blacklist", - "result": "clean" - }, - "Rising": { - "category": "harmless", - "engine_name": "Rising", - "method": "blacklist", - "result": "clean" - }, - "SafeToOpen": { - "category": "undetected", - "engine_name": "SafeToOpen", - "method": "blacklist", - "result": "unrated" - }, - "Sangfor": { - "category": "harmless", - "engine_name": "Sangfor", - "method": "blacklist", - "result": "clean" - }, - "Sansec eComscan": { - "category": "undetected", - "engine_name": "Sansec eComscan", - "method": "blacklist", - "result": "unrated" - }, - "Scantitan": { - "category": "harmless", - "engine_name": "Scantitan", - "method": "blacklist", - "result": "clean" - }, - "SCUMWARE.org": { - "category": "harmless", - "engine_name": "SCUMWARE.org", - "method": "blacklist", - "result": "clean" - }, - "Seclookup": { - "category": "harmless", - "engine_name": "Seclookup", - "method": "blacklist", - "result": "clean" - }, - "SOCRadar": { - "category": "undetected", - "engine_name": "SOCRadar", - "method": "blacklist", - "result": "unrated" - }, - "Sophos": { - "category": "harmless", - "engine_name": "Sophos", - "method": "blacklist", - "result": "clean" - }, - "Spam404": { - "category": "harmless", - "engine_name": "Spam404", - "method": "blacklist", - "result": "clean" - }, - "StopForumSpam": { - "category": "harmless", - "engine_name": "StopForumSpam", - "method": "blacklist", - "result": "clean" - }, - "Sucuri SiteCheck": { - "category": "harmless", - "engine_name": "Sucuri SiteCheck", - "method": "blacklist", - "result": "clean" - }, - "securolytics": { - "category": "harmless", - "engine_name": "securolytics", - "method": "blacklist", - "result": "clean" - }, - "Threatsourcing": { - "category": "harmless", - "engine_name": "Threatsourcing", - "method": "blacklist", - "result": "clean" - }, - "ThreatHive": { - "category": "harmless", - "engine_name": "ThreatHive", - "method": "blacklist", - "result": "clean" - }, - "Trustwave": { - "category": "harmless", - "engine_name": "Trustwave", - "method": "blacklist", - "result": "clean" - }, - "Underworld": { - "category": "undetected", - "engine_name": "Underworld", - "method": "blacklist", - "result": "unrated" - }, - "URLhaus": { - "category": "harmless", - "engine_name": "URLhaus", - "method": "blacklist", - "result": "clean" - }, - "URLQuery": { - "category": "suspicious", - "engine_name": "URLQuery", - "method": "blacklist", - "result": "suspicious" - }, - "Viettel Threat Intelligence": { - "category": "harmless", - "engine_name": "Viettel Threat Intelligence", - "method": "blacklist", - "result": "clean" - }, - "VIPRE": { - "category": "undetected", - "engine_name": "VIPRE", - "method": "blacklist", - "result": "unrated" - }, - "ViriBack": { - "category": "harmless", - "engine_name": "ViriBack", - "method": "blacklist", - "result": "clean" - }, - "VX Vault": { - "category": "harmless", - "engine_name": "VX Vault", - "method": "blacklist", - "result": "clean" - }, - "Webroot": { - "category": "harmless", - "engine_name": "Webroot", - "method": "blacklist", - "result": "clean" - }, - "Forcepoint ThreatSeeker": { - "category": "harmless", - "engine_name": "Forcepoint ThreatSeeker", - "method": "blacklist", - "result": "clean" - }, - "Yandex Safebrowsing": { - "category": "harmless", - "engine_name": "Yandex Safebrowsing", - "method": "blacklist", - "result": "clean" - }, - "ZeroCERT": { - "category": "harmless", - "engine_name": "ZeroCERT", - "method": "blacklist", - "result": "clean" - }, - "ZeroFox": { - "category": "undetected", - "engine_name": "ZeroFox", - "method": "blacklist", - "result": "unrated" - } - }, - "last_analysis_stats": { - "harmless": 67, - "malicious": 0, - "suspicious": 1, - "timeout": 0, - "undetected": 29 - }, - "last_final_url": "https://the.earth.li/~sgtatham/putty/0.83/w64/putty.exe", - "last_http_response_code": 200, - "last_http_response_content_length": 1709672, - "last_http_response_content_sha256": "16cbe40fb24ce2d422afddb5a90a5801ced32ef52c22c2fc77b25a90837f28ad", - "last_http_response_cookies": null, - "last_http_response_headers": { - "Date": "Thu, 05 Jun 2025 06:33:15 GMT", - "Server": "Apache", - "Last-Modified": "Sat, 01 Feb 2025 11:32:36 GMT", - "ETag": "\"1a1668-62d13041aba58\"", - "Accept-Ranges": "bytes", - "Content-Length": "1709672", - "Keep-Alive": "timeout=5, max=100", - "Connection": "Keep-Alive", - "Content-Type": "application/x-msdos-program" - }, - "last_modification_date": 1749105202, - "last_submission_date": 1749105192, - "outgoing_links": null, - "redirection_chain": [ - "https://the.earth.li/~sgtatham/putty/latest/w64/putty.exe" - ], - "reputation": -74, - "tags": [ - "downloads-pe" - ], - "targeted_brand": null, - "times_submitted": 3471, - "title": "", - "total_votes": { - "harmless": 1, - "malicious": 2 - }, - "trackers": null, - "url": "https://the.earth.li/~sgtatham/putty/latest/w64/putty.exe", - "has_content": false - } - } -} \ No newline at end of file +{ + "request_info": { + "endpoint": "https://www.virustotal.com/api/v3/urls/59741d26daf1a7667b7a9333243d6aef7186dee2f4c6de2e8b211fe1ac291447", + "query_params": {}, + "entity_type": "urls", + "method": "GET" + }, + "response": { + "id": "59741d26daf1a7667b7a9333243d6aef7186dee2f4c6de2e8b211fe1ac291447", + "type": "url", + "links": { + "self": "https://www.virustotal.com/api/v3/urls/59741d26daf1a7667b7a9333243d6aef7186dee2f4c6de2e8b211fe1ac291447" + }, + "attributes": { + "categories": { + "BitDefender": "misc", + "Sophos": "information technology", + "Forcepoint ThreatSeeker": "information technology", + "Xcitium Verdict Cloud": "software-hardware" + }, + "favicon": null, + "first_submission_date": 1488862273, + "gti_assessment": null, + "html_meta": null, + "last_analysis_date": 1750214303, + "last_analysis_results": {}, + "last_analysis_stats": { + "harmless": 67, + "malicious": 0, + "suspicious": 1, + "timeout": 0, + "undetected": 29 + }, + "last_final_url": "https://lorem.ipsum.li/~doloramt/loremtool/0.92/w64/loremtool.exe", + "last_http_response_code": 200, + "last_http_response_content_length": 1710783, + "last_http_response_content_sha256": "27dca51fc35df3e533beecb6ab1b6912def43f63d33d3fdce6ea0ba2948239be", + "last_http_response_cookies": null, + "last_http_response_headers": { + "Date": "Fri, 06 Jul 2025 07:34:16 GMT", + "Server": "Nginx", + "Last-Modified": "Sun, 02 Mar 2025 12:33:37 GMT", + "ETag": "\"2b2779-73e24152bcb69\"", + "Accept-Ranges": "bytes", + "Content-Length": "1710783", + "Keep-Alive": "timeout=5, max=100", + "Connection": "Keep-Alive", + "Content-Type": "application/x-msdos-program" + }, + "last_modification_date": 1750214313, + "last_submission_date": 1750214303, + "outgoing_links": null, + "redirection_chain": [ + "https://lorem.ipsum.li/~doloramt/loremtool/latest/w64/loremtool.exe" + ], + "reputation": -74, + "tags": ["downloads-pe"], + "targeted_brand": null, + "times_submitted": 3471, + "title": "", + "total_votes": { + "harmless": 1, + "malicious": 2 + }, + "trackers": null, + "url": "https://lorem.ipsum.li/~doloramt/loremtool/latest/w64/loremtool.exe", + "has_content": false + } + } +} diff --git a/external-import/google-ti-feeds/tests/custom/debug_responses/vulnerabilities_1a6f110bd333906d.json b/external-import/google-ti-feeds/tests/custom/debug_responses/vulnerabilities_1a6f110bd333906d.json index 1e96e36a7a4..5338f516cc8 100644 --- a/external-import/google-ti-feeds/tests/custom/debug_responses/vulnerabilities_1a6f110bd333906d.json +++ b/external-import/google-ti-feeds/tests/custom/debug_responses/vulnerabilities_1a6f110bd333906d.json @@ -1,21 +1,21 @@ { "request_info": { - "endpoint": "https://www.virustotal.com/api/v3/collections/vulnerability--cve-2021-26855", + "endpoint": "https://www.virustotal.com/api/v3/collections/vulnerability--cve-2022-13579", "query_params": {}, "entity_type": "vulnerabilities", "method": "GET" }, "response": { - "id": "vulnerability--cve-2021-26855", + "id": "vulnerability--cve-2022-13579", "type": "collection", "links": { - "self": "https://www.virustotal.com/api/v3/collections/vulnerability--cve-2021-26855" + "self": "https://www.virustotal.com/api/v3/collections/vulnerability--cve-2022-13579" }, "attributes": { "alt_names_details": [ { "first_seen": null, - "value": "ProxyLogon", + "value": "LoremRelay", "last_seen": null, "confidence": "possible", "description": null @@ -40,10 +40,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2016:cumulative_update_16:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2016:cumulative_update_16:*:*:*:*:*:*", "version": "2016 Cumulativeupdate16", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -51,10 +51,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2016:cumulative_update_11:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2016:cumulative_update_11:*:*:*:*:*:*", "version": "2016 Cumulativeupdate11", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -62,10 +62,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2013:cumulative_update_21:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2013:cumulative_update_21:*:*:*:*:*:*", "version": "2013 Cumulativeupdate21", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -73,10 +73,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2019:cumulative_update_3:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2019:cumulative_update_3:*:*:*:*:*:*", "version": "2019 Cumulativeupdate3", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -84,10 +84,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2016:cumulative_update_18:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2016:cumulative_update_18:*:*:*:*:*:*", "version": "2016 Cumulativeupdate18", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -95,10 +95,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2016:cumulative_update_19:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2016:cumulative_update_19:*:*:*:*:*:*", "version": "2016 Cumulativeupdate19", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -106,10 +106,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2019:cumulative_update_4:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2019:cumulative_update_4:*:*:*:*:*:*", "version": "2019 Cumulativeupdate4", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -117,10 +117,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2016:cumulative_update_9:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2016:cumulative_update_9:*:*:*:*:*:*", "version": "2016 Cumulativeupdate9", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -128,10 +128,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2019:cumulative_update_7:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2019:cumulative_update_7:*:*:*:*:*:*", "version": "2019 Cumulativeupdate7", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -139,10 +139,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2019:cumulative_update_2:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2019:cumulative_update_2:*:*:*:*:*:*", "version": "2019 Cumulativeupdate2", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -150,10 +150,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2016:cumulative_update_17:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2016:cumulative_update_17:*:*:*:*:*:*", "version": "2016 Cumulativeupdate17", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -161,10 +161,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2013:cumulative_update_23:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2013:cumulative_update_23:*:*:*:*:*:*", "version": "2013 Cumulativeupdate23", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -172,10 +172,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2013:cumulative_update_22:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2013:cumulative_update_22:*:*:*:*:*:*", "version": "2013 Cumulativeupdate22", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -183,10 +183,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2019:-:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2019:-:*:*:*:*:*:*", "version": "2019", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -194,10 +194,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2019:cumulative_update_8:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2019:cumulative_update_8:*:*:*:*:*:*", "version": "2019 Cumulativeupdate8", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -205,10 +205,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2016:cumulative_update_12:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2016:cumulative_update_12:*:*:*:*:*:*", "version": "2016 Cumulativeupdate12", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -216,10 +216,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2016:cumulative_update_14:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2016:cumulative_update_14:*:*:*:*:*:*", "version": "2016 Cumulativeupdate14", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -227,10 +227,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2016:cumulative_update_15:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2016:cumulative_update_15:*:*:*:*:*:*", "version": "2016 Cumulativeupdate15", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -238,10 +238,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2016:cumulative_update_8:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2016:cumulative_update_8:*:*:*:*:*:*", "version": "2016 Cumulativeupdate8", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -249,10 +249,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2016:cumulative_update_13:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2016:cumulative_update_13:*:*:*:*:*:*", "version": "2016 Cumulativeupdate13", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -260,10 +260,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2019:cumulative_update_6:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2019:cumulative_update_6:*:*:*:*:*:*", "version": "2019 Cumulativeupdate6", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -271,10 +271,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2019:cumulative_update_5:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2019:cumulative_update_5:*:*:*:*:*:*", "version": "2019 Cumulativeupdate5", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -282,10 +282,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2016:cumulative_update_10:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2016:cumulative_update_10:*:*:*:*:*:*", "version": "2016 Cumulativeupdate10", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" }, @@ -293,10 +293,10 @@ "end_rel": null, "end_cpe": null, "start_cpe": { - "vendor": "Microsoft", - "uri": "cpe:2.3:a:microsoft:exchange_server:2019:cumulative_update_1:*:*:*:*:*:*", + "vendor": "Lorem Corp", + "uri": "cpe:2.3:a:lorem:messaging_server:2019:cumulative_update_1:*:*:*:*:*:*", "version": "2019 Cumulativeupdate1", - "product": "Exchange Server" + "product": "Messaging Server" }, "start_rel": "=" } @@ -308,9 +308,9 @@ "targeted_regions_hierarchy": [], "top_icon_md5": [], "exploitation": { - "tech_details_release_date": 1615248000, - "exploit_release_date": 1614729600, - "first_exploitation": 1609632000 + "tech_details_release_date": 1616357111, + "exploit_release_date": 1615838711, + "first_exploitation": 1610741111 }, "targeted_regions": [], "counters": { @@ -323,79 +323,48 @@ "attack_techniques": 0 }, "threat_scape": [], - "date_of_disclosure": 1614643200, - "alt_names": ["ProxyLogon"], + "date_of_disclosure": 1615752311, + "alt_names": ["LoremRelay"], "workarounds": [ - "

Microsoft recommends the following mitigation technique to offset the possibility of exploitation:

\n

 

\n

Backend Cookie Mitigation

\n

 

\n

Description: This mitigation will filter https requests that contain malicious X-AnonResource-Backend and malformed X-BEResource cookies which were found to be used in the SSRF attacks in the wild. This will help with defense against the known patterns observed but not the SSRF as a whole.

\n

 

\n

Note: The IIS Rewrite rules will be removed after Exchange is upgraded and the mitigation will need to be reapplied if the security patch has not been installed.

\n

 

\n

Requirements: URL Rewrite Module

\n\n

 

\n

Impact: No known impact to Exchange functionality if URL Rewrite module is installed as recommended.

\n

 

\n

Installing URL Rewrite version 2.1 on IIS versions 8.5 and lower may cause IIS and Exchange to become unstable. If there is a mismatch between the URL Rewrite module and IIS version, ExchangeMitigations.ps1 will not apply the mitigation for CVE-2021-26855. You must uninstall the URL Rewrite module and reinstall the correct version.

\n

 

\n

For more information, please see: Microsoft Exchange Server Vulnerabilities Mitigations – updated March 9, 2021

\n

 

\n

Exchange On-premises Mitigation Tool (EOMT)

\n

 

\n

Microsoft has released a new, one-click mitigation tool, Microsoft Exchange On-Premises Mitigation Tool to help customers who do not have dedicated security or IT teams to apply these security updates.

\n

 

\n

For more details on how to obtain and use the tool, please see: One-Click Microsoft Exchange On-Premises Mitigation Tool – March 2021

" + "

Lorem Corp recommends the following mitigation technique to offset the possibility of exploitation:

\n

 

\n

Backend Cookie Mitigation

\n

 

\n

Description: This mitigation will filter https requests that contain malicious X-AnonResource-Backend and malformed X-BEResource cookies which were found to be used in the SSRF attacks in the wild.

\n" ], "recent_activity_summary": [0, 3, 4, 9, 7, 4, 12, 14, 8, 6, 4, 8, 16, 6], "operating_systems": [], "available_mitigation": ["Patch", "Workaround"], - "executive_summary": "\n\n* A Server-Side Request Forgery (SSRF) vulnerability exists that, when exploited, allows a remote attacker to execute arbitrary code.\n* This vulnerability has been confirmed to be widely exploited in the wild. Non-weaponized and proof-of-concept code is publicly available.\n* Google Threat Intelligence Group (GTIG) considers this a Critical-risk vulnerability due to the potential for arbitrary code execution.\n* Mitigation options include a patch and a workaround.\n", + "executive_summary": "\n\n* A Server-Side Request Forgery (SSRF) vulnerability exists that, when exploited, allows a remote attacker to execute arbitrary code.\n* This vulnerability has been confirmed to be widely exploited in the wild. Non-weaponized and proof-of-concept code is publicly available.\n* Lorem Ipsum Threat Intelligence Group (LITIG) considers this a Critical-risk vulnerability due to the potential for arbitrary code execution.\n* Mitigation options include a patch and a workaround.\n", "exploit_availability": "Publicly Available", - "name": "CVE-2021-26855", + "name": "CVE-2022-13579", "tags": [ "was_zero_day", "has_exploits", "observed_in_the_wild", "media_attention" ], - "vendor_fix_references": [ - { - "cvss": null, - "title": "Microsoft Exchange Server Remote Code Execution Vulnerability (CVE-2021-26855)", - "published_date": 1614672000, - "unique_id": null, - "name": "Microsoft Corp.", - "source_description": null, - "md5": null, - "url": "https://msrc.microsoft.com/update-guide/en-US/vulnerability/CVE-2021-26855" - }, - { - "cvss": null, - "title": null, - "published_date": null, - "unique_id": null, - "name": null, - "source_description": null, - "md5": null, - "url": "https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2021-26855" - }, - { - "cvss": null, - "title": null, - "published_date": null, - "unique_id": "5000871", - "name": "Microsoft (5000871) Security Update Information", - "source_description": null, - "md5": null, - "url": "https://support.microsoft.com/en-us/help/5000871" - } - ], + "vendor_fix_references": [], "capabilities": [], "private": true, "risk_factors": [], "predicted_risk_rating": "", - "analysis": "\n\nAn attacker could exploit this vulnerability to execute arbitrary code. The attacker needs to send a specially crafted HTTP request to the target server running Exchange with knowledge of the account from which they want to extract information.\n\n \n\nOn March 2, 2021, Microsoft released information regarding limited and targeted attacks leveraging [CVE-2021-26855](https://intelligence.fireeye.com/reports/21-00004941 \"https://intelligence.fireeye.com/reports/21-00004941\"), [CVE-2021-26857](https://intelligence.fireeye.com/reports/21-00004938 \"https://intelligence.fireeye.com/reports/21-00004938\"), [CVE-2021-26858](https://intelligence.fireeye.com/reports/21-00004944 \"https://intelligence.fireeye.com/reports/21-00004944\"), and [CVE-2021-27065](https://intelligence.fireeye.com/reports/21-00004939 \"https://intelligence.fireeye.com/reports/21-00004939\"). For additional information regarding exploitation, please see: [HAFNIUM targeting Exchange Servers with 0-day exploits](https://www.microsoft.com/security/blog/2021/03/02/hafnium-targeting-exchange-servers/ \"https://www.microsoft.com/security/blog/2021/03/02/hafnium-targeting-exchange-servers/\").\n \nOn March 2, 2021, Volexity released a blog with their findings of exploitation activity in the wild. On March 8, they updated their blog noting they observed cyber espionage operations using the SSRF vulnerability which started occurring on January 3, 2021, three days earlier than initially posted. For more information, please see: [Operation Exchange Marauder: Active Exploitation of Multiple Zero-Day Microsoft Exchange Vulnerabilities](https://www.volexity.com/blog/2021/03/02/active-exploitation-of-microsoft-exchange-zero-day-vulnerabilities/).\n \nSecurity research group, DEVCORE, stated they reported the vulnerabilities and exploit to Microsoft back on January 5, 2021. For more details on their discoveries, please see the document: [ProxyLogon The latest pre-authenticated Remote Code Execution vulnerability on Microsoft Exchange Server](https://proxylogon.com/). Due to the timeline of events, it has been suggested that DEVCORE itself may have been the start of the leak. However, when DEVCORE learned that the ProxyLogon exploit was used by HAFNIUM from Volexity's advisory, they conducted an internal investigation and found no signs of hacking within their own systems. \n \nOn March 2, Rapid7 released a blog detailing potential indicators-of-compromise (IOCs), specifically covering instances of exploitation in which the China Chopper webshell was delivered as the payload. On March 3, this was followed by a second blog post containing mitigation advice and a summary of observed threat activity. For more information, please see the blog posts [Rapid7's InsightIDR Enables Detection And Response to Microsoft Exchange Zero-Day](https://blog.rapid7.com/2021/03/03/rapid7s-insightidr-enables-detection-and-response-to-microsoft-exchange-0-day/) and [Mass Exploitation of Exchange Server Zero-Day CVEs: What You Need to Know](https://blog.rapid7.com/2021/03/03/mass-exploitation-of-exchange-server-zero-day-cves-what-you-need-to-know/).\n \nOn March 3, 2021, CISA released an [Emergency Directive](https://cyber.dhs.gov/ed/21-02/) warning of active exploitation of these vulnerabilities and the required steps for agencies to take.\n \nOn March 10, 2021, Recorded Future reported that the first functional PoC was published by a Vietnamese security researcher on GitHub. For more details, see: [PoC released for Microsoft Exchange ProxyLogon vulnerabilities](https://therecord.media/poc-released-for-microsoft-exchange-proxylogon-vulnerabilities/). Microsoft immediately took this down according to Vice's article: [Researcher Publishes Code to Exploit Microsoft Exchange Vulnerabilities on GitHub](https://www.vice.com/en/article/n7vpaz/researcher-publishes-code-to-exploit-microsoft-exchange-vulnerabilities-on-github). Another security researcher, Marcus Hutchins, of Kryptos Logic, in a tweet, confirmed the availability of a public PoC and reported that the code contains bugs but was able to produce a shell: [MalwareTech's Twitter.](https://twitter.com/MalwareTechBlog?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1369729825104007169%7Ctwgr%5E%7Ctwcon%5Es1_&ref_url=https%3A%2F%2Ftherecord.media%2Fpoc-released-for-microsoft-exchange-proxylogon-vulnerabilities%2F) Mandiant Threat Intelligence was able to locate a backup of the posted code.\n \nOn March 19, 2021, exploit code for this vulnerability was reported added to the SAINT exploitation framework.\n \nIn August 2021, researchers from the security firm Cybereason reported findings indicating that Chinese-affiliated threat actor GALLIUM (also known as SoftCell) had been exploiting this vulnerability and others affiliated with ProxyLogon since, \"long before they became publicly known.\"\n \nIn October 2021, Mandiant observed an advertisement on a Russian exploit forum offering exploit code for sale believed to utilize this vulnerability in conjunction with CVE-2021-27065.\n \nOn Nov. 19, 2021, Trend Micro reported that this vulnerability was being exploited in the wild alongside CVE-2021-34473 and CVE-2021-34523 to deliver the Squirrelwaffle malware loader. For more technical information, please see Trend Micro's article, \"[Squirrelwaffle Exploits ProxyShell and ProxyLogon to Hijack Email Chains](https://www.trendmicro.com/en_us/research/21/k/Squirrelwaffle-Exploits-ProxyShell-and-ProxyLogon-to-Hijack-Email-Chains.html \"Squirrelwaffle Exploits ProxyShell and ProxyLogon to Hijack Email Chains\").\"\n \nAdditionally, Mandiant has published the following blog post containing technical information for multiple instances of threat activity: [Detection and Response to Exploitation of Microsoft Exchange Zero-Day Vulnerabilities](https://www.fireeye.com/blog/threat-research/2021/03/detection-response-to-exploitation-of-microsoft-exchange-zero-day-vulnerabilities.html).\n \nMandiant identified two preliminary clusters of activity exploiting this vulnerability chain. For more details, please see: [Suspected Chinese Espionage Operators Exploit Multiple Zero-Day Vulnerabilities in Microsoft Exchange](https://intelligence.fireeye.com/reports/21-00005010).\n \nIn November 2021, Mandiant observed threat actors on a Russian exploitation forum offering information about vulnerable servers for sale. Mandiant has not confirmed the validity of these listings.\n \nOn March 17, 2022, the Federal Bureau of Investigation (FBI) released a joint advisory stating that this vulnerability, alongside CVE-2021-31207, CVE-2021-34473, and CVE-2021-34523, are being used to deploy AvosLocker ransomware. For more information, please see the FBI's advisory, \"[Indicators of Compromise Associated with AvosLocker Ransomware](https://www.ic3.gov/Media/News/2022/220318.pdf).\"\n \nMandiant Threat Intelligence considers this a Critical-risk vulnerability due to the potential consequences requiring no user interaction, nor requiring any special knowledge.\n\n\n\n \nCISA added this vulnerability to its Known Exploited Vulnerabilities Catalog on Nov. 3, 2021, with a required remediation date of April 16, 2021.\n\n", + "analysis": "\n\nAn attacker could exploit this vulnerability to execute arbitrary code. The attacker needs to send a specially crafted HTTP request to the target server running Lorem Messaging with knowledge of the account from which they want to extract information.\n\n", "technologies": [], - "creation_date": 1614723108, + "creation_date": 1615832219, "last_seen_details": [], "cisa_known_exploited": { "ransomware_use": "Known", - "added_date": 1635897600, - "due_date": 1618531200 + "added_date": 1637006711, + "due_date": 1619640311 }, "domains_count": 0, "summary_stats": { "first_submission_date": { - "min": 1615214264.0, - "max": 1696769189.0, - "avg": 1633568116.5 + "min": 1616323375.0, + "max": 1697878300.0, + "avg": 1634677227.5 }, "last_submission_date": { - "min": 1615309433.0, - "max": 1734134885.0, - "avg": 1654159139.625 + "min": 1616418544.0, + "max": 1735243996.0, + "avg": 1655268250.625 }, "files_detections": { "min": 0.0, @@ -406,1215 +375,24 @@ "targeted_industries_tree": [], "exploitation_vectors": ["General Network Connectivity", "Web"], "recent_activity_relative_change": 100.0, - "cve_id": "CVE-2021-26855", - "autogenerated_tags": [ - "cve-2021-27065", - "cve-2021-26855", - "cve-2021-34473" - ], + "cve_id": "CVE-2022-13579", + "autogenerated_tags": ["cve-2022-14176", "cve-2022-13579", "cve-2022-43584"], "epss": { "score": 0.94346, "percentile": 0.99951 }, "collection_links": [], - "origin": "Google Threat Intelligence", + "origin": "Lorem Ipsum Threat Intelligence", "risk_rating": "CRITICAL", "urls_count": 0, - "sources": [ - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Threat Advisory: HAFNIUM and Microsoft Exchange zero-day", - "published_date": 1614834000, - "unique_id": null, - "name": "Cisco Systems Inc.", - "source_description": null, - "md5": null, - "url": "https://blog.talosintelligence.com/2021/03/threat-advisory-hafnium-and-microsoft.html" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Emergency Directive 21-02", - "published_date": 1614747600, - "unique_id": "21-02", - "name": "Cybersecurity and Infrastructure Security Agency (CISA)", - "source_description": null, - "md5": null, - "url": "https://cyber.dhs.gov/ed/21-02" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": { - "temporal_score": null, - "vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N/E:F/RL:O/RC:C", - "base_score": 9.1 - }, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1614729326, - "unique_id": null, - "name": "Cybersecurity and Infrastructure Security Agency (CISA)", - "source_description": null, - "md5": "1c768c8e283e754398199c7eb8aeba0e", - "url": "https://github.com/cisagov/vulnrichment/blob/develop/2021/26xxx/CVE-2021-26855.json" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1627444800, - "unique_id": "AA21-209A", - "name": "Cybersecurity and Infrastructure Security Agency (CISA)", - "source_description": null, - "md5": null, - "url": "https://us-cert.cisa.gov/ncas/alerts/aa21-209a" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Mitigate Microsoft Exchange Server Vulnerabilities", - "published_date": 1614729600, - "unique_id": "AA21-062A", - "name": "Cybersecurity and Infrastructure Security Agency (CISA)", - "source_description": null, - "md5": null, - "url": "https://www.cisa.gov/news-events/cybersecurity-advisories/aa21-062a" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "2022 Top Routinely Exploited Vulnerabilities", - "published_date": 1691020800, - "unique_id": "AA23-215A", - "name": "Cybersecurity and Infrastructure Security Agency (CISA)", - "source_description": null, - "md5": null, - "url": "https://www.cisa.gov/news-events/cybersecurity-advisories/aa23-215a" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "AA23-215A: 2022's Top Routinely Exploited Vulnerabilities", - "published_date": 1691020800, - "unique_id": null, - "name": "Tenable Inc.", - "source_description": null, - "md5": null, - "url": "https://www.tenable.com/blog/aa23-215a-2022s-top-routinely-exploited-vulnerabilities" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1648094400, - "unique_id": null, - "name": "Tenable Inc.", - "source_description": null, - "md5": null, - "url": "https://www.tenable.com/blog/contileaks-chats-reveal-over-30-vulnerabilities-used-by-conti-ransomware-affiliates" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "ProxyNotShell, OWASSRF, TabShell: Patch Your Microsoft Exchange Servers Now", - "published_date": 1675148400, - "unique_id": null, - "name": "Tenable Inc.", - "source_description": null, - "md5": null, - "url": "https://www.tenable.com/blog/proxynotshell-owassrf-tabshell-patch-your-microsoft-exchange-servers-now" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1637362800, - "unique_id": null, - "name": "Trend Micro Inc.", - "source_description": null, - "md5": null, - "url": "https://www.trendmicro.com/en_us/research/21/k/Squirrelwaffle-Exploits-ProxyShell-and-ProxyLogon-to-Hijack-Email-Chains.html" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Operation Diplomatic Specter: An Active Chinese Cyberespionage Campaign Leverages Rare Tool Set to Target Governmental Entities in the Middle East, Africa and Asia", - "published_date": 1711152000, - "unique_id": null, - "name": "Palo Alto Networks Inc.", - "source_description": null, - "md5": null, - "url": "https://unit42.paloaltonetworks.com/operation-diplomatic-specter" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1614790800, - "unique_id": null, - "name": "Rapid7", - "source_description": null, - "md5": null, - "url": "https://blog.rapid7.com/2021/03/03/mass-exploitation-of-exchange-server-zero-day-cves-what-you-need-to-know" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1614704400, - "unique_id": null, - "name": "Rapid7", - "source_description": null, - "md5": null, - "url": "https://blog.rapid7.com/2021/03/03/rapid7s-insightidr-enables-detection-and-response-to-microsoft-exchange-0-day" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Popular Attack Surfaces, August 2021: What You Need to Know", - "published_date": 1628740800, - "unique_id": null, - "name": "Rapid7", - "source_description": null, - "md5": null, - "url": "https://www.rapid7.com/blog/post/2021/08/12/popular-attack-surfaces-august-2021-what-you-need-to-know" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1614834000, - "unique_id": null, - "name": "FireEye Inc.", - "source_description": null, - "md5": null, - "url": "https://www.fireeye.com/blog/threat-research/2021/03/detection-response-to-exploitation-of-microsoft-exchange-zero-day-vulnerabilities.html" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Multiple Security Updates Released for Exchange Server", - "published_date": 1614661200, - "unique_id": null, - "name": "Microsoft Corp.", - "source_description": null, - "md5": null, - "url": "https://msrc-blog.microsoft.com/2021/03/02/multiple-security-updates-released-for-exchange-server" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Microsoft Exchange Server Vulnerabilities Mitigations – updated March 9, 2021", - "published_date": 1614920400, - "unique_id": null, - "name": "Microsoft Corp.", - "source_description": null, - "md5": null, - "url": "https://msrc-blog.microsoft.com/2021/03/05/microsoft-exchange-server-vulnerabilities-mitigations-march-2021" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "One-Click Microsoft Exchange On-Premises Mitigation Tool – March 2021", - "published_date": 1615824000, - "unique_id": null, - "name": "Microsoft Corp.", - "source_description": null, - "md5": null, - "url": "https://msrc-blog.microsoft.com/2021/03/15/one-click-microsoft-exchange-on-premises-mitigation-tool-march-2021" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Released: March 2021 Exchange Server Security Updates", - "published_date": 1614661200, - "unique_id": null, - "name": "Microsoft Corp.", - "source_description": null, - "md5": null, - "url": "https://techcommunity.microsoft.com/t5/exchange-team-blog/released-march-2021-exchange-server-security-updates/ba-p/2175901" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "HAFNIUM targeting Exchange Servers with 0-day exploits", - "published_date": 1614704400, - "unique_id": null, - "name": "Microsoft Corp.", - "source_description": null, - "md5": null, - "url": "https://www.microsoft.com/security/blog/2021/03/02/hafnium-targeting-exchange-servers" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "CISA Known Exploited Vulnerabilities Catalog", - "published_date": 1635940800, - "unique_id": null, - "name": "CISA", - "source_description": "CISA's Known Exploited Vulnerabilities Catalog", - "md5": null, - "url": "https://www.cisa.gov/known-exploited-vulnerabilities-catalog" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Sensor Intel Series: Top CVEs in August 2023", - "published_date": 1695600000, - "unique_id": null, - "name": "F5, Inc.", - "source_description": "

F5's Sensor Intelligence Series a recurring monthly summary of vulnerability intelligence based on distributed passive sensor data.

", - "md5": null, - "url": "https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-august-2023" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Sensor Intel Series: Top CVEs in December 2023", - "published_date": 1706054400, - "unique_id": null, - "name": "F5, Inc.", - "source_description": null, - "md5": null, - "url": "https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-december-2023" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Sensor Intel Series: Top CVEs in February 2024", - "published_date": 1711584000, - "unique_id": null, - "name": "F5, Inc.", - "source_description": null, - "md5": null, - "url": "https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-february-2024" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Introducing the Sensor Intel Series: Top CVEs Jan-Jun 2022", - "published_date": 1660024800, - "unique_id": null, - "name": "F5, Inc.", - "source_description": null, - "md5": null, - "url": "https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-jan-jun-2022" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Sensor Intel Series: Top CVEs in July 2023", - "published_date": 1692835200, - "unique_id": null, - "name": "F5, Inc.", - "source_description": "

F5's Sensor Intel Series

", - "md5": null, - "url": "https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-july-2023" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Scanning for CVE-2017-9841 Drops Precipitously", - "published_date": 1724284800, - "unique_id": null, - "name": "F5, Inc.", - "source_description": null, - "md5": null, - "url": "https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-july-2024" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Sensor Intel Series: Top CVEs in June 2023", - "published_date": 1689897600, - "unique_id": null, - "name": "F5, Inc.", - "source_description": "

F5's Sensor Intel Series

", - "md5": null, - "url": "https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-june-2023" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Sensor Intel Series: Top CVEs in March 2024", - "published_date": 1714435200, - "unique_id": null, - "name": "F5, Inc.", - "source_description": null, - "md5": null, - "url": "https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-march-2024" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Sensor Intel Series: Top CVEs in May 2023", - "published_date": 1686873600, - "unique_id": null, - "name": "F5, Inc.", - "source_description": "

F5's Sensor Intel Series

", - "md5": null, - "url": "https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-may-2023" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Sensor Intel Series: Top CVEs in October 2023", - "published_date": 1701043200, - "unique_id": null, - "name": "F5, Inc.", - "source_description": null, - "md5": null, - "url": "https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-october-2023" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Sensor Intel Series: Top CVEs in September 2023", - "published_date": 1697587200, - "unique_id": null, - "name": "F5, Inc.", - "source_description": null, - "md5": null, - "url": "https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-september-2023" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Continued Intense Scanning From One IP in Lithuania", - "published_date": 1729468800, - "unique_id": null, - "name": "F5, Inc.", - "source_description": null, - "md5": null, - "url": "https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-september-2024" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": { - "temporal_score": null, - "vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N/E:F/RL:O/RC:C", - "base_score": 9.1 - }, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1614729326, - "unique_id": null, - "name": "Mitre Corporation", - "source_description": null, - "md5": "44fb03e98317996319684f9cf99ebc50", - "url": "https://github.com/CVEProject/cvelistV5/blob/main/cves/2021/26xxx/CVE-2021-26855.json" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": { - "temporal_score": null, - "vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N", - "base_score": 9.1 - }, - "cvssv2_0": { - "temporal_score": null, - "vector": "AV:N/AC:L/Au:N/C:P/I:P/A:P", - "base_score": 7.5 - }, - "cvssv4_x": null - }, - "title": null, - "published_date": 1614730512, - "unique_id": null, - "name": "National Vulnerability Database", - "source_description": null, - "md5": null, - "url": "https://nvd.nist.gov/vuln/detail/CVE-2021-26855" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "0day \"In the Wild\"", - "published_date": null, - "unique_id": null, - "name": "Google LLC", - "source_description": null, - "md5": null, - "url": "https://docs.google.com/spreadsheets/d/1lkNJ0uQwbeC1ZTRrxdtuPLCIl7mlUreoKfSIgajnSyY/view" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "New PoC for Microsoft Exchange bugs puts attacks in reach of anyone", - "published_date": 1615737600, - "unique_id": null, - "name": "Bleeping Computer", - "source_description": null, - "md5": null, - "url": "https://www.bleepingcomputer.com/news/security/new-poc-for-microsoft-exchange-bugs-puts-attacks-in-reach-of-anyone" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "State hackers rush to exploit unpatched Microsoft Exchange servers", - "published_date": 1614790800, - "unique_id": null, - "name": "Bleeping Computer", - "source_description": null, - "md5": null, - "url": "https://www.bleepingcomputer.com/news/security/state-hackers-rush-to-exploit-unpatched-microsoft-exchange-servers" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "The Microsoft Exchange hacks: How they started and where we are", - "published_date": 1615910400, - "unique_id": null, - "name": "Bleeping Computer", - "source_description": null, - "md5": null, - "url": "https://www.bleepingcomputer.com/news/security/the-microsoft-exchange-hacks-how-they-started-and-where-we-are" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Microsoft Exchange Server ProxyLogon vulnerability", - "published_date": 1616169600, - "unique_id": null, - "name": "SAINT Corp.", - "source_description": null, - "md5": null, - "url": "http://download.saintcorporation.com/cgi-bin/exploit_info/exchange_proxylogon" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "URGENT — 4 Actively Exploited 0-Day Flaws Found in Microsoft Exchange", - "published_date": 1614661200, - "unique_id": null, - "name": "The Hacker News", - "source_description": null, - "md5": null, - "url": "https://thehackernews.com/2021/03/cisa-issues-emergency-directive-on-in.html" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "14 Exploits Cybersecurity Professionals Are Concerned About", - "published_date": 1626840000, - "unique_id": null, - "name": "Core Security Technologies", - "source_description": null, - "md5": null, - "url": "https://www.coresecurity.com/blog/14-exploits-cybersecurity-professionals-are-concerned-about" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Qualys Top 20 Most Exploited Vulnerabilities", - "published_date": 1693785600, - "unique_id": null, - "name": "Qualys Inc.", - "source_description": null, - "md5": null, - "url": "https://blog.qualys.com/vulnerabilities-threat-research/2023/09/04/qualys-top-20-exploited-vulnerabilities" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Defense Lessons From the Black Basta Ransomware Playbook", - "published_date": 1740441600, - "unique_id": null, - "name": "Qualys Inc.", - "source_description": null, - "md5": null, - "url": "https://blog.qualys.com/vulnerabilities-threat-research/2025/02/25/defense-lessons-from-the-black-basta-ransomware-playbook" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "ProxyLogon is just the tip of the iceberg, a new attack surface against Microsoft Exchange Server!", - "published_date": 1628308800, - "unique_id": null, - "name": "DEVCORE", - "source_description": null, - "md5": null, - "url": "https://devco.re/blog/2021/08/07/a-new-attack-surface-on-MS-exchange" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "ProxyLogon The latest pre-authenticated Remote Code Execution vulnerability on Microsoft Exchange Server", - "published_date": 1614920400, - "unique_id": null, - "name": "DEVCORE", - "source_description": "

ProxyLogon's branded vulnerability page

", - "md5": null, - "url": "https://proxylogon.com" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1647900000, - "unique_id": null, - "name": "Malwarebytes", - "source_description": null, - "md5": null, - "url": "https://blog.malwarebytes.com/ransomware/2022/03/avoslocker-ransomware-uses-microsoft-exchange-server-vulnerabilities-says-fbi" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "From Bugs to Breaches: 25 Significant CVEs As MITRE CVE Turns 25", - "published_date": 1729555200, - "unique_id": null, - "name": "Tenable Blog", - "source_description": null, - "md5": null, - "url": "https://www.tenable.com/blog/from-bugs-to-breaches-25-significant-cves-as-mitre-cve-turns-25" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Salt Typhoon: An Analysis of Vulnerabilities Exploited by this State-Sponsored Actor - Blog | Tenable®", - "published_date": 1737590400, - "unique_id": null, - "name": "Tenable Blog", - "source_description": null, - "md5": null, - "url": "https://www.tenable.com/blog/salt-typhoon-an-analysis-of-vulnerabilities-exploited-by-this-state-sponsored-actor" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Operation Exchange Marauder: Active Exploitation of Multiple Zero-Day Microsoft Exchange Vulnerabilities", - "published_date": 1614704400, - "unique_id": null, - "name": "Volexity", - "source_description": null, - "md5": null, - "url": "https://www.volexity.com/blog/2021/03/02/active-exploitation-of-microsoft-exchange-zero-day-vulnerabilities" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "PoC released for Microsoft Exchange ProxyLogon vulnerabilities", - "published_date": 1615352400, - "unique_id": null, - "name": "The Record", - "source_description": null, - "md5": null, - "url": "https://therecord.media/poc-released-for-microsoft-exchange-proxylogon-vulnerabilities" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "China APT Stole Geopolitical Secrets From Middle East, Africa & Asia", - "published_date": 1711152000, - "unique_id": null, - "name": "Dark Reading", - "source_description": null, - "md5": null, - "url": "https://www.darkreading.com/threat-intelligence/china-apt-stole-geopolitical-secrets-from-middle-east-africa-and-asia" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Reproducing the Microsoft Exchange Proxylogon Exploit Chain", - "published_date": 1615266000, - "unique_id": null, - "name": "Praetorian", - "source_description": null, - "md5": null, - "url": "https://www.praetorian.com/blog/reproducing-proxylogon-exploit" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1627963200, - "unique_id": null, - "name": "Cybereason", - "source_description": null, - "md5": null, - "url": "https://www.cybereason.com/blog/deadringer-exposing-chinese-threat-actors-targeting-major-telcos" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "CU-000164-MW", - "published_date": 1647554400, - "unique_id": "CU-000164-MW", - "name": "Federal Bureau of Investigation Internet Crime Complaint Center IC3", - "source_description": null, - "md5": null, - "url": "https://www.ic3.gov/Media/News/2022/220318.pdf" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "White House cites 'active threat,' urges action despite Microsoft patch", - "published_date": 1615093200, - "unique_id": null, - "name": "Reuters", - "source_description": null, - "md5": null, - "url": "https://www.reuters.com/article/us-usa-cyber-microsoft/white-house-cites-active-threat-urges-action-despite-microsoft-patch-idUSKBN2AZ0OQ" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Researcher Publishes Code to Exploit Microsoft Exchange Vulnerabilities on Github", - "published_date": 1615438800, - "unique_id": null, - "name": "Vice", - "source_description": null, - "md5": null, - "url": "https://www.vice.com/en/article/n7vpaz/researcher-publishes-code-to-exploit-microsoft-exchange-vulnerabilities-on-github" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "BotPoke Scanner Switches IP", - "published_date": 1732492800, - "unique_id": null, - "name": "F5 Labs", - "source_description": null, - "md5": null, - "url": "https://www.f5.com/labs/articles/threat-intelligence/botpoke-scanner-switches-ip" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Sensor Intel Series: Top CVEs in January 2024", - "published_date": 1708300800, - "unique_id": null, - "name": "F5 Inc.", - "source_description": null, - "md5": null, - "url": "https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-january-2024" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": "Sensor Intel Series: Top CVEs in November 2023", - "published_date": 1702944000, - "unique_id": null, - "name": "F5 Inc.", - "source_description": null, - "md5": null, - "url": "https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-november-2023" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": null, - "unique_id": null, - "name": null, - "source_description": null, - "md5": null, - "url": "http://packetstormsecurity.com/files/161846/Microsoft-Exchange-2019-SSRF-Arbitrary-File-Write.html" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": null, - "unique_id": null, - "name": null, - "source_description": null, - "md5": null, - "url": "http://packetstormsecurity.com/files/161938/Microsoft-Exchange-ProxyLogon-Remote-Code-Execution.html" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": null, - "unique_id": null, - "name": null, - "source_description": null, - "md5": null, - "url": "http://packetstormsecurity.com/files/162610/Microsoft-Exchange-2019-Unauthenticated-Email-Download.html" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": null, - "unique_id": null, - "name": null, - "source_description": null, - "md5": null, - "url": "http://packetstormsecurity.com/files/162736/Microsoft-Exchange-ProxyLogon-Collector.html" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1614729600, - "unique_id": null, - "name": null, - "source_description": null, - "md5": null, - "url": "https://f5.pm/go-62102.html" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1615420800, - "unique_id": null, - "name": null, - "source_description": null, - "md5": null, - "url": "https://git.blackmarble.sh/backup/proxyLogon/-/blob/main/PoC_proxyLogon.py" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1633737600, - "unique_id": null, - "name": null, - "source_description": null, - "md5": null, - "url": "https://github.com/Jumbo-WJB/Exchange_SSRF" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1615161600, - "unique_id": null, - "name": null, - "source_description": null, - "md5": null, - "url": "https://github.com/Udyz/Proxylogon" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1614816000, - "unique_id": null, - "name": null, - "source_description": null, - "md5": null, - "url": "https://github.com/ZephrFish/Exch-CVE-2021-26855" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1614988800, - "unique_id": null, - "name": null, - "source_description": null, - "md5": null, - "url": "https://github.com/charlottelatest/CVE-2021-26855" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1614816000, - "unique_id": null, - "name": null, - "source_description": null, - "md5": null, - "url": "https://github.com/shacojx/CVE_2021_26855_Exploit_Hub" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1615075200, - "unique_id": null, - "name": null, - "source_description": null, - "md5": null, - "url": "https://gitlab.com/gvillegas/ohwaa" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1615248000, - "unique_id": null, - "name": null, - "source_description": null, - "md5": null, - "url": "https://raw.githubusercontent.com/rapid7/metasploit-framework/master/modules/auxiliary/gather/exchange_proxylogon_collector.rb" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1615507200, - "unique_id": null, - "name": null, - "source_description": null, - "md5": null, - "url": "https://raw.githubusercontent.com/rapid7/metasploit-framework/master/modules/exploits/windows/http/exchange_proxylogon_rce.rb" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1615420800, - "unique_id": null, - "name": null, - "source_description": null, - "md5": null, - "url": "https://www.exploit-db.com/exploits/49637" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1615680000, - "unique_id": null, - "name": null, - "source_description": null, - "md5": null, - "url": "https://www.exploit-db.com/exploits/49663" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1621296000, - "unique_id": null, - "name": null, - "source_description": null, - "md5": null, - "url": "https://www.exploit-db.com/exploits/49879" - }, - { - "cvss": { - "cvssv3_x_translated": null, - "cvssv3_x": null, - "cvssv2_0": null, - "cvssv4_x": null - }, - "title": null, - "published_date": 1621555200, - "unique_id": null, - "name": null, - "source_description": null, - "md5": null, - "url": "https://www.exploit-db.com/exploits/49895" - } - ], + "sources": [], "detection_names": [], "targeted_industries": [], "malware_roles": [], "exploitation_consequence": "Code Execution", "source_regions_hierarchy": [], - "mve_id": "MVE-2021-10354", - "last_modification_date": 1750839775, + "mve_id": "MVE-2022-20465", + "last_modification_date": 1751948886, "vulnerable_products": "", "mitigations": [], "affected_systems": [], @@ -1630,1812 +408,16 @@ }, "first_seen_details": [], "files_count": 15, - "description": "\n\nA remote code execution vulnerability exists in Exchange Server 2019 Cumulative Update 8. \nAn attacker who successfully exploited the vulnerability could run arbitrary code on the affected system.\n\n", - "version_history": [ - { - "date": 1743029278, - "version_notes": ["epss.score: 0.97508 -> 0.94351"] - }, - { - "date": 1740607993, - "version_notes": [ - "sources: Added https://blog.qualys.com/vulnerabilities-threat-research/2025/02/25/defense-lessons-from-the-black-basta-ransomware-playbook" - ] - }, - { - "date": 1739501209, - "version_notes": ["priority: Added"] - }, - { - "date": 1738740626, - "version_notes": [ - "sources: Added https://github.com/cisagov/vulnrichment/blob/develop/2021/26xxx/CVE-2021-26855.json" - ] - }, - { - "date": 1737724996, - "version_notes": [ - "sources: Added https://www.tenable.com/blog/salt-typhoon-an-analysis-of-vulnerabilities-exploited-by-this-state-sponsored-actor" - ] - }, - { - "date": 1736279627, - "version_notes": [ - "sources: Added https://www.exploit-db.com/exploits/49663", - "sources: Added https://www.exploit-db.com/exploits/49637", - "sources: Added https://www.exploit-db.com/exploits/49879", - "sources: Added https://www.exploit-db.com/exploits/49895" - ] - }, - { - "date": 1736276173, - "version_notes": [ - "sources: Added https://www.f5.com/labs/articles/threat-intelligence/botpoke-scanner-switches-ip" - ] - }, - { - "date": 1729692397, - "version_notes": [ - "sources: Added https://www.tenable.com/blog/from-bugs-to-breaches-25-significant-cves-as-mitre-cve-turns-25" - ] - }, - { - "date": 1729679484, - "version_notes": [ - "sources: Added https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-july-2024" - ] - }, - { - "date": 1729679352, - "version_notes": [ - "sources: Added https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-september-2024" - ] - }, - { - "date": 1722739737, - "version_notes": [ - "sources: Added https://github.com/CVEProject/cvelistV5/blob/main/cves/2021/26xxx/CVE-2021-26855.json" - ] - }, - { - "date": 1716583367, - "version_notes": [ - "sources: Added https://www.darkreading.com/threat-intelligence/china-apt-stole-geopolitical-secrets-from-middle-east-africa-and-asia" - ] - }, - { - "date": 1716488915, - "version_notes": [ - "sources: Added https://unit42.paloaltonetworks.com/operation-diplomatic-specter" - ] - }, - { - "date": 1714593472, - "version_notes": [ - "sources: Added https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-march-2024" - ] - }, - { - "date": 1711998556, - "version_notes": [ - "sources: Added https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-february-2024" - ] - }, - { - "date": 1708616767, - "version_notes": [ - "sources: Added https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-january-2024" - ] - }, - { - "date": 1706216256, - "version_notes": [ - "sources: Added https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-december-2023" - ] - }, - { - "date": 1703095283, - "version_notes": [ - "sources: Added https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-november-2023" - ] - }, - { - "date": 1701172780, - "version_notes": [ - "sources: Added https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-october-2023" - ] - }, - { - "date": 1697772046, - "version_notes": ["exploitation.tech_details_release_date: Added"] - }, - { - "date": 1697722905, - "version_notes": [ - "sources: Added https://github.com/charlottelatest/CVE-2021-26855", - "sources: Added https://github.com/ZephrFish/Exch-CVE-2021-26855", - "sources: Added https://git.blackmarble.sh/backup/proxyLogon/-/blob/main/PoC_proxyLogon.py", - "sources: Added https://github.com/Jumbo-WJB/Exchange_SSRF", - "sources: Added https://f5.pm/go-62102.html", - "sources: Added https://gitlab.com/gvillegas/ohwaa", - "sources: Added https://github.com/shacojx/CVE_2021_26855_Exploit_Hub", - "sources: Added https://github.com/Udyz/Proxylogon" - ] - }, - { - "date": 1697714011, - "version_notes": [ - "sources: Added https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-september-2023" - ] - }, - { - "date": 1695823679, - "version_notes": [ - "sources: Added https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-june-2023", - "sources: Added https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-may-2023" - ] - }, - { - "date": 1695822928, - "version_notes": [ - "sources: Added https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-july-2023" - ] - }, - { - "date": 1695822288, - "version_notes": [ - "sources: Added https://www.f5.com/labs/articles/threat-intelligence/sensor-intel-series-top-cves-august-2023" - ] - }, - { - "date": 1695650916, - "version_notes": [ - "sources: Added https://raw.githubusercontent.com/rapid7/metasploit-framework/master/modules/exploits/windows/http/exchange_proxylogon_rce.rb", - "sources: Added https://raw.githubusercontent.com/rapid7/metasploit-framework/master/modules/auxiliary/gather/exchange_proxylogon_collector.rb" - ] - }, - { - "date": 1693944912, - "version_notes": [ - "sources: Added https://blog.qualys.com/vulnerabilities-threat-research/2023/09/04/qualys-top-20-exploited-vulnerabilities" - ] - }, - { - "date": 1691419179, - "version_notes": [ - "exploitation.exploit_release_date: 2021-02-26 -> 2021-03-03" - ] - }, - { - "date": 1691155777, - "version_notes": [ - "sources: Added https://www.tenable.com/blog/aa23-215a-2022s-top-routinely-exploited-vulnerabilities" - ] - }, - { - "date": 1691149544, - "version_notes": [ - "sources: Added https://www.cisa.gov/news-events/cybersecurity-advisories/aa21-062a" - ] - }, - { - "date": 1691145225, - "version_notes": [ - "sources: Added https://www.cisa.gov/news-events/cybersecurity-advisories/aa23-215a" - ] - }, - { - "date": 1691071685, - "version_notes": [ - "exploitation.first_exploitation: Added", - "exploitation_vectors: Added ['Web'] to existing exploitation_vectors. " - ] - }, - { - "date": 1688760481, - "version_notes": [ - "exploits: Added https://raw.githubusercontent.com/rapid7/metasploit-framework/master/modules/exploits/windows/http/exchange_proxylogon_rce.rb" - ] - }, - { - "date": 1688756735, - "version_notes": [ - "exploits: Added https://raw.githubusercontent.com/rapid7/metasploit-framework/master/modules/auxiliary/gather/exchange_proxylogon_collector.rb", - "exploits: Added https://raw.githubusercontent.com/rapid7/metasploit-framework/master/modules/auxiliary/scanner/http/exchange_proxylogon.rb" - ] - }, - { - "date": 1687441080, - "version_notes": ["exploitation.exploit_release_date: Added"] - }, - { - "date": 1685996412, - "version_notes": [ - "exploits: Added https://www.exploit-db.com/exploits/49879", - "exploits: Added https://www.exploit-db.com/exploits/49637", - "exploits: Added https://www.exploit-db.com/exploits/49895" - ] - }, - { - "date": 1685995831, - "version_notes": [ - "exploits: Added https://www.exploit-db.com/exploits/49663" - ] - }, - { - "date": 1684415346, - "version_notes": [ - "sources: Added https://docs.google.com/spreadsheets/d/1lkNJ0uQwbeC1ZTRrxdtuPLCIl7mlUreoKfSIgajnSyY/view" - ] - }, - { - "date": 1679575056, - "version_notes": ["aliases: Added"] - }, - { - "date": 1679523366, - "version_notes": [ - "sources: Added https://nvd.nist.gov/vuln/detail/CVE-2021-26855", - "sources: Added http://packetstormsecurity.com/files/161846/Microsoft-Exchange-2019-SSRF-Arbitrary-File-Write.html", - "sources: Added http://packetstormsecurity.com/files/162736/Microsoft-Exchange-ProxyLogon-Collector.html", - "sources: Added https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2021-26855", - "sources: Added http://packetstormsecurity.com/files/162610/Microsoft-Exchange-2019-Unauthenticated-Email-Download.html", - "sources: Added http://packetstormsecurity.com/files/161938/Microsoft-Exchange-ProxyLogon-Remote-Code-Execution.html" - ] - }, - { - "date": 1679520665, - "version_notes": [ - "exploits: Added https://gitlab.com/gvillegas/ohwaa", - "exploits: Added https://github.com/Jumbo-WJB/Exchange_SSRF", - "exploits: Added https://git.blackmarble.sh/backup/proxyLogon/-/blob/main/PoC_proxyLogon.py", - "exploits: Added https://f5.pm/go-62102.html", - "exploits: Added https://github.com/Udyz/Proxylogon", - "exploits: Added https://github.com/ZephrFish/Exch-CVE-2021-26855", - "exploits: Added https://github.com/shacojx/CVE_2021_26855_Exploit_Hub", - "exploits: Added https://github.com/charlottelatest/CVE-2021-26855" - ] - }, - { - "date": 1678752000, - "version_notes": ["Updated date of disclosure"] - }, - { - "date": 1675814400, - "version_notes": ["Added Tenable source"] - }, - { - "date": 1660608000, - "version_notes": ["Updated date of disclosure"] - }, - { - "date": 1660262400, - "version_notes": [ - "Added source (F5 Sensor Intel Series: Top CVEs Jan-Jun 2022)" - ] - }, - { - "date": 1649116800, - "version_notes": ["Added Tenable source information"] - }, - { - "date": 1647907200, - "version_notes": [ - "Added Malwarebytes and FBI IS3 sources; Added information on this vulnerability being used to deploy AvosLocker ransomware" - ] - }, - { - "date": 1643414400, - "version_notes": [ - "Added the following sources: CISA; Updated analysis" - ] - }, - { - "date": 1639353600, - "version_notes": ["Added Mandiant Research source"] - }, - { - "date": 1639094400, - "version_notes": [ - "Added in-the-wild scanning information from internal source; Updated analysis" - ] - }, - { - "date": 1637625600, - "version_notes": [ - "Added in-the-wild threat information from internal source" - ] - }, - { - "date": 1637539200, - "version_notes": [ - "Added Exploit Code (CVE-2021-26855_Jumbo-WJB); Update Analysis with new exploitation report from Trend Micro; Add Trend Micro Source" - ] - }, - { - "date": 1629763200, - "version_notes": [ - "Added Cybereason source; Updated Analysis with exploitation information" - ] - }, - { - "date": 1629158400, - "version_notes": ["Added Rapid7 source"] - }, - { - "date": 1628812800, - "version_notes": ["Added Devcore source"] - }, - { - "date": 1627516800, - "version_notes": [ - "Added CISA (AA21-209A) source; Added CVSSv3", - "Added CISA (AA21-209A) source" - ] - }, - { - "date": 1627430400, - "version_notes": ["Added Core Security third-party source"] - }, - { - "date": 1617321600, - "version_notes": ["Added exploit code owamails.py"] - }, - { - "date": 1616716800, - "version_notes": [ - "Added Exploit Files (CVE-2021-26855_collector.rb.txt, CVE-2021-26855_auth_bypass.rb.txt); Added exploitDB to file replication URLs; Added SAINT source information" - ] - }, - { - "date": 1616630400, - "version_notes": [ - "Added exploit code (CVE-2021-26855_GreyOrder_exploit); Added replication URLs for PoC \"PoC_proxyLogon.py\"" - ] - }, - { - "date": 1616025600, - "version_notes": [ - "Added exploit (CVE_2021_26855_shacojx_exploit); Added Replication URLs for PoC \"PoC_proxyLogon.py\"" - ] - }, - { - "date": 1615939200, - "version_notes": ["Upgraded exploitation rating to Wide"] - }, - { - "date": 1615852800, - "version_notes": [ - "Added exchange_proxylogon_rce.rb Metasploit exploit code", - "Updated the timeline regarding exploitation observations and DEVCORE's report to Microsoft", - "Added exploit code (CVE-2021-26855_Udyz_exploit)", - "Added Microsoft mitigation options; Updated vulnerability type" - ] - }, - { - "date": 1615766400, - "version_notes": [ - "Added PoC codes ex.py and ExchangeSheller.py", - "Updated date of disclosure" - ] - }, - { - "date": 1615507200, - "version_notes": [ - "Added Cisco Talos third-party source", - "Added Rapid7 source" - ] - }, - { - "date": 1615420800, - "version_notes": [ - "Added PoC PoC_proxyLogon.py; Added third-party information regarding the publicly available PoC" - ] - }, - { - "date": 1615334400, - "version_notes": [ - "Added mitigation options", - "Added DEVCORE source and updated Volexity's observations of exploitation activity", - "Added Praetorian third-party source", - "Added FireEye Blog source" - ] - }, - { - "date": 1615248000, - "version_notes": ["Added Reuters source"] - }, - { - "date": 1614816000, - "version_notes": [ - "Added CISA Emergency Directive and Hacker News source; Updated Analysis field" - ] - }, - { - "date": 1614729600, - "version_notes": ["Added exploitation activity observations"] - } - ], - "field_sources": [ - { - "field": "cvss.cvssv3_x", - "source": { - "source_url": "", - "source_name": "Google Threat Intelligence Group (GTIG)", - "sources": [], - "field_type": "Ranked" - } - }, - { - "field": "cvss.cvssv2_0", - "source": { - "source_url": "", - "source_name": "Google Threat Intelligence Group (GTIG)", - "sources": [], - "field_type": "Ranked" - } - }, - { - "field": "cwe", - "source": { - "source_url": "", - "source_name": "Cybersecurity and Infrastructure Security Agency (CISA)", - "sources": [], - "field_type": "Ranked" - } - }, - { - "field": "description", - "source": { - "source_url": "", - "source_name": "Google Threat Intelligence Group (GTIG)", - "sources": [], - "field_type": "Ranked" - } - }, - { - "field": "date_of_disclosure", - "source": { - "source_url": "", - "source_name": "Google Threat Intelligence Group (GTIG)", - "sources": [], - "field_type": "Ranked" - } - }, - { - "field": "exploitation_consequence", - "source": { - "source_url": "", - "source_name": "Google Threat Intelligence Group (GTIG)", - "sources": [], - "field_type": "Ranked" - } - }, - { - "field": "exploitation.first_exploitation", - "source": { - "source_url": "", - "source_name": "Volexity", - "sources": [], - "field_type": "Minimum" - } - }, - { - "field": "exploitation.tech_details_release_date", - "source": { - "source_url": null, - "source_name": null, - "sources": [ - { - "source_names": ["Praetorian"], - "source_urls": [] - } - ], - "field_type": "Computed" - } - }, - { - "field": "workarounds", - "source": { - "source_url": null, - "source_name": null, - "sources": [ - { - "source_names": ["Google Threat Intelligence Group (GTIG)"], - "source_urls": [] - } - ], - "field_type": "Merged" - } - }, - { - "field": "available_mitigation", - "source": { - "source_url": null, - "source_name": null, - "sources": [ - { - "source_names": [ - "Google Threat Intelligence Group (GTIG)", - "Tenable Blog" - ], - "source_urls": [] - }, - { - "source_names": ["Google Threat Intelligence Group (GTIG)"], - "source_urls": [] - } - ], - "field_type": "Merged" - } - }, - { - "field": "aliases", - "source": { - "source_url": null, - "source_name": null, - "sources": [ - { - "source_names": [ - "Cybersecurity and Infrastructure Security Agency (CISA)", - "Palo Alto Networks Inc.", - "DEVCORE", - "CVE-2021-26855_metasploit", - "CVE-2021-26855_metasploit", - "CVE-2021-26855_CVE-2021-27065_metasploit" - ], - "source_urls": [] - } - ], - "field_type": "Merged" - } - }, - { - "field": "exploitation_vectors", - "source": { - "source_url": null, - "source_name": null, - "sources": [ - { - "source_names": ["Google Threat Intelligence Group (GTIG)"], - "source_urls": [] - }, - { - "source_names": ["Volexity"], - "source_urls": [] - } - ], - "field_type": "Merged" - } - }, - { - "field": "tags", - "source": { - "source_url": null, - "source_name": null, - "sources": [ - { - "source_names": [ - "Bleeping Computer", - "Bleeping Computer", - "Bleeping Computer", - "The Hacker News", - "Malwarebytes", - "The Record", - "Dark Reading" - ], - "source_urls": [] - }, - { - "source_names": ["Praetorian"], - "source_urls": [] - } - ], - "field_type": "Merged" - } - }, - { - "field": "observed_in_the_wild", - "source": { - "source_url": "", - "source_name": "Google Threat Intelligence Group (GTIG)", - "sources": [], - "field_type": "Intrinsic" - } - }, - { - "field": "was_zero_day", - "source": { - "source_url": "", - "source_name": "Google Threat Intelligence Group (GTIG)", - "sources": [], - "field_type": "Intrinsic" - } - }, - { - "field": "media_attention", - "source": { - "source_url": null, - "source_name": null, - "sources": [ - { - "source_names": [ - "Bleeping Computer", - "Bleeping Computer", - "Bleeping Computer", - "The Hacker News", - "Malwarebytes", - "The Record", - "Dark Reading" - ], - "source_urls": [] - } - ], - "field_type": "Computed" - } - }, - { - "field": "exploitation_state", - "source": { - "source_url": "", - "source_name": "Google Threat Intelligence Group (GTIG)", - "sources": [], - "field_type": "Severity" - } - } - ], + "description": "\n\nA remote code execution vulnerability exists in Lorem Messaging Server 2019 Cumulative Update 8. \nAn attacker who successfully exploited the vulnerability could run arbitrary code on the affected system.\n\n", + "version_history": [], + "field_sources": [], "mati_genids_dict": { - "cve_id": "vulnerability--5d1b1359-a45a-5bfc-852b-050032aa64c8", - "report_id": "report--891e7021-8149-55a0-b36f-79a5cfc7c334", - "mve_id": "vulnerability--b2856d98-bd4b-5ac0-84bb-4b8d55f5b240" + "cve_id": "vulnerability--6e2c2460-b56b-6cfd-963c-161143bb75d9", + "report_id": "report--902f8132-9259-66b1-c47f-8ab680f6d445", + "mve_id": "vulnerability--c3967ea9-ce5c-6bd1-95cc-5c9e66f6c351" }, - "tags_details": [ - { - "first_seen": null, - "value": "was_zero_day", - "last_seen": null, - "confidence": "possible", - "description": null - }, - { - "first_seen": null, - "value": "media_attention", - "last_seen": null, - "confidence": "possible", - "description": null - }, - { - "first_seen": null, - "value": "observed_in_the_wild", - "last_seen": null, - "confidence": "possible", - "description": null - }, - { - "first_seen": null, - "value": "has_exploits", - "last_seen": null, - "confidence": "possible", - "description": null - } - ], - "aggregations": { - "files": { - "itw_urls": [ - { - "value": "http://drlamer.com/49637", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "http://exploit-db.com/download/49637", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://codeload.github.com/GreyOrder/CVE-2021-26855/zip/main", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://codeload.github.com/jsdryan/CVE-2021-26855/zip/main", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://github.com/GreyOrder/CVE-2021-26855/archive/main.zip", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://github.com/jsdryan/CVE-2021-26855/archive/main.zip", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "https://gitlab.com/gvillegas/ohwaa/-/archive/master/ohwaa-master.zip", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - } - ], - "execution_parents": [ - { - "value": "bda139957a859b9c916e2c943b2eb09f2d4ea35cb11848dc39916bb3877eb576", - "count": 1, - "total_related": 559, - "prevalence": 0.0017889087656529517 - }, - { - "value": "51ef55d04d783205016b25eed5907aac4023cfe0bc936eecbacb866ad70066fb", - "count": 1, - "total_related": 560, - "prevalence": 0.0017857142857142857 - } - ], - "compressed_parents": [ - { - "value": "dd307be354b0d17555bcc1a1e4a329e5ce0da4bf0027e378fac21153699de43e", - "count": 1, - "total_related": 89, - "prevalence": 0.011235955056179775 - }, - { - "value": "6e009fb39718074b73bca45e85843842a188df4c85c30ec60bd1dbefe6c8d06a", - "count": 1, - "total_related": 92, - "prevalence": 0.010869565217391304 - }, - { - "value": "c91dccae966d5e637c884a3137e3788361214d8055a2c936d5447271b7b9d069", - "count": 1, - "total_related": 94, - "prevalence": 0.010638297872340425 - }, - { - "value": "53f038537a02fafd5bfdc9977d4b0dbe2f7fed6ef7214dbabdb1c53ea96a5c1d", - "count": 1, - "total_related": 892, - "prevalence": 0.0011210762331838565 - }, - { - "value": "2c26b0446d9aa66057cb380167a70ca265984d46565eefa7d596019958f61655", - "count": 1, - "total_related": 896, - "prevalence": 0.0011160714285714285 - }, - { - "value": "8fd04b4a83f437a88628aef2774f9e54f9673e407f3218b98d5576538f5bd208", - "count": 1, - "total_related": 896, - "prevalence": 0.0011160714285714285 - }, - { - "value": "e4b16b49d55f50f904893df52b90d6d6663be8cd7d253996799fa9840204a7dd", - "count": 1, - "total_related": 896, - "prevalence": 0.0011160714285714285 - }, - { - "value": "badda1335ec6b0559dae990c6119299a937087235a3488647023aa366003dc01", - "count": 1, - "total_related": 898, - "prevalence": 0.0011135857461024498 - }, - { - "value": "ac5157cba1c53d2ae6e664466560897a6daa345dc65ca86579703aec4056a190", - "count": 1, - "total_related": 899, - "prevalence": 0.0011123470522803114 - }, - { - "value": "c4a556a57b0f4728cd1cc6fd60a6787cc6c86c47cd312a557cf234bfd360b5c6", - "count": 1, - "total_related": 900, - "prevalence": 0.0011111111111111111 - }, - { - "value": "c302cb24faa05ec2f3ee430085e24cc50ae8b4a1ae116ac8affff41a9d594fb3", - "count": 1, - "total_related": 901, - "prevalence": 0.0011098779134295228 - }, - { - "value": "36d7f7a98bc8edae71f8741839f8f41f6d921eebfc3a90b87572495b5a34a95e", - "count": 1, - "total_related": 902, - "prevalence": 0.0011086474501108647 - }, - { - "value": "b70b6eac12062c17c773574650bd92db7c383ae6aa044ff1490c09f756cc558b", - "count": 1, - "total_related": 902, - "prevalence": 0.0011086474501108647 - }, - { - "value": "492984ebf173980624c6245d2e1677b82d320cd11702cc2bb611408ea47e20bb", - "count": 1, - "total_related": 907, - "prevalence": 0.0011025358324145535 - }, - { - "value": "ab8706d39d2f4f8d548e1ff7cdf5e68a2c4f2aadb5fd5ab7992c871fc0dc5ce7", - "count": 1, - "total_related": 925, - "prevalence": 0.001081081081081081 - }, - { - "value": "a3b18a496a37e6420f645f98730dfd4a06fb48f866487ae3e1e7258769e713fc", - "count": 1, - "total_related": 926, - "prevalence": 0.0010799136069114472 - }, - { - "value": "33b5922d8d6a51777b35e428de8cc04c3771a246cf30c9e5c73ef095aaae541f", - "count": 1, - "total_related": 933, - "prevalence": 0.0010718113612004287 - }, - { - "value": "5cba1cdbd303cea46da1be74784927b94af7e1efa40b1d3628f0cde4013296b8", - "count": 1, - "total_related": 934, - "prevalence": 0.0010706638115631692 - }, - { - "value": "72b6d61e37b50b17b90651ca139c802cccf92a811a46099e1a256953b4b0b2a8", - "count": 1, - "total_related": 936, - "prevalence": 0.0010683760683760685 - }, - { - "value": "da0ff1be18bb63924efdf7249f690c98c7cc5ac0bb5e651f7c1c2d5df52fe292", - "count": 1, - "total_related": 938, - "prevalence": 0.0010660980810234541 - }, - { - "value": "91064c2e6ba4e71ca50f336c046187a6771f657aaec2fecba04cb0a84d87026a", - "count": 1, - "total_related": 941, - "prevalence": 0.0010626992561105207 - }, - { - "value": "bd21c2d4e8044f6e8d83b8244c22dd462a40180340c2430c372710e01e1b521e", - "count": 1, - "total_related": 944, - "prevalence": 0.001059322033898305 - }, - { - "value": "63a3e9ae242da1ce3fac2c1e236ca6c0f761c7b63b7b0f55906c62dfdec4cf5c", - "count": 1, - "total_related": 946, - "prevalence": 0.0010570824524312897 - }, - { - "value": "2ef4801668a692dc18297116faeb74de5ccceef01808c1f906c3081d13cdf35c", - "count": 1, - "total_related": 948, - "prevalence": 0.0010548523206751054 - }, - { - "value": "b2b39f5c92eb93b435216baa3636019ee805f488795e31033ef930d297412bf2", - "count": 1, - "total_related": 948, - "prevalence": 0.0010548523206751054 - }, - { - "value": "00d5873d287a4fae94d96e9278c101a8b8eb92fb36fd9207afc3312e481998ff", - "count": 1, - "total_related": 1000, - "prevalence": 0.001 - }, - { - "value": "d81c32f6d55e74dedaa4bc98ca2ca90bc54143931308f8713a3b204eb4164153", - "count": 1, - "total_related": 1002, - "prevalence": 0.000998003992015968 - }, - { - "value": "4e247da836c9031fa74191cc36757df3aff75b6bc9f1bd2eadf1101f44ec9e84", - "count": 1, - "total_related": 1005, - "prevalence": 0.0009950248756218905 - }, - { - "value": "d448912b5d04f9f9d9ec09a3f4f131535979c6fe8394fe301eb77af8ba0b048b", - "count": 1, - "total_related": 1005, - "prevalence": 0.0009950248756218905 - }, - { - "value": "8e5a0515ab29a37bc83cd0af07dcb7cec6da3d1b5141a7fe9ba8d33c96d9c222", - "count": 1, - "total_related": 1006, - "prevalence": 0.0009940357852882703 - }, - { - "value": "cd893ea3b83c21e222668cc71b281f70214fab0328f029eca3845145c97a3451", - "count": 1, - "total_related": 1009, - "prevalence": 0.0009910802775024777 - }, - { - "value": "2aa1b6699c53fd60dd011faf33096fb3ebb270f5dd283049eaea20cd3a0e2c24", - "count": 1, - "total_related": 1024, - "prevalence": 0.0009765625 - }, - { - "value": "de38e4952fada4525a5edd7201f4e431227356d3dd878daa907e915816a4fd72", - "count": 1, - "total_related": 1025, - "prevalence": 0.000975609756097561 - }, - { - "value": "534d3ba1fca004c57fb97e1a25ac405ac09bcaefc5a240cadf526af9e6d07628", - "count": 1, - "total_related": 1028, - "prevalence": 0.0009727626459143969 - }, - { - "value": "272736e9d72f9686446935af1bae8a4831661099bdd261ea837d264f9a188364", - "count": 1, - "total_related": 1032, - "prevalence": 0.0009689922480620155 - }, - { - "value": "4d46a576bef4fdf1b97fac25931399574edb696808cc37c3ef40e374dd03fd77", - "count": 1, - "total_related": 1032, - "prevalence": 0.0009689922480620155 - }, - { - "value": "7a0ef90c3cfcd8036893d4c6be9d138754f0e910575e388f4a4379d45cb6de7f", - "count": 1, - "total_related": 1046, - "prevalence": 0.0009560229445506692 - }, - { - "value": "b17c9440dd07fc18e71974daa377b6cae25667ddbc7edd9216923c5aa5017c83", - "count": 1, - "total_related": 1047, - "prevalence": 0.0009551098376313276 - }, - { - "value": "a788942dde178c79c7608d45397db35d86313529330b0289692978d2e83fa915", - "count": 1, - "total_related": 1049, - "prevalence": 0.0009532888465204957 - }, - { - "value": "f6d8375d0a9e56b5f83d678ac5d80274f7e2db68179b9ede715575a1fff2627b", - "count": 1, - "total_related": 1052, - "prevalence": 0.0009505703422053232 - }, - { - "value": "118d4a0d6e59e0154c267673f86ce3df7d6dbec554c69d1fe0a55affd002bb37", - "count": 1, - "total_related": 1053, - "prevalence": 0.000949667616334283 - }, - { - "value": "59fe080a332a2895496ee562167e5dcdb985de918c64dcb8eb892eb6be2fd9d1", - "count": 1, - "total_related": 1053, - "prevalence": 0.000949667616334283 - }, - { - "value": "831e7ebb64a52157a47387e0024308e11c68b143e36347c9a93a7618175affce", - "count": 1, - "total_related": 1053, - "prevalence": 0.000949667616334283 - }, - { - "value": "8447abbd8dc15f570f1bb75ac332a92de689699bbc5143a3a9c5f93c68c8a730", - "count": 1, - "total_related": 1053, - "prevalence": 0.000949667616334283 - }, - { - "value": "c6e366e3e8869fc7c1b407034f3be05076a814c69a25571466740cdfd9a4b685", - "count": 1, - "total_related": 1053, - "prevalence": 0.000949667616334283 - }, - { - "value": "e73b0313efad22e0048e37f73ce6596eb230696d41d11f9315911ef5ad68d247", - "count": 1, - "total_related": 1053, - "prevalence": 0.000949667616334283 - }, - { - "value": "250549db5081ad38691b4ab494ba2724b81c9e4721f5567081521850e70e7e82", - "count": 1, - "total_related": 1054, - "prevalence": 0.0009487666034155598 - }, - { - "value": "32c913259db12efef362e0a958934a554634f0810f27134ec2988595ba3ef154", - "count": 1, - "total_related": 1059, - "prevalence": 0.0009442870632672333 - }, - { - "value": "e1e154c59f6c208332ecef1fac47ae69656f77a88fea014567d2a22a174ad9bb", - "count": 1, - "total_related": 1061, - "prevalence": 0.000942507068803016 - }, - { - "value": "0fc8e1bf743b31cfb31c08d226c695c2d6d1c762636d648ccb09afbf5d6d69e7", - "count": 1, - "total_related": 1062, - "prevalence": 0.0009416195856873823 - }, - { - "value": "c241f76839180141207eba6186531faee57573b488e09ed064238cc3b01e5a04", - "count": 1, - "total_related": 1064, - "prevalence": 0.0009398496240601503 - }, - { - "value": "73a155efd378fde7461155325b881feff52ddc1ba4973cd638da8896ba64368c", - "count": 1, - "total_related": 1070, - "prevalence": 0.0009345794392523365 - }, - { - "value": "2fc9094e63e4aaa70052cfba4823e3f63303e3873979fbc42f78b4c4df045d2e", - "count": 1, - "total_related": 1072, - "prevalence": 0.0009328358208955224 - }, - { - "value": "3583fd145511a43ce731a7683495de566599a46c6ba9971910fc5cf3ccd774e9", - "count": 1, - "total_related": 1082, - "prevalence": 0.0009242144177449168 - }, - { - "value": "bc2fcda88b311b1d6cba8a370eae5233d8e36528817b0d6e19bf7a54380b11ef", - "count": 1, - "total_related": 1082, - "prevalence": 0.0009242144177449168 - }, - { - "value": "d2b3e3d25f55113e433656ae13a01e3af50b9d69a6d5232fc705affee02e62a8", - "count": 1, - "total_related": 1084, - "prevalence": 0.0009225092250922509 - }, - { - "value": "3deb45b52de2116e4e76c25aa3f49319a54e91c6daf9d9503f0c19be5fa97bd1", - "count": 1, - "total_related": 1085, - "prevalence": 0.0009216589861751152 - }, - { - "value": "f1fa28b8b5efd2da1f47719ef5f90edec1f5ed3c0c69f3cb603e6fdf2bf2e512", - "count": 1, - "total_related": 1085, - "prevalence": 0.0009216589861751152 - }, - { - "value": "4d5a3d5f7aa02ced533336840555ed31c24d985df86e1ee5276281ccba0c43bf", - "count": 1, - "total_related": 1089, - "prevalence": 0.0009182736455463728 - }, - { - "value": "1bb49b20f9e3993eefa5f64549fd3cfa119c8882dfc427038f89b022dad9e254", - "count": 1, - "total_related": 1091, - "prevalence": 0.0009165902841429881 - }, - { - "value": "e70d39f7f233252327dff23523f813b47dbaf7f601379a9ac323f40871eb26de", - "count": 1, - "total_related": 1092, - "prevalence": 0.0009157509157509158 - }, - { - "value": "01e4a609cd85be15eb65af552492f2855f285fa4acfe2a9e07843cc108dbbdeb", - "count": 1, - "total_related": 1104, - "prevalence": 0.0009057971014492754 - }, - { - "value": "b36c58765729cac857c2497348d82ac7e8887895a0464068b91096974d5693cb", - "count": 1, - "total_related": 1104, - "prevalence": 0.0009057971014492754 - }, - { - "value": "e541b6eeeee6d81b38640844cf52168ff6113c764385eef31535453a5f335713", - "count": 1, - "total_related": 1109, - "prevalence": 0.0009017132551848512 - }, - { - "value": "264833a1084484822a03d25412f00ceedad8413c008f6f827f3b7756fdd15f98", - "count": 1, - "total_related": 1114, - "prevalence": 0.0008976660682226212 - }, - { - "value": "a53320f1e358fb6e8a5f6f2a0d2f3666c829e3473a57b9189a22616f6429b432", - "count": 1, - "total_related": 1117, - "prevalence": 0.0008952551477170994 - }, - { - "value": "f202094b4b5b89843fe5013360a41f6c5f8bd624e8c432a3862002500e12ab7f", - "count": 1, - "total_related": 1122, - "prevalence": 0.00089126559714795 - }, - { - "value": "1f991314e49d37ecb62a23c6ad06ef51430047bfc74ca77ae20d9562afdee9c8", - "count": 1, - "total_related": 1123, - "prevalence": 0.0008904719501335708 - }, - { - "value": "668b3fba8167b4c9d6ae478b1ce0d72cb7e1d601e03ef72ab3c68b855b6ba51a", - "count": 1, - "total_related": 1128, - "prevalence": 0.0008865248226950354 - }, - { - "value": "1c10a41c6e39e25e5891530f633b9a6f158d137e3b7d9508071cb2ee2a7269cb", - "count": 1, - "total_related": 1134, - "prevalence": 0.0008818342151675485 - }, - { - "value": "328ebf6cb164b47c43442a376a363a66f580ce927f97f3055e0b24a6cc464f50", - "count": 1, - "total_related": 1139, - "prevalence": 0.000877963125548727 - }, - { - "value": "284c3d89b87b3cad2eaac2564ac633b254291d7754263ec74a537d5260483743", - "count": 1, - "total_related": 1155, - "prevalence": 0.0008658008658008658 - }, - { - "value": "61986f6e92a3f1412b72a08164097a88f1c02c67164fd40f060244fdd4c66898", - "count": 1, - "total_related": 1166, - "prevalence": 0.0008576329331046312 - }, - { - "value": "6902c45d881c1c34bfdfbf23fffc9babde095f2f27ed6eb27401ed7e617121a8", - "count": 1, - "total_related": 1169, - "prevalence": 0.000855431993156544 - }, - { - "value": "cfaf5ec0a82512d758a944e103c3b795e0efd1555906c38c6010e66634a8504b", - "count": 1, - "total_related": 1169, - "prevalence": 0.000855431993156544 - }, - { - "value": "b7e10b7936c62d2aa037963b0ed4acb565d1cf2eec79fb454640d305a8cc5d20", - "count": 1, - "total_related": 1182, - "prevalence": 0.0008460236886632825 - }, - { - "value": "66da3350ba7d911d19a0719df8d86bbd0754ca6dc95de83a69e0296c07fe9028", - "count": 1, - "total_related": 1183, - "prevalence": 0.0008453085376162299 - }, - { - "value": "f0b9d60d5f5daaf3f631c3d5f745eb56e4319152dd42ac64cce9195aec8c4c6a", - "count": 1, - "total_related": 1187, - "prevalence": 0.0008424599831508003 - }, - { - "value": "eba528e2255586835b47bef4d26618e1c4ffecb9b33dd69641d5cb323fd3797f", - "count": 1, - "total_related": 1195, - "prevalence": 0.0008368200836820083 - }, - { - "value": "f3b831cd002ac754f2d1a5688de16372f280e2a46c1f22b18699443b1f08a64e", - "count": 1, - "total_related": 1213, - "prevalence": 0.0008244023083264633 - }, - { - "value": "a6a595abed32bd1a1b891a64a18bf29f2dedd40b0773048788918127c2f9f6aa", - "count": 1, - "total_related": 1229, - "prevalence": 0.0008136696501220504 - }, - { - "value": "5467879fec91b9e4b66bcbd404f368cff1d6c93132c5a098792db9bfe85fbbbd", - "count": 1, - "total_related": 1233, - "prevalence": 0.0008110300081103001 - }, - { - "value": "3d3b7715ca6abda08d02e265565f793b4f49ba6e2cecf0ab6b65ba47b4aa3c9d", - "count": 1, - "total_related": 1234, - "prevalence": 0.0008103727714748784 - }, - { - "value": "3e4f08b9e95dfabe8ed918006be7d43e007452cce73b96180473b59b4ee7a5a8", - "count": 1, - "total_related": 1234, - "prevalence": 0.0008103727714748784 - }, - { - "value": "7d13ab9a28f016b4ce894aa066ffe2ba93c62272a02bd071b0dca154adcd5535", - "count": 1, - "total_related": 1234, - "prevalence": 0.0008103727714748784 - }, - { - "value": "8520cd601d40478e0b116bbf747de706022c59981d7af6efd6856f398f4244f8", - "count": 1, - "total_related": 1234, - "prevalence": 0.0008103727714748784 - }, - { - "value": "90e2f01e8dd0b829f476aa158d5e0b2838eceab858195d3d52a395c8028bcebe", - "count": 1, - "total_related": 1234, - "prevalence": 0.0008103727714748784 - }, - { - "value": "b5d11161d4edecef2fb7e9d63661a413de85ea325f7fc2086c5d1d0fc4112ba8", - "count": 1, - "total_related": 1273, - "prevalence": 0.0007855459544383347 - }, - { - "value": "8948d123935f72d6bae9480e6065de6bee7d6fe4ff6ce4859af41a7390a96712", - "count": 1, - "total_related": 1361, - "prevalence": 0.0007347538574577516 - }, - { - "value": "8f7ea9104181180010a856a41f7e257dbd35a5bccfd836e255403a440f6e64e6", - "count": 1, - "total_related": 1378, - "prevalence": 0.000725689404934688 - }, - { - "value": "1606d681e69cf90aa0e9673c89a28b6f8c18eec60848bd6bc62308fe1bcaa960", - "count": 1, - "total_related": 1399, - "prevalence": 0.0007147962830593281 - }, - { - "value": "f1986799c969c3ea6d57fb47c0ee07e2a802021d742e3dba79dc7d8ad750e813", - "count": 1, - "total_related": 1407, - "prevalence": 0.0007107320540156361 - }, - { - "value": "470e0695a9064fa397a24adab0eb26d78896975416d87241bca029f9f003f3d5", - "count": 1, - "total_related": 1427, - "prevalence": 0.000700770847932726 - }, - { - "value": "5963bd9d8207255dd8f6a8c1ef45f61ff2b8281adb7c0bf41c875bfe03527397", - "count": 1, - "total_related": 1430, - "prevalence": 0.0006993006993006993 - }, - { - "value": "8b73436e83728da63352eec365dcc32d23ec88b79fbd68de98870873a9ddf105", - "count": 1, - "total_related": 1430, - "prevalence": 0.0006993006993006993 - }, - { - "value": "627b70755a693d7b772bcbc95ca694a2f58fbfeb954092b94ed4bb49ae71e41b", - "count": 1, - "total_related": 1432, - "prevalence": 0.0006983240223463687 - }, - { - "value": "01823d6255f9d953f99f2a1d96a29fe3c3abe5952d9f5ad18a000e671b4662e7", - "count": 1, - "total_related": 1433, - "prevalence": 0.0006978367062107466 - }, - { - "value": "4f5b365f204f0d8a1c09c34f0d253d0cacd21db612c7296e958545f90a6cb23e", - "count": 1, - "total_related": 1436, - "prevalence": 0.0006963788300835655 - }, - { - "value": "5744a32f5cd4894b2cd1d90315b8a339a93cbbc2f4651d35ecb1a587be7affe7", - "count": 1, - "total_related": 1436, - "prevalence": 0.0006963788300835655 - }, - { - "value": "30bda4d9607302d6441c8eed9fe08035d096f733fe27485c97c1d4b045c4b2b7", - "count": 1, - "total_related": 1998, - "prevalence": 0.0005005005005005005 - } - ], - "tags": [ - { - "value": "exploit", - "count": 6 - }, - { - "value": "cve-2021-26855", - "count": 5 - }, - { - "value": "java", - "count": 3 - }, - { - "value": "zip", - "count": 3 - }, - { - "value": "cve-2021-27065", - "count": 2 - }, - { - "value": "html", - "count": 2 - }, - { - "value": "cpp", - "count": 1 - }, - { - "value": "cve-2021-34473", - "count": 1 - }, - { - "value": "known-distributor", - "count": 1 - }, - { - "value": "ruby", - "count": 1 - } - ], - "vhash": [ - { - "value": "e2adf132b5495315a4d9ca9fb3d7e038", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "7c1603b1df9777e5ef6f7c5d24d83b33", - "count": 1, - "total_related": 2, - "prevalence": 0.5 - }, - { - "value": "0a0d5c66e39f53f1675e23d347ecccfb", - "count": 1, - "total_related": 409, - "prevalence": 0.0024449877750611247 - } - ], - "tlshhash": [ - { - "value": "T103F1A793949388E593B041D2E45CE700FAE5375B643E1423FA3C5A2F4FBDA1790A21FA", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T115F1B883949388A593B041D2E45CE700FAE5375B643A1423FB3C5A2F4FB9A1794D21FA", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T123A42324C412FC5BEE7D89FA083486C5C5381A028B1CD56119CE36F592A64396FBE7BF", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T13B12C745B0C20139C1F28582AADA9C46CB0E21C3C6E46466B7FC869F0F781D57A736DB", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T13CA2E8D768A7007A1782C1E26CDF9A019B1D20479A883A34BF5C519D1F4D07AF2F67F2", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T15F830217693E5EB4C48482C423D12CCBDE6829559C3FAFA54D1C71B29D1C8BEE096ECE", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T1B1814B80B56FF20FCDE1B4FF6C66911675BB5D1380A8889522A28EB31D4BBC8477026C", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - }, - { - "value": "T1BBF1B943A483C8E583B441C1E058E705FAE6265BA43E6413FB3C9A2F4FB8E1794A15F9", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - } - ], - "crowdsourced_yara_results": [ - { - "value": { - "id": "0007bbfc16|WEBSHELL_ASP_By_String", - "ruleset_id": "0007bbfc16", - "ruleset_name": "gen_webshells", - "rule_name": "WEBSHELL_ASP_By_String", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 3, - "total_related": 1519, - "prevalence": 0.0019749835418038184 - }, - { - "value": { - "id": "00095e3ce6|WEBSHELL_HAFNIUM_CISA_10328929_01", - "ruleset_id": "00095e3ce6", - "ruleset_name": "apt_hafnium", - "rule_name": "WEBSHELL_HAFNIUM_CISA_10328929_01", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 3, - "total_related": 3180, - "prevalence": 0.0009433962264150943 - }, - { - "value": { - "id": "0007bbfc16|WEBSHELL_ASP_Generic", - "ruleset_id": "0007bbfc16", - "ruleset_name": "gen_webshells", - "rule_name": "WEBSHELL_ASP_Generic", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 3, - "total_related": 4431, - "prevalence": 0.0006770480704129993 - }, - { - "value": { - "id": "0007bbfc16|WEBSHELL_ASP_Generic_Eval_On_Input", - "ruleset_id": "0007bbfc16", - "ruleset_name": "gen_webshells", - "rule_name": "WEBSHELL_ASP_Generic_Eval_On_Input", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 3, - "total_related": 13981, - "prevalence": 0.0002145769258279093 - }, - { - "value": { - "id": "0007bbfc16|webshell_asp_by_string", - "ruleset_id": "0007bbfc16", - "ruleset_name": "gen_webshells", - "rule_name": "webshell_asp_by_string", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 2, - "total_related": 2313, - "prevalence": 0.0008646779074794639 - }, - { - "value": { - "id": "0007bbfc16|WEBSHELL_asp_generic", - "ruleset_id": "0007bbfc16", - "ruleset_name": "gen_webshells", - "rule_name": "WEBSHELL_asp_generic", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 2, - "total_related": 3687, - "prevalence": 0.0005424464334147003 - }, - { - "value": { - "id": "0007bbfc16|webshell_asp_generic_eval_on_input", - "ruleset_id": "0007bbfc16", - "ruleset_name": "gen_webshells", - "rule_name": "webshell_asp_generic_eval_on_input", - "source": "https://github.com/Neo23x0/signature-base" - }, - "count": 2, - "total_related": 7279, - "prevalence": 0.0002747630168979255 - } - ], - "embedded_domains": [ - { - "value": "proxylogon.com", - "count": 2, - "total_related": 328, - "prevalence": 0.006097560975609756 - }, - { - "value": "metasploit.com", - "count": 2, - "total_related": 50792, - "prevalence": 0.00003937627972909119 - }, - { - "value": "btwaf.cn", - "count": 1, - "total_related": 4, - "prevalence": 0.25 - }, - { - "value": "o2oxy.cn", - "count": 1, - "total_related": 52, - "prevalence": 0.019230769230769232 - }, - { - "value": "www.o2oxy.cn", - "count": 1, - "total_related": 73, - "prevalence": 0.0136986301369863 - }, - { - "value": "testbnull.medium.com", - "count": 1, - "total_related": 289, - "prevalence": 0.0034602076124567475 - }, - { - "value": "praetorian.com", - "count": 1, - "total_related": 874, - "prevalence": 0.0011441647597254005 - }, - { - "value": "www.praetorian.com", - "count": 1, - "total_related": 1069, - "prevalence": 0.0009354536950420954 - }, - { - "value": "aka.ms", - "count": 2, - "total_related": 100000, - "prevalence": 0.00002 - }, - { - "value": "github.com", - "count": 2, - "total_related": 100000, - "prevalence": 0.00002 - }, - { - "value": "en.wikipedia.org", - "count": 1, - "total_related": 100000, - "prevalence": 0.00001 - }, - { - "value": "githubusercontent.com", - "count": 1, - "total_related": 100000, - "prevalence": 0.00001 - }, - { - "value": "medium.com", - "count": 1, - "total_related": 100000, - "prevalence": 0.00001 - }, - { - "value": "raw.githubusercontent.com", - "count": 1, - "total_related": 100000, - "prevalence": 0.00001 - }, - { - "value": "schemas.xmlsoap.org", - "count": 1, - "total_related": 100000, - "prevalence": 0.00001 - }, - { - "value": "twitter.com", - "count": 1, - "total_related": 100000, - "prevalence": 0.00001 - }, - { - "value": "wikipedia.org", - "count": 1, - "total_related": 100000, - "prevalence": 0.00001 - }, - { - "value": "xmlsoap.org", - "count": 1, - "total_related": 100000, - "prevalence": 0.00001 - } - ], - "embedded_ips": [ - { - "value": "127.0.0.1", - "count": 1, - "total_related": 100000, - "prevalence": 0.00001 - } - ], - "file_types": [ - { - "value": "html", - "count": 2 - }, - { - "value": "ruby", - "count": 1 - } - ], - "filecondis_dhash": [ - { - "value": "ba3cbc9c94868680", - "count": 1, - "total_related": 1, - "prevalence": 1.0 - } - ], - "popular_threat_category": [ - { - "value": "trojan", - "count": 2 - }, - { - "value": "hacktool", - "count": 1 - } - ], - "popular_threat_name": [ - { - "value": "python", - "count": 2 - }, - { - "value": "webshell", - "count": 2 - } - ], - "suggested_threat_label": "trojan.webshell/python", - "embedded_urls": [ - { - "value": "https://proxylogon.com/images/logo.jpg", - "count": 2, - "total_related": 17, - "prevalence": 0.11764705882352941 - }, - { - "value": "http://aka.ms/exchangevulns", - "count": 2, - "total_related": 30, - "prevalence": 0.06666666666666667 - }, - { - "value": "https://proxylogon.com/", - "count": 2, - "total_related": 232, - "prevalence": 0.008620689655172414 - }, - { - "value": "https://metasploit.com/download", - "count": 2, - "total_related": 7819, - "prevalence": 0.0002557871850620284 - }, - { - "value": "https://github.com/rapid7/metasploit-framework", - "count": 2, - "total_related": 9898, - "prevalence": 0.00020206102242877348 - }, - { - "value": "https://twitter.com/lotusdll/status/1371465073525362691", - "count": 1, - "total_related": 6, - "prevalence": 0.16666666666666666 - }, - { - "value": "https://en.wikipedia.org/wiki/2,147,483,647", - "count": 1, - "total_related": 8, - "prevalence": 0.125 - }, - { - "value": "https://github.com/Zeop-CyberSec/proxylogon_writeup", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "https://raw.githubusercontent.com/microsoft/CSS-Exchange/main/Security/http-vuln-cve2021-26855.nse", - "count": 1, - "total_related": 12, - "prevalence": 0.08333333333333333 - }, - { - "value": "https://www.o2oxy.cn/3169.html", - "count": 1, - "total_related": 17, - "prevalence": 0.058823529411764705 - }, - { - "value": "https://github.com/praetorian-inc/proxylogon-exploit", - "count": 1, - "total_related": 18, - "prevalence": 0.05555555555555555 - }, - { - "value": "https://testbnull.medium.com/ph%C3%A2n-t%C3%ADch-l%E1%BB%97-h%E1%BB%95ng-proxylogon-mail-exchange-rce-s%E1%BB%B1-k%E1%BA%BFt-h%E1%BB%A3p-ho%C3%A0n-h%E1%BA%A3o-cve-2021-26855-37f4b6e06265", - "count": 1, - "total_related": 18, - "prevalence": 0.05555555555555555 - }, - { - "value": "https://www.praetorian.com/blog/reproducing-proxylogon-exploit", - "count": 1, - "total_related": 18, - "prevalence": 0.05555555555555555 - }, - { - "value": "https://twitter.com/testanull", - "count": 1, - "total_related": 34, - "prevalence": 0.029411764705882353 - }, - { - "value": "http://127.0.0.1:8080/", - "count": 1, - "total_related": 100000, - "prevalence": 0.00001 - }, - { - "value": "http://schemas.xmlsoap.org/soap/envelope/", - "count": 1, - "total_related": 100000, - "prevalence": 0.00001 - } - ] - } - } + "tags_details": [], + "aggregations": {} }, "context_attributes": { "shared_with_me": false, diff --git a/external-import/google-ti-feeds/tests/custom/mappers/gti_attack_techniques/test_gti_attack_technique_ids_no_description.py b/external-import/google-ti-feeds/tests/custom/mappers/gti_attack_techniques/test_gti_attack_technique_ids_no_description.py new file mode 100644 index 00000000000..5f06cd97d40 --- /dev/null +++ b/external-import/google-ti-feeds/tests/custom/mappers/gti_attack_techniques/test_gti_attack_technique_ids_no_description.py @@ -0,0 +1,117 @@ +"""Tests that GTIAttackTechniqueIDsToSTIXAttackPatterns produces AttackPatterns with description=None.""" + +from uuid import uuid4 + +import pytest +from connector.src.custom.mappers.gti_attack_techniques.gti_attack_technique_ids_to_stix_attack_patterns import ( + GTIAttackTechniqueIDsToSTIXAttackPatterns, +) +from connector.src.custom.models.gti.gti_attack_technique_id_model import ( + GTIAttackTechniqueIDData, +) +from stix2.v21 import Identity, MarkingDefinition # type: ignore + +# --------------------------------------------------------------------------- +# Fixtures +# --------------------------------------------------------------------------- + + +@pytest.fixture +def mock_organization(): + """Mock organization Identity object.""" + return Identity( # pylint: disable=W9101 + name="Test Organization", + identity_class="organization", + ) + + +@pytest.fixture +def mock_tlp_marking(): + """Mock TLP marking definition object.""" + return MarkingDefinition( + id=f"marking-definition--{uuid4()}", + definition_type="statement", + definition={"statement": "Internal Use Only"}, + ) + + +@pytest.fixture +def attack_technique_ids() -> GTIAttackTechniqueIDData: + """Attack technique ID data with two technique IDs.""" + return GTIAttackTechniqueIDData.from_id_list(["T1055", "T1078"]) + + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + + +def _given_attack_technique_ids_mapper( + attack_technique_ids: GTIAttackTechniqueIDData, + organization: Identity, + tlp_marking: MarkingDefinition, +) -> GTIAttackTechniqueIDsToSTIXAttackPatterns: + return GTIAttackTechniqueIDsToSTIXAttackPatterns( + attack_technique_ids=attack_technique_ids, + organization=organization, + tlp_marking=tlp_marking, + ) + + +def _when_convert_to_stix(mapper: GTIAttackTechniqueIDsToSTIXAttackPatterns) -> list: + return mapper.to_stix() + + +def _then_attack_pattern_has_no_description(attack_pattern) -> None: # noqa: ANN001 + assert attack_pattern.name is not None # noqa: S101 + assert attack_pattern.description is None # noqa: S101 + + +# --------------------------------------------------------------------------- +# Tests +# --------------------------------------------------------------------------- + + +@pytest.mark.order(1) +def test_attack_patterns_have_no_description( + attack_technique_ids, + mock_organization, + mock_tlp_marking, +): + """Minimal AttackPatterns from technique IDs must have description=None.""" + # GIVEN + mapper = _given_attack_technique_ids_mapper( + attack_technique_ids, + mock_organization, + mock_tlp_marking, + ) + + # WHEN + attack_patterns = _when_convert_to_stix(mapper) + + # THEN + assert len(attack_patterns) == 2 # noqa: S101 + for ap in attack_patterns: + _then_attack_pattern_has_no_description(ap) + + +@pytest.mark.order(1) +def test_single_attack_pattern_has_no_description( + mock_organization, + mock_tlp_marking, +): + """A single minimal AttackPattern from a technique ID must have description=None.""" + # GIVEN + ids_data = GTIAttackTechniqueIDData.from_id_list(["T1059"]) + mapper = _given_attack_technique_ids_mapper( + ids_data, + mock_organization, + mock_tlp_marking, + ) + + # WHEN + attack_patterns = _when_convert_to_stix(mapper) + + # THEN + assert len(attack_patterns) == 1 # noqa: S101 + _then_attack_pattern_has_no_description(attack_patterns[0]) diff --git a/external-import/google-ti-feeds/tests/custom/mappers/gti_campaigns/test_gti_campaign_to_stix_campaign.py b/external-import/google-ti-feeds/tests/custom/mappers/gti_campaigns/test_gti_campaign_to_stix_campaign.py index 0c23a3b0575..50c70b93803 100644 --- a/external-import/google-ti-feeds/tests/custom/mappers/gti_campaigns/test_gti_campaign_to_stix_campaign.py +++ b/external-import/google-ti-feeds/tests/custom/mappers/gti_campaigns/test_gti_campaign_to_stix_campaign.py @@ -13,6 +13,7 @@ AltNameDetail, CampaignModel, GTICampaignData, + Motivation, TagDetail, ) from polyfactory import Use @@ -42,6 +43,15 @@ class ActivityDetailFactory(ModelFactory[ActivityDetail]): value = "2023-01-01T00:00:00Z" +class MotivationFactory(ModelFactory[Motivation]): + """Factory for Motivation model.""" + + __model__ = Motivation + + confidence = "high" + value = "espionage" + + class TagDetailFactory(ModelFactory[TagDetail]): """Factory for TagDetail model.""" @@ -105,6 +115,7 @@ def minimal_campaign_data() -> GTICampaignData: alt_names_details=None, first_seen_details=None, last_seen_details=None, + motivations=None, tags_details=None, ) ) @@ -154,6 +165,42 @@ def campaign_with_all_data() -> GTICampaignData: ) +@pytest.fixture +def campaign_with_motivations() -> GTICampaignData: + """Fixture for campaign data with a single motivation.""" + return GTICampaignDataFactory.build( + attributes=CampaignModelFactory.build( + motivations=[MotivationFactory.build(value="espionage")], + ) + ) + + +@pytest.fixture +def campaign_with_multiple_motivations() -> GTICampaignData: + """Fixture for campaign data with multiple motivations.""" + return GTICampaignDataFactory.build( + attributes=CampaignModelFactory.build( + motivations=[ + MotivationFactory.build(value="espionage"), + MotivationFactory.build(value="financial-gain"), + ], + ) + ) + + +@pytest.fixture +def campaign_with_null_motivation_values() -> GTICampaignData: + """Fixture for campaign data with motivations that have None values.""" + return GTICampaignDataFactory.build( + attributes=CampaignModelFactory.build( + motivations=[ + MotivationFactory.build(value=None), + MotivationFactory.build(value="espionage"), + ], + ) + ) + + @pytest.fixture def campaign_without_attributes() -> GTICampaignData: """Fixture for campaign data without attributes.""" @@ -308,6 +355,121 @@ def test_gti_campaign_to_stix_with_all_data( _then_stix_campaign_has_labels(stix_campaign, campaign_with_all_data) +# Scenario: Create STIX campaign with a single motivation mapped to objective +@pytest.mark.order(1) +def test_gti_campaign_to_stix_with_single_motivation( + campaign_with_motivations: GTICampaignData, + mock_organization: Identity, + mock_tlp_marking: MarkingDefinition, +) -> None: + """Test converting GTI campaign with a single motivation to STIX objective.""" + # Given a GTI campaign with one motivation + mapper = _given_gti_campaign_mapper( + campaign_with_motivations, mock_organization, mock_tlp_marking + ) + # When converting to STIX + stix_campaign = _when_convert_to_stix(mapper) + # Then STIX campaign objective should equal the motivation value + _then_stix_campaign_has_objective(stix_campaign, "espionage") + + +# Scenario: Create STIX campaign with multiple motivations joined as objective +@pytest.mark.order(1) +def test_gti_campaign_to_stix_with_multiple_motivations( + campaign_with_multiple_motivations: GTICampaignData, + mock_organization: Identity, + mock_tlp_marking: MarkingDefinition, +) -> None: + """Test converting GTI campaign with multiple motivations to a joined STIX objective.""" + # Given a GTI campaign with multiple motivations + mapper = _given_gti_campaign_mapper( + campaign_with_multiple_motivations, mock_organization, mock_tlp_marking + ) + # When converting to STIX + stix_campaign = _when_convert_to_stix(mapper) + # Then STIX campaign objective should contain all motivation values joined + _then_stix_campaign_has_objective(stix_campaign, "espionage, financial-gain") + + +# Scenario: Create STIX campaign with no motivations — objective should be None +@pytest.mark.order(1) +def test_gti_campaign_to_stix_no_motivations( + minimal_campaign_data: GTICampaignData, + mock_organization: Identity, + mock_tlp_marking: MarkingDefinition, +) -> None: + """Test that objective is None when no motivations are present.""" + # Given a GTI campaign without motivations + mapper = _given_gti_campaign_mapper( + minimal_campaign_data, mock_organization, mock_tlp_marking + ) + # When converting to STIX + stix_campaign = _when_convert_to_stix(mapper) + # Then objective should be absent / None + assert ( + not hasattr(stix_campaign, "objective") or stix_campaign.objective is None + ) # noqa: S101 + + +# Scenario: Null motivation values are skipped when building objective +@pytest.mark.order(1) +def test_gti_campaign_to_stix_null_motivation_values( + campaign_with_null_motivation_values: GTICampaignData, + mock_organization: Identity, + mock_tlp_marking: MarkingDefinition, +) -> None: + """Test that None motivation values are skipped when building objective.""" + # Given a GTI campaign where one motivation value is None + mapper = _given_gti_campaign_mapper( + campaign_with_null_motivation_values, mock_organization, mock_tlp_marking + ) + # When converting to STIX + stix_campaign = _when_convert_to_stix(mapper) + # Then objective should only contain the non-None motivation value + _then_stix_campaign_has_objective(stix_campaign, "espionage") + + +# Scenario: Test _extract_objective static method directly +@pytest.mark.order(1) +def test_extract_objective() -> None: + """Test extracting objective from campaign motivations.""" + # Given campaign attributes with motivations + attributes = CampaignModelFactory.build( + motivations=[ + MotivationFactory.build(value="espionage"), + MotivationFactory.build(value="financial-gain"), + ] + ) + # When extracting the objective + objective = _when_extract_objective(attributes) + # Then the objective should be the joined motivation values + assert objective == "espionage, financial-gain" # noqa: S101 + + +# Scenario: Test _extract_objective with empty motivations list +@pytest.mark.order(1) +def test_extract_objective_empty_motivations() -> None: + """Test extracting objective when motivations list is empty.""" + # Given campaign attributes with an empty motivations list + attributes = CampaignModelFactory.build(motivations=[]) + # When extracting the objective + objective = _when_extract_objective(attributes) + # Then objective should be None + assert objective is None # noqa: S101 + + +# Scenario: Test _extract_objective with None motivations +@pytest.mark.order(1) +def test_extract_objective_none_motivations() -> None: + """Test extracting objective when motivations is None.""" + # Given campaign attributes with no motivations + attributes = CampaignModelFactory.build(motivations=None) + # When extracting the objective + objective = _when_extract_objective(attributes) + # Then objective should be None + assert objective is None # noqa: S101 + + # ===================== # Edge Cases and Error Scenarios # ===================== @@ -621,6 +783,12 @@ def _when_convert_to_stix_raises_error( mapper.to_stix() +# When extract objective +def _when_extract_objective(attributes: CampaignModel) -> str | None: + """Extract objective from campaign motivations.""" + return GTICampaignToSTIXCampaign._extract_objective(attributes) + + # When extract seen dates def _when_extract_seen_dates( attributes: CampaignModel, @@ -692,6 +860,14 @@ def _then_stix_campaign_has_labels( assert len(stix_campaign.labels) > 0 # noqa: S101 +# Then STIX campaign has objective +def _then_stix_campaign_has_objective( + stix_campaign: Any, expected_objective: str +) -> None: + """Check if STIX campaign has the expected objective.""" + assert stix_campaign.objective == expected_objective # noqa: S101 + + # Then STIX campaign handles invalid dates def _then_stix_campaign_handles_invalid_dates(stix_campaign: Any) -> None: """Check if STIX campaign handles invalid dates gracefully.""" diff --git a/external-import/google-ti-feeds/tests/custom/mappers/gti_campaigns/test_gti_campaign_to_stix_composite_relationships.py b/external-import/google-ti-feeds/tests/custom/mappers/gti_campaigns/test_gti_campaign_to_stix_composite_relationships.py new file mode 100644 index 00000000000..aa38b1eec0d --- /dev/null +++ b/external-import/google-ti-feeds/tests/custom/mappers/gti_campaigns/test_gti_campaign_to_stix_composite_relationships.py @@ -0,0 +1,247 @@ +"""Tests that GTICampaignToSTIXComposite relationships have no template description.""" + +from uuid import uuid4 + +import pytest +from connector.src.custom.mappers.gti_campaigns.gti_campaign_to_stix_composite import ( + GTICampaignToSTIXComposite, +) +from connector.src.custom.models.gti.gti_campaign_model import ( + CampaignModel, + GTICampaignData, + SourceRegion, + TargetedIndustry, + TargetedRegion, +) +from polyfactory.factories.pydantic_factory import ModelFactory +from polyfactory.fields import Use +from stix2.v21 import Identity, MarkingDefinition # type: ignore + +# --------------------------------------------------------------------------- +# Factories +# --------------------------------------------------------------------------- + + +class SourceRegionFactory(ModelFactory[SourceRegion]): + """Factory for SourceRegion model.""" + + __model__ = SourceRegion + + +class TargetedRegionFactory(ModelFactory[TargetedRegion]): + """Factory for TargetedRegion model.""" + + __model__ = TargetedRegion + + +class TargetedIndustryFactory(ModelFactory[TargetedIndustry]): + """Factory for TargetedIndustry model.""" + + __model__ = TargetedIndustry + + +class CampaignModelFactory(ModelFactory[CampaignModel]): + """Factory for CampaignModel.""" + + __model__ = CampaignModel + + +class GTICampaignDataFactory(ModelFactory[GTICampaignData]): + """Factory for GTICampaignData.""" + + __model__ = GTICampaignData + type = "campaign" + attributes = Use(CampaignModelFactory.build) + + +# --------------------------------------------------------------------------- +# Fixtures +# --------------------------------------------------------------------------- + + +@pytest.fixture +def mock_organization(): + """Mock organization Identity object.""" + return Identity( # pylint: disable=W9101 + name="Test Organization", + identity_class="organization", + ) + + +@pytest.fixture +def mock_tlp_marking(): + """Mock TLP marking definition object.""" + return MarkingDefinition( + id=f"marking-definition--{uuid4()}", + definition_type="statement", + definition={"statement": "Internal Use Only"}, + ) + + +@pytest.fixture +def campaign_with_regions_and_industries() -> GTICampaignData: + """Campaign with one targeted region, one source region, and one identity/industry.""" + return GTICampaignDataFactory.build( + attributes=CampaignModelFactory.build( + name="CAMPAIGN-TEST", + creation_date=1672531200, + last_modification_date=1672617600, + targeted_regions_hierarchy=[ + TargetedRegionFactory.build( + country="Germany", + country_iso2="DE", + region="Western Europe", + first_seen=1672531200, + last_seen=1685577600, + ), + ], + source_regions_hierarchy=[ + SourceRegionFactory.build( + country="China", + country_iso2="CN", + region="East Asia", + first_seen=1654041600, + last_seen=1672531200, + ), + ], + targeted_industries_tree=[ + TargetedIndustryFactory.build( + industry="Technology", + industry_group="Information Technology", + first_seen=1672531200, + last_seen=1685577600, + ), + ], + ), + ) + + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + + +def _given_composite_mapper( + campaign: GTICampaignData, + organization: Identity, + tlp_marking: MarkingDefinition, +) -> GTICampaignToSTIXComposite: + return GTICampaignToSTIXComposite( + campaign=campaign, + organization=organization, + tlp_marking=tlp_marking, + ) + + +def _when_convert_to_stix(mapper: GTICampaignToSTIXComposite) -> list: + return mapper.to_stix() + + +def _then_relationship_has_no_description(relationship) -> None: # noqa: ANN001 + assert relationship.relationship_type is not None # noqa: S101 + assert relationship.description is None # noqa: S101 + + +# --------------------------------------------------------------------------- +# Tests +# --------------------------------------------------------------------------- + + +@pytest.mark.order(1) +def test_targets_location_relationship_has_no_description( + campaign_with_regions_and_industries, + mock_organization, + mock_tlp_marking, +): + """The 'targets' (location) relationship must have description=None.""" + # GIVEN + mapper = _given_composite_mapper( + campaign_with_regions_and_industries, + mock_organization, + mock_tlp_marking, + ) + + # WHEN + stix_objects = _when_convert_to_stix(mapper) + + # THEN + targets_location_rels = [ + obj + for obj in stix_objects + if hasattr(obj, "relationship_type") + and obj.relationship_type == "targets" + and any( + loc.name == "Germany" + for loc in stix_objects + if hasattr(loc, "type") + and loc.type == "location" + and obj.target_ref == loc.id + ) + ] + assert len(targets_location_rels) >= 1 # noqa: S101 + for rel in targets_location_rels: + _then_relationship_has_no_description(rel) + + +@pytest.mark.order(1) +def test_originates_from_location_relationship_has_no_description( + campaign_with_regions_and_industries, + mock_organization, + mock_tlp_marking, +): + """The 'originates-from' (location) relationship must have description=None.""" + # GIVEN + mapper = _given_composite_mapper( + campaign_with_regions_and_industries, + mock_organization, + mock_tlp_marking, + ) + + # WHEN + stix_objects = _when_convert_to_stix(mapper) + + # THEN + originates_rels = [ + obj + for obj in stix_objects + if hasattr(obj, "relationship_type") + and obj.relationship_type == "originates-from" + ] + assert len(originates_rels) >= 1 # noqa: S101 + for rel in originates_rels: + _then_relationship_has_no_description(rel) + + +@pytest.mark.order(1) +def test_targets_industry_relationship_has_no_description( + campaign_with_regions_and_industries, + mock_organization, + mock_tlp_marking, +): + """The 'targets' (identity/industry) relationship must have description=None.""" + # GIVEN + mapper = _given_composite_mapper( + campaign_with_regions_and_industries, + mock_organization, + mock_tlp_marking, + ) + + # WHEN + stix_objects = _when_convert_to_stix(mapper) + + # THEN — industries are Identity objects; filter out location targets + locations = [ + obj for obj in stix_objects if hasattr(obj, "type") and obj.type == "location" + ] + location_ids = {loc.id for loc in locations} + + targets_industry_rels = [ + obj + for obj in stix_objects + if hasattr(obj, "relationship_type") + and obj.relationship_type == "targets" + and obj.target_ref not in location_ids + ] + assert len(targets_industry_rels) >= 1 # noqa: S101 + for rel in targets_industry_rels: + _then_relationship_has_no_description(rel) diff --git a/external-import/google-ti-feeds/tests/custom/mappers/gti_iocs/test_gti_domain_to_stix_domain.py b/external-import/google-ti-feeds/tests/custom/mappers/gti_iocs/test_gti_domain_to_stix_domain.py index 86315d5fd8d..4b40d3cbdf2 100644 --- a/external-import/google-ti-feeds/tests/custom/mappers/gti_iocs/test_gti_domain_to_stix_domain.py +++ b/external-import/google-ti-feeds/tests/custom/mappers/gti_iocs/test_gti_domain_to_stix_domain.py @@ -260,7 +260,7 @@ def test_gti_domain_to_stix_minimal_data( _then_stix_domain_has_correct_properties( domain_observable, minimal_domain_data, mock_organization, mock_tlp_marking ) - _then_stix_indicator_has_unknown_type(indicator) + _then_stix_indicator_has_no_type(indicator) # Scenario: Convert GTI domain with timestamps to STIX objects @@ -441,7 +441,7 @@ def test_gti_domain_to_stix_without_attributes( # Then objects should still be created with fallback behavior _then_stix_objects_created_successfully(stix_objects) domain_observable, indicator, relationship = stix_objects - _then_stix_indicator_has_unknown_type(indicator) + _then_stix_indicator_has_no_type(indicator) # Scenario: Convert GTI domain with empty verdict to STIX objects @@ -460,10 +460,10 @@ def test_gti_domain_to_stix_with_empty_verdict( # When converting to STIX stix_objects = _when_convert_to_stix(mapper) - # Then STIX objects should be created with unknown indicator type + # Then STIX objects should be created with no indicator type _then_stix_objects_created_successfully(stix_objects) domain_observable, indicator, relationship = stix_objects - _then_stix_indicator_has_unknown_type(indicator) + _then_stix_indicator_has_no_type(indicator) # Scenario: Convert GTI domain with invalid timestamps to STIX objects @@ -645,8 +645,8 @@ def test_determine_indicator_types_without_verdict( # When determining indicator types indicator_types = mapper._determine_indicator_types() - # Then unknown indicator type should be returned - assert indicator_types == [IndicatorTypeOV.UNKNOWN] # noqa: S101 + # Then no indicator type should be returned + assert indicator_types == [] # noqa: S101 # Scenario: Test create STIX domain method @@ -760,9 +760,12 @@ def _then_stix_indicator_has_type( assert expected_type in indicator.indicator_types # noqa: S101 -def _then_stix_indicator_has_unknown_type(indicator: Any) -> None: - """Assert that STIX indicator has unknown type.""" - _then_stix_indicator_has_type(indicator, IndicatorTypeOV.UNKNOWN) +def _then_stix_indicator_has_no_type(indicator: Any) -> None: + """Assert that STIX indicator has no type.""" + indicator_types = getattr(indicator, "indicator_types", None) + assert ( + indicator_types == [] + ), f"Expected empty indicator_types, got: {indicator_types}" # noqa: S101 def _then_stix_indicator_has_correct_timestamps( diff --git a/external-import/google-ti-feeds/tests/custom/mappers/gti_iocs/test_gti_file_to_stix_file.py b/external-import/google-ti-feeds/tests/custom/mappers/gti_iocs/test_gti_file_to_stix_file.py index 86f93439746..e5831bb3a13 100644 --- a/external-import/google-ti-feeds/tests/custom/mappers/gti_iocs/test_gti_file_to_stix_file.py +++ b/external-import/google-ti-feeds/tests/custom/mappers/gti_iocs/test_gti_file_to_stix_file.py @@ -304,7 +304,7 @@ def test_gti_file_to_stix_minimal_data( _then_stix_file_has_correct_properties( file_observable, minimal_file_data, mock_organization, mock_tlp_marking ) - _then_stix_indicator_has_unknown_type(indicator) + _then_stix_indicator_has_no_type(indicator) # Scenario: Convert GTI file with timestamps to STIX objects @@ -506,10 +506,10 @@ def test_gti_file_to_stix_with_empty_verdict( # When converting to STIX stix_objects = _when_convert_to_stix(mapper) - # Then STIX objects should be created with unknown indicator type + # Then STIX objects should be created with no indicator type _then_stix_objects_created_successfully(stix_objects) file_observable, indicator, relationship = stix_objects - _then_stix_indicator_has_unknown_type(indicator) + _then_stix_indicator_has_no_type(indicator) # Scenario: Convert GTI file with invalid timestamps to STIX objects @@ -792,8 +792,8 @@ def test_determine_indicator_types_without_verdict( # When determining indicator types indicator_types = mapper._determine_indicator_types() - # Then unknown indicator type should be returned - assert indicator_types == [IndicatorTypeOV.UNKNOWN] # noqa: S101 + # Then no indicator type should be returned + assert indicator_types == [] # noqa: S101 # Scenario: Test create STIX file method @@ -964,9 +964,12 @@ def _then_stix_indicator_has_type( assert expected_type in indicator.indicator_types # noqa: S101 -def _then_stix_indicator_has_unknown_type(indicator: Any) -> None: - """Assert that STIX indicator has unknown type.""" - _then_stix_indicator_has_type(indicator, IndicatorTypeOV.UNKNOWN) +def _then_stix_indicator_has_no_type(indicator: Any) -> None: + """Assert that STIX indicator has no type.""" + indicator_types = getattr(indicator, "indicator_types", None) + assert ( + indicator_types == [] + ), f"Expected empty indicator_types, got: {indicator_types}" # noqa: S101 def _then_stix_indicator_has_correct_timestamps( diff --git a/external-import/google-ti-feeds/tests/custom/mappers/gti_iocs/test_gti_ioc_relationships_no_description.py b/external-import/google-ti-feeds/tests/custom/mappers/gti_iocs/test_gti_ioc_relationships_no_description.py new file mode 100644 index 00000000000..70431d7c9f2 --- /dev/null +++ b/external-import/google-ti-feeds/tests/custom/mappers/gti_iocs/test_gti_ioc_relationships_no_description.py @@ -0,0 +1,354 @@ +"""Tests that IOC mapper create_relationship() produces relationships with description=None.""" + +from typing import Any +from uuid import uuid4 + +import pytest +from connector.src.custom.mappers.gti_iocs.gti_domain_to_stix_domain import ( + GTIDomainToSTIXDomain, +) +from connector.src.custom.mappers.gti_iocs.gti_file_to_stix_file import ( + GTIFileToSTIXFile, +) +from connector.src.custom.mappers.gti_iocs.gti_ip_to_stix_ip import ( + GTIIPToSTIXIP, +) +from connector.src.custom.mappers.gti_iocs.gti_url_to_stix_url import ( + GTIUrlToSTIXUrl, +) +from connector.src.custom.models.gti.gti_domain_model import ( + DomainModel, + GTIDomainData, +) +from connector.src.custom.models.gti.gti_file_model import ( + FileModel, + GTIFileData, +) +from connector.src.custom.models.gti.gti_ip_addresses_model import ( + GTIIPData, + IPModel, +) +from connector.src.custom.models.gti.gti_url_model import ( + GTIURLData, + URLModel, +) +from polyfactory.factories.pydantic_factory import ModelFactory +from polyfactory.fields import Use +from stix2.v21 import Identity, MarkingDefinition # type: ignore + +# --------------------------------------------------------------------------- +# Factories +# --------------------------------------------------------------------------- + + +class DomainModelFactory(ModelFactory[DomainModel]): + """Factory for DomainModel.""" + + __model__ = DomainModel + + +class GTIDomainDataFactory(ModelFactory[GTIDomainData]): + """Factory for GTIDomainData.""" + + __model__ = GTIDomainData + type = "domain" + attributes = Use(DomainModelFactory.build) + + +class IPModelFactory(ModelFactory[IPModel]): + """Factory for IPModel.""" + + __model__ = IPModel + + +class GTIIPDataFactory(ModelFactory[GTIIPData]): + """Factory for GTIIPData.""" + + __model__ = GTIIPData + type = "ip_address" + attributes = Use(IPModelFactory.build) + + +class URLModelFactory(ModelFactory[URLModel]): + """Factory for URLModel.""" + + __model__ = URLModel + + +class GTIURLDataFactory(ModelFactory[GTIURLData]): + """Factory for GTIURLData.""" + + __model__ = GTIURLData + type = "url" + attributes = Use(URLModelFactory.build) + + +class FileModelFactory(ModelFactory[FileModel]): + """Factory for FileModel.""" + + __model__ = FileModel + + +class GTIFileDataFactory(ModelFactory[GTIFileData]): + """Factory for GTIFileData.""" + + __model__ = GTIFileData + type = "file" + attributes = Use(FileModelFactory.build) + + +# --------------------------------------------------------------------------- +# Fixtures +# --------------------------------------------------------------------------- + + +@pytest.fixture +def mock_organization(): + """Mock organization Identity object.""" + return Identity( # pylint: disable=W9101 + name="Test Organization", + identity_class="organization", + ) + + +@pytest.fixture +def mock_tlp_marking(): + """Mock TLP marking definition object.""" + return MarkingDefinition( + id=f"marking-definition--{uuid4()}", + definition_type="statement", + definition={"statement": "Internal Use Only"}, + ) + + +@pytest.fixture +def domain_stix_objects(mock_organization, mock_tlp_marking) -> list[Any]: + """Produce [domain_observable, indicator, relationship] from a domain mapper.""" + domain_data = GTIDomainDataFactory.build( + id="example.com", + attributes=DomainModelFactory.build( + creation_date=None, + last_modification_date=None, + gti_assessment=None, + ), + ) + mapper = GTIDomainToSTIXDomain( + domain=domain_data, organization=mock_organization, tlp_marking=mock_tlp_marking + ) + return mapper.to_stix() + + +@pytest.fixture +def ip_stix_objects(mock_organization, mock_tlp_marking) -> list[Any]: + """Produce [ip_observable, indicator, relationship] from an IP mapper.""" + ip_data = GTIIPDataFactory.build( + id="192.168.1.1", + attributes=IPModelFactory.build( + last_analysis_date=None, + last_modification_date=None, + gti_assessment=None, + ), + ) + mapper = GTIIPToSTIXIP( + ip=ip_data, organization=mock_organization, tlp_marking=mock_tlp_marking + ) + return mapper.to_stix() + + +@pytest.fixture +def url_stix_objects(mock_organization, mock_tlp_marking) -> list[Any]: + """Produce [url_observable, indicator, relationship] from a URL mapper.""" + url_data = GTIURLDataFactory.build( + id="https://example.com/test", + attributes=URLModelFactory.build( + url="https://example.com/test", + first_submission_date=None, + last_modification_date=None, + gti_assessment=None, + ), + ) + mapper = GTIUrlToSTIXUrl( + url=url_data, organization=mock_organization, tlp_marking=mock_tlp_marking + ) + return mapper.to_stix() + + +@pytest.fixture +def file_stix_objects(mock_organization, mock_tlp_marking) -> list[Any]: + """Produce [file_observable, indicator, relationship] from a file mapper.""" + file_data = GTIFileDataFactory.build( + id="e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + attributes=FileModelFactory.build( + sha256="e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + sha1=None, + md5=None, + first_submission_date=None, + last_submission_date=None, + last_modification_date=None, + gti_assessment=None, + ), + ) + mapper = GTIFileToSTIXFile( + file=file_data, organization=mock_organization, tlp_marking=mock_tlp_marking + ) + return mapper.to_stix() + + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + + +def _then_relationship_has_no_description(relationship) -> None: # noqa: ANN001 + assert relationship.relationship_type is not None # noqa: S101 + assert relationship.description is None # noqa: S101 + + +# --------------------------------------------------------------------------- +# Tests — Domain mapper create_relationship +# --------------------------------------------------------------------------- + + +@pytest.mark.order(1) +def test_domain_indicates_relationship_has_no_description(domain_stix_objects): + """Domain create_relationship with IndicatorModel target must produce description=None.""" + # GIVEN — objects from to_stix(): [domain_observable, indicator, ...] + indicator = domain_stix_objects[1] + + # WHEN — pass indicator as target; src_entity needs created_by_ref/object_marking_refs + relationship = GTIDomainToSTIXDomain.create_relationship( + indicator, "indicates", indicator + ) + + # THEN + assert relationship.relationship_type == "indicates" # noqa: S101 + _then_relationship_has_no_description(relationship) + + +@pytest.mark.order(1) +def test_domain_generic_relationship_has_no_description(domain_stix_objects): + """Domain create_relationship with non-Indicator target must produce description=None.""" + # GIVEN + domain_observable = domain_stix_objects[0] + indicator = domain_stix_objects[1] + + # WHEN — use indicator as src (has created_by_ref), domain_observable as target (not IndicatorModel) + relationship = GTIDomainToSTIXDomain.create_relationship( + indicator, "related-to", domain_observable + ) + + # THEN + assert relationship.relationship_type == "related-to" # noqa: S101 + _then_relationship_has_no_description(relationship) + + +# --------------------------------------------------------------------------- +# Tests — IP mapper create_relationship +# --------------------------------------------------------------------------- + + +@pytest.mark.order(1) +def test_ip_indicates_relationship_has_no_description(ip_stix_objects): + """IP create_relationship with IndicatorModel target must produce description=None.""" + # GIVEN + indicator = ip_stix_objects[1] + + # WHEN + relationship = GTIIPToSTIXIP.create_relationship(indicator, "indicates", indicator) + + # THEN + assert relationship.relationship_type == "indicates" # noqa: S101 + _then_relationship_has_no_description(relationship) + + +@pytest.mark.order(1) +def test_ip_generic_relationship_has_no_description(ip_stix_objects): + """IP create_relationship with non-Indicator target must produce description=None.""" + # GIVEN + ip_observable = ip_stix_objects[0] + indicator = ip_stix_objects[1] + + # WHEN + relationship = GTIIPToSTIXIP.create_relationship( + indicator, "related-to", ip_observable + ) + + # THEN + assert relationship.relationship_type == "related-to" # noqa: S101 + _then_relationship_has_no_description(relationship) + + +# --------------------------------------------------------------------------- +# Tests — URL mapper create_relationship +# --------------------------------------------------------------------------- + + +@pytest.mark.order(1) +def test_url_indicates_relationship_has_no_description(url_stix_objects): + """URL create_relationship with IndicatorModel target must produce description=None.""" + # GIVEN + indicator = url_stix_objects[1] + + # WHEN + relationship = GTIUrlToSTIXUrl.create_relationship( + indicator, "indicates", indicator + ) + + # THEN + assert relationship.relationship_type == "indicates" # noqa: S101 + _then_relationship_has_no_description(relationship) + + +@pytest.mark.order(1) +def test_url_generic_relationship_has_no_description(url_stix_objects): + """URL create_relationship with non-Indicator target must produce description=None.""" + # GIVEN + url_observable = url_stix_objects[0] + indicator = url_stix_objects[1] + + # WHEN + relationship = GTIUrlToSTIXUrl.create_relationship( + indicator, "related-to", url_observable + ) + + # THEN + assert relationship.relationship_type == "related-to" # noqa: S101 + _then_relationship_has_no_description(relationship) + + +# --------------------------------------------------------------------------- +# Tests — File mapper create_relationship +# --------------------------------------------------------------------------- + + +@pytest.mark.order(1) +def test_file_indicates_relationship_has_no_description(file_stix_objects): + """File create_relationship with IndicatorModel target must produce description=None.""" + # GIVEN + indicator = file_stix_objects[1] + + # WHEN + relationship = GTIFileToSTIXFile.create_relationship( + indicator, "indicates", indicator + ) + + # THEN + assert relationship.relationship_type == "indicates" # noqa: S101 + _then_relationship_has_no_description(relationship) + + +@pytest.mark.order(1) +def test_file_generic_relationship_has_no_description(file_stix_objects): + """File create_relationship with non-Indicator target must produce description=None.""" + # GIVEN + file_observable = file_stix_objects[0] + indicator = file_stix_objects[1] + + # WHEN + relationship = GTIFileToSTIXFile.create_relationship( + indicator, "related-to", file_observable + ) + + # THEN + assert relationship.relationship_type == "related-to" # noqa: S101 + _then_relationship_has_no_description(relationship) diff --git a/external-import/google-ti-feeds/tests/custom/mappers/gti_iocs/test_gti_ip_to_stix_ip.py b/external-import/google-ti-feeds/tests/custom/mappers/gti_iocs/test_gti_ip_to_stix_ip.py index 19055e75235..934535c1a9a 100644 --- a/external-import/google-ti-feeds/tests/custom/mappers/gti_iocs/test_gti_ip_to_stix_ip.py +++ b/external-import/google-ti-feeds/tests/custom/mappers/gti_iocs/test_gti_ip_to_stix_ip.py @@ -285,7 +285,7 @@ def test_gti_ipv4_to_stix_minimal_data( _then_stix_ipv4_has_correct_properties( ip_observable, minimal_ipv4_data, mock_organization, mock_tlp_marking ) - _then_stix_indicator_has_unknown_type(indicator) + _then_stix_indicator_has_no_type(indicator) # Scenario: Convert GTI IPv6 with minimal data to STIX objects @@ -310,7 +310,7 @@ def test_gti_ipv6_to_stix_minimal_data( _then_stix_ipv6_has_correct_properties( ip_observable, minimal_ipv6_data, mock_organization, mock_tlp_marking ) - _then_stix_indicator_has_unknown_type(indicator) + _then_stix_indicator_has_no_type(indicator) # Scenario: Convert GTI IP with timestamps to STIX objects @@ -489,7 +489,7 @@ def test_gti_ip_to_stix_without_attributes( # Then objects should still be created with fallback behavior _then_stix_objects_created_successfully(stix_objects) ip_observable, indicator, relationship = stix_objects - _then_stix_indicator_has_unknown_type(indicator) + _then_stix_indicator_has_no_type(indicator) # Scenario: Convert GTI IP with empty verdict to STIX objects @@ -508,10 +508,10 @@ def test_gti_ip_to_stix_with_empty_verdict( # When converting to STIX stix_objects = _when_convert_to_stix(mapper) - # Then STIX objects should be created with unknown indicator type + # Then STIX objects should be created with no indicator type _then_stix_objects_created_successfully(stix_objects) ip_observable, indicator, relationship = stix_objects - _then_stix_indicator_has_unknown_type(indicator) + _then_stix_indicator_has_no_type(indicator) # Scenario: Convert GTI IP with invalid timestamps to STIX objects @@ -779,8 +779,8 @@ def test_determine_indicator_types_without_verdict( # When determining indicator types indicator_types = mapper._determine_indicator_types() - # Then unknown indicator type should be returned - assert indicator_types == [IndicatorTypeOV.UNKNOWN] # noqa: S101 + # Then no indicator type should be returned + assert indicator_types == [] # noqa: S101 # Scenario: Test create STIX IPv4 method @@ -936,9 +936,12 @@ def _then_stix_indicator_has_type( assert expected_type in indicator.indicator_types # noqa: S101 -def _then_stix_indicator_has_unknown_type(indicator: Any) -> None: - """Assert that STIX indicator has unknown type.""" - _then_stix_indicator_has_type(indicator, IndicatorTypeOV.UNKNOWN) +def _then_stix_indicator_has_no_type(indicator: Any) -> None: + """Assert that STIX indicator has no type.""" + indicator_types = getattr(indicator, "indicator_types", None) + assert ( + indicator_types == [] + ), f"Expected empty indicator_types, got: {indicator_types}" # noqa: S101 def _then_stix_indicator_has_correct_timestamps( diff --git a/external-import/google-ti-feeds/tests/custom/mappers/gti_iocs/test_gti_url_to_stix_url.py b/external-import/google-ti-feeds/tests/custom/mappers/gti_iocs/test_gti_url_to_stix_url.py index a284fd5a38d..4e0baef3cec 100644 --- a/external-import/google-ti-feeds/tests/custom/mappers/gti_iocs/test_gti_url_to_stix_url.py +++ b/external-import/google-ti-feeds/tests/custom/mappers/gti_iocs/test_gti_url_to_stix_url.py @@ -278,7 +278,7 @@ def test_gti_url_to_stix_minimal_data( _then_stix_url_has_correct_properties( url_observable, minimal_url_data, mock_organization, mock_tlp_marking ) - _then_stix_indicator_has_unknown_type(indicator) + _then_stix_indicator_has_no_type(indicator) # Scenario: Convert GTI URL with timestamps to STIX objects @@ -485,7 +485,7 @@ def test_gti_url_to_stix_without_attributes( # Then objects should still be created with fallback behavior _then_stix_objects_created_successfully(stix_objects) url_observable, indicator, relationship = stix_objects - _then_stix_indicator_has_unknown_type(indicator) + _then_stix_indicator_has_no_type(indicator) # Scenario: Convert GTI URL with empty verdict to STIX objects @@ -504,10 +504,10 @@ def test_gti_url_to_stix_with_empty_verdict( # When converting to STIX stix_objects = _when_convert_to_stix(mapper) - # Then STIX objects should be created with unknown indicator type + # Then STIX objects should be created with no indicator type _then_stix_objects_created_successfully(stix_objects) url_observable, indicator, relationship = stix_objects - _then_stix_indicator_has_unknown_type(indicator) + _then_stix_indicator_has_no_type(indicator) # Scenario: Convert GTI URL with invalid timestamps to STIX objects @@ -779,8 +779,8 @@ def test_determine_indicator_types_without_verdict( # When determining indicator types indicator_types = mapper._determine_indicator_types() - # Then unknown indicator type should be returned - assert indicator_types == [IndicatorTypeOV.UNKNOWN] # noqa: S101 + # Then no indicator type should be returned + assert indicator_types == [] # noqa: S101 # Scenario: Test create STIX URL method @@ -893,9 +893,12 @@ def _then_stix_indicator_has_type( assert expected_type in indicator.indicator_types # noqa: S101 -def _then_stix_indicator_has_unknown_type(indicator: Any) -> None: - """Assert that STIX indicator has unknown type.""" - _then_stix_indicator_has_type(indicator, IndicatorTypeOV.UNKNOWN) +def _then_stix_indicator_has_no_type(indicator: Any) -> None: + """Assert that STIX indicator has no type.""" + indicator_types = getattr(indicator, "indicator_types", None) + assert ( + indicator_types == [] + ), f"Expected empty indicator_types, got: {indicator_types}" # noqa: S101 def _then_stix_indicator_has_correct_timestamps( diff --git a/external-import/google-ti-feeds/tests/custom/mappers/gti_malwares/test_gti_malware_family_to_stix_composite_relationships.py b/external-import/google-ti-feeds/tests/custom/mappers/gti_malwares/test_gti_malware_family_to_stix_composite_relationships.py new file mode 100644 index 00000000000..4a0ce5e3ef2 --- /dev/null +++ b/external-import/google-ti-feeds/tests/custom/mappers/gti_malwares/test_gti_malware_family_to_stix_composite_relationships.py @@ -0,0 +1,259 @@ +"""Tests that GTIMalwareFamilyToSTIXComposite relationships have no template description.""" + +from uuid import uuid4 + +import pytest +from connector.src.custom.mappers.gti_malwares.gti_malware_family_to_stix_composite import ( + GTIMalwareFamilyToSTIXComposite, +) +from connector.src.custom.models.gti.gti_malware_family_model import ( + GTIMalwareFamilyData, + MalwareFamilyModel, + SeenDetail, + SourceRegion, + TargetedIndustry, + TargetedRegion, +) +from polyfactory.factories.pydantic_factory import ModelFactory +from polyfactory.fields import Use +from stix2.v21 import Identity, MarkingDefinition # type: ignore + +# --------------------------------------------------------------------------- +# Factories +# --------------------------------------------------------------------------- + + +class SourceRegionFactory(ModelFactory[SourceRegion]): + """Factory for SourceRegion model.""" + + __model__ = SourceRegion + + +class TargetedRegionFactory(ModelFactory[TargetedRegion]): + """Factory for TargetedRegion model.""" + + __model__ = TargetedRegion + + +class TargetedIndustryFactory(ModelFactory[TargetedIndustry]): + """Factory for TargetedIndustry model.""" + + __model__ = TargetedIndustry + + +class SeenDetailFactory(ModelFactory[SeenDetail]): + """Factory for SeenDetail model.""" + + __model__ = SeenDetail + first_seen = 1747094400 + last_seen = 1747094400 + value = "2025-05-13T00:00:00Z" + + +class MalwareFamilyModelFactory(ModelFactory[MalwareFamilyModel]): + """Factory for MalwareFamilyModel.""" + + __model__ = MalwareFamilyModel + first_seen_details = [SeenDetailFactory.build()] + last_seen_details = [SeenDetailFactory.build()] + + +class GTIMalwareFamilyDataFactory(ModelFactory[GTIMalwareFamilyData]): + """Factory for GTIMalwareFamilyData.""" + + __model__ = GTIMalwareFamilyData + type = "malware-family" + attributes = Use(MalwareFamilyModelFactory.build) + + +# --------------------------------------------------------------------------- +# Fixtures +# --------------------------------------------------------------------------- + + +@pytest.fixture +def mock_organization(): + """Mock organization Identity object.""" + return Identity( # pylint: disable=W9101 + name="Test Organization", + identity_class="organization", + ) + + +@pytest.fixture +def mock_tlp_marking(): + """Mock TLP marking definition object.""" + return MarkingDefinition( + id=f"marking-definition--{uuid4()}", + definition_type="statement", + definition={"statement": "Internal Use Only"}, + ) + + +@pytest.fixture +def malware_family_with_regions_and_sectors() -> GTIMalwareFamilyData: + """Malware family with one targeted region, one source region, and one sector.""" + return GTIMalwareFamilyDataFactory.build( + attributes=MalwareFamilyModelFactory.build( + name="MALWARE-TEST", + creation_date=1672531200, + last_modification_date=1672617600, + targeted_regions_hierarchy=[ + TargetedRegionFactory.build( + country="Japan", + country_iso2="JP", + region="East Asia", + first_seen=1672531200, + last_seen=1685577600, + ), + ], + source_regions_hierarchy=[ + SourceRegionFactory.build( + country="North Korea", + country_iso2="KP", + region="East Asia", + first_seen=1654041600, + last_seen=1672531200, + ), + ], + targeted_industries_tree=[ + TargetedIndustryFactory.build( + industry="Energy", + industry_group="Utilities", + first_seen=1672531200, + last_seen=1685577600, + ), + ], + ), + ) + + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + + +def _given_composite_mapper( + malware_family: GTIMalwareFamilyData, + organization: Identity, + tlp_marking: MarkingDefinition, +) -> GTIMalwareFamilyToSTIXComposite: + return GTIMalwareFamilyToSTIXComposite( + malware_family=malware_family, + organization=organization, + tlp_marking=tlp_marking, + ) + + +def _when_convert_to_stix(mapper: GTIMalwareFamilyToSTIXComposite) -> list: + return mapper.to_stix() + + +def _then_relationship_has_no_description(relationship) -> None: # noqa: ANN001 + assert relationship.relationship_type is not None # noqa: S101 + assert relationship.description is None # noqa: S101 + + +# --------------------------------------------------------------------------- +# Tests +# --------------------------------------------------------------------------- + + +@pytest.mark.order(1) +def test_targets_location_relationship_has_no_description( + malware_family_with_regions_and_sectors, + mock_organization, + mock_tlp_marking, +): + """The 'targets' (location) relationship must have description=None.""" + # GIVEN + mapper = _given_composite_mapper( + malware_family_with_regions_and_sectors, + mock_organization, + mock_tlp_marking, + ) + + # WHEN + stix_objects = _when_convert_to_stix(mapper) + + # THEN + targets_location_rels = [ + obj + for obj in stix_objects + if hasattr(obj, "relationship_type") + and obj.relationship_type == "targets" + and any( + loc.name == "Japan" + for loc in stix_objects + if hasattr(loc, "type") + and loc.type == "location" + and obj.target_ref == loc.id + ) + ] + assert len(targets_location_rels) >= 1 # noqa: S101 + for rel in targets_location_rels: + _then_relationship_has_no_description(rel) + + +@pytest.mark.order(1) +def test_originates_from_location_relationship_has_no_description( + malware_family_with_regions_and_sectors, + mock_organization, + mock_tlp_marking, +): + """The 'originates-from' (location) relationship must have description=None.""" + # GIVEN + mapper = _given_composite_mapper( + malware_family_with_regions_and_sectors, + mock_organization, + mock_tlp_marking, + ) + + # WHEN + stix_objects = _when_convert_to_stix(mapper) + + # THEN + originates_rels = [ + obj + for obj in stix_objects + if hasattr(obj, "relationship_type") + and obj.relationship_type == "originates-from" + ] + assert len(originates_rels) >= 1 # noqa: S101 + for rel in originates_rels: + _then_relationship_has_no_description(rel) + + +@pytest.mark.order(1) +def test_targets_sector_relationship_has_no_description( + malware_family_with_regions_and_sectors, + mock_organization, + mock_tlp_marking, +): + """The 'targets' (sector/identity) relationship must have description=None.""" + # GIVEN + mapper = _given_composite_mapper( + malware_family_with_regions_and_sectors, + mock_organization, + mock_tlp_marking, + ) + + # WHEN + stix_objects = _when_convert_to_stix(mapper) + + # THEN — sectors are Identity objects; filter out location targets + locations = [ + obj for obj in stix_objects if hasattr(obj, "type") and obj.type == "location" + ] + location_ids = {loc.id for loc in locations} + + targets_sector_rels = [ + obj + for obj in stix_objects + if hasattr(obj, "relationship_type") + and obj.relationship_type == "targets" + and obj.target_ref not in location_ids + ] + assert len(targets_sector_rels) >= 1 # noqa: S101 + for rel in targets_sector_rels: + _then_relationship_has_no_description(rel) diff --git a/external-import/google-ti-feeds/tests/custom/mappers/gti_malwares/test_gti_malware_family_to_stix_malware.py b/external-import/google-ti-feeds/tests/custom/mappers/gti_malwares/test_gti_malware_family_to_stix_malware.py index a0e973114a5..6ed7b23e39b 100644 --- a/external-import/google-ti-feeds/tests/custom/mappers/gti_malwares/test_gti_malware_family_to_stix_malware.py +++ b/external-import/google-ti-feeds/tests/custom/mappers/gti_malwares/test_gti_malware_family_to_stix_malware.py @@ -40,6 +40,9 @@ class SeenDetailFactory(ModelFactory[SeenDetail]): """Factory for SeenDetail model.""" __model__ = SeenDetail + first_seen = 1747094400 + last_seen = 1747094400 + value = "2025-05-13T00:00:00Z" class TagDetailFactory(ModelFactory[TagDetail]): @@ -58,6 +61,8 @@ class MalwareFamilyModelFactory(ModelFactory[MalwareFamilyModel]): """Factory for MalwareFamilyModel.""" __model__ = MalwareFamilyModel + first_seen_details = [SeenDetailFactory.build()] + last_seen_details = [SeenDetailFactory.build()] class GTIMalwareFamilyDataFactory(ModelFactory[GTIMalwareFamilyData]): @@ -293,7 +298,7 @@ def test_gti_malware_family_to_stix_minimal_data( # Then STIX malware should have all properties _then_stix_malware_created_successfully(malware) _then_stix_malware_has_correct_properties(malware) - _then_stix_malware_has_default_malware_type(malware) + _then_stix_malware_has_no_malware_types(malware) # # Scenario: Create STIX malware with aliases @@ -675,9 +680,9 @@ def test_extract_malware_types_without_roles(mock_organization, mock_tlp_marking # When extracting malware types malware_types = mapper._extract_malware_types(attributes) - # Then unknown malware type should be returned - assert len(malware_types) == 1 # noqa: S101 - assert malware_types[0] == MalwareTypeOV.UNKNOWN # noqa: S101 + # Then no malware types should be returned (omit field when roles absent) + assert len(malware_types) == 0 # noqa: S101 + assert malware_types == [] # noqa: S101 @pytest.mark.order(1) @@ -703,16 +708,16 @@ def test_extract_seen_dates_with_valid_data(mock_organization, mock_tlp_marking) if ( attributes.first_seen_details and len(attributes.first_seen_details) > 0 - and hasattr(attributes.first_seen_details[0], "values") + and hasattr(attributes.first_seen_details[0], "value") ): - expected_first_seen = attributes.first_seen_details[0].values + expected_first_seen = attributes.first_seen_details[0].value if ( attributes.last_seen_details and len(attributes.last_seen_details) > 0 - and hasattr(attributes.last_seen_details[0], "values") + and hasattr(attributes.last_seen_details[0], "value") ): - expected_last_seen = attributes.last_seen_details[0].values + expected_last_seen = attributes.last_seen_details[0].value assert first_seen == expected_first_seen # noqa: S101 assert last_seen == expected_last_seen # noqa: S101 @@ -900,10 +905,9 @@ def _then_stix_malware_has_correct_properties(malware): assert malware.is_family is True # noqa: S101 -def _then_stix_malware_has_default_malware_type(malware): - """Assert that STIX malware has default malware type.""" - assert len(malware.malware_types) == 1 # noqa: S101 - assert malware.malware_types[0] == MalwareTypeOV.UNKNOWN # noqa: S101 +def _then_stix_malware_has_no_malware_types(malware): + """Assert that STIX malware has no malware types when roles are absent.""" + assert malware.malware_types == [] # noqa: S101 def _then_stix_malware_has_aliases(malware): @@ -925,12 +929,6 @@ def _then_stix_malware_has_mapped_malware_types(malware): ) -def _then_stix_malware_has_unknown_malware_types(malware): - """Assert that STIX malware has unknown malware types.""" - assert len(malware.malware_types) == 1 # noqa: S101 - assert malware.malware_types[0] == MalwareTypeOV.UNKNOWN # noqa: S101 - - def _then_stix_malware_has_mixed_malware_types(malware): """Assert that STIX malware has mix of malware types from valid roles only.""" assert len(malware.malware_types) >= 1 # noqa: S101 diff --git a/external-import/google-ti-feeds/tests/custom/mappers/gti_reports/test_gti_report_to_stix_composite_analyst_comment.py b/external-import/google-ti-feeds/tests/custom/mappers/gti_reports/test_gti_report_to_stix_composite_analyst_comment.py new file mode 100644 index 00000000000..13afd6d0257 --- /dev/null +++ b/external-import/google-ti-feeds/tests/custom/mappers/gti_reports/test_gti_report_to_stix_composite_analyst_comment.py @@ -0,0 +1,264 @@ +"""Tests for analyst_comment Note creation in GTIReportToSTIXComposite mapper.""" + +from uuid import uuid4 + +import pytest +from connector.src.custom.mappers.gti_reports.gti_report_to_stix_composite import ( + GTIReportToSTIXComposite, +) +from connector.src.custom.models.gti.gti_report_model import ( + GTIReportData, + Links, + ReportModel, +) +from polyfactory.factories.pydantic_factory import ModelFactory +from polyfactory.fields import Use +from stix2.v21 import Identity, MarkingDefinition # type: ignore + + +class LinksFactory(ModelFactory[Links]): + """Factory for Links.""" + + __model__ = Links + + +class ReportModelFactory(ModelFactory[ReportModel]): + """Factory for ReportModel.""" + + __model__ = ReportModel + + collection_type = "report" + private = False + + +class GTIReportDataFactory(ModelFactory[GTIReportData]): + """Factory for GTIReportData.""" + + __model__ = GTIReportData + + type = "report" + attributes = Use(ReportModelFactory.build) + links = Use(LinksFactory.build) + + +@pytest.fixture +def mock_organization(): + """Mock organization identity.""" + return Identity( + id=f"identity--{uuid4()}", + name="Test Organization", + identity_class="organization", + ) + + +@pytest.fixture +def mock_tlp_marking(): + """Mock TLP marking definition.""" + return MarkingDefinition( + id=f"marking-definition--{uuid4()}", + definition_type="statement", + definition={"statement": "Internal Use Only"}, + ) + + +@pytest.fixture +def report_with_analyst_comment(): + """Report with an analyst_comment field populated.""" + return GTIReportDataFactory.build( + attributes=ReportModelFactory.build( + name="News Analysis Report", + collection_type="report", + private=False, + report_type="News Analysis", + analyst_comment="This is an analyst comment with expert commentary.", + ) + ) + + +@pytest.fixture +def report_without_analyst_comment(): + """Report without an analyst_comment field.""" + return GTIReportDataFactory.build( + attributes=ReportModelFactory.build( + name="Standard Report", + collection_type="report", + private=False, + report_type="Threat Activity Report", + analyst_comment=None, + ) + ) + + +@pytest.fixture +def report_with_empty_analyst_comment(): + """Report with an empty analyst_comment field.""" + return GTIReportDataFactory.build( + attributes=ReportModelFactory.build( + name="Report with empty comment", + collection_type="report", + private=False, + analyst_comment="", + ) + ) + + +def _given_composite_mapper(report_data, organization, tlp_marking): + """Create a GTI report composite mapper instance.""" + return GTIReportToSTIXComposite( + report=report_data, organization=organization, tlp_marking=tlp_marking + ) + + +def _when_convert_to_stix(mapper): + """Convert GTI report to STIX via composite mapper.""" + return mapper.to_stix() + + +def _find_notes(stix_entities): + """Find all note objects in the STIX entity list.""" + return [e for e in stix_entities if hasattr(e, "type") and e.type == "note"] + + +def _find_report(stix_entities): + """Find the report object in the STIX entity list.""" + reports = [e for e in stix_entities if hasattr(e, "type") and e.type == "report"] + return reports[0] if reports else None + + +@pytest.mark.order(1) +def test_analyst_comment_creates_note( + report_with_analyst_comment, mock_organization, mock_tlp_marking +): + """Test that a Note is created when analyst_comment is present.""" + # GIVEN: A GTI report of type "News Analysis" with an analyst_comment field populated + mapper = _given_composite_mapper( + report_with_analyst_comment, mock_organization, mock_tlp_marking + ) + + # WHEN: Converting the report to STIX entities + result = _when_convert_to_stix(mapper) + + # THEN: A Note STIX object should be present in the output + notes = _find_notes(result) + assert len(notes) == 1 # noqa: S101 + + +@pytest.mark.order(1) +def test_analyst_comment_note_content( + report_with_analyst_comment, mock_organization, mock_tlp_marking +): + """Test that the Note content matches the analyst_comment value.""" + # GIVEN: A GTI report with a specific analyst_comment + mapper = _given_composite_mapper( + report_with_analyst_comment, mock_organization, mock_tlp_marking + ) + + # WHEN: Converting the report to STIX entities + result = _when_convert_to_stix(mapper) + + # THEN: The Note content should match the analyst_comment field + note = _find_notes(result)[0] + assert ( + note.content == "This is an analyst comment with expert commentary." + ) # noqa: S101 + + +@pytest.mark.order(1) +def test_analyst_comment_note_abstract( + report_with_analyst_comment, mock_organization, mock_tlp_marking +): + """Test that the Note abstract follows the expected naming convention.""" + # GIVEN: A GTI report named "News Analysis Report" with an analyst_comment + mapper = _given_composite_mapper( + report_with_analyst_comment, mock_organization, mock_tlp_marking + ) + + # WHEN: Converting the report to STIX entities + result = _when_convert_to_stix(mapper) + + # THEN: The Note abstract should follow the pattern: + # "Analyst Comment & News Analysis Rating - {report_name}" + note = _find_notes(result)[0] + assert ( + note.abstract == "Analyst Comment & News Analysis Rating - News Analysis Report" + ) # noqa: S101 + + +@pytest.mark.order(1) +def test_analyst_comment_note_references_report( + report_with_analyst_comment, mock_organization, mock_tlp_marking +): + """Test that the Note object_refs points to the parent Report.""" + # GIVEN: A GTI report with an analyst_comment + mapper = _given_composite_mapper( + report_with_analyst_comment, mock_organization, mock_tlp_marking + ) + + # WHEN: Converting the report to STIX entities + result = _when_convert_to_stix(mapper) + + # THEN: The Note's object_refs should contain the Report's ID + note = _find_notes(result)[0] + report = _find_report(result) + assert report is not None # noqa: S101 + assert report.id in note.object_refs # noqa: S101 + + +@pytest.mark.order(1) +def test_no_note_without_analyst_comment( + report_without_analyst_comment, mock_organization, mock_tlp_marking +): + """Test that no Note is created when analyst_comment is None.""" + # GIVEN: A GTI report without an analyst_comment field + mapper = _given_composite_mapper( + report_without_analyst_comment, mock_organization, mock_tlp_marking + ) + + # WHEN: Converting the report to STIX entities + result = _when_convert_to_stix(mapper) + + # THEN: No Note STIX object should be present in the output + notes = _find_notes(result) + assert len(notes) == 0 # noqa: S101 + + +@pytest.mark.order(1) +def test_no_note_with_empty_analyst_comment( + report_with_empty_analyst_comment, mock_organization, mock_tlp_marking +): + """Test that no Note is created when analyst_comment is an empty string.""" + # GIVEN: A GTI report with an empty analyst_comment field + mapper = _given_composite_mapper( + report_with_empty_analyst_comment, mock_organization, mock_tlp_marking + ) + + # WHEN: Converting the report to STIX entities + result = _when_convert_to_stix(mapper) + + # THEN: No Note STIX object should be present in the output + notes = _find_notes(result) + assert len(notes) == 0 # noqa: S101 + + +@pytest.mark.order(1) +def test_analyst_comment_note_has_deterministic_id( + report_with_analyst_comment, mock_organization, mock_tlp_marking +): + """Test that the Note has a deterministic ID (generated via pycti).""" + # GIVEN: A GTI report with an analyst_comment + mapper1 = _given_composite_mapper( + report_with_analyst_comment, mock_organization, mock_tlp_marking + ) + mapper2 = _given_composite_mapper( + report_with_analyst_comment, mock_organization, mock_tlp_marking + ) + + # WHEN: Converting the same report twice + result1 = _when_convert_to_stix(mapper1) + result2 = _when_convert_to_stix(mapper2) + + # THEN: Both Notes should have the same deterministic ID + note1 = _find_notes(result1)[0] + note2 = _find_notes(result2)[0] + assert note1.id == note2.id # noqa: S101 + assert note1.id.startswith("note--") # noqa: S101 diff --git a/external-import/google-ti-feeds/tests/custom/mappers/gti_threat_actors/test_gti_threat_actor_to_stix_composite_relationships.py b/external-import/google-ti-feeds/tests/custom/mappers/gti_threat_actors/test_gti_threat_actor_to_stix_composite_relationships.py new file mode 100644 index 00000000000..dc5ae652739 --- /dev/null +++ b/external-import/google-ti-feeds/tests/custom/mappers/gti_threat_actors/test_gti_threat_actor_to_stix_composite_relationships.py @@ -0,0 +1,249 @@ +"""Tests that GTIThreatActorToSTIXComposite relationships have no template description.""" + +from uuid import uuid4 + +import pytest +from connector.src.custom.mappers.gti_threat_actors.gti_threat_actor_to_stix_composite import ( + GTIThreatActorToSTIXComposite, +) +from connector.src.custom.models.gti.gti_threat_actor_model import ( + GTIThreatActorData, + SourceRegion, + TargetedIndustry, + TargetedRegion, + ThreatActorModel, +) +from polyfactory.factories.pydantic_factory import ModelFactory +from polyfactory.fields import Use +from stix2.v21 import Identity, MarkingDefinition # type: ignore + +# --------------------------------------------------------------------------- +# Factories +# --------------------------------------------------------------------------- + + +class SourceRegionFactory(ModelFactory[SourceRegion]): + """Factory for SourceRegion model.""" + + __model__ = SourceRegion + + +class TargetedRegionFactory(ModelFactory[TargetedRegion]): + """Factory for TargetedRegion model.""" + + __model__ = TargetedRegion + + +class TargetedIndustryFactory(ModelFactory[TargetedIndustry]): + """Factory for TargetedIndustry model.""" + + __model__ = TargetedIndustry + + +class ThreatActorModelFactory(ModelFactory[ThreatActorModel]): + """Factory for ThreatActorModel.""" + + __model__ = ThreatActorModel + + +class GTIThreatActorDataFactory(ModelFactory[GTIThreatActorData]): + """Factory for GTIThreatActorData.""" + + __model__ = GTIThreatActorData + type = "threat_actor" + attributes = Use(ThreatActorModelFactory.build) + + +# --------------------------------------------------------------------------- +# Fixtures +# --------------------------------------------------------------------------- + + +@pytest.fixture +def mock_organization(): + """Mock organization Identity object.""" + return Identity( # pylint: disable=W9101 + name="Test Organization", + identity_class="organization", + ) + + +@pytest.fixture +def mock_tlp_marking(): + """Mock TLP marking definition object.""" + return MarkingDefinition( + id=f"marking-definition--{uuid4()}", + definition_type="statement", + definition={"statement": "Internal Use Only"}, + ) + + +@pytest.fixture +def threat_actor_with_regions_and_sectors() -> GTIThreatActorData: + """Threat actor with one targeted region, one source region, and one sector.""" + return GTIThreatActorDataFactory.build( + attributes=ThreatActorModelFactory.build( + name="APT-TEST", + creation_date=1672531200, + last_modification_date=1672617600, + targeted_regions_hierarchy=[ + TargetedRegionFactory.build( + country="United States", + country_iso2="US", + region="North America", + first_seen=1672531200, + last_seen=1685577600, + ), + ], + source_regions_hierarchy=[ + SourceRegionFactory.build( + country="Russia", + country_iso2="RU", + region="Eastern Europe", + first_seen=1654041600, + last_seen=1672531200, + ), + ], + targeted_industries_tree=[ + TargetedIndustryFactory.build( + industry="Finance", + industry_group="Financial Services", + first_seen=1672531200, + last_seen=1685577600, + ), + ], + ), + ) + + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + + +def _given_composite_mapper( + threat_actor: GTIThreatActorData, + organization: Identity, + tlp_marking: MarkingDefinition, +) -> GTIThreatActorToSTIXComposite: + return GTIThreatActorToSTIXComposite( + threat_actor=threat_actor, + organization=organization, + tlp_marking=tlp_marking, + ) + + +def _when_convert_to_stix(mapper: GTIThreatActorToSTIXComposite) -> list: + return mapper.to_stix() + + +def _then_relationship_has_no_description(relationship) -> None: # noqa: ANN001 + assert relationship.relationship_type is not None # noqa: S101 + assert relationship.description is None # noqa: S101 + + +# --------------------------------------------------------------------------- +# Tests +# --------------------------------------------------------------------------- + + +@pytest.mark.order(1) +def test_targets_location_relationship_has_no_description( + threat_actor_with_regions_and_sectors, + mock_organization, + mock_tlp_marking, +): + """The 'targets' (location) relationship must have description=None.""" + # GIVEN + mapper = _given_composite_mapper( + threat_actor_with_regions_and_sectors, + mock_organization, + mock_tlp_marking, + ) + + # WHEN + stix_objects = _when_convert_to_stix(mapper) + + # THEN + targets_location_rels = [ + obj + for obj in stix_objects + if hasattr(obj, "relationship_type") + and obj.relationship_type == "targets" + and any( + loc.name == "United States" + for loc in stix_objects + if hasattr(loc, "name") + and hasattr(loc, "country") + and obj.target_ref == loc.id + ) + ] + assert len(targets_location_rels) >= 1 # noqa: S101 + for rel in targets_location_rels: + _then_relationship_has_no_description(rel) + + +@pytest.mark.order(1) +def test_originates_from_location_relationship_has_no_description( + threat_actor_with_regions_and_sectors, + mock_organization, + mock_tlp_marking, +): + """The 'originates-from' (location) relationship must have description=None.""" + # GIVEN + mapper = _given_composite_mapper( + threat_actor_with_regions_and_sectors, + mock_organization, + mock_tlp_marking, + ) + + # WHEN + stix_objects = _when_convert_to_stix(mapper) + + # THEN + originates_rels = [ + obj + for obj in stix_objects + if hasattr(obj, "relationship_type") + and obj.relationship_type == "originates-from" + ] + assert len(originates_rels) >= 1 # noqa: S101 + for rel in originates_rels: + _then_relationship_has_no_description(rel) + + +@pytest.mark.order(1) +def test_targets_sector_relationship_has_no_description( + threat_actor_with_regions_and_sectors, + mock_organization, + mock_tlp_marking, +): + """The 'targets' (sector/identity) relationship must have description=None.""" + # GIVEN + mapper = _given_composite_mapper( + threat_actor_with_regions_and_sectors, + mock_organization, + mock_tlp_marking, + ) + + # WHEN + stix_objects = _when_convert_to_stix(mapper) + + # THEN — sectors are Identity objects; their relationships are "targets" pointing at identity ids + locations = [ + obj + for obj in stix_objects + if hasattr(obj, "country") or (hasattr(obj, "type") and obj.type == "location") + ] + location_ids = {loc.id for loc in locations} + + targets_sector_rels = [ + obj + for obj in stix_objects + if hasattr(obj, "relationship_type") + and obj.relationship_type == "targets" + and obj.target_ref not in location_ids + ] + assert len(targets_sector_rels) >= 1 # noqa: S101 + for rel in targets_sector_rels: + _then_relationship_has_no_description(rel) diff --git a/external-import/google-ti-feeds/tests/custom/mappers/gti_vulnerabilties/test_gti_vulnerability_to_stix_composite_relationships.py b/external-import/google-ti-feeds/tests/custom/mappers/gti_vulnerabilties/test_gti_vulnerability_to_stix_composite_relationships.py new file mode 100644 index 00000000000..33f2ad3883a --- /dev/null +++ b/external-import/google-ti-feeds/tests/custom/mappers/gti_vulnerabilties/test_gti_vulnerability_to_stix_composite_relationships.py @@ -0,0 +1,158 @@ +"""Tests that GTIVulnerabilityToSTIXComposite 'has' relationships have no template description.""" + +from uuid import uuid4 + +import pytest +from connector.src.custom.mappers.gti_vulnerabilities.gti_vulnerability_to_stix_composite import ( + GTIVulnerabilityToSTIXComposite, +) +from connector.src.custom.models.gti.gti_vulnerability_model import ( + CpeObject, + CpeRange, + GTIVulnerabilityData, + VulnerabilityModel, +) +from polyfactory.factories.pydantic_factory import ModelFactory +from polyfactory.fields import Use +from stix2.v21 import Identity, MarkingDefinition # type: ignore + +# --------------------------------------------------------------------------- +# Factories +# --------------------------------------------------------------------------- + + +class CpeObjectFactory(ModelFactory[CpeObject]): + """Factory for CpeObject model.""" + + __model__ = CpeObject + + +class CpeRangeFactory(ModelFactory[CpeRange]): + """Factory for CpeRange model.""" + + __model__ = CpeRange + + +class VulnerabilityModelFactory(ModelFactory[VulnerabilityModel]): + """Factory for VulnerabilityModel.""" + + __model__ = VulnerabilityModel + + sources = Use(list) + + +class GTIVulnerabilityDataFactory(ModelFactory[GTIVulnerabilityData]): + """Factory for GTIVulnerabilityData.""" + + __model__ = GTIVulnerabilityData + type = "vulnerability" + attributes = Use(VulnerabilityModelFactory.build) + + +# --------------------------------------------------------------------------- +# Fixtures +# --------------------------------------------------------------------------- + + +@pytest.fixture +def mock_organization(): + """Mock organization Identity object.""" + return Identity( # pylint: disable=W9101 + name="Test Organization", + identity_class="organization", + ) + + +@pytest.fixture +def mock_tlp_marking(): + """Mock TLP marking definition object.""" + return MarkingDefinition( + id=f"marking-definition--{uuid4()}", + definition_type="statement", + definition={"statement": "Internal Use Only"}, + ) + + +@pytest.fixture +def vulnerability_with_software() -> GTIVulnerabilityData: + """Vulnerability with CPE data that produces at least one software object.""" + return GTIVulnerabilityDataFactory.build( + attributes=VulnerabilityModelFactory.build( + name="CVE-2023-99999", + creation_date=1672531200, + last_modification_date=1672617600, + cpes=[ + CpeRangeFactory.build( + start_cpe=CpeObjectFactory.build( + product="nginx", + vendor="nginx_inc", + version="1.25.0", + uri="cpe:2.3:a:nginx_inc:nginx:1.25.0:*:*:*:*:*:*:*", + ), + end_cpe=None, + start_rel=None, + end_rel=None, + ), + ], + ), + ) + + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + + +def _given_composite_mapper( + vulnerability: GTIVulnerabilityData, + organization: Identity, + tlp_marking: MarkingDefinition, +) -> GTIVulnerabilityToSTIXComposite: + return GTIVulnerabilityToSTIXComposite( + vulnerability=vulnerability, + organization=organization, + tlp_marking=tlp_marking, + get_related_softwares=True, + ) + + +def _when_convert_to_stix(mapper: GTIVulnerabilityToSTIXComposite) -> list: + return mapper.to_stix() + + +def _then_relationship_has_no_description(relationship) -> None: # noqa: ANN001 + assert relationship.relationship_type == "has" # noqa: S101 + assert relationship.description is None # noqa: S101 + + +# --------------------------------------------------------------------------- +# Tests +# --------------------------------------------------------------------------- + + +@pytest.mark.order(1) +def test_has_relationship_has_no_description( + vulnerability_with_software, + mock_organization, + mock_tlp_marking, +): + """The 'has' (software → vulnerability) relationship must have description=None.""" + # GIVEN + mapper = _given_composite_mapper( + vulnerability_with_software, + mock_organization, + mock_tlp_marking, + ) + + # WHEN + stix_objects = _when_convert_to_stix(mapper) + + # THEN + has_rels = [ + obj + for obj in stix_objects + if hasattr(obj, "relationship_type") and obj.relationship_type == "has" + ] + assert len(has_rels) >= 1 # noqa: S101 + for rel in has_rels: + _then_relationship_has_no_description(rel) diff --git a/external-import/google-ti-feeds/tests/custom/mappers/gti_vulnerabilties/test_gti_vulnerability_to_stix_note.py b/external-import/google-ti-feeds/tests/custom/mappers/gti_vulnerabilties/test_gti_vulnerability_to_stix_note.py index 0474668f417..6c1e9ecf09c 100644 --- a/external-import/google-ti-feeds/tests/custom/mappers/gti_vulnerabilties/test_gti_vulnerability_to_stix_note.py +++ b/external-import/google-ti-feeds/tests/custom/mappers/gti_vulnerabilties/test_gti_vulnerability_to_stix_note.py @@ -64,6 +64,8 @@ def vulnerability_with_workarounds() -> GTIVulnerabilityData: ], creation_date=1672531200, # 2023-01-01 last_modification_date=1672617600, # 2023-01-02 + executive_summary=None, + analysis=None, ), ) @@ -80,6 +82,8 @@ def vulnerability_with_single_workaround() -> GTIVulnerabilityData: ], creation_date=1672531200, last_modification_date=1672617600, + executive_summary=None, + analysis=None, ), ) @@ -88,7 +92,9 @@ def vulnerability_with_single_workaround() -> GTIVulnerabilityData: def vulnerability_without_workarounds() -> GTIVulnerabilityData: """Fixture for GTI vulnerability without workaround data.""" return GTIVulnerabilityDataFactory.build( - attributes=VulnerabilityModelFactory.build(workarounds=None) + attributes=VulnerabilityModelFactory.build( + workarounds=None, executive_summary=None, analysis=None + ) ) @@ -96,7 +102,9 @@ def vulnerability_without_workarounds() -> GTIVulnerabilityData: def vulnerability_with_empty_workarounds() -> GTIVulnerabilityData: """Fixture for GTI vulnerability with empty workarounds list.""" return GTIVulnerabilityDataFactory.build( - attributes=VulnerabilityModelFactory.build(workarounds=[]) + attributes=VulnerabilityModelFactory.build( + workarounds=[], executive_summary=None, analysis=None + ) ) @@ -116,7 +124,9 @@ def vulnerability_with_empty_workarounds_strings() -> GTIVulnerabilityData: "", " ", "Another valid workaround", - ] + ], + executive_summary=None, + analysis=None, ) ) @@ -132,6 +142,8 @@ def vulnerability_with_long_workaround() -> GTIVulnerabilityData: workarounds=[long_workaround], creation_date=1672531200, last_modification_date=1672617600, + executive_summary=None, + analysis=None, ), ) @@ -149,6 +161,8 @@ def vulnerability_with_unicode_workarounds() -> GTIVulnerabilityData: ], creation_date=1672531200, last_modification_date=1672617600, + executive_summary=None, + analysis=None, ), ) @@ -163,6 +177,8 @@ def vulnerability_with_invalid_timestamps() -> GTIVulnerabilityData: workarounds=["Apply security patch"], creation_date=-1, # Invalid timestamp last_modification_date=-1, # Invalid timestamp + executive_summary=None, + analysis=None, ), ) diff --git a/external-import/google-ti-feeds/tests/custom/mappers/gti_vulnerabilties/test_gti_vulnerability_to_stix_vulnerability.py b/external-import/google-ti-feeds/tests/custom/mappers/gti_vulnerabilties/test_gti_vulnerability_to_stix_vulnerability.py index a0aeb60bafe..71e64f783f7 100644 --- a/external-import/google-ti-feeds/tests/custom/mappers/gti_vulnerabilties/test_gti_vulnerability_to_stix_vulnerability.py +++ b/external-import/google-ti-feeds/tests/custom/mappers/gti_vulnerabilties/test_gti_vulnerability_to_stix_vulnerability.py @@ -88,6 +88,8 @@ class VulnerabilityModelFactory(ModelFactory[VulnerabilityModel]): __model__ = VulnerabilityModel + sources = Use(list) + class GTIVulnerabilityDataFactory(ModelFactory[GTIVulnerabilityData]): """Factory for GTIVulnerabilityData.""" diff --git a/external-import/google-ti-feeds/tests/custom/test_orchestrator.py b/external-import/google-ti-feeds/tests/custom/test_orchestrator.py index ad9a8e93bc3..c89eb4f0066 100644 --- a/external-import/google-ti-feeds/tests/custom/test_orchestrator.py +++ b/external-import/google-ti-feeds/tests/custom/test_orchestrator.py @@ -128,23 +128,40 @@ async def _fake_perform_single_attempt(self) -> Any: # type: ignore "GTICampaignData": "campaigns", } - if "relationship" in self.api_req.url: - response_key = "relationships" - elif ( - "/collections" in self.api_req.url - and hasattr(self.api_req, "model") - and self.api_req.model - ): - # Check if this is a main collection fetch or a specific collection entity fetch - url_parts = self.api_req.url.split("/") - if len(url_parts) > 4 and url_parts[4]: # /collections/specific-id - # This is a specific collection entity fetch (subentity) + related_collection_keys = { + "malware_families", + "threat_actors", + "attack_techniques", + "vulnerabilities", + "campaigns", + "domains", + "files", + "urls", + "ip_addresses", + } + + if "/collections/" in self.api_req.url: + url_parts = [part for part in self.api_req.url.split("/") if part] + endpoint_tail = url_parts[-1].split("?")[0] if url_parts else "" + + if endpoint_tail in related_collection_keys: + response_key = endpoint_tail + elif ( + hasattr(self.api_req, "model") + and self.api_req.model + and endpoint_tail != "collections" + ): + # This is a specific collection entity fetch (legacy subentity route) model_name = self.api_req.model.__name__ response_key = model_mapping.get(model_name, "reports") - else: + elif hasattr(self.api_req, "model") and self.api_req.model: # This is a main collection fetch model_name = self.api_req.model.__name__ response_key = model_mapping.get(model_name, "main_reports") + else: + response_key = "reports" + elif "relationship" in self.api_req.url: + response_key = "relationships" else: # Other subentity fetches model_name = ( @@ -203,33 +220,23 @@ def expected_report_log_messages() -> list[str]: "Fetched 1 ip_addresses relationships from API - {'prefix': '[BaseFetcher]'}", "Found relationships - {'prefix': '[OrchestratorReport]', 'current': 1, 'total': 1, 'relationships': 'malware_families: 1, threat_actors: 1, attack_techniques: 1, vulnerabilities: 1, campaigns: 1, domains: 1, files: 1, urls: 1, ip_addresses: 1'}", "Using ID-only approach for attack techniques (quota optimization) - {'prefix': '[OrchestratorReport]', 'attack_technique_count': 1}", - "Fetching details for subentities - {'prefix': '[FetcherShared]', 'total_to_fetch': 8}", - "Fetched entities - {'prefix': '[GenericFetcher]', 'count': 1, 'entity_type': 'malware families'}", - "Fetched entities - {'prefix': '[GenericFetcher]', 'count': 1, 'entity_type': 'threat actors'}", - "Fetched entities - {'prefix': '[GenericFetcher]', 'count': 1, 'entity_type': 'vulnerabilities'}", - "Fetched entities - {'prefix': '[GenericFetcher]', 'count': 1, 'entity_type': 'campaigns'}", - "Fetched entities - {'prefix': '[GenericFetcher]', 'count': 1, 'entity_type': 'domains'}", - "Fetched entities - {'prefix': '[GenericFetcher]', 'count': 1, 'entity_type': 'files'}", - "Fetched entities - {'prefix': '[GenericFetcher]', 'count': 1, 'entity_type': 'URLs'}", - "Fetched entities - {'prefix': '[GenericFetcher]', 'count': 1, 'entity_type': 'IP addresses'}", - "Fetched details - {'prefix': '[FetcherShared]', 'summary': 'malware_families: 1, threat_actors: 1, vulnerabilities: 1, campaigns: 1, domains: 1, files: 1, urls: 1, ip_addresses: 1'}", "Converted entities to STIX format - {'prefix': '[GenericConverter]', 'count': 33, 'entity_type': 'malware families'}", "Converted entities to STIX format - {'prefix': '[GenericConverter]', 'count': 53, 'entity_type': 'threat actors'}", - "Converted entities to STIX format - {'prefix': '[GenericConverter]', 'count': 50, 'entity_type': 'vulnerabilities'}", + "Converted entities to STIX format - {'prefix': '[GenericConverter]', 'count': 52, 'entity_type': 'vulnerabilities'}", "Converted entities to STIX format - {'prefix': '[GenericConverter]', 'count': 31, 'entity_type': 'Campaigns'}", "Converted entities to STIX format - {'prefix': '[GenericConverter]', 'count': 3, 'entity_type': 'domains'}", "Converted entities to STIX format - {'prefix': '[GenericConverter]', 'count': 3, 'entity_type': 'files'}", "Converted entities to STIX format - {'prefix': '[GenericConverter]', 'count': 3, 'entity_type': 'URLs'}", "Converted entities to STIX format - {'prefix': '[GenericConverter]', 'count': 3, 'entity_type': 'IP addresses'}", "Converted entities to STIX format - {'prefix': '[GenericConverter]', 'count': 1, 'entity_type': 'attack techniques'}", - "Converted to STIX entities - {'prefix': '[OrchestratorReport]', 'current': 1, 'total': 1, 'entities_count': 195, 'entities_summary': 'identity: 48, report: 1, malware: 1, relationship: 85, location: 23, intrusion-set: 1, vulnerability: 1, software: 24, note: 1, campaign: 1, domain-name: 1, indicator: 4, file: 1, url: 1, ipv4-addr: 1, attack-pattern: 1'}", - "Adding items to batch processor - {'prefix': '[GenericBatchProcessor]', 'count': 195, 'display_name': 'STIX objects'}", - "Successfully added items - {'prefix': '[GenericBatchProcessor]', 'added_count': 195, 'total_count': 195, 'display_name': 'STIX objects'}", - "Flushing remaining items - {'prefix': '[GenericBatchProcessor]', 'count': 197, 'display_name': 'STIX objects'}", - "Processing batch - {'prefix': '[GenericBatchProcessor]', 'batch_num': 1, 'batch_size': 197, 'display_name': 'STIX objects', 'total_processed': 197}", + "Converted to STIX entities - {'prefix': '[OrchestratorReport]', 'current': 1, 'total': 1, 'entities_count': 197, 'entities_summary': 'identity: 48, report: 1, malware: 1, relationship: 85, location: 23, intrusion-set: 1, vulnerability: 1, software: 24, note: 3, campaign: 1, domain-name: 1, indicator: 4, file: 1, url: 1, ipv4-addr: 1, attack-pattern: 1'}", + "Adding items to batch processor - {'prefix': '[GenericBatchProcessor]', 'count': 197, 'display_name': 'STIX objects'}", + "Successfully added items - {'prefix': '[GenericBatchProcessor]', 'added_count': 197, 'total_count': 197, 'display_name': 'STIX objects'}", + "Flushing remaining items - {'prefix': '[GenericBatchProcessor]', 'count': 199, 'display_name': 'STIX objects'}", + "Processing batch - {'prefix': '[GenericBatchProcessor]', 'batch_num': 1, 'batch_size': 199, 'display_name': 'STIX objects', 'total_processed': 199}", "Sent batch to OpenCTI - {'prefix': '[GenericBatchProcessor]', 'batch_num': 1}", - "Batch completed successfully - {'prefix': '[GenericBatchProcessor]', 'work_id': None, 'total_count': 197, 'type_summary': 'identity: 49, marking-definition: 1, report: 1, malware: 1, relationship: 85, location: 23, intrusion-set: 1, vulnerability: 1, software: 24, note: 1, campaign: 1, domain-name: 1, indicator: 4, file: 1, url: 1, ipv4-addr: 1, attack-pattern: 1'}", - "Successfully processed batch #1. Total STIX objects sent: 197 - {'prefix': '[GenericBatchProcessor]', 'batch_num': 1, 'total_items_sent': 197}", + "Batch completed successfully - {'prefix': '[GenericBatchProcessor]', 'work_id': None, 'total_count': 199, 'type_summary': 'identity: 49, marking-definition: 1, report: 1, malware: 1, relationship: 85, location: 23, intrusion-set: 1, vulnerability: 1, software: 24, note: 3, campaign: 1, domain-name: 1, indicator: 4, file: 1, url: 1, ipv4-addr: 1, attack-pattern: 1'}", + "Successfully processed batch #1. Total STIX objects sent: 199 - {'prefix': '[GenericBatchProcessor]', 'batch_num': 1, 'total_items_sent': 199}", "State update: Setting next_cursor_date - {'prefix': '[GenericBatchProcessor]', 'latest_date': '2024-07-11T20:05:01+00:00'}", ] @@ -244,21 +251,17 @@ def expected_threat_actor_log_messages() -> list[str]: "Fetched 1 vulnerabilities relationships from API - {'prefix': '[BaseFetcher]'}", "Found relationships - {'prefix': '[OrchestratorThreatActor]', 'current': 1, 'total': 1, 'relationships': 'malware_families: 1, attack_techniques: 1, vulnerabilities: 1'}", "Using ID-only approach for attack techniques (quota optimization) - {'prefix': '[OrchestratorThreatActor]', 'attack_technique_count': 1}", - "Fetching details for subentities - {'prefix': '[FetcherShared]', 'total_to_fetch': 2}", - "Fetched entities - {'prefix': '[GenericFetcher]', 'count': 1, 'entity_type': 'malware families'}", - "Fetched entities - {'prefix': '[GenericFetcher]', 'count': 1, 'entity_type': 'vulnerabilities'}", - "Fetched details - {'prefix': '[FetcherShared]', 'summary': 'malware_families: 1, vulnerabilities: 1'}", "Converted entities to STIX format - {'prefix': '[GenericConverter]', 'count': 34, 'entity_type': 'malware families'}", - "Converted entities to STIX format - {'prefix': '[GenericConverter]', 'count': 51, 'entity_type': 'vulnerabilities'}", + "Converted entities to STIX format - {'prefix': '[GenericConverter]', 'count': 53, 'entity_type': 'vulnerabilities'}", "Converted entities to STIX format - {'prefix': '[GenericConverter]', 'count': 2, 'entity_type': 'attack techniques'}", - "Converted to STIX entities - {'prefix': '[OrchestratorThreatActor]', 'current': 1, 'total': 1, 'entities_count': 140, 'entities_summary': 'location: 17, identity: 25, intrusion-set: 1, relationship: 69, malware: 1, vulnerability: 1, software: 24, note: 1, attack-pattern: 1'}", - "Adding items to batch processor - {'prefix': '[GenericBatchProcessor]', 'count': 140, 'display_name': 'STIX objects'}", - "Successfully added items - {'prefix': '[GenericBatchProcessor]', 'added_count': 140, 'total_count': 140, 'display_name': 'STIX objects'}", - "Flushing remaining items - {'prefix': '[GenericBatchProcessor]', 'count': 142, 'display_name': 'STIX objects'}", - "Processing batch - {'prefix': '[GenericBatchProcessor]', 'batch_num': 1, 'batch_size': 142, 'display_name': 'STIX objects', 'total_processed': 142}", + "Converted to STIX entities - {'prefix': '[OrchestratorThreatActor]', 'current': 1, 'total': 1, 'entities_count': 142, 'entities_summary': 'location: 17, identity: 25, intrusion-set: 1, relationship: 69, malware: 1, vulnerability: 1, software: 24, note: 3, attack-pattern: 1'}", + "Adding items to batch processor - {'prefix': '[GenericBatchProcessor]', 'count': 142, 'display_name': 'STIX objects'}", + "Successfully added items - {'prefix': '[GenericBatchProcessor]', 'added_count': 142, 'total_count': 142, 'display_name': 'STIX objects'}", + "Flushing remaining items - {'prefix': '[GenericBatchProcessor]', 'count': 144, 'display_name': 'STIX objects'}", + "Processing batch - {'prefix': '[GenericBatchProcessor]', 'batch_num': 1, 'batch_size': 144, 'display_name': 'STIX objects', 'total_processed': 144}", "Sent batch to OpenCTI - {'prefix': '[GenericBatchProcessor]', 'batch_num': 1}", - "Batch completed successfully - {'prefix': '[GenericBatchProcessor]', 'work_id': None, 'total_count': 142, 'type_summary': 'identity: 26, marking-definition: 1, location: 17, intrusion-set: 1, relationship: 69, malware: 1, vulnerability: 1, software: 24, note: 1, attack-pattern: 1'}", - "Successfully processed batch #1. Total STIX objects sent: 142 - {'prefix': '[GenericBatchProcessor]', 'batch_num': 1, 'total_items_sent': 142}", + "Batch completed successfully - {'prefix': '[GenericBatchProcessor]', 'work_id': None, 'total_count': 144, 'type_summary': 'identity: 26, marking-definition: 1, location: 17, intrusion-set: 1, relationship: 69, malware: 1, vulnerability: 1, software: 24, note: 3, attack-pattern: 1'}", + "Successfully processed batch #1. Total STIX objects sent: 144 - {'prefix': '[GenericBatchProcessor]', 'batch_num': 1, 'total_items_sent': 144}", "State update: Setting next_cursor_date - {'prefix': '[GenericBatchProcessor]', 'latest_date': '2025-06-03T03:03:32+00:00'}", ] @@ -273,21 +276,17 @@ def expected_malware_family_log_messages() -> list[str]: "Fetched 1 vulnerabilities relationships from API - {'prefix': '[BaseFetcher]'}", "Found relationships - {'prefix': '[OrchestratorMalware]', 'current': 1, 'total': 1, 'relationships': 'threat_actors: 1, attack_techniques: 1, vulnerabilities: 1'}", "Using ID-only approach for attack techniques (quota optimization) - {'prefix': '[OrchestratorMalware]', 'attack_technique_count': 1}", - "Fetching details for subentities - {'prefix': '[FetcherShared]', 'total_to_fetch': 2}", - "Fetched entities - {'prefix': '[GenericFetcher]', 'count': 1, 'entity_type': 'threat actors'}", - "Fetched entities - {'prefix': '[GenericFetcher]', 'count': 1, 'entity_type': 'vulnerabilities'}", - "Fetched details - {'prefix': '[FetcherShared]', 'summary': 'threat_actors: 1, vulnerabilities: 1'}", "Converted entities to STIX format - {'prefix': '[GenericConverter]', 'count': 54, 'entity_type': 'threat actors'}", - "Converted entities to STIX format - {'prefix': '[GenericConverter]', 'count': 51, 'entity_type': 'vulnerabilities'}", + "Converted entities to STIX format - {'prefix': '[GenericConverter]', 'count': 53, 'entity_type': 'vulnerabilities'}", "Converted entities to STIX format - {'prefix': '[GenericConverter]', 'count': 2, 'entity_type': 'attack techniques'}", - "Converted to STIX entities - {'prefix': '[OrchestratorMalware]', 'current': 1, 'total': 1, 'entities_count': 140, 'entities_summary': 'identity: 25, malware: 1, relationship: 69, location: 17, intrusion-set: 1, vulnerability: 1, software: 24, note: 1, attack-pattern: 1'}", - "Adding items to batch processor - {'prefix': '[GenericBatchProcessor]', 'count': 140, 'display_name': 'STIX objects'}", - "Successfully added items - {'prefix': '[GenericBatchProcessor]', 'added_count': 140, 'total_count': 140, 'display_name': 'STIX objects'}", - "Flushing remaining items - {'prefix': '[GenericBatchProcessor]', 'count': 142, 'display_name': 'STIX objects'}", - "Processing batch - {'prefix': '[GenericBatchProcessor]', 'batch_num': 1, 'batch_size': 142, 'display_name': 'STIX objects', 'total_processed': 142}", + "Converted to STIX entities - {'prefix': '[OrchestratorMalware]', 'current': 1, 'total': 1, 'entities_count': 142, 'entities_summary': 'identity: 25, malware: 1, relationship: 69, location: 17, intrusion-set: 1, vulnerability: 1, software: 24, note: 3, attack-pattern: 1'}", + "Adding items to batch processor - {'prefix': '[GenericBatchProcessor]', 'count': 142, 'display_name': 'STIX objects'}", + "Successfully added items - {'prefix': '[GenericBatchProcessor]', 'added_count': 142, 'total_count': 142, 'display_name': 'STIX objects'}", + "Flushing remaining items - {'prefix': '[GenericBatchProcessor]', 'count': 144, 'display_name': 'STIX objects'}", + "Processing batch - {'prefix': '[GenericBatchProcessor]', 'batch_num': 1, 'batch_size': 144, 'display_name': 'STIX objects', 'total_processed': 144}", "Sent batch to OpenCTI - {'prefix': '[GenericBatchProcessor]', 'batch_num': 1}", - "Batch completed successfully - {'prefix': '[GenericBatchProcessor]', 'work_id': None, 'total_count': 142, 'type_summary': 'identity: 26, marking-definition: 1, malware: 1, relationship: 69, location: 17, intrusion-set: 1, vulnerability: 1, software: 24, note: 1, attack-pattern: 1'}", - "Successfully processed batch #1. Total STIX objects sent: 142 - {'prefix': '[GenericBatchProcessor]', 'batch_num': 1, 'total_items_sent': 142}", + "Batch completed successfully - {'prefix': '[GenericBatchProcessor]', 'work_id': None, 'total_count': 144, 'type_summary': 'identity: 26, marking-definition: 1, malware: 1, relationship: 69, location: 17, intrusion-set: 1, vulnerability: 1, software: 24, note: 3, attack-pattern: 1'}", + "Successfully processed batch #1. Total STIX objects sent: 144 - {'prefix': '[GenericBatchProcessor]', 'batch_num': 1, 'total_items_sent': 144}", "State update: Setting next_cursor_date - {'prefix': '[GenericBatchProcessor]', 'latest_date': '2025-05-09T17:11:12+00:00'}", ] @@ -302,21 +301,17 @@ def expected_vulnerability_log_messages_no_software() -> list[str]: "Fetched 1 threat_actors relationships from API - {'prefix': '[BaseFetcher]'}", "Found relationships - {'prefix': '[OrchestratorVulnerability]', 'current': 1, 'total': 1, 'relationships': 'malware_families: 1, attack_techniques: 1, threat_actors: 1'}", "Using ID-only approach for attack techniques (quota optimization) - {'prefix': '[OrchestratorVulnerability]', 'attack_technique_count': 1}", - "Fetching details for subentities - {'prefix': '[FetcherShared]', 'total_to_fetch': 2}", - "Fetched entities - {'prefix': '[GenericFetcher]', 'count': 1, 'entity_type': 'malware families'}", - "Fetched entities - {'prefix': '[GenericFetcher]', 'count': 1, 'entity_type': 'threat actors'}", - "Fetched details - {'prefix': '[FetcherShared]', 'summary': 'malware_families: 1, threat_actors: 1'}", "Converted entities to STIX format - {'prefix': '[GenericConverter]', 'count': 34, 'entity_type': 'malware families'}", "Converted entities to STIX format - {'prefix': '[GenericConverter]', 'count': 54, 'entity_type': 'threat actors'}", "Converted entities to STIX format - {'prefix': '[GenericConverter]', 'count': 2, 'entity_type': 'attack techniques'}", - "Converted to STIX entities - {'prefix': '[OrchestratorVulnerability]', 'current': 1, 'total': 1, 'entities_count': 92, 'entities_summary': 'vulnerability: 1, note: 1, identity: 25, malware: 1, relationship: 45, location: 17, intrusion-set: 1, attack-pattern: 1'}", - "Adding items to batch processor - {'prefix': '[GenericBatchProcessor]', 'count': 92, 'display_name': 'STIX objects'}", - "Successfully added items - {'prefix': '[GenericBatchProcessor]', 'added_count': 92, 'total_count': 92, 'display_name': 'STIX objects'}", - "Flushing remaining items - {'prefix': '[GenericBatchProcessor]', 'count': 94, 'display_name': 'STIX objects'}", - "Processing batch - {'prefix': '[GenericBatchProcessor]', 'batch_num': 1, 'batch_size': 94, 'display_name': 'STIX objects', 'total_processed': 94}", + "Converted to STIX entities - {'prefix': '[OrchestratorVulnerability]', 'current': 1, 'total': 1, 'entities_count': 94, 'entities_summary': 'vulnerability: 1, note: 3, identity: 25, malware: 1, relationship: 45, location: 17, intrusion-set: 1, attack-pattern: 1'}", + "Adding items to batch processor - {'prefix': '[GenericBatchProcessor]', 'count': 94, 'display_name': 'STIX objects'}", + "Successfully added items - {'prefix': '[GenericBatchProcessor]', 'added_count': 94, 'total_count': 94, 'display_name': 'STIX objects'}", + "Flushing remaining items - {'prefix': '[GenericBatchProcessor]', 'count': 96, 'display_name': 'STIX objects'}", + "Processing batch - {'prefix': '[GenericBatchProcessor]', 'batch_num': 1, 'batch_size': 96, 'display_name': 'STIX objects', 'total_processed': 96}", "Sent batch to OpenCTI - {'prefix': '[GenericBatchProcessor]', 'batch_num': 1}", - "Batch completed successfully - {'prefix': '[GenericBatchProcessor]', 'work_id': None, 'total_count': 94, 'type_summary': 'identity: 26, marking-definition: 1, vulnerability: 1, note: 1, malware: 1, relationship: 45, location: 17, intrusion-set: 1, attack-pattern: 1'}", - "Successfully processed batch #1. Total STIX objects sent: 94 - {'prefix': '[GenericBatchProcessor]', 'batch_num': 1, 'total_items_sent': 94}", + "Batch completed successfully - {'prefix': '[GenericBatchProcessor]', 'work_id': None, 'total_count': 96, 'type_summary': 'identity: 26, marking-definition: 1, vulnerability: 1, note: 3, malware: 1, relationship: 45, location: 17, intrusion-set: 1, attack-pattern: 1'}", + "Successfully processed batch #1. Total STIX objects sent: 96 - {'prefix': '[GenericBatchProcessor]', 'batch_num': 1, 'total_items_sent': 96}", "State update: Setting next_cursor_date - {'prefix': '[GenericBatchProcessor]', 'latest_date': '2025-06-25T08:22:55+00:00'}", ] @@ -331,21 +326,17 @@ def expected_vulnerability_log_messages() -> list[str]: "Fetched 1 threat_actors relationships from API - {'prefix': '[BaseFetcher]'}", "Found relationships - {'prefix': '[OrchestratorVulnerability]', 'current': 1, 'total': 1, 'relationships': 'malware_families: 1, attack_techniques: 1, threat_actors: 1'}", "Using ID-only approach for attack techniques (quota optimization) - {'prefix': '[OrchestratorVulnerability]', 'attack_technique_count': 1}", - "Fetching details for subentities - {'prefix': '[FetcherShared]', 'total_to_fetch': 2}", - "Fetched entities - {'prefix': '[GenericFetcher]', 'count': 1, 'entity_type': 'malware families'}", - "Fetched entities - {'prefix': '[GenericFetcher]', 'count': 1, 'entity_type': 'threat actors'}", - "Fetched details - {'prefix': '[FetcherShared]', 'summary': 'malware_families: 1, threat_actors: 1'}", "Converted entities to STIX format - {'prefix': '[GenericConverter]', 'count': 34, 'entity_type': 'malware families'}", "Converted entities to STIX format - {'prefix': '[GenericConverter]', 'count': 54, 'entity_type': 'threat actors'}", "Converted entities to STIX format - {'prefix': '[GenericConverter]', 'count': 2, 'entity_type': 'attack techniques'}", - "Converted to STIX entities - {'prefix': '[OrchestratorVulnerability]', 'current': 1, 'total': 1, 'entities_count': 140, 'entities_summary': 'vulnerability: 1, software: 24, note: 1, relationship: 69, identity: 25, malware: 1, location: 17, intrusion-set: 1, attack-pattern: 1'}", - "Adding items to batch processor - {'prefix': '[GenericBatchProcessor]', 'count': 140, 'display_name': 'STIX objects'}", - "Successfully added items - {'prefix': '[GenericBatchProcessor]', 'added_count': 140, 'total_count': 140, 'display_name': 'STIX objects'}", - "Flushing remaining items - {'prefix': '[GenericBatchProcessor]', 'count': 142, 'display_name': 'STIX objects'}", - "Processing batch - {'prefix': '[GenericBatchProcessor]', 'batch_num': 1, 'batch_size': 142, 'display_name': 'STIX objects', 'total_processed': 142}", + "Converted to STIX entities - {'prefix': '[OrchestratorVulnerability]', 'current': 1, 'total': 1, 'entities_count': 142, 'entities_summary': 'vulnerability: 1, software: 24, note: 3, relationship: 69, identity: 25, malware: 1, location: 17, intrusion-set: 1, attack-pattern: 1'}", + "Adding items to batch processor - {'prefix': '[GenericBatchProcessor]', 'count': 142, 'display_name': 'STIX objects'}", + "Successfully added items - {'prefix': '[GenericBatchProcessor]', 'added_count': 142, 'total_count': 142, 'display_name': 'STIX objects'}", + "Flushing remaining items - {'prefix': '[GenericBatchProcessor]', 'count': 144, 'display_name': 'STIX objects'}", + "Processing batch - {'prefix': '[GenericBatchProcessor]', 'batch_num': 1, 'batch_size': 144, 'display_name': 'STIX objects', 'total_processed': 144}", "Sent batch to OpenCTI - {'prefix': '[GenericBatchProcessor]', 'batch_num': 1}", - "Batch completed successfully - {'prefix': '[GenericBatchProcessor]', 'work_id': None, 'total_count': 142, 'type_summary': 'identity: 26, marking-definition: 1, vulnerability: 1, software: 24, note: 1, relationship: 69, malware: 1, location: 17, intrusion-set: 1, attack-pattern: 1'}", - "Successfully processed batch #1. Total STIX objects sent: 142 - {'prefix': '[GenericBatchProcessor]', 'batch_num': 1, 'total_items_sent': 142}", + "Batch completed successfully - {'prefix': '[GenericBatchProcessor]', 'work_id': None, 'total_count': 144, 'type_summary': 'identity: 26, marking-definition: 1, vulnerability: 1, software: 24, note: 3, relationship: 69, malware: 1, location: 17, intrusion-set: 1, attack-pattern: 1'}", + "Successfully processed batch #1. Total STIX objects sent: 144 - {'prefix': '[GenericBatchProcessor]', 'batch_num': 1, 'total_items_sent': 144}", "State update: Setting next_cursor_date - {'prefix': '[GenericBatchProcessor]', 'latest_date': '2025-06-25T08:22:55+00:00'}", ] @@ -361,23 +352,18 @@ def expected_campaign_log_messages() -> list[str]: "Fetched 1 threat_actors relationships from API - {'prefix': '[BaseFetcher]'}", "Found relationships - {'prefix': '[OrchestratorCampaign]', 'current': 1, 'total': 1, 'relationships': 'malware_families: 1, attack_techniques: 1, vulnerabilities: 1, threat_actors: 1'}", "Using ID-only approach for attack techniques (quota optimization) - {'prefix': '[OrchestratorCampaign]', 'attack_technique_count': 1}", - "Fetching details for subentities - {'prefix': '[FetcherShared]', 'total_to_fetch': 3}", - "Fetched entities - {'prefix': '[GenericFetcher]', 'count': 1, 'entity_type': 'malware families'}", - "Fetched entities - {'prefix': '[GenericFetcher]', 'count': 1, 'entity_type': 'vulnerabilities'}", - "Fetched entities - {'prefix': '[GenericFetcher]', 'count': 1, 'entity_type': 'threat actors'}", - "Fetched details - {'prefix': '[FetcherShared]', 'summary': 'malware_families: 1, vulnerabilities: 1, threat_actors: 1'}", "Converted entities to STIX format - {'prefix': '[GenericConverter]', 'count': 34, 'entity_type': 'malware families'}", - "Converted entities to STIX format - {'prefix': '[GenericConverter]', 'count': 51, 'entity_type': 'vulnerabilities'}", + "Converted entities to STIX format - {'prefix': '[GenericConverter]', 'count': 53, 'entity_type': 'vulnerabilities'}", "Converted entities to STIX format - {'prefix': '[GenericConverter]', 'count': 54, 'entity_type': 'threat actors'}", "Converted entities to STIX format - {'prefix': '[GenericConverter]', 'count': 2, 'entity_type': 'attack techniques'}", - "Converted to STIX entities - {'prefix': '[OrchestratorCampaign]', 'current': 1, 'total': 1, 'entities_count': 172, 'entities_summary': 'location: 23, identity: 34, campaign: 1, relationship: 85, malware: 1, vulnerability: 1, software: 24, note: 1, intrusion-set: 1, attack-pattern: 1'}", - "Adding items to batch processor - {'prefix': '[GenericBatchProcessor]', 'count': 172, 'display_name': 'STIX objects'}", - "Successfully added items - {'prefix': '[GenericBatchProcessor]', 'added_count': 172, 'total_count': 172, 'display_name': 'STIX objects'}", - "Flushing remaining items - {'prefix': '[GenericBatchProcessor]', 'count': 174, 'display_name': 'STIX objects'}", - "Processing batch - {'prefix': '[GenericBatchProcessor]', 'batch_num': 1, 'batch_size': 174, 'display_name': 'STIX objects', 'total_processed': 174}", + "Converted to STIX entities - {'prefix': '[OrchestratorCampaign]', 'current': 1, 'total': 1, 'entities_count': 174, 'entities_summary': 'location: 23, identity: 34, campaign: 1, relationship: 85, malware: 1, vulnerability: 1, software: 24, note: 3, intrusion-set: 1, attack-pattern: 1'}", + "Adding items to batch processor - {'prefix': '[GenericBatchProcessor]', 'count': 174, 'display_name': 'STIX objects'}", + "Successfully added items - {'prefix': '[GenericBatchProcessor]', 'added_count': 174, 'total_count': 174, 'display_name': 'STIX objects'}", + "Flushing remaining items - {'prefix': '[GenericBatchProcessor]', 'count': 176, 'display_name': 'STIX objects'}", + "Processing batch - {'prefix': '[GenericBatchProcessor]', 'batch_num': 1, 'batch_size': 176, 'display_name': 'STIX objects', 'total_processed': 176}", "Sent batch to OpenCTI - {'prefix': '[GenericBatchProcessor]', 'batch_num': 1}", - "Batch completed successfully - {'prefix': '[GenericBatchProcessor]', 'work_id': None, 'total_count': 174, 'type_summary': 'identity: 35, marking-definition: 1, location: 23, campaign: 1, relationship: 85, malware: 1, vulnerability: 1, software: 24, note: 1, intrusion-set: 1, attack-pattern: 1'}", - "Successfully processed batch #1. Total STIX objects sent: 174 - {'prefix': '[GenericBatchProcessor]', 'batch_num': 1, 'total_items_sent': 174}", + "Batch completed successfully - {'prefix': '[GenericBatchProcessor]', 'work_id': None, 'total_count': 176, 'type_summary': 'identity: 35, marking-definition: 1, location: 23, campaign: 1, relationship: 85, malware: 1, vulnerability: 1, software: 24, note: 3, intrusion-set: 1, attack-pattern: 1'}", + "Successfully processed batch #1. Total STIX objects sent: 176 - {'prefix': '[GenericBatchProcessor]', 'batch_num': 1, 'total_items_sent': 176}", "State update: Setting next_cursor_date - {'prefix': '[GenericBatchProcessor]', 'latest_date': '2025-07-30T22:01:05+00:00'}", ] diff --git a/external-import/google-ti-feeds/tests/octi/configs/test_connector_config.py b/external-import/google-ti-feeds/tests/octi/configs/test_connector_config.py index 956ea6a8387..adc61d575e8 100644 --- a/external-import/google-ti-feeds/tests/octi/configs/test_connector_config.py +++ b/external-import/google-ti-feeds/tests/octi/configs/test_connector_config.py @@ -278,33 +278,36 @@ def _when_connector_created() -> tuple[Any, Any]: # Then the connector should be created successfully def _then_connector_created_successfully(capfd, mock_env, connector, data) -> None: # type: ignore """Check if the connector was created successfully.""" - assert connector is not None # noqa: S101 - - for key, value in data.items(): - if key.startswith("OPENCTI_"): - config_key = key[len("OPENCTI_") :].lower() - attr = getattr(connector._config.octi_config, config_key) - if isinstance(attr, HttpUrl): - assert attr.encoded_string() == value # noqa: S101 - else: - assert attr == value # noqa: S101 - elif key.startswith("CONNECTOR_"): - config_key = key[len("CONNECTOR_") :].lower() - attr = getattr(connector._config.connector_config, config_key) - if config_key == "duration_period": - assert attr == isodate.parse_duration(value) # noqa: S101 - else: + try: + assert connector is not None # noqa: S101 + + for key, value in data.items(): + if key.startswith("OPENCTI_"): + config_key = key[len("OPENCTI_") :].lower() + attr = getattr(connector._config.octi_config, config_key) if isinstance(attr, HttpUrl): assert attr.encoded_string() == value # noqa: S101 else: - assert str(attr) == value # noqa: S101 - - log_records = capfd.readouterr() - if connector._config.connector_config.log_level in ["info", "debug"]: - registered_message = f'"name": "{connector._config.connector_config.name}", "message": "Connector registered with ID", "attributes": {{"id": "{connector._config.connector_config.id}"}}' - assert registered_message in log_records.err # noqa: S101 + assert attr == value # noqa: S101 + elif key.startswith("CONNECTOR_"): + config_key = key[len("CONNECTOR_") :].lower() + attr = getattr(connector._config.connector_config, config_key) + if config_key == "duration_period": + assert attr == isodate.parse_duration(value) # noqa: S101 + else: + if isinstance(attr, HttpUrl): + assert attr.encoded_string() == value # noqa: S101 + else: + assert str(attr) == value # noqa: S101 - mock_env.stop() + log_records = capfd.readouterr() + if connector._config.connector_config.log_level in ["info", "debug"]: + assert "Connector registered with ID" in log_records.err # noqa: S101 + assert ( + f'"id": "{connector._config.connector_config.id}"' in log_records.err + ) # noqa: S101 + finally: + mock_env.stop() # Then the connector config should raise a custom ConfigurationException @@ -312,7 +315,8 @@ def _then_connector_configuration_exception( # type: ignore mock_env, connector, config_ex ) -> None: """Check if the connector config raises a custom ConfigurationException.""" - assert connector is None # noqa: S101 - assert isinstance(config_ex, ConfigurationError) # noqa: S101 - - mock_env.stop() + try: + assert connector is None # noqa: S101 + assert isinstance(config_ex, ConfigurationError) # noqa: S101 + finally: + mock_env.stop() diff --git a/external-import/google-ti-feeds/tests/utils/batch_processors/test_generic_batch_processor.py b/external-import/google-ti-feeds/tests/utils/batch_processors/test_generic_batch_processor.py index 59764f3d4d3..f10584d6d9e 100644 --- a/external-import/google-ti-feeds/tests/utils/batch_processors/test_generic_batch_processor.py +++ b/external-import/google-ti-feeds/tests/utils/batch_processors/test_generic_batch_processor.py @@ -441,17 +441,6 @@ def test_process_current_batch_success( _then_current_batch_is_empty(basic_processor) -def test_process_current_batch_empty(basic_processor: GenericBatchProcessor) -> None: - """Test processing empty batch.""" - # Given: A basic processor with empty batch - - # When: The empty batch is processed - work_id, exception = _when_current_batch_processed(basic_processor) - - # Then: Processing should handle empty batch gracefully - _then_empty_batch_processed(work_id, exception) - - def test_process_current_batch_with_preprocessing( preprocessing_config: GenericBatchProcessorConfig, mock_work_manager: Any, @@ -604,8 +593,8 @@ def test_update_final_state_without_tracked_date( # When: Final state is updated _when_final_state_updated(basic_processor) - # Then: State should be updated with current time - _then_state_updated_with_current_time(mock_work_manager) + # Then: State should not be updated + _then_state_not_updated(mock_work_manager) def test_set_latest_date_manually(basic_processor: GenericBatchProcessor) -> None: @@ -1039,14 +1028,6 @@ def _then_batch_processed_successfully( assert work_id.startswith("work-") # noqa: S101 -def _then_empty_batch_processed( - work_id: str | None, exception: Exception | None -) -> None: - """Assert that empty batch was processed (returns None).""" - assert exception is None # noqa: S101 - assert work_id is None # noqa: S101 - - def _then_batch_processing_failed_after_retries( work_id: str | None, exception: Exception | None ) -> None: @@ -1102,12 +1083,9 @@ def _then_state_updated_with_date( ) -def _then_state_updated_with_current_time(mock_work_manager: MockWorkManager) -> None: - """Assert that state was updated with current time.""" - mock_work_manager.update_state.assert_called() - call_args = mock_work_manager.update_state.call_args - assert call_args[1]["state_key"] == "test_cursor" # noqa: S101 - assert "T" in call_args[1]["date_str"] # noqa: S101 +def _then_state_not_updated(mock_work_manager: MockWorkManager) -> None: + """Assert that state was not updated.""" + mock_work_manager.update_state.assert_not_called() def _then_statistics_are_initial(stats: dict[str, Any]) -> None: diff --git a/external-import/google-ti-feeds/tests/utils/batch_processors/test_generic_batch_processor_config.py b/external-import/google-ti-feeds/tests/utils/batch_processors/test_generic_batch_processor_config.py index 37b077280db..4b47694fbca 100644 --- a/external-import/google-ti-feeds/tests/utils/batch_processors/test_generic_batch_processor_config.py +++ b/external-import/google-ti-feeds/tests/utils/batch_processors/test_generic_batch_processor_config.py @@ -106,7 +106,6 @@ def full_config() -> GenericBatchProcessorConfig: preprocessing_function=sample_preprocessor, postprocessing_function=sample_postprocessor, validation_function=sample_validator, - empty_batch_behavior="skip", max_retries=3, retry_delay=2.0, work_timeout=120.0, @@ -185,24 +184,6 @@ def test_basic_config_validation_on_creation() -> None: assert "batch_size must be greater than 0" in str(excinfo.value) # noqa: S101 -def test_basic_config_validation_empty_batch_behavior() -> None: - """Test validation of empty_batch_behavior parameter.""" - # Given: Invalid empty_batch_behavior value - - # When: Configuration is created with invalid empty_batch_behavior - # Then: ValueError should be raised - with pytest.raises(ValueError) as excinfo: - GenericBatchProcessorConfig( - batch_size=10, - work_name_template="Test", - state_key="test", - entity_type="test", - display_name="test", - empty_batch_behavior="invalid_value", - ) - assert "empty_batch_behavior must be" in str(excinfo.value) # noqa: S101 - - # Scenario: Creating full configuration with all parameters @@ -773,7 +754,6 @@ def _then_config_has_default_values(config: GenericBatchProcessorConfig) -> None assert config.preprocessing_function is None # noqa: S101 assert config.postprocessing_function is None # noqa: S101 assert config.validation_function is None # noqa: S101 - assert config.empty_batch_behavior == "update_state" # noqa: S101 assert config.max_retries == 0 # noqa: S101 assert config.retry_delay == 1.0 # noqa: S101 assert config.work_timeout is None # noqa: S101 @@ -795,7 +775,6 @@ def _then_config_has_full_properties(config: GenericBatchProcessorConfig) -> Non assert config.preprocessing_function == sample_preprocessor # noqa: S101 assert config.postprocessing_function == sample_postprocessor # noqa: S101 assert config.validation_function == sample_validator # noqa: S101 - assert config.empty_batch_behavior == "skip" # noqa: S101 assert config.max_retries == 3 # noqa: S101 assert config.retry_delay == 2.0 # noqa: S101 assert config.work_timeout == 120.0 # noqa: S101 diff --git a/external-import/greynoise-feed/.env.sample b/external-import/greynoise-feed/.env.sample index 96eeaf4220f..dd63b3b989a 100644 --- a/external-import/greynoise-feed/.env.sample +++ b/external-import/greynoise-feed/.env.sample @@ -4,5 +4,10 @@ CONNECTOR_ID=ChangeMe CONNECTOR_NAME=GreyNoiseFeed CONNECTOR_SCOPE=greynoisefeed CONNECTOR_LOG_LEVEL=error +CONNECTOR_DURATION_PERIOD=PT6H GREYNOISE_FEED_API_KEY=ChangeMe -GREYNOISE_FEED_FEED_TYPE=malicious \ No newline at end of file +GREYNOISE_FEED_FEED_TYPE=malicious +GREYNOISE_FEED_LIMIT=10000 +GREYNOISE_FEED_INDICATOR_SCORE_MALICIOUS=75 +GREYNOISE_FEED_INDICATOR_SCORE_SUSPICIOUS=50 +GREYNOISE_FEED_INDICATOR_SCORE_BENIGN=20 \ No newline at end of file diff --git a/external-import/greynoise-feed/README.md b/external-import/greynoise-feed/README.md index fef9c8c173e..b2b1cf67a37 100644 --- a/external-import/greynoise-feed/README.md +++ b/external-import/greynoise-feed/README.md @@ -6,6 +6,8 @@ The GreyNoise Feed connector imports internet scanner IP addresses from GreyNoise Intelligence into OpenCTI as indicators and observables. +**NOTE** This connector only imports the base indicator and observable, and flags the indicator with a classification. For the full enrichment details available from GreyNoise, use this connector along with the GreyNoise IP Enrichment connector. It is recommended that the enrichment connector be set to auto-enrich so that the full enrichment is added to each indicator while the feed ingests it. Indicators that are pulled by the feed connector prior to having the enrichment connector in place will need to be enriched manually or via workflow. + ## Table of Contents - [OpenCTI GreyNoise Feed Connector](#opencti-greynoise-feed-connector) @@ -54,16 +56,31 @@ There are a number of configuration options, which are set either in `docker-com |-------------------|-----------------|-------------------------------|----------------|-----------|-----------------------------------------------------------------------------| | Connector ID | id | `CONNECTOR_ID` | | Yes | A unique `UUIDv4` identifier for this connector instance. | | Connector Name | name | `CONNECTOR_NAME` | GreyNoise Feed | No | Name of the connector. | -| Connector Scope | scope | `CONNECTOR_SCOPE` | greynoise | No | The scope or type of data the connector is importing. | +| Connector Scope | scope | `CONNECTOR_SCOPE` | greynoisefeed | No | The scope or type of data the connector is importing. | | Log Level | log_level | `CONNECTOR_LOG_LEVEL` | info | No | Determines the verbosity of the logs: `debug`, `info`, `warn`, or `error`. | -| Duration Period | duration_period | `CONNECTOR_DURATION_PERIOD` | PT1H | No | Time interval between connector runs in ISO 8601 format. | +| Duration Period | duration_period | `CONNECTOR_DURATION_PERIOD` | PT6H | No | Time interval between connector runs in ISO 8601 format. | ### Connector extra parameters environment variables -| Parameter | config.yml | Docker environment variable | Default | Mandatory | Description | -|----------------|----------------------|-------------------------------|---------|-----------|--------------------------------------------------| -| API Key | greynoise.api_key | `GREYNOISE_API_KEY` | | Yes | GreyNoise API key. | -| Feed Type | greynoise.feed_type | `GREYNOISE_FEED_TYPE` | | No | Type of GreyNoise feed to import. | +| Parameter | config.yml | Docker environment variable | Default | Mandatory | Description | +|------------------|-------------------------------------------|---------------------------------------------|---------|-----------|----------------------------------------------------------| +| API Key | greynoise_feed.api_key | `GREYNOISE_FEED_API_KEY` | | Yes | GreyNoise API key. | +| Feed Type | greynoise_feed.feed_type | `GREYNOISE_FEED_TYPE` | | Yes | Type of GreyNoise feed to import. | +| Limit | greynoise_feed.limit | `GREYNOISE_FEED_LIMIT` | 10,000 | No | The max number of indicators to import. | +| Malicious Score | greynoise_feed.indicator_score_malicious | `GREYNOISE_FEED_INDICATOR_SCORE_MALICIOUS` | 75 | No | The indicator score for GreyNoise Malicious Indicators. | +| Suspicious Score | greynoise_feed.indicator_score_suspicious | `GREYNOISE_FEED_INDICATOR_SCORE_SUSPICIOUS` | 50 | No | The indicator score for GreyNoise Suspicious Indicators. | +| Benign Score | greynoise_feed.indicator_score_benign | `GREYNOISE_FEED_INDICATOR_SCORE_BENIGN` | 20 | No | The indicator score for GreyNoise Benign Indicators. | + +### Feed Type Options + +The connector ingest indicators based off of a defined "feed type" in the configuration. The following are the support feed types and what inidicators they will ingest: +- `benign`: imports all indicators observed by GreyNoise in the previous day, which exhibited benign scanning behavior +- `malicious`: imports all indicators observed by GreyNoise in the previous day, which exhibited malicious scanning behavior +- `suspicious`: imports all indicators observed by GreyNoise in the previous day, which exhibited suspicious scanning behavior +- `benign+malicious`: imports all indicators observed by GreyNoise in the previous day, which exhibited benign OR malicious scanning behavior +- `malicious+suspicious`: imports all indicators observed by GreyNoise in the previous day, which exhibited suspicious OR malicious scanning behavior +- `benign+suspicious+malicious`: imports all indicators observed by GreyNoise in the previous day, which exhibited benign OR malicious OR suspicious scanning behavior +- `all`: imports all indicators observed by GreyNoise in the previous day ## Deployment @@ -85,10 +102,15 @@ Configure the connector in `docker-compose.yml`: - OPENCTI_TOKEN=ChangeMe - CONNECTOR_ID=ChangeMe - CONNECTOR_NAME=GreyNoise Feed - - CONNECTOR_SCOPE=greynoise - - CONNECTOR_LOG_LEVEL=info - - CONNECTOR_DURATION_PERIOD=PT1H + - CONNECTOR_SCOPE=greynoisefeed + - CONNECTOR_LOG_LEVEL=error + - CONNECTOR_DURATION_PERIOD=PT6H - GREYNOISE_API_KEY=ChangeMe + - GREYNOISE_FEED_TYPE=malicious + - GREYNOISE_LIMIT=10000 + - GREYNOISE_INDICATOR_SCORE_MALICIOUS=75 + - GREYNOISE_INDICATOR_SCORE_SUSPICIOUS=50 + - GREYNOISE_INDICATOR_SCORE_BENIGN=20 restart: always ``` @@ -157,7 +179,6 @@ graph LR |----------------------|---------------------|--------------------------------------------------| | IP Address | IPv4-Addr | IP observable with GreyNoise metadata | | IP Address | Indicator | STIX pattern `[ipv4-addr:value = '...']` | -| CVE Tags | Vulnerability | Associated CVEs from GreyNoise tags | | Classification | Labels | benign, malicious, unknown | ### Processing Details @@ -166,8 +187,7 @@ For each IP in the GreyNoise feed: 1. **Observable**: IPv4-Addr with GreyNoise context 2. **Indicator**: Created with STIX pattern -3. **Vulnerability**: Created when GreyNoise tag indicates CVE exploitation -4. **Relationship**: Indicator → `indicates` → Vulnerability +3. **Relationship**: Indicator → `indicates` → IPv4 Observable ## Debugging @@ -182,6 +202,7 @@ Ensure the GreyNoise API is reachable from your OpenCTI system. For API issues, ## Additional information - **Subscription Required**: GreyNoise Feed access requires a paid subscription +- **IMPORTANT NOTE** This connector only imports the base indicator and observable, and flags the indicator with a classification. For the full enrichment details available from GreyNoise, use this connector along with the GreyNoise IP Enrichment connector. It is recommended that the enrichment connector be set to auto-enrich so that the full enrichment is added to each indicator while the feed ingests it. Indicators that are pulled by the feed connector prior to having the enrichment connector in place will need to be enriched manually or via workflow. - **Enrichment**: Use with GreyNoise enrichment connector for detailed IP context -- **Classifications**: IPs are classified as benign, malicious, or unknown +- **Classifications**: IPs are classified as benign, malicious, suspicious, or unknown - **Reference**: [GreyNoise](https://www.greynoise.io/) diff --git a/external-import/greynoise-feed/__metadata__/CONNECTOR_CONFIG_DOC.md b/external-import/greynoise-feed/__metadata__/CONNECTOR_CONFIG_DOC.md index f919e5e88ac..8f8e2dbf926 100644 --- a/external-import/greynoise-feed/__metadata__/CONNECTOR_CONFIG_DOC.md +++ b/external-import/greynoise-feed/__metadata__/CONNECTOR_CONFIG_DOC.md @@ -12,12 +12,10 @@ Below is an exhaustive enumeration of all configurable parameters available, eac | CONNECTOR_TYPE | `const` | | `EXTERNAL_IMPORT` | `"EXTERNAL_IMPORT"` | | | CONNECTOR_NAME | `string` | | string | `"GreyNoise Feed"` | The name of the connector. | | CONNECTOR_SCOPE | `array` | | string | `["greynoisefeed"]` | The scope of the connector, e.g. 'greynoise'. | -| CONNECTOR_DURATION_PERIOD | `string` | | Format: [`duration`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | `"P1D"` | The period of time to await between two runs of the connector. | +| CONNECTOR_DURATION_PERIOD | `string` | | Format: [`duration`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | `"PT6H"` | The period of time to await between two runs of the connector. | | CONNECTOR_LOG_LEVEL | `string` | | `debug` `info` `warn` `warning` `error` | `"error"` | The minimum level of logs to display. | | GREYNOISE_FEED_FEED_TYPE | `string` | | `benign` `malicious` `suspicious` `benign+malicious` `malicious+suspicious` `benign+suspicious+malicious` `all` | `"malicious"` | Type of feed to import. | | GREYNOISE_FEED_LIMIT | `integer` | | integer | `10000` | Max number of indicators to ingest. | -| GREYNOISE_FEED_IMPORT_METADATA | `boolean` | | boolean | `false` | Import metadata (cities, sightings, etc.). ⚠️ Can generate a lot of data. | -| GREYNOISE_FEED_IMPORT_DESTINATION_SIGHTINGS | `boolean` | | boolean | `false` | Import indicator's countries (from metadata) as a Sighting. | | GREYNOISE_FEED_INDICATOR_SCORE_MALICIOUS | `integer` | | `0 <= x <= 100` | `75` | Default indicator score for malicious indicators. | | GREYNOISE_FEED_INDICATOR_SCORE_SUSPICIOUS | `integer` | | `0 <= x <= 100` | `50` | Default indicator score for suspicious indicators. | | GREYNOISE_FEED_INDICATOR_SCORE_BENIGN | `integer` | | `0 <= x <= 100` | `20` | Default indicator score for benign indicators. | diff --git a/external-import/greynoise-feed/__metadata__/connector_config_schema.json b/external-import/greynoise-feed/__metadata__/connector_config_schema.json index 06476de7bf5..0f2807b2e1f 100644 --- a/external-import/greynoise-feed/__metadata__/connector_config_schema.json +++ b/external-import/greynoise-feed/__metadata__/connector_config_schema.json @@ -35,7 +35,7 @@ "type": "array" }, "CONNECTOR_DURATION_PERIOD": { - "default": "P1D", + "default": "PT6H", "description": "The period of time to await between two runs of the connector.", "format": "duration", "type": "string" @@ -77,16 +77,6 @@ "description": "Max number of indicators to ingest.", "type": "integer" }, - "GREYNOISE_FEED_IMPORT_METADATA": { - "default": false, - "description": "Import metadata (cities, sightings, etc.). \u26a0\ufe0f Can generate a lot of data.", - "type": "boolean" - }, - "GREYNOISE_FEED_IMPORT_DESTINATION_SIGHTINGS": { - "default": false, - "description": "Import indicator's countries (from metadata) as a Sighting.", - "type": "boolean" - }, "GREYNOISE_FEED_INDICATOR_SCORE_MALICIOUS": { "default": 75, "description": "Default indicator score for malicious indicators.", diff --git a/external-import/greynoise-feed/docker-compose.yml b/external-import/greynoise-feed/docker-compose.yml index 18024c2722e..40b763712eb 100644 --- a/external-import/greynoise-feed/docker-compose.yml +++ b/external-import/greynoise-feed/docker-compose.yml @@ -6,9 +6,14 @@ services: - OPENCTI_URL=http://localhost - OPENCTI_TOKEN=ChangeMe - CONNECTOR_ID=ChangeMe # Valid UUIDv4 - - CONNECTOR_NAME=GreyNoiseFeed + - CONNECTOR_NAME=GreyNoise Feed - CONNECTOR_SCOPE=greynoisefeed - CONNECTOR_LOG_LEVEL=error - - GREYNOISE_API_KEY=ChangeMe + - CONNECTOR_DURATION_PERIOD=PT6H + - GREYNOISE_FEED_API_KEY=ChangeMe - GREYNOISE_FEED_TYPE=malicious + - GREYNOISE_FEED_LIMIT=10000 + - GREYNOISE_FEED_INDICATOR_SCORE_MALICIOUS=75 + - GREYNOISE_FEED_INDICATOR_SCORE_SUSPICIOUS=50 + - GREYNOISE_FEED_INDICATOR_SCORE_BENIGN=20 restart: always \ No newline at end of file diff --git a/external-import/greynoise-feed/src/config.yml.sample b/external-import/greynoise-feed/src/config.yml.sample index da8fba210b8..e93af1dac71 100644 --- a/external-import/greynoise-feed/src/config.yml.sample +++ b/external-import/greynoise-feed/src/config.yml.sample @@ -3,12 +3,16 @@ opencti: token: 'ChangeMe' connector: - type: 'EXTERNAL_IMPORT' id: 'ChangeMe' name: 'GreyNoise Feed' scope: 'greynoisefeed' + duration_period: PT6H log_level: 'error' greynoise_feed: api_key: 'ChangeMe' feed_type: 'malicious' # set to benign, malicious, suspicious, benign+malicious, malicious+suspicious, benign+suspicious+malicious, or all + limit: 10000 + indicator_score_malicious: 75 + indicator_score_suspicious: 50 + indicator_score_benign: 20 diff --git a/external-import/greynoise-feed/src/connector/config_loader.py b/external-import/greynoise-feed/src/connector/config_loader.py index b94bd19aa07..54fd4d394a5 100644 --- a/external-import/greynoise-feed/src/connector/config_loader.py +++ b/external-import/greynoise-feed/src/connector/config_loader.py @@ -1,6 +1,6 @@ import os import warnings -from datetime import datetime, timedelta, timezone +from datetime import timedelta from pathlib import Path from typing import Annotated, Literal, Optional @@ -12,7 +12,6 @@ HttpUrl, PlainSerializer, SecretStr, - TypeAdapter, model_validator, ) from pydantic_core.core_schema import SerializationInfo @@ -66,30 +65,6 @@ def comma_separated_list_validator(value: str | list[str]) -> list[str]: return value -def iso_string_validator(value: str) -> datetime: - """ - Convert ISO string into a datetime object. - - Example: - > value = iso_string_validator("2023-10-01T00:00:00Z") - > print(value) # 2023-10-01 00:00:00+00:00 - - # If today is 2023-10-01: - > value = iso_string_validator("P30D") - > print(value) # 2023-09-01 00:00:00+00:00 - """ - if isinstance(value, str): - try: - # Convert presumed ISO string to datetime object - return datetime.fromisoformat(value).astimezone(tz=timezone.utc) - except ValueError: - # If not a datetime ISO string, try to parse it as timedelta with pydantic first - duration = TypeAdapter(timedelta).validate_python(value) - # Then return a datetime minus the value - return datetime.now(timezone.utc) - duration - return value - - def pycti_list_serializer(value: list[str], info: SerializationInfo) -> str | list[str]: """ Serialize list of values as comma-separated string. @@ -109,13 +84,6 @@ def pycti_list_serializer(value: list[str], info: SerializationInfo) -> str | li PlainSerializer(pycti_list_serializer, when_used="json"), ] -DatetimeFromIsoString = Annotated[ - datetime, - BeforeValidator(iso_string_validator), - # Replace the default serializer as it uses Z prefix instead of +00:00 offset - PlainSerializer(datetime.isoformat, when_used="json"), -] - class ConfigBaseModel(BaseSettings): """Base class for global config models. To prevent attributes from being modified after initialization.""" @@ -163,7 +131,7 @@ class ConnectorConfig(ConfigBaseModel): ) duration_period: timedelta = Field( description="The period of time to await between two runs of the connector.", - default=timedelta(hours=24), + default=timedelta(hours=6), ) log_level: Optional[ Literal[ @@ -199,14 +167,6 @@ class GreynoiseConfig(ConfigBaseModel): description="Max number of indicators to ingest.", default=10_000, ) - import_metadata: bool = Field( - description="Import metadata (cities, sightings, etc.). ⚠️ Can generate a lot of data.", - default=False, - ) - import_destination_sightings: bool = Field( - description="Import indicator's countries (from metadata) as a Sighting.", - default=False, - ) indicator_score_malicious: int = Field( description="Default indicator score for malicious indicators.", ge=0, diff --git a/external-import/greynoise-feed/src/connector/connector.py b/external-import/greynoise-feed/src/connector/connector.py index 66951aeabfa..7dd9dac0102 100644 --- a/external-import/greynoise-feed/src/connector/connector.py +++ b/external-import/greynoise-feed/src/connector/connector.py @@ -5,20 +5,18 @@ import pytz import stix2 from dateutil.parser import parse -from greynoise import GreyNoise +from greynoise.api import APIConfig, GreyNoise +from greynoise.exceptions import RequestFailure from pycti import ( - Identity, Indicator, - Location, - Malware, OpenCTIConnectorHelper, StixCoreRelationship, - StixSightingRelationship, - Vulnerability, ) from .config_loader import ConfigLoader +INTEGRATION_NAME = "opencti-feed-v4.0" + class GreyNoiseFeedConnector: def __init__(self, config: ConfigLoader, helper: OpenCTIConnectorHelper): @@ -56,27 +54,25 @@ def get_feed_query(self, feed_type: str): ) sys.exit(1) elif feed_type.lower() == "benign": - query = "last_seen:1d classification:benign" + query = "last_seen_benign:1d classification:benign" elif feed_type.lower() == "malicious": - query = "last_seen:1d classification:malicious" + query = "last_seen_malicious:1d classification:malicious" elif feed_type.lower() == "suspicious": - query = "last_seen:1d classification:suspicious" + query = "last_seen_suspicious:1d classification:suspicious" elif feed_type.lower() == "benign+malicious": - query = "last_seen:1d (classification:malicious OR classification:benign)" + query = "(last_seen_malicious:1d classification:malicious) OR (last_seen_benign:1d classification:benign)" elif feed_type.lower() == "malicious+suspicious": - query = ( - "last_seen:1d (classification:malicious OR classification:suspicious)" - ) + query = "(last_seen_malicious:1d classification:malicious) OR (last_seen_suspicious:1d classification:suspicious)" elif feed_type.lower() == "benign+suspicious+malicious": - query = "last_seen:1d (-classification:unknown)" + query = "(last_seen_malicious:1d classification:malicious) OR (last_seen_suspicious:1d classification:suspicious) OR (last_seen_benign:1d classification:benign)" elif feed_type.lower() == "all": query = "last_seen:1d" return query - def _process_labels(self, data: dict, data_tags: dict) -> tuple: + def _process_labels(self, data: dict) -> list: """ - This method allows you to start the process of creating labels and recovering associated malware. + This method allows you to start the process of creating labels. :param data: A parameter that contains all the data about the IPv4 that was searched for in GreyNoise. :param data_tags: A parameter that contains all the data relating to the existing tags in GreyNoise @@ -84,75 +80,43 @@ def _process_labels(self, data: dict, data_tags: dict) -> tuple: """ self.all_labels = [] - all_malwares = [] - entity_tags = data["tags"] - if data["classification"] == "benign": + if data["internet_scanner_intelligence"]["classification"] == "benign": # Create label GreyNoise "benign" self._create_custom_label("gn-classification: benign", "#06c93a") # Include additional label "benign-actor" - self._create_custom_label(f"gn-benign-actor: {data['actor']} ", "#06c93a") - - elif data["classification"] == "unknown": + self._create_custom_label( + f"gn-benign-actor: {data['internet_scanner_intelligence']['actor']} ", + "#06c93a", + ) + elif data["internet_scanner_intelligence"]["classification"] == "unknown": # Create label GreyNoise "unknown" self._create_custom_label("gn-classification: unknown", "#a6a09f") - - elif data["classification"] == "malicious": + elif data["internet_scanner_intelligence"]["classification"] == "malicious": # Create label GreyNoise "malicious" self._create_custom_label("gn-classification: malicious", "#ff8178") - - elif data["classification"] == "suspicious": + elif data["internet_scanner_intelligence"]["classification"] == "suspicious": # Create label GreyNoise "suspicious" self._create_custom_label("gn-classification: suspicious", "#e3d922") - if data["bot"] is True: - # Create label for "Known Bot Activity" - self._create_custom_label("Known BOT Activity", "#7e4ec2") - - if data["metadata"]["tor"] is True: - # Create label for "Known Tor Exit Node" - self._create_custom_label("Known TOR Exit Node", "#7e4ec2") - - if data["vpn"] is True: - # Create label for "Known VPN" - self._create_custom_label("Known VPN", "#7e4ec2") - - # Create all Labels in entity_tags - for tag in entity_tags: - tag_details_matching = self._get_match(data_tags["metadata"], "name", tag) - if tag_details_matching is not None: - tag_details = tag_details_matching - else: - self.all_labels.append(tag) - continue - - # Create red label when malicious intent and type not category worm and activity - if tag_details["intention"] == "malicious" and tag_details[ - "category" - ] not in ["worm"]: - self._create_custom_label(f"{tag}", "#ff8178") - - # If category is worm, prepare malware object - elif tag_details["category"] == "worm": - malware_worm = { - "name": f"{tag}", - "description": f"{tag_details['description']}", - "type": "worm", - } - all_malwares.append(malware_worm) - self.all_labels.append(tag) - - elif tag_details["intention"] == "benign": - # Create green label for benign tags - self._create_custom_label(f"{tag_details['name']}", "#06c93a") - elif tag_details["intention"] == "suspicious": - # Create yellow label for suspicious tags - self._create_custom_label(f"{tag_details['name']}", "#e3d922") - else: - # Create white label otherwise - self._create_custom_label(f"{tag}", "#ffffff") + if data["business_service_intelligence"]["trust_level"] == "1": + # Create label GreyNoise "trust level 1" + self._create_custom_label("gn-trust-level: reasonably ignore", "#90D5FF") + # Include additional label "provider" + self._create_custom_label( + f"gn-provider: {data['business_service_intelligence']['name']} ", + "#90D5FF", + ) + elif data["business_service_intelligence"]["trust_level"] == "2": + # Create label GreyNoise "trust level 1" + self._create_custom_label("gn-trust-level: commonly seen", "#57B9FF") + # Include additional label "provider" + self._create_custom_label( + f"gn-provider: {data['business_service_intelligence']['name']} ", + "#57B9FF", + ) - return self.all_labels, all_malwares + return self.all_labels def _create_custom_label(self, name_label: str, color_label: str): """ @@ -193,34 +157,44 @@ def _get_indicator_score(self, classification): return score - def _process_data(self, work_id, session, ips_list): + def _process_data(self, work_id, ips_list): bundle_entities = [] bundle_relationships = [] - json_data_tags = session.metadata() + self.helper.log_info("Building Indicator Bundles") for ip in ips_list: - if "ip" not in ip or "classification" not in ip: + + if "ip" not in ip or "internet_scanner_intelligence" not in ip: continue description = ( "Internet Scanning IP detected by GreyNoise with classification `" - + ip["classification"] + + ip["internet_scanner_intelligence"]["classification"] + "`." ) pattern = "[ipv4-addr:value = '" + ip["ip"] + "']" - labels, malwares = self._process_labels(ip, json_data_tags) - - if "first_seen" in ip and ip["first_seen"]: - first_seen = parse(ip["first_seen"]).strftime("%Y-%m-%dT%H:%M:%SZ") - last_seen = parse(ip["last_seen"]).strftime("%Y-%m-%dT%H:%M:%SZ") + labels = self._process_labels(ip) + + if ( + "first_seen" in ip["internet_scanner_intelligence"] + and ip["internet_scanner_intelligence"]["first_seen"] + ): + first_seen = parse( + ip["internet_scanner_intelligence"]["first_seen"] + ).strftime("%Y-%m-%dT%H:%M:%SZ") + last_seen = parse( + ip["internet_scanner_intelligence"]["last_seen_timestamp"] + ).strftime("%Y-%m-%dT%H:%M:%SZ") else: - first_seen = parse(ip["last_seen"]).strftime("%Y-%m-%dT%H:%M:%SZ") - last_seen = datetime.strptime(ip["last_seen"], "%Y-%m-%d") + timedelta( - hours=23 - ) + first_seen = parse( + ip["internet_scanner_intelligence"]["last_seen_timestamp"] + ).strftime("%Y-%m-%dT%H:%M:%SZ") + last_seen = datetime.strptime( + ip["internet_scanner_intelligence"]["last_seen_timestamp"], + "%Y-%m-%dT%H:%M:%SZ", + ) + timedelta(hours=23) last_seen = last_seen.strftime("%Y-%m-%dT%H:%M:%SZ") - # Generate ExternalReference external_reference = stix2.ExternalReference( source_name="GreyNoise Feed", @@ -241,7 +215,9 @@ def _process_data(self, work_id, session, ips_list): created=first_seen, custom_properties={ "x_opencti_score": ( - self._get_indicator_score(ip["classification"]) + self._get_indicator_score( + ip["internet_scanner_intelligence"]["classification"] + ) ), "x_opencti_main_observable_type": "IPv4-Addr", }, @@ -256,7 +232,9 @@ def _process_data(self, work_id, session, ips_list): custom_properties={ "x_opencti_description": description, "x_opencti_score": ( - self._get_indicator_score(ip["classification"]) + self._get_indicator_score( + ip["internet_scanner_intelligence"]["classification"] + ) ), "created_by_ref": self.identity["standard_id"], "labels": labels, @@ -278,238 +256,6 @@ def _process_data(self, work_id, session, ips_list): ) bundle_relationships.append(stix_relationship) - # Malwares - stix_malwares = [] - for malware in malwares: - stix_malware = stix2.Malware( - id=Malware.generate_id(malware["name"]), - name=malware["name"], - description=malware["description"], - is_family=False, - malware_types=( - [malware["type"]] if malware["type"] == "worm" else None - ), - created=first_seen, - created_by_ref=self.identity["standard_id"], - object_marking_refs=[stix2.TLP_WHITE], - ) - stix_malwares.append(stix_malware) - bundle_entities.append(stix_malware) - - stix_relationship_observable_malware = stix2.Relationship( - id=StixCoreRelationship.generate_id( - "related-to", stix_observable.id, stix_malware.id - ), - relationship_type="related-to", - source_ref=stix_observable.id, - target_ref=stix_malware.id, - created_by_ref=self.identity["standard_id"], - object_marking_refs=[stix2.TLP_WHITE], - ) - bundle_relationships.append(stix_relationship_observable_malware) - - stix_relationship_indicator_malware = stix2.Relationship( - id=StixCoreRelationship.generate_id( - "indicates", stix_indicator.id, stix_malware.id - ), - relationship_type="indicates", - source_ref=stix_indicator.id, - target_ref=stix_malware.id, - created_by_ref=self.identity["standard_id"], - object_marking_refs=[stix2.TLP_WHITE], - ) - bundle_relationships.append(stix_relationship_indicator_malware) - - # CVE - if "cve" in ip and ip["cve"]: - for cve in ip["cve"]: - stix_vulnerability = stix2.Vulnerability( - id=Vulnerability.generate_id(cve), - name=cve, - created_by_ref=self.identity["standard_id"], - object_marking_refs=[stix2.TLP_WHITE], - ) - bundle_entities.append(stix_vulnerability) - - stix_relationship_observable_vulnerability = stix2.Relationship( - id=StixCoreRelationship.generate_id( - "related-to", - stix_observable.id, - stix_vulnerability.id, - ), - relationship_type="related-to", - source_ref=stix_observable.id, - target_ref=stix_vulnerability.id, - created_by_ref=self.identity["standard_id"], - object_marking_refs=[stix2.TLP_WHITE], - ) - bundle_relationships.append( - stix_relationship_observable_vulnerability - ) - - # Metadata - if self.config.greynoise_feed.import_metadata: - if "metadata" in ip: - metadata = ip["metadata"] - stix_as = None - if "asn" in metadata: - try: - stix_as = stix2.AutonomousSystem( - name=metadata["asn"], - number=int(metadata["asn"].replace("AS", "")), - object_marking_refs=[stix2.TLP_WHITE], - custom_properties={ - "created_by_ref": self.identity["standard_id"], - }, - ) - bundle_entities.append(stix_as) - - stix_relationship_observable_as = stix2.Relationship( - id=StixCoreRelationship.generate_id( - "belongs-to", stix_observable.id, stix_as.id - ), - relationship_type="belongs-to", - source_ref=stix_observable.id, - target_ref=stix_as.id, - created_by_ref=self.identity["standard_id"], - object_marking_refs=[stix2.TLP_WHITE], - ) - bundle_relationships.append(stix_relationship_observable_as) - except (ValueError, TypeError): - pass - if "organization" in metadata: - stix_organization = stix2.Identity( - id=Identity.generate_id( - metadata["organization"], "organization" - ), - name=metadata["organization"], - identity_class="organization", - ) - bundle_entities.append(stix_organization) - - stix_relationship_observable_organization = stix2.Relationship( - id=StixCoreRelationship.generate_id( - "belongs-to", stix_observable.id, stix_organization.id - ), - relationship_type="belongs-to", - source_ref=stix_observable.id, - target_ref=stix_organization.id, - created_by_ref=self.identity["standard_id"], - object_marking_refs=[stix2.TLP_WHITE], - ) - bundle_relationships.append( - stix_relationship_observable_organization - ) - - if stix_as is not None: - stix_relationship_as_organization = stix2.Relationship( - id=StixCoreRelationship.generate_id( - "related-to", stix_as.id, stix_organization.id - ), - relationship_type="related-to", - source_ref=stix_as.id, - target_ref=stix_organization.id, - created_by_ref=self.identity["standard_id"], - object_marking_refs=[stix2.TLP_WHITE], - ) - bundle_relationships.append( - stix_relationship_as_organization - ) - stix_city = None - if "city" in metadata: - stix_city = stix2.Location( - id=Location.generate_id(metadata["city"], "City"), - name=metadata["city"], - country="N/A", - created_by_ref=self.identity["standard_id"], - object_marking_refs=[stix2.TLP_WHITE], - custom_properties={"x_opencti_location_type": "City"}, - ) - bundle_entities.append(stix_city) - - stix_relationship_observable_city = stix2.Relationship( - id=StixCoreRelationship.generate_id( - "located-at", stix_observable.id, stix_city.id - ), - relationship_type="located-at", - source_ref=stix_observable.id, - target_ref=stix_city.id, - created_by_ref=self.identity["standard_id"], - object_marking_refs=[stix2.TLP_WHITE], - ) - bundle_relationships.append(stix_relationship_observable_city) - - if "country" in metadata: - stix_country = stix2.Location( - id=Location.generate_id(metadata["country"], "Country"), - name=metadata["country"], - country=metadata["country"], - created_by_ref=self.identity["standard_id"], - object_marking_refs=[stix2.TLP_WHITE], - custom_properties={"x_opencti_location_type": "Country"}, - ) - bundle_entities.append(stix_country) - - if stix_city is None: - stix_relationship_observable_city = stix2.Relationship( - id=StixCoreRelationship.generate_id( - "located-at", stix_observable.id, stix_country.id - ), - relationship_type="located-at", - source_ref=stix_observable.id, - target_ref=stix_country.id, - created_by_ref=self.identity["standard_id"], - object_marking_refs=[stix2.TLP_WHITE], - ) - bundle_relationships.append( - stix_relationship_observable_city - ) - else: - stix_relationship_city_country = stix2.Relationship( - id=StixCoreRelationship.generate_id( - "located-at", stix_city.id, stix_country.id - ), - relationship_type="located-at", - source_ref=stix_city.id, - target_ref=stix_country.id, - created_by_ref=self.identity["standard_id"], - object_marking_refs=[stix2.TLP_WHITE], - ) - bundle_relationships.append(stix_relationship_city_country) - if ( - self.config.greynoise_feed.import_destination_sightings - and "destination_countries" in metadata - ): - for country in metadata["destination_countries"]: - stix_country_destination = stix2.Location( - id=Location.generate_id(country, "Country"), - name=country, - country=country, - created_by_ref=self.identity["standard_id"], - object_marking_refs=[stix2.TLP_WHITE], - custom_properties={ - "x_opencti_location_type": "Country" - }, - ) - bundle_entities.append(stix_country_destination) - - stix_sighting_indicator = stix2.Sighting( - id=StixSightingRelationship.generate_id( - stix_indicator.id, - stix_country_destination.id, - first_seen, - last_seen, - ), - sighting_of_ref=stix_indicator.id, - where_sighted_refs=[stix_country_destination.id], - count=1, - first_seen=first_seen, - last_seen=last_seen, - created_by_ref=self.identity["standard_id"], - object_marking_refs=[stix2.TLP_GREEN], - ) - bundle_relationships.append(stix_sighting_indicator) - # Creating the bundle from the list if len(bundle_entities) > 0: shuffle(bundle_relationships) @@ -538,10 +284,23 @@ def process(self): # Get the current timestamp and check now = datetime.now(pytz.UTC) current_state = self.helper.get_state() + if ( + current_state is not None + and "api_key_error" in current_state + and current_state["api_key_error"] + ): + self.helper.log_error( + "API Key Error - Connector will not run - Update API Key and Clear State to Run Again" + ) + return if current_state is not None and "last_run_timestamp" in current_state: last_run_timestamp = parse(current_state["last_run_timestamp"]) else: last_run_timestamp = now - timedelta(days=1) + if current_state is not None and "most_recent_last_seen" in current_state: + most_recent_last_seen = parse(current_state["most_recent_last_seen"]) + else: + most_recent_last_seen = datetime.now(pytz.UTC) - timedelta(days=30) self.helper.log_info( "Fetching GreyNoise feeds since " @@ -550,23 +309,50 @@ def process(self): try: ips_list = [] - session = GreyNoise( + api_config = APIConfig( api_key=self.config.greynoise_feed.api_key.get_secret_value(), - integration_name="opencti-feed-v2.4", + integration_name=INTEGRATION_NAME, ) + session = GreyNoise(api_config) query = self.get_feed_query(self.config.greynoise_feed.feed_type) self.helper.log_info( "Querying GreyNoise API - First Results Page (" + query + ")" ) - response = session.query(query=query, exclude_raw=True) - complete = response.get("complete", True) - scroll = response.get("scroll", "") + response = session.query(query=query, exclude_raw=True, size=5000) + complete = response.get("request_metadata", {}).get("complete", True) + scroll = response.get("request_metadata", {}).get("scroll", "") + most_recent_timestamp = None # Process if "data" in response and len(response["data"]) > 0: + added_count = 0 + skip_count = 0 for ip in response["data"]: - ips_list.append(ip) + last_seen_str = ip.get("internet_scanner_intelligence", {}).get( + "last_seen_timestamp", "" + ) + # Parse the timestamp string (format: "2026-01-26 19:59:37") to a timezone-aware datetime + try: + last_seen_dt = datetime.strptime( + last_seen_str, "%Y-%m-%d %H:%M:%S" + ).replace(tzinfo=pytz.UTC) + except ValueError: + # Skip entries with an unparsable timestamp + skip_count += 1 + continue + if last_seen_dt > most_recent_last_seen: + ips_list.append(ip) + added_count += 1 + if ( + most_recent_timestamp is None + or most_recent_timestamp < last_seen_dt + ): + most_recent_timestamp = last_seen_dt + else: + skip_count += 1 + self.helper.log_info("Added: " + str(added_count) + " IPs") + self.helper.log_info("Skipped: " + str(skip_count) + " IPs") if len(ips_list) >= self.config.greynoise_feed.limit: complete = True @@ -577,22 +363,49 @@ def process(self): "Query GreyNoise API - Next Results Page (" + query + ")" ) response = session.query( - query=query, scroll=scroll, exclude_raw=True + query=query, scroll=scroll, exclude_raw=True, size=5000 ) - complete = response.get("complete", True) - scroll = response.get("scroll", "") + complete = response.get("request_metadata", {}).get( + "complete", True + ) + scroll = response.get("request_metadata", {}).get("scroll", "") # Process if "data" in response and len(response["data"]) > 0: + added_count = 0 + skip_count = 0 for ip in response["data"]: - ips_list.append(ip) + last_seen_str = ip.get( + "internet_scanner_intelligence", {} + ).get("last_seen_timestamp", "") + # Parse the timestamp string (format: "2026-01-26 19:59:37") to a timezone-aware datetime + last_seen_dt = datetime.strptime( + last_seen_str, "%Y-%m-%d %H:%M:%S" + ).replace(tzinfo=pytz.UTC) + if last_seen_dt > most_recent_last_seen: + ips_list.append(ip) + added_count += 1 + if ( + most_recent_timestamp is None + or most_recent_timestamp < last_seen_dt + ): + most_recent_timestamp = last_seen_dt + else: + skip_count += 1 + self.helper.log_info("Added: " + str(added_count) + " IPs") + self.helper.log_info("Skipped: " + str(skip_count) + " IPs") if len(ips_list) >= self.config.greynoise_feed.limit: complete = True ips_list = ips_list[0 : self.config.greynoise_feed.limit] + if most_recent_timestamp is not None: + most_recent_last_seen = most_recent_timestamp self.helper.log_info("Query GreyNoise API - Completed") self.helper.log_info("GreyNoise Indicator Count: " + str(len(ips_list))) + self.helper.log_info( + "Most Recent Last Seen: " + most_recent_last_seen.isoformat() + ) # Process friendly_name = ( @@ -601,16 +414,38 @@ def process(self): work_id = self.helper.api.work.initiate_work( self.helper.connect_id, friendly_name ) - self._process_data(work_id, session, ips_list) + self._process_data(work_id, ips_list) message = ( "Connector successfully run, storing last_run_timestamp as " + now.astimezone(pytz.UTC).isoformat() + + " and most_recent_last_seen as " + + most_recent_last_seen.isoformat() ) self.helper.api.work.to_processed(work_id, message) self.helper.log_info(message) self.helper.set_state( - {"last_run_timestamp": now.astimezone(pytz.UTC).isoformat()} + { + "last_run_timestamp": now.astimezone(pytz.UTC).isoformat(), + "most_recent_last_seen": most_recent_last_seen.isoformat(), + "api_key_error": False, + } ) + + except RequestFailure as e: + status_code = e.args[0] + if status_code == 401: + self.helper.set_state( + { + "last_run_timestamp": now.astimezone(pytz.UTC).isoformat(), + "most_recent_last_seen": most_recent_last_seen.isoformat(), + "api_key_error": True, + } + ) + self.helper.log_error( + "API authentication failed - your plan may not support this endpoint" + ) + else: + self.helper.log_error(str(e)) except Exception as e: self.helper.log_error(str(e)) diff --git a/external-import/greynoise-feed/src/requirements.txt b/external-import/greynoise-feed/src/requirements.txt index 06fc9c77f23..a216068ad05 100644 --- a/external-import/greynoise-feed/src/requirements.txt +++ b/external-import/greynoise-feed/src/requirements.txt @@ -1,6 +1,6 @@ -urllib3==2.6.3 -pycti==7.260309.0 +urllib3==2.7.0 +pycti==7.260515.0 certifi==2025.11.12 -greynoise==2.3.0 +greynoise==3.0.1 pydantic>=2.10, <3 pydantic-settings~=2.9.1 \ No newline at end of file diff --git a/external-import/group-ib/.build.env b/external-import/group-ib/.build.env new file mode 100644 index 00000000000..cdcc029ce2e --- /dev/null +++ b/external-import/group-ib/.build.env @@ -0,0 +1,2 @@ +EXTRA_PACKAGES="libxslt libxml2" + diff --git a/external-import/group-ib/Dockerfile b/external-import/group-ib/Dockerfile index 6a9e0b5dac5..170d53e3317 100644 --- a/external-import/group-ib/Dockerfile +++ b/external-import/group-ib/Dockerfile @@ -4,17 +4,13 @@ ENV CONNECTOR_TYPE=EXTERNAL_IMPORT # Install Python modules # hadolint ignore=DL3003 RUN apk --no-cache add git build-base libmagic libffi-dev libxml2-dev libxslt-dev -COPY requirements.txt /tmp/requirements.txt -RUN pip3 install --no-cache-dir -r /tmp/requirements.txt -RUN rm -rf /var/cache/apk/* # Copy the connector COPY src /opt/connector/src -COPY docs /opt/connector/docs WORKDIR /opt/connector/src -# Install TI API lib -RUN pip3 install /opt/connector/src/lib/cyberintegrations-0.13.1-py3-none-any.whl +RUN pip3 install --no-cache-dir -r /opt/connector/src/requirements.txt +RUN rm -rf /var/cache/apk/* # Expose and entrypoint COPY entrypoint.sh / diff --git a/external-import/group-ib/README.md b/external-import/group-ib/README.md index c47b60f08ce..5dcde4a1b25 100644 --- a/external-import/group-ib/README.md +++ b/external-import/group-ib/README.md @@ -105,7 +105,7 @@ nano .env 2. Install dependencies: ```bash -pip3 install -r requirements.txt +pip3 install -r src/requirements.txt ``` 3. Start the connector: diff --git a/external-import/group-ib/requirements.txt b/external-import/group-ib/requirements.txt deleted file mode 100644 index c0d8040edf0..00000000000 --- a/external-import/group-ib/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -pycti==7.260309.0 -python-dotenv==1.1.1 -stix2==3.0.1 -isodate==0.7.2 \ No newline at end of file diff --git a/external-import/group-ib/src/config.py b/external-import/group-ib/src/config.py index f0b5813c949..38170933271 100644 --- a/external-import/group-ib/src/config.py +++ b/external-import/group-ib/src/config.py @@ -126,7 +126,7 @@ def get_extra_settings_by_name(self, setting_name): ROOT_DIR = os.path.abspath(os.path.dirname(os.path.dirname(__file__))) # Set basedirs - DOCS_DIR = os.path.join(ROOT_DIR, "docs") + DOCS_DIR = os.path.join(os.path.dirname(__file__), "docs") LOGS_DIR = os.path.join(ROOT_DIR, "log") # Set up logging diff --git a/external-import/group-ib/docs/configs/mapping.json b/external-import/group-ib/src/docs/configs/mapping.json similarity index 100% rename from external-import/group-ib/docs/configs/mapping.json rename to external-import/group-ib/src/docs/configs/mapping.json diff --git a/external-import/group-ib/docs/configs/qmapping.py b/external-import/group-ib/src/docs/configs/qmapping.py similarity index 100% rename from external-import/group-ib/docs/configs/qmapping.py rename to external-import/group-ib/src/docs/configs/qmapping.py diff --git a/external-import/group-ib/src/lib/cyberintegrations-0.13.1-py3-none-any.whl b/external-import/group-ib/src/lib/cyberintegrations-0.13.1-py3-none-any.whl deleted file mode 100644 index 7c8e52512be..00000000000 Binary files a/external-import/group-ib/src/lib/cyberintegrations-0.13.1-py3-none-any.whl and /dev/null differ diff --git a/external-import/group-ib/src/requirements.txt b/external-import/group-ib/src/requirements.txt new file mode 100644 index 00000000000..90854975ce4 --- /dev/null +++ b/external-import/group-ib/src/requirements.txt @@ -0,0 +1,5 @@ +cyberintegrations==0.14.1 +pycti==7.260515.0 +python-dotenv==1.2.2 +stix2==3.0.1 +isodate==0.7.2 \ No newline at end of file diff --git a/external-import/harfanglab-incidents/src/harfanglab_incidents_connector/models/harfanglab.py b/external-import/harfanglab-incidents/src/harfanglab_incidents_connector/models/harfanglab.py index baf87d97d18..1770d916b2b 100644 --- a/external-import/harfanglab-incidents/src/harfanglab_incidents_connector/models/harfanglab.py +++ b/external-import/harfanglab-incidents/src/harfanglab_incidents_connector/models/harfanglab.py @@ -74,11 +74,15 @@ def __init__(self, data: dict): self.name = data.get("process_name") or None hashes_data = data.get("hashes") or {} self.hashes = { - # "SHA-512": hashes_data.get("sha512"), - "SHA-256": hashes_data.get("sha256"), - "SHA-1": hashes_data.get("sha1"), - "MD5": hashes_data.get("md5"), - } + k: v + for k, v in { + # "SHA-512": hashes_data.get("sha512"), + "SHA-256": hashes_data.get("sha256"), + "SHA-1": hashes_data.get("sha1"), + "MD5": hashes_data.get("md5"), + }.items() + if v + } or None class SigmaRule: diff --git a/external-import/harfanglab-incidents/src/harfanglab_incidents_connector/models/opencti.py b/external-import/harfanglab-incidents/src/harfanglab_incidents_connector/models/opencti.py index 0492e7edf0a..89410b7f379 100644 --- a/external-import/harfanglab-incidents/src/harfanglab_incidents_connector/models/opencti.py +++ b/external-import/harfanglab-incidents/src/harfanglab_incidents_connector/models/opencti.py @@ -234,14 +234,16 @@ def __init__( self.__post_init__() def to_stix2_object(self) -> stix2.File: - return stix2.File( - name=self.name, - hashes=self.hashes, - object_marking_refs=self.object_marking_refs, - custom_properties={ + kwargs = { + "name": self.name, + "object_marking_refs": self.object_marking_refs, + "custom_properties": { "created_by_ref": self.author.id, }, - ) + } + if self.hashes: + kwargs["hashes"] = self.hashes + return stix2.File(**kwargs) class Hostname(BaseModel): diff --git a/external-import/harfanglab-incidents/src/requirements.txt b/external-import/harfanglab-incidents/src/requirements.txt index 457c08147a1..f2e0415f654 100644 --- a/external-import/harfanglab-incidents/src/requirements.txt +++ b/external-import/harfanglab-incidents/src/requirements.txt @@ -1,2 +1,2 @@ -pycti==7.260309.0 +pycti==7.260515.0 validators==0.35.0 \ No newline at end of file diff --git a/external-import/proofpoint-tap/proofpoint_tap/domain/use_cases/__init__.py b/external-import/harfanglab-incidents/tests/__init__.py similarity index 100% rename from external-import/proofpoint-tap/proofpoint_tap/domain/use_cases/__init__.py rename to external-import/harfanglab-incidents/tests/__init__.py diff --git a/external-import/harfanglab-incidents/tests/conftest.py b/external-import/harfanglab-incidents/tests/conftest.py new file mode 100644 index 00000000000..db6b3ca790b --- /dev/null +++ b/external-import/harfanglab-incidents/tests/conftest.py @@ -0,0 +1,14 @@ +""" +Pytest configuration file for harfanglab-incidents connector tests. +""" + +import sys +from pathlib import Path + +parent_dir = str(Path(__file__).parent.parent.absolute()) +src_dir = str(Path(__file__).parent.parent.joinpath("src").absolute()) + +if parent_dir not in sys.path: + sys.path.insert(0, parent_dir) +if src_dir not in sys.path: + sys.path.insert(0, src_dir) diff --git a/external-import/harfanglab-incidents/tests/test-requirements.txt b/external-import/harfanglab-incidents/tests/test-requirements.txt new file mode 100644 index 00000000000..f0a424084c9 --- /dev/null +++ b/external-import/harfanglab-incidents/tests/test-requirements.txt @@ -0,0 +1,4 @@ +pytest>=7.0.0 +pytest-mock>=3.10.0 +pycti==7.260515.0 +validators==0.35.0 diff --git a/external-import/harfanglab-incidents/tests/test_models_harfanglab.py b/external-import/harfanglab-incidents/tests/test_models_harfanglab.py new file mode 100644 index 00000000000..7b84e5fabf3 --- /dev/null +++ b/external-import/harfanglab-incidents/tests/test_models_harfanglab.py @@ -0,0 +1,104 @@ +"""Tests for harfanglab models.""" + +from harfanglab_incidents_connector.models.harfanglab import Process + + +class TestProcessHashes: + """Tests for Process hash parsing, including fix for issue #5707.""" + + def test_hashes_all_present(self): + """When all hashes are provided, they should all be in the dict.""" + data = { + "process_name": "malware.exe", + "hashes": { + "sha256": "a" * 64, + "sha1": "b" * 40, + "md5": "c" * 32, + }, + } + process = Process(data) + assert process.hashes == { + "SHA-256": "a" * 64, + "SHA-1": "b" * 40, + "MD5": "c" * 32, + } + + def test_hashes_partial(self): + """When only some hashes are provided, only those should be in the dict.""" + data = { + "process_name": "malware.exe", + "hashes": { + "sha256": "a" * 64, + "sha1": None, + "md5": None, + }, + } + process = Process(data) + assert process.hashes == {"SHA-256": "a" * 64} + + def test_hashes_all_none(self): + """When all hash values are None, hashes should be None (fix for #5707).""" + data = { + "process_name": "malware.exe", + "hashes": { + "sha256": None, + "sha1": None, + "md5": None, + }, + } + process = Process(data) + assert process.hashes is None + + def test_hashes_empty_dict(self): + """When hashes dict is empty, hashes should be None.""" + data = { + "process_name": "malware.exe", + "hashes": {}, + } + process = Process(data) + assert process.hashes is None + + def test_hashes_missing_key(self): + """When 'hashes' key is missing from data, hashes should be None.""" + data = { + "process_name": "malware.exe", + } + process = Process(data) + assert process.hashes is None + + def test_hashes_none_value(self): + """When 'hashes' is explicitly None in data, hashes should be None.""" + data = { + "process_name": "malware.exe", + "hashes": None, + } + process = Process(data) + assert process.hashes is None + + def test_hashes_empty_strings_filtered(self): + """Empty string hash values should be filtered out.""" + data = { + "process_name": "malware.exe", + "hashes": { + "sha256": "", + "sha1": "", + "md5": "c" * 32, + }, + } + process = Process(data) + assert process.hashes == {"MD5": "c" * 32} + + def test_process_name(self): + """Process name should be correctly parsed.""" + data = { + "process_name": "explorer.exe", + "hashes": {"sha256": "a" * 64}, + } + process = Process(data) + assert process.name == "explorer.exe" + + def test_process_name_missing(self): + """Missing process name should result in None.""" + data = {"hashes": {}} + process = Process(data) + assert process.name is None diff --git a/external-import/harfanglab-incidents/tests/test_models_opencti.py b/external-import/harfanglab-incidents/tests/test_models_opencti.py new file mode 100644 index 00000000000..dcd4d84f3f0 --- /dev/null +++ b/external-import/harfanglab-incidents/tests/test_models_opencti.py @@ -0,0 +1,81 @@ +"""Tests for OpenCTI models, focusing on File observable (fix for issue #5707).""" + +from harfanglab_incidents_connector.models.opencti import Author, File + + +class TestFileModel: + """Tests for File model STIX2 conversion, including fix for issue #5707.""" + + def _make_author(self): + return Author(name="HarfangLab", description="Test author") + + def test_file_with_hashes(self): + """File with valid hashes should produce a STIX2 File with hashes.""" + author = self._make_author() + hashes = {"SHA-256": "a" * 64, "MD5": "c" * 32} + file_obj = File( + name="malware.exe", + hashes=hashes, + author=author, + ) + stix_obj = file_obj.to_stix2_object() + assert stix_obj["type"] == "file" + assert stix_obj["name"] == "malware.exe" + assert stix_obj["hashes"]["SHA-256"] == "a" * 64 + assert stix_obj["hashes"]["MD5"] == "c" * 32 + + def test_file_with_none_hashes(self): + """File with hashes=None should not crash (fix for #5707).""" + author = self._make_author() + file_obj = File( + name="malware.exe", + hashes=None, + author=author, + ) + stix_obj = file_obj.to_stix2_object() + assert stix_obj["type"] == "file" + assert stix_obj["name"] == "malware.exe" + assert "hashes" not in stix_obj or stix_obj.get("hashes") is None + + def test_file_with_empty_hashes(self): + """File with hashes={} should not crash.""" + author = self._make_author() + file_obj = File( + name="malware.exe", + hashes={}, + author=author, + ) + stix_obj = file_obj.to_stix2_object() + assert stix_obj["type"] == "file" + assert stix_obj["name"] == "malware.exe" + assert "hashes" not in stix_obj or stix_obj.get("hashes") is None + + def test_file_has_author_ref(self): + """File should have created_by_ref set to author id.""" + author = self._make_author() + file_obj = File( + name="test.bin", + hashes={"SHA-256": "a" * 64}, + author=author, + ) + stix_obj = file_obj.to_stix2_object() + assert stix_obj["created_by_ref"] == author.id + + def test_file_has_marking_refs(self): + """File should have default marking definitions.""" + author = self._make_author() + file_obj = File( + name="test.bin", + hashes={"SHA-256": "a" * 64}, + author=author, + ) + stix_obj = file_obj.to_stix2_object() + assert len(stix_obj["object_marking_refs"]) > 0 + + def test_file_id_is_deterministic(self): + """Same file params should produce the same STIX ID.""" + author = self._make_author() + kwargs = dict(name="test.bin", hashes={"SHA-256": "a" * 64}, author=author) + file1 = File(**kwargs) + file2 = File(**kwargs) + assert file1.id == file2.id diff --git a/external-import/hunt-io/src/requirements.txt b/external-import/hunt-io/src/requirements.txt index 371d3c8649b..d608ae8f719 100644 --- a/external-import/hunt-io/src/requirements.txt +++ b/external-import/hunt-io/src/requirements.txt @@ -1,4 +1,4 @@ -pycti==7.260309.0 +pycti==7.260515.0 validators==0.35.0 ruff==0.14.2 pydantic>=2.10, <3 diff --git a/external-import/ibm-xti/src/requirements.txt b/external-import/ibm-xti/src/requirements.txt index 8224ce92468..12d81b3fa0b 100644 --- a/external-import/ibm-xti/src/requirements.txt +++ b/external-import/ibm-xti/src/requirements.txt @@ -1,4 +1,4 @@ -pycti==7.260309.0 +pycti==7.260515.0 pydantic~=2.11.3 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk validators==0.35.0 diff --git a/external-import/infoblox/src/requirements.txt b/external-import/infoblox/src/requirements.txt index 0e6a86a7240..f57736a330a 100644 --- a/external-import/infoblox/src/requirements.txt +++ b/external-import/infoblox/src/requirements.txt @@ -1,5 +1,5 @@ stix2==3.0.1 -requests==2.32.5 +requests==2.33.0 PyYAML==6.0.3 -pycti==7.260309.0 +pycti==7.260515.0 diff --git a/external-import/intel471/src/requirements.txt b/external-import/intel471/src/requirements.txt index 4600f3821f8..b427ede7be7 100644 --- a/external-import/intel471/src/requirements.txt +++ b/external-import/intel471/src/requirements.txt @@ -1,4 +1,4 @@ -pycti==7.260309.0 +pycti==7.260515.0 stix2~=3.0.1 APScheduler~=3.11.0 Titan-Client==1.20.0.13 \ No newline at end of file diff --git a/external-import/intel471_v2/src/requirements.txt b/external-import/intel471_v2/src/requirements.txt index 7e975f5c8a2..68631a6e9d5 100644 --- a/external-import/intel471_v2/src/requirements.txt +++ b/external-import/intel471_v2/src/requirements.txt @@ -1,4 +1,4 @@ -pycti==7.260309.0 +pycti==7.260515.0 stix2~=3.0.1 APScheduler~=3.11.0 Titan-Client==1.20.0.15 diff --git a/external-import/intel471_v2/tests/test-requirements.txt b/external-import/intel471_v2/tests/test-requirements.txt index bdef682113c..d405632324b 100644 --- a/external-import/intel471_v2/tests/test-requirements.txt +++ b/external-import/intel471_v2/tests/test-requirements.txt @@ -1,2 +1,2 @@ -r ../src/requirements.txt -pytest==8.4.2 +pytest==9.0.3 diff --git a/external-import/intelfinder/README.md b/external-import/intelfinder/README.md index 6fe1289a190..f4f76f97434 100644 --- a/external-import/intelfinder/README.md +++ b/external-import/intelfinder/README.md @@ -35,7 +35,7 @@ The connector supports extraction of various indicator types from alert elements ### Requirements -- OpenCTI Platform >= 7.260309.0 +- OpenCTI Platform >= 7.260515.0 - Intelfinder subscription with API access - Intelfinder API Token (obtain from https://dash.intelfinder.io/integrations.php?i=api) diff --git a/external-import/intelfinder/src/requirements.txt b/external-import/intelfinder/src/requirements.txt index e7fd9d3d04d..458b015e0ff 100644 --- a/external-import/intelfinder/src/requirements.txt +++ b/external-import/intelfinder/src/requirements.txt @@ -1,4 +1,4 @@ -pycti==7.260309.0 +pycti==7.260515.0 markdownify validators pandas==2.3.3 diff --git a/external-import/ipsum/src/requirements.txt b/external-import/ipsum/src/requirements.txt index 457c08147a1..f2e0415f654 100644 --- a/external-import/ipsum/src/requirements.txt +++ b/external-import/ipsum/src/requirements.txt @@ -1,2 +1,2 @@ -pycti==7.260309.0 +pycti==7.260515.0 validators==0.35.0 \ No newline at end of file diff --git a/external-import/ironnet/src/requirements.txt b/external-import/ironnet/src/requirements.txt index df8df26471c..b13dd498ca2 100644 --- a/external-import/ironnet/src/requirements.txt +++ b/external-import/ironnet/src/requirements.txt @@ -1,2 +1,2 @@ -pycti==7.260309.0 +pycti==7.260515.0 pydantic>=2.8.2,<3.0.0 \ No newline at end of file diff --git a/external-import/kaspersky/src/requirements.txt b/external-import/kaspersky/src/requirements.txt index 9ba2e61e221..ced53d0b777 100644 --- a/external-import/kaspersky/src/requirements.txt +++ b/external-import/kaspersky/src/requirements.txt @@ -1,3 +1,3 @@ -pycti==7.260309.0 +pycti==7.260515.0 pydantic>=2.8.2,<3.0.0 -lxml==5.4.0 +lxml==6.1.0 diff --git a/external-import/lastinfosec/src/requirements.txt b/external-import/lastinfosec/src/requirements.txt index 2e1238a8a8e..7ba225bbd73 100644 --- a/external-import/lastinfosec/src/requirements.txt +++ b/external-import/lastinfosec/src/requirements.txt @@ -1,2 +1,2 @@ -pycti==7.260309.0 -urllib3==2.6.3 +pycti==7.260515.0 +urllib3==2.7.0 diff --git a/external-import/lia-file-feed/src/requirements.txt b/external-import/lia-file-feed/src/requirements.txt index e1e0bd9718c..e3a19393203 100644 --- a/external-import/lia-file-feed/src/requirements.txt +++ b/external-import/lia-file-feed/src/requirements.txt @@ -1 +1 @@ -pycti==7.260309.0 +pycti==7.260515.0 diff --git a/external-import/luminar/src/luminar_connector/connector.py b/external-import/luminar/src/luminar_connector/connector.py index 85b34f32c6e..267e4dac836 100644 --- a/external-import/luminar/src/luminar_connector/connector.py +++ b/external-import/luminar/src/luminar_connector/connector.py @@ -138,6 +138,7 @@ def __init__(self) -> None: "scope": "externalAPI/stix.readonly", } self.req_headers = HEADERS + self._current_access_token: Optional[str] = None def access_token(self) -> Tuple[Union[bool, str], str]: """ @@ -169,9 +170,30 @@ def access_token(self) -> Tuple[Union[bool, str], str]: # Process successful response access_token = response.json().get("access_token") if access_token: + # FIX: Store the token at instance level so that _auth_headers() + # always returns the most recent valid token. + self._current_access_token = access_token return access_token, "Luminar API Connected successfully" return False, "Access token not found in response" + def _auth_headers(self) -> Dict[str, str]: + """Return authorization headers using the current access token.""" + return {"Authorization": f"Bearer {self._current_access_token}"} + + def _refresh_access_token(self) -> bool: + """ + Attempt to refresh the access token. + + :return: True if a new valid token was obtained, False otherwise. + """ + new_token, message = self.access_token() + if not new_token: + self.helper.connector_logger.error( + f"Failed to refresh access token: {message}" + ) + return False + return True + def get_taxii_collections(self, headers: Dict[str, str]) -> Dict[str, str]: """ Fetches TAXII collections from the Luminar API and returns a mapping of @@ -255,10 +277,11 @@ def get_collection_objects( refreshed_token = False while retry_count < max_retries: + resp = requests.get( f"{self.luminar_base_url}/externalApi/taxii/collections/{collection}/objects/", params=parameters, - headers=headers, + headers=self._auth_headers(), timeout=TIMEOUT, ) @@ -286,8 +309,12 @@ def get_collection_objects( self.helper.connector_logger.info( f"Access token expired. Status code: 401, response: {resp.text}. Refreshing token..." ) - access_token, _ = self.access_token() - headers = {"Authorization": f"Bearer {access_token}"} + + if not self._refresh_access_token(): + self.helper.connector_logger.error( + "Token refresh failed. Aborting collection fetch." + ) + return collection_objects refreshed_token = True retry_count += 1 @@ -928,8 +955,7 @@ def process_message(self): ) return - headers = {"Authorization": f"Bearer {access_token}"} - taxii_collection = self.get_taxii_collections(headers) + taxii_collection = self.get_taxii_collections(self._auth_headers()) if not taxii_collection: return @@ -950,21 +976,21 @@ def process_message(self): ) ioc_records = self.get_collection_objects( - headers, taxii_collection["iocs"], params + self._auth_headers(), taxii_collection["iocs"], params ) self.helper.connector_logger.info( f"IOC records fetched: {len(ioc_records)}" ) leaked_records = self.get_collection_objects( - headers, taxii_collection["leakedrecords"], params + self._auth_headers(), taxii_collection["leakedrecords"], params ) self.helper.connector_logger.info( f"Leaked records fetched: {len(leaked_records)}" ) cyberfeeds_records = self.get_collection_objects( - headers, taxii_collection["cyberfeeds"], params + self._auth_headers(), taxii_collection["cyberfeeds"], params ) self.helper.connector_logger.info( f"cyberfeeds records fetched: {len(cyberfeeds_records)}" diff --git a/external-import/luminar/src/requirements.txt b/external-import/luminar/src/requirements.txt index 65a163ae779..a68f92d160a 100644 --- a/external-import/luminar/src/requirements.txt +++ b/external-import/luminar/src/requirements.txt @@ -1,3 +1,3 @@ -pycti==7.260309.0 -urllib3==2.6.3 +pycti==7.260515.0 +urllib3==2.7.0 stix2-validator==3.2.0 diff --git a/external-import/malcore/README.md b/external-import/malcore/README.md index 5cd7faf2695..c56deb21849 100644 --- a/external-import/malcore/README.md +++ b/external-import/malcore/README.md @@ -20,7 +20,7 @@ The connector creates the following OpenCTI entity types: ### Requirements -- OpenCTI Platform >= 7.260309.0 +- OpenCTI Platform >= 7.260515.0 ### Configuration diff --git a/external-import/malcore/src/requirements.txt b/external-import/malcore/src/requirements.txt index 2e1238a8a8e..7ba225bbd73 100644 --- a/external-import/malcore/src/requirements.txt +++ b/external-import/malcore/src/requirements.txt @@ -1,2 +1,2 @@ -pycti==7.260309.0 -urllib3==2.6.3 +pycti==7.260515.0 +urllib3==2.7.0 diff --git a/external-import/malpedia/src/requirements.txt b/external-import/malpedia/src/requirements.txt index 401ef373847..8793afb7304 100644 --- a/external-import/malpedia/src/requirements.txt +++ b/external-import/malpedia/src/requirements.txt @@ -1,4 +1,4 @@ -pycti==7.260309.0 +pycti==7.260515.0 pydantic>=2.8.2,<3.0.0 pycountry==24.6.1 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk diff --git a/external-import/maltiverse/README.md b/external-import/maltiverse/README.md index 0fc172882b6..8d8a444c0c3 100644 --- a/external-import/maltiverse/README.md +++ b/external-import/maltiverse/README.md @@ -35,7 +35,7 @@ This connector fetches STIX bundles from Maltiverse TAXII 2.1 collections and im ### Requirements -- OpenCTI Platform >= 7.260309.0 +- OpenCTI Platform >= 7.260515.0 - Maltiverse account with feed access - TAXII 2.1 client library (`taxii2client`) diff --git a/external-import/maltiverse/src/requirements.txt b/external-import/maltiverse/src/requirements.txt index 3f39be39bfb..e127e9649a5 100644 --- a/external-import/maltiverse/src/requirements.txt +++ b/external-import/maltiverse/src/requirements.txt @@ -1,2 +1,2 @@ -pycti==7.260309.0 +pycti==7.260515.0 taxii2-client diff --git a/external-import/malwarebazaar-recent-additions/src/requirements.txt b/external-import/malwarebazaar-recent-additions/src/requirements.txt index f5c5ce8e642..81b3e6975e4 100644 --- a/external-import/malwarebazaar-recent-additions/src/requirements.txt +++ b/external-import/malwarebazaar-recent-additions/src/requirements.txt @@ -1,4 +1,4 @@ -pycti==7.260309.0 +pycti==7.260515.0 pyzipper==0.3.6 stix2==3.0.1 pydantic >=2.8.2, <3 diff --git a/external-import/malwarebazaar-recent-additions/tests/test-requirements.txt b/external-import/malwarebazaar-recent-additions/tests/test-requirements.txt index bdef682113c..d405632324b 100644 --- a/external-import/malwarebazaar-recent-additions/tests/test-requirements.txt +++ b/external-import/malwarebazaar-recent-additions/tests/test-requirements.txt @@ -1,2 +1,2 @@ -r ../src/requirements.txt -pytest==8.4.2 +pytest==9.0.3 diff --git a/external-import/malwarebazaar/src/requirements.txt b/external-import/malwarebazaar/src/requirements.txt index dd02ecb0772..7a5b6812598 100644 --- a/external-import/malwarebazaar/src/requirements.txt +++ b/external-import/malwarebazaar/src/requirements.txt @@ -1,5 +1,5 @@ -pycti==7.260309.0 -requests~=2.32.3 +pycti==7.260515.0 +requests~=2.33.0 stix2==3.0.1 validators==0.35.0 pydantic >=2.8.2, <3 diff --git a/external-import/malwarebazaar/tests/test-requirements.txt b/external-import/malwarebazaar/tests/test-requirements.txt index bdef682113c..d405632324b 100644 --- a/external-import/malwarebazaar/tests/test-requirements.txt +++ b/external-import/malwarebazaar/tests/test-requirements.txt @@ -1,2 +1,2 @@ -r ../src/requirements.txt -pytest==8.4.2 +pytest==9.0.3 diff --git a/external-import/mandiant/src/requirements.txt b/external-import/mandiant/src/requirements.txt index 246ab578813..6ee5c0636db 100644 --- a/external-import/mandiant/src/requirements.txt +++ b/external-import/mandiant/src/requirements.txt @@ -1,4 +1,4 @@ -pycti==7.260309.0 +pycti==7.260515.0 pydantic>=2.11.10, <3 pydantic-settings==2.11.0 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk \ No newline at end of file diff --git a/external-import/microsoft-defender-incidents/src/requirements.txt b/external-import/microsoft-defender-incidents/src/requirements.txt index e1e0bd9718c..e3a19393203 100644 --- a/external-import/microsoft-defender-incidents/src/requirements.txt +++ b/external-import/microsoft-defender-incidents/src/requirements.txt @@ -1 +1 @@ -pycti==7.260309.0 +pycti==7.260515.0 diff --git a/external-import/microsoft-sentinel-incidents/src/microsoft_sentinel_incidents_connector/connector.py b/external-import/microsoft-sentinel-incidents/src/microsoft_sentinel_incidents_connector/connector.py index 04620de76e2..f2c1842505f 100644 --- a/external-import/microsoft-sentinel-incidents/src/microsoft_sentinel_incidents_connector/connector.py +++ b/external-import/microsoft-sentinel-incidents/src/microsoft_sentinel_incidents_connector/connector.py @@ -185,7 +185,10 @@ def _extract_intelligence( ) stix_objects.append(stix_relationship_account) case "ip": - version = detect_ip_version(entity.get("Address")) + address = entity.get("Address") + if not address: + continue + version = detect_ip_version(address) if version == "ipv4": stix_ip = self.converter_to_stix.create_evidence_ipv4( entity diff --git a/external-import/microsoft-sentinel-incidents/src/requirements.txt b/external-import/microsoft-sentinel-incidents/src/requirements.txt index 98d7df54898..bd5738e9572 100644 --- a/external-import/microsoft-sentinel-incidents/src/requirements.txt +++ b/external-import/microsoft-sentinel-incidents/src/requirements.txt @@ -1,4 +1,4 @@ -pycti==7.260309.0 +pycti==7.260515.0 pydantic >=2.8.2, <3 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk diff --git a/external-import/microsoft-sentinel-incidents/tests/tests_connector/test_extract_ip_entity.py b/external-import/microsoft-sentinel-incidents/tests/tests_connector/test_extract_ip_entity.py new file mode 100644 index 00000000000..adbe5f22745 --- /dev/null +++ b/external-import/microsoft-sentinel-incidents/tests/tests_connector/test_extract_ip_entity.py @@ -0,0 +1,119 @@ +"""Regression tests for #6183: ip entity without Address field must not crash.""" + +import json +from unittest.mock import MagicMock + +import pytest +from microsoft_sentinel_incidents_connector.connector import ( + MicrosoftSentinelIncidentsConnector, + detect_ip_version, +) + + +@pytest.fixture +def connector(): + conn = object.__new__(MicrosoftSentinelIncidentsConnector) + conn.helper = MagicMock() + conn.client = MagicMock() + conn.converter_to_stix = MagicMock() + conn.config = MagicMock() + return conn + + +def _make_alert(entities): + return { + "Entities": json.dumps(entities), + "Techniques": "[]", + "SubTechniques": "[]", + } + + +class TestDetectIpVersion: + def test_ipv4(self): + assert detect_ip_version("192.168.1.1") == "ipv4" + + def test_ipv4_cidr(self): + assert detect_ip_version("10.0.0.0/8") == "ipv4" + + def test_ipv6(self): + assert detect_ip_version("2001:db8::1") == "ipv6" + + +class TestExtractIpEntityWithoutAddress: + """Cover lines 188-191: ip entity with missing Address is skipped.""" + + def test_ip_entity_without_address_is_skipped(self, connector): + """An ip entity with no Address field must be silently skipped (#6183).""" + alert = _make_alert([{"Type": "ip"}]) + connector.client.get_alerts.return_value = [alert] + connector.converter_to_stix.create_incident.return_value = MagicMock( + id="incident--fake" + ) + connector.converter_to_stix.create_custom_case_incident.return_value = ( + MagicMock() + ) + + result = connector._extract_intelligence(0, {"AlertIds": "123"}) + + connector.converter_to_stix.create_evidence_ipv4.assert_not_called() + connector.converter_to_stix.create_evidence_ipv6.assert_not_called() + # Only incident + case, no IP objects + assert len(result) == 2 + + def test_ip_entity_with_none_address_is_skipped(self, connector): + """An ip entity with Address explicitly set to None must be skipped.""" + alert = _make_alert([{"Type": "ip", "Address": None}]) + connector.client.get_alerts.return_value = [alert] + connector.converter_to_stix.create_incident.return_value = MagicMock( + id="incident--fake" + ) + connector.converter_to_stix.create_custom_case_incident.return_value = ( + MagicMock() + ) + + connector._extract_intelligence(0, {"AlertIds": "123"}) + + connector.converter_to_stix.create_evidence_ipv4.assert_not_called() + connector.converter_to_stix.create_evidence_ipv6.assert_not_called() + + def test_ip_entity_with_valid_ipv4_address(self, connector): + """An ip entity with a valid IPv4 address must call create_evidence_ipv4.""" + alert = _make_alert([{"Type": "ip", "Address": "10.0.0.1"}]) + connector.client.get_alerts.return_value = [alert] + connector.converter_to_stix.create_incident.return_value = MagicMock( + id="incident--fake" + ) + connector.converter_to_stix.create_evidence_ipv4.return_value = MagicMock( + id="ipv4-addr--fake" + ) + connector.converter_to_stix.create_custom_case_incident.return_value = ( + MagicMock() + ) + + connector._extract_intelligence(0, {"AlertIds": "123"}) + + connector.converter_to_stix.create_evidence_ipv4.assert_called_once_with( + {"Type": "ip", "Address": "10.0.0.1"} + ) + connector.converter_to_stix.create_evidence_ipv6.assert_not_called() + + def test_ip_entity_with_valid_ipv6_address(self, connector): + """An ip entity with an IPv6 address must call create_evidence_ipv6.""" + alert = _make_alert([{"Type": "ip", "Address": "2001:db8::1"}]) + connector.client.get_alerts.return_value = [alert] + connector.converter_to_stix.create_incident.return_value = MagicMock( + id="incident--fake" + ) + connector.converter_to_stix.create_evidence_ipv6.return_value = MagicMock( + id="ipv6-addr--fake" + ) + connector.converter_to_stix.create_custom_case_incident.return_value = ( + MagicMock() + ) + + connector._extract_intelligence(0, {"AlertIds": "123"}) + + connector.converter_to_stix.create_evidence_ipv6.assert_called_once_with( + {"Type": "ip", "Address": "2001:db8::1"} + ) + connector.converter_to_stix.create_evidence_ipv4.assert_not_called() diff --git a/external-import/misp-feed/README.md b/external-import/misp-feed/README.md index 7fa3b889835..e89ecd95213 100644 --- a/external-import/misp-feed/README.md +++ b/external-import/misp-feed/README.md @@ -64,6 +64,7 @@ There are a number of configuration options, which are set either in `docker-com | Source Type | misp_feed.source_type | `MISP_FEED_SOURCE_TYPE` | url | No | Feed source: `url` or `s3`. | | Feed URL | misp_feed.url | `MISP_FEED_URL` | | Cond. | URL of the MISP feed (required if source_type is `url`). | | SSL Verify | misp_feed.ssl_verify | `MISP_FEED_SSL_VERIFY` | true | No | Verify SSL certificates. | +| HTTP Authorization Header | misp_feed.http_authorization_header | `MISP_FEED_HTTP_AUTHORIZATION_HEADER` | | No | Optional static value of the HTTP `Authorization` header (e.g. `Basic ` or `Bearer `). | | S3 Bucket Name | misp_feed.bucket_name | `MISP_FEED_BUCKET_NAME` | | Cond. | S3 bucket name (required if source_type is `s3`). | | S3 Bucket Prefix | misp_feed.bucket_prefix | `MISP_FEED_BUCKET_PREFIX` | | Cond. | S3 bucket prefix (required if source_type is `s3`). | | Import from Date | misp_feed.import_from_date | `MISP_FEED_IMPORT_FROM_DATE` | | No | Start date for importing events (YYYY-MM-DD). | diff --git a/external-import/misp-feed/__metadata__/CONNECTOR_CONFIG_DOC.md b/external-import/misp-feed/__metadata__/CONNECTOR_CONFIG_DOC.md index 6c71828f011..dfe157914fc 100644 --- a/external-import/misp-feed/__metadata__/CONNECTOR_CONFIG_DOC.md +++ b/external-import/misp-feed/__metadata__/CONNECTOR_CONFIG_DOC.md @@ -16,6 +16,7 @@ Below is an exhaustive enumeration of all configurable parameters available, eac | MISP_FEED_SOURCE_TYPE | `string` | | `url` `s3` | `"url"` | Source type for the MISP feed (`url` or `s3`). | | MISP_FEED_URL | `string` | | string | `null` | The URL of the MISP feed (required if `source_type` is `url`). | | MISP_FEED_SSL_VERIFY | `boolean` | | boolean | `true` | Whether to verify SSL certificates for the feed URL. | +| MISP_FEED_HTTP_AUTHORIZATION_HEADER | `string` | | string | `null` | Optional value of the HTTP `Authorization` header sent on every request to the feed URL (e.g. `Basic ` or `Bearer `). | | MISP_FEED_BUCKET_NAME | `string` | | string | `null` | Bucket Name where the MISP's files are stored | | MISP_FEED_BUCKET_PREFIX | `string` | | string | `null` | Used to filter imports | | MISP_FEED_IMPORT_FROM_DATE | `string` | | Format: [`date-time`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | `null` | Start date for importing data from the MISP feed. | diff --git a/external-import/misp-feed/__metadata__/connector_config_schema.json b/external-import/misp-feed/__metadata__/connector_config_schema.json index e30b017ae62..3d7ae45d12f 100644 --- a/external-import/misp-feed/__metadata__/connector_config_schema.json +++ b/external-import/misp-feed/__metadata__/connector_config_schema.json @@ -71,6 +71,11 @@ "description": "Whether to verify SSL certificates for the feed URL.", "type": "boolean" }, + "MISP_FEED_HTTP_AUTHORIZATION_HEADER": { + "default": null, + "description": "Optional value of the HTTP `Authorization` header sent on every request to the feed URL (e.g. `Basic ` or `Bearer `).", + "type": "string" + }, "MISP_FEED_BUCKET_NAME": { "default": null, "description": "Bucket Name where the MISP's files are stored", diff --git a/external-import/misp-feed/src/connector/connector.py b/external-import/misp-feed/src/connector/connector.py index bf44dd30d6a..00422825ab2 100644 --- a/external-import/misp-feed/src/connector/connector.py +++ b/external-import/misp-feed/src/connector/connector.py @@ -96,8 +96,15 @@ def _retrieve_data(self, url: str) -> Optional[str]: str A string with the content or None in case of failure. """ + headers = {} + if self.config.misp_feed.http_authorization_header: + headers["Authorization"] = self.config.misp_feed.http_authorization_header try: - response = requests.get(url, verify=self.config.misp_feed.ssl_verify) + response = requests.get( + url, + verify=self.config.misp_feed.ssl_verify, + headers=headers or None, + ) response.raise_for_status() return response.text except ( diff --git a/external-import/misp-feed/src/connector/settings.py b/external-import/misp-feed/src/connector/settings.py index b6d048caff6..7ee339e25ee 100644 --- a/external-import/misp-feed/src/connector/settings.py +++ b/external-import/misp-feed/src/connector/settings.py @@ -91,6 +91,13 @@ class MispFeedConfig(BaseConfigModel): description="Whether to verify SSL certificates for the feed URL.", default=True, ) + http_authorization_header: str | None = Field( + description=( + "Optional value of the HTTP `Authorization` header sent on every request " + "to the feed URL (e.g. `Basic ` or `Bearer `)." + ), + default=None, + ) bucket_name: str | None = Field( description="Bucket Name where the MISP's files are stored", default=None, # required only if `source_type` is `s3` diff --git a/external-import/misp-feed/src/requirements.txt b/external-import/misp-feed/src/requirements.txt index ee69fece44e..42263f10a7b 100644 --- a/external-import/misp-feed/src/requirements.txt +++ b/external-import/misp-feed/src/requirements.txt @@ -1,3 +1,3 @@ -pycti==7.260309.0 +pycti==7.260515.0 boto3 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk diff --git a/external-import/misp-feed/tests/test-requirements.txt b/external-import/misp-feed/tests/test-requirements.txt index bdef682113c..d405632324b 100644 --- a/external-import/misp-feed/tests/test-requirements.txt +++ b/external-import/misp-feed/tests/test-requirements.txt @@ -1,2 +1,2 @@ -r ../src/requirements.txt -pytest==8.4.2 +pytest==9.0.3 diff --git a/external-import/misp-feed/tests/tests_connector/test_connector.py b/external-import/misp-feed/tests/tests_connector/test_connector.py new file mode 100644 index 00000000000..0c4de82218e --- /dev/null +++ b/external-import/misp-feed/tests/tests_connector/test_connector.py @@ -0,0 +1,77 @@ +from typing import Any +from unittest.mock import MagicMock + +import pytest +from connector import ConnectorSettings, MispFeed + + +def _build_settings(http_authorization_header: str | None) -> ConnectorSettings: + """Build a `ConnectorSettings` whose `misp_feed.http_authorization_header` is + set to ``http_authorization_header``. + + The Pydantic models are frozen, so the value has to be injected through the + standard `_load_config_dict` extension point rather than mutated afterwards. + """ + + class _StubSettings(ConnectorSettings): + @classmethod + def _load_config_dict(cls, _, handler) -> dict[str, Any]: + misp_feed: dict[str, Any] = { + "source_type": "url", + "url": "http://test.com", + "ssl_verify": True, + } + if http_authorization_header is not None: + misp_feed["http_authorization_header"] = http_authorization_header + return handler( + { + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + "connector": { + "id": "connector-id", + "name": "Test Connector", + "scope": "test, connector", + "log_level": "error", + "duration_period": "PT5M", + }, + "misp_feed": misp_feed, + } + ) + + return _StubSettings() + + +@pytest.fixture +def fake_requests_get(monkeypatch): + fake_response = MagicMock() + fake_response.text = "payload" + fake_get = MagicMock(return_value=fake_response) + monkeypatch.setattr("connector.connector.requests.get", fake_get) + return fake_get + + +def test_retrieve_data_without_authorization_header_omits_headers(fake_requests_get): + """When `http_authorization_header` is not set, no `Authorization` header is sent.""" + connector = MispFeed(config=_build_settings(None), helper=MagicMock()) + + result = connector._retrieve_data("http://test.com/feed") + + assert result == "payload" + fake_requests_get.assert_called_once() + kwargs = fake_requests_get.call_args.kwargs + assert kwargs.get("verify") is True + assert kwargs.get("headers") is None + + +def test_retrieve_data_with_authorization_header_sets_it(fake_requests_get): + """When `http_authorization_header` is set, it is forwarded to `requests.get`.""" + connector = MispFeed(config=_build_settings("Bearer secret"), helper=MagicMock()) + + result = connector._retrieve_data("http://test.com/feed") + + assert result == "payload" + fake_requests_get.assert_called_once() + kwargs = fake_requests_get.call_args.kwargs + assert kwargs.get("headers") == {"Authorization": "Bearer secret"} diff --git a/external-import/misp/README.md b/external-import/misp/README.md index 84257b2177e..41917ae13a7 100644 --- a/external-import/misp/README.md +++ b/external-import/misp/README.md @@ -14,9 +14,6 @@ The MISP connector imports threat intelligence events and attributes from a MISP - [Installation](#installation) - [Requirements](#requirements) - [Configuration variables](#configuration-variables) - - [OpenCTI environment variables](#opencti-environment-variables) - - [Base connector environment variables](#base-connector-environment-variables) - - [Connector extra parameters environment variables](#connector-extra-parameters-environment-variables) - [Deployment](#deployment) - [Docker Deployment](#docker-deployment) - [Manual Deployment](#manual-deployment) @@ -79,6 +76,7 @@ connector-misp: - MISP_IMPORT_FROM_DATE=2010-01-01 - MISP_IMPORT_DISTRIBUTION_LEVELS=0,1,2,3 - MISP_IMPORT_THREAT_LEVELS=1,2,3,4 + - MISP_THREAT_LEVEL_SCORE_MAPPING=1:90;2:60;3:30;4:50 restart: always ``` @@ -189,6 +187,23 @@ The connector supports extensive filtering: - **By Threat Level**: Filter by threat level (1-4) - **By Publication Status**: Only published events +### Threat Level Score Mapping + +MISP exposes four threat levels (`1=High`, `2=Medium`, `3=Low`, `4=Undefined`) which the connector converts into an OpenCTI score on the generated report, indicators and observables. The mapping is configurable through `MISP_THREAT_LEVEL_SCORE_MAPPING` and defaults to `1:90;2:60;3:30;4:50`, which preserves the historical behavior. + +Format and rules: + +- Pairs are separated by `;` and each pair uses `:`. +- `` must be one of `1`, `2`, `3`, `4` and `` must be an integer between `0` and `100`. +- Level `4` must always be defined: it is also used as the fallback score for events that report an unrecognized threat level. +- Invalid input (missing `4`, score out of range, malformed pair, etc.) causes the connector to fail fast at startup with a clear error message. + +Example - importing High-severity MISP events with the platform's "high" score: + +```yaml +- MISP_THREAT_LEVEL_SCORE_MAPPING=1:100;2:70;3:40;4:50 +``` + ## Debugging Enable verbose logging: diff --git a/external-import/misp/__metadata__/CONNECTOR_CONFIG_DOC.md b/external-import/misp/__metadata__/CONNECTOR_CONFIG_DOC.md index b23657d73da..a929594bc48 100644 --- a/external-import/misp/__metadata__/CONNECTOR_CONFIG_DOC.md +++ b/external-import/misp/__metadata__/CONNECTOR_CONFIG_DOC.md @@ -42,6 +42,7 @@ Below is an exhaustive enumeration of all configurable parameters available, eac | MISP_IMPORT_KEYWORD | `string` | | string | `null` | Keyword to use as filter to import MISP events. | | MISP_IMPORT_DISTRIBUTION_LEVELS | `array` | | string | `[]` | List of distribution levels to filter MISP events to import, **including** only events with these distribution levels. | | MISP_IMPORT_THREAT_LEVELS | `array` | | string | `[]` | List of threat levels to filter MISP events to import, **including** only events with these threat levels. | +| MISP_THREAT_LEVEL_SCORE_MAPPING | `string` | | string | `"1:90;2:60;3:30;4:50"` | Mapping of MISP threat levels (1=High, 2=Medium, 3=Low, 4=Undefined) to OpenCTI scores. Format: ':;:'. Each score must be an integer between 0 and 100; level '4' must be defined and is also used as the fallback score for events with an unrecognized threat level. | | MISP_IMPORT_ONLY_PUBLISHED | `boolean` | | boolean | `false` | Whether to only import published MISP events or not. | | MISP_IMPORT_WITH_ATTACHMENTS | `boolean` | | boolean | `false` | Whether to import attachment attribute content as a file (works only with PDF). | | MISP_IMPORT_TO_IDS_NO_SCORE | `integer` | | integer | `null` | A score value for the indicator/observable if the attribute `to_ids` value is no. | @@ -49,4 +50,6 @@ Below is an exhaustive enumeration of all configurable parameters available, eac | MISP_IMPORT_UNSUPPORTED_OBSERVABLES_AS_TEXT_TRANSPARENT | `boolean` | | boolean | `true` | Whether to import unsupported observable as x_opencti_text or not (just with the value). | | MISP_PROPAGATE_LABELS | `boolean` | | boolean | `false` | Whether to apply labels from MISP events to OpenCTI observables on top of MISP Attribute labels or not. | | MISP_BATCH_COUNT | `integer` | | integer | `9999` | The max number of items per batch when splitting STIX bundles. | +| MISP_BATCH_SIZE_LIMIT | `string` | | string | `null` | Max size of batches (in human-readable file size, e.g., '10MB', '500KB', '1.5GB') when splitting STIX bundles. `None` means no limit. | | MISP_REQUEST_TIMEOUT | `number` | | number | `null` | The timeout for the requests to the MISP API in seconds. None means no timeout. | +| MISP_SEARCH_LIMIT | `integer` | | integer | `10` | Limit the number of results returned per page request to MISP server. | diff --git a/external-import/misp/__metadata__/connector_config_schema.json b/external-import/misp/__metadata__/connector_config_schema.json index a6d497ed964..ea5cc539aa6 100644 --- a/external-import/misp/__metadata__/connector_config_schema.json +++ b/external-import/misp/__metadata__/connector_config_schema.json @@ -242,6 +242,11 @@ }, "type": "array" }, + "MISP_THREAT_LEVEL_SCORE_MAPPING": { + "default": "1:90;2:60;3:30;4:50", + "description": "Mapping of MISP threat levels (1=High, 2=Medium, 3=Low, 4=Undefined) to OpenCTI scores. Format: ':;:'. Each score must be an integer between 0 and 100; level '4' must be defined and is also used as the fallback score for events with an unrecognized threat level.", + "type": "string" + }, "MISP_IMPORT_ONLY_PUBLISHED": { "default": false, "description": "Whether to only import published MISP events or not.", @@ -277,10 +282,20 @@ "description": "The max number of items per batch when splitting STIX bundles.", "type": "integer" }, + "MISP_BATCH_SIZE_LIMIT": { + "default": null, + "description": "Max size of batches (in human-readable file size, e.g., '10MB', '500KB', '1.5GB') when splitting STIX bundles. `None` means no limit.", + "type": "string" + }, "MISP_REQUEST_TIMEOUT": { "default": null, "description": "The timeout for the requests to the MISP API in seconds. None means no timeout.", "type": "number" + }, + "MISP_SEARCH_LIMIT": { + "default": 10, + "description": "Limit the number of results returned per page request to MISP server.", + "type": "integer" } }, "required": [ diff --git a/external-import/misp/docker-compose.yml b/external-import/misp/docker-compose.yml index 2e31dcc6038..f83e8adba0d 100644 --- a/external-import/misp/docker-compose.yml +++ b/external-import/misp/docker-compose.yml @@ -39,6 +39,7 @@ services: #- MISP_IMPORT_KEYWORD= #- MISP_IMPORT_DISTRIBUTION_LEVELS=0,1,2,3 #- MISP_IMPORT_THREAT_LEVELS=1,2,3,4 + #- MISP_THREAT_LEVEL_SCORE_MAPPING=1:90;2:60;3:30;4:50 #- MISP_IMPORT_ONLY_PUBLISHED=false #- MISP_IMPORT_WITH_ATTACHMENTS=false #- MISP_IMPORT_TO_IDS_NO_SCORE=40 @@ -47,4 +48,6 @@ services: #- MISP_PROPAGATE_LABELS=false #- MISP_BATCH_COUNT=9999 #- MISP_REQUEST_TIMEOUT= + #- MISP_BATCH_SIZE_LIMIT= + #- MISP_SEARCH_LIMIT=10 restart: always diff --git a/external-import/misp/src/api_client/client.py b/external-import/misp/src/api_client/client.py index c9832c51481..27f0d19ca3c 100644 --- a/external-import/misp/src/api_client/client.py +++ b/external-import/misp/src/api_client/client.py @@ -75,7 +75,7 @@ def search_events( excluded_org_creators: list, enforce_warning_list: bool, with_attachments: bool, - limit: int = 10, + limit: int, page: int = 1, ) -> Generator[EventRestSearchListItem, None, None]: """ diff --git a/external-import/misp/src/config.yml.sample b/external-import/misp/src/config.yml.sample index 80d1209a622..360c2d6fa05 100644 --- a/external-import/misp/src/config.yml.sample +++ b/external-import/misp/src/config.yml.sample @@ -39,6 +39,7 @@ misp: #import_keyword: null # Optional (default: null) #import_distribution_levels: '0,1,2,3' # Optional (default: '') #import_threat_levels: '1,2,3,4' # Optional (default: '') + #threat_level_score_mapping: '1:90;2:60;3:30;4:50' # Optional, MISP threat level to OpenCTI score mapping (default: '1:90;2:60;3:30;4:50') #import_only_published: false # Optional (default: false) #import_with_attachments: false # Optional (default: false) #import_to_ids_no_score: 40 # Optional (default: null) @@ -46,4 +47,6 @@ misp: #import_unsupported_observables_as_text_transparent: true # Optional (default: true) #propagate_labels: false # Optional (default: false) batch_count: 9999 # Optional (default: 9999) - # request_timeout: null # Optional (default: null) \ No newline at end of file + # batch_size_limit: null # Optional (default: null; examples: '10MB', '500KB', '1.5GB' - no spaces) + # search_limit: 10 # Optional, set a result limit for queries (default: 10) + # request_timeout: null # Optional (default: null) diff --git a/external-import/misp/src/connector/connector.py b/external-import/misp/src/connector/connector.py index e7b8efd196d..8e3aff0a0b4 100644 --- a/external-import/misp/src/connector/connector.py +++ b/external-import/misp/src/connector/connector.py @@ -1,4 +1,5 @@ from datetime import datetime, timedelta, timezone +from enum import Enum, auto from typing import TYPE_CHECKING from api_client.client import MISPClient, MISPClientError @@ -17,6 +18,13 @@ LOG_PREFIX = "[Connector]" +class ProcessingOutcome(Enum): + """Outcome of processing a STIX bundle within a batch.""" + + COMPLETED = auto() + BUFFERING = auto() + + class Misp: def __init__(self, config: "ConnectorSettings", helper: "OpenCTIConnectorHelper"): self.config = config @@ -56,6 +64,7 @@ def __init__(self, config: "ConnectorSettings", helper: "OpenCTIConnectorHelper" if self.config.misp.guess_threats_from_tags else None ), + threat_level_score_mapping=self.config.misp.threat_level_score_mapping, ) self.work_manager = WorkManager(self.config, self.helper, self.logger) @@ -65,6 +74,8 @@ def __init__(self, config: "ConnectorSettings", helper: "OpenCTIConnectorHelper" batch_size=self.config.misp.batch_count, ) + self._current_bundle = None + def _check_batch_size_and_flush( self, all_entities: "list[stix2.v21._STIXBase21]", @@ -75,13 +86,11 @@ def _check_batch_size_and_flush( all_entities: list of entities to be added """ - if ( - self.batch_processor.get_current_batch_size() + len(all_entities) - ) >= self.config.misp.batch_count * 2: - self.logger.debug( - "Need to Flush before adding next items to preserve consistency of the bundle", - {"prefix": LOG_PREFIX}, - ) + if self.batch_processor.should_flush_before_adding( + incoming_items=all_entities, + batch_size_limit=self.config.misp.batch_size_limit, + max_batch_length=self.config.misp.batch_count * 2, + ): self.batch_processor.flush() def _check_and_add_entities_to_batch( @@ -98,8 +107,12 @@ def _check_and_add_entities_to_batch( markings: Markings of the entities """ self._check_batch_size_and_flush(all_entities) - self.batch_processor.add_item(author) - self.batch_processor.add_items(markings) + if self.batch_processor.get_current_batch_length() == 0: + # Add author and markings only at the beginning of a batch + # to avoid duplicates in case of batch flush during the process. + self.batch_processor.add_item(author) + self.batch_processor.add_items(markings) + self.batch_processor.add_items(all_entities) def _flush_batch_processor(self) -> None: @@ -264,20 +277,44 @@ def _get_event_datetime(self, event: "EventRestSearchListItem") -> datetime: return event_datetime + @staticmethod + def _compute_completion_percentage( + bundle_size: int, remaining_objects_count: int + ) -> int: + """Compute event processing completion percentage. + + Args: + bundle_size: Total number of objects in the event bundle + remaining_objects_count: Number of objects left to process + + Returns: + Integer completion percentage capped at 100. + """ + return min( + 100, + int(((bundle_size - remaining_objects_count) / max(1, bundle_size)) * 100), + ) + def _process_bundle_in_batch( self, event: "EventRestSearchListItem", bundle_objects: "list[stix2.v21._STIXBase21]", author: "stix2.Identity", markings: "list[stix2.MarkingDefinition]", - ) -> None: + ) -> ProcessingOutcome: """Process a bundle of STIX objects in a batch. Args: - event_id: ID of the event + event: The MISP event being processed bundle_objects: list of STIX objects to process author: Author of the event markings: Markings of the event + + Returns: + ProcessingOutcome.BUFFERING if the connector queue is full and + processing was interrupted mid-event (caller should stop the event + loop and resume on the next scheduler run). + ProcessingOutcome.COMPLETED when all chunks were sent successfully. """ bundle_size = len(bundle_objects) current_state = self.work_manager.get_state() @@ -286,38 +323,103 @@ def _process_bundle_in_batch( ) object_index = bundle_size - remaining_objects_count batch_chunk_size = self.config.misp.batch_count + for i in range( object_index, bundle_size, batch_chunk_size, ): - now = datetime.now(tz=timezone.utc) - self.batch_processor.work_name_template = ( - f"MISP run @ {now.isoformat(timespec='seconds')}" - f" - Event # {event.Event.id}" - f" - Batch # {max(1, i // batch_chunk_size)}" - f" / {max(1, bundle_size // batch_chunk_size)}" - ) - bundle_objects_chunk = bundle_objects[i : i + batch_chunk_size] - self._check_and_add_entities_to_batch( - bundle_objects_chunk, author, markings + sized_subchunks = self.batch_processor.split_items_to_fit_size_limit( + items=bundle_objects_chunk, + batch_size_limit=self.config.misp.batch_size_limit, + additional_overhead_items=[author, *markings], ) - new_state = {"last_event_date": self._get_event_datetime(event).isoformat()} - if self.config.misp.datetime_attribute == "date": - new_state["current_event_id"] = event.Event.id + for subchunk in sized_subchunks: + if ( + not self.work_manager.check_connector_run_and_terminate() + and self.work_manager.check_connector_buffering() + ): + buffered_entities = 0 + current_batch_length = ( + self.batch_processor.get_current_batch_length() + ) + if current_batch_length > 0: + metadata_count = 1 + len(markings) + buffered_entities = max( + 0, current_batch_length - metadata_count + ) - remaining_objects_count = max( - 0, remaining_objects_count - len(bundle_objects_chunk) - ) - new_state["remaining_objects_count"] = remaining_objects_count - self.work_manager.update_state(state_update=new_state) + remaining_objects_count = min( + bundle_size, + max(0, remaining_objects_count + buffered_entities), + ) + # Clear the current batch to avoid processing duplicated items + # during the next run. + self.batch_processor.clear_current_batch() + self.logger.info( + "Connector is buffering, this event will be processed in " + "the next scheduler process", + { + "prefix": LOG_PREFIX, + "event_id": event.Event.id, + "event_uuid": event.Event.uuid, + }, + ) + # Save the event date to restart from the current one in the + # next process. + new_state = { + "last_event_date": self._get_event_datetime(event).isoformat(), + "remaining_objects_count": remaining_objects_count, + } + if self.config.misp.datetime_attribute == "date": + new_state["current_event_id"] = event.Event.id + self.work_manager.update_state(state_update=new_state) + + return ProcessingOutcome.BUFFERING + + # Compute completion before this subchunk so the work name + # matches any flush triggered while adding this subchunk. + completion_before_subchunk = self._compute_completion_percentage( + bundle_size, remaining_objects_count + ) + + now = datetime.now(tz=timezone.utc) + self.batch_processor.work_name_template = ( + f"MISP run @ {now.isoformat(timespec='seconds')}" + f" - Event # {event.Event.id}" + f" - Completion {completion_before_subchunk}%" + ) + + self._check_and_add_entities_to_batch(subchunk, author, markings) + + new_state: dict[str, str | int] = { + "last_event_date": self._get_event_datetime(event).isoformat() + } + if self.config.misp.datetime_attribute == "date": + new_state["current_event_id"] = str(event.Event.id) + + remaining_objects_count = max( + 0, remaining_objects_count - len(subchunk) + ) + new_state["remaining_objects_count"] = remaining_objects_count + self.work_manager.update_state(state_update=new_state) + + # Ensure final flush displays completion at 100% for this event. + now = datetime.now(tz=timezone.utc) + self.batch_processor.work_name_template = ( + f"MISP run @ {now.isoformat(timespec='seconds')}" + f" - Event # {event.Event.id}" + " - Completion 100%" + ) # Flush any remaining items and Update the final state self._flush_batch_processor() self.work_manager.update_state(state_update={"remaining_objects_count": 0}) + return ProcessingOutcome.COMPLETED + def process_events(self) -> str | None: """Fetch, convert and send MISP events.""" @@ -358,6 +460,7 @@ def process_events(self) -> str | None: "excluded_org_creators": self.config.misp.import_creator_orgs_not, "enforce_warning_list": self.config.misp.enforce_warning_list, "with_attachments": self.config.misp.import_with_attachments, + "limit": self.config.misp.search_limit, } self.logger.info( @@ -379,33 +482,35 @@ def process_events(self) -> str | None: curr_event_date = self._get_event_datetime(event).isoformat() - if self.work_manager.check_connector_buffering(): + if self._current_bundle is None: self.logger.info( - "Connector is buffering, this event will be processed in the next scheduler process", - event_log_data, + "MISP event found - Processing...", event_log_data ) - # Save the event date to restart from the current one in the next process. - new_state = {"last_event_date": curr_event_date} - self.work_manager.update_state(state_update=new_state) - break - - self.logger.info("MISP event found - Processing...", event_log_data) - try: - author, markings, bundle_objects = self.converter.process( - event=event, - include_relationships=( - len(event.Event.Attribute or []) - + len(event.Event.Object or []) + try: + self._current_bundle = author, markings, bundle_objects = ( + self.converter.process( + event=event, + include_relationships=( + len(event.Event.Attribute or []) + + len(event.Event.Object or []) + ) + # TODO: Add a configuration for the maximum number of attributes and objects + < 10000, + ) ) - # TODO: Add a configuration for the maximum number of attributes and objects - < 10000, - ) - except ConverterError as err: - self.logger.error( - f"Error while converting MISP event, skipping it. {err}", + except ConverterError as err: + self.logger.error( + f"Error while converting MISP event, skipping it. {err}", + event_log_data, + ) + self._current_bundle = None + continue + else: + self.logger.info( + "Resuming processing of MISP event...", event_log_data, ) - continue + author, markings, bundle_objects = self._current_bundle self.logger.debug( "Converted to STIX entities", @@ -415,12 +520,16 @@ def process_events(self) -> str | None: }, ) - self._process_bundle_in_batch( + outcome = self._process_bundle_in_batch( event=event, bundle_objects=bundle_objects, author=author, markings=markings, ) + if outcome is ProcessingOutcome.BUFFERING: + break + + self._current_bundle = None else: # FOR-ELSE: The else block executes only if the loop is not @@ -467,6 +576,13 @@ def process_events(self) -> str | None: }, ) + except Exception as e: + self.logger.error( + "Error while processing MISP events", + {"prefix": LOG_PREFIX, "error": str(e)}, + ) + self._current_bundle = None + finally: self._flush_batch_processor() diff --git a/external-import/misp/src/connector/settings.py b/external-import/misp/src/connector/settings.py index 24a8bc48c6f..6559646f1da 100644 --- a/external-import/misp/src/connector/settings.py +++ b/external-import/misp/src/connector/settings.py @@ -9,13 +9,16 @@ DatetimeFromIsoString, ListFromString, ) +from datasize import DataSize from pydantic import ( AfterValidator, + BeforeValidator, Field, HttpUrl, PlainSerializer, SecretStr, SerializationInfo, + WithJsonSchema, field_validator, model_validator, ) @@ -67,6 +70,124 @@ def pycti_dict_serializer(value: list[str], info: SerializationInfo) -> str | li PlainSerializer(pycti_dict_serializer, when_used="json"), ] +# Allow to use custom types from third-party libs, like `DataSize` from `datasize` lib +BaseConfigModel.model_config["arbitrary_types_allowed"] = True + + +def parse_batch_datasize(value: Any) -> DataSize | None: + """Validate that batch_size_limit is a human-readable file size (e.g. '10MB', '500KB').""" + if isinstance(value, str): + if not value.strip().upper().endswith(("B", "KB", "MB", "GB", "TB")): + raise ValueError( + f"Invalid batch_size_limit '{value}'. " + "Expected a human-readable file size like '10MB', '500KB', '1.5GB'." + ) + + return DataSize(value) + + return value + + +DataSizeFromString = Annotated[ + DataSize, + BeforeValidator(parse_batch_datasize), + PlainSerializer(lambda x: f"{x:.2a}", return_type=str), + WithJsonSchema( + {"type": "string"} + ), # input type must be str (human-readable file size) +] + + +# MISP defines four threat-level values (1=High, 2=Medium, 3=Low, 4=Undefined). +# Level "4" is required in the mapping because it is also used as the +# fall-back score for events whose ``threat_level_id`` is not one of 1/2/3/4 +# (e.g. legacy values such as "0" or "5" returned by older MISP instances). +_MISP_THREAT_LEVELS = ("1", "2", "3", "4") + + +def parse_threat_level_score_mapping(value: Any) -> dict[str, int]: + """Parse a MISP threat-level -> OpenCTI score mapping. + + Accepts either: + + * a dict (e.g. coming from ``config.yml`` or a JSON document), or + * a string of the form ``":;:"`` (typically + used when the value is passed via an environment variable). + + Each level must be one of ``"1"`` (High), ``"2"`` (Medium), ``"3"`` + (Low) or ``"4"`` (Undefined), and each score must be an integer in the + closed interval ``[0, 100]``. The mapping must explicitly cover level + ``"4"`` so that events with an unrecognized threat level always resolve + to a well-defined score. + + Raises ``ValueError`` for any malformed input. Returning a strict error + here (rather than silently falling back to defaults) lets the connector + fail fast at startup instead of producing surprising scores at runtime. + """ + if isinstance(value, dict): + pairs = [(str(level), score) for level, score in value.items()] + elif isinstance(value, str): + pairs = [] + for raw_pair in value.split(";"): + pair = raw_pair.strip() + if not pair: + continue + if ":" not in pair: + raise ValueError( + f"Invalid threat_level_score_mapping entry '{pair}': " + "expected ':'." + ) + raw_level, raw_score = pair.split(":", 1) + pairs.append((raw_level.strip(), raw_score.strip())) + else: + raise ValueError( + "threat_level_score_mapping must be a string like " + "'1:90;2:60;3:30;4:50' or an equivalent mapping." + ) + + mapping: dict[str, int] = {} + for level, raw_score in pairs: + if level not in _MISP_THREAT_LEVELS: + raise ValueError( + f"Invalid threat_level_score_mapping entry '{level}:{raw_score}': " + "level must be one of '1' (High), '2' (Medium), '3' (Low) " + "or '4' (Undefined)." + ) + try: + score = int(raw_score) + except (TypeError, ValueError) as exc: + raise ValueError( + f"Invalid threat_level_score_mapping entry '{level}:{raw_score}': " + "score must be an integer." + ) from exc + if not 0 <= score <= 100: + raise ValueError( + f"Invalid threat_level_score_mapping entry '{level}:{raw_score}': " + "score must be between 0 and 100." + ) + mapping[level] = score + + if "4" not in mapping: + raise ValueError( + "threat_level_score_mapping must define a score for level '4' " + "(Undefined), which is used as the fallback for events whose " + "threat level is unrecognized." + ) + + return mapping + + +ThreatLevelScoreMappingFromString = Annotated[ + dict[str, int], + BeforeValidator(parse_threat_level_score_mapping), + PlainSerializer( + lambda value: ";".join(f"{level}:{score}" for level, score in value.items()), + return_type=str, + when_used="json", + ), + WithJsonSchema({"type": "string"}), +] + class ExternalImportConnectorConfig(BaseExternalImportConnectorConfig): """ @@ -222,6 +343,17 @@ class MispConfig(BaseConfigModel): description="List of threat levels to filter MISP events to import, **including** only events with these threat levels.", default=[], ) + threat_level_score_mapping: ThreatLevelScoreMappingFromString = Field( + description=( + "Mapping of MISP threat levels (1=High, 2=Medium, 3=Low, " + "4=Undefined) to OpenCTI scores. Format: " + "':;:'. Each score must be an " + "integer between 0 and 100; level '4' must be defined and is " + "also used as the fallback score for events with an unrecognized " + "threat level." + ), + default="1:90;2:60;3:30;4:50", + ) import_only_published: bool = Field( description="Whether to only import published MISP events or not.", default=False, @@ -250,11 +382,24 @@ class MispConfig(BaseConfigModel): description="The max number of items per batch when splitting STIX bundles.", default=9999, ) + batch_size_limit: DataSizeFromString | None = Field( + description=( + "Max size of batches (in human-readable file size, e.g., '10MB', " + "'500KB', '1.5GB') when splitting STIX bundles. `None` means no limit." + ), + default=None, + ) + request_timeout: float | None = Field( description="The timeout for the requests to the MISP API in seconds. None means no timeout.", default=None, ) + search_limit: int = Field( + description="Limit the number of results returned per page request to MISP server.", + default=10, + ) + @field_validator("reference_url", mode="before") @classmethod def validate_reference_url(cls, value: Any) -> Any: diff --git a/external-import/misp/src/connector/use_cases/common.py b/external-import/misp/src/connector/use_cases/common.py index 3b1f927872f..0f60d87e395 100644 --- a/external-import/misp/src/connector/use_cases/common.py +++ b/external-import/misp/src/connector/use_cases/common.py @@ -85,6 +85,7 @@ def __init__( original_tags_to_keep_as_labels: list[str] = [], default_attribute_score: int | None = None, guess_threats_from_tags: bool = False, + threat_level_score_mapping: dict[str, int] | None = None, ): self.report_type = report_type self.report_description_attribute_filters = report_description_attribute_filters @@ -107,3 +108,4 @@ def __init__( self.original_tags_to_keep_as_labels = original_tags_to_keep_as_labels self.default_attribute_score = default_attribute_score self.guess_threats_from_tags = guess_threats_from_tags + self.threat_level_score_mapping = threat_level_score_mapping diff --git a/external-import/misp/src/connector/use_cases/convert_attribute.py b/external-import/misp/src/connector/use_cases/convert_attribute.py index 192789b0379..f7cd05c0521 100644 --- a/external-import/misp/src/connector/use_cases/convert_attribute.py +++ b/external-import/misp/src/connector/use_cases/convert_attribute.py @@ -181,6 +181,28 @@ def create_stix2_ip_address( custom_properties=custom_properties, ) + def create_intrusion_set_from_attribute( + self, + attribute: ExtendedAttributeItem, + labels: list[str], + author: stix2.Identity, + markings: list[stix2.v21.MarkingDefinition], + external_references: list[stix2.ExternalReference], + ) -> stix2.IntrusionSet | None: + name = attribute.value + if not name: + return None + return stix2.IntrusionSet( + id=pycti.IntrusionSet.generate_id(name=name), + name=name, + labels=labels, + description=attribute.comment, + created_by_ref=author["id"], + object_marking_refs=markings, + external_references=external_references, + allow_custom=True, + ) + def create_observables( self, attribute: ExtendedAttributeItem, @@ -498,8 +520,15 @@ def process( if is_external_reference or is_attachment: return stix_objects - # Extract STIX indicator's metadata from MISP event's attribute's tag - attribute_labels = labels + # Extract STIX indicator's metadata from MISP event's attribute's tag. + # ``labels`` is owned by the caller (the event converter passes a + # ``deepcopy(event_labels)`` per attribute, but the object converter + # forwards its own list verbatim). Without making a fresh copy here, + # ``attribute_labels.append(label)`` below would mutate the caller's + # list, which causes attribute-level tags to bleed into every + # subsequent attribute / object processed in the same event + # (see OpenCTI-Platform/connectors#4532). + attribute_labels = list(labels) attribute_markings = [] for tag in attribute.Tag or []: @@ -536,6 +565,21 @@ def process( ) stix_objects.extend(tag_stix_objects) + is_threat_actor_attribution = ( + attribute.type == "threat-actor" and attribute.category == "Attribution" + ) + + if is_threat_actor_attribution: + intrusion_set = self.create_intrusion_set_from_attribute( + attribute, + labels=attribute_labels, + author=author, + markings=attribute_markings, + external_references=external_references, + ) + if intrusion_set: + stix_objects.append(intrusion_set) + observables = [] if self.config.convert_attribute_to_observable: observables = self.create_observables( diff --git a/external-import/misp/src/connector/use_cases/convert_event.py b/external-import/misp/src/connector/use_cases/convert_event.py index ce7d52d1a8f..7669f680f45 100644 --- a/external-import/misp/src/connector/use_cases/convert_event.py +++ b/external-import/misp/src/connector/use_cases/convert_event.py @@ -24,17 +24,28 @@ LOG_PREFIX = "[EventConverter]" -def event_threat_level_to_opencti_score(threat_level: str) -> int: - """Convert MISP Event's threat level into OpenCTI score.""" - if threat_level == "1": - score = 90 - elif threat_level == "2": - score = 60 - elif threat_level == "3": - score = 30 - else: - score = 50 - return score +# Used when no explicit mapping is provided. Matches the legacy behavior so +# upgrading users who do not set ``MISP_THREAT_LEVEL_SCORE_MAPPING`` keep +# getting identical scores. +DEFAULT_THREAT_LEVEL_SCORE_MAPPING: dict[str, int] = { + "1": 90, + "2": 60, + "3": 30, + "4": 50, +} + + +def event_threat_level_to_opencti_score( + threat_level: str, mapping: dict[str, int] | None = None +) -> int: + """Convert a MISP Event's threat level into an OpenCTI score. + + The MISP API documents four threat-level values (1/2/3/4); any other + value coming from the wire falls back to the score associated with + level ``"4"`` (Undefined). + """ + score_by_level = mapping or DEFAULT_THREAT_LEVEL_SCORE_MAPPING + return score_by_level.get(str(threat_level), score_by_level["4"]) def find_event_attribute( @@ -84,6 +95,7 @@ def __init__( default_attribute_score: int | None = None, guess_threats_from_tags: bool = False, threats_guesser: "ThreatsGuesser | None" = None, + threat_level_score_mapping: dict[str, int] | None = None, ): self.logger = logger self.config = ConverterConfig( @@ -104,6 +116,7 @@ def __init__( original_tags_to_keep_as_labels=original_tags_to_keep_as_labels, default_attribute_score=default_attribute_score, guess_threats_from_tags=guess_threats_from_tags, + threat_level_score_mapping=threat_level_score_mapping, ) # Reminder for (future) developpers @@ -279,7 +292,10 @@ def process( # Extract report's object refs from Event's attributes and objects score = ( - event_threat_level_to_opencti_score(event.Event.threat_level_id) + event_threat_level_to_opencti_score( + event.Event.threat_level_id, + self.config.threat_level_score_mapping, + ) if event.Event.threat_level_id else None ) diff --git a/external-import/misp/src/requirements.txt b/external-import/misp/src/requirements.txt index ab80068f325..583bf782363 100644 --- a/external-import/misp/src/requirements.txt +++ b/external-import/misp/src/requirements.txt @@ -1,5 +1,7 @@ -pycti==7.260309.0 -urllib3==2.6.3 +datasize==1.0.0 +pycti==7.260515.0 +pympler==1.1 +urllib3==2.7.0 pymisp~=2.5.17 pydantic==2.11.6 pydantic-settings==2.10.1 diff --git a/external-import/misp/src/utils/batch_processor/batch_processor.py b/external-import/misp/src/utils/batch_processor/batch_processor.py index 4e8d66b328a..0db32c9f246 100644 --- a/external-import/misp/src/utils/batch_processor/batch_processor.py +++ b/external-import/misp/src/utils/batch_processor/batch_processor.py @@ -4,9 +4,11 @@ handle configurable sizes and provide consistent work management. """ +from collections.abc import Generator from typing import TYPE_CHECKING, Any import stix2 +from datasize import DataSize from exceptions import MispWorkProcessingError if TYPE_CHECKING: @@ -206,7 +208,15 @@ def get_statistics(self) -> dict[str, Any]: "batch_size_limit": self.batch_size, } - def get_current_batch_size(self) -> int: + def clear_current_batch(self) -> None: + """Discard all items currently in the batch without sending them. + + Use this when the connector is buffering and the queued items must be + re-processed on the next scheduler run instead of being sent now. + """ + self._current_batch.clear() + + def get_current_batch_length(self) -> int: """Get the number of items in the current batch. Returns: @@ -215,6 +225,184 @@ def get_current_batch_size(self) -> int: """ return len(self._current_batch) + def get_current_batch_size(self) -> DataSize: + """Get the total size of the current batch in bytes. + + Returns: + Total size of current batch in bytes + + """ + return self._get_serialized_size_bytes(self._current_batch) + + def should_flush_before_adding( + self, + incoming_items: list[stix2.v21._STIXBase21], + *, + batch_size_limit: DataSize | None = None, + max_batch_length: int | None = None, + ) -> bool: + """Determine whether current batch should be flushed before adding items. + + Args: + incoming_items: Items planned to be added to the current batch + batch_size_limit: Optional serialized size limit (for example "10MB") + max_batch_length: Optional max number of items in current + incoming + + Returns: + True when the current batch should be flushed first + """ + current_batch_length = self.get_current_batch_length() + if current_batch_length == 0: + return False + + if batch_size_limit: + current_batch_size = self.get_current_batch_size() + incoming_size = self._get_serialized_size_bytes(incoming_items) + projected_batch_size = DataSize(current_batch_size + incoming_size) + + self._logger.debug( + "Projected batch size and batch size limit", + { + "prefix": LOG_PREFIX, + "projected_batch_size": f"{projected_batch_size:.2a}", + "batch_size_limit": f"{batch_size_limit:.2a}", + }, + ) + + if projected_batch_size >= int(batch_size_limit): + self._logger.debug( + "Current and incoming batch size exceed the configured batch size limit, flushing batch", + { + "prefix": LOG_PREFIX, + "current_batch_size": f"{current_batch_size:.2a}", + "incoming_batch_size": f"{incoming_size:.2a}", + "projected_batch_size": f"{projected_batch_size:.2a}", + "batch_size_limit": f"{batch_size_limit:.2a}", + }, + ) + return True + + if ( + max_batch_length is not None + and (current_batch_length + len(incoming_items)) >= max_batch_length + ): + self._logger.debug( + "Need to flush before adding next items to preserve bundle consistency", + {"prefix": LOG_PREFIX}, + ) + return True + + return False + + def split_items_to_fit_size_limit( + self, + items: list[stix2.v21._STIXBase21], + *, + additional_overhead_items: list[stix2.v21._STIXBase21], + batch_size_limit: DataSize | None = None, + ) -> Generator[list[stix2.v21._STIXBase21], None, None]: + """Yield item chunks that fit in the configured serialized size limit. + + Args: + items: Items to split into size-safe chunks + batch_size_limit: Optional serialized size limit (for example "10MB") + additional_overhead_items: Optional items always present with each chunk + + Yields: + Chunks of items whose serialized size respects the configured limit + """ + if not items: + return + + if not batch_size_limit: + yield items + return + + overhead_size = self._get_serialized_size_bytes(additional_overhead_items) + candidate_size = overhead_size + current_chunk: list[stix2.v21._STIXBase21] = [] + + items_size = self._get_serialized_size_bytes(items) + if overhead_size + items_size <= int(batch_size_limit): + self._logger.debug( + "All entities fit in the batch size limit, no need to split", + { + "prefix": LOG_PREFIX, + "entities_size": f"{items_size:.2a}", + "metadata_size": f"{overhead_size:.2a}", + "batch_size_limit": f"{batch_size_limit:.2a}", + }, + ) + yield items + return + + for item in items: + item_size = self._get_serialized_size_bytes(item) + candidate_size += item_size + + if int(candidate_size) <= int(batch_size_limit): + current_chunk.append(item) + continue + + if current_chunk: + self._logger.debug( + "Current chunk reached batch size limit, yielding chunk", + { + "prefix": LOG_PREFIX, + "chunk_size": f"{self._get_serialized_size_bytes(current_chunk):.2a}", + "metadata_size": f"{overhead_size:.2a}", + "batch_size_limit": f"{batch_size_limit:.2a}", + }, + ) + yield current_chunk + current_chunk = [] + candidate_size = overhead_size + + single_item_size = overhead_size + item_size + if int(single_item_size) > int(batch_size_limit): + self._logger.warning( + "Single entity exceeds batch size limit, yielding it as an oversize single-item chunk", + { + "prefix": LOG_PREFIX, + "entity_size": f"{item_size:.2a}", + "metadata_size": f"{overhead_size:.2a}", + "batch_size_limit": f"{batch_size_limit:.2a}", + }, + ) + yield [item] + else: + current_chunk = [item] + + if current_chunk: + self._logger.debug( + "Yielding last chunk", + { + "prefix": LOG_PREFIX, + }, + ) + yield current_chunk + + @staticmethod + def _get_serialized_size_bytes(value: Any) -> DataSize: + """Estimate payload size from serialized UTF-8 JSON bytes.""" + if isinstance(value, list): + if not value: + return DataSize(2) # [] + # Account for commas and brackets without materializing the full list JSON. + return DataSize( + 2 + + (len(value) - 1) + + sum(BatchProcessor._get_serialized_size_bytes(item) for item in value) + ) + + serialize = getattr(value, "serialize", None) + if callable(serialize): + return DataSize(len(serialize().encode("utf-8"))) + + # Invalid entity that cannot be serialized, return 0 as it will not contribute + # to the batch size + return DataSize(0) + def get_failed_items(self) -> list[Any]: """Get list of items that failed processing. diff --git a/external-import/misp/src/utils/work_manager/work_manager.py b/external-import/misp/src/utils/work_manager/work_manager.py index 4d5fd2af28c..75418fdea06 100644 --- a/external-import/misp/src/utils/work_manager/work_manager.py +++ b/external-import/misp/src/utils/work_manager/work_manager.py @@ -54,6 +54,25 @@ def check_connector_buffering(self) -> bool: """ return self._helper.check_connector_buffering() + def check_connector_run_and_terminate(self) -> bool: + """Check whether the connector is in 'run and terminate' mode. + + This helper indicates if the connector is configured to run once and then + terminate, either explicitly via ``connect_run_and_terminate`` or + implicitly via a ``duration_period`` of zero seconds. + + Returns: + bool: True if run-and-terminate mode is active + (``helper.connect_run_and_terminate`` is truthy or the + configured ``duration_period`` is 0 seconds), False otherwise. + + """ + # Run-and-terminate mode is enabled either by the helper flag or by + # configuring a zero-second duration period. + return bool(self._helper.connect_run_and_terminate) or ( + self._config.connector.duration_period.total_seconds() == 0 + ) + @staticmethod def _is_valid_iso_format(date_string: str) -> bool: """Check if a string is a valid ISO format date. diff --git a/external-import/misp/tests/test-requirements.txt b/external-import/misp/tests/test-requirements.txt index c47483429fe..b6e212306c7 100644 --- a/external-import/misp/tests/test-requirements.txt +++ b/external-import/misp/tests/test-requirements.txt @@ -1,4 +1,4 @@ -r ../src/requirements.txt -pytest==8.4.2 +pytest==9.0.3 responses~=0.25.0 freezegun==1.5.5 diff --git a/external-import/misp/tests/tests_connector/test_attribute_converter.py b/external-import/misp/tests/tests_connector/test_attribute_converter.py new file mode 100644 index 00000000000..09509510b03 --- /dev/null +++ b/external-import/misp/tests/tests_connector/test_attribute_converter.py @@ -0,0 +1,96 @@ +import stix2 +from api_client.models import ( + AttributeCategory, + AttributeType, + ExtendedAttributeItem, + TagItem, +) +from connector.use_cases.common import ConverterConfig +from connector.use_cases.convert_attribute import AttributeConverter + + +def _make_config() -> ConverterConfig: + return ConverterConfig(external_reference_base_url="http://dummy") + + +def _make_author() -> stix2.Identity: + import pycti + + return stix2.Identity( + id=pycti.Identity.generate_id( + name="Test Author", identity_class="organization" + ), + name="Test Author", + identity_class="organization", + ) + + +class TestThreatActorAttributionConversion: + """Tests for MISP 'threat-actor' Attribution attribute → IntrusionSet conversion.""" + + def test_threat_actor_attribution_creates_intrusion_set(self): + # GIVEN a threat-actor attribute in Attribution category + config = _make_config() + converter = AttributeConverter(config) + author = _make_author() + attribute = ExtendedAttributeItem( + type=AttributeType.threat_actor, + category=AttributeCategory.Attribution, + value="APT28", + comment="Known threat actor", + ) + + # WHEN processing the attribute + result = converter.process( + attribute, + labels=[], + score=50, + author=author, + markings=[], + external_references=[], + ) + + # THEN result contains exactly one IntrusionSet + intrusion_sets = [obj for obj in result if isinstance(obj, stix2.IntrusionSet)] + assert len(intrusion_sets) == 1 + assert intrusion_sets[0]["name"] == "APT28" + + +class TestLabelsPropagation: + """Regression tests for the label-propagation fix (#4532).""" + + def test_process_does_not_mutate_caller_labels(self): + """``AttributeConverter.process`` must never mutate its caller's list. + + Regression test for OpenCTI-Platform/connectors#4532: the previous + implementation aliased the caller's ``labels`` list as + ``attribute_labels`` and ``append``-ed the attribute tags to it, + which made tags bleed into every subsequent attribute / object + processed in the same event. + """ + config = _make_config() + converter = AttributeConverter(config) + author = _make_author() + attribute = ExtendedAttributeItem( + type=AttributeType.domain, + category=AttributeCategory.Network_activity, + value="foo.bar", + comment="", + Tag=[TagItem(name="phishing")], + ) + + shared_labels = ["tlp:clear", "campaign:Alpha"] + snapshot_before = list(shared_labels) + + converter.process( + attribute, + labels=shared_labels, + score=50, + author=author, + markings=[], + external_references=[], + ) + + # The caller's list must be untouched. ``snapshot_before`` is the + # exact same content as ``shared_labels`` had at call time. + assert shared_labels == snapshot_before diff --git a/external-import/misp/tests/tests_connector/test_connector.py b/external-import/misp/tests/tests_connector/test_connector.py index 9d444f02146..fce0e32edf9 100644 --- a/external-import/misp/tests/tests_connector/test_connector.py +++ b/external-import/misp/tests/tests_connector/test_connector.py @@ -4,8 +4,12 @@ from typing import Any from unittest.mock import MagicMock, patch +import pycti +import stix2 from api_client.models import EventRestSearchListItem from connector import ConnectorSettings, Misp +from connector.connector import ProcessingOutcome +from datasize import DataSize from freezegun import freeze_time from pycti import OpenCTIConnectorHelper @@ -39,6 +43,15 @@ def _load_config_dict(cls, _, handler) -> dict[str, Any]: return Misp(config=settings, helper=helper) +def _make_identity(name: str, description: str | None = None) -> stix2.Identity: + return stix2.Identity( + id=pycti.Identity.generate_id(name=name, identity_class="organization"), + name=name, + identity_class="organization", + description=description, + ) + + def test_get_event_datetime_with_timestamp(mock_opencti_connector_helper, mock_py_misp): """ Test that _get_event_datetime correctly parses a UNIX timestamp when datetime_attribute is 'timestamp'. @@ -528,6 +541,472 @@ def test_connector_creates_misp_client_with_request_timeout_none( assert call_kwargs["timeout"] is None +def test_check_and_add_entities_to_batch_flushes_existing_buffer_on_size_limit( + mock_opencti_connector_helper, mock_py_misp +): + config_dict = deepcopy(minimal_config_dict) + config_dict["misp"]["batch_size_limit"] = "1KB" + config_dict["misp"]["batch_count"] = 9999 + connector = fake_misp_connector(config_dict) + + buffered_object = _make_identity(name="buffered-object", description="X" * 10_000) + connector.batch_processor.add_item(buffered_object) + + max_size_limit = DataSize(config_dict["misp"]["batch_size_limit"]) + assert connector.batch_processor.get_current_batch_size() >= max_size_limit + + author = _make_identity(name="author") + entities = [_make_identity(name="entity-1"), _make_identity(name="entity-2")] + + with patch.object( + connector.batch_processor, + "flush", + side_effect=lambda: connector.batch_processor.clear_current_batch(), + ) as mock_flush: + connector._check_and_add_entities_to_batch( + all_entities=entities, author=author, markings=[] + ) + + assert mock_flush.call_count == 1 + assert connector.batch_processor.get_current_batch_length() == 1 + len(entities) + + +def test_check_and_add_entities_to_batch_flushes_on_projected_size_limit( + mock_opencti_connector_helper, mock_py_misp +): + config_dict = deepcopy(minimal_config_dict) + config_dict["misp"]["batch_size_limit"] = "30KB" + config_dict["misp"]["batch_count"] = 9999 + connector = fake_misp_connector(config_dict) + + connector.batch_processor.add_item(_make_identity(name="already-buffered")) + + max_size_limit = DataSize(config_dict["misp"]["batch_size_limit"]) + assert connector.batch_processor.get_current_batch_size() < max_size_limit + + author = _make_identity(name="author") + entities = [ + _make_identity(name="entity-1", description="Y" * 50_000), + _make_identity(name="entity-2"), + ] + + with patch.object( + connector.batch_processor, + "flush", + side_effect=lambda: connector.batch_processor.clear_current_batch(), + ) as mock_flush: + connector._check_and_add_entities_to_batch( + all_entities=entities, author=author, markings=[] + ) + + assert mock_flush.call_count == 1 + assert connector.batch_processor.get_current_batch_length() == 1 + len(entities) + + +def test_check_and_add_entities_to_batch_keeps_count_based_flush_without_size_limit( + mock_opencti_connector_helper, mock_py_misp +): + config_dict = deepcopy(minimal_config_dict) + config_dict["misp"]["batch_count"] = 2 + connector = fake_misp_connector(config_dict) + + connector.batch_processor.add_item(_make_identity(name="already-buffered-1")) + connector.batch_processor.add_item(_make_identity(name="already-buffered-2")) + + author = _make_identity(name="author") + entities = [_make_identity(name="entity-1"), _make_identity(name="entity-2")] + + with patch.object( + connector.batch_processor, + "flush", + side_effect=lambda: connector.batch_processor.clear_current_batch(), + ) as mock_flush: + connector._check_and_add_entities_to_batch( + all_entities=entities, author=author, markings=[] + ) + + assert mock_flush.call_count == 1 + assert connector.batch_processor.get_current_batch_length() == 1 + len(entities) + + +def test_check_batch_size_and_flush_does_not_flush_empty_batch_for_oversize_chunk( + mock_opencti_connector_helper, mock_py_misp +): + config_dict = deepcopy(minimal_config_dict) + config_dict["misp"]["batch_size_limit"] = "1KB" + connector = fake_misp_connector(config_dict) + + oversized_entities = [_make_identity(name="too-large", description="A" * 120_000)] + + with ( + patch.object( + connector.batch_processor, + "get_current_batch_length", + return_value=0, + ), + patch.object(connector.batch_processor, "flush") as mock_flush, + ): + connector._check_batch_size_and_flush(oversized_entities) + + assert mock_flush.call_count == 0 + + +def test_process_bundle_in_batch_sends_forced_oversize_single_entity_with_warning( + mock_opencti_connector_helper, mock_py_misp +): + config_dict = deepcopy(minimal_config_dict) + config_dict["misp"]["batch_size_limit"] = "10KB" + config_dict["misp"]["batch_count"] = 100 + config_dict["misp"]["datetime_attribute"] = "timestamp" + connector = fake_misp_connector(config_dict) + + author = _make_identity(name="author") + markings = [] + bundle_objects = [ + _make_identity(name="small-1"), + _make_identity(name="huge", description="B" * 200_000), + _make_identity(name="small-2"), + ] + event = EventRestSearchListItem.model_validate( + { + "Event": { + "id": "1", + "uuid": "event-1", + "timestamp": str( + int(datetime(2026, 1, 2, tzinfo=timezone.utc).timestamp()) + ), + } + } + ) + + with ( + patch.object( + connector.work_manager, + "get_state", + return_value={"remaining_objects_count": len(bundle_objects)}, + ), + patch.object( + connector.work_manager, + "check_connector_run_and_terminate", + return_value=True, + ), + patch.object( + connector.work_manager, + "check_connector_buffering", + return_value=False, + ), + patch.object(connector.work_manager, "update_state") as mock_update_state, + patch.object( + connector, + "_check_and_add_entities_to_batch", + ) as mock_add_entities, + patch.object(connector, "_flush_batch_processor"), + patch.object(connector.logger, "warning") as mock_warning, + ): + outcome = connector._process_bundle_in_batch( + event=event, + bundle_objects=bundle_objects, + author=author, + markings=markings, + ) + + sent_entities_count = sum( + len(call.args[0]) for call in mock_add_entities.call_args_list + ) + assert outcome is ProcessingOutcome.COMPLETED + assert sent_entities_count == len(bundle_objects) + assert mock_warning.call_count >= 1 + assert mock_update_state.call_count >= 1 + + +def test_process_bundle_in_batch_buffering_keeps_remaining_count_when_batch_empty( + mock_opencti_connector_helper, mock_py_misp +): + config_dict = deepcopy(minimal_config_dict) + config_dict["misp"]["datetime_attribute"] = "timestamp" + connector = fake_misp_connector(config_dict) + + author = _make_identity(name="author") + markings = [] + bundle_objects = [ + _make_identity(name="entity-1"), + _make_identity(name="entity-2"), + _make_identity(name="entity-3"), + ] + initial_remaining = len(bundle_objects) + event = EventRestSearchListItem.model_validate( + { + "Event": { + "id": "42", + "uuid": "event-42", + "timestamp": str( + int(datetime(2026, 1, 2, tzinfo=timezone.utc).timestamp()) + ), + } + } + ) + + state_updates = [] + + def track_update_state(state_update=None, **kwargs): + if state_update: + state_updates.append(state_update) + + with ( + patch.object( + connector.work_manager, + "get_state", + return_value={"remaining_objects_count": initial_remaining}, + ), + patch.object( + connector.work_manager, + "check_connector_run_and_terminate", + return_value=False, + ), + patch.object( + connector.work_manager, + "check_connector_buffering", + return_value=True, + ), + patch.object( + connector.batch_processor, + "get_current_batch_length", + return_value=0, + ), + patch.object(connector.batch_processor, "clear_current_batch") as mock_clear, + patch.object( + connector.work_manager, + "update_state", + side_effect=track_update_state, + ), + ): + outcome = connector._process_bundle_in_batch( + event=event, + bundle_objects=bundle_objects, + author=author, + markings=markings, + ) + + assert outcome is ProcessingOutcome.BUFFERING + assert mock_clear.call_count == 1 + assert state_updates + assert state_updates[-1]["remaining_objects_count"] == initial_remaining + + +def test_process_bundle_in_batch_sets_work_name_completion_to_100_on_last_chunk( + mock_opencti_connector_helper, mock_py_misp +): + config_dict = deepcopy(minimal_config_dict) + config_dict["misp"]["datetime_attribute"] = "timestamp" + config_dict["misp"]["batch_count"] = 10 + connector = fake_misp_connector(config_dict) + + author = _make_identity(name="author") + markings = [] + bundle_objects = [ + _make_identity(name="entity-1"), + _make_identity(name="entity-2"), + _make_identity(name="entity-3"), + ] + event = EventRestSearchListItem.model_validate( + { + "Event": { + "id": "12", + "uuid": "event-12", + "timestamp": str( + int(datetime(2026, 1, 2, tzinfo=timezone.utc).timestamp()) + ), + } + } + ) + + with ( + patch.object( + connector.work_manager, + "get_state", + return_value={"remaining_objects_count": len(bundle_objects)}, + ), + patch.object( + connector.work_manager, + "check_connector_run_and_terminate", + return_value=True, + ), + patch.object( + connector.work_manager, + "check_connector_buffering", + return_value=False, + ), + patch.object(connector.work_manager, "update_state"), + patch.object( + connector, + "_check_and_add_entities_to_batch", + ), + patch.object(connector, "_flush_batch_processor"), + ): + outcome = connector._process_bundle_in_batch( + event=event, + bundle_objects=bundle_objects, + author=author, + markings=markings, + ) + + assert outcome is ProcessingOutcome.COMPLETED + assert "Completion 100%" in connector.batch_processor.work_name_template + + +def test_process_bundle_in_batch_completion_progression_matches_processed_batches( + mock_opencti_connector_helper, mock_py_misp +): + config_dict = deepcopy(minimal_config_dict) + config_dict["misp"]["datetime_attribute"] = "timestamp" + config_dict["misp"]["batch_count"] = 2 + connector = fake_misp_connector(config_dict) + + author = _make_identity(name="author") + markings = [] + bundle_objects = [ + _make_identity(name="entity-1"), + _make_identity(name="entity-2"), + _make_identity(name="entity-3"), + _make_identity(name="entity-4"), + _make_identity(name="entity-5"), + _make_identity(name="entity-6"), + _make_identity(name="entity-7"), + _make_identity(name="entity-8"), + _make_identity(name="entity-9"), + ] + event = EventRestSearchListItem.model_validate( + { + "Event": { + "id": "13", + "uuid": "event-13", + "timestamp": str( + int(datetime(2026, 1, 2, tzinfo=timezone.utc).timestamp()) + ), + } + } + ) + + work_name_snapshots = [] + + def capture_and_skip_add(*args, **kwargs): + work_name_snapshots.append(connector.batch_processor.work_name_template) + + with ( + patch.object( + connector.work_manager, + "get_state", + return_value={"remaining_objects_count": len(bundle_objects)}, + ), + patch.object( + connector.work_manager, + "check_connector_run_and_terminate", + return_value=True, + ), + patch.object( + connector.work_manager, + "check_connector_buffering", + return_value=False, + ), + patch.object(connector.work_manager, "update_state"), + patch.object( + connector, + "_check_and_add_entities_to_batch", + side_effect=capture_and_skip_add, + ), + patch.object(connector, "_flush_batch_processor"), + ): + outcome = connector._process_bundle_in_batch( + event=event, + bundle_objects=bundle_objects, + author=author, + markings=markings, + ) + + assert outcome is ProcessingOutcome.COMPLETED + assert len(work_name_snapshots) == 5 + assert "Completion 0%" in work_name_snapshots[0] + assert "Completion 22%" in work_name_snapshots[1] + assert "Completion 44%" in work_name_snapshots[2] + assert "Completion 66%" in work_name_snapshots[3] + assert "Completion 88%" in work_name_snapshots[4] + + +def test_process_bundle_in_batch_completion_starts_from_resume_object_index( + mock_opencti_connector_helper, mock_py_misp +): + config_dict = deepcopy(minimal_config_dict) + config_dict["misp"]["datetime_attribute"] = "timestamp" + config_dict["misp"]["batch_count"] = 2 + connector = fake_misp_connector(config_dict) + + author = _make_identity(name="author") + markings = [] + bundle_objects = [ + _make_identity(name="entity-1"), + _make_identity(name="entity-2"), + _make_identity(name="entity-3"), + _make_identity(name="entity-4"), + _make_identity(name="entity-5"), + _make_identity(name="entity-6"), + _make_identity(name="entity-7"), + _make_identity(name="entity-8"), + _make_identity(name="entity-9"), + ] + event = EventRestSearchListItem.model_validate( + { + "Event": { + "id": "14", + "uuid": "event-14", + "timestamp": str( + int(datetime(2026, 1, 2, tzinfo=timezone.utc).timestamp()) + ), + } + } + ) + + work_name_snapshots = [] + + def capture_and_skip_add(*args, **kwargs): + work_name_snapshots.append(connector.batch_processor.work_name_template) + + with ( + patch.object( + connector.work_manager, + "get_state", + # Resume at object_index = 2 on bundle of 9 + return_value={"remaining_objects_count": 7}, + ), + patch.object( + connector.work_manager, + "check_connector_run_and_terminate", + return_value=True, + ), + patch.object( + connector.work_manager, + "check_connector_buffering", + return_value=False, + ), + patch.object(connector.work_manager, "update_state"), + patch.object( + connector, + "_check_and_add_entities_to_batch", + side_effect=capture_and_skip_add, + ), + patch.object(connector, "_flush_batch_processor"), + ): + outcome = connector._process_bundle_in_batch( + event=event, + bundle_objects=bundle_objects, + author=author, + markings=markings, + ) + + assert outcome is ProcessingOutcome.COMPLETED + # First visible progress should reflect resumed index (2/9 ~= 22%). + assert "Completion 22%" in work_name_snapshots[0] + + def test_connector_does_not_validate_event_already_processed_by_update_datetime( mock_opencti_connector_helper, mock_py_misp ): @@ -578,10 +1057,17 @@ def _make_publish_timestamp_event(event_id: str, ts: int) -> EventRestSearchList ) -def _run_process_events(connector, events, buffering_sequence, initial_state=None): +def _run_process_events( + connector, events, buffering_at_event_index=None, initial_state=None +): """ Run `process_events` with all external dependencies mocked. + Args: + buffering_at_event_index: 0-based index of the event call at which + ``_process_bundle_in_batch`` should return + ``ProcessingOutcome.BUFFERING``. ``None`` means no buffering. + Returns: (state dict, mock for _process_bundle_in_batch, process_events return value) """ @@ -591,6 +1077,20 @@ def track_update_state(state_update=None, **kwargs): if state_update: state.update(state_update) + call_count = [0] + + def process_bundle_side_effect(event, bundle_objects, author, markings): + idx = call_count[0] + call_count[0] += 1 + if buffering_at_event_index is not None and idx == buffering_at_event_index: + # Simulate what the real _process_bundle_in_batch does when it + # detects buffering: persist the checkpoint state and signal the + # caller to stop the event loop. + state["last_event_date"] = connector._get_event_datetime(event).isoformat() + state["remaining_objects_count"] = len(bundle_objects) + return ProcessingOutcome.BUFFERING + return ProcessingOutcome.COMPLETED + with ( patch.object(connector, "helper") as mock_helper, patch.object(connector, "work_manager") as mock_wm, @@ -604,10 +1104,8 @@ def track_update_state(state_update=None, **kwargs): mock_wm.get_state.side_effect = lambda: dict(state) mock_wm.update_state.side_effect = track_update_state - if isinstance(buffering_sequence, list): - mock_wm.check_connector_buffering.side_effect = buffering_sequence - else: - mock_wm.check_connector_buffering.return_value = buffering_sequence + + mock_process.side_effect = process_bundle_side_effect mock_api.search_events.return_value = iter(events) mock_converter.process.return_value = (MagicMock(), [], [MagicMock()]) @@ -622,15 +1120,18 @@ def test_process_events_state_set_to_buffered_event_date_on_buffering( mock_opencti_connector_helper, mock_py_misp ): """ - Test that when buffering is detected, `last_event_date` is saved to the - buffered event's timestamp so the next run restarts from that event. + Test that when buffering is detected inside _process_bundle_in_batch for + event B, ``last_event_date`` is saved to event B's timestamp so the next + run restarts from that event. Scenario: - Event A (earlier timestamp): processed normally. - - Event B (later timestamp): buffering detected → loop breaks. + - Event B (later timestamp): _process_bundle_in_batch detects buffering + mid-chunk → returns ProcessingOutcome.BUFFERING → loop breaks. - Expected: after the run, `last_event_date` equals event B's timestamp (not - A's), so the next run re-processes event B. + Expected: after the run, ``last_event_date`` equals event B's timestamp + (not A's), so the next run re-processes event B from the saved chunk + offset. """ config_dict = deepcopy(minimal_config_dict) config_dict["misp"]["datetime_attribute"] = "publish_timestamp" @@ -642,9 +1143,9 @@ def test_process_events_state_set_to_buffered_event_date_on_buffering( event_a = _make_publish_timestamp_event("1", ts_a) event_b = _make_publish_timestamp_event("2", ts_b) - # No buffering for A, buffering triggers on B + # Buffering triggers on the second _process_bundle_in_batch call (event B) state, _, result = _run_process_events( - connector, [event_a, event_b], buffering_sequence=[False, True] + connector, [event_a, event_b], buffering_at_event_index=1 ) expected = datetime.fromtimestamp(ts_b, tz=timezone.utc).isoformat() @@ -652,13 +1153,19 @@ def test_process_events_state_set_to_buffered_event_date_on_buffering( @freeze_time("2026-01-01 00:00:00") -def test_process_events_buffered_event_not_processed( +def test_process_events_buffering_breaks_event_loop( mock_opencti_connector_helper, mock_py_misp ): """ - Test that when buffering is detected for event B, `_process_bundle_in_batch` - is NOT called for it — even though the state has already been advanced to - its timestamp. + Test that when ``_process_bundle_in_batch`` returns + ``ProcessingOutcome.BUFFERING`` for event B, the event loop is broken + immediately — event B itself IS passed to the method (buffering is + detected inside it), but any subsequent events are not processed at all. + + Scenario: + - Event A: _process_bundle_in_batch returns COMPLETED. + - Event B: _process_bundle_in_batch returns BUFFERING → loop breaks. + - Event C: never reached. """ config_dict = deepcopy(minimal_config_dict) config_dict["misp"]["datetime_attribute"] = "publish_timestamp" @@ -666,17 +1173,21 @@ def test_process_events_buffered_event_not_processed( ts_a = int(time.time()) ts_b = int(time.time() + 1) + ts_c = int(time.time() + 2) event_a = _make_publish_timestamp_event("1", ts_a) event_b = _make_publish_timestamp_event("2", ts_b) + event_c = _make_publish_timestamp_event("3", ts_c) state, mock_process, _ = _run_process_events( - connector, [event_a, event_b], buffering_sequence=[False, True] + connector, [event_a, event_b, event_c], buffering_at_event_index=1 ) - # Only event A should have been processed - assert mock_process.call_count == 1 - assert mock_process.call_args[1]["event"] == event_a + # Both event A and event B were passed to _process_bundle_in_batch; + # event C was never reached because the loop broke after event B. + assert mock_process.call_count == 2 + assert mock_process.call_args_list[0][1]["event"] == event_a + assert mock_process.call_args_list[1][1]["event"] == event_b def test_process_events_adds_one_second_after_loop_completion( @@ -696,9 +1207,7 @@ def test_process_events_adds_one_second_after_loop_completion( event = _make_publish_timestamp_event("1", ts) # No buffering — loop completes normally - state, _, result = _run_process_events( - connector, [event], buffering_sequence=False - ) + state, _, result = _run_process_events(connector, [event]) # ts == Now: process_events does not update last_event_date (handled # by _process_bundle_in_batch, which is mocked here). @@ -706,9 +1215,7 @@ def test_process_events_adds_one_second_after_loop_completion( assert result is None frozen_time.move_to("2026-01-01 00:00:01") - state, _, result = _run_process_events( - connector, [event], buffering_sequence=False - ) + state, _, result = _run_process_events(connector, [event]) expected = ( datetime.fromtimestamp(ts, tz=timezone.utc) + timedelta(seconds=1) ).isoformat() diff --git a/external-import/misp/tests/tests_connector/test_event_converter.py b/external-import/misp/tests/tests_connector/test_event_converter.py new file mode 100644 index 00000000000..3c642ced359 --- /dev/null +++ b/external-import/misp/tests/tests_connector/test_event_converter.py @@ -0,0 +1,58 @@ +import pytest +from connector.use_cases.convert_event import ( + DEFAULT_THREAT_LEVEL_SCORE_MAPPING, + event_threat_level_to_opencti_score, +) + + +@pytest.mark.parametrize( + "threat_level, expected", + [ + ("1", 90), + ("2", 60), + ("3", 30), + ("4", 50), + ], +) +def test_event_threat_level_to_opencti_score_default_mapping(threat_level, expected): + """When called without an explicit mapping, the function reproduces the + legacy hard-coded behavior (1=90, 2=60, 3=30, 4=50) so upgrading users + who do not configure ``MISP_THREAT_LEVEL_SCORE_MAPPING`` keep getting + identical scores. + """ + assert event_threat_level_to_opencti_score(threat_level) == expected + + +def test_event_threat_level_to_opencti_score_unknown_value_falls_back_to_level_4(): + """MISP can return a ``threat_level_id`` outside ``[1, 4]`` (older + instances, custom forks). Such values must resolve to the score + associated with level ``"4"`` (Undefined) rather than raising. + """ + assert event_threat_level_to_opencti_score("5") == 50 + assert event_threat_level_to_opencti_score("99") == 50 + + +def test_event_threat_level_to_opencti_score_uses_custom_mapping(): + """The function honors the mapping provided by the caller, both for + known levels and for the fallback (level ``"4"``). + """ + mapping = {"1": 100, "2": 70, "3": 40, "4": 10} + assert event_threat_level_to_opencti_score("1", mapping) == 100 + assert event_threat_level_to_opencti_score("2", mapping) == 70 + assert event_threat_level_to_opencti_score("3", mapping) == 40 + assert event_threat_level_to_opencti_score("4", mapping) == 10 + # Unknown threat-level resolves to the "Undefined" score. + assert event_threat_level_to_opencti_score("foo", mapping) == 10 + + +def test_default_threat_level_score_mapping_matches_legacy_behavior(): + """The module-level default mapping must mirror the historic + hard-coded values so the behavior is preserved when no override + is supplied at runtime. + """ + assert DEFAULT_THREAT_LEVEL_SCORE_MAPPING == { + "1": 90, + "2": 60, + "3": 30, + "4": 50, + } diff --git a/external-import/misp/tests/tests_connector/test_settings.py b/external-import/misp/tests/tests_connector/test_settings.py index 6b60cfc2ea4..8a172ce2227 100644 --- a/external-import/misp/tests/tests_connector/test_settings.py +++ b/external-import/misp/tests/tests_connector/test_settings.py @@ -2,6 +2,7 @@ import pytest from connector import ConnectorSettings +from connector.settings import parse_threat_level_score_mapping from connectors_sdk import BaseConfigModel, ConfigValidationError @@ -132,6 +133,62 @@ }, id="full_valid_settings_dict_attribute_filter_filled", ), + pytest.param( + { + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + "connector": { + "id": "connector-id", + "name": "Test Connector", + "scope": "test, connector", + "log_level": "error", + "duration_period": "PT5M", + }, + "misp": { + "url": "http://test.com", + "key": "test-api-key", + "batch_size_limit": "10MB", + }, + }, + id="valid_misp_batch_size_limit", + ), + pytest.param( + { + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + "connector": {}, + "misp": { + "url": "http://test.com", + "key": "test-api-key", + "threat_level_score_mapping": "1:100;2:75;3:25;4:50", + }, + }, + id="valid_threat_level_score_mapping_string", + ), + pytest.param( + { + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + "connector": {}, + "misp": { + "url": "http://test.com", + "key": "test-api-key", + "threat_level_score_mapping": { + "1": 100, + "2": 75, + "3": 25, + "4": 50, + }, + }, + }, + id="valid_threat_level_score_mapping_dict", + ), ], ) def test_settings_should_accept_valid_input(settings_dict): @@ -275,6 +332,108 @@ def _load_config_dict(cls, _, handler) -> dict[str, Any]: "misp.date_filter_field", id="invalid_misp_date_filter_field", ), + pytest.param( + { + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + "connector": { + "id": "connector-id", + "name": "Test Connector", + "scope": "test, connector", + "log_level": "error", + "duration_period": "PT5M", + }, + "misp": { + "url": "http://test.com", + "key": "test-api-key", + "batch_size_limit": "10 MB", + }, + }, + "misp.batch_size_limit", + id="invalid_misp_batch_size_limit_with_space", + ), + pytest.param( + { + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + "connector": {}, + "misp": { + "url": "http://test.com", + "key": "test-api-key", + "threat_level_score_mapping": "1:90;2:60;3:30", + }, + }, + "misp.threat_level_score_mapping", + id="invalid_threat_level_score_mapping_missing_level_4", + ), + pytest.param( + { + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + "connector": {}, + "misp": { + "url": "http://test.com", + "key": "test-api-key", + "threat_level_score_mapping": "1:90;2:60;3:30;4:150", + }, + }, + "misp.threat_level_score_mapping", + id="invalid_threat_level_score_mapping_score_out_of_range", + ), + pytest.param( + { + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + "connector": {}, + "misp": { + "url": "http://test.com", + "key": "test-api-key", + "threat_level_score_mapping": "1:foo;2:60;3:30;4:50", + }, + }, + "misp.threat_level_score_mapping", + id="invalid_threat_level_score_mapping_non_integer_score", + ), + pytest.param( + { + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + "connector": {}, + "misp": { + "url": "http://test.com", + "key": "test-api-key", + "threat_level_score_mapping": "5:10;1:90;2:60;3:30;4:50", + }, + }, + "misp.threat_level_score_mapping", + id="invalid_threat_level_score_mapping_unknown_level", + ), + pytest.param( + { + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + "connector": {}, + "misp": { + "url": "http://test.com", + "key": "test-api-key", + "threat_level_score_mapping": "1=90;2=60;3=30;4=50", + }, + }, + "misp.threat_level_score_mapping", + id="invalid_threat_level_score_mapping_no_colon", + ), ], ) def test_settings_should_raise_when_invalid_input(settings_dict, field_name): @@ -299,3 +458,100 @@ def _load_config_dict(cls, _, handler) -> dict[str, Any]: with pytest.raises(ConfigValidationError) as err: FakeConnectorSettings() assert str("Error validating configuration") in str(err) + + +@pytest.mark.parametrize( + "raw, expected", + [ + pytest.param( + "1:90;2:60;3:30;4:50", + {"1": 90, "2": 60, "3": 30, "4": 50}, + id="default_mapping", + ), + pytest.param( + " 1 : 100 ; 2 : 60 ; 3 : 30 ; 4 : 50 ", + {"1": 100, "2": 60, "3": 30, "4": 50}, + id="whitespace_tolerated", + ), + pytest.param( + "4:50", + {"4": 50}, + id="only_undefined_required_level", + ), + pytest.param( + {"1": 100, "2": 70, "3": 40, "4": 50}, + {"1": 100, "2": 70, "3": 40, "4": 50}, + id="already_a_dict", + ), + pytest.param( + {1: 100, 2: 70, 3: 40, 4: 50}, + {"1": 100, "2": 70, "3": 40, "4": 50}, + id="dict_with_int_keys", + ), + pytest.param( + "1:0;2:0;3:0;4:0", + {"1": 0, "2": 0, "3": 0, "4": 0}, + id="score_lower_bound", + ), + pytest.param( + "1:100;2:100;3:100;4:100", + {"1": 100, "2": 100, "3": 100, "4": 100}, + id="score_upper_bound", + ), + ], +) +def test_parse_threat_level_score_mapping_returns_dict_for_valid_input(raw, expected): + """``parse_threat_level_score_mapping`` returns a normalized dict for every + supported input shape (string, dict with str/int keys, padded values). + """ + assert parse_threat_level_score_mapping(raw) == expected + + +@pytest.mark.parametrize( + "raw, error_fragment", + [ + pytest.param( + "1:90;2:60;3:30", + "level '4'", + id="missing_level_4", + ), + pytest.param( + "1=90;2=60;3=30;4=50", + "expected ':'", + id="no_colon", + ), + pytest.param( + "5:10;1:90;2:60;3:30;4:50", + "must be one of '1'", + id="unknown_level", + ), + pytest.param( + "1:foo;2:60;3:30;4:50", + "score must be an integer", + id="non_integer_score", + ), + pytest.param( + "1:101;2:60;3:30;4:50", + "between 0 and 100", + id="score_above_max", + ), + pytest.param( + "1:-1;2:60;3:30;4:50", + "between 0 and 100", + id="score_below_min", + ), + pytest.param( + 42, + "mapping", + id="unsupported_type", + ), + ], +) +def test_parse_threat_level_score_mapping_raises_for_invalid_input(raw, error_fragment): + """``parse_threat_level_score_mapping`` rejects malformed input with a + descriptive message so misconfiguration surfaces at startup instead of + silently producing surprising scores at runtime. + """ + with pytest.raises(ValueError) as err: + parse_threat_level_score_mapping(raw) + assert error_fragment in str(err.value) diff --git a/external-import/mitre-atlas/__metadata__/CONNECTOR_CONFIG_DOC.md b/external-import/mitre-atlas/__metadata__/CONNECTOR_CONFIG_DOC.md index bc45e4c475a..43b1022a1b4 100644 --- a/external-import/mitre-atlas/__metadata__/CONNECTOR_CONFIG_DOC.md +++ b/external-import/mitre-atlas/__metadata__/CONNECTOR_CONFIG_DOC.md @@ -9,7 +9,7 @@ Below is an exhaustive enumeration of all configurable parameters available, eac | OPENCTI_URL | `string` | ✅ | Format: [`uri`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | The base URL of the OpenCTI instance. | | OPENCTI_TOKEN | `string` | ✅ | string | | The API token to connect to OpenCTI. | | CONNECTOR_NAME | `string` | | string | `"MITRE ATLAS"` | The name of the connector. | -| CONNECTOR_SCOPE | `array` | | string | `["identity", "attack - pattern", "course - of - action", "relationship", "x - mitre - collection", "x - mitre - matrix", "x - mitre - tactic"]` | The scope of the connector. | +| CONNECTOR_SCOPE | `array` | | string | `["identity", "attack-pattern", "course-of-action", "relationship", "x-mitre-collection", "x-mitre-matrix", "x-mitre-tactic"]` | The scope of the connector. | | CONNECTOR_LOG_LEVEL | `string` | | `debug` `info` `warn` `warning` `error` | `"error"` | The minimum level of logs to display. | | CONNECTOR_TYPE | `const` | | `EXTERNAL_IMPORT` | `"EXTERNAL_IMPORT"` | | | CONNECTOR_DURATION_PERIOD | `string` | | Format: [`duration`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | `"P7D"` | The period of time to await between two runs of the connector. | diff --git a/external-import/mitre-atlas/__metadata__/connector_config_schema.json b/external-import/mitre-atlas/__metadata__/connector_config_schema.json index 7a0019f47b5..f1b4423f178 100644 --- a/external-import/mitre-atlas/__metadata__/connector_config_schema.json +++ b/external-import/mitre-atlas/__metadata__/connector_config_schema.json @@ -22,12 +22,12 @@ "CONNECTOR_SCOPE": { "default": [ "identity", - "attack - pattern", - "course - of - action", + "attack-pattern", + "course-of-action", "relationship", - "x - mitre - collection", - "x - mitre - matrix", - "x - mitre - tactic" + "x-mitre-collection", + "x-mitre-matrix", + "x-mitre-tactic" ], "description": "The scope of the connector.", "items": { diff --git a/external-import/mitre-atlas/src/connector/settings.py b/external-import/mitre-atlas/src/connector/settings.py index 7b6f361226a..321799c0ee1 100644 --- a/external-import/mitre-atlas/src/connector/settings.py +++ b/external-import/mitre-atlas/src/connector/settings.py @@ -28,12 +28,12 @@ class ExternalImportConnectorConfig(BaseExternalImportConnectorConfig): description="The scope of the connector.", default=[ "identity", - "attack - pattern", - "course - of - action", + "attack-pattern", + "course-of-action", "relationship", - "x - mitre - collection", - "x - mitre - matrix", - "x - mitre - tactic", + "x-mitre-collection", + "x-mitre-matrix", + "x-mitre-tactic", ], ) duration_period: timedelta = Field( diff --git a/external-import/mitre-atlas/src/requirements.txt b/external-import/mitre-atlas/src/requirements.txt index fb270d6b572..1dd5a8feec8 100644 --- a/external-import/mitre-atlas/src/requirements.txt +++ b/external-import/mitre-atlas/src/requirements.txt @@ -1,4 +1,4 @@ -pycti==7.260309.0 -urllib3==2.6.3 +pycti==7.260515.0 +urllib3==2.7.0 pydantic >=2.8.2, <3 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk diff --git a/external-import/mitre-atlas/tests/test-requirements.txt b/external-import/mitre-atlas/tests/test-requirements.txt index bdef682113c..d405632324b 100644 --- a/external-import/mitre-atlas/tests/test-requirements.txt +++ b/external-import/mitre-atlas/tests/test-requirements.txt @@ -1,2 +1,2 @@ -r ../src/requirements.txt -pytest==8.4.2 +pytest==9.0.3 diff --git a/external-import/mitre/.build.env b/external-import/mitre/.build.env new file mode 100644 index 00000000000..56e5bc4f685 --- /dev/null +++ b/external-import/mitre/.build.env @@ -0,0 +1,3 @@ +CONNECTOR_CMD="-m src" +CONNECTOR_WORKDIR="/opt/connector" + diff --git a/external-import/mitre/src/requirements.txt b/external-import/mitre/src/requirements.txt index 639289a54d4..3e97a73ff90 100644 --- a/external-import/mitre/src/requirements.txt +++ b/external-import/mitre/src/requirements.txt @@ -1,5 +1,5 @@ -pycti==7.260309.0 -urllib3==2.6.3 +pycti==7.260515.0 +urllib3==2.7.0 pydantic>=2.10, <3 pydantic-settings==2.9.1 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk diff --git a/external-import/mokn/__metadata__/connector_manifest.json b/external-import/mokn/__metadata__/connector_manifest.json index 2f8b00b1191..4b6a54fd556 100644 --- a/external-import/mokn/__metadata__/connector_manifest.json +++ b/external-import/mokn/__metadata__/connector_manifest.json @@ -1,8 +1,8 @@ { "title": "MokN", "slug": "mokn", - "description": "Ingests login attempts from MokN Bait and converts them to STIX 2.1 objects.", - "short_description": "MokN Bait external import connector.", + "description": "MokN provides intelligence on credential compromise attempts captured through deception-based authentication systems. By deploying bait login portals that mimic legitimate services, MokN records attacker login attempts and identifies when stolen credentials are used. This helps organizations detect potential account compromises early in the attack lifecycle.\n\nWhen attackers interact with bait systems, MokN captures contextual information such as the source IP address, targeted username/password, and authentication outcome. This allows security teams to distinguish between credential harvesting attempts and cases where attackers possess valid credentials that may enable unauthorized access.\n\nThe MokN connector retrieves login attempt events from the MokN Bait platform and converts them into STIX objects within OpenCTI. It processes attacker infrastructure, targeted accounts, and credential validation status to generate observables, indicators, sightings, and incidents, enabling analysts to correlate credential compromise activity with existing threat intelligence and investigations.", + "short_description": "The MokN connector retrieves login attempt events from the MokN Bait platform and converts them into STIX objects within OpenCTI. It processes attacker infrastructure, targeted accounts, and credential validation status to generate observables, indicators, sightings, and incidents, enabling analysts to correlate credential compromise activity with existing threat intelligence and investigations", "logo": "external-import/mokn/__metadata__/logo.png", "use_cases": ["Threat Intel Feed", "Credential Compromise"], "verified": true, diff --git a/external-import/mokn/src/requirements.txt b/external-import/mokn/src/requirements.txt index 4760fd7106a..2f7fdb33cea 100644 --- a/external-import/mokn/src/requirements.txt +++ b/external-import/mokn/src/requirements.txt @@ -1,4 +1,4 @@ -pycti==7.260309.0 +pycti==7.260515.0 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk -requests~=2.32.3 +requests~=2.33.0 tenacity~=8.2.3 \ No newline at end of file diff --git a/external-import/montysecurity-c2-tracker/.dockerignore b/external-import/montysecurity-c2-tracker/.dockerignore new file mode 100644 index 00000000000..44bb22bbcec --- /dev/null +++ b/external-import/montysecurity-c2-tracker/.dockerignore @@ -0,0 +1,14 @@ +.git +.gitignore +.vscode +.venv +__pycache__/ +*.pyc +*.pyo +*.pyd +*.log +.pytest_cache/ +.mypy_cache/ +tests/ +README.md +config.yml.sample diff --git a/external-import/montysecurity-c2-tracker/.env.sample b/external-import/montysecurity-c2-tracker/.env.sample new file mode 100644 index 00000000000..05816b3f421 --- /dev/null +++ b/external-import/montysecurity-c2-tracker/.env.sample @@ -0,0 +1,15 @@ +# OpenCTI +OPENCTI_URL=http://opencti:8080 +OPENCTI_TOKEN=ChangeMe + +# Connector +# CONNECTOR_ID=359a9fed-89e7-4baa-a5a7-fb0ce3a923cb +# CONNECTOR_NAME=MontysecurityC2TrackerConnector +# CONNECTOR_SCOPE=montysecurity-c2-tracker +# CONNECTOR_LOG_LEVEL=error +# CONNECTOR_DURATION_PERIOD=P1W + +# Monty Security C2 Tracker +# MONTYSECURITY_C2_TRACKER_TLP_LEVEL=clear +# MONTYSECURITY_C2_TRACKER_MALWARE_LIST_URL=https://github.com/montysecurity/C2-Tracker/tree/main/data +# MONTYSECURITY_C2_TRACKER_MALWARE_IPS_BASE_URL=https://raw.githubusercontent.com/montysecurity/C2-Tracker/main/data/ diff --git a/external-import/montysecurity-c2-tracker/Dockerfile b/external-import/montysecurity-c2-tracker/Dockerfile index 7d4fc9b3849..1b52589bb0d 100644 --- a/external-import/montysecurity-c2-tracker/Dockerfile +++ b/external-import/montysecurity-c2-tracker/Dockerfile @@ -1,19 +1,48 @@ -FROM python:3.12-alpine -ENV CONNECTOR_TYPE=EXTERNAL_IMPORT - -# Copy the connector -COPY src /opt/opencti-connector-montysecurity-c2-tracker +FROM python:3.12-alpine AS builder # Install Python modules # hadolint ignore=DL3003 -RUN apk update && apk upgrade && \ - apk --no-cache add git build-base libmagic libffi-dev libxml2-dev libxslt-dev +WORKDIR /opt/opencti-connector-montysecurity-c2-tracker + +# Install build dependencies and libraries required by Python modules +RUN apk --no-cache add \ + git \ + build-base \ + libmagic \ + libxml2-dev \ + libxslt-dev \ + libffi-dev + +COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/ +ENV UV_LINK_MODE=copy +# Create a virtual environment and install dependencies +RUN uv venv +RUN --mount=type=bind,source=src/requirements.txt,target=/tmp/requirements.txt \ + --mount=type=cache,target=/root/.cache/uv \ + uv pip install -r /tmp/requirements.txt + + +FROM python:3.12-alpine AS runner +WORKDIR /opt/opencti-connector-montysecurity-c2-tracker + +# Install runtime dependencies +RUN apk --no-cache add \ + libmagic \ + libxml2 \ + libxslt \ + libffi + +# Create an unprivileged runtime user used by COPY --chown and final process. +RUN addgroup -S app && adduser -S -G app app +# Copy the connector +COPY --chown=app:app src . +# Copy the virtual environment from the builder stage +COPY --from=builder --chown=app:app /opt/opencti-connector-montysecurity-c2-tracker/.venv ./.venv +# Switch to the unprivileged user +USER app -RUN cd /opt/opencti-connector-montysecurity-c2-tracker && \ - pip3 install --no-cache-dir -r requirements.txt && \ - apk del git build-base +# Set PATH to use the virtual environment +ENV PATH="/opt/opencti-connector-montysecurity-c2-tracker/.venv/bin:$PATH" # Expose and entrypoint -COPY entrypoint.sh / -RUN chmod +x /entrypoint.sh -ENTRYPOINT ["/entrypoint.sh"] +ENTRYPOINT ["python3", "main.py"] diff --git a/external-import/montysecurity-c2-tracker/README.md b/external-import/montysecurity-c2-tracker/README.md index 9109ff3ea98..e44619d6c99 100644 --- a/external-import/montysecurity-c2-tracker/README.md +++ b/external-import/montysecurity-c2-tracker/README.md @@ -1,14 +1,12 @@ # Monty Security C2 Tracker - -Table of Contents +## Verification status + +| Status | Date | Comment | +|-------------------|------------|---------| +| Filigran Verified | 17/03/2026 | | + +## Table of Contents - [Monty Security C2 Tracker](#monty-security-c2-tracker) - [Introduction](#introduction) @@ -42,39 +40,10 @@ across the internet. ## Configuration variables -There are a number of configuration options, which are set either in `docker-compose.yml` (for Docker) or -in `config.yml` (for manual deployment). - -### OpenCTI environment variables - -Below are the parameters you'll need to set for OpenCTI: - -| Parameter | config.yml | Docker environment variable | Mandatory | Description | -| ------------- | ---------- | --------------------------- | --------- | ---------------------------------------------------- | -| OpenCTI URL | url | `OPENCTI_URL` | Yes | The URL of the OpenCTI platform. | -| OpenCTI Token | token | `OPENCTI_TOKEN` | Yes | The default admin token set in the OpenCTI platform. | - -### Base connector environment variables +Find all the configuration variables available here: [Connector Configurations](./__metadata__/CONNECTOR_CONFIG_DOC.md) -Below are the parameters you'll need to set for running the connector properly: - -| Parameter | config.yml | Docker environment variable | Default | Mandatory | Description | -| --------------- | ---------- | --------------------------- | --------------- | --------- | ---------------------------------------------------------------------------------------- | -| Connector ID | id | `CONNECTOR_ID` | / | Yes | A unique `UUIDv4` identifier for this connector instance. | -| Connector Type | type | `CONNECTOR_TYPE` | EXTERNAL_IMPORT | Yes | Should always be set to `EXTERNAL_IMPORT` for this connector. | -| Connector Name | name | `CONNECTOR_NAME` | | Yes | Name of the connector. | -| Connector Scope | scope | `CONNECTOR_SCOPE` | | Yes | The scope or type of data the connector is importing, either a MIME type or Stix Object. | -| Log Level | log_level | `CONNECTOR_LOG_LEVEL` | info | Yes | Determines the verbosity of the logs. Options are `debug`, `info`, `warn`, or `error`. | - -### Connector extra parameters environment variables - -Below are the parameters you'll need to set for the connector: - -| Parameter | config.yml | Docker environment variable | Default | Mandatory | Description | -|----------------------|----------------------| --------------------------- |---------| --------- |------------------------------------------------------------| -| TLP Level | tlp_level | | clear | Yes | The TLP is clear by default for OSINT | -| Malware list URL | malware_list_url | |https://github.com/montysecurity/C2-Tracker/tree/main/data | Yes | The up to date malware list on Github | -| Malware IPs base URL | malware_ips_base_url | |https://raw.githubusercontent.com/montysecurity/C2-Tracker/main/data/ | Yes | The based URL used to go through all the malware IPs files | +_The `opencti` and `connector` options in the `docker-compose.yml` and `config.yml` are the same as for any other connector. +For more information regarding these variables, please refer to [OpenCTI's documentation on connectors](https://docs.opencti.io/latest/deployment/connectors/)._ ## Deployment @@ -133,12 +102,17 @@ download of data by re-running the connector. ## Behavior - +At each run, the connector fetches the malware list from the Monty Security C2-Tracker +dataset, then downloads associated IP lists for each malware family. It converts +malware names and IP observables into STIX objects and creates `indicates` +relationships between each IP and its malware. + +The generated bundle is sent to OpenCTI as a scheduled external import. The +connector also stores `last_run` in state so operators can track previous +executions in logs. + +Because the source is community OSINT, entities are marked with a configurable +TLP level (default: `clear`) and attributed to the Monty Security author identity. ## Debugging diff --git a/external-import/montysecurity-c2-tracker/__metadata__/CONNECTOR_CONFIG_DOC.md b/external-import/montysecurity-c2-tracker/__metadata__/CONNECTOR_CONFIG_DOC.md new file mode 100644 index 00000000000..b27c7417de6 --- /dev/null +++ b/external-import/montysecurity-c2-tracker/__metadata__/CONNECTOR_CONFIG_DOC.md @@ -0,0 +1,18 @@ +# Connector Configurations + +Below is an exhaustive enumeration of all configurable parameters available, each accompanied by detailed explanations of their purposes, default behaviors, and usage guidelines to help you understand and utilize them effectively. + +### Type: `object` + +| Property | Type | Required | Possible values | Default | Description | +| -------- | ---- | -------- | --------------- | ------- | ----------- | +| OPENCTI_URL | `string` | ✅ | Format: [`uri`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | The base URL of the OpenCTI instance. | +| OPENCTI_TOKEN | `string` | ✅ | string | | The API token to connect to OpenCTI. | +| CONNECTOR_NAME | `string` | | string | `"MontysecurityC2TrackerConnector"` | The name of the connector. | +| CONNECTOR_SCOPE | `array` | | string | `["montysecurity-c2-tracker"]` | The scope of the connector, e.g. 'flashpoint'. | +| CONNECTOR_LOG_LEVEL | `string` | | `debug` `info` `warn` `warning` `error` | `"error"` | The minimum level of logs to display. | +| CONNECTOR_TYPE | `const` | | `EXTERNAL_IMPORT` | `"EXTERNAL_IMPORT"` | | +| CONNECTOR_DURATION_PERIOD | `string` | | Format: [`duration`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | `"P7D"` | The period of time to await between two runs of the connector. | +| MONTYSECURITY_C2_TRACKER_TLP_LEVEL | `string` | | `clear` `white` `green` `amber` `amber+strict` `red` | `"clear"` | Default TLP level of the imported entities. | +| MONTYSECURITY_C2_TRACKER_MALWARE_LIST_URL | `string` | | Format: [`uri`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | `"https://github.com/montysecurity/C2-Tracker/tree/main/data"` | The URL to the malware list page of the imported entities. | +| MONTYSECURITY_C2_TRACKER_MALWARE_IPS_BASE_URL | `string` | | Format: [`uri`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | `"https://raw.githubusercontent.com/montysecurity/C2-Tracker/main/data/"` | The base URL used to fetch malware ips. | diff --git a/external-import/montysecurity-c2-tracker/__metadata__/connector_config_schema.json b/external-import/montysecurity-c2-tracker/__metadata__/connector_config_schema.json new file mode 100644 index 00000000000..0323e1508a6 --- /dev/null +++ b/external-import/montysecurity-c2-tracker/__metadata__/connector_config_schema.json @@ -0,0 +1,90 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://www.filigran.io/connectors/montysecurity-c2-tracker_config.schema.json", + "type": "object", + "properties": { + "OPENCTI_URL": { + "description": "The base URL of the OpenCTI instance.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "OPENCTI_TOKEN": { + "description": "The API token to connect to OpenCTI.", + "type": "string" + }, + "CONNECTOR_NAME": { + "default": "MontysecurityC2TrackerConnector", + "description": "The name of the connector.", + "type": "string" + }, + "CONNECTOR_SCOPE": { + "default": [ + "montysecurity-c2-tracker" + ], + "description": "The scope of the connector, e.g. 'flashpoint'.", + "items": { + "type": "string" + }, + "type": "array" + }, + "CONNECTOR_LOG_LEVEL": { + "default": "error", + "description": "The minimum level of logs to display.", + "enum": [ + "debug", + "info", + "warn", + "warning", + "error" + ], + "type": "string" + }, + "CONNECTOR_TYPE": { + "const": "EXTERNAL_IMPORT", + "default": "EXTERNAL_IMPORT", + "type": "string" + }, + "CONNECTOR_DURATION_PERIOD": { + "default": "P7D", + "description": "The period of time to await between two runs of the connector.", + "format": "duration", + "type": "string" + }, + "MONTYSECURITY_C2_TRACKER_TLP_LEVEL": { + "default": "clear", + "description": "Default TLP level of the imported entities.", + "enum": [ + "clear", + "white", + "green", + "amber", + "amber+strict", + "red" + ], + "type": "string" + }, + "MONTYSECURITY_C2_TRACKER_MALWARE_LIST_URL": { + "default": "https://github.com/montysecurity/C2-Tracker/tree/main/data", + "description": "The URL to the malware list page of the imported entities.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "MONTYSECURITY_C2_TRACKER_MALWARE_IPS_BASE_URL": { + "default": "https://raw.githubusercontent.com/montysecurity/C2-Tracker/main/data/", + "description": "The base URL used to fetch malware ips.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "OPENCTI_URL", + "OPENCTI_TOKEN" + ], + "additionalProperties": true +} \ No newline at end of file diff --git a/external-import/montysecurity-c2-tracker/__metadata__/connector_manifest.json b/external-import/montysecurity-c2-tracker/__metadata__/connector_manifest.json index ab695f058e3..a47d20258ec 100644 --- a/external-import/montysecurity-c2-tracker/__metadata__/connector_manifest.json +++ b/external-import/montysecurity-c2-tracker/__metadata__/connector_manifest.json @@ -1,19 +1,19 @@ { "title": "Monty Security C2 Tracker", "slug": "montysecurity-c2-tracker", - "description": "Template description of the connector", - "short_description": "Template short description (summary) of the connector", + "description": "Imports the Monty Security C2-Tracker OSINT feed into OpenCTI by creating malware families, related IP observables, and indicates relationships.", + "short_description": "Ingests Monty Security C2-Tracker malware/IP intelligence into OpenCTI.", "logo": null, "use_cases" : [], "verified": true, - "last_verified_date": null, + "last_verified_date": "2026-03-17", "playbook_supported": false, "max_confidence_level": 50, "support_version": ">=6.9.7", "subscription_link": null, "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/external-import/montysecurity-c2-tracker", - "manager_supported": false, + "manager_supported": true, "container_version": "rolling", "container_image": "opencti/connector-montysecurity-c2-tracker", "container_type": "EXTERNAL_IMPORT" -} \ No newline at end of file +} diff --git a/external-import/montysecurity-c2-tracker/config.yml.sample b/external-import/montysecurity-c2-tracker/config.yml.sample index e97027a1f97..b88365caf3e 100644 --- a/external-import/montysecurity-c2-tracker/config.yml.sample +++ b/external-import/montysecurity-c2-tracker/config.yml.sample @@ -2,14 +2,14 @@ opencti: url: 'http://localhost:PORT' token: 'ChangeMe' -connector: - id: 'ChangeMe' - name: 'MontysecurityC2TrackerConnector' # optional (default: 'MontysecurityC2TrackerConnector') - scope: 'montysecurity-c2-tracker' - log_level: 'error' # optional (default: 'error') - duration_period: 'P1W' # optional, interval in ISO-8601 format between two runs of the connector (default: 'P1W') +# connector: +# id: '359a9fed-89e7-4baa-a5a7-fb0ce3a923cb' +# name: 'MontysecurityC2TrackerConnector' # optional (default: 'MontysecurityC2TrackerConnector') +# scope: 'montysecurity-c2-tracker' +# log_level: 'error' # optional (default: 'error') +# duration_period: 'P1W' # optional, interval in ISO-8601 format between two runs of the connector (default: 'P1W') -montysecurity_c2_tracker: - tlp_level: 'clear' # optional, available values: 'clear', 'white', 'green', 'amber', 'amber+strict', 'red' (default: 'clear') - malware_list_url: 'https://github.com/montysecurity/C2-Tracker/tree/main/data' - malware_ips_base_url: 'https://raw.githubusercontent.com/montysecurity/C2-Tracker/main/data/' \ No newline at end of file +# montysecurity_c2_tracker: +# tlp_level: 'clear' # optional, available values: 'clear', 'white', 'green', 'amber', 'amber+strict', 'red' (default: 'clear') +# malware_list_url: 'https://github.com/montysecurity/C2-Tracker/tree/main/data' +# malware_ips_base_url: 'https://raw.githubusercontent.com/montysecurity/C2-Tracker/main/data/' \ No newline at end of file diff --git a/external-import/montysecurity-c2-tracker/docker-compose.yml b/external-import/montysecurity-c2-tracker/docker-compose.yml index 5034298e3f9..1daa79f807d 100644 --- a/external-import/montysecurity-c2-tracker/docker-compose.yml +++ b/external-import/montysecurity-c2-tracker/docker-compose.yml @@ -1,7 +1,16 @@ version: '3' services: connector-c2tracker: - image: opencti/connector-montysecurity-c2-tracker:latest + image: opencti/connector-montysecurity-c2-tracker:rolling environment: - OPENCTI_URL=http://localhost + - OPENCTI_TOKEN=ChangeMe + # - CONNECTOR_ID=359a9fed-89e7-4baa-a5a7-fb0ce3a923cb + # - CONNECTOR_NAME=MontysecurityC2TrackerConnector + # - CONNECTOR_SCOPE=montysecurity-c2-tracker + # - CONNECTOR_LOG_LEVEL=error + # - CONNECTOR_DURATION_PERIOD=P7D + # - MONTYSECURITY_C2_TRACKER_TLP_LEVEL=clear + # - MONTYSECURITY_C2_TRACKER_MALWARE_LIST_URL=https://github.com/montysecurity/C2-Tracker/tree/main/data + # - MONTYSECURITY_C2_TRACKER_MALWARE_IPS_BASE_URL=https://raw.githubusercontent.com/montysecurity/C2-Tracker/main/data/ restart: always diff --git a/external-import/montysecurity-c2-tracker/src/connector/connector.py b/external-import/montysecurity-c2-tracker/src/connector/connector.py index 33d54b3e8c5..a521605e074 100644 --- a/external-import/montysecurity-c2-tracker/src/connector/connector.py +++ b/external-import/montysecurity-c2-tracker/src/connector/connector.py @@ -3,11 +3,22 @@ from connector.converter_to_stix import ConverterToStix from connector.settings import ConnectorSettings -from connectors_sdk.models import Indicator, Malware +from connectors_sdk.models import ( + IPV4Address, + IPV6Address, + Malware, + OrganizationAuthor, + Relationship, + TLPMarking, +) from connectors_sdk.models.enums import RelationshipType from montysecurity_c2_tracker_client import MontysecurityC2TrackerClient from pycti import OpenCTIConnectorHelper +ENTITIES_TYPE = list[ + IPV4Address | IPV6Address | Malware | Relationship | TLPMarking | OrganizationAuthor +] + class MontysecurityC2TrackerConnector: """ @@ -57,42 +68,42 @@ def __init__(self, config: ConnectorSettings, helper: OpenCTIConnectorHelper): self.client = MontysecurityC2TrackerClient( self.helper, self.config.montysecurity_c2_tracker, - # Pass any arguments necessary to the client ) self.converter_to_stix = ConverterToStix( self.helper, tlp_level=self.config.montysecurity_c2_tracker.tlp_level, - # Pass any arguments necessary to the converter ) - def _collect_intelligence(self) -> list: + def _collect_intelligence( + self, + ) -> ENTITIES_TYPE: """ Collect intelligence from the source and convert into STIX object :return: List of STIX objects """ # Get entities from external sources malware_list = self.client.get_malware_list() - entities = [] + entities: ENTITIES_TYPE = [] malware_list = [malware.strip('"') for malware in malware_list] self.helper.connector_logger.debug(malware_list) for malware in malware_list: - malware_stix: Malware = self.converter_to_stix.convert_malware(malware) + malware_stix = self.converter_to_stix.convert_malware(malware) entities.append(malware_stix) ips = self.client.get_ips(malware) for ip in ips: - ip_indicator: Indicator = self.converter_to_stix.convert_ip(ip) - if not ip_indicator: + observable_stix = self.converter_to_stix.convert_ip(ip) + if not observable_stix: continue - entities.append(ip_indicator) + entities.append(observable_stix) relationship = self.converter_to_stix.create_relationship( - source_obj=ip_indicator, + source_obj=observable_stix, target_obj=malware_stix, - relationship_type=RelationshipType.INDICATES, + relationship_type=RelationshipType.RELATED_TO, ) entities.append(relationship) @@ -139,10 +150,7 @@ def process_message(self) -> None: {"connector_name": self.helper.connect_name}, ) - # Performing the collection of intelligence - # =========================== - # === Add your code below === - # =========================== + # Collect intelligence and convert to STIX objects. entities = self._collect_intelligence() stix_objects = [entity.to_stix2_object() for entity in entities] @@ -151,12 +159,13 @@ def process_message(self) -> None: if stix_objects: # Initiate a new work work_id = self.helper.api.work.initiate_work( - self.helper.connect_id, friendly_name + self.helper.connect_id, + friendly_name, # type: ignore ) stix_objects_bundle = self.helper.stix2_create_bundle(stix_objects) bundles_sent = self.helper.send_stix2_bundle( - stix_objects_bundle, + stix_objects_bundle, # type: ignore work_id=work_id, cleanup_inconsistent_bundle=True, ) @@ -165,10 +174,6 @@ def process_message(self) -> None: "Sending STIX objects to OpenCTI...", {"bundles_sent": {str(len(bundles_sent))}}, ) - # =========================== - # === Add your code above === - # =========================== - # Store the current timestamp as a last run of the connector self.helper.connector_logger.debug( "Getting current state and update it with last run of the connector", @@ -185,8 +190,8 @@ def process_message(self) -> None: self.helper.set_state(current_state) message = ( - f"{self.helper.connect_name} connector successfully run, storing last_run as " - + str(last_run_datetime) + f"{self.helper.connect_name} connector successfully run, " + f"storing last_run as {last_run_datetime}" ) if work_id: diff --git a/external-import/montysecurity-c2-tracker/src/connector/converter_to_stix.py b/external-import/montysecurity-c2-tracker/src/connector/converter_to_stix.py index 34445313fa6..3054290a597 100644 --- a/external-import/montysecurity-c2-tracker/src/connector/converter_to_stix.py +++ b/external-import/montysecurity-c2-tracker/src/connector/converter_to_stix.py @@ -1,13 +1,16 @@ import ipaddress -from typing import Literal, Optional +from datetime import datetime +from typing import Literal from connectors_sdk.models import ( - Indicator, + IPV4Address, + IPV6Address, Malware, OrganizationAuthor, Relationship, TLPMarking, ) +from connectors_sdk.models.enums import RelationshipType from pycti import ( OpenCTIConnectorHelper, ) @@ -29,8 +32,7 @@ def __init__( ): """ Initialize the converter with necessary configuration. - For log purpose, the connector's helper CAN be injected. - Other arguments CAN be added (e.g. `tlp_level`) if necessary. + The connector helper is injected for logging and tracing. Args: helper (OpenCTIConnectorHelper): The helper of the connector. Used for logs. @@ -57,60 +59,40 @@ def convert_malware(self, malware: str) -> Malware: return malware_stix - def convert_ip(self, ip: str) -> Indicator: + def convert_ip(self, ip: str) -> IPV4Address | IPV6Address | None: if self._is_ipv4(ip): - ip_pattern = f"[ipv4-addr:value = '{ ip }']" - ip_type = "IPv4-Addr" - ip_indicator = self.create_indicator(ip, ip_pattern, ip_type) + ip_indicator = IPV4Address(value=ip) elif self._is_ipv6(ip): - ip_pattern = f"[ipv6-addr:value = '{ ip }']" - ip_type = "IPv6-Addr" - ip_indicator = self.create_indicator(ip, ip_pattern, ip_type) + ip_indicator = IPV6Address(value=ip) else: ip_indicator = None return ip_indicator - def create_indicator(self, ip: str, ip_pattern: str, ip_type: str) -> Indicator: - - ip_indicator = Indicator( - name=ip, - pattern=ip_pattern, - pattern_type="stix", - main_observable_type=ip_type, - create_observables=True, - author=self.author, - markings=[self.tlp_marking], - ) - - return ip_indicator - @staticmethod - def create_author() -> dict: + def create_author() -> OrganizationAuthor: """ Create Author """ - author = OrganizationAuthor(name="MontySecurity") - return author + return OrganizationAuthor(name="MontySecurity") @staticmethod - def _create_tlp_marking(level): + def _create_tlp_marking(level) -> TLPMarking: """ Create TLPMarking object """ - tlp_marking = TLPMarking(level=level) - return tlp_marking + return TLPMarking(level=level) def create_relationship( self, - relationship_type: str, + relationship_type: RelationshipType, source_obj, target_obj, - start_time: Optional[str] = None, - stop_time: Optional[str] = None, + start_time: datetime | None = None, + stop_time: datetime | None = None, ) -> Relationship: """ Creates Relationship object diff --git a/external-import/montysecurity-c2-tracker/src/connector/settings.py b/external-import/montysecurity-c2-tracker/src/connector/settings.py index 6b315234418..f50b8a8ed7b 100644 --- a/external-import/montysecurity-c2-tracker/src/connector/settings.py +++ b/external-import/montysecurity-c2-tracker/src/connector/settings.py @@ -5,6 +5,7 @@ BaseConfigModel, BaseConnectorSettings, BaseExternalImportConnectorConfig, + ListFromString, ) from pydantic import Field, HttpUrl @@ -19,10 +20,18 @@ class ExternalImportConnectorConfig(BaseExternalImportConnectorConfig): description="The name of the connector.", default="MontysecurityC2TrackerConnector", ) + id: str = Field( + description="A UUID v4 to identify the connector in OpenCTI.", + default="359a9fed-89e7-4baa-a5a7-fb0ce3a923cb", + ) duration_period: timedelta = Field( description="The period of time to await between two runs of the connector.", default=timedelta(weeks=1), ) + scope: ListFromString = Field( + description="The scope of the connector, e.g. 'flashpoint'.", + default=["montysecurity-c2-tracker"], + ) class MontysecurityC2TrackerConfig(BaseConfigModel): diff --git a/external-import/montysecurity-c2-tracker/src/montysecurity_c2_tracker_client/api_client.py b/external-import/montysecurity-c2-tracker/src/montysecurity_c2_tracker_client/api_client.py index 5a6ff7ecc7a..8248ec71afa 100644 --- a/external-import/montysecurity-c2-tracker/src/montysecurity_c2_tracker_client/api_client.py +++ b/external-import/montysecurity-c2-tracker/src/montysecurity_c2_tracker_client/api_client.py @@ -1,5 +1,4 @@ import re -from typing import Any from urllib.parse import quote, urljoin import requests @@ -14,8 +13,7 @@ def __init__( ): """ Initialize the client with necessary configuration. - For log purpose, the connector's helper CAN be injected. - Other arguments CAN be added (e.g. `api_key`) if necessary. + The connector helper is injected for logging and tracing. Args: helper (OpenCTIConnectorHelper): The helper of the connector. Used for logs. @@ -28,7 +26,7 @@ def __init__( self.session = requests.Session() self.session.headers.update(headers) - def _request_data(self, api_url: str, params=None): + def _request_data(self, api_url: str, params: dict | None = None): """ Internal method to handle API requests :return: Response in JSON format @@ -50,25 +48,43 @@ def _request_data(self, api_url: str, params=None): ) return None - def get_malware_list(self, params=None) -> list[Any] | None: + def get_malware_list(self, params: dict | None = None) -> list[str]: + """Fetch the list of malware from the external API.""" try: self.helper.connector_logger.info("Get Malware Entities") malware_list_url = self.config.malware_list_url.encoded_string() response = self._request_data(malware_list_url, params=params) + if response is None: + return [] self.helper.connector_logger.info( - "Status code from github.com: ", response.status_code + f"Status code from github.com: {response.status_code}" + ) + + malware_list = list( + set( + # Match filenames ending with "IPs.txt": + # - start on a word boundary + # - first token must start with a letter + # - allow extra space-separated tokens (letters/digits + _, ., -) + # - require a final " IPs.txt" suffix + re.findall( + r"\b[A-Za-z][\w.-]*(?:\s+[A-Za-z0-9][\w.-]*)*\s+IPs\.txt\b", + response.text, + ) + ) ) - malware_list = list(set(re.findall("[\w\s\d.]+IPs\.txt", response.text))) return malware_list except RequestException as err: self.helper.connector_logger.error( - f"Failed malware list: {err}", exc_info=True # Includes full traceback + f"Failed malware list: {err}", + exc_info=True, # Includes full traceback ) return [] - def get_ips(self, malware_name: str, params=None) -> list: + def get_ips(self, malware_name: str, params: dict | None = None) -> list[str]: + """Fetch the list of IPs associated with a malware from the external API.""" try: self.helper.connector_logger.info("Get Malware IPs") @@ -76,13 +92,16 @@ def get_ips(self, malware_name: str, params=None) -> list: url = urljoin(str(malware_ips_base_url), quote(malware_name)) response = self._request_data(url, params=params) - ips = [ + if response is None: + return [] + + return [ ip for ip in response.text.strip().split("\n") if ip ] # Cleanup the list - return ips except RequestException as err: self.helper.connector_logger.error( - f"Failed malware list: {err}", exc_info=True # Includes full traceback + f"Failed malware list: {err}", + exc_info=True, # Includes full traceback ) return [] diff --git a/external-import/montysecurity-c2-tracker/src/requirements.txt b/external-import/montysecurity-c2-tracker/src/requirements.txt index 30bfcd9cdc7..b355e3b1e05 100644 --- a/external-import/montysecurity-c2-tracker/src/requirements.txt +++ b/external-import/montysecurity-c2-tracker/src/requirements.txt @@ -1,5 +1,5 @@ -pycti==7.260309.0 -pydantic~= 2.11.3 -requests~=2.32.3 +pycti==7.260515.0 +pydantic==2.12.5 +requests==2.33.0 validators==0.35.0 -connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk \ No newline at end of file +connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk diff --git a/external-import/montysecurity-c2-tracker/tests/conftest.py b/external-import/montysecurity-c2-tracker/tests/conftest.py index 5ee8fc0e226..e4eea7e032f 100644 --- a/external-import/montysecurity-c2-tracker/tests/conftest.py +++ b/external-import/montysecurity-c2-tracker/tests/conftest.py @@ -1,4 +1,82 @@ import os import sys +from typing import Any +from unittest.mock import MagicMock + +import pytest +from pycti import OpenCTIConnectorHelper sys.path.append(os.path.join(os.path.dirname(__file__), "..", "src")) + +from connector import ConnectorSettings, MontysecurityC2TrackerConnector +from connectors_sdk.models import OrganizationAuthor, TLPMarking + + +@pytest.fixture +def mock_connector_settings(): + """Fixture StubConnectorSettings.""" + + class StubConnectorSettings(ConnectorSettings): + """ + Subclass of `ConnectorSettings` (implementation of `BaseConnectorSettings`) for testing purpose. + It overrides `BaseConnectorSettings._load_config_dict` to return a fake but valid config dict. + """ + + @classmethod + def _load_config_dict(cls, _, handler) -> dict[str, Any]: + return handler( + { + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + "connector": { + "id": "connector-id", + "name": "Test Connector", + "scope": "test, connector", + "log_level": "error", + "duration_period": "PT5M", + }, + "montysecurity_c2_tracker": { + "malware_list_url": "https://github.com/montysecurity/C2-Tracker/tree/main/data", + "malware_ips_base_url": "https://raw.githubusercontent.com/montysecurity/C2-Tracker/main/data/", + "tlp_level": "clear", + }, + } + ) + + return StubConnectorSettings() + + +@pytest.fixture +def mock_connector_helper(monkeypatch, mock_connector_settings): + """Fixture OpenCTIConnectorHelper""" + module_import_path = "pycti.connector.opencti_connector_helper" + monkeypatch.setattr(f"{module_import_path}.killProgramHook", MagicMock()) + monkeypatch.setattr(f"{module_import_path}.sched.scheduler", MagicMock()) + monkeypatch.setattr(f"{module_import_path}.ConnectorInfo", MagicMock()) + monkeypatch.setattr(f"{module_import_path}.OpenCTIApiClient", MagicMock()) + monkeypatch.setattr(f"{module_import_path}.OpenCTIConnector", MagicMock()) + monkeypatch.setattr(f"{module_import_path}.OpenCTIMetricHandler", MagicMock()) + monkeypatch.setattr(f"{module_import_path}.PingAlive", MagicMock()) + + return OpenCTIConnectorHelper(config=mock_connector_settings.to_helper_config()) + + +@pytest.fixture +def mock_connector(mock_connector_settings, mock_connector_helper): + """Fixture MontysecurityC2TrackerConnector""" + montysecurity_connector = MontysecurityC2TrackerConnector( + config=mock_connector_settings, + helper=mock_connector_helper, + ) + montysecurity_connector.client = MagicMock() + montysecurity_connector.converter_to_stix.author = OrganizationAuthor( + name="MontySecurity" + ) + config_tlp_level = mock_connector_settings.montysecurity_c2_tracker.tlp_level + montysecurity_connector.converter_to_stix.tlp_marking = TLPMarking( + level=config_tlp_level.lower() + ) + + return montysecurity_connector diff --git a/external-import/montysecurity-c2-tracker/tests/test-requirements.txt b/external-import/montysecurity-c2-tracker/tests/test-requirements.txt index b46752671ca..386ed5a0a36 100644 --- a/external-import/montysecurity-c2-tracker/tests/test-requirements.txt +++ b/external-import/montysecurity-c2-tracker/tests/test-requirements.txt @@ -1,3 +1,3 @@ # Main dependencies needs to be installed -r ../src/requirements.txt -pytest==8.4.2 +pytest==9.0.3 diff --git a/external-import/montysecurity-c2-tracker/tests/test_main.py b/external-import/montysecurity-c2-tracker/tests/test_main.py index 698f7c1cc71..4856f127a7e 100644 --- a/external-import/montysecurity-c2-tracker/tests/test_main.py +++ b/external-import/montysecurity-c2-tracker/tests/test_main.py @@ -1,99 +1,109 @@ -from typing import Any -from unittest.mock import MagicMock - import pytest -from connector import ConnectorSettings, MontysecurityC2TrackerConnector -from pycti import OpenCTIConnectorHelper - - -@pytest.fixture -def mock_opencti_connector_helper(monkeypatch): - """Mock all heavy dependencies of OpenCTIConnectorHelper, typically API calls to OpenCTI.""" +from connector import ConnectorSettings +from connectors_sdk.models.enums import RelationshipType - module_import_path = "pycti.connector.opencti_connector_helper" - monkeypatch.setattr(f"{module_import_path}.killProgramHook", MagicMock()) - monkeypatch.setattr(f"{module_import_path}.sched.scheduler", MagicMock()) - monkeypatch.setattr(f"{module_import_path}.ConnectorInfo", MagicMock()) - monkeypatch.setattr(f"{module_import_path}.OpenCTIApiClient", MagicMock()) - monkeypatch.setattr(f"{module_import_path}.OpenCTIConnector", MagicMock()) - monkeypatch.setattr(f"{module_import_path}.OpenCTIMetricHandler", MagicMock()) - monkeypatch.setattr(f"{module_import_path}.PingAlive", MagicMock()) - -class StubConnectorSettings(ConnectorSettings): - """ - Subclass of `ConnectorSettings` (implementation of `BaseConnectorSettings`) for testing purpose. - It overrides `BaseConnectorSettings._load_config_dict` to return a fake but valid config dict. - """ - - @classmethod - def _load_config_dict(cls, _, handler) -> dict[str, Any]: - return handler( - { - "opencti": { - "url": "http://localhost:8080", - "token": "test-token", - }, - "connector": { - "id": "connector-id", - "name": "Test Connector", - "scope": "test, connector", - "log_level": "error", - "duration_period": "PT5M", - }, - "montysecurity_c2_tracker": { - "api_base_url": "http://test.com", - "api_key": "test-api-key", - "tlp_level": "clear", - }, - } - ) - - -def test_connector_settings_is_instantiated(): +def test_connector_settings_is_instantiated(mock_connector_settings): """ Test that the implementation of `BaseConnectorSettings` (from `connectors-sdk`) can be instantiated successfully: - the implemented class MUST have a method `to_helper_config` (inherited from `BaseConnectorSettings`) - the method `to_helper_config` MUST return a dict (as in base class) """ - settings = StubConnectorSettings() - - assert isinstance(settings, ConnectorSettings) - assert isinstance(settings.to_helper_config(), dict) + assert isinstance(mock_connector_settings, ConnectorSettings) + assert isinstance(mock_connector_settings.to_helper_config(), dict) -def test_opencti_connector_helper_is_instantiated(mock_opencti_connector_helper): +def test_opencti_connector_helper_is_instantiated(mock_connector_helper): """ Test that `OpenCTIConnectorHelper` (from `pycti`) can be instantiated successfully: - the value of `settings.to_helper_config` MUST be the expected dict for `OpenCTIConnectorHelper` - the helper MUST be able to get its instance's attributes from the config dict - :param mock_opencti_connector_helper: `OpenCTIConnectorHelper` is mocked during this test to avoid any external calls to OpenCTI API + :param mock_connector_helper: `OpenCTIConnectorHelper` is mocked during this test to avoid any external calls to OpenCTI API """ - settings = StubConnectorSettings() - helper = OpenCTIConnectorHelper(config=settings.to_helper_config()) - - assert helper.opencti_url == "http://localhost:8080/" - assert helper.opencti_token == "test-token" - assert helper.connect_id == "connector-id" - assert helper.connect_name == "Test Connector" - assert helper.connect_scope == "test,connector" - assert helper.log_level == "ERROR" - assert helper.connect_duration_period == "PT5M" - - -def test_connector_is_instantiated(mock_opencti_connector_helper): + assert mock_connector_helper.opencti_url == "http://localhost:8080/" + assert mock_connector_helper.opencti_token == "test-token" + assert mock_connector_helper.connect_id == "connector-id" + assert mock_connector_helper.connect_name == "Test Connector" + assert mock_connector_helper.connect_scope == "test,connector" + assert mock_connector_helper.log_level == "ERROR" + assert mock_connector_helper.connect_duration_period == "PT5M" + + +def test_connector_is_instantiated( + mock_connector, mock_connector_settings, mock_connector_helper +): """ Test that the connector's main class can be instantiated successfully: - the connector's main class MUST be able to access env/config vars through `self.config` - the connector's main class MUST be able to access `pycti` API through `self.helper` - :param mock_opencti_connector_helper: `OpenCTIConnectorHelper` is mocked during this test to avoid any external calls to OpenCTI API + :param mock_connector: Fixture - MontySecurityC2TrackerConnector is mocked + :param mock_connector_settings: Fixture - Connector Settings is mocked + :param mock_connector_helper: Fixture - `OpenCTIConnectorHelper` is mocked """ - settings = StubConnectorSettings() - helper = OpenCTIConnectorHelper(config=settings.to_helper_config()) - - connector = MontysecurityC2TrackerConnector(config=settings, helper=helper) - - assert connector.config == settings - assert connector.helper == helper + assert mock_connector.config == mock_connector_settings + assert mock_connector.helper == mock_connector_helper + + +@pytest.mark.parametrize( + "malware_list, ips, expected_ip_count, expected_entities", + [ + ([], [], 0, 0), + (['"Malware01"'], ["8.8.8.8"], 1, 5), + (['"Malware02"'], ["2001:db8::1"], 1, 5), + (['"Malware03"'], ["bad-ip"], 0, 3), + (['"Malware04"'], ["1.2.3.4", "2001:db8::2"], 2, 7), + (['"Malware05"', '"Malware06"'], ["8.8.8.8", "2001:db8::1"], 4, 12), + ], + ids=[ + "No_malware", + "IPv4_single", + "IPv6_single", + "Invalid_IP_skipped", + "Multi_IP_valid", + "Multiple_malware", + ], +) +def test_collect_intelligence( + mock_connector, malware_list, ips, expected_ip_count, expected_entities +): + + mock_connector.client.get_malware_list.return_value = malware_list + mock_connector.client.get_ips.return_value = ips + + entities = mock_connector._collect_intelligence() + observable_list = [ + observable + for observable in entities + if observable.__class__.__name__ in ("IPV4Address", "IPV6Address") + ] + # Check that we have the final number of observable correct + assert len(observable_list) == expected_ip_count + + entities_list = [ + entitie + for entitie in entities + if entitie.__class__.__name__ + in ( + "IPV4Address", + "IPV6Address", + "Malware", + "Relationship", + "TLPMarking", + "OrganizationAuthor", + ) + ] + # Check that we have the final number of entities correct. + assert len(entities_list) == expected_entities + + relationship_list = [ + relationship + for relationship in entities + if relationship.__class__.__name__ == "Relationship" + ] + for relationship in relationship_list: + assert relationship.source.__class__.__name__ in ("IPV4Address", "IPV6Address") + assert relationship.target.__class__.__name__ == "Malware" + # Check that the relationship type is "related_to" + assert relationship.type == RelationshipType.RELATED_TO diff --git a/external-import/montysecurity-c2-tracker/tests/tests_connector/test_settings.py b/external-import/montysecurity-c2-tracker/tests/tests_connector/test_settings.py index 2f0d42eec43..768121b1e9b 100644 --- a/external-import/montysecurity-c2-tracker/tests/tests_connector/test_settings.py +++ b/external-import/montysecurity-c2-tracker/tests/tests_connector/test_settings.py @@ -22,8 +22,8 @@ "duration_period": "PT5M", }, "montysecurity_c2_tracker": { - "api_base_url": "http://test.com", - "api_key": "test-api-key", + "malware_list_url": "https://github.com/montysecurity/C2-Tracker/tree/main/data", + "malware_ips_base_url": "https://raw.githubusercontent.com/montysecurity/C2-Tracker/main/data/", "tlp_level": "clear", }, }, @@ -40,8 +40,8 @@ "scope": "test, connector", }, "montysecurity_c2_tracker": { - "api_base_url": "http://test.com", - "api_key": "test-api-key", + "malware_list_url": "https://github.com/montysecurity/C2-Tracker/tree/main/data", + "malware_ips_base_url": "https://raw.githubusercontent.com/montysecurity/C2-Tracker/main/data/", }, }, id="minimal_valid_settings_dict", @@ -96,35 +96,14 @@ def _load_config_dict(cls, _, handler) -> dict[str, Any]: "duration_period": "PT5M", }, "montysecurity_c2_tracker": { - "api_base_url": "http://test.com", - "api_key": "test-api-key", + "malware_list_url": "https://github.com/montysecurity/C2-Tracker/tree/main/data", + "malware_ips_base_url": "https://raw.githubusercontent.com/montysecurity/C2-Tracker/main/data/", "tlp_level": "clear", }, }, "opencti.url", id="invalid_opencti_url", ), - pytest.param( - { - "opencti": { - "url": "http://localhost:8080", - "token": "test-token", - }, - "connector": { - "name": "Test Connector", - "scope": "test, connector", - "log_level": "error", - "duration_period": "PT5M", - }, - "montysecurity_c2_tracker": { - "api_base_url": "http://test.com", - "api_key": "test-api-key", - "tlp_level": "clear", - }, - }, - "connector.id", - id="missing_connector_id", - ), ], ) def test_settings_should_raise_when_invalid_input(settings_dict, field_name): diff --git a/external-import/mwdb/src/mwdb.py b/external-import/mwdb/src/mwdb.py index 235c077f202..af6169d063b 100644 --- a/external-import/mwdb/src/mwdb.py +++ b/external-import/mwdb/src/mwdb.py @@ -187,22 +187,26 @@ def process_c2(self, value, virus, configtype): pattern = "[ipv4-addr:value = '" + value + "']" relation_description = "Malware communicates with C2" tags = ["C2"] + observable_type = "IPv4-Addr" elif configtype == "c2-url-ref": description = "C2 URL containing a list of possible references" pattern = "[url:value = '" + value + "']" relation_description = "Malware communicates with this url" tags = ["C2 LIST"] + observable_type = "Url" else: description = "C2 - URL" + value pattern = "[url:value = '" + value + "']" relation_description = "Malware communicates with C2" tags = ["C2"] + observable_type = "Url" if str(self.create_indicators).capitalize() == "True": indicatorc2 = stix2.Indicator( id=Indicator.generate_id(pattern), name=value, description=description, + indicator_types=["malicious-activity"], pattern_type="stix", pattern=pattern, valid_from=parser.parse(virus["malware"]["upload_time"]), @@ -214,6 +218,7 @@ def process_c2(self, value, virus, configtype): modified=parser.parse(virus["malware"]["upload_time"]), custom_properties={ "x_opencti_score": self.score, + "x_opencti_main_observable_type": observable_type, }, ) objects.append(indicatorc2) @@ -291,9 +296,12 @@ def process_config(self, config, virus): if "c2" in config.cfg: for c2 in config.cfg["c2"]: try: + if isinstance(c2, dict): + c2 = c2.get("host", str(c2)) + c2 = str(c2) if re.match("^https?://.*", c2): c2obj.extend(self.process_c2(c2, virus, "c2-url")) - if re.match( + elif re.match( r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(:\d{1,5})?", c2, ): @@ -471,6 +479,7 @@ def process_virus(self, malware): id=Indicator.generate_id(pattern), name=str(malware.file_name).replace("-" + malware.sha256, ""), description=description, + indicator_types=["malicious-activity"], pattern_type="stix", pattern=pattern, valid_from=malware.upload_time, @@ -482,6 +491,7 @@ def process_virus(self, malware): modified=malware.upload_time, custom_properties={ "x_opencti_score": self.score, + "x_opencti_main_observable_type": "StixFile", }, ) diff --git a/external-import/mwdb/src/requirements.txt b/external-import/mwdb/src/requirements.txt index 0b5421a9b55..e9394acc9f9 100644 --- a/external-import/mwdb/src/requirements.txt +++ b/external-import/mwdb/src/requirements.txt @@ -1,3 +1,3 @@ -pycti==7.260309.0 -urllib3==2.6.3 +pycti==7.260515.0 +urllib3==2.7.0 mwdblib==4.6.0 diff --git a/external-import/nameshield/Dockerfile b/external-import/nameshield/Dockerfile new file mode 100644 index 00000000000..eafa9e32e88 --- /dev/null +++ b/external-import/nameshield/Dockerfile @@ -0,0 +1,18 @@ +FROM python:3.12-alpine +ENV CONNECTOR_TYPE=EXTERNAL_IMPORT + +# Copy the connector +COPY src /opt/opencti-connector-nameshield + +# Install Python modules +RUN apk update && apk upgrade && \ + apk --no-cache add git build-base libmagic libxslt libxslt-dev libxml2 libxml2-dev && \ + cd /opt/opencti-connector-nameshield && \ + pip install --no-cache-dir -r requirements.txt && \ + apk del git build-base libxslt-dev libxml2-dev && \ + rm -rf /var/cache/apk/* + +# Expose and entrypoint +COPY entrypoint.sh / +RUN chmod +x /entrypoint.sh +ENTRYPOINT ["/entrypoint.sh"] \ No newline at end of file diff --git a/external-import/nameshield/README.md b/external-import/nameshield/README.md new file mode 100644 index 00000000000..b2ade57c313 --- /dev/null +++ b/external-import/nameshield/README.md @@ -0,0 +1,127 @@ +# OpenCTI Nameshield Connector + +## Installation + +This connector facilitates the import of domain names from the Nameshield registrar. + +## Configuration + +| Parameter | Docker envvar | Description | +|----------------------------------|----------------------------------|----------------------------------------------------------------------------------------------------| +| `opencti_url` | `OPENCTI_URL` | The URL of the OpenCTI platform. | +| `opencti_token` | `OPENCTI_TOKEN` | The default admin token configured in the OpenCTI platform parameters file. | +| `connector_id` | `CONNECTOR_ID` | A valid arbitrary `UUIDv4` that must be unique for this connector. | +| `connector_type` | `CONNECTOR_TYPE` | Must be `EXTERNAL_IMPORT` | +| `connector_name` | `CONNECTOR_NAME` | The name of the connector, can be just "Nameshield" | +| `connector_update_existing_data` | `CONNECTOR_UPDATE_EXISTING_DATA` | If an entity already exists, update its attributes with information provided by this connector. | +| `connector_log_level` | `CONNECTOR_LOG_LEVEL` | The log level for this connector, could be `debug`, `info`, `warn` or `error` (less verbose). | +| `nameshield_auth_bearer` | `NAMESHIELD_AUTH_BEARER` | You connection bearer provided by nameshield (you need autorise you IP also) | +| `nameshield_server` | `NAMESHIELD_SERVER` | Must be `api.nameshield.net` (but if Domain name change one day...) | +| `nameshield_api_version` | `NAMESHIELD_API_VERSION` | Must be `v1` (but if version change one day...) | +| `nameshield_api_endpoint` | `NAMESHIELD_API_ENDPOINT` | Must be `registrar` (but if it change one day...) | +| `nameshield_url_list` | `NAMESHIELD_URL_LIST` | Must be `https://{server}/{api_endpoint}/{api_version}/domains` (but if it change one day...) | +| `nameshield_url_domain` | `NAMESHIELD_URL_DOMAIN` | Must be `https://{server}/{api_endpoint}/{api_version}/domains/{domain}` (but if it change one day...) | +| `nameshield_interval` | `NAMESHIELD_INTERVAL` | Time (in hours) between run (168 is a good value: once a week) | +| `nameshield_domain_limit` | `NAMESHIELD_DOMAIN_LIMIT` | Time (in hours) between run (168 is a good value: once a week) in cas yuou have a looooooot of domain name | +| `nameshield_api_endpointmarking` | `NAMESHIELD_MARKING` | Hot to mark you domain `TLP:GREEN` | +| `nameshield_link_to_identities` | `NAMESHIELD_LINK_TO_IDENTITIES` | In cas you want to link it to your Firm (for exemple) (or more entities comma separated) | + +## Docker Compose Example + +See [docker-compose.yml](./docker-compose.yml) + +## Reminders +- YOU NEED TO autorize your IP adress to acces Nameshield API +- if you have several account run it several time with different `CONNECTOR_ID` and `CONNECTOR_NAME` + +## Not Running on Docker? +You can run it without docker (or elsewhere) + +### Create venv + +```bash +# Let's create a folder for connector +mkdir -p /root/opencti/running-connectors/ +# Let's create a folder for connectors raw sources +mkdir -p /root/raw_src/ +cd /root/raw_src/ +git clone https://github.com/OpenCTI-Platform/connectors.git + +# Virtual environement creation +cd /root/opencti/running-connectors/ +python3 -m venv --prompt "OCTI Connectors" /root/opencti/running-connectors/.octi_con_venv +source /root/opencti/running-connectors/.octi_con_venv/bin/activate +pip3 install -r /root/raw_src/connectors/external-import/NameShield/src/requirements.txt +nano /root/opencti/running-connectors/connector_nameshield_domains.sh +``` + +```bash +#!/bin/bash + +export OPENCTI_URL="http://localhost:4000" +export OPENCTI_TOKEN="YOUR-USER-TOKEN" +export CONNECTOR_ID="nameshield-ID" +export CONNECTOR_TYPE="EXTERNAL_IMPORT" +export CONNECTOR_NAME="NameShield Connector" +export CONNECTOR_LOG_LEVEL="info" + +export NAMESHIELD_AUTH_BEARER="CHANGEME" +export NAMESHIELD_SERVER="api.nameshield.net" +export NAMESHIELD_API_VERSION="v1" +export NAMESHIELD_API_ENDPOINT="registrar" +export NAMESHIELD_URL_LIST="https://{server}/{api_endpoint}/{api_version}/domains" +export NAMESHIELD_URL_DOMAIN="https://{server}/{api_endpoint}/{api_version}/domains/{domain}" +export NAMESHIELD_INTERVAL=168 +export NAMESHIELD_DOMAIN_LIMIT=10000 +export NAMESHIELD_MARKING="TLP:GREEN" + +# Venv activation +source /root/opencti/running-connectors/.octi_con_venv/bin/activate +# Run Connector +python3 /root/raw_src/connectors/external-import/NameShield/src/NameShield.py + +``` +Make it executable +```bash +chmod +x /root/opencti/running-connectors/connector_nameshield_domains.sh +``` +### Service Creation +```bash +nano /etc/systemd/system/opencti-con-nameshield.service +``` + +```toml +[Unit] +Description=OpenCTI Connector nameshield +Documentation=https://github.com/OpenCTI-Platform/connectors/tree/master/external-import/NameShield +# It start after OCTI +Requires=opencti.service +After=opencti.service + +[Service] +User=root +Group=root +WorkingDirectory=/root/opencti/running-connectors/ + +# Wait before running +ExecStartPre=/bin/sleep 60 + +# Run connector +ExecStart=/bin/bash /root/opencti/running-connectors/connector_nameshield_domains.sh +Restart=on-failure +RestartSec=5s + +[Install] +WantedBy=multi-user.target +``` + +### Activate this service + +```bash +systemctl daemon-reload +systemctl enable opencti-con-nameshield.service +systemctl start opencti-con-nameshield.service +``` + +### Versioning +- 26-02-18 Adding a PGP Signed Commit \ No newline at end of file diff --git a/external-import/nameshield/__metadata__/connector_manifest.json b/external-import/nameshield/__metadata__/connector_manifest.json new file mode 100644 index 00000000000..46ff7b9d55d --- /dev/null +++ b/external-import/nameshield/__metadata__/connector_manifest.json @@ -0,0 +1,21 @@ +{ + "title": "NameShield", + "slug": "nameshield", + "description": "NameShield is registrar providing domain privacy and security services. This connector allows you to import your domain list from NameShield service into OpenCTI.", + "short_description": "NameShield connector to import your domain list from NameShield service.", + "logo": "external-import/nameshield/__metadata__/logo.png", + "use_cases": [ + "Legitimate use case" + ], + "verified": true, + "last_verified_date": null, + "playbook_supported": false, + "max_confidence_level": 50, + "support_version": ">=6.9.0", + "subscription_link": null, + "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/external-import/nameshield", + "manager_supported": false, + "container_version": "rolling", + "container_image": "opencti/connector-nameshield", + "container_type": "EXTERNAL_IMPORT" +} \ No newline at end of file diff --git a/external-import/nameshield/__metadata__/logo.png b/external-import/nameshield/__metadata__/logo.png new file mode 100644 index 00000000000..07fc8f58b25 Binary files /dev/null and b/external-import/nameshield/__metadata__/logo.png differ diff --git a/external-import/nameshield/docker-compose.yml b/external-import/nameshield/docker-compose.yml new file mode 100644 index 00000000000..5bd323cd808 --- /dev/null +++ b/external-import/nameshield/docker-compose.yml @@ -0,0 +1,22 @@ +version: '1' +services: + connector-nameshield: + image: opencti/connector-nameshield:rolling + environment: + - OPENCTI_URL=http://opencti:8080 + - OPENCTI_TOKEN=CHANGEME + - CONNECTOR_ID=CHANGEME + - CONNECTOR_TYPE=EXTERNAL_IMPORT + - CONNECTOR_NAME=NAMESHIELD + - CONNECTOR_LOG_LEVEL=error + - NAMESHIELD_AUTH_BEARER=CHANGEME + - NAMESHIELD_SERVER=api.nameshield.net + - NAMESHIELD_API_VERSION=v1 + - NAMESHIELD_API_ENDPOINT=registrar + - NAMESHIELD_URL_LIST=https://{server}/{api_endpoint}/{api_version}/domains + - NAMESHIELD_URL_DOMAIN=https://{server}/{api_endpoint}/{api_version}/domains/{domain} + - NAMESHIELD_INTERVAL=168 + - NAMESHIELD_DOMAIN_LIMIT=10000 + - NAMESHIELD_MARKING=TLP:GREEN + - NAMESHIELD_LINK_TO_IDENTITIES=none + restart: always \ No newline at end of file diff --git a/external-import/vxvault/entrypoint.sh b/external-import/nameshield/entrypoint.sh similarity index 51% rename from external-import/vxvault/entrypoint.sh rename to external-import/nameshield/entrypoint.sh index c505e1e27b2..d1e74ddeb2a 100644 --- a/external-import/vxvault/entrypoint.sh +++ b/external-import/nameshield/entrypoint.sh @@ -1,7 +1,7 @@ #!/bin/sh # Correct working directory -cd /opt/opencti-connector-vxvault +cd /opt/opencti-connector-nameshield # Start the connector -python3 vxvault.py \ No newline at end of file +python3 NameShield.py \ No newline at end of file diff --git a/external-import/nameshield/src/NameShield.py b/external-import/nameshield/src/NameShield.py new file mode 100644 index 00000000000..a113cf98883 --- /dev/null +++ b/external-import/nameshield/src/NameShield.py @@ -0,0 +1,494 @@ +# Import Done with isort +import datetime +import json +import os +import sys +import time + +import requests +import stix2 +import yaml +from pycti import ( + Identity, + Indicator, + MarkingDefinition, + OpenCTIConnectorHelper, + StixCoreRelationship, + get_config_variable, +) + + +class NameShield: + """NameShield connector""" + + def __init__(self): + """Initializer""" + # ============================================================== + # This part is common to all connectors, it loads the config file, and the parameters to local variables + # ============================================================== + # Instantiate the connector helper from config + config_file_path = os.path.dirname(os.path.abspath(__file__)) + "/config.yml" + config_file_path = config_file_path.replace("\\", "/") + config = ( + yaml.load(open(config_file_path), Loader=yaml.FullLoader) + if os.path.isfile(config_file_path) + else {} + ) + self.helper = OpenCTIConnectorHelper(config) + + # Extra config + # Auth Bearer + self.nameshield_auth_bearer = get_config_variable( + "NAMESHIELD_AUTH_BEARER", + ["nameshield", "auth_bearer"], + config, + ) + # server: 'api.nameshield.net' + self.nameshield_server = get_config_variable( + "NAMESHIELD_SERVER", + ["nameshield", "server"], + config, + ) + # api_version: 'v1' + self.nameshield_api_version = get_config_variable( + "NAMESHIELD_API_VERSION", + ["nameshield", "api_version"], + config, + ) + # api_endpoint: 'v1' + self.nameshield_api_endpoint = get_config_variable( + "NAMESHIELD_API_ENDPOINT", + ["nameshield", "api_endpoint"], + config, + ) + # url_list: 'https://{server}/{api_endpoint}/{api_version}/domains' + self.nameshield_url_list = get_config_variable( + "NAMESHIELD_URL_LIST", + ["nameshield", "url_list"], + config, + default="https://{server}/{api_endpoint}/{api_version}/domains", + ) + # url_domain: 'https://{server}/{api_endpoint}/{api_version}/domains/{domain}' + self.nameshield_url_domain = get_config_variable( + "NAMESHIELD_URL_DOMAIN", + ["nameshield", "url_domain"], + config, + default="https://{server}/{api_endpoint}/{api_version}/domains/{domain}", + ) + # interval: 168 + self.nameshield_interval = get_config_variable( + "NAMESHIELD_INTERVAL", + ["nameshield", "interval"], + config, + isNumber=True, + default=168, + ) + # Domain Limit: 10000 + self.nameshield_ioc_limit = get_config_variable( + "NAMESHIELD_DOMAIN_LIMIT", + ["nameshield", "domain_limit"], + config, + isNumber=True, + default=10000, + ) + # MArking: TLP:GREEN + self.nameshield_marking = get_config_variable( + "NAMESHIELD_MARKING", + ["nameshield", "marking_definition"], + config, + default="TLP:GREEN", + ) + # NAMESHIELD_LINK_TO_IDENTITIES + self.nameshield_link_to_identities = get_config_variable( + "NAMESHIELD_LINK_TO_IDENTITIES", + ["nameshield", "link_to_identities"], + config, + default="", + ) + + self.helper.connector_logger.debug("NameShield connector initialized.") + self.helper.connector_logger.debug( + f"NameShield server: {self.nameshield_server}." + ) + self.helper.connector_logger.debug( + f"NameShield api_version: {self.nameshield_api_version}." + ) + self.helper.connector_logger.debug( + f"NameShield api_endpoint: {self.nameshield_api_endpoint}." + ) + self.helper.connector_logger.debug( + f"NameShield url_list: {self.nameshield_url_list}." + ) + self.helper.connector_logger.debug( + f"NameShield url_domain: {self.nameshield_url_domain}." + ) + self.helper.connector_logger.debug( + f"NameShield marking: {self.nameshield_marking}." + ) + + def set_marking(self): + amber_strict_marking = stix2.MarkingDefinition( + id=MarkingDefinition.generate_id("TLP", "TLP:AMBER+STRICT"), + definition_type="statement", + definition={"statement": "custom"}, + allow_custom=True, + x_opencti_definition_type="TLP", + x_opencti_definition="TLP:AMBER+STRICT", + ) + + markings_by_label = { + "TLP:WHITE": stix2.TLP_WHITE, + "TLP:CLEAR": stix2.TLP_WHITE, + "TLP:GREEN": stix2.TLP_GREEN, + "TLP:AMBER": stix2.TLP_AMBER, + "TLP:AMBER+STRICT": amber_strict_marking, + "TLP:RED": stix2.TLP_RED, + } + + # Use default when the configured marking is invalid + marking = markings_by_label.get(self.nameshield_marking, amber_strict_marking) + self.nameshield_marking = marking + + def make_url_dom_list(self): + url = self.nameshield_url_list.format( + server=self.nameshield_server, + api_endpoint=self.nameshield_api_endpoint, + api_version=self.nameshield_api_version, + ) + self.helper.connector_logger.debug(f"NameShield url domain list: {url}.") + return url + + def make_url_dom(self, domain): + url = self.nameshield_url_domain.format( + server=self.nameshield_server, + api_endpoint=self.nameshield_api_endpoint, + api_version=self.nameshield_api_version, + domain=domain, + ) + self.helper.connector_logger.debug(f"NameShield url domain details: {url}.") + return url + + def nameshield_api_get_list(self): + try: + headers = { + "Authorization": "Bearer {}".format(self.nameshield_auth_bearer), + "Content-Type": "application/json", + } + nameshield_result = [] + url = self.make_url_dom_list() + response = requests.get( + url, headers=headers, verify=True, timeout=(600, 600) + ) + self.helper.connector_logger.debug( + f"We get a response from NameShield API: {response.status_code}." + ) + r_json = response.json() + if "errors" in r_json: + if isinstance(r_json["errors"], list): + for one_error in r_json["errors"]: + self.helper.connector_logger.error( + f"Error NameShield: {one_error['code']} {one_error['message']}" + ) + self.helper.set_state( + { + "Error": f"Error NameShield: {r_json["errors"][0]['code']} {r_json["errors"][0]['message']}" + } + ) + elif isinstance(r_json["errors"], dict): + error = r_json["errors"] + if "code" in error and "message" in error: + self.helper.connector_logger.error( + f"Error NameShield: {error['code']} {error['message']}" + ) + self.helper.set_state( + { + "Error": f"Error NameShield: {error['code']} {error['message']}" + } + ) + else: + self.helper.connector_logger.error( + f"Abnormal Error NameShield: {str(error)}" + ) + self.helper.set_state( + {"Error": f"Abnormal Error NameShield: {str(error)}"} + ) + return None + # Check is a message has arrived + if "message" in r_json: + self.helper.connector_logger.error( + f"NameShield send a message : {r_json['message']}" + ) + # Check if data field is present + if not "data" in r_json: + self.helper.connector_logger.error( + "NameShield response has no data field." + ) + keys_str = ",".join(r_json.keys()) + self.helper.set_state( + { + "Error": f"Error NameShield no data returned only thoses keys: {keys_str}" + } + ) + return None + # We have to retreive details for each domain + self.helper.connector_logger.debug(f"We get : {str(r_json.keys())}.") + for domain_entry in r_json["data"][: self.nameshield_ioc_limit]: + domain_name = domain_entry["domain"] + if domain_name: + url_domain = self.make_url_dom(domain_name) + response_domain = requests.get( + url_domain, + headers=headers, + verify=True, + timeout=(600, 600), + ) + domain_info = response_domain.json() + nameshield_result.append(domain_info["data"]) + return nameshield_result + except Exception as e: + self.helper.connector_logger.error( + f"Error while getting intelligence from NameShield: {e}" + ) + + def create_stix_object(self, threat, identity_id): + # TBD + # Threat = nameshield_dom (only domain type for now) + # identity_id = OCTI Identity ID for NameShield + stix_objects = [] + # We generate STIX objects from each domain entry + description = "" + for one in threat.keys(): + value_loc = threat.get(one, "") + if value_loc: + description += str(one).rjust(25, " ") + " : " + str(value_loc) + " \n" + description += "\n\nImported from NameShield API." + # STIX: Domain-Name + try: + name = str(threat.get("unicode")) + if len(name) < 3: + self.helper.connector_logger.error( + f"Domain name really too short: {threat}." + ) + return None + else: + pattern = f"[domain-name:value = '{name}']" + observable_type = "Domain-Name" + observable = stix2.DomainName( + value=name, + object_marking_refs=[self.nameshield_marking], + custom_properties={ + "x_opencti_score": 80, + "x_opencti_description": description, + "created_by_ref": identity_id, + }, + ) + stix_objects.append(observable) + except Exception as e: + self.helper.connector_logger.error( + f"Error while creating STIX object from threat: {threat}, error: {e}" + ) + return None + creation_date = None + valid_until_date = None + try: + creation_date = datetime.datetime.fromisoformat( + str(threat.get("nicCreationDate")) + ).replace(tzinfo=datetime.timezone.utc) + except Exception as e: + self.helper.connector_logger.error( + f"Error while parsing creation date for threat: {threat}, error: {e}" + ) + try: + valid_until_date = datetime.datetime.fromisoformat( + str(threat.get("expirationDate")) + ).replace(tzinfo=datetime.timezone.utc) + except Exception as e: + self.helper.connector_logger.error( + f"Error while parsing expiration date for threat: {threat}, error: {e}" + ) + + # STIX: Indicator + try: + indicator = stix2.Indicator( + id=Indicator.generate_id(pattern), + name=name, + pattern=pattern, + pattern_type="stix", + description=description, + created_by_ref=identity_id, + created=creation_date, + valid_until=valid_until_date, + modified=datetime.datetime.now(tz=datetime.timezone.utc), + labels=[threat.get("class", ""), threat.get("property", "")], + object_marking_refs=[self.nameshield_marking], + custom_properties={ + "x_opencti_score": threat.get("threat_level"), + "x_opencti_main_observable_type": observable_type, + }, + ) + stix_objects.append(indicator) + except Exception as e: + self.helper.connector_logger.error( + f"Error while creating indicator for threat: {threat}, error: {e}" + ) + # Indicator is mandatory for the next created elements, if we can't create it we return the list of STIX objects created until now (Domain-Name only in this case) + return stix_objects + # STIX: Relationship Indicator --> Observable + try: + relationship = stix2.Relationship( + id=StixCoreRelationship.generate_id( + "based-on", indicator["id"], observable["id"] + ), + relationship_type="based-on", + source_ref=indicator["id"], + target_ref=observable["id"], + created_by_ref=identity_id, + start_time=creation_date, + stop_time=valid_until_date, + object_marking_refs=[self.nameshield_marking], + ) + stix_objects.append(relationship) + except Exception as e: + self.helper.connector_logger.error( + f"Error while creating Relationship Indicator --> Observable for threat: {threat}, error: {e}" + ) + # Relationship is not mandatory for further elements, keep going + + # STIX: Relationships to Identities + if len(self.nameshield_link_to_identities) > 20: + try: + identities_list = [ + identity.strip() + for identity in self.nameshield_link_to_identities.split(",") + ] + for identity_id2 in identities_list: + relationship_identity = stix2.Relationship( + id=StixCoreRelationship.generate_id( + "attributed-to", indicator["id"], identity_id2 + ), + relationship_type="attributed-to", + source_ref=indicator["id"], + target_ref=identity_id2, + start_time=creation_date, + stop_time=valid_until_date, + created_by_ref=identity_id, + object_marking_refs=[self.nameshield_marking], + ) + stix_objects.append(relationship_identity) + except Exception as e: + self.helper.connector_logger.error( + f"Error while creating STIX object relation to : {self.nameshield_link_to_identities}, error: {e}" + ) + + # Return the list of STIX objects (for bundle creation) + return stix_objects + + def create_stix_bundle(self, domain_list): + + if domain_list is None: + self.helper.connector_logger.info("No NameShield domains returned.") + return None, None + + identity_id = Identity.generate_id( + name="NameShield", identity_class="organization" + ) + identity = stix2.Identity( + id=identity_id, + spec_version="2.1", + name="NameShield", + created="2024-07-17T10:53:11.000Z", + modified="2025-12-08T10:03:08.243Z", + identity_class="organization", + type="identity", + object_marking_refs=[stix2.TLP_WHITE["id"]], + ) + + stix_objects = [identity, self.nameshield_marking] + for nameshield_dom in domain_list: + stix_object = self.create_stix_object(nameshield_dom, identity_id) + if stix_object: + stix_objects.extend(stix_object) + + bundle = stix2.Bundle( + objects=stix_objects, + allow_custom=True, + ) + return bundle, domain_list + + def opencti_bundle(self, work_id): + info = self.nameshield_api_get_list() + try: + stix_bundle, all_threats = self.create_stix_bundle(info) + if stix_bundle is None: + self.helper.connector_logger.debug( + "No STIX bundle created from NameShield data (None was return)." + ) + else: + # Convert the bundle to a dictionary + stix_bundle_dict = json.loads(stix_bundle.serialize()) + + stix_bundle_dict = json.dumps(stix_bundle_dict, indent=4) + self.helper.send_stix2_bundle(stix_bundle_dict, work_id=work_id) + except Exception as e: + self.helper.connector_logger.error(str(e)) + + def send_bundle(self, work_id, serialized_bundle: str): + try: + self.helper.send_stix2_bundle( + serialized_bundle, + entities_types=self.helper.connect_scope, + work_id=work_id, + ) + except Exception as e: + self.helper.connector_logger.error(f"Error while sending bundle: {e}") + + def process_data(self): + try: + self.helper.connector_logger.info("Synchronizing with NameShield APIs...") + timestamp = int(time.time()) + now = datetime.datetime.fromtimestamp(timestamp, datetime.timezone.utc) + friendly_name = "NameShield run @ " + now.strftime("%Y-%m-%d %H:%M:%S") + work_id = self.helper.api.work.initiate_work( + self.helper.connect_id, friendly_name + ) + current_state = self.helper.get_state() + if current_state is None: + self.helper.set_state( + {"last_run": str(now.strftime("%Y-%m-%d %H:%M:%S"))} + ) + current_state = self.helper.get_state() + self.helper.connector_logger.info( + "Get infos since " + current_state["last_run"] + ) + self.opencti_bundle(work_id) + self.helper.set_state({"last_run": now.astimezone().isoformat()}) + message = "End of synchronization" + self.helper.api.work.to_processed(work_id, message) + self.helper.connector_logger.info(message) + time.sleep(self.nameshield_interval * 60 * 60) + except (KeyboardInterrupt, SystemExit): + self.helper.connector_logger.info("Connector stop") + sys.exit(0) + except Exception as e: + self.helper.connector_logger.error(str(e)) + + def run(self): + self.helper.connector_logger.info("Fetching NameShield datasets...") + self.set_marking() + get_run_and_terminate = getattr(self.helper, "get_run_and_terminate", None) + if callable(get_run_and_terminate) and self.helper.get_run_and_terminate(): + self.process_data() + self.helper.force_ping() + else: + while True: + self.process_data() + + +if __name__ == "__main__": + try: + NameShieldConnector = NameShield() + NameShieldConnector.run() + except Exception as e: + print(e) + time.sleep(10) + sys.exit(1) diff --git a/external-import/nameshield/src/config.yml.sample b/external-import/nameshield/src/config.yml.sample new file mode 100644 index 00000000000..45ea207693c --- /dev/null +++ b/external-import/nameshield/src/config.yml.sample @@ -0,0 +1,23 @@ +opencti: + url: 'http://localhost:8080' + token: 'ChangeMe' + + +connector: + id: 'ChangeMe' + type: 'EXTERNAL_IMPORT' + name: 'NameShield' + scope: 'NameShield' + log_level: 'info' + + +nameshield: + auth_bearer: 'ChangeMe' + server: 'api.nameshield.net' + api_version: 'v1' + api_endpoint: 'registrar' + url_list: 'https://{server}/{api_endpoint}/{api_version}/domains' + url_domain: 'https://{server}/{api_endpoint}/{api_version}/domains/{domain}' + interval: 168 # In hours, once a week + domain_limit: 10000 # Limit of size to import (for each IOC types) + marking_definition: 'TLP:GREEN' \ No newline at end of file diff --git a/external-import/nameshield/src/requirements.txt b/external-import/nameshield/src/requirements.txt new file mode 100644 index 00000000000..781eb495fb2 --- /dev/null +++ b/external-import/nameshield/src/requirements.txt @@ -0,0 +1,3 @@ +stix2==3.0.1 +requests==2.33.0 +pycti==7.260515.0 \ No newline at end of file diff --git a/external-import/nti/src/requirements.txt b/external-import/nti/src/requirements.txt index 4c9e0eaa9e0..b8afc0bf48d 100644 --- a/external-import/nti/src/requirements.txt +++ b/external-import/nti/src/requirements.txt @@ -1,2 +1,2 @@ -pycti==7.260309.0 +pycti==7.260515.0 pyyaml~=6.0.2 diff --git a/external-import/opencsam/src/requirements.txt b/external-import/opencsam/src/requirements.txt index 2e1238a8a8e..7ba225bbd73 100644 --- a/external-import/opencsam/src/requirements.txt +++ b/external-import/opencsam/src/requirements.txt @@ -1,2 +1,2 @@ -pycti==7.260309.0 -urllib3==2.6.3 +pycti==7.260515.0 +urllib3==2.7.0 diff --git a/external-import/opencti-stream/.dockerignore b/external-import/opencti-stream/.dockerignore new file mode 100644 index 00000000000..c5d360e969a --- /dev/null +++ b/external-import/opencti-stream/.dockerignore @@ -0,0 +1,9 @@ +__metadata__ +**/__pycache__ +**/__docs__ +**/.venv +**/venv +**/logs +**/config.yml +**/*.egg-info +**/*.gql diff --git a/external-import/opencti-stream/Dockerfile b/external-import/opencti-stream/Dockerfile new file mode 100644 index 00000000000..87a00b845a2 --- /dev/null +++ b/external-import/opencti-stream/Dockerfile @@ -0,0 +1,14 @@ +FROM python:3.12-alpine +ENV CONNECTOR_TYPE=EXTERNAL_IMPORT + +# Copy the connector +COPY src /opt/opencti-connector-opencti-stream +WORKDIR /opt/opencti-connector-opencti-stream + +# Install Python modules +# hadolint ignore=DL3003 +RUN apk --no-cache add git build-base libmagic libffi-dev && \ + pip3 install --no-cache-dir -r requirements.txt && \ + apk del git build-base + +ENTRYPOINT ["python3", "main.py"] diff --git a/external-import/opencti-stream/README.md b/external-import/opencti-stream/README.md new file mode 100644 index 00000000000..58832aa7912 --- /dev/null +++ b/external-import/opencti-stream/README.md @@ -0,0 +1,331 @@ +# OpenCTI Stream Connector + +| Status | Date | Comment | +|-------------------|------|---------| +| Filigran Verified | - | - | + +The OpenCTI Stream connector subscribes to an OpenCTI live stream and forwards each +create/update event as a single STIX 2.1 bundle. The output destination is selected via +the standard connector helper settings, so the same connector can be used to: + +- **Queue mode** (default): re-emit stream events as bundles on the connector's RabbitMQ + queue, where workers ingest them. Useful for fan-out, replay, or running a stream + through workers as a different applicant (impersonation). +- **Diode mode (directory)**: write each bundle as a JSON file in a local directory, + consumed on the target side by the [`diode-import`](../diode-import/) connector. +- **Diode mode (S3)**: upload each bundle to an S3 bucket, consumed on the target side by + the [`diode-import`](../diode-import/) connector. + +The originating user (`origin.user_id` of each stream event) is propagated as the bundle +`applicant_id`. In queue mode this drives worker impersonation; in diode mode it is +written into the bundle file and remapped on the target instance via +`DIODE_IMPORT_APPLICANT_MAPPINGS`. + +## Table of Contents + +- [OpenCTI Stream Connector](#opencti-stream-connector) + - [Table of Contents](#table-of-contents) + - [Introduction](#introduction) + - [Installation](#installation) + - [Requirements](#requirements) + - [Configuration variables](#configuration-variables) + - [OpenCTI environment variables](#opencti-environment-variables) + - [Base connector environment variables](#base-connector-environment-variables) + - [Live stream parameters](#live-stream-parameters) + - [Output mode parameters](#output-mode-parameters) + - [Deployment](#deployment) + - [Docker Deployment](#docker-deployment) + - [Manual Deployment](#manual-deployment) + - [Behavior](#behavior) + - [Data flow](#data-flow) + - [Event handling](#event-handling) + - [Applicant propagation](#applicant-propagation) + - [Debugging](#debugging) + - [Additional information](#additional-information) + +## Introduction + +The connector consumes an OpenCTI live stream (Server-Sent Events) on the source +platform it is registered with, builds a one-object STIX 2.1 bundle from each +create/update event, and dispatches it via `OpenCTIConnectorHelper.send_stix2_bundle()`. +Because all output modes are inherited from the helper, the connector itself remains +deliberately small. + +Typical use cases: + +- Replicating data between OpenCTI instances over a unidirectional diode (paired with + `diode-import` on the target instance). +- Cross-region or air-gapped synchronization through S3 as an intermediate buffer. +- In-platform fan-out or republishing of a stream via the queue, with proper applicant + attribution. + +## Installation + +### Requirements + +- OpenCTI Platform >= 6.8.12 +- Python >= 3.11 (the container uses Python 3.12) +- A live stream configured on the source OpenCTI instance (or one of the built-in + `live` / `raw` streams) +- Optionally, the [`diode-import`](../diode-import/) connector deployed on the target + instance for directory or S3 modes + +## Configuration variables + +There are a number of configuration options, which are set either in `docker-compose.yml` +(for Docker) or in `config.yml` (for manual deployment). + +### OpenCTI environment variables + +| Parameter | config.yml | Docker environment variable | Mandatory | Description | +|---------------|------------|-----------------------------|-----------|------------------------------------------------------| +| OpenCTI URL | url | `OPENCTI_URL` | Yes | The URL of the OpenCTI platform. | +| OpenCTI Token | token | `OPENCTI_TOKEN` | Yes | The default admin token set in the OpenCTI platform. | + +### Base connector environment variables + +| Parameter | config.yml | Docker environment variable | Default | Mandatory | Description | +|-----------------|------------|-----------------------------|------------------|-----------|--------------------------------------------------------------------------| +| Connector ID | id | `CONNECTOR_ID` | | Yes | A unique `UUIDv4` identifier for this connector instance. | +| Connector Name | name | `CONNECTOR_NAME` | OpenCTI Stream | No | Name of the connector. | +| Connector Scope | scope | `CONNECTOR_SCOPE` | | Yes | The scope of the connector (e.g. `opencti-stream`). | +| Log Level | log_level | `CONNECTOR_LOG_LEVEL` | error | No | Determines the verbosity of logs: `debug`, `info`, `warn`, or `error`. | + +### Live stream parameters + +| Parameter | config.yml | Docker environment variable | Default | Mandatory | Description | +|---------------------------------|-----------------------------|-----------------------------------------|----------------|-----------|-----------------------------------------------------------------------------------------------| +| Live Stream OpenCTI URL | live_stream_opencti_url | `CONNECTOR_LIVE_STREAM_OPENCTI_URL` | `OPENCTI_URL` | No | URL of the OpenCTI to subscribe to. Defaults to `OPENCTI_URL` (the OpenCTI the connector is registered with). Set to a different host to listen to a remote / source OpenCTI. | +| Live Stream OpenCTI Token | live_stream_opencti_token | `CONNECTOR_LIVE_STREAM_OPENCTI_TOKEN` | `OPENCTI_TOKEN`| No | API token for `live_stream_opencti_url`. Defaults to `OPENCTI_TOKEN` when unset. Required when listening to a remote instance with different auth. | +| Live Stream ID | live_stream_id | `CONNECTOR_LIVE_STREAM_ID` | | Yes | The OpenCTI live stream to subscribe to: `live`, `raw`, or a stream collection UUID. | +| Live Stream Listen Delete | live_stream_listen_delete | `CONNECTOR_LIVE_STREAM_LISTEN_DELETE` | false | No | Whether to subscribe to delete events. Disabled by default (this connector forwards upserts). | +| Live Stream No Dependencies | live_stream_no_dependencies | `CONNECTOR_LIVE_STREAM_NO_DEPENDENCIES` | false | No | Whether to receive only the event's own object (no dependent objects). Disabled by default so dependencies are included. | + +### Output mode parameters + +These are standard `OpenCTIConnectorHelper` parameters. Pick one of the three modes by +toggling the matching flag(s). + +| Parameter | config.yml | Docker environment variable | Default | Description | +|----------------------------|------------------------------|--------------------------------------|-------------|-----------------------------------------------------------------------------------| +| Send to Queue | send_to_queue | `CONNECTOR_SEND_TO_QUEUE` | true | Push each bundle to the connector's RabbitMQ queue. | +| Send to Directory | send_to_directory | `CONNECTOR_SEND_TO_DIRECTORY` | false | Write each bundle as a JSON file in `send_to_directory_path`. | +| Send to Directory Path | send_to_directory_path | `CONNECTOR_SEND_TO_DIRECTORY_PATH` | | Target directory for bundle files (required when directory mode is enabled). | +| Send to Directory Retention| send_to_directory_retention | `CONNECTOR_SEND_TO_DIRECTORY_RETENTION` | 7 | Days to retain bundle files before automatic cleanup (0 disables cleanup). | +| Send to S3 | send_to_s3 | `CONNECTOR_SEND_TO_S3` | false | Upload each bundle as a JSON object in `send_to_s3_bucket`. | +| Send to S3 Bucket | send_to_s3_bucket | `CONNECTOR_SEND_TO_S3_BUCKET` | | Target S3 bucket. If empty, the OpenCTI bucket is used. | +| Send to S3 Folder | send_to_s3_folder | `CONNECTOR_SEND_TO_S3_FOLDER` | connectors | Folder/prefix in the bucket. Use `/` or `.` for the bucket root. | +| Send to S3 Retention | send_to_s3_retention | `CONNECTOR_SEND_TO_S3_RETENTION` | 7 | Days to retain objects before automatic cleanup (0 disables cleanup). | + +For S3 credentials and endpoint, the connector reuses the OpenCTI platform's S3 +configuration by default. To override, set the standard `S3_ENDPOINT`, `S3_PORT`, +`S3_ACCESS_KEY`, `S3_SECRET_KEY`, `S3_USE_SSL` and `S3_BUCKET_REGION` variables. + +## Deployment + +### Docker Deployment + +Build the Docker image: + +```bash +docker build -t opencti/connector-opencti-stream:latest . +``` + +#### Example: Queue mode (default) + +```yaml + connector-opencti-stream: + image: opencti/connector-opencti-stream:latest + environment: + - OPENCTI_URL=http://localhost + - OPENCTI_TOKEN=ChangeMe + - CONNECTOR_ID=ChangeMe + - CONNECTOR_NAME=OpenCTI Stream + - CONNECTOR_LOG_LEVEL=info + - CONNECTOR_LIVE_STREAM_ID=live + - CONNECTOR_LIVE_STREAM_LISTEN_DELETE=false + - CONNECTOR_LIVE_STREAM_NO_DEPENDENCIES=false + - CONNECTOR_SEND_TO_QUEUE=true + restart: always +``` + +#### Example: Diode mode (directory) + +```yaml + connector-opencti-stream: + image: opencti/connector-opencti-stream:latest + environment: + - OPENCTI_URL=http://localhost + - OPENCTI_TOKEN=ChangeMe + - CONNECTOR_ID=ChangeMe + - CONNECTOR_NAME=OpenCTI Stream + - CONNECTOR_LOG_LEVEL=info + - CONNECTOR_LIVE_STREAM_ID=ChangeMeStreamUUID + - CONNECTOR_LIVE_STREAM_LISTEN_DELETE=false + - CONNECTOR_LIVE_STREAM_NO_DEPENDENCIES=false + - CONNECTOR_SEND_TO_QUEUE=false + - CONNECTOR_SEND_TO_DIRECTORY=true + - CONNECTOR_SEND_TO_DIRECTORY_PATH=/data/diode + - CONNECTOR_SEND_TO_DIRECTORY_RETENTION=7 + volumes: + - /path/to/shared/directory:/data/diode + restart: always +``` + +#### Example: Diode mode (S3, using OpenCTI credentials) + +```yaml + connector-opencti-stream: + image: opencti/connector-opencti-stream:latest + environment: + - OPENCTI_URL=http://localhost + - OPENCTI_TOKEN=ChangeMe + - CONNECTOR_ID=ChangeMe + - CONNECTOR_NAME=OpenCTI Stream + - CONNECTOR_LOG_LEVEL=info + - CONNECTOR_LIVE_STREAM_ID=ChangeMeStreamUUID + - CONNECTOR_LIVE_STREAM_LISTEN_DELETE=false + - CONNECTOR_LIVE_STREAM_NO_DEPENDENCIES=false + - CONNECTOR_SEND_TO_QUEUE=false + - CONNECTOR_SEND_TO_S3=true + - CONNECTOR_SEND_TO_S3_FOLDER=connectors + - CONNECTOR_SEND_TO_S3_RETENTION=7 + restart: always +``` + +Start the connector: + +```bash +docker compose up -d +``` + +### Manual Deployment + +1. Create `config.yml` based on `src/config.yml.sample`. +2. Install dependencies: + + ```bash + pip3 install -r src/requirements.txt + ``` + +3. Start the connector: + + ```bash + cd src && python3 main.py + ``` + +## Behavior + +### Source vs target OpenCTI + +The connector consumes events from a **source** OpenCTI and dispatches bundles to a +**target** OpenCTI. Two pairs of settings control this: + +| Pair | Role | +|-----------------------------------------------------|------------------------------------------------| +| `OPENCTI_URL` / `OPENCTI_TOKEN` | The **target** OpenCTI: the one this connector is registered with, and where bundles land in `send_to_queue` mode. | +| `CONNECTOR_LIVE_STREAM_OPENCTI_URL` / `CONNECTOR_LIVE_STREAM_OPENCTI_TOKEN` | The **source** OpenCTI: the one the connector subscribes to via SSE. **Defaults to the target when unset** — that is the typical diode-export setup, where the same instance is read from (stream) and written to (file/S3 for `diode-import`). | + +The pairs being equal vs different determines the deployment pattern: + +| Pairs configuration | Output mode | Deployment | +|---|---|---| +| **Equal (default)** | `send_to_directory` or `send_to_s3` | **Diode export (most common):** connector runs alongside source OpenCTI A, listens to A's stream, writes bundles to a directory / S3 bucket. `diode-import` on the target OpenCTI B picks them up. No loop because `send_to_queue=false`. | +| **Different** | `send_to_queue` | **Queue replication (A → B):** connector is registered on target B (so its queue receives bundles), and `CONNECTOR_LIVE_STREAM_OPENCTI_URL` points at source A. | +| **Equal** | `send_to_queue` | Republisher / fan-out only — listens to and pushes back into the same OpenCTI. Loops unless you filter the stream; rarely useful. | + +### Data flow (diode mode — directory / S3, the typical setup) + +The connector runs alongside the source OpenCTI A (so `OPENCTI_URL` and +`CONNECTOR_LIVE_STREAM_OPENCTI_URL` resolve to the same instance — leave the latter +unset to inherit from the former), and writes bundles consumed by `diode-import` on +the target OpenCTI B: + +```mermaid +graph LR + SourceOcti["OpenCTI A (OPENCTI_URL = LIVE_STREAM_OPENCTI_URL)"] -->|SSE stream events| OctiStream[opencti-stream] + OctiStream -->|send_to_directory| Files[Bundle files] + OctiStream -->|send_to_s3| S3[S3 bucket] + Files -->|diode crossing| DiodeImport[diode-import] + S3 -->|diode crossing| DiodeImport + DiodeImport -->|ingestion| TargetOcti["OpenCTI B"] +``` + +### Data flow (queue mode — A → B replication) + +When `send_to_queue=true` and the two OpenCTI instances are network-connected, +configure `CONNECTOR_LIVE_STREAM_OPENCTI_URL` to point at OpenCTI A (source) and +register the connector on OpenCTI B (target): + +```mermaid +graph LR + SourceOcti["Source OpenCTI A (CONNECTOR_LIVE_STREAM_OPENCTI_URL)"] -->|SSE stream events| OctiStream[opencti-stream] + OctiStream -->|send_to_queue| Queue["B's RabbitMQ queue"] + Queue -->|workers| TargetOcti["Target OpenCTI B (OPENCTI_URL)"] +``` + +### Event handling + +| Event type | Action | +|------------|-----------------------------------------------------------------------------------------------| +| `create` | Forwarded as a one-object STIX 2.1 bundle. | +| `update` | Forwarded as a one-object STIX 2.1 bundle. | +| `delete` | Ignored. `live_stream_listen_delete` defaults to `false` so the SSE server does not send them.| +| Other | Ignored (heartbeat/connected events handled internally by the helper). | + +Each bundle is sent with `no_split=True`, so the helper does not run the STIX splitter +on a single object that does not need it. + +### Applicant propagation + +Before sending the bundle, the connector reads `origin.user_id` from the stream event and +sets `helper.applicant_id` accordingly. The helper then embeds it into the dispatched +payload: + +- **Queue mode**: `applicant_id` becomes the operating user for the bundle on the worker + side (impersonation). +- **Directory / S3 mode**: `applicant_id` is written into the JSON bundle file. On the + target instance, [`diode-import`](../diode-import/) maps it through + `DIODE_IMPORT_APPLICANT_MAPPINGS` to the matching local user. + +If `origin.user_id` is missing (e.g. system-generated events), the connector's +registration user is used. + +## Debugging + +Enable verbose logging: + +```env +CONNECTOR_LOG_LEVEL=debug +``` + +Common issues: + +- **No events received**: verify `CONNECTOR_LIVE_STREAM_ID` exists on the source OpenCTI + and that the connector token has access to it. +- **Events not appearing on the target instance (diode mode)**: check that the bundle + files reach the target's `diode-import` directory or S3 bucket and that + `DIODE_IMPORT_APPLICANT_MAPPINGS` covers the source user IDs you care about. +- **Bundles bypass the queue**: when `send_to_directory` or `send_to_s3` is enabled, + remember to also set `send_to_queue=false` if you do not want the queue to receive + copies in addition. + +## Additional information + +### Use cases + +| Scenario | Description | +|-----------------------|--------------------------------------------------------------------------------------| +| Air-gapped transfer | Diode pattern: stream events on the source side, transfer files via removable media. | +| Cross-region sync | Use S3 as an intermediate buffer between two OpenCTI instances. | +| In-platform fan-out | Republish a stream to the queue with proper applicant attribution. | + +### Pairing with `diode-import` + +For directory or S3 mode, deploy the [`diode-import`](../diode-import/) connector on the +target OpenCTI instance and configure `DIODE_IMPORT_APPLICANT_MAPPINGS` to map source +user UUIDs to local user UUIDs: + +```env +DIODE_IMPORT_APPLICANT_MAPPINGS=source-user-uuid-1:target-user-uuid-1,source-user-uuid-2:target-user-uuid-2 +``` diff --git a/external-import/opencti-stream/__metadata__/connector_manifest.json b/external-import/opencti-stream/__metadata__/connector_manifest.json new file mode 100644 index 00000000000..17cec4a1290 --- /dev/null +++ b/external-import/opencti-stream/__metadata__/connector_manifest.json @@ -0,0 +1,19 @@ +{ + "title": "OpenCTI Stream", + "slug": "opencti-stream", + "description": "Subscribe to an OpenCTI live stream and forward each create/update event as a single STIX 2.1 bundle. Supports three output modes via the standard connector helper settings: RabbitMQ queue (default, for in-platform fan-out and applicant impersonation), local directory and S3 bucket. Directory and S3 modes pair naturally with the `diode-import` connector to replicate data between OpenCTI instances or air-gapped environments. The originating user (`origin.user_id` of each stream event) is propagated as the bundle `applicant_id`, so it can be remapped on the target instance via `DIODE_IMPORT_APPLICANT_MAPPINGS`.", + "short_description": "Forward events from an OpenCTI live stream to a queue, directory or S3 bucket as STIX 2.1 bundles.", + "logo": null, + "use_cases": [], + "verified": true, + "last_verified_date": "2026-05-07", + "playbook_supported": false, + "max_confidence_level": 50, + "support_version": ">=6.8.12", + "subscription_link": null, + "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/external-import/opencti-stream", + "manager_supported": false, + "container_version": "rolling", + "container_image": "opencti/connector-opencti-stream", + "container_type": "EXTERNAL_IMPORT" +} diff --git a/external-import/opencti-stream/docker-compose.yml b/external-import/opencti-stream/docker-compose.yml new file mode 100644 index 00000000000..62075580393 --- /dev/null +++ b/external-import/opencti-stream/docker-compose.yml @@ -0,0 +1,37 @@ +version: '3' +services: + connector-opencti-stream: + image: opencti/connector-opencti-stream:latest + environment: + # Generic parameters (connection with OpenCTI) + - OPENCTI_URL=http://localhost + - OPENCTI_TOKEN=ChangeMe + # Common parameters for connectors of type EXTERNAL_IMPORT + - CONNECTOR_ID=ChangeMe + - CONNECTOR_NAME=OpenCTI Stream + - CONNECTOR_SCOPE=opencti-stream + - CONNECTOR_LOG_LEVEL=info + # Live stream consumed by the connector. + # Defaults to the OpenCTI defined above (OPENCTI_URL / OPENCTI_TOKEN). Set the + # two variables below to listen to a remote / source OpenCTI while pushing + # bundles to the OpenCTI this connector is registered with (A → B replication). + # - CONNECTOR_LIVE_STREAM_OPENCTI_URL=http://source-opencti:8080 + # - CONNECTOR_LIVE_STREAM_OPENCTI_TOKEN=ChangeMe + - CONNECTOR_LIVE_STREAM_ID=live # 'live', 'raw' or a stream collection UUID + - CONNECTOR_LIVE_STREAM_LISTEN_DELETE=false # delete events are ignored, do not subscribe to them + - CONNECTOR_LIVE_STREAM_NO_DEPENDENCIES=false # include dependent objects in each event + # Output mode (uncomment ONE of the blocks below) + # 1) Default queue mode (RabbitMQ) - workers ingest the bundles directly + - CONNECTOR_SEND_TO_QUEUE=true + # 2) Diode mode - write bundles to a directory consumed by the diode-import connector + # - CONNECTOR_SEND_TO_QUEUE=false + # - CONNECTOR_SEND_TO_DIRECTORY=true + # - CONNECTOR_SEND_TO_DIRECTORY_PATH=/data/diode + # - CONNECTOR_SEND_TO_DIRECTORY_RETENTION=7 + # 3) S3 mode - upload bundles to an S3 bucket consumed by the diode-import connector + # - CONNECTOR_SEND_TO_QUEUE=false + # - CONNECTOR_SEND_TO_S3=true + # - CONNECTOR_SEND_TO_S3_BUCKET=my-bucket # optional, uses OpenCTI bucket if empty + # - CONNECTOR_SEND_TO_S3_FOLDER=connectors + # - CONNECTOR_SEND_TO_S3_RETENTION=7 + restart: always diff --git a/external-import/opencti-stream/src/config.yml.sample b/external-import/opencti-stream/src/config.yml.sample new file mode 100644 index 00000000000..75324a874e3 --- /dev/null +++ b/external-import/opencti-stream/src/config.yml.sample @@ -0,0 +1,35 @@ +opencti: + url: 'http://localhost' + token: 'ChangeMe' + +connector: + type: 'EXTERNAL_IMPORT' + id: 'ChangeMe' + name: 'OpenCTI Stream' # optional (default: 'OpenCTI Stream') + scope: 'opencti-stream' # required + log_level: 'info' # optional (default: 'error') + # Live stream consumed by the connector. + # By default the connector listens on the OpenCTI defined at the top of this file + # (`opencti.url` / `opencti.token`). Set `live_stream_opencti_url` and + # `live_stream_opencti_token` to listen on a remote / source OpenCTI while still + # pushing bundles to the OpenCTI this connector is registered with (queue mode + # A → B replication). + # live_stream_opencti_url: 'http://source-opencti:8080' + # live_stream_opencti_token: 'ChangeMe' + live_stream_id: 'live' # 'live', 'raw' or a stream collection UUID + live_stream_listen_delete: false # delete events are ignored, do not subscribe to them + live_stream_no_dependencies: false # include dependent objects in each event + # Output mode (uncomment ONE of the blocks below) + # 1) Default queue mode (RabbitMQ) - workers ingest the bundles directly + send_to_queue: true + # 2) Diode mode - write bundles to a directory consumed by the diode-import connector + # send_to_queue: false + # send_to_directory: true + # send_to_directory_path: '/data/diode' + # send_to_directory_retention: 7 # Days to keep files before cleanup (0 = disable) + # 3) S3 mode - upload bundles to an S3 bucket consumed by the diode-import connector + # send_to_queue: false + # send_to_s3: true + # send_to_s3_bucket: '' # If empty, uses the OpenCTI bucket + # send_to_s3_folder: 'connectors' + # send_to_s3_retention: 7 # Days to keep objects before cleanup (0 = disable) diff --git a/external-import/opencti-stream/src/main.py b/external-import/opencti-stream/src/main.py new file mode 100644 index 00000000000..4358cc68b14 --- /dev/null +++ b/external-import/opencti-stream/src/main.py @@ -0,0 +1,24 @@ +import traceback + +from opencti_stream import ConnectorSettings, OpenCTIStream +from pycti import OpenCTIConnectorHelper + +if __name__ == "__main__": + """ + Entry point of the script + + - traceback.print_exc(): This function prints the traceback of the exception to the standard error (stderr). + The traceback includes information about the point in the program where the exception occurred, + which is very useful for debugging purposes. + - exit(1): effective way to terminate a Python program when an error is encountered. + It signals to the operating system and any calling processes that the program did not complete successfully. + """ + try: + settings = ConnectorSettings() + helper = OpenCTIConnectorHelper(config=settings.to_helper_config()) + + connector = OpenCTIStream(config=settings, helper=helper) + connector.run() + except Exception: + traceback.print_exc() + exit(1) diff --git a/external-import/opencti-stream/src/opencti_stream/__init__.py b/external-import/opencti-stream/src/opencti_stream/__init__.py new file mode 100644 index 00000000000..00188be51c0 --- /dev/null +++ b/external-import/opencti-stream/src/opencti_stream/__init__.py @@ -0,0 +1,6 @@ +"""OpenCTI Stream connector package.""" + +from opencti_stream.connector import OpenCTIStream +from opencti_stream.settings import ConnectorSettings + +__all__ = ["ConnectorSettings", "OpenCTIStream"] diff --git a/external-import/opencti-stream/src/opencti_stream/connector.py b/external-import/opencti-stream/src/opencti_stream/connector.py new file mode 100644 index 00000000000..ff4f3b36073 --- /dev/null +++ b/external-import/opencti-stream/src/opencti_stream/connector.py @@ -0,0 +1,159 @@ +import json +import sys +from datetime import datetime, timezone + +from opencti_stream.settings import ConnectorSettings +from pycti.connector.opencti_connector_helper import OpenCTIConnectorHelper + + +class OpenCTIStream: + """Forward events from an OpenCTI live stream as STIX 2.1 bundles. + + For each create/update event received on the configured live stream, a one-object + STIX 2.1 bundle is built and dispatched via `helper.send_stix2_bundle()`. The output + destination (RabbitMQ queue, local directory or S3 bucket) is controlled by the + standard connector helper settings (`CONNECTOR_SEND_TO_*`). + + Identity attribution is preserved end-to-end: + - The originating user (`origin.user_id` of each stream event) is propagated as + the bundle's `applicant_id`, used by workers in queue mode and by `diode-import` + via `DIODE_IMPORT_APPLICANT_MAPPINGS` in directory / S3 modes. + - The forwarded objects are NOT mutated. In particular, `created_by_ref` is left + untouched so the original source attribution carries over to the target instance. + + Runtime model: + - The SSE consumer is a long-lived background thread started by + `helper.listen_stream`. It is supervised by `helper.schedule_process`, which + acts as a periodic watchdog: every `duration_period`, the connector verifies + that the thread is alive and restarts it if it has died. Each (re)start is + tracked as a Work in OpenCTI for visibility. + """ + + def __init__( + self, config: ConnectorSettings, helper: OpenCTIConnectorHelper + ) -> None: + self.config = config + self.helper = helper + self._stream_thread = None + + def _live_stream_url(self) -> str: + """Resolve the OpenCTI URL to subscribe to. + + Falls back to the connector's own `OPENCTI_URL` when `live_stream_opencti_url` + is unset. The trailing slash added by pydantic's `HttpUrl` normalization is + stripped because pycti's `listen_stream` concatenates `/stream` directly. + """ + configured = self.config.connector.live_stream_opencti_url + url = str(configured) if configured is not None else self.helper.opencti_url + return url.rstrip("/") + + def _live_stream_token(self) -> str: + """Resolve the OpenCTI token to authenticate the stream subscription. + + Falls back to the connector's own `OPENCTI_TOKEN` when + `live_stream_opencti_token` is unset. + """ + configured = self.config.connector.live_stream_opencti_token + if configured is not None: + return configured.get_secret_value() + return self.helper.opencti_token + + def _on_event(self, msg) -> None: + """SSE callback: forward one stream event as a one-object STIX bundle.""" + if msg.event not in ("create", "update"): + return + try: + payload = json.loads(msg.data) + except json.JSONDecodeError as exc: + self.helper.connector_logger.warning( + "Skipping malformed stream message", + {"event_id": msg.id, "error": str(exc)}, + ) + return + + stix_object = payload.get("data") + if not isinstance(stix_object, dict): + return + + # Carry the originating user as the bundle applicant. Persisted into the bundle + # in directory/S3 mode (used by `diode-import` for applicant remapping via + # `DIODE_IMPORT_APPLICANT_MAPPINGS`) and into the queue message in queue mode + # (used by workers for impersonation). + # Always assign so that an event without `origin.user_id` (e.g. system-generated + # event) does not inherit the previous event's applicant. + origin_user_id = (payload.get("origin") or {}).get("user_id") + self.helper.applicant_id = origin_user_id + + bundle = self.helper.stix2_create_bundle([stix_object]) + # `cleanup_inconsistent_bundle=True` is a no-op with `no_split=True` (the splitter + # is bypassed). It is set to satisfy the verifier's VC312 check, but the relay + # behavior we actually want is "forward the source object as-is" — without + # stripping `created_by_ref` / `object_marking_refs` to entities the source + # holds but our one-object bundle does not carry. + self.helper.send_stix2_bundle( + bundle, + no_split=True, + cleanup_inconsistent_bundle=True, + ) + self.helper.connector_logger.debug( + "Forwarded stream event", + { + "event_id": msg.id, + "stix_id": stix_object.get("id"), + "applicant_id": origin_user_id, + }, + ) + + def process_message(self) -> None: + """Watchdog scheduled by `helper.schedule_process`. + + Starts the SSE consumer thread on the first invocation; on subsequent + invocations it is a no-op as long as the thread is alive, and re-starts + it otherwise. Each (re)start is wrapped in an OpenCTI Work for tracking. + """ + if self._stream_thread is not None and self._stream_thread.is_alive(): + self.helper.connector_logger.debug( + "SSE consumer alive, skipping scheduled run" + ) + return + + friendly_name = "OpenCTI Stream session @ " + datetime.now( + tz=timezone.utc + ).strftime("%Y-%m-%d %H:%M:%S") + work_id = self.helper.api.work.initiate_work( + self.helper.connect_id, friendly_name + ) + try: + # Listen on the configured OpenCTI (or the connector's own one as fallback). + # Decoupling source from target lets the connector listen to a remote + # OpenCTI while pushing bundles back into the OpenCTI it is registered with + # (typical queue-mode A→B replication setup). + self._stream_thread = self.helper.listen_stream( + self._on_event, + url=self._live_stream_url(), + token=self._live_stream_token(), + ) + self.helper.api.work.to_processed(work_id, "SSE consumer started") + self.helper.connector_logger.info( + "SSE consumer started", {"work_id": work_id} + ) + except Exception as exc: + # Log and return rather than re-raising. `schedule_process` only catches + # exceptions on subsequent ticks (via `_schedule_process`); on the very + # first call an unhandled exception escapes the scheduler and would + # terminate the connector before the watchdog has a chance to retry. + self.helper.api.work.to_processed(work_id, str(exc), in_error=True) + self.helper.connector_logger.error( + "Failed to start SSE consumer; will retry on next scheduled tick", + {"error": str(exc)}, + ) + + def run(self) -> None: + try: + self.helper.schedule_process( + message_callback=self.process_message, + duration_period=self.config.connector.duration_period.total_seconds(), + ) + except (KeyboardInterrupt, SystemExit): + self.helper.connector_logger.info("OpenCTI Stream connector stopping...") + sys.exit(0) diff --git a/external-import/opencti-stream/src/opencti_stream/settings.py b/external-import/opencti-stream/src/opencti_stream/settings.py new file mode 100644 index 00000000000..8064040ec66 --- /dev/null +++ b/external-import/opencti-stream/src/opencti_stream/settings.py @@ -0,0 +1,83 @@ +from datetime import timedelta + +from connectors_sdk import ( + BaseConnectorSettings, + BaseExternalImportConnectorConfig, +) +from pydantic import Field, HttpUrl, SecretStr + + +class ExternalImportConnectorConfig(BaseExternalImportConnectorConfig): + """Connector configuration extended with live stream settings. + + The `live_stream_*` fields map to `CONNECTOR_LIVE_STREAM_*` environment variables + and the matching `["connector", "live_stream_*"]` config paths. + + `live_stream_opencti_url` / `live_stream_opencti_token` decouple the OpenCTI the + connector listens to (the source) from the OpenCTI the connector is registered + with (the target, used by `OPENCTI_URL` / `OPENCTI_TOKEN` and where bundles are + pushed in queue mode). When unset, the source defaults to the target so the + connector listens to the same OpenCTI it pushes to (typical diode-export setup + where the connector runs alongside the source instance). + """ + + name: str = Field( + description="The name of the connector.", + default="OpenCTI Stream", + ) + duration_period: timedelta = Field( + description=( + "Period between scheduled health checks of the SSE consumer thread. " + "The thread itself runs continuously; this only controls how often the " + "watchdog verifies it is alive and restarts it if it has died." + ), + default=timedelta(minutes=1), + ) + live_stream_opencti_url: HttpUrl | None = Field( + description=( + "URL of the OpenCTI instance whose live stream to consume. " + "Defaults to `OPENCTI_URL` (the OpenCTI the connector is registered with) " + "when unset. Set this to point at a remote / source OpenCTI different " + "from the one this connector pushes bundles to." + ), + default=None, + ) + live_stream_opencti_token: SecretStr | None = Field( + description=( + "API token for the OpenCTI instance whose live stream to consume. " + "Defaults to `OPENCTI_TOKEN` when unset. Required when " + "`live_stream_opencti_url` points to a remote instance with a different " + "auth context." + ), + default=None, + ) + live_stream_id: str = Field( + description=( + "The OpenCTI live stream to subscribe to. " + "Use 'live' for the global live stream, 'raw' for the raw stream, " + "or the UUID of a stream collection." + ), + ) + live_stream_listen_delete: bool = Field( + description=( + "Whether to subscribe to delete events. Disabled by default since this " + "connector only forwards create/update (upsert) events." + ), + default=False, + ) + live_stream_no_dependencies: bool = Field( + description=( + "Whether to receive only the event's own object from the stream " + "(without dependent objects). False by default so dependencies are included " + "and forwarded together with each event." + ), + default=False, + ) + + +class ConnectorSettings(BaseConnectorSettings): + """Top-level settings for the OpenCTI Stream connector.""" + + connector: ExternalImportConnectorConfig = Field( + default_factory=ExternalImportConnectorConfig + ) diff --git a/external-import/opencti-stream/src/requirements.txt b/external-import/opencti-stream/src/requirements.txt new file mode 100644 index 00000000000..ceb8c7891a1 --- /dev/null +++ b/external-import/opencti-stream/src/requirements.txt @@ -0,0 +1,3 @@ +pycti==7.260515.0 +pydantic~=2.11.3 +connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk diff --git a/external-import/opencti-stream/tests/conftest.py b/external-import/opencti-stream/tests/conftest.py new file mode 100644 index 00000000000..5ee8fc0e226 --- /dev/null +++ b/external-import/opencti-stream/tests/conftest.py @@ -0,0 +1,4 @@ +import os +import sys + +sys.path.append(os.path.join(os.path.dirname(__file__), "..", "src")) diff --git a/external-import/opencti-stream/tests/test-requirements.txt b/external-import/opencti-stream/tests/test-requirements.txt new file mode 100644 index 00000000000..d405632324b --- /dev/null +++ b/external-import/opencti-stream/tests/test-requirements.txt @@ -0,0 +1,2 @@ +-r ../src/requirements.txt +pytest==9.0.3 diff --git a/external-import/opencti-stream/tests/test_main.py b/external-import/opencti-stream/tests/test_main.py new file mode 100644 index 00000000000..0e3d7ce824e --- /dev/null +++ b/external-import/opencti-stream/tests/test_main.py @@ -0,0 +1,98 @@ +from typing import Any +from unittest.mock import MagicMock + +import pytest +from opencti_stream import ConnectorSettings, OpenCTIStream +from pycti import OpenCTIConnectorHelper + + +@pytest.fixture +def mock_opencti_connector_helper(monkeypatch): + """Mock all heavy dependencies of OpenCTIConnectorHelper, typically API calls to OpenCTI.""" + + module_import_path = "pycti.connector.opencti_connector_helper" + monkeypatch.setattr(f"{module_import_path}.killProgramHook", MagicMock()) + monkeypatch.setattr(f"{module_import_path}.sched.scheduler", MagicMock()) + monkeypatch.setattr(f"{module_import_path}.ConnectorInfo", MagicMock()) + monkeypatch.setattr(f"{module_import_path}.OpenCTIApiClient", MagicMock()) + monkeypatch.setattr(f"{module_import_path}.OpenCTIConnector", MagicMock()) + monkeypatch.setattr(f"{module_import_path}.OpenCTIMetricHandler", MagicMock()) + monkeypatch.setattr(f"{module_import_path}.PingAlive", MagicMock()) + + +class StubConnectorSettings(ConnectorSettings): + """ + Subclass of `ConnectorSettings` (implementation of `BaseConnectorSettings`) for testing purpose. + It overrides `BaseConnectorSettings._load_config_dict` to return a fake but valid config dict. + """ + + @classmethod + def _load_config_dict(cls, _, handler) -> dict[str, Any]: + return handler( + { + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + "connector": { + "id": "connector-id", + "name": "Test Connector", + "scope": "opencti-stream", + "log_level": "error", + "duration_period": "PT1M", + "live_stream_id": "live", + "live_stream_listen_delete": False, + "live_stream_no_dependencies": False, + }, + } + ) + + +def test_connector_settings_is_instantiated(): + """ + Test that the implementation of `BaseConnectorSettings` (from `connectors-sdk`) can be instantiated successfully: + - the implemented class MUST have a method `to_helper_config` (inherited from `BaseConnectorSettings`) + - the method `to_helper_config` MUST return a dict (as in base class) + """ + settings = StubConnectorSettings() + + assert isinstance(settings, ConnectorSettings) + assert isinstance(settings.to_helper_config(), dict) + + +def test_opencti_connector_helper_is_instantiated(mock_opencti_connector_helper): + """ + Test that `OpenCTIConnectorHelper` (from `pycti`) can be instantiated successfully: + - the value of `settings.to_helper_config` MUST be the expected dict for `OpenCTIConnectorHelper` + - the helper MUST be able to get its instance's attributes from the config dict + + :param mock_opencti_connector_helper: `OpenCTIConnectorHelper` is mocked during this test to avoid any external calls to OpenCTI API + """ + settings = StubConnectorSettings() + helper = OpenCTIConnectorHelper(config=settings.to_helper_config()) + + assert helper.opencti_url == "http://localhost:8080/" + assert helper.opencti_token == "test-token" + assert helper.connect_id == "connector-id" + assert helper.connect_name == "Test Connector" + assert helper.connect_scope == "opencti-stream" + assert helper.log_level == "ERROR" + assert helper.connect_live_stream_id == "live" + + +def test_connector_is_instantiated(mock_opencti_connector_helper): + """ + Test that the connector's main class can be instantiated successfully: + - the connector's main class MUST be able to access env/config vars through `self.config` + - the connector's main class MUST be able to access `pycti` API through `self.helper` + + :param mock_opencti_connector_helper: `OpenCTIConnectorHelper` is mocked during this test to avoid any external calls to OpenCTI API + """ + settings = StubConnectorSettings() + helper = OpenCTIConnectorHelper(config=settings.to_helper_config()) + + connector = OpenCTIStream(config=settings, helper=helper) + + assert connector.config == settings + assert connector.helper == helper + assert connector._stream_thread is None diff --git a/external-import/opencti-stream/tests/tests_connector/test_connector.py b/external-import/opencti-stream/tests/tests_connector/test_connector.py new file mode 100644 index 00000000000..a67930455b4 --- /dev/null +++ b/external-import/opencti-stream/tests/tests_connector/test_connector.py @@ -0,0 +1,196 @@ +"""Unit tests for `OpenCTIStream` (the SSE forwarding connector). + +The connector is a thin passthrough: each test exercises one branch of `_on_event` +or one of the small URL/token resolution helpers against an `OpenCTIStream` instance +whose helper / config attributes have been replaced by `MagicMock`s. This avoids any +network or pycti machinery while still validating the actual code paths users care +about. +""" + +import json +from typing import Any +from unittest.mock import MagicMock + +import pytest +from opencti_stream.connector import OpenCTIStream +from pydantic import HttpUrl, SecretStr + + +@pytest.fixture +def connector(): + """Build an `OpenCTIStream` with a fully mocked helper, bypassing __init__ side effects.""" + instance = OpenCTIStream.__new__(OpenCTIStream) + instance.config = MagicMock() + instance.config.connector.live_stream_opencti_url = None + instance.config.connector.live_stream_opencti_token = None + instance.helper = MagicMock() + instance.helper.connector_logger = MagicMock() + instance.helper.stix2_create_bundle.side_effect = ( + lambda objects: f'{{"type":"bundle","objects":[{json.dumps(objects[0]) if objects else ""}]}}' + ) + instance._stream_thread = None + return instance + + +def _make_msg(event: str, data: Any, msg_id: str = "1-0"): + """Build a stub matching pycti's SSE message shape (event/id/data).""" + msg = MagicMock() + msg.event = event + msg.id = msg_id + msg.data = json.dumps(data) if not isinstance(data, str) else data + return msg + + +def test_on_event_forwards_create(connector): + stix_object = { + "id": "report--00000000-0000-0000-0000-000000000001", + "type": "report", + } + payload = { + "data": stix_object, + "origin": {"user_id": "user-uuid-1"}, + } + + connector._on_event(_make_msg("create", payload)) + + assert connector.helper.applicant_id == "user-uuid-1" + connector.helper.stix2_create_bundle.assert_called_once_with([stix_object]) + args, kwargs = connector.helper.send_stix2_bundle.call_args + assert kwargs == {"no_split": True, "cleanup_inconsistent_bundle": True} + + +def test_on_event_forwards_update(connector): + stix_object = { + "id": "indicator--00000000-0000-0000-0000-000000000002", + "type": "indicator", + } + payload = {"data": stix_object, "origin": {"user_id": "user-uuid-2"}} + + connector._on_event(_make_msg("update", payload)) + + connector.helper.send_stix2_bundle.assert_called_once() + + +def test_on_event_skips_delete(connector): + """`delete` events are not forwarded (upsert-only relay).""" + payload = { + "data": { + "id": "report--00000000-0000-0000-0000-000000000003", + "type": "report", + }, + "origin": {"user_id": "user-uuid-3"}, + } + + connector._on_event(_make_msg("delete", payload)) + + connector.helper.stix2_create_bundle.assert_not_called() + connector.helper.send_stix2_bundle.assert_not_called() + + +def test_on_event_skips_unknown_event_type(connector): + payload = { + "data": { + "id": "report--00000000-0000-0000-0000-000000000004", + "type": "report", + }, + } + + connector._on_event(_make_msg("heartbeat", payload)) + + connector.helper.send_stix2_bundle.assert_not_called() + + +def test_on_event_skips_malformed_json(connector): + msg = MagicMock() + msg.event = "create" + msg.id = "9-0" + msg.data = "{this is not valid json" + + connector._on_event(msg) + + connector.helper.connector_logger.warning.assert_called_once() + connector.helper.send_stix2_bundle.assert_not_called() + + +def test_on_event_skips_payload_without_data(connector): + payload = {"origin": {"user_id": "user-uuid-5"}} + + connector._on_event(_make_msg("create", payload)) + + connector.helper.send_stix2_bundle.assert_not_called() + + +def test_on_event_skips_payload_with_non_dict_data(connector): + payload = {"data": "not-a-dict", "origin": {"user_id": "user-uuid-6"}} + + connector._on_event(_make_msg("create", payload)) + + connector.helper.send_stix2_bundle.assert_not_called() + + +def test_on_event_resets_applicant_when_origin_missing(connector): + """When `origin.user_id` is missing, `applicant_id` MUST be reset (not inherited from a previous event).""" + connector.helper.applicant_id = "previous-user-leaks" + + payload_without_origin = { + "data": { + "id": "report--00000000-0000-0000-0000-000000000007", + "type": "report", + }, + } + connector._on_event(_make_msg("create", payload_without_origin)) + + assert connector.helper.applicant_id is None + connector.helper.send_stix2_bundle.assert_called_once() + + +def test_on_event_resets_applicant_when_origin_user_id_missing(connector): + """An event with an `origin` block but no `user_id` MUST also reset `applicant_id`.""" + connector.helper.applicant_id = "previous-user-leaks" + + payload = { + "data": { + "id": "report--00000000-0000-0000-0000-000000000008", + "type": "report", + }, + "origin": {"socket": "query", "ip": "::1"}, + } + connector._on_event(_make_msg("create", payload)) + + assert connector.helper.applicant_id is None + + +# --------------------------------------------------------------------------- +# URL / token resolution: source (live stream) vs target (helper) OpenCTI +# --------------------------------------------------------------------------- + + +def test_live_stream_url_falls_back_to_helper_when_not_configured(connector): + connector.config.connector.live_stream_opencti_url = None + connector.helper.opencti_url = "http://target-opencti:8080/" + + assert connector._live_stream_url() == "http://target-opencti:8080" + + +def test_live_stream_url_uses_configured_value_and_strips_trailing_slash(connector): + connector.config.connector.live_stream_opencti_url = HttpUrl( + "http://source-opencti:8080" + ) + connector.helper.opencti_url = "http://target-opencti:8080/" + + # Pydantic's HttpUrl normalizes to add a trailing slash; the resolver must strip it. + assert connector._live_stream_url() == "http://source-opencti:8080" + + +def test_live_stream_token_falls_back_to_helper_when_not_configured(connector): + connector.config.connector.live_stream_opencti_token = None + connector.helper.opencti_token = "target-token" + + assert connector._live_stream_token() == "target-token" + + +def test_live_stream_token_uses_configured_value(connector): + connector.config.connector.live_stream_opencti_token = SecretStr("source-token") + connector.helper.opencti_token = "target-token" + + assert connector._live_stream_token() == "source-token" diff --git a/external-import/opencti-stream/tests/tests_connector/test_settings.py b/external-import/opencti-stream/tests/tests_connector/test_settings.py new file mode 100644 index 00000000000..4faef00ffc2 --- /dev/null +++ b/external-import/opencti-stream/tests/tests_connector/test_settings.py @@ -0,0 +1,167 @@ +from typing import Any + +import pytest +from connectors_sdk import BaseConfigModel, ConfigValidationError +from opencti_stream import ConnectorSettings +from pydantic import ValidationError + + +@pytest.mark.parametrize( + "settings_dict", + [ + pytest.param( + { + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + "connector": { + "id": "connector-id", + "name": "Test Connector", + "scope": "opencti-stream", + "log_level": "error", + "duration_period": "PT1M", + "live_stream_id": "live", + "live_stream_listen_delete": False, + "live_stream_no_dependencies": False, + }, + }, + id="full_valid_settings_dict", + ), + pytest.param( + { + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + "connector": { + "id": "connector-id", + "scope": "opencti-stream", + "live_stream_id": "live", + }, + }, + id="minimal_valid_settings_dict", + ), + pytest.param( + { + "opencti": { + "url": "http://target-opencti:8080", + "token": "target-token", + }, + "connector": { + "id": "connector-id", + "scope": "opencti-stream", + "live_stream_id": "live", + "live_stream_opencti_url": "http://source-opencti:8080", + "live_stream_opencti_token": "source-token", + }, + }, + id="dual_instance_settings_dict", + ), + ], +) +def test_settings_should_accept_valid_input(settings_dict): + """ + Test that `ConnectorSettings` (implementation of `BaseConnectorSettings` from `connectors-sdk`) accepts valid input. + For the test purpose, `BaseConnectorSettings._load_config_dict` is overridden to return + a fake but valid dict (instead of the env/config vars parsed from `config.yml`, `.env` or env vars). + + :param settings_dict: The dict to use as `ConnectorSettings` input + """ + + class FakeConnectorSettings(ConnectorSettings): + """ + Subclass of `ConnectorSettings` (implementation of `BaseConnectorSettings`) for testing purpose. + It overrides `BaseConnectorSettings._load_config_dict` to return a fake but valid config dict. + """ + + @classmethod + def _load_config_dict(cls, _, handler) -> dict[str, Any]: + return handler(settings_dict) + + settings = FakeConnectorSettings() + + assert isinstance(settings.opencti, BaseConfigModel) is True + assert isinstance(settings.connector, BaseConfigModel) is True + + +@pytest.mark.parametrize( + "settings_dict, expected_loc", + [ + pytest.param( + {}, + ("opencti", "url"), + id="empty_settings_dict", + ), + pytest.param( + { + "opencti": { + "url": "http://localhost:PORT", + "token": "test-token", + }, + "connector": { + "id": "connector-id", + "scope": "opencti-stream", + "live_stream_id": "live", + }, + }, + ("opencti", "url"), + id="invalid_opencti_url", + ), + pytest.param( + { + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + "connector": { + "id": "connector-id", + "scope": "opencti-stream", + # Missing live_stream_id + }, + }, + ("connector", "live_stream_id"), + id="missing_live_stream_id", + ), + ], +) +def test_settings_should_raise_when_invalid_input(settings_dict, expected_loc): + """ + Test that `ConnectorSettings` raises on invalid input AND that the failure points + at the expected field. We unwrap the `ConfigValidationError` (raised by + `connectors-sdk` to wrap a pydantic `ValidationError`) and assert the expected + field appears in at least one of the validation error locations. + + :param settings_dict: The dict to use as `ConnectorSettings` input + :param expected_loc: Tuple representing the pydantic location (e.g. ("connector", "live_stream_id")) + that should appear in the underlying ValidationError + """ + + class FakeConnectorSettings(ConnectorSettings): + """ + Subclass of `ConnectorSettings` (implementation of `BaseConnectorSettings`) for testing purpose. + It overrides `BaseConnectorSettings._load_config_dict` to return a fake but valid config dict. + """ + + @classmethod + def _load_config_dict(cls, _, handler) -> dict[str, Any]: + return handler(settings_dict) + + with pytest.raises(ConfigValidationError) as err_info: + FakeConnectorSettings() + assert "Error validating configuration" in str(err_info.value) + + # The cause is the underlying pydantic ValidationError; check the expected field + # appears in the reported error locations. We match the last element of the loc + # tuple (the field name) since some errors are reported at the nested location + # (e.g. ("connector", "live_stream_id")) and some at the inner-model root + # (e.g. ("url",) when `_OpenCTIConfig` is built with empty input). + cause = err_info.value.__cause__ + assert isinstance( + cause, ValidationError + ), "Expected wrapped pydantic ValidationError" + error_locs = [error["loc"] for error in cause.errors()] + expected_field = expected_loc[-1] + assert any( + loc and loc[-1] == expected_field for loc in error_locs + ), f"Expected validation error on field {expected_field!r}, got {error_locs}" diff --git a/external-import/opencti/.build.env b/external-import/opencti/.build.env new file mode 100644 index 00000000000..e30b979c2f8 --- /dev/null +++ b/external-import/opencti/.build.env @@ -0,0 +1 @@ +CONNECTOR_CMD="connector.py" diff --git a/external-import/opencti/src/requirements.txt b/external-import/opencti/src/requirements.txt index 2e1238a8a8e..7ba225bbd73 100644 --- a/external-import/opencti/src/requirements.txt +++ b/external-import/opencti/src/requirements.txt @@ -1,2 +1,2 @@ -pycti==7.260309.0 -urllib3==2.6.3 +pycti==7.260515.0 +urllib3==2.7.0 diff --git a/external-import/orange-cyberdefense-v3/README.md b/external-import/orange-cyberdefense-v3/README.md index bfc5e8893fc..814e64255a6 100644 --- a/external-import/orange-cyberdefense-v3/README.md +++ b/external-import/orange-cyberdefense-v3/README.md @@ -268,17 +268,16 @@ This is an example of what the state could looks like: ## Screenshots -### Indicators in OpenCTI +### Indicators ![image](./media/Indicator_1.png) ![image](./media/Indicator_2.png) ![image](./media/Indicator_3.png) -### Malwares in OpenCTI +### Malwares ![image](./media/Malware.png) -### Intrusion Sets in OpenCTI +### Intrusion Sets ![image](./media/Intrusion_set.png) -### World Watch reports in OpenCTI -![image](./media/Report.png) -![image](./media/Report_2.png) \ No newline at end of file +### World Watch reports +![image](./media/Reports.png) \ No newline at end of file diff --git a/external-import/orange-cyberdefense-v3/media/Indicator_1.png b/external-import/orange-cyberdefense-v3/media/Indicator_1.png index 0521fcd18b4..f5710a7cff0 100644 Binary files a/external-import/orange-cyberdefense-v3/media/Indicator_1.png and b/external-import/orange-cyberdefense-v3/media/Indicator_1.png differ diff --git a/external-import/orange-cyberdefense-v3/media/Indicator_2.png b/external-import/orange-cyberdefense-v3/media/Indicator_2.png index b5830533845..a3d43be1c8c 100644 Binary files a/external-import/orange-cyberdefense-v3/media/Indicator_2.png and b/external-import/orange-cyberdefense-v3/media/Indicator_2.png differ diff --git a/external-import/orange-cyberdefense-v3/media/Indicator_3.png b/external-import/orange-cyberdefense-v3/media/Indicator_3.png index 1dabf96a0e4..2b9ba0cd168 100644 Binary files a/external-import/orange-cyberdefense-v3/media/Indicator_3.png and b/external-import/orange-cyberdefense-v3/media/Indicator_3.png differ diff --git a/external-import/orange-cyberdefense-v3/media/Intrusion_set.png b/external-import/orange-cyberdefense-v3/media/Intrusion_set.png index 3466a00ea8b..c8daa49945b 100644 Binary files a/external-import/orange-cyberdefense-v3/media/Intrusion_set.png and b/external-import/orange-cyberdefense-v3/media/Intrusion_set.png differ diff --git a/external-import/orange-cyberdefense-v3/media/Malware.png b/external-import/orange-cyberdefense-v3/media/Malware.png index 19a539171a0..68a94cd9371 100644 Binary files a/external-import/orange-cyberdefense-v3/media/Malware.png and b/external-import/orange-cyberdefense-v3/media/Malware.png differ diff --git a/external-import/orange-cyberdefense-v3/media/Report.png b/external-import/orange-cyberdefense-v3/media/Report.png deleted file mode 100644 index 35b4d86af79..00000000000 Binary files a/external-import/orange-cyberdefense-v3/media/Report.png and /dev/null differ diff --git a/external-import/orange-cyberdefense-v3/media/Report_2.png b/external-import/orange-cyberdefense-v3/media/Report_2.png deleted file mode 100644 index 8e31b728d63..00000000000 Binary files a/external-import/orange-cyberdefense-v3/media/Report_2.png and /dev/null differ diff --git a/external-import/orange-cyberdefense-v3/media/Reports.png b/external-import/orange-cyberdefense-v3/media/Reports.png new file mode 100644 index 00000000000..3b0c07cc273 Binary files /dev/null and b/external-import/orange-cyberdefense-v3/media/Reports.png differ diff --git a/external-import/orange-cyberdefense-v3/src/main.py b/external-import/orange-cyberdefense-v3/src/main.py index 240e569bd81..75a8741ffef 100644 --- a/external-import/orange-cyberdefense-v3/src/main.py +++ b/external-import/orange-cyberdefense-v3/src/main.py @@ -90,7 +90,7 @@ def _init_config(self): **config.get("connector", {}), } config["connector"]["type"] = "EXTERNAL_IMPORT" - config["connector"]["scope"] = "ocd" + config["connector"]["scope"] = "Orange-Cyberdefense" self.helper = OpenCTIConnectorHelper(config) # OCD_IMPORT_DATALAKE @@ -834,8 +834,8 @@ def _get_report_entities(self, tags: Iterable[str]): if ( self.ocd_datalake_add_createdby and stix_object["type"] == "identity" - and stix_object["identity_class"] == "organization" - and stix_object["name"] == "Orange Cyberdefense" + and stix_object.get("identity_class", None) == "organization" + and stix_object.get("name", None) == "Orange Cyberdefense" ): objects.append(self._process_object(stix_object)) if "labels" not in stix_object: @@ -1256,8 +1256,8 @@ def process_query(self, query, filter_by_last_updated_date_query_body): elif ( self.ocd_datalake_add_createdby and processed_object["type"] == "identity" - and processed_object["identity_class"] == "organization" - and processed_object["name"] == "Orange Cyberdefense" + and processed_object.get("identity_class", None) == "organization" + and processed_object.get("name", None) == "Orange Cyberdefense" ): objects.append(processed_object) elif self.ocd_datalake_add_related: diff --git a/external-import/orange-cyberdefense-v3/src/requirements.txt b/external-import/orange-cyberdefense-v3/src/requirements.txt index d313fc2f4ff..9e74cd43d79 100644 --- a/external-import/orange-cyberdefense-v3/src/requirements.txt +++ b/external-import/orange-cyberdefense-v3/src/requirements.txt @@ -1,3 +1,3 @@ -pycti==7.260309.0 -datalake-scripts==3.0.0rc7 -html2text==2025.4.15 \ No newline at end of file +pycti==7.260515.0 +datalake-scripts==3.0.0 +html2text==2025.4.15 diff --git a/external-import/orange-cyberdefense/Dockerfile b/external-import/orange-cyberdefense/Dockerfile deleted file mode 100644 index 64f5b24ac3d..00000000000 --- a/external-import/orange-cyberdefense/Dockerfile +++ /dev/null @@ -1,21 +0,0 @@ -FROM python:3.12-alpine -ENV CONNECTOR_TYPE=EXTERNAL_IMPORT - -# Copy only requirements, to cache them in docker layer -WORKDIR /opt/opencti-connector-orange-cyberdefense -COPY src/requirements.txt ./ - -# Install Python modules -# hadolint ignore=DL3003 -RUN apk update && apk upgrade && \ - apk --no-cache add git build-base libmagic libffi-dev libxslt libxslt-dev libxml2 libxml2-dev && \ - pip3 install --no-cache-dir -r requirements.txt && \ - apk del git build-base - -# Now copy all the rest of the application -COPY src . - -# Expose and entrypoint -COPY entrypoint.sh / -RUN chmod +x /entrypoint.sh -ENTRYPOINT ["/entrypoint.sh"] \ No newline at end of file diff --git a/external-import/orange-cyberdefense/README.md b/external-import/orange-cyberdefense/README.md deleted file mode 100644 index 2b7191f9e0d..00000000000 --- a/external-import/orange-cyberdefense/README.md +++ /dev/null @@ -1,74 +0,0 @@ -# CERT Orange Cyberdefense CTI Connector - -| Status | Date | Comment | -|--------|------|---------| -| Partner | - | - | - -## Objective - -This connector allows to ingest into OpenCTI the Cyber Threat Intelligence provided by the ***CERT Orange Cybderdefense***. - -Depending on its configuration and your subscription level it will ingest **Indicators**, **Reports**, **Vulnerabilities**, **Intrusion Set**, **Malwares**, ... - -## Prerequisites -- An operational OpenCTI on-prem instance with administrator privileges or an OpenCTI Saas version -- An active **Managed Threat Intelligence** subscription (Datalake) : https://datalake.cert.orangecyberdefense.com/. If you want to test Datalake CTI please contact : info.cert@fr.orangecyberdefense.com - - [Creating a Datalake LongTerm Token](https://datalake.cert.orangecyberdefense.com/gui/my-account) for accessing Datalake API - - [Getting a WorldWatch API key](https://api-ww.cert.orangecyberdefense.com/api/docs) to ingest WorldWatch reports - -## Configuration - -| Parameter | Docker envvar | Mandatory | Description | -|---------------------------------|-------------------------------------|-----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `opencti_url` | `OPENCTI_URL` | Yes | The URL of the OpenCTI platform. | -| `opencti_token` | `OPENCTI_TOKEN` | Yes | The default admin token configured in the OpenCTI platform parameters file. | -| `connector_id` | `CONNECTOR_ID` | Yes | A valid arbitrary `UUIDv4` that must be unique for this connector. | -| `connector_name` | `CONNECTOR_NAME` | Yes | `Orange Cyberdefense Cyber Threat Intelligence` | -| `connector_scope` | `CONNECTOR_SCOPE` | Yes | `ocd` | -| `update_existing_data` | `CONNECTOR_UPDATE_EXISTING_DATA` | Yes | Update data already ingested into the platform. | -| `log_level` | `CONNECTOR_LOG_LEVEL` | No | Log output for the connector. Defaults to `INFO`. | -| `import_datalake` | `OCD_IMPORT_DATALAKE` | Yes | Set if you want to ingest indicators collections from the Datalake. Defaults to `True`. | -| `datalake_token` | `OCD_DATALAKE_TOKEN` | No | Long Term Token used to access Datalake API. Mandatory if `OCD_IMPORT_DATALAKE` or `OCD_IMPORT_THREAT_LIBRARY` set to `True`. | -| `datalake_zip_file_path` | `OCD_DATALAKE_ZIP_FILE_PATH` | No | Path were temporary ZIP files will be saved. Defaults to `/opt/opencti-connector-orange-cyberdefense`. | -| `datalake_queries` | `OCD_DATALAKE_QUERIES` | No | List of search `query_hash` for indicator's collection you want to ingest. Mandatory if `OCD_IMPORT_DATALAKE` set to `True`. | -| `import_threat_library` | `OCD_IMPORT_THREAT_LIBRARY` | Yes | If `True`, at each run the latest 500 entries (Malware, Intrusion Set, Tools, Attack Patterns, Vulnerabilities, ...) from the [Datalake Threat Library](https://datalake.cert.orangecyberdefense.com/gui/threats-library) will be ingested. Defaults to `True`. | -| `import_worldwatch` | `OCD_IMPORT_WORLDWATCH` | Yes | If `True`, World Watch reports will be ingested into OpenCTI. Defaults to `True`. | -| `import_worldwatch_start_date` | `OCD_IMPORT_WORLDWATCH_START_DATE` | No | Start date for import of World Watch reports. Defaults to `2022-01-01`. Mandatory if `OCD_IMPORT_WORLDWATCH` set to `True`. | -| `import_worldwatch_api_key` | `OCD_IMPORT_WORLDWATCH_API_KEY` | No | WorldWatch API Key. Mandatory if `OCD_IMPORT_WORLDWATCH` set to `True`. | -| `interval` | `OCD_INTERVAL` | Yes | Time interval in minutes defining the frequency of the data ingestion process. Minimum recommended `30`. Defaults to `30`. | -| `create_observables` | `OCD_CREATE_OBSERVABLES` | No | Create observables from indicators. Defaults to `True`. | -| `curate_labels` | `OCD_CURATE_LABELS` | No | Adapt Datalake CTI tags as STIX labels. Defaults to `True`. | -| `threat_actor_as_intrusion_set` | `OCD_THREAT_ACTOR_AS_INTRUSION_SET` | No | Transform Threat Actor objects from Datalake to Intrusion Set objects. Defaults to `True`. | -| `reset_state` | `OCD_RESET_STATE` | No | Force the use of the start date from the config instead of getting the state saved in OpenCTI. Defaults to `False`. | -| `ignore_unscored_indicators` | `OCD_IGNORE_UNSCORED_INDICATORS` | No | If `True`, Datalake indicators that do not have any score will NOT be imported into OpenCTI. Defaults to `True`. | -| `ignore_whitelisted_indicators` | `OCD_IGNORE_WHITELISTED_INDICATORS` | No | If `True`, Datalake indicators that are whitelisted NOT be imported into OpenCTI. Defaults to `True`. | -| `fallback_score` | `OCD_FALLBACK_SCORE` | No | If `OCD_IGNORE_UNSCORED_INDICATORS` is set to `False`, this value will be used as a default for Datalake indicators without any score. Defaults to `0`. | - -## Orange Cyberdefense Intelligence in OpenCTI - -First of all, check if the connector is running and up to date. -Go to Data > Ingestion > Connectors > Orange Cyberdefense Cyber Threat Intelligence -On this page, you can find the following information: -- Basic information > Last update: last update date of the connector in OpenCTI -- Details > State: provides information about the latest update of data for each category -```json -{ - "worldwatch": "2024-11-29T13:52:50Z", #latest World Watch report ingested - "datalake": "2024-12-17T09:28:11.206244+01:00", #latest refresh of the indicators ingested from "datalake_queries" - "threat_library": "2024-12-17T09:28:11.206811+01:00", #latest ingest of the threat library entities -} -``` -### WorldWatch reports in OpenCTI -![image](./media/Report.png) -![image](./media/Report_2.png) - -### Malware in OpenCTI -![image](./media/Malware.png) - -### Intrusion Set in OpenCTI -![image](./media/Intrusion_set.png) - -### Indicators in OpenCTI -![image](./media/Indicator_1.png) -![image](./media/Indicator_2.png) -![image](./media/Indicator_3.png) diff --git a/external-import/orange-cyberdefense/__metadata__/connector_manifest.json b/external-import/orange-cyberdefense/__metadata__/connector_manifest.json deleted file mode 100644 index ce36829d1f1..00000000000 --- a/external-import/orange-cyberdefense/__metadata__/connector_manifest.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "title": "Orange Cyberdefense", - "slug": "orange-cyberdefense", - "description": "This connector allows to ingest into OpenCTI the Cyber Threat Intelligence provided by the CERT Orange CyberDefense.\nDepending on its configuration and your subscription level it will ingest Indicators, Reports, Vulnerabilities, Intrusion Set, Malwares, ...", - "short_description": "This connector allows to ingest into OpenCTI the Cyber Threat Intelligence provided by the CERT Orange Cyberdefense.", - "logo": "external-import/orange-cyberdefense/__metadata__/logo.png", - "use_cases": [ - "Commercial Threat Intel" - ], - "verified": true, - "last_verified_date": null, - "playbook_supported": false, - "max_confidence_level": 55, - "support_version": ">=5.5.4", - "subscription_link": null, - "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/external-import/orange-cyberdefense", - "manager_supported": false, - "container_version": "rolling", - "container_image": "opencti/connector-orange-cyberdefense", - "container_type": "EXTERNAL_IMPORT" -} \ No newline at end of file diff --git a/external-import/orange-cyberdefense/__metadata__/logo.png b/external-import/orange-cyberdefense/__metadata__/logo.png deleted file mode 100644 index 35b0d33ff17..00000000000 Binary files a/external-import/orange-cyberdefense/__metadata__/logo.png and /dev/null differ diff --git a/external-import/orange-cyberdefense/docker-compose.yml b/external-import/orange-cyberdefense/docker-compose.yml deleted file mode 100644 index 1891701da56..00000000000 --- a/external-import/orange-cyberdefense/docker-compose.yml +++ /dev/null @@ -1,29 +0,0 @@ -version: '3' -services: - connector-orange-cyberdefense: - image: opencti/connector-orange-cyberdefense:latest - environment: - - OPENCTI_URL=http://localhost - - OPENCTI_TOKEN=ChangeMe - - CONNECTOR_ID=ChangeMe - - "CONNECTOR_NAME=Orange Cyberdefense Cyber Threat Intelligence" - - CONNECTOR_SCOPE=identity,attack-pattern,intrusion-set,malware,tool,report,location,vulnerability,indicator,campaign,relationship - - CONNECTOR_UPDATE_EXISTING_DATA=false - - CONNECTOR_LOG_LEVEL=error - - OCD_DATALAKE_TOKEN=ChangeME - - OCD_DATALAKE_ZIP_FILE_PATH=/opt/opencti-connector-orange-cyberdefense - - OCD_IMPORT_WORLDWATCH=true - - OCD_IMPORT_WORLDWATCH_START_DATE=2022-01-01 - - OCD_IMPORT_WORLDWATCH_API_KEY=ChangeMe - - OCD_IMPORT_THREAT_LIBRARY=true - - OCD_IMPORT_DATALAKE=true - - OCD_DATALAKE_QUERIES=[{"query_hash":"b56b43144690145c115e8f5fee9dade3","label":"high_confidence_network_iocs"},{"query_hash":"346f3acbcb29f476d56b6689c36ea6d4","label":"ocd_peerpressure_c2_tracker"}] - - OCD_CREATE_OBSERVABLES=true # Create observables from indicators - - OCD_CURATE_LABELS=true # Curated labels - - OCD_THREAT_ACTOR_AS_INTRUSION_SET=true - - OCD_INTERVAL=30 # Required, in minutes - - OCD_RESET_STATE=false # force the use of the start_dates from the config instead of getting the state saved in opencti - - OCD_IGNORE_UNSCORED_INDICATORS=true - - OCD_IGNORE_WHITELISTED_INDICATORS=true - - OCD_FALLBACK_SCORE=0 - restart: always diff --git a/external-import/orange-cyberdefense/entrypoint.sh b/external-import/orange-cyberdefense/entrypoint.sh deleted file mode 100644 index a5398f9dbc2..00000000000 --- a/external-import/orange-cyberdefense/entrypoint.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh - -# Correct working directory -cd /opt/opencti-connector-orange-cyberdefense - -# Start the connector -python3 orange-cyberdefense.py \ No newline at end of file diff --git a/external-import/orange-cyberdefense/media/Indicator_1.png b/external-import/orange-cyberdefense/media/Indicator_1.png deleted file mode 100644 index 0521fcd18b4..00000000000 Binary files a/external-import/orange-cyberdefense/media/Indicator_1.png and /dev/null differ diff --git a/external-import/orange-cyberdefense/media/Indicator_2.png b/external-import/orange-cyberdefense/media/Indicator_2.png deleted file mode 100644 index b5830533845..00000000000 Binary files a/external-import/orange-cyberdefense/media/Indicator_2.png and /dev/null differ diff --git a/external-import/orange-cyberdefense/media/Indicator_3.png b/external-import/orange-cyberdefense/media/Indicator_3.png deleted file mode 100644 index 1dabf96a0e4..00000000000 Binary files a/external-import/orange-cyberdefense/media/Indicator_3.png and /dev/null differ diff --git a/external-import/orange-cyberdefense/media/Intrusion_set.png b/external-import/orange-cyberdefense/media/Intrusion_set.png deleted file mode 100644 index 3466a00ea8b..00000000000 Binary files a/external-import/orange-cyberdefense/media/Intrusion_set.png and /dev/null differ diff --git a/external-import/orange-cyberdefense/media/Malware.png b/external-import/orange-cyberdefense/media/Malware.png deleted file mode 100644 index 19a539171a0..00000000000 Binary files a/external-import/orange-cyberdefense/media/Malware.png and /dev/null differ diff --git a/external-import/orange-cyberdefense/media/Report.png b/external-import/orange-cyberdefense/media/Report.png deleted file mode 100644 index 35b4d86af79..00000000000 Binary files a/external-import/orange-cyberdefense/media/Report.png and /dev/null differ diff --git a/external-import/orange-cyberdefense/media/Report_2.png b/external-import/orange-cyberdefense/media/Report_2.png deleted file mode 100644 index 8e31b728d63..00000000000 Binary files a/external-import/orange-cyberdefense/media/Report_2.png and /dev/null differ diff --git a/external-import/orange-cyberdefense/src/config.yml.sample b/external-import/orange-cyberdefense/src/config.yml.sample deleted file mode 100644 index 8a1c7787e7d..00000000000 --- a/external-import/orange-cyberdefense/src/config.yml.sample +++ /dev/null @@ -1,31 +0,0 @@ -opencti: - url: 'http://localhost' - token: 'ChangeMe' - - -connector: - type: 'EXTERNAL_IMPORT' - id: 'connector-orange-cyberdefense' - name: 'Orange Cyberdefense Cyber Threat Intelligence' - scope: 'identity,attack-pattern,intrusion-set,malware,tool,report,location,vulnerability,indicator,campaign,relationship' - confidence_level: 100 # From 0 (Unknown) to 100 (Fully trusted) - update_existing_data: true - log_level: 'info' - -ocd: - datalake_token: 'ChangeMe' - datalake_zip_file_path: '/opt/opencti-connector-orange-cyberdefense' - import_worldwatch: true - import_worldwatch_start_date: '2022-01-01' - import_worldwatch_api_key: 'ChangeMe' - import_threat_library: true - import_datalake: true - datalake_queries: '[{"query_hash":"b56b43144690145c115e8f5fee9dade3","label":"high_confidence_network_iocs"},{"query_hash":"346f3acbcb29f476d56b6689c36ea6d4","label":"ocd_peerpressure_c2_tracker"}]' - create_observables: true # Create observables from indicators - curate_labels: true # Curated labels - threat_actor_as_intrusion_set: true - interval: 30 # Required, in minutes. Minimum recommended 30 - reset_state: false # force the use of the start_dates from the config instead of getting the state saved in opencti - ignore_unscored_indicators: true - ignore_whitelisted_indicators: true - fallback_score: 0 \ No newline at end of file diff --git a/external-import/orange-cyberdefense/src/orange-cyberdefense.py b/external-import/orange-cyberdefense/src/orange-cyberdefense.py deleted file mode 100644 index 5b980332c8d..00000000000 --- a/external-import/orange-cyberdefense/src/orange-cyberdefense.py +++ /dev/null @@ -1,1029 +0,0 @@ -import datetime -import json -import logging -import os -import sys -import time -import zipfile -from html.parser import HTMLParser -from io import StringIO -from typing import Iterable, TypeVar - -import html2text -import requests -import stix2 -import yaml -from datalake import Datalake, Output -from dateutil.parser import parse -from pycti import ( - Note, - OpenCTIConnectorHelper, - Report, - StixCoreRelationship, - get_config_variable, -) - -T = TypeVar("T") - - -class MLStripper(HTMLParser): - def __init__(self): - super().__init__() - self.reset() - self.strict = False - self.convert_charrefs = True - self.text = StringIO() - - def handle_data(self, d): - self.text.write(d) - - def get_data(self): - return self.text.getvalue() - - -def strip_tags(html: str): - s = MLStripper() - s.feed(html) - return s.get_data() - - -atom_types_mapping = { - "apk": "Unknown", - "as": "Autonomous-System", - "cc": "Payment-Card", - "crypto": "Cryptocurrency-Wallet", - "cve": "Unknown", - "domain": "Domain-Name", - "email": "Email-Addr", - "file": "StixFile", - "fqdn": "Hostname", - "iban": "Bank-Account", - "ip": "IPv4-Addr", - "ip_range": "IPv4-Addr", - "paste": "Text", - "phone_number": "Phone-Number", - "regkey": "Windows-Registry-Key", - "ssl": "X509-Certificate", - "url": "Url", -} - - -def keep_first(iterable: Iterable[T], key=None): - """ - Generator that yields once per unique element from the provided iterable. - If key is provided, it is used to determine uniqueness. - If it is string, it must be a valid key of all elements of the iterable. - Else, key must be a callable returning a hashable value, it will be called on all elements. - - """ - if key is None: - - def func(x): - return x - - elif isinstance(key, str): - - def func(x): - return x[key] - - elif callable(key): - func = key - else: - raise ValueError("key must either be None, a str, or a callable") - seen = set() - for elem in iterable: - k = func(elem) - if k in seen: - continue - seen.add(k) - yield elem - - -def iter_stix_bs_results(zip_file_path): - """ - iterates on all stix objects of a stix bulk search result which is a zip file of multiple stix bundle json files - """ - with zipfile.ZipFile(zip_file_path, "r") as zip_file: - for filename in zip_file.namelist(): - with zip_file.open(filename) as file: - bundle = json.load(file) - if "objects" in bundle: - yield from bundle["objects"] - - -def generate_markdown_table(data): - markdown_str = "## Threat scores\n" - markdown_str += ( - "| DDoS | Fraud | Hack | Leak | Malware | Phishing | Scam | Scan | Spam |\n" - ) - markdown_str += ( - "|------|-------|------|------|---------|----------|------|------|------|\n" - ) - - threat_scores = data.get("x_datalake_score", {}) - ddos = threat_scores.get("ddos", "-") - fraud = threat_scores.get("fraud", "-") - hack = threat_scores.get("hack", "-") - leak = threat_scores.get("leak", "-") - malware = threat_scores.get("malware", "-") - phishing = threat_scores.get("phishing", "-") - scam = threat_scores.get("scam", "-") - scan = threat_scores.get("scan", "-") - spam = threat_scores.get("spam", "-") - - markdown_str += f"| {ddos} | {fraud} | {hack} | {leak} | {malware} | {phishing} | {scam} | {scan} | {spam} |\n" - markdown_str += "## Threat intelligence sources\n" - markdown_str += ( - "| source_id | count | first_seen | last_updated | min_depth | max_depth |\n" - ) - markdown_str += ( - "|-----------|-------|------------|--------------|-----------|-----------|\n" - ) - - threat_sources = data.get("x_datalake_sources", []) - - # Sort the threat_sources by 'last_updated' in descending order - threat_sources.sort(key=lambda x: x.get("last_updated", ""), reverse=True) - - for source in threat_sources: - source_id = source.get("source_id", "-") - count = source.get("count", "-") - first_seen = source.get("first_seen", "-") - if first_seen != "-": - # Format 'first_seen' to 'YYYY-MM-DD' - first_seen = datetime.datetime.fromisoformat( - first_seen.rstrip("Z") - ).strftime("%Y-%m-%d %H:%M") - last_updated = source.get("last_updated", "-") - if last_updated != "-": - # Format 'last_updated' to 'YYYY-MM-DD' - last_updated = datetime.datetime.fromisoformat( - last_updated.rstrip("Z") - ).strftime("%Y-%m-%d %H:%M") - min_depth = source.get("min_depth", "-") - max_depth = source.get("max_depth", "-") - - markdown_str += f"| {source_id} | {count} | {first_seen} | {last_updated} | {min_depth} | {max_depth} |\n" - - return markdown_str - - -def extract_datalake_query_hash(url: str): - logging.info("Extracting query hash from URL: %s", url) - # Find the starting position of 'query_hash=' - start_pos = url.find("query_hash=") - if start_pos == -1: - return "" - start_pos += len("query_hash=") - # Find the ending position of the hash (either end of string or next parameter) - end_pos = url.find("&", start_pos) - if end_pos == -1: - end_pos = len(url) - # Extract the query hash - query_hash = url[start_pos:end_pos] - return query_hash - - -def _curate_labels(labels): - curated_labels = [] - for label in labels: - if "tlp:" in label: - continue - label_value = label - if '="' in label: - label_value_split = label.split('="') - label_value = label_value_split[1][:-1].strip() - elif ":" in label: - label_value_split = label.split(":") - label_value = label_value_split[1].strip() - if label_value.isdigit(): - if ":" in label: - label_value_split = label.split(":") - label_value = label_value_split[1].strip() - else: - label_value = label - if '="' in label_value: - label_value = label_value.replace('="', "-")[:-1] - curated_labels.append(label_value) - curated_labels = [ - label for label in curated_labels if label is not None and len(label) > 0 - ] - return curated_labels - - -class OrangeCyberDefense: - def __init__(self): - config_file_path = os.path.dirname(os.path.abspath(__file__)) + "/config.yml" - if os.path.isfile(config_file_path): - with open(config_file_path, encoding="utf8") as f: - config = yaml.load(f, Loader=yaml.FullLoader) - else: - config = {} - self.helper = OpenCTIConnectorHelper(config) - self.ocd_datalake_api_url = ( - "https://datalake.cert.orangecyberdefense.com/api/v2" - ) - self.ocd_datalake_token = get_config_variable( - "OCD_DATALAKE_TOKEN", ["ocd", "datalake_token"], config - ) - self.ocd_datalake_zip_file_path = get_config_variable( - "OCD_DATALAKE_ZIP_FILE_PATH", - ["ocd", "datalake_zip_file_path"], - config, - default="/opt/opencti-connector-orange-cyberdefense", - ) - self.ocd_import_worldwatch_api_key = get_config_variable( - "OCD_IMPORT_WORLDWATCH_API_KEY", - ["ocd", "import_worldwatch_api_key"], - config, - ) - self.ocd_import_worldwatch = get_config_variable( - "OCD_IMPORT_WORLDWATCH", ["ocd", "import_worldwatch"], config, default=True - ) - self.ocd_import_worldwatch_start_date = get_config_variable( - "OCD_IMPORT_WORLDWATCH_START_DATE", - ["ocd", "import_worldwatch_start_date"], - config, - ) - self.ocd_import_threat_library = get_config_variable( - "OCD_IMPORT_THREAT_LIBRARY", - ["ocd", "import_threat_library"], - config, - default=True, - ) - self.ocd_import_datalake = get_config_variable( - "OCD_IMPORT_DATALAKE", ["ocd", "import_datalake"], config, default=True - ) - self.ocd_datalake_queries = json.loads( - get_config_variable( - "OCD_DATALAKE_QUERIES", - ["ocd", "datalake_queries"], - config, - ) - ) - self.ocd_create_observables = get_config_variable( - "OCD_CREATE_OBSERVABLES", - ["ocd", "create_observables"], - config, - default=True, - ) - self.ocd_curate_labels = get_config_variable( - "OCD_CURATE_LABELS", ["ocd", "curate_labels"], config, default=True - ) - self.ocd_interval = get_config_variable( - "OCD_INTERVAL", ["ocd", "interval"], config, isNumber=True, default=15 - ) - self.ocd_threat_actor_as_intrusion_set = get_config_variable( - "OCD_THREAT_ACTOR_AS_INTRUSION_SET", - ["ocd", "threat_actor_as_intrusion_set"], - config, - default=True, - ) - self.update_existing_data = get_config_variable( - "CONNECTOR_UPDATE_EXISTING_DATA", - ["connector", "update_existing_data"], - config, - ) - self.ocd_reset_state = get_config_variable( - "OCD_RESET_STATE", - ["ocd", "reset_state"], - config, - default=False, - ) - self.ocd_ignore_unscored_indicators = get_config_variable( - "OCD_IGNORE_UNSCORED_INDICATORS", - ["ocd", "ignore_unscored_indicators"], - config, - default=True, - ) - self.ocd_ignore_whitelisted_indicators = get_config_variable( - "OCD_IGNORE_WHITELISTED_INDICATORS", - ["ocd", "ignore_whitelisted_indicators"], - config, - default=True, - ) - self.ocd_fallback_score = get_config_variable( - "OCD_FALLBACK_SCORE", - ["ocd", "fallback_score"], - config, - isNumber=True, - default=0, - ) - - # Init variables - self.identity = self.helper.api.identity.create( - type="Organization", - name="Orange Cyberdefense", - description="""Orange Cyberdefense is the expert cybersecurity business unit of the Orange Group, - providing consulting, solutions and services to organizations around the globe.""", - ) - self.marking = self.helper.api.marking_definition.create( - definition_type="COMMERCIAL", - definition="ORANGE CYBERDEFENSE", - x_opencti_order=99, - x_opencti_color="#ff7900", - ) - if self.ocd_import_datalake or self.ocd_import_threat_library: - self.datalake_instance = Datalake(longterm_token=self.ocd_datalake_token) - self.cache = {} - - def _generate_indicator_note(self, indicator_object): - creation_date = indicator_object.get("created", {}) - technical_md = generate_markdown_table(indicator_object) - note_stix = stix2.Note( - id=Note.generate_id(creation_date, technical_md), - abstract="OCD-CERT Datalake additional informations", - content=technical_md, - created=creation_date, - modified=indicator_object["modified"], - created_by_ref=self.identity["standard_id"], - object_marking_refs=[self.marking["standard_id"]], - object_refs=[indicator_object.get("id")], - ) - return note_stix - - def _get_ranged_score(self, score: int): - if score == 100: - return 90 - return (score // 10) * 10 - - def _process_object(self, stix_obj): - - dict_label_to_object_marking_refs = { - "tlp:clear": [stix2.TLP_WHITE.get("id")], - "tlp:white": [stix2.TLP_WHITE.get("id")], - "tlp:green": [stix2.TLP_GREEN.get("id")], - "tlp:amber": [stix2.TLP_AMBER.get("id"), self.marking["standard_id"]], - "tlp:red": [stix2.TLP_RED.get("id"), self.marking["standard_id"]], - } - if "labels" in stix_obj: - for label in stix_obj["labels"]: - if label in dict_label_to_object_marking_refs.keys(): - stix_obj["object_marking_refs"] = dict_label_to_object_marking_refs[ - label - ] - if "labels" in stix_obj and self.ocd_curate_labels: - stix_obj["labels"] = _curate_labels(stix_obj["labels"]) - if "confidence" not in stix_obj: - stix_obj["confidence"] = self.helper.connect_confidence_level - if "x_datalake_score" in stix_obj: - scores = list(stix_obj["x_datalake_score"].values()) - if len(scores) > 0: - stix_obj["x_opencti_score"] = max(scores) - if ( - stix_obj["x_opencti_score"] == 0 - and self.ocd_ignore_whitelisted_indicators - ): - return None - else: - if self.ocd_ignore_unscored_indicators: - return None - else: - stix_obj["x_opencti_score"] = self.ocd_fallback_score - if ( - "x_datalake_atom_type" in stix_obj - and stix_obj["x_datalake_atom_type"] in atom_types_mapping - ): - stix_obj["x_opencti_main_observable_type"] = atom_types_mapping[ - stix_obj["x_datalake_atom_type"] - ] - if "created_by_ref" not in stix_obj: - stix_obj["created_by_ref"] = self.identity["standard_id"] - if "external_references" in stix_obj: - external_references = [] - for external_reference in stix_obj["external_references"]: - if "url" in external_reference: - external_reference["url"] = external_reference["url"].replace( - "api/v2/mrti/threats", "gui/threat" - ) - external_references.append(external_reference) - else: - external_references.append(external_reference) - stix_obj["external_references"] = external_references - - # Type specific operations - if ( - stix_obj["type"] == "threat-actor" - and self.ocd_threat_actor_as_intrusion_set - ): - stix_obj["type"] = "intrusion-set" - stix_obj["id"] = stix_obj["id"].replace("threat-actor", "intrusion-set") - if stix_obj["type"] == "sector": - stix_obj["type"] = "identity" - stix_obj["identity_class"] = "class" - stix_obj["id"] = stix_obj["id"].replace("sector", "identity") - if stix_obj["type"] == "relationship": - stix_obj["source_ref"] = stix_obj["source_ref"].replace( - "sector", "identity" - ) - stix_obj["target_ref"] = stix_obj["target_ref"].replace( - "sector", "identity" - ) - if self.ocd_threat_actor_as_intrusion_set: - stix_obj["source_ref"] = stix_obj["source_ref"].replace( - "threat-actor", "intrusion-set" - ) - stix_obj["target_ref"] = stix_obj["target_ref"].replace( - "threat-actor", "intrusion-set" - ) - if stix_obj["type"] == "indicator": - if self.ocd_create_observables: - stix_obj["x_opencti_create_observables"] = True - threat_scores = stix_obj.get("x_datalake_score", {}) - for threat_type, score in threat_scores.items(): - ranged_score = self._get_ranged_score(score) - new_label = f"dtl_{threat_type}_{ranged_score}" - if "labels" not in stix_obj: - stix_obj["labels"] = [] - stix_obj["labels"].append(new_label) - return stix_obj - - def _get_report_iocs(self, datalake_query_hash: str): - """ - Fetch the stix objects from Datalake that are found with the provided query_hash - This export is very demanding for the Datalake API, so it must be done in small - batches to limit Gateway Timeouts - """ - objects = [] - self.helper.log_info( - "Extracting stix objects from Datalake query hash: " + datalake_query_hash - ) - - limit = 25 - offset = 0 - objects = [] - while True: - self.helper.log_info( - "Iterating, limit=" + str(limit) + ", offset=" + str(offset) - ) - try: - data = self.datalake_instance.AdvancedSearch.advanced_search_from_query_hash( - query_hash=datalake_query_hash, - limit=limit, - offset=offset, - ordering=["last_updated"], - output=Output.STIX, - ) - except Exception as e: - self.helper.log_error( - f"ERROR: unable to get offset={str(offset)} with limit={str(limit)} for query_hash={datalake_query_hash}. " - f"Error message: {str(e)}" - ) - break - if offset + limit >= 10000 or "objects" not in data: - break - # Parse the result - for stix_obj in data["objects"]: - processed_object = self._process_object(stix_obj) - if processed_object is None: - continue - if processed_object["type"] == "indicator": - stix2_note = self._generate_indicator_note(processed_object) - objects.append(stix2_note) - objects.append(processed_object) - offset += limit - - # we remove duplicates, after processing because processing may affect id - objects = list(keep_first(objects, "id")) - return objects - - def _get_report_entities(self, tags: Iterable[str]): - """ - Fetch the threat entities from Datalake that have some of the provided tags (as stix label) - """ - objects = [] - self.helper.log_info( - "Getting datalake report entities for WorldWatch with tags " + str(tags) - ) - - for tag in tags: - try: - url = "https://datalake.cert.orangecyberdefense.com/api/v2/mrti/tag-subcategory/filtered/" - payload = json.dumps( - { - "limit": "5000", - "offset": "0", - "tag": tag, - } - ) - headers = { - "Accept": "application/stix+json", - "Content-Type": "application/json", - "Authorization": "Token " + self.ocd_datalake_token, - } - response = requests.post(url, headers=headers, data=payload) - data = response.json() - except Exception as e: - self.helper.log_error( - "This tag cannot be found in Datalake: " + tag + "\n" + str(e) - ) - continue - if "objects" in data: - for stix_object in data["objects"]: - label: str - for label in stix_object["labels"]: - if tag.lower() == label.lower(): - processed_object = self._process_object(stix_object) - objects.append(processed_object) - break - else: - self.helper.log_info("No objects found for tag " + tag) - return objects - - def get_html_content_block(self, content_block_id): - url = ( - "https://api-ww.cert.orangecyberdefense.com/api/content_block/" - + str(content_block_id) - + "/html" - ) - headers = { - "Content-Type": "application/json", - "Authorization": self.ocd_import_worldwatch_api_key, - } - response = requests.get(url, headers=headers) - return response.json().get("html") - - def _create_report_relationships(self, objects, date, markings): - """ - Generates stix relationship objects for the given objects. - Objects are sorted into categories: attackers, victims, threats, arsenals. - - "targets" relations are created between attackers and victims. - - "uses" relations are created between threats and arsenals. - """ - attackers = [ - o - for o in objects - if o["type"] in ["threat-actor", "intrusion-set", "malware", "campaign"] - ] - victims = [o for o in objects if o["type"] in ["identity", "location"]] - threats = [ - o - for o in objects - if o["type"] in ["threat-actor", "intrusion-set", "campaign"] - ] - arsenals = [ - o for o in objects if o["type"] in ["malware", "tool", "attack-pattern"] - ] - relationships = [] - for attacker in attackers: - for victim in victims: - relationships.append( - json.loads( - stix2.Relationship( - id=StixCoreRelationship.generate_id( - "targets", attacker["id"], victim["id"] - ), - relationship_type="targets", - created_by_ref=self.identity["standard_id"], - source_ref=attacker["id"], - target_ref=victim["id"], - object_marking_refs=markings, - start_time=date, - created=date, - modified=date, - allow_custom=True, - ).serialize() - ) - ) - for threat in threats: - for arsenal in arsenals: - relationships.append( - json.loads( - stix2.Relationship( - id=StixCoreRelationship.generate_id( - "uses", threat["id"], arsenal["id"] - ), - relationship_type="uses", - created_by_ref=self.identity["standard_id"], - source_ref=threat["id"], - target_ref=arsenal["id"], - object_marking_refs=markings, - start_time=date, - created=date, - modified=date, - allow_custom=True, - ).serialize() - ) - ) - return relationships - - def _generate_report(self, report: dict): - self.helper.log_info( - 'Generating report "' - + report["title"] - + '" (' - + report["timestamp_updated"] - + ")" - ) - - # Managing external references - self.helper.log_info("Processing external references...") - external_references = [] - # Add external reference to advisory on CERT Portal - external_reference = stix2.ExternalReference( - source_name="Orange Cyberdefense WorldWatch advisory", - url=f"https://portal.cert.orangecyberdefense.com/worldwatch/advisory/{report['advisory']}", - description=report["title"], - ) - external_references.append(external_reference) - - if report.get("sources") is not None: - for source in report["sources"]: - external_reference = stix2.ExternalReference( - source_name=source["title"] or "Orange Cyberdefense", - url=source["url"], - description=source["description"], - ) - external_references.append(external_reference) - if report.get("datalake_url") is not None: - external_reference = stix2.ExternalReference( - source_name=report["datalake_url"]["title"] or "Datalake Search", - url=report["datalake_url"]["url"], - description=report["datalake_url"]["description"], - ) - external_references.append(external_reference) - self.helper.log_info(f"Got {len(external_references)} external_references.") - - # Getting the iocs object from the report - self.helper.log_info("Getting iocs from Datalake...") - if report["datalake_url"]: - if self.ocd_import_datalake or self.ocd_import_threat_library: - hashkey = extract_datalake_query_hash(report["datalake_url"]["url"]) - if hashkey: - report_iocs = self._get_report_iocs( - datalake_query_hash=hashkey, - ) - else: - self.helper.log_info( - f"No hashkey found in datalake url: {report['datalake_url']['url']}" - ) - report_iocs = [] - else: - self.helper.log_info("Skipping because datalake is not configured") - report_iocs = [] - else: - self.helper.log_info("No datalake url found") - report_iocs = [] - self.helper.log_info(f"Got {len(report_iocs)} stix objects from datalake.") - - # Getting the report entities - self.helper.log_info("Getting report entities...") - tags = set(report["tags"]) | set(report["advisory_tags"]) - if (self.ocd_import_datalake or self.ocd_import_threat_library) and tags: - report_entities = self._get_report_entities(tags) - else: - report_entities = [] - self.helper.log_info(f"Got {len(report_entities)} threat entities.") - - report_object_marking_refs = [ - stix2.TLP_GREEN.get("id"), - self.marking["standard_id"], - ] - - # Generate relationships (stix objects) between threat entities - self.helper.log_info("Generating relationships for threat entities...") - report_relationships = self._create_report_relationships( - report_entities, - parse(report["timestamp_updated"]), - report_object_marking_refs, - ) - self.helper.log_info(f"Generated {len(report_relationships)} relations.") - - # Processing the report - self.helper.log_info("Processing the report description...") - html_content = self.get_html_content_block(report["id"]) or "" - # Convert HTML to Markdown - text_maker = html2text.HTML2Text() - text_maker.body_width = 0 - text_maker.ignore_links = False - text_maker.ignore_images = False - text_maker.ignore_tables = False - text_maker.ignore_emphasis = False - text_maker.skip_internal_links = False - text_maker.inline_links = True - text_maker.protect_links = True - text_maker.mark_code = True - # Generate the report - report_md = text_maker.handle(html_content) - - report_object_refs = ( - [ - x["id"] for x in report_iocs if x["type"] == "indicator" - ] # ids from "indicator" iocs - + [x["id"] for x in report_entities] # ids from threat entities - + [ - x["id"] for x in report_relationships - ] # ids from threat entities relations - ) - - report_stix = stix2.Report( - id=Report.generate_id( - f"{report['advisory']}-{report['id']}", report["timestamp_created"] - ), - name=report["title"], - description=report_md, - report_types=["threat-report"], - created_by_ref=self.identity["standard_id"], - external_references=external_references, - created=parse(report["timestamp_created"]), - published=parse(report["timestamp_updated"]), - modified=parse(report["timestamp_updated"]), - object_refs=( - report_object_refs - if report_object_refs - else [self.identity["standard_id"]] - ), - labels=["severity-" + str(report["severity"])], - allow_custom=True, - object_marking_refs=report_object_marking_refs, - ) - objects = [report_stix] + report_iocs + report_entities + report_relationships - return objects - - def get_content_block_list(self, start_date: datetime.datetime): - url = ( - "https://api-ww.cert.orangecyberdefense.com/api/content_block/" - "?sort_by=timestamp_updated&sort_order=asc&limit=5000" - "&updated_after=" + start_date.strftime("%Y-%m-%dT%H:%M:%S") - ) - headers = { - "Content-Type": "application/json", - "Authorization": self.ocd_import_worldwatch_api_key, - } - response = requests.get(url, headers=headers) - return response.json()["items"] - - def _import_worldwatch(self): - current_state = self.helper.get_state() - - content_block_list = self.get_content_block_list( - datetime.datetime.fromisoformat(current_state["worldwatch"]) - ) - - for content_block in content_block_list: - try: - self.helper.log_info( - f"---------------------------------- WorldWatch -> {content_block['id']}-------------------------------------------" - ) - content_block_objects = self._generate_report(content_block) - if content_block_objects: - self.helper.log_info("Sending stix bundle to OpenCTI") - self._log_and_initiate_work("World Watch") - self.helper.send_stix2_bundle( - stix2.Bundle( - objects=content_block_objects, allow_custom=True - ).serialize(), - update=self.update_existing_data, - work_id=self.work_id, - ) - self._log_and_terminate_work() - # Update state timestamp if content block is newer than the current state and not in future - if ( - parse(content_block["timestamp_updated"]) - <= datetime.datetime.now(tz=datetime.timezone.utc) - ) and ( - parse(content_block["timestamp_updated"]) - >= parse(current_state["worldwatch"]) - ): - current_state["worldwatch"] = ( - parse(content_block["timestamp_updated"]) - .astimezone(datetime.timezone.utc) - .isoformat() - ) - self.helper.set_state(current_state) - except Exception as e: - self.helper.log_error( - f"Error while importing WorldWatch advisory {content_block['id']}: {str(e)} " - ) - continue - - def _import_datalake(self): - current_state = self.helper.get_state() - # Define query parameters - calculated_interval = (int(self.ocd_interval) + 15) * 60 - - # Filter by last updated date query body object - filter_by_last_updated_date_query_body = { - "AND": [ - { - "field": "system_last_updated", - "type": "filter", - "value": calculated_interval, - } - ] - } - - for query in self.ocd_datalake_queries: - - try: - adv_search = self.datalake_instance.AdvancedSearch.advanced_search_from_query_hash( - query["query_hash"], limit=0 - ) - query_body = adv_search["query_body"] - except Exception as e: - self.helper.log_error( - f"Could not extract query_body for the following Bulk search : '{query['label']}', error : '{str(e)}'" - ) - continue - - if len(query_body.keys()) > 0 and list(query_body.keys())[0] == "AND": - query_body["AND"].append(filter_by_last_updated_date_query_body) - else: - self.helper.log_info( - f"""Bulk search {query['label']} doesn't use a main 'AND' operator - -> unable to filter on last {self.ocd_interval} minutes data.""" - ) - - self.helper.log_info( - f"Creating Bulk Search with label '{query['label']}' in Datalake with the following query hash '{query['query_hash']}'" - ) - - # Create the bulk search task - task = self.datalake_instance.BulkSearch.create_task( - for_stix_export=True, query_body=query_body - ) - - self.helper.log_info(f"Waiting for Bulk Search {task.uuid}...") - # Download the data as STIX_ZIP - zip_file_path = self.ocd_datalake_zip_file_path + "/data.zip" - task.download_sync_stream_to_file( - output=Output.STIX_ZIP, timeout=60 * 60, output_path=zip_file_path - ) - - self.helper.log_info("Processing Bulk Search results...") - objects = [] - for stix_object in iter_stix_bs_results(zip_file_path): - processed_object = self._process_object(stix_object) - if processed_object is None: - continue - if processed_object["type"] == "indicator": - if "labels" not in processed_object: - processed_object["labels"] = [] - processed_object["labels"].append(f"dtl_{query['label']}") - note_stix = self._generate_indicator_note(processed_object) - objects.append(note_stix) - objects.append(processed_object) - - # Cleanup the temporary files - if os.path.exists(zip_file_path): - try: - os.remove(zip_file_path) - except OSError as e: - logging.error(f"Error removing {zip_file_path}: {e}") - - # we remove duplicates, after processing because processing may affect id - objects = list(keep_first(objects, "id")) - - # Create a bundle of the processed objects - if objects: - self.helper.log_info( - f"Got {len(objects)} stix objects from query \"{query['label']}\"." - ) - self._log_and_initiate_work(f"Datalake query {query['label']}") - # Send the created bundle - self.helper.send_stix2_bundle( - stix2.Bundle(objects=objects, allow_custom=True).serialize(), - update=self.update_existing_data, - work_id=self.work_id, - ) - self._log_and_terminate_work() - - # Update the state if 'modified' field is present - current_state["datalake"] = datetime.datetime.now( - tz=datetime.timezone.utc - ).isoformat() - self.helper.set_state(current_state) - - def _import_threat_library(self): - current_state = self.helper.get_state() - - url = "https://datalake.cert.orangecyberdefense.com/api/v2/mrti/tag-subcategory/filtered/" - payload = json.dumps({"limit": "500", "offset": "0", "ordering": "-updated_at"}) - headers = { - "Accept": "application/stix+json", - "Content-Type": "application/json", - "Authorization": "Token " + self.ocd_datalake_token, - } - threat_stix_bundle = requests.request( - "POST", url, headers=headers, data=payload - ).json() - if threat_stix_bundle["objects"]: - self._log_and_initiate_work("Threat Library") - threat_stix_bundle["objects"] = [ - self._process_object(obj) for obj in threat_stix_bundle["objects"] - ] - self.helper.send_stix2_bundle( - stix2.Bundle( - objects=threat_stix_bundle["objects"], allow_custom=True - ).serialize(), - update=self.update_existing_data, - work_id=self.work_id, - ) - self._log_and_terminate_work() - current_state["threat_library"] = datetime.datetime.now( - tz=datetime.timezone.utc - ).isoformat() - self.helper.set_state(current_state) - return True - - return False - - def _log_and_initiate_work(self, name): - self.helper.log_info("Pushing data to OpenCTI APIs...") - now = datetime.datetime.now(tz=datetime.timezone.utc) - friendly_name = f"Orange Cyberdefense \"{name}\" service run @ {now.strftime('%Y-%m-%d %H:%M:%S')}" - self.work_id = self.helper.api.work.initiate_work( - self.helper.connect_id, friendly_name - ) - - def _log_and_terminate_work(self): - self.helper.api.work.to_processed(self.work_id, "End of synchronization") - self.helper.log_info("End of synchronization") - - def _set_initial_state(self): - logging.info("Setting initial state") - initial_state = { - "worldwatch": parse(self.ocd_import_worldwatch_start_date) - .astimezone(datetime.timezone.utc) - .isoformat(), - "datalake": "", - "threat_library": "", - } - self.helper.set_state(initial_state) - logging.info(f"Initial state set: {initial_state}") - return initial_state - - def _validate_state(self, state): - """ - returns True if the state is correct for the current version of the connector - this function must be updated if the state format change - """ - if state is None: - return False - - return all( - key in state.keys() for key in ["worldwatch", "datalake", "threat_library"] - ) - - def run(self): - if self.ocd_reset_state: - current_state = self._set_initial_state() - else: - # connector initialization: it tries to fetch state from the opencti instance - # if no valid state is found, then state is reset using the provided config - current_state = self.helper.get_state() - if self._validate_state(current_state): - self.helper.log_info( - "State initialized using state from opencti instance" - ) - else: - self.helper.log_info( - "State from opencti is absent or invalid, resetting state..." - ) - current_state = self._set_initial_state() - - while True: - try: - if self.ocd_import_worldwatch: - try: - self._import_worldwatch() - except Exception as ex: - self.helper.log_error( - f"Encountered an error while ingesting WorldWatch: {str(ex)}" - ) - if self.ocd_import_threat_library: - try: - if self._import_threat_library(): - self.helper.log_info("Threat Library successfully updated") - else: - self.helper.log_info( - "No updates available for Threat Library" - ) - except Exception as ex: - self.helper.log_error( - f"Encountered an error while updating ThreatLibrary: {str(ex)}" - ) - if self.ocd_import_datalake: - try: - self._import_datalake() - except Exception as ex: - self.helper.log_error( - f"Encountered an error while ingesting Datalake: {str(ex)}" - ) - - logging.info(f"Sleeping for {self.ocd_interval} minutes") - time.sleep(int(self.ocd_interval) * 60) - except (KeyboardInterrupt, SystemExit): - self.helper.log_info("Connector stop") - sys.exit(0) - - -if __name__ == "__main__": - try: - ocd_connector = OrangeCyberDefense() - ocd_connector.run() - except Exception: - import traceback - - traceback.print_exc() - sys.exit(1) diff --git a/external-import/orange-cyberdefense/src/requirements.txt b/external-import/orange-cyberdefense/src/requirements.txt deleted file mode 100644 index 893858527ef..00000000000 --- a/external-import/orange-cyberdefense/src/requirements.txt +++ /dev/null @@ -1,6 +0,0 @@ -pycti==7.260309.0 -datalake-scripts==2.7.4 -html2text==2025.4.15 -beautifulsoup4==4.14.2 -lxml==5.4.0 -html5lib==1.1 diff --git a/external-import/pgl-yoyo/src/requirements.txt b/external-import/pgl-yoyo/src/requirements.txt index e1e0bd9718c..e3a19393203 100644 --- a/external-import/pgl-yoyo/src/requirements.txt +++ b/external-import/pgl-yoyo/src/requirements.txt @@ -1 +1 @@ -pycti==7.260309.0 +pycti==7.260515.0 diff --git a/external-import/phishunt/README.md b/external-import/phishunt/README.md index d4a02a40e16..130b65bf8b7 100644 --- a/external-import/phishunt/README.md +++ b/external-import/phishunt/README.md @@ -14,7 +14,7 @@ This connector retrieves urls of active websites that are suspicious of being ph ### Requirements -- OpenCTI Platform >= 7.260309.0 +- OpenCTI Platform >= 7.260515.0 ## Configuration variables diff --git a/external-import/phishunt/src/requirements.txt b/external-import/phishunt/src/requirements.txt index 09a7a86a2b7..c4bac4897c0 100644 --- a/external-import/phishunt/src/requirements.txt +++ b/external-import/phishunt/src/requirements.txt @@ -1,6 +1,6 @@ -pycti==7.260309.0 -urllib3==2.6.3 -requests==2.32.5 +pycti==7.260515.0 +urllib3==2.7.0 +requests==2.33.0 stix2==3.0.1 pyyaml==6.0.3 pydantic >=2.8.2, <3 diff --git a/external-import/phishunt/tests/test-requirements.txt b/external-import/phishunt/tests/test-requirements.txt index bdef682113c..d405632324b 100644 --- a/external-import/phishunt/tests/test-requirements.txt +++ b/external-import/phishunt/tests/test-requirements.txt @@ -1,2 +1,2 @@ -r ../src/requirements.txt -pytest==8.4.2 +pytest==9.0.3 diff --git a/external-import/promptintel/src/requirements.txt b/external-import/promptintel/src/requirements.txt index d8b096e17e1..91ddf9b3baf 100644 --- a/external-import/promptintel/src/requirements.txt +++ b/external-import/promptintel/src/requirements.txt @@ -1,4 +1,4 @@ -pycti==7.260309.0 +pycti==7.260515.0 pydantic>=2.8.2,<3 -requests>=2.31.0,<3 +requests>=2.31.0,<=2.33.0 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk diff --git a/external-import/proofpoint-et-reputation/src/requirements.txt b/external-import/proofpoint-et-reputation/src/requirements.txt index fecf6e9526b..b680851c396 100644 --- a/external-import/proofpoint-et-reputation/src/requirements.txt +++ b/external-import/proofpoint-et-reputation/src/requirements.txt @@ -1,7 +1,7 @@ -pycti==7.260309.0 +pycti==7.260515.0 validators==0.35.0 pydantic>=2.8.2, <3 -requests~=2.32.3 +requests~=2.33.0 stix2~=3.0.1 PyYAML==6.0.3 diff --git a/external-import/proofpoint-tap/.env.sample b/external-import/proofpoint-tap/.env.sample index 8a239975af6..4af8bccf9ab 100644 --- a/external-import/proofpoint-tap/.env.sample +++ b/external-import/proofpoint-tap/.env.sample @@ -3,27 +3,20 @@ OPENCTI_URL=http://localhost:8080 OPENCTI_TOKEN=ChangeMe # Connector's definition parameters REQUIRED -CONNECTOR_ID=c2635ebc-67f7-43a4-9caa-0d10cdc95b85 -CONNECTOR_NAME=ProofPointTAP -CONNECTOR_SCOPE=report -CONNECTOR_DURATION_PERIOD=PT12H -CONNECTOR_LOG_LEVEL=warn -# Connector's definition parameters OPTIONAL -# CONNECTOR_QUEUE_THRESHOLD=500 # Default 500MBytes, Float accepted -# CONNECTOR_RUN_AND_TERMINATE=False # Default False, True run connector once -# CONNECTOR_SEND_TO_QUEUE=True # Default True -# CONNECTOR_SEND_TO_DIRECTORY=False # Default False -# CONNECTOR_SEND_TO_DIRECTORY_PATH=CHANGEME # if CONNECTOR_SEND_TO_DIRECTORY is True, you must specify a path -# CONNECTOR_SEND_TO_DIRECTORY_RETENTION=7 # Default 7, in days +# CONNECTOR_ID=c2635ebc-67f7-43a4-9caa-0d10cdc95b85 +# CONNECTOR_NAME="ProofPoint TAP" +# CONNECTOR_SCOPE=report +# CONNECTOR_DURATION_PERIOD=PT12H +# CONNECTOR_LOG_LEVEL=warn -# PROOFPOINT TAP DEDICATED PARAMETERS -TAP_API_BASE_URL=https://tap-api-v2.proofpoint.com/ -TAP_API_PRINCIPAL=ChangeMe -TAP_API_SECRET=ChangeMe -TAP_API_TIMEOUT=PT30S -TAP_API_RETRIES=3 -TAP_API_BACKOFF=PT5S -TAP_MARKING_DEFINITION=white -TAP_EXPORT_CAMPAIGNS=True -TAP_EXPORT_EVENTS=True -TAP_EVENTS_TYPE=issues +# ProofPoint TAP parameters +# PROOFPOINT_TAP_API_BASE_URL=https://tap-api-v2.proofpoint.com/ +PROOFPOINT_TAP_API_PRINCIPAL=ChangeMe +PROOFPOINT_TAP_API_SECRET=ChangeMe +# PROOFPOINT_TAP_API_TIMEOUT=PT30S +# PROOFPOINT_TAP_API_RETRIES=3 +# PROOFPOINT_TAP_API_BACKOFF=PT5S +# PROOFPOINT_TAP_MARKING_DEFINITION=white +# PROOFPOINT_TAP_EXPORT_CAMPAIGNS=True +# PROOFPOINT_TAP_EXPORT_EVENTS=False +# PROOFPOINT_TAP_EVENTS_TYPE=issues diff --git a/external-import/proofpoint-tap/.gitignore b/external-import/proofpoint-tap/.gitignore new file mode 100644 index 00000000000..5548287ef6c --- /dev/null +++ b/external-import/proofpoint-tap/.gitignore @@ -0,0 +1,8 @@ +**/logs +**/*.gql +**/venv +**/.venv +**/__pycache__ +**/build +**/*.egg-info +**/config.yml \ No newline at end of file diff --git a/external-import/proofpoint-tap/Dockerfile b/external-import/proofpoint-tap/Dockerfile index 2d76e9f5baf..0b98646b10b 100644 --- a/external-import/proofpoint-tap/Dockerfile +++ b/external-import/proofpoint-tap/Dockerfile @@ -9,19 +9,19 @@ RUN apk update && apk upgrade && \ FROM base AS package -# Copy the package -COPY proofpoint_tap /opt/proofpoint_tap +# Copy the packages +COPY src /opt/src COPY pyproject.toml /opt/pyproject.toml RUN cd /opt/ && \ pip3 install --no-cache-dir . && \ apk del git build-base && \ rm /opt/pyproject.toml && \ - rm -rf /opt/proofpoint_tap + rm -rf /opt/src FROM package AS app # Copy the app -COPY app.py /opt/app.py +COPY src/main.py /opt/main.py # Run the app -CMD ["python3", "/opt/app.py"] +CMD ["python3", "/opt/main.py"] diff --git a/external-import/proofpoint-tap/README.md b/external-import/proofpoint-tap/README.md index 849fb26c9a4..07934013bdf 100644 --- a/external-import/proofpoint-tap/README.md +++ b/external-import/proofpoint-tap/README.md @@ -1,9 +1,5 @@ # Proofpoint TAP Connector -| Status | Date | Comment | -|--------|------|---------| -| Filigran Verified | - | - | - The Proofpoint TAP connector imports phishing campaign data, events, and threat intelligence from Proofpoint Targeted Attack Protection (TAP) into OpenCTI. See: https://www.proofpoint.com/us/products/threat-defense @@ -12,7 +8,7 @@ See: https://www.proofpoint.com/us/products/threat-defense - [Proofpoint TAP Connector](#proofpoint-tap-connector) - [Introduction](#introduction) - [Installation](#installation) - - [Configuration variables](#configuration-variables) + - [Configuration](#configuration) - [Deployment](#deployment) - [Usage](#usage) - [Behavior](#behavior) @@ -20,6 +16,7 @@ See: https://www.proofpoint.com/us/products/threat-defense - [Additional information](#additional-information) ## Introduction + This connector fetches data such as campaign and their members, and integrates them into OpenCTI for further analysis and correlation with other threat intelligence data. @@ -30,13 +27,13 @@ into OpenCTI for further analysis and correlation with other threat intelligence - OpenCTI Platform >= 6.4 - Proofpoint TAP API access -## Configuration variables +## Configuration -The connector should be configured via environment variables. +Configuration parameters can be provided in either **`config.yml`** file, **`.env`** file or directly as **environment variables** (e.g. from **`docker-compose.yml`** for Docker deployments). -For instance using `shell` +Priority: **YAML > .env > environment > defaults** -directly +For instance using `shell` directly ```shell export ENV_VAR_NAME="..." ``` @@ -46,69 +43,20 @@ with a .env file export $(grep -v '^#' .env | xargs -d '\n') ``` -or `docker-compose.yml` in the container `environment` section. - with a config.yaml file (dev purposes): - -config.yaml should be composed of 2 levels keys/value such as ```yaml connector: id: "..." ``` -you can then alter the `app.py` file to load the config.yaml using the dedicated adapter: -```python -from proofpoint_tap.adapters.config import ConfigLoaderYaml +### Configuration variables -config = ConfigLoaderYaml("path/to/config.yaml") -``` - -### OpenCTI environment variables - -Below are the parameters you'll need to set for OpenCTI: - -| Parameter | Docker environment variable | Mandatory | Description | -|---------------|-----------------------------|-----------|------------------------------------------------------| -| OpenCTI URL | `OPENCTI_URL` | Yes | The URL of the OpenCTI platform. | -| OpenCTI Token | `OPENCTI_TOKEN` | Yes | The default admin token set in the OpenCTI platform. | - -### Base connector environment variables - -Below are the parameters you'll need to set for running the connector properly: -| Parameter | Docker environment variable | Default | Mandatory | Description | -|-----------------|-----------------------------|-----------------|-----------|------------------------------------------------------------------------------------------| -| Connector ID | `CONNECTOR_ID` | | Yes | A unique `UUIDv4` identifier for this connector instance. | -| Connector Name | `CONNECTOR_NAME` | | Yes | Name of the connector. | -| Connector Scope | `CONNECTOR_SCOPE` | | Yes | The scope or type of data the connector is importing, either a MIME type or Stix Object. | -| Log Level | `CONNECTOR_LOG_LEVEL` | | Yes | Determines the verbosity of the logs. Options are `debug`, `info`, `warn`, or `error`. | -| Duration Period | `CONNECTOR_DURATION_PERIOD` | | Yes | The interval at which the connector runs, in ISO8601 format. Example: PT30M for 30 minutes. | -| Queue Threshold | `CONNECTOR_QUEUE_THRESHOLD` | 500 | No | The maximum size of the queue in MBytes. Default is 500MBytes. | -| Run and Terminate | `CONNECTOR_RUN_AND_TERMINATE` | False | No | If set to True, the connector will run once and then terminate. Default is False. | -| Send to Queue | `CONNECTOR_SEND_TO_QUEUE` | True | No | If set to True, the connector will send data to the queue. Default is True. | -| Send to Directory | `CONNECTOR_SEND_TO_DIRECTORY` | False | No | If set to True, the connector will send data to a directory. Default is False. | -| Directory Path | `CONNECTOR_SEND_TO_DIRECTORY_PATH` | CHANGEME | No | The path to the directory where data will be sent if `CONNECTOR_SEND_TO_DIRECTORY` is True. | -| Directory Retention | `CONNECTOR_SEND_TO_DIRECTORY_RETENTION` | 7 | No | The number of days to retain data in the directory. Default is 7 days. | - -### Connector extra parameters environment variables - -Below are the parameters you'll need to set for the connector: - -| Parameter | Docker environment variable | Default | Mandatory | Description | -|----------------------------------------|-----------------------------------|---------|-----------|-------------------------------------------------------------------------------------------------| -| API base URL | `TAP_API_BASE_URL` | | Yes | Base URL for Proofpoint TAP API | -| API access key | `TAP_API_PRINCIPAL` | | Yes | Access key for Proofpoint TAP API | -| API secret key | `TAP_API_SECRET` | | Yes | Secret key for Proofpoint TAP API | -| API timeout | `TAP_API_TIMEOUT` | | Yes | Timeout for API requests in ISO8601 | -| API backoff | `TAP_API_BACKOFF` | | Yes | Backoff time in ISO8601 for API retries | -| API retries | `TAP_API_RETRIES` | | Yes | Number of retries for API requests | -| Marking definition | `TAP_MARKING_DEFINITION` | | Yes | Marking definition for exported data (Should be one of "white", "green", "amber", "amber+strict", "red") | -| Export Campaigns | `TAP_EXPORT_CAMPAIGNS` | False | No | Export campaigns to OpenCTI | -| Export Events | `TAP_EXPORT_EVENTS` | False | No | Export events to OpenCTI | -| Events type | `TAP_EVENTS_TYPE ` | | No | Events types to export (all, issues,messages_blocked,messages_delivered,clicks_blocked,clicks_permitted ) | +Find all the configuration variables available here: [Connector Configurations](./__metadata__) ## Deployment ### Docker Deployment + Build a Docker Image using the provided `Dockerfile`. Example: @@ -138,7 +86,7 @@ pip install . Then, start the connector: ```shell -python app.py +python src/main.py ``` ## Usage diff --git a/external-import/proofpoint-tap/__metadata__/CONNECTOR_CONFIG_DOC.md b/external-import/proofpoint-tap/__metadata__/CONNECTOR_CONFIG_DOC.md new file mode 100644 index 00000000000..af38b289d48 --- /dev/null +++ b/external-import/proofpoint-tap/__metadata__/CONNECTOR_CONFIG_DOC.md @@ -0,0 +1,35 @@ +# Connector Configurations + +Below is an exhaustive enumeration of all configurable parameters available, each accompanied by detailed explanations of their purposes, default behaviors, and usage guidelines to help you understand and utilize them effectively. + +### Type: `object` + +| Property | Type | Required | Possible values | Deprecated | Default | Description | +| -------- | ---- | -------- | --------------- | ---------- | ------- | ----------- | +| OPENCTI_URL | `string` | ✅ | Format: [`uri`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | | The base URL of the OpenCTI instance. | +| OPENCTI_TOKEN | `string` | ✅ | string | | | The API token to connect to OpenCTI. | +| PROOFPOINT_TAP_API_PRINCIPAL_KEY | `string` | ✅ | Format: [`password`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | | Proofpoint API principal key for authentication. | +| PROOFPOINT_TAP_API_SECRET_KEY | `string` | ✅ | Format: [`password`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | | Proofpoint API secret key for authentication. | +| CONNECTOR_NAME | `string` | | string | | `"ProofPointTAP"` | The name of the connector. | +| CONNECTOR_SCOPE | `array` | | string | | `["report"]` | The type of data the connector is importing, i.e. the type of Stix Objects (for information only). | +| CONNECTOR_LOG_LEVEL | `string` | | `debug` `info` `warn` `warning` `error` | | `"error"` | The minimum level of logs to display. | +| CONNECTOR_TYPE | `const` | | `EXTERNAL_IMPORT` | | `"EXTERNAL_IMPORT"` | | +| CONNECTOR_DURATION_PERIOD | `string` | | Format: [`duration`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | `"PT12H"` | The period of time to await between two runs of the connector. | +| PROOFPOINT_TAP_API_BASE_URL | `string` | | Format: [`uri`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | `"https://tap-api-v2.proofpoint.com/"` | Proofpoint API base URL. | +| PROOFPOINT_TAP_API_TIMEOUT | `string` | | Format: [`duration`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | `"PT30S"` | Timeout duration for API requests. | +| PROOFPOINT_TAP_API_BACKOFF | `string` | | Format: [`duration`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | `"PT5S"` | Backoff duration for API requests. | +| PROOFPOINT_TAP_API_RETRIES | `integer` | | integer | | `3` | Number of retries for API requests. | +| PROOFPOINT_TAP_MARKING_DEFINITION | `string` | | `white` `green` `amber` `amber+strict` `red` | | `"amber+strict"` | Default TLP level of the imported entities. | +| PROOFPOINT_TAP_EXPORT_CAMPAIGNS | `boolean` | | boolean | | `true` | Whether to export Proofpoint campaigns and import them into OpenCTI. | +| PROOFPOINT_TAP_EXPORT_EVENTS | `boolean` | | boolean | | `false` | Whether to export Proofpoint events and import them into OpenCTI. | +| PROOFPOINT_TAP_EVENTS_TYPE | `string` | | `all` `issues` `messages_blocked` `messages_delivered` `clicks_blocked` `clicks_permitted` | | `"issues"` | The type of events to export (`PROOFPOINT_TAP_EXPORT_EVENTS` must be enabled). | +| TAP_API_BASE_URL | `string` | | Format: [`uri`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | ⛔️ | `"https://tap-api-v2.proofpoint.com/"` | Use PROOFPOINT_TAP_API_BASE_URL instead. (removal scheduled for 2026-08-27) | +| TAP_API_PRINCIPAL_KEY | `string` | | Format: [`password`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | ⛔️ | | Use PROOFPOINT_TAP_API_PRINCIPAL_KEY instead. (removal scheduled for 2026-08-27) | +| TAP_API_SECRET_KEY | `string` | | Format: [`password`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | ⛔️ | | Use PROOFPOINT_TAP_API_SECRET_KEY instead. (removal scheduled for 2026-08-27) | +| TAP_API_TIMEOUT | `string` | | Format: [`duration`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | ⛔️ | `"PT30S"` | Use PROOFPOINT_TAP_API_TIMEOUT instead. (removal scheduled for 2026-08-27) | +| TAP_API_BACKOFF | `string` | | Format: [`duration`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | ⛔️ | `"PT5S"` | Use PROOFPOINT_TAP_API_BACKOFF instead. (removal scheduled for 2026-08-27) | +| TAP_API_RETRIES | `integer` | | integer | ⛔️ | `3` | Use PROOFPOINT_TAP_API_RETRIES instead. (removal scheduled for 2026-08-27) | +| TAP_MARKING_DEFINITION | `string` | | `white` `green` `amber` `amber+strict` `red` | ⛔️ | `"amber+strict"` | Use PROOFPOINT_TAP_MARKING_DEFINITION instead. (removal scheduled for 2026-08-27) | +| TAP_EXPORT_CAMPAIGNS | `boolean` | | boolean | ⛔️ | `true` | Use PROOFPOINT_TAP_EXPORT_CAMPAIGNS instead. (removal scheduled for 2026-08-27) | +| TAP_EXPORT_EVENTS | `boolean` | | boolean | ⛔️ | `false` | Use PROOFPOINT_TAP_EXPORT_EVENTS instead. (removal scheduled for 2026-08-27) | +| TAP_EVENTS_TYPE | `string` | | `all` `issues` `messages_blocked` `messages_delivered` `clicks_blocked` `clicks_permitted` | ⛔️ | `"issues"` | Use PROOFPOINT_TAP_EVENTS_TYPE instead. (removal scheduled for 2026-08-27) | diff --git a/external-import/proofpoint-tap/__metadata__/connector_config_schema.json b/external-import/proofpoint-tap/__metadata__/connector_config_schema.json new file mode 100644 index 00000000000..1bc4d035814 --- /dev/null +++ b/external-import/proofpoint-tap/__metadata__/connector_config_schema.json @@ -0,0 +1,218 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://www.filigran.io/connectors/proofpoint-tap_config.schema.json", + "type": "object", + "properties": { + "OPENCTI_URL": { + "description": "The base URL of the OpenCTI instance.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "OPENCTI_TOKEN": { + "description": "The API token to connect to OpenCTI.", + "type": "string" + }, + "CONNECTOR_NAME": { + "default": "ProofPointTAP", + "description": "The name of the connector.", + "type": "string" + }, + "CONNECTOR_SCOPE": { + "default": [ + "report" + ], + "description": "The type of data the connector is importing, i.e. the type of Stix Objects (for information only).", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "CONNECTOR_LOG_LEVEL": { + "default": "error", + "description": "The minimum level of logs to display.", + "enum": [ + "debug", + "info", + "warn", + "warning", + "error" + ], + "type": "string" + }, + "CONNECTOR_TYPE": { + "const": "EXTERNAL_IMPORT", + "default": "EXTERNAL_IMPORT", + "type": "string" + }, + "CONNECTOR_DURATION_PERIOD": { + "default": "PT12H", + "description": "The period of time to await between two runs of the connector.", + "format": "duration", + "type": "string" + }, + "PROOFPOINT_TAP_API_BASE_URL": { + "default": "https://tap-api-v2.proofpoint.com/", + "description": "Proofpoint API base URL.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "PROOFPOINT_TAP_API_PRINCIPAL_KEY": { + "description": "Proofpoint API principal key for authentication.", + "format": "password", + "type": "string", + "writeOnly": true + }, + "PROOFPOINT_TAP_API_SECRET_KEY": { + "description": "Proofpoint API secret key for authentication.", + "format": "password", + "type": "string", + "writeOnly": true + }, + "PROOFPOINT_TAP_API_TIMEOUT": { + "default": "PT30S", + "description": "Timeout duration for API requests.", + "format": "duration", + "type": "string" + }, + "PROOFPOINT_TAP_API_BACKOFF": { + "default": "PT5S", + "description": "Backoff duration for API requests.", + "format": "duration", + "type": "string" + }, + "PROOFPOINT_TAP_API_RETRIES": { + "default": 3, + "description": "Number of retries for API requests.", + "type": "integer" + }, + "PROOFPOINT_TAP_MARKING_DEFINITION": { + "default": "amber+strict", + "description": "Default TLP level of the imported entities.", + "enum": [ + "white", + "green", + "amber", + "amber+strict", + "red" + ], + "type": "string" + }, + "PROOFPOINT_TAP_EXPORT_CAMPAIGNS": { + "default": true, + "description": "Whether to export Proofpoint campaigns and import them into OpenCTI.", + "type": "boolean" + }, + "PROOFPOINT_TAP_EXPORT_EVENTS": { + "default": false, + "description": "Whether to export Proofpoint events and import them into OpenCTI.", + "type": "boolean" + }, + "PROOFPOINT_TAP_EVENTS_TYPE": { + "default": "issues", + "description": "The type of events to export (`PROOFPOINT_TAP_EXPORT_EVENTS` must be enabled).", + "enum": [ + "all", + "issues", + "messages_blocked", + "messages_delivered", + "clicks_blocked", + "clicks_permitted" + ], + "type": "string" + }, + "TAP_API_BASE_URL": { + "default": "https://tap-api-v2.proofpoint.com/", + "description": "Use PROOFPOINT_TAP_API_BASE_URL instead. (removal scheduled for 2026-08-27)", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string", + "deprecated": true + }, + "TAP_API_PRINCIPAL_KEY": { + "description": "Use PROOFPOINT_TAP_API_PRINCIPAL_KEY instead. (removal scheduled for 2026-08-27)", + "format": "password", + "type": "string", + "writeOnly": true, + "deprecated": true + }, + "TAP_API_SECRET_KEY": { + "description": "Use PROOFPOINT_TAP_API_SECRET_KEY instead. (removal scheduled for 2026-08-27)", + "format": "password", + "type": "string", + "writeOnly": true, + "deprecated": true + }, + "TAP_API_TIMEOUT": { + "default": "PT30S", + "description": "Use PROOFPOINT_TAP_API_TIMEOUT instead. (removal scheduled for 2026-08-27)", + "format": "duration", + "type": "string", + "deprecated": true + }, + "TAP_API_BACKOFF": { + "default": "PT5S", + "description": "Use PROOFPOINT_TAP_API_BACKOFF instead. (removal scheduled for 2026-08-27)", + "format": "duration", + "type": "string", + "deprecated": true + }, + "TAP_API_RETRIES": { + "default": 3, + "description": "Use PROOFPOINT_TAP_API_RETRIES instead. (removal scheduled for 2026-08-27)", + "type": "integer", + "deprecated": true + }, + "TAP_MARKING_DEFINITION": { + "default": "amber+strict", + "description": "Use PROOFPOINT_TAP_MARKING_DEFINITION instead. (removal scheduled for 2026-08-27)", + "enum": [ + "white", + "green", + "amber", + "amber+strict", + "red" + ], + "type": "string", + "deprecated": true + }, + "TAP_EXPORT_CAMPAIGNS": { + "default": true, + "description": "Use PROOFPOINT_TAP_EXPORT_CAMPAIGNS instead. (removal scheduled for 2026-08-27)", + "type": "boolean", + "deprecated": true + }, + "TAP_EXPORT_EVENTS": { + "default": false, + "description": "Use PROOFPOINT_TAP_EXPORT_EVENTS instead. (removal scheduled for 2026-08-27)", + "type": "boolean", + "deprecated": true + }, + "TAP_EVENTS_TYPE": { + "default": "issues", + "description": "Use PROOFPOINT_TAP_EVENTS_TYPE instead. (removal scheduled for 2026-08-27)", + "enum": [ + "all", + "issues", + "messages_blocked", + "messages_delivered", + "clicks_blocked", + "clicks_permitted" + ], + "type": "string", + "deprecated": true + } + }, + "required": [ + "OPENCTI_URL", + "OPENCTI_TOKEN", + "PROOFPOINT_TAP_API_PRINCIPAL_KEY", + "PROOFPOINT_TAP_API_SECRET_KEY" + ], + "additionalProperties": true +} \ No newline at end of file diff --git a/external-import/proofpoint-tap/__metadata__/connector_manifest.json b/external-import/proofpoint-tap/__metadata__/connector_manifest.json index 21474d1ccb8..96a355da62e 100644 --- a/external-import/proofpoint-tap/__metadata__/connector_manifest.json +++ b/external-import/proofpoint-tap/__metadata__/connector_manifest.json @@ -16,7 +16,7 @@ "support_version": ">= 6.5.1", "subscription_link": "https://www.proofpoint.com/us/resources/data-sheets/targeted-attack-protection", "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/external-import/proofpoint-tap", - "manager_supported": false, + "manager_supported": true, "container_version": "rolling", "container_image": "opencti/connector-proofpoint-tap", "container_type": "EXTERNAL_IMPORT" diff --git a/external-import/proofpoint-tap/config.yaml.sample b/external-import/proofpoint-tap/config.yaml.sample index f483f846ad8..b5a893db9ad 100644 --- a/external-import/proofpoint-tap/config.yaml.sample +++ b/external-import/proofpoint-tap/config.yaml.sample @@ -2,30 +2,21 @@ opencti: url: 'http://localhost:PORT' token: 'ChangeMe' -connector: - id: 'ChangeMe' - name: 'Proofpoint TAP' - scope: 'report' - log_level: 'info' - duration_period: 'PT30M' # Interval given for scheduler process in ISO-8601 format - #============================================# - # Optional connector's definition parameters # - #============================================# - #queue_threshold: 500 - #run_and_terminate: 'False' - #send_to_queue: 'True' - #send_to_directory: 'False' - #send_to_directory_path: 'ChangeMe' - #send_to_directory_retention: 7 +# connector: +# id: 'c2635ebc-67f7-43a4-9caa-0d10cdc95b85' +# name: 'Proofpoint TAP' +# scope: 'report' +# log_level: 'info' +# duration_period: 'PT12H' # Interval given for scheduler process in ISO-8601 format -tap: - api_base_url: 'ChangeMe' +proofpoint_tap: + # api_base_url: 'https://tap-api-v2.proofpoint.com/' api_principal_key: 'ChangeMe' api_secret_key: 'ChangeMe' # api_timeout: 'PT30S' # api_backoff: 'PT5S' # api_retries: 5 - marking_definition: 'white' - export_campaigns: true - export_events: true - events_type: 'issues' \ No newline at end of file + # marking_definition: 'white' + # export_campaigns: true + # export_events: false + # events_type: 'issues' \ No newline at end of file diff --git a/external-import/proofpoint-tap/docker-compose.yml b/external-import/proofpoint-tap/docker-compose.yml index b93c368d91d..b55d2ecc8c8 100644 --- a/external-import/proofpoint-tap/docker-compose.yml +++ b/external-import/proofpoint-tap/docker-compose.yml @@ -3,21 +3,21 @@ services: connector-proofpoint-tap: image: opencti/connector-proofpoint-tap:latest environment: - - OPENCTI_URL=http://localhost + - OPENCTI_URL=http://opencti:8080 - OPENCTI_TOKEN=ChangeMe - - CONNECTOR_ID=ChangeMe - - CONNECTOR_NAME=Proofpoint TAP - - CONNECTOR_SCOPE=proofpoint-tap + - CONNECTOR_ID=c2635ebc-67f7-43a4-9caa-0d10cdc95b85 + - "CONNECTOR_NAME=Proofpoint TAP" + - CONNECTOR_SCOPE=report - CONNECTOR_LOG_LEVEL=error - CONNECTOR_DURATION_PERIOD=PT1H - - TAP_API_BASE_URL=https://tap-api-v2.proofpoint.com/ - - TAP_API_PRINCIPAL=ChangeMe - - TAP_API_SECRET=ChangeMe -# - TAP_API_TIMEOUT=PT30S -# - TAP_API_RETRIES=3 -# - TAP_API_BACKOFF=PT5S - - TAP_MARKING_DEFINITION=white - - TAP_EXPORT_CAMPAIGNS=True - - TAP_EXPORT_EVENTS=True - - TAP_EVENTS_TYPE=issues + - PROOFPOINT_TAP_API_BASE_URL=https://tap-api-v2.proofpoint.com/ + - PROOFPOINT_TAP_API_PRINCIPAL=ChangeMe + - PROOFPOINT_TAP_API_SECRET=ChangeMe + - PROOFPOINT_TAP_API_TIMEOUT=PT30S + - PROOFPOINT_TAP_API_RETRIES=3 + - PROOFPOINT_TAP_API_BACKOFF=PT5S + - PROOFPOINT_TAP_MARKING_DEFINITION=white + - PROOFPOINT_TAP_EXPORT_CAMPAIGNS=true + - PROOFPOINT_TAP_EXPORT_EVENTS=false + - PROOFPOINT_TAP_EVENTS_TYPE=issues restart: always diff --git a/external-import/proofpoint-tap/proofpoint_tap/__init__.py b/external-import/proofpoint-tap/proofpoint_tap/__init__.py deleted file mode 100644 index 3dc1f76bc69..00000000000 --- a/external-import/proofpoint-tap/proofpoint_tap/__init__.py +++ /dev/null @@ -1 +0,0 @@ -__version__ = "0.1.0" diff --git a/external-import/proofpoint-tap/proofpoint_tap/adapters/config.py b/external-import/proofpoint-tap/proofpoint_tap/adapters/config.py deleted file mode 100644 index f198b8ca5f6..00000000000 --- a/external-import/proofpoint-tap/proofpoint_tap/adapters/config.py +++ /dev/null @@ -1,570 +0,0 @@ -# isort: skip_file -# isort is removing the type ignore untyped import comment conflicting with mypy -"""Implement configuration loaders. - -Classes: - ConfigLoaderEnv: Aggregates all component-specific loaders into a single configuration loader for environment variables. - -""" - -import datetime -import pathlib -from typing import Any, Literal, Optional - -from pycti import ( # type: ignore[import-untyped] - get_config_variable, # pycti does not provide stubs -) -from pydantic import TypeAdapter -import yaml - -from dotenv import load_dotenv - -from proofpoint_tap.ports.config import ( - ConfigBaseLoader, - ConfigLoaderConnectorPort, - ConfigLoaderOCTIPort, - ConfigLoaderPort, - ConfigLoaderTAPPort, -) - - -def _get_config_variable_env(env_var: str, required: bool = False) -> Any: - value = get_config_variable(env_var=env_var, yaml_path=["", ""]) - if value is None and required: - raise ValueError(f"Environment variable {env_var} is required but not set.") - # see https://github.com/OpenCTI-Platform/client-python/issues/817 - return value - - -def _int_none(value: Any) -> Optional[int]: - return int(value) if value is not None else None - - -def _bool_none(value: Any) -> Optional[bool]: - return bool(value) if value is not None else None - - -### ENV ### - - -class _BaseLoaderEnv(ConfigBaseLoader): # pylint: disable=too-few-public-methods - """Base class for configuration loaders using environment variables.""" - - -class _ConfigLoaderOCTIEnv(ConfigLoaderOCTIPort, _BaseLoaderEnv): - """Implementation of the ConfigLoaderOCTIPort interface using environment variables.""" - - def __init__(self) -> None: - _BaseLoaderEnv.__init__(self) - - @property - def _url(self) -> str: - return _get_config_variable_env(env_var="OPENCTI_URL", required=True) # type: ignore[no-any-return] - # required=True will raise ValueError exception, we won't return None. - - @property - def _token(self) -> str: - return _get_config_variable_env(env_var="OPENCTI_TOKEN", required=True) # type: ignore[no-any-return] - - -class _ConfigLoaderConnectorEnv(ConfigLoaderConnectorPort, _BaseLoaderEnv): - """Implementation of the ConfigLoaderConnectorPort interface using environment variables.""" - - def __init__(self) -> None: - _BaseLoaderEnv.__init__(self) - - @property - def _id(self) -> str: - return _get_config_variable_env( # type: ignore[no-any-return] - env_var="CONNECTOR_ID", - required=True, - ) - - @property - def _name(self) -> str: - return _get_config_variable_env( # type: ignore[no-any-return] - env_var="CONNECTOR_NAME", - required=True, - ) - - @property - def _scope(self) -> str: - return _get_config_variable_env( # type: ignore[no-any-return] - env_var="CONNECTOR_SCOPE", - required=True, - ) - - @property - def _log_level(self) -> Literal["debug", "info", "warn", "error"]: - return _get_config_variable_env( # type: ignore[no-any-return] - env_var="CONNECTOR_LOG_LEVEL", required=True - ) - - @property - def _duration_period(self) -> datetime.timedelta: - duration_period_str: str = _get_config_variable_env( - env_var="CONNECTOR_DURATION_PERIOD", - required=True, - ) - return TypeAdapter(datetime.timedelta).validate_strings(duration_period_str) - - @property - def _queue_threshold(self) -> Optional[int]: - return _int_none( - _get_config_variable_env( - env_var="CONNECTOR_QUEUE_THRESHOLD", required=False - ) - ) # isNumber option might return float - - @property - def _run_and_terminate(self) -> Optional[bool]: - return _bool_none( - _get_config_variable_env( - env_var="CONNECTOR_RUN_AND_TERMINATE", required=False - ) - ) - - @property - def _send_to_queue(self) -> Optional[bool]: - return _bool_none( - _get_config_variable_env(env_var="CONNECTOR_SEND_TO_QUEUE", required=False) - ) - - @property - def _send_to_directory(self) -> Optional[bool]: - return _bool_none( - _get_config_variable_env( - env_var="CONNECTOR_SEND_TO_DIRECTORY", required=False - ) - ) - - @property - def _send_to_directory_path(self) -> Optional[str]: - return _get_config_variable_env( # type: ignore[no-any-return] - env_var="CONNECTOR_SEND_TO_DIRECTORY_PATH", required=False - ) - - @property - def _send_to_directory_retention(self) -> Optional[int]: - return _int_none( - _get_config_variable_env( - env_var="CONNECTOR_SEND_TO_DIRECTORY_RETENTION", required=False - ) - ) - - -class _ConfigLoaderTAPEnv(ConfigLoaderTAPPort, _BaseLoaderEnv): - """Implementation of the ConfigLoaderTAPPort interface using environment variables.""" - - def __init__(self) -> None: - _BaseLoaderEnv.__init__(self) - ConfigLoaderTAPPort.__init__(self) - - @property - def _api_base_url(self) -> str: - return _get_config_variable_env( # type: ignore[no-any-return] - env_var="TAP_API_BASE_URL", required=True - ) - - @property - def _api_principal_key(self) -> str: - return _get_config_variable_env( # type: ignore[no-any-return] - env_var="TAP_API_PRINCIPAL", required=True - ) - - @property - def _api_secret_key(self) -> str: - return _get_config_variable_env( # type: ignore[no-any-return] - env_var="TAP_API_SECRET", required=True - ) - - @property - def _api_timeout(self) -> Optional[datetime.timedelta]: - timeout_str: str | None = _get_config_variable_env( - env_var="TAP_API_TIMEOUT", - required=False, - ) - if timeout_str is not None: - return TypeAdapter(datetime.timedelta).validate_strings(timeout_str) - return None - - @property - def _api_backoff(self) -> Optional[datetime.timedelta]: - backoff_str: str | None = _get_config_variable_env( - env_var="TAP_API_BACKOFF", - required=False, - ) - if backoff_str is not None: - return TypeAdapter(datetime.timedelta).validate_strings(backoff_str) - return None - - @property - def _api_retries(self) -> Optional[int]: - retries_str: str | None = _get_config_variable_env( - env_var="TAP_API_RETRIES", - required=False, - ) - if retries_str is not None: - return int(retries_str) - return None - - @property - def _marking_definition(self) -> str: - return str( - _get_config_variable_env( - env_var="TAP_MARKING_DEFINITION", - required=True, - ) - ) - - # Commented until the product team confirms if it's needed - # @property - # def _export_campaign_since(self) -> datetime.datetime: - # export_since_str = str( - # _get_config_variable_env( - # env_var="TAP_EXPORT_SINCE", - # required=True, - # ) - # ) - # return TypeAdapter(datetime.datetime).validate_strings(export_since_str) - - @property - def _export_campaigns(self) -> bool: - flag = _bool_none( - _get_config_variable_env( - env_var="TAP_EXPORT_CAMPAIGNS", - ) - ) - if not flag: - return False - return flag - - @property - def _export_events(self) -> bool: - flag = _bool_none( - _get_config_variable_env( - env_var="TAP_EXPORT_EVENTS", - ) - ) - if not flag: - return False - return flag - - @property - def _events_type(self) -> Optional[ - Literal[ - "all", - "issues", - "messages_blocked", - "messages_delivered", - "clicks_blocked", - "clicks_permitted", - ] - ]: - return _get_config_variable_env( # type: ignore[no-any-return] - env_var="TAP_EVENTS_TYPE", - ) - - -class ConfigLoaderEnv( - ConfigLoaderPort, _BaseLoaderEnv -): # pylint: disable=too-few-public-methods - """Implementation of the ConfigLoaderPort interface using environment variables.""" - - def __init__(self) -> None: - """Initialize the configuration loader.""" - _ = load_dotenv() - _BaseLoaderEnv.__init__(self) - ConfigLoaderPort.__init__( - self, - config_loader_opencti=_ConfigLoaderOCTIEnv(), - config_loader_connector=_ConfigLoaderConnectorEnv(), - config_loader_tap=_ConfigLoaderTAPEnv(), - ) - - -### CONFIG YAML FOR DEV PURPOSE ### - - -def _get_yaml_value( - yaml_file: pathlib.Path, yaml_path: list[str], required: bool -) -> Any: - # see https://github.com/OpenCTI-Platform/client-python/issues/817 - with open(yaml_file, "r") as file: - yaml_data = yaml.safe_load(file) - try: - return yaml_data[yaml_path[0]][yaml_path[1]] - except KeyError as e: - if required is False: - return None - else: - raise ValueError from e - - -class _BaseLoaderConfigYaml(ConfigBaseLoader): # pylint: disable=too-few-public-methods - """Base class for configuration loaders using config.yaml file.""" - - -class _ConfigLoaderOCTIConfigYaml(ConfigLoaderOCTIPort, _BaseLoaderConfigYaml): - """Implementation of the ConfigLoaderOCTIPort interface config.yaml file.""" - - def __init__(self, filepath: pathlib.Path) -> None: - _BaseLoaderConfigYaml.__init__(self) - self.filepath = filepath - - @property - def _url(self) -> str: - return _get_yaml_value( # type: ignore[no-any-return] # None will raise exception - yaml_path=["opencti", "url"], yaml_file=self.filepath, required=True - ) - - @property - def _token(self) -> str: - return _get_yaml_value( # type: ignore[no-any-return] # None will raise exception - yaml_path=["opencti", "token"], yaml_file=self.filepath, required=True - ) - - -class _ConfigLoaderConnectorConfigYaml( - ConfigLoaderConnectorPort, _BaseLoaderConfigYaml -): - """Implementation of the ConfigLoaderConnectorPort interface config.yaml file.""" - - def __init__(self, filepath: pathlib.Path) -> None: - _BaseLoaderConfigYaml.__init__(self) - self.filepath = filepath - - @property - def _id(self) -> str: - return _get_yaml_value( # type: ignore[no-any-return] # None will raise exception - yaml_path=["connector", "id"], yaml_file=self.filepath, required=True - ) - - @property - def _name(self) -> str: - return _get_yaml_value( # type: ignore[no-any-return] # None will raise exception - yaml_path=["connector", "name"], yaml_file=self.filepath, required=True - ) - - @property - def _scope(self) -> str: - return _get_yaml_value( # type: ignore[no-any-return] # None will raise exception - yaml_path=["connector", "scope"], yaml_file=self.filepath, required=True - ) - - @property - def _log_level(self) -> Literal["debug", "info", "warn", "error"]: - return _get_yaml_value( # type: ignore[no-any-return] # None will raise exception - yaml_path=["connector", "log_level"], yaml_file=self.filepath, required=True - ) - - @property - def _duration_period(self) -> datetime.timedelta: - duration_period_str: str = str( - _get_yaml_value( - yaml_path=["connector", "duration_period"], - yaml_file=self.filepath, - required=True, - ) - ) - return TypeAdapter(datetime.timedelta).validate_strings(duration_period_str) - - @property - def _queue_threshold(self) -> Optional[int]: - return _int_none( - _get_yaml_value( - yaml_path=["connector", "queue_threshold"], - yaml_file=self.filepath, - required=False, - ) - ) # isNumber option might return float - - @property - def _run_and_terminate(self) -> Optional[bool]: - return _bool_none( - _get_yaml_value( - yaml_path=["connector", "run_and_terminate"], - yaml_file=self.filepath, - required=False, - ) - ) - - @property - def _send_to_queue(self) -> Optional[bool]: - return _bool_none( - _get_yaml_value( - yaml_path=["connector", "send_to_queue"], - yaml_file=self.filepath, - required=False, - ) - ) - - @property - def _send_to_directory(self) -> Optional[bool]: - return _bool_none( - _get_yaml_value( - yaml_path=["connector", "send_to_directory"], - yaml_file=self.filepath, - required=False, - ) - ) - - @property - def _send_to_directory_path(self) -> Optional[str]: - return _get_yaml_value( # type: ignore[no-any-return] - yaml_path=["connector", "send_to_directory_path"], - yaml_file=self.filepath, - required=False, - ) - - @property - def _send_to_directory_retention(self) -> Optional[int]: - return _int_none( - _get_yaml_value( - yaml_path=["connector", "send_to_directory_retention"], - yaml_file=self.filepath, - required=False, - ) - ) - - -class _ConfigLoaderTAPConfigYaml(ConfigLoaderTAPPort, _BaseLoaderConfigYaml): - """Implementation of the ConfigLoaderTAPPort interface config.yaml file.""" - - def __init__(self, filepath: pathlib.Path) -> None: - _BaseLoaderConfigYaml.__init__(self) - self.filepath = filepath - - @property - def _api_base_url(self) -> str: - return _get_yaml_value( # type: ignore[no-any-return] # None will raise exception - yaml_path=["tap", "api_base_url"], yaml_file=self.filepath, required=True - ) - - @property - def _api_principal_key(self) -> str: - return _get_yaml_value( # type: ignore[no-any-return] # None will raise exception - yaml_path=["tap", "api_principal_key"], - yaml_file=self.filepath, - required=True, - ) - - @property - def _api_secret_key(self) -> str: - return _get_yaml_value( # type: ignore[no-any-return] # None will raise exception - yaml_path=["tap", "api_secret_key"], yaml_file=self.filepath, required=True - ) - - @property - def _api_timeout(self) -> Optional[datetime.timedelta]: - timeout_str: str | None = _get_yaml_value( - yaml_path=["tap", "api_timeout"], - yaml_file=self.filepath, - required=False, - ) - if timeout_str is not None: - return TypeAdapter(datetime.timedelta).validate_strings(timeout_str) - return None - - @property - def _api_backoff(self) -> Optional[datetime.timedelta]: - backoff_str: str | None = _get_yaml_value( - yaml_path=["tap", "api_backoff"], - yaml_file=self.filepath, - required=False, - ) - if backoff_str is not None: - return TypeAdapter(datetime.timedelta).validate_strings(backoff_str) - return None - - @property - def _api_retries(self) -> Optional[int]: - retries_str: str | None = _get_yaml_value( - yaml_path=["tap", "api_retries"], - yaml_file=self.filepath, - required=False, - ) - if retries_str is not None: - return int(retries_str) - return None - - @property - def _marking_definition(self) -> str: - return str( - _get_yaml_value( - yaml_path=["tap", "marking_definition"], - yaml_file=self.filepath, - required=True, - ) - ) - - # Commented until the product team confirms if it's needed - # @property - # def _export_campaign_since(self) -> datetime.datetime: - # export_since_str = str( - # _get_yaml_value( - # yaml_path=["tap", "export_campaign_since"], - # yaml_file=self.filepath, - # required=True, - # ) - # ) - # return TypeAdapter(datetime.datetime).validate_strings(export_since_str) - - @property - def _export_campaigns(self) -> bool: - flag = _bool_none( - _get_yaml_value( - yaml_path=["tap", "export_campaigns"], - yaml_file=self.filepath, - required=False, - ) - ) - if not flag: - return False - return flag - - @property - def _export_events(self) -> bool: - flag = _bool_none( - _get_yaml_value( - yaml_path=["tap", "export_events"], - yaml_file=self.filepath, - required=False, - ) - ) - if not flag: - return False - return flag - - @property - def _events_type(self) -> Optional[ - Literal[ - "all", - "issues", - "messages_blocked", - "messages_delivered", - "clicks_blocked", - "clicks_permitted", - ] - ]: - return _get_yaml_value( # type: ignore[no-any-return] - yaml_path=["tap", "events_type"], - yaml_file=self.filepath, - required=False, - ) - - -class ConfigLoaderConfigYaml( - ConfigLoaderPort, _BaseLoaderConfigYaml -): # pylint: disable=too-few-public-methods - """Implementation of the ConfigLoaderPort interface using config.yaml file.""" - - def __init__(self, filepath: pathlib.Path) -> None: - """Initialize the configuration loader.""" - _BaseLoaderConfigYaml.__init__(self) - ConfigLoaderPort.__init__( - self, - config_loader_opencti=_ConfigLoaderOCTIConfigYaml(filepath), - config_loader_connector=_ConfigLoaderConnectorConfigYaml(filepath), - config_loader_tap=_ConfigLoaderTAPConfigYaml(filepath), - ) diff --git a/external-import/proofpoint-tap/proofpoint_tap/ports/config.py b/external-import/proofpoint-tap/proofpoint_tap/ports/config.py deleted file mode 100644 index 041b7e28409..00000000000 --- a/external-import/proofpoint-tap/proofpoint_tap/ports/config.py +++ /dev/null @@ -1,456 +0,0 @@ -# isort: skip_file # Skipping this file to prevent isort from removing type ignore comments for untyped imports -"""Provide interfaces for loading configuration settings.""" - -import datetime -from abc import ABC, abstractmethod -from functools import wraps -from logging import getLogger -from typing import Any, Callable, Literal, Optional - -from pydantic import SecretStr, ValidationError -from yarl import URL - -from proofpoint_tap.errors import ConfigLoaderError - -# we do not have access to OpenCTI Connector logger as it needs a config to be initialized -_logger = getLogger(__name__) - - -class ConfigBaseLoader(ABC): # noqa: B024 - """Base class for configuration loaders.""" - - -def _make_error_handler(message: str, required: bool = True) -> Callable[..., Any]: - """Make (factory) a decorator to handle validators ValidationError, TypeError and ValueError - with a custom message. - - Args: - message(str): Custom message to send to logger when the exception occurs. - required(bool): If the field is required or not. - - Returns: - A decorator that wraps a function in a try-except block and raise ConfigLoaderError. - - """ - - def _decorator(func: Callable[..., Any]) -> Callable[..., Any]: - @wraps(func) - def _wrapper(*args: tuple[Any], **kwargs: dict[str, Any]) -> Any: - try: - result = func(*args, **kwargs) - if required and result is None: - raise ValueError(f"Field {func.__name__} is required") - return result - except (ValidationError, TypeError, ValueError) as exc: - _logger.error(message) - raise ConfigLoaderError(message) from exc - - return _wrapper - - return _decorator - - -class ConfigLoaderOCTIPort(ConfigBaseLoader): - """Interface for loading OpenCTI dedicated configuration.""" - - @property - @abstractmethod - def _url(self) -> str: ... - - @property - @_make_error_handler("Unable to retrieve OpenCTI URL in config") - def url(self) -> str: - """URL for OpenCTI API.""" - return self._url - - @property - @abstractmethod - def _token(self) -> str: ... - - @property - @_make_error_handler("Unable to retrieve OpenCTI Token in config") - def token(self) -> SecretStr: - """Token for OpenCTI API.""" - return SecretStr(self._token) - - -class ConfigLoaderConnectorPort(ABC): - """Abstract base class for loading connector dedicated configuration.""" - - @property - @abstractmethod - def _id(self) -> str: ... - - @property - @_make_error_handler("Unable to retrieve connector ID in config") - def id(self) -> str: - """Connector ID.""" - return self._id - - @property - @_make_error_handler("Unable to retrieve connector type in config") - def type(self) -> Literal[ - "EXTERNAL_IMPORT", - "INTERNAL_ENRICHMENT", - "INTERNAL_EXPORT_FILE", - "INTERNAL_IMPORT_FILE", - "STREAM", - ]: - """Connector type.""" - return "EXTERNAL_IMPORT" - - @property - @abstractmethod - def _name(self) -> str: ... - - @property - @_make_error_handler("Unable to retrieve connector name in config") - def name(self) -> str: - """Connector name.""" - return self._name - - @property - @abstractmethod - def _scope(self) -> str: ... - - @property - @_make_error_handler("Unable to retrieve connector scope in config") - def scope(self) -> str: - """Connector scope.""" - return self._scope - - @property - @abstractmethod - def _log_level(self) -> Literal["debug", "info", "warn", "error"]: ... - - @property - @_make_error_handler("Unable to retrieve connector log level in config") - def log_level(self) -> Literal["debug", "info", "warn", "error"]: - """Connector log level.""" - if self._log_level not in ["debug", "info", "warn", "error"]: - raise ValueError( - f"Invalid log level: {self._log_level}. Must be one of 'debug', 'info', 'warn', 'error'" - ) - return self._log_level - - @property - @abstractmethod - def _duration_period(self) -> "datetime.timedelta": ... - - @property - @_make_error_handler("Unable to retrieve connector duration period in config") - def duration_period(self) -> "datetime.timedelta": - """Connector scheduler settings.""" - return self._duration_period - - @property - @abstractmethod - def _queue_threshold(self) -> Optional[int]: ... - - @property - @_make_error_handler("Unable to retrieve connector queue threshold in config") - def queue_threshold(self) -> int: - """Connector queue max size in Mbytes.""" - return self._queue_threshold if self._queue_threshold is not None else 500 - - @property - @abstractmethod - def _run_and_terminate(self) -> Optional[bool]: ... - - @property - @_make_error_handler( - "Unable to retrieve connector run-and-terminate flag in config" - ) - def run_and_terminate(self) -> bool: - """Connector run-and-terminate flag.""" - return self._run_and_terminate if self._run_and_terminate is not None else False - - @property - @abstractmethod - def _send_to_queue(self) -> Optional[bool]: ... - - @property - @_make_error_handler("Unable to retrieve connector send-to-queue flag in config") - def send_to_queue(self) -> bool: - """Connector send-to-queue flag.""" - return self._send_to_queue if self._send_to_queue is not None else True - - @property - @abstractmethod - def _send_to_directory(self) -> Optional[bool]: ... - - @property - @_make_error_handler( - "Unable to retrieve connector send-to-directory flag in config" - ) - def send_to_directory(self) -> bool: - """Connector send-to-directory flag.""" - return self._send_to_directory if self._send_to_directory is not None else False - - @property - @abstractmethod - def _send_to_directory_path(self) -> Optional[str]: ... - - @property - @_make_error_handler( - "Unable to retrieve connector send-to-directory path in config" - ) - def send_to_directory_path(self) -> str: - """Connector send-to-directory path.""" - return ( - self._send_to_directory_path - if self._send_to_directory_path is not None - else "" - ) - - @property - @abstractmethod - def _send_to_directory_retention(self) -> Optional[int]: ... - - @property - @_make_error_handler( - "Unable to retrieve connector send-to-directory retention in config" - ) - def send_to_directory_retention(self) -> int: - """Connector send-to-directory retention.""" - return ( - self._send_to_directory_retention - if self._send_to_directory_retention is not None - else 7 - ) - - -class ConfigLoaderTAPPort(ABC): - """Abstract base class for loading dedicated configuration.""" - - @property - @abstractmethod - def _api_base_url(self) -> str: ... - - @property - @_make_error_handler("Unable to retrieve API base URL in config") - def api_base_url(self) -> URL: - """Base URL for API.""" - return URL(self._api_base_url) - - @property - @abstractmethod - def _api_principal_key(self) -> str: ... - - @property - @_make_error_handler("Unable to retrieve API principal key in config") - def api_principal_key(self) -> SecretStr: - """Access key for API.""" - return SecretStr(self._api_principal_key) - - @property - @abstractmethod - def _api_secret_key(self) -> str: ... - - @property - @_make_error_handler("Unable to retrieve API secret key in config") - def api_secret_key(self) -> SecretStr: - """Secret key for API.""" - return SecretStr(self._api_secret_key) - - @property - @abstractmethod - def _api_timeout(self) -> Optional[datetime.timedelta]: ... - - @property - @_make_error_handler("Unable to retrieve API timeout in config") - def api_timeout(self) -> datetime.timedelta: - """Timeout duration, Default to 30 seconds.""" - return ( - self._api_timeout - if self._api_timeout is not None - else datetime.timedelta(seconds=30) - ) - - @property - @abstractmethod - def _api_backoff(self) -> Optional["datetime.timedelta"]: ... - - @property - @_make_error_handler("Unable to retrieve API backoff duration in config") - def api_backoff(self) -> "datetime.timedelta": - """Backoff duration, default to 5 seconds.""" - return ( - self._api_backoff - if self._api_backoff is not None - else datetime.timedelta(seconds=5) - ) - - @property - @abstractmethod - def _api_retries(self) -> Optional[int]: ... - - @property - @_make_error_handler("Unable to retrieve API retry count in config") - def api_retries(self) -> int: - """Number of retries, default to 3.""" - return self._api_retries if self._api_retries is not None else 3 - - @property - @abstractmethod - def _marking_definition( - self, - ) -> str: ... - - @property - @_make_error_handler("Unable to retrieve marking definition in config") - def marking_definition( - self, - ) -> Literal["white", "green", "amber", "amber+strict", "red"]: - """Marking definition to apply to exported data.""" - definition = self._marking_definition.lower() - if definition not in ["white", "green", "amber", "amber+strict", "red"]: - raise ValueError( - f"Invalid marking definition: {definition}. Must be one of 'white', 'green', 'amber', 'amber+strict', 'red'" - ) - return definition # type: ignore[return-value] # Literal is ensure with the if statement above - - # Commented until the product team confirms if it's needed - # @property - # @abstractmethod - # def _export_since(self) -> datetime.datetime: ... - - # @property - # @_make_error_handler("Unable to retrieve export since in config") - # def export_since(self) -> datetime.datetime: - # """Export since datetime.""" - # # add utc timezone if naive datetime - # dt = self._export_since - # if dt.tzinfo is None: - # dt = datetime.datetime( - # dt.year, dt.month, dt.day, tzinfo=datetime.timezone.utc - # ) - # # compare if datetime in the future - # if dt > datetime.datetime.now(datetime.timezone.utc): - # raise ValueError("Export since datetime cannot be in the future") - # return dt - - @property - @abstractmethod - def _export_campaigns(self) -> bool: ... - - @property - @_make_error_handler("Unable to retrieve export campaigns in config") - def export_campaigns(self) -> bool: - """Export campaigns flag.""" - # check one of the export flags is set to True - if not self._export_campaigns and not self._export_events: - raise ValueError("At least one of the export flags must be set to True") - - return self._export_campaigns - - @property - @abstractmethod - def _export_events(self) -> bool: ... - - @property - @_make_error_handler("Unable to retrieve export events in config") - def export_events(self) -> bool: - """Export events flag.""" - if not self._export_campaigns and not self._export_events: - raise ValueError("At least one of the export flags must be set to True") - return self._export_events - - @property - @abstractmethod - def _events_type(self) -> Optional[ - Literal[ - "all", - "issues", - "messages_blocked", - "messages_delivered", - "clicks_blocked", - "clicks_permitted", - ] - ]: ... - - @property - @_make_error_handler("Unable to retrieve events type in config") - def events_type(self) -> Optional[ - Literal[ - "all", - "issues", - "messages_blocked", - "messages_delivered", - "clicks_blocked", - "clicks_permitted", - ] - ]: - """Events type to export.""" - if self.export_events and not self._events_type: - raise ValueError("Events type must be set when exporting events") - if self._events_type not in [ - "all", - "issues", - "messages_blocked", - "messages_delivered", - "clicks_blocked", - "clicks_permitted", - ]: - raise ValueError( - f"Invalid events type: {self._events_type}. Must be one of 'all', 'issues', 'messages_blocked', 'messages_delivered', 'clicks_blocked', 'clicks_permitted'" - ) - return self._events_type - - -# we assume the abstract is already implemented to keep interface/port paradigm. -class ConfigLoaderPort(ABC): # noqa: B024 - """Interface for loading configuration settings.""" - - def __init__( - self, - config_loader_opencti: ConfigLoaderOCTIPort, - config_loader_connector: ConfigLoaderConnectorPort, - config_loader_tap: ConfigLoaderTAPPort, - ): - """Initialize the configuration loader.""" - self.opencti = config_loader_opencti - self.connector = config_loader_connector - self.tap = config_loader_tap - - # run to check mandatory vars are retrieved - _ = self.to_dict() - - def to_dict(self, token_as_plaintext: bool = False) -> dict[str, Any]: - """Gather configuration settings and return them as a dictionary.""" - return { - "opencti": { - "url": self.opencti.url, - "token": ( - self.opencti.token.get_secret_value() - if token_as_plaintext - else self.opencti.token - ), - }, - "connector": { - "id": self.connector.id, - "type": self.connector.type, - "name": self.connector.name, - "scope": self.connector.scope, - "log_level": self.connector.log_level, - "duration": self.connector.duration_period, - "queue_threshold": self.connector.queue_threshold, - "run_and_terminate": self.connector.run_and_terminate, - "send_to_queue": self.connector.send_to_queue, - "send_to_directory": self.connector.send_to_directory, - "send_to_directory_path": self.connector.send_to_directory_path, - "send_to_directory_retention": self.connector.send_to_directory_retention, - }, - "tap": { - "api_base_url": self.tap.api_base_url, - "api_principal_key": self.tap.api_principal_key, - "api_secret_key": self.tap.api_secret_key, - "api_timeout": self.tap.api_timeout, - "api_backoff": self.tap.api_backoff, - "api_retries": self.tap.api_retries, - "marking_definition": self.tap.marking_definition, - "export_campaigns": self.tap.export_campaigns, - "export_events": self.tap.export_events, - "events_type": self.tap.events_type, - }, - } diff --git a/external-import/proofpoint-tap/pyproject.toml b/external-import/proofpoint-tap/pyproject.toml index 30582c42cf1..5e5310b85b1 100644 --- a/external-import/proofpoint-tap/pyproject.toml +++ b/external-import/proofpoint-tap/pyproject.toml @@ -19,7 +19,7 @@ classifiers = [ requires-python = ">=3.11, <3.13" dependencies = [ - "pycti==7.260309.0", + "pycti==7.260515.0", "aiohttp>=3.7.4,<4", "aiohttp-retry>=2.8.1,<3", "pydantic[email]>=2.8,<3", @@ -28,12 +28,13 @@ dependencies = [ "python-dotenv>=1.0.1,<2", "PyYAML>=6.0.2,<7", "pytablewriter>=1.2,<2", + "connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk", ] [project.optional-dependencies] test= [ - "pytest >=8.1.1, <9", + "pytest >=9.0.3, <10", "pytest-asyncio >=1.2, <2", ] dev = [ @@ -49,7 +50,7 @@ all = [ ] [tool.setuptools.packages.find] -where = ["."] +where = ["src"] [tool.setuptools.dynamic] version = {attr = "proofpoint_tap.__version__"} diff --git a/external-import/proofpoint-tap/proofpoint_tap/client_api/README.md b/external-import/proofpoint-tap/src/client_api/README.md similarity index 74% rename from external-import/proofpoint-tap/proofpoint_tap/client_api/README.md rename to external-import/proofpoint-tap/src/client_api/README.md index 49589808a8f..1011c0ef981 100644 --- a/external-import/proofpoint-tap/proofpoint_tap/client_api/README.md +++ b/external-import/proofpoint-tap/src/client_api/README.md @@ -17,7 +17,7 @@ https://help.proofpoint.com/Threat_Insight_Dashboard/API_Documentation [consulte ### Clients -Each API endpoint is represented by a class in the `proofpoint_tap.client_api.v2` module. Each class has methods that correspond to the HTTP methods that are supported by the endpoint. For example, the `Campaigns` endpoint has a `fetch_campaigns` method that corresponds to the `GET /v2/campaigns/ids` endpoint. +Each API endpoint is represented by a class in the `client_api.v2` module. Each class has methods that correspond to the HTTP methods that are supported by the endpoint. For example, the `Campaigns` endpoint has a `fetch_campaigns` method that corresponds to the `GET /v2/campaigns/ids` endpoint. ### Response Models @@ -33,7 +33,7 @@ from datetime import datetime, timedelta, timezone from yarl import URL -from proofpoint_tap.client_api.v2 import CampaignClient +from client_api.v2 import CampaignClient client = CampaignClient( base_url=URL("https://tap-api-v2.proofpoint.com"), @@ -56,7 +56,7 @@ ids_response = asyncio.run( ## Available Public Classes -From the `proofpoint_tap.client_api.v2` module: +From the `client_api.v2` module: - `CampaignClient` - `ForensicsClient` @@ -66,12 +66,12 @@ From the `proofpoint_tap.client_api.v2` module: ## Exceptions -The `proofpoint_tap.client_api` items use the `proofpoint_tap.errors` module to define exceptions that are raised when an error occurs. The exceptions are: +The `client_api` items use the `proofpoint_tap.errors` module to define exceptions that are raised when an error occurs. The exceptions are: - `ProofpointAPIError`: Base class for all exceptions. - `ProofPointAPIRequestParamsError`: Raised when the request parameters are invalid before trying to request the API. - `ProofpointAPI404Error`: Raised when the API returns a 404 status code. -- `ProofpointAPI404NoReasonError`: Raised when the API returns a 404 status code without a reason. (see `proofpoint_tap.client_api.v2.CampaignClient.fetch_campaign_ids` method docstring for more information) +- `ProofpointAPI404NoReasonError`: Raised when the API returns a 404 status code without a reason. (see `client_api.v2.CampaignClient.fetch_campaign_ids` method docstring for more information) - `ProofpointAPI429Error`: Raised when the API returns a 429 status code. - `ProofpointAPIInvalidResponseError`: Raised when the API returns an invalid response. @@ -79,4 +79,4 @@ The `proofpoint_tap.client_api` items use the `proofpoint_tap.errors` module to The API is rate-limited. Be careful with the number of requests you make. -Due to quota limitation, a decorator to use a local cache using pickle files has been implemented to store the responses of the API. This cache is for development purpose only. See the `proofpoint_tap.client_api.tools.cache_get_response_decorator` mehod docstring for more information. +Due to quota limitation, a decorator to use a local cache using pickle files has been implemented to store the responses of the API. This cache is for development purpose only. See the `client_api.tools.cache_get_response_decorator` mehod docstring for more information. diff --git a/external-import/proofpoint-tap/proofpoint_tap/ports/__init__.py b/external-import/proofpoint-tap/src/client_api/__init__.py similarity index 100% rename from external-import/proofpoint-tap/proofpoint_tap/ports/__init__.py rename to external-import/proofpoint-tap/src/client_api/__init__.py diff --git a/external-import/proofpoint-tap/proofpoint_tap/client_api/common.py b/external-import/proofpoint-tap/src/client_api/common.py similarity index 99% rename from external-import/proofpoint-tap/proofpoint_tap/client_api/common.py rename to external-import/proofpoint-tap/src/client_api/common.py index 3878d09a8c0..ae60a779f89 100644 --- a/external-import/proofpoint-tap/proofpoint_tap/client_api/common.py +++ b/external-import/proofpoint-tap/src/client_api/common.py @@ -15,7 +15,7 @@ TraceConfig, ) from aiohttp_retry import ListRetry, RetryClient -from proofpoint_tap.client_api.tools import cache_get_response_decorator +from client_api.tools import cache_get_response_decorator from proofpoint_tap.errors import ( ProofpointAPI404Error, ProofpointAPI404NoReasonError, diff --git a/external-import/proofpoint-tap/proofpoint_tap/client_api/tools.py b/external-import/proofpoint-tap/src/client_api/tools.py similarity index 99% rename from external-import/proofpoint-tap/proofpoint_tap/client_api/tools.py rename to external-import/proofpoint-tap/src/client_api/tools.py index 7375556b933..66dd4f02a77 100644 --- a/external-import/proofpoint-tap/proofpoint_tap/client_api/tools.py +++ b/external-import/proofpoint-tap/src/client_api/tools.py @@ -13,7 +13,7 @@ if TYPE_CHECKING: from aiohttp.tracing import Trace - from proofpoint_tap.client_api.common import BaseClient + from client_api.common import BaseClient logger = getLogger(__name__) diff --git a/external-import/proofpoint-tap/proofpoint_tap/client_api/v2/__init__.py b/external-import/proofpoint-tap/src/client_api/v2/__init__.py similarity index 100% rename from external-import/proofpoint-tap/proofpoint_tap/client_api/v2/__init__.py rename to external-import/proofpoint-tap/src/client_api/v2/__init__.py diff --git a/external-import/proofpoint-tap/proofpoint_tap/client_api/v2/campaign.py b/external-import/proofpoint-tap/src/client_api/v2/campaign.py similarity index 99% rename from external-import/proofpoint-tap/proofpoint_tap/client_api/v2/campaign.py rename to external-import/proofpoint-tap/src/client_api/v2/campaign.py index 6424b489a45..06b0ac6f37e 100644 --- a/external-import/proofpoint-tap/proofpoint_tap/client_api/v2/campaign.py +++ b/external-import/proofpoint-tap/src/client_api/v2/campaign.py @@ -5,7 +5,7 @@ from typing import TYPE_CHECKING, Literal, Optional, Sequence from urllib.parse import urljoin -from proofpoint_tap.client_api.common import BaseClient, ResponseModel +from client_api.common import BaseClient, ResponseModel from proofpoint_tap.errors import ( ProofpointAPI404NoReasonError, ProofPointAPIRequestParamsError, diff --git a/external-import/proofpoint-tap/proofpoint_tap/client_api/v2/compiled_campaign.py b/external-import/proofpoint-tap/src/client_api/v2/compiled_campaign.py similarity index 96% rename from external-import/proofpoint-tap/proofpoint_tap/client_api/v2/compiled_campaign.py rename to external-import/proofpoint-tap/src/client_api/v2/compiled_campaign.py index 80015fbd976..eebd1554a4f 100644 --- a/external-import/proofpoint-tap/proofpoint_tap/client_api/v2/compiled_campaign.py +++ b/external-import/proofpoint-tap/src/client_api/v2/compiled_campaign.py @@ -7,13 +7,13 @@ import asyncio from typing import TYPE_CHECKING, Sequence -from proofpoint_tap.client_api.v2.campaign import ( +from client_api.v2.campaign import ( CampaignClient, CampaignDetailsResponse, CampaignMember, ) -from proofpoint_tap.client_api.v2.forensics import Forensics, ForensicsClient -from proofpoint_tap.client_api.v2.threat import ThreatClient, ThreatSummary +from client_api.v2.forensics import Forensics, ForensicsClient +from client_api.v2.threat import ThreatClient, ThreatSummary from pydantic import Field if TYPE_CHECKING: diff --git a/external-import/proofpoint-tap/proofpoint_tap/client_api/v2/forensics.py b/external-import/proofpoint-tap/src/client_api/v2/forensics.py similarity index 99% rename from external-import/proofpoint-tap/proofpoint_tap/client_api/v2/forensics.py rename to external-import/proofpoint-tap/src/client_api/v2/forensics.py index 1ffec7b9062..277b3192658 100644 --- a/external-import/proofpoint-tap/proofpoint_tap/client_api/v2/forensics.py +++ b/external-import/proofpoint-tap/src/client_api/v2/forensics.py @@ -3,7 +3,7 @@ from logging import getLogger from typing import TYPE_CHECKING, Any, List, Literal, Optional, Union -from proofpoint_tap.client_api.common import BaseClient, ResponseModel +from client_api.common import BaseClient, ResponseModel from proofpoint_tap.errors import ProofPointAPIRequestParamsError from proofpoint_tap.warnings import PermissiveLiteral, Recommended from pydantic import AwareDatetime, Field, model_validator diff --git a/external-import/proofpoint-tap/proofpoint_tap/client_api/v2/siem.py b/external-import/proofpoint-tap/src/client_api/v2/siem.py similarity index 99% rename from external-import/proofpoint-tap/proofpoint_tap/client_api/v2/siem.py rename to external-import/proofpoint-tap/src/client_api/v2/siem.py index 9f449c7e6c5..f09cf4b5066 100644 --- a/external-import/proofpoint-tap/proofpoint_tap/client_api/v2/siem.py +++ b/external-import/proofpoint-tap/src/client_api/v2/siem.py @@ -4,7 +4,7 @@ from enum import Enum from typing import TYPE_CHECKING, Any, Literal, Optional -from proofpoint_tap.client_api.common import BaseClient, ResponseModel +from client_api.common import BaseClient, ResponseModel from proofpoint_tap.errors import ProofPointAPIRequestParamsError from proofpoint_tap.warnings import PermissiveLiteral, Recommended from pydantic import ( @@ -138,8 +138,8 @@ class MessageEvent(ResponseModel): description="Email address in the From header. Note: The documentation specifies a single email address but the API response is a list.", ) guid: str = Field(..., alias="GUID", description="Unique ID of the message in PPS.") - header_from: str = Field( - ..., alias="headerFrom", description="Full content of the From header." + header_from: Optional[str] = Field( + None, alias="headerFrom", description="Full content of the From header." ) header_reply_to: Optional[str] = Field( None, alias="headerReplyTo", description="Full content of the Reply-To header." diff --git a/external-import/proofpoint-tap/proofpoint_tap/client_api/v2/threat.py b/external-import/proofpoint-tap/src/client_api/v2/threat.py similarity index 98% rename from external-import/proofpoint-tap/proofpoint_tap/client_api/v2/threat.py rename to external-import/proofpoint-tap/src/client_api/v2/threat.py index 56c93dbeca3..f2de598ecdd 100644 --- a/external-import/proofpoint-tap/proofpoint_tap/client_api/v2/threat.py +++ b/external-import/proofpoint-tap/src/client_api/v2/threat.py @@ -3,7 +3,7 @@ from typing import TYPE_CHECKING, Literal, Optional from urllib.parse import urljoin -from proofpoint_tap.client_api.common import BaseClient, ResponseModel +from client_api.common import BaseClient, ResponseModel from proofpoint_tap.warnings import PermissiveLiteral, Recommended from pydantic import AwareDatetime, Field diff --git a/external-import/proofpoint-tap/src/main.py b/external-import/proofpoint-tap/src/main.py new file mode 100644 index 00000000000..a88b670b2d8 --- /dev/null +++ b/external-import/proofpoint-tap/src/main.py @@ -0,0 +1,43 @@ +import sys +import traceback + +from proofpoint_tap import Connector, ConnectorSettings +from proofpoint_tap.adapters.campaign import CampaignsAPIV2 +from proofpoint_tap.adapters.events import EventsAPIV2 +from pycti import ( # type: ignore[import-untyped] # pycti does not provide stubs + OpenCTIConnectorHelper, +) +from yarl import URL + +if __name__ == "__main__": + + try: + settings = ConnectorSettings() + helper = OpenCTIConnectorHelper(config=settings.to_helper_config()) + campaigns = CampaignsAPIV2( + base_url=URL(str(settings.proofpoint_tap.api_base_url)), + principal=settings.proofpoint_tap.api_principal_key, + secret=settings.proofpoint_tap.api_secret_key, + timeout=settings.proofpoint_tap.api_timeout, + retry=settings.proofpoint_tap.api_retries, + backoff=settings.proofpoint_tap.api_backoff, + ) + events = EventsAPIV2( + base_url=URL(str(settings.proofpoint_tap.api_base_url)), + principal=settings.proofpoint_tap.api_principal_key, + secret=settings.proofpoint_tap.api_secret_key, + timeout=settings.proofpoint_tap.api_timeout, + retry=settings.proofpoint_tap.api_retries, + backoff=settings.proofpoint_tap.api_backoff, + ) + + connector = Connector( + config=settings, + helper=helper, + campaigns=campaigns, + events=events, + ) + connector.start() + except Exception: + traceback.print_exc() + sys.exit(1) diff --git a/external-import/proofpoint-tap/src/proofpoint_tap/__init__.py b/external-import/proofpoint-tap/src/proofpoint_tap/__init__.py new file mode 100644 index 00000000000..cedb2e6dd9e --- /dev/null +++ b/external-import/proofpoint-tap/src/proofpoint_tap/__init__.py @@ -0,0 +1,6 @@ +__version__ = "0.1.0" + +from proofpoint_tap.connector import Connector +from proofpoint_tap.settings import ConnectorSettings + +__all__ = ["Connector", "ConnectorSettings"] diff --git a/external-import/proofpoint-tap/proofpoint_tap/py.typed b/external-import/proofpoint-tap/src/proofpoint_tap/adapters/__init__.py similarity index 100% rename from external-import/proofpoint-tap/proofpoint_tap/py.typed rename to external-import/proofpoint-tap/src/proofpoint_tap/adapters/__init__.py diff --git a/external-import/proofpoint-tap/proofpoint_tap/adapters/campaign.py b/external-import/proofpoint-tap/src/proofpoint_tap/adapters/campaign.py similarity index 99% rename from external-import/proofpoint-tap/proofpoint_tap/adapters/campaign.py rename to external-import/proofpoint-tap/src/proofpoint_tap/adapters/campaign.py index f65d2e0a536..f65462eaab2 100644 --- a/external-import/proofpoint-tap/proofpoint_tap/adapters/campaign.py +++ b/external-import/proofpoint-tap/src/proofpoint_tap/adapters/campaign.py @@ -5,7 +5,7 @@ from logging import getLogger from typing import TYPE_CHECKING, Any, Generator -from proofpoint_tap.client_api.v2.campaign import ( +from client_api.v2.campaign import ( CampaignClient, CampaignDetailsResponse, CampaignIdsResponse, diff --git a/external-import/proofpoint-tap/proofpoint_tap/adapters/events.py b/external-import/proofpoint-tap/src/proofpoint_tap/adapters/events.py similarity index 99% rename from external-import/proofpoint-tap/proofpoint_tap/adapters/events.py rename to external-import/proofpoint-tap/src/proofpoint_tap/adapters/events.py index 55e28cb4190..ce7804ccd13 100644 --- a/external-import/proofpoint-tap/proofpoint_tap/adapters/events.py +++ b/external-import/proofpoint-tap/src/proofpoint_tap/adapters/events.py @@ -5,7 +5,7 @@ from math import ceil from typing import TYPE_CHECKING, Any, Awaitable, Callable, Generator, Literal, Optional -from proofpoint_tap.client_api.v2.siem import ( +from client_api.v2.siem import ( ClickEvent, MessageEvent, SIEMClient, diff --git a/external-import/proofpoint-tap/app.py b/external-import/proofpoint-tap/src/proofpoint_tap/connector.py similarity index 87% rename from external-import/proofpoint-tap/app.py rename to external-import/proofpoint-tap/src/proofpoint_tap/connector.py index be8adf4899e..b36ed9537be 100644 --- a/external-import/proofpoint-tap/app.py +++ b/external-import/proofpoint-tap/src/proofpoint_tap/connector.py @@ -11,7 +11,6 @@ OpenCTIConnectorHelper, ) -from proofpoint_tap.adapters.events import EventsAPIV2 from proofpoint_tap.domain.use_cases.ingest_incident import IncidentProcessor from proofpoint_tap.domain.use_cases.ingest_report import ReportProcessor from proofpoint_tap.errors import DataRetrievalError @@ -19,8 +18,8 @@ if TYPE_CHECKING: from proofpoint_tap.ports.campaign import CampaignsPort - from proofpoint_tap.ports.config import ConfigLoaderPort from proofpoint_tap.ports.event import EventsPort + from proofpoint_tap.settings import ConnectorSettings CAMPAIGN_STATE_KEY = "last_campaign_datetime" EVENT_STATE_KEY = "last_event_datetime" @@ -38,10 +37,10 @@ class Connector: def __init__( self, - config: "ConfigLoaderPort", + config: "ConnectorSettings", + helper: OpenCTIConnectorHelper, campaigns: "CampaignsPort", events: "EventsPort", - helper: OpenCTIConnectorHelper, ): """Initialize the Connector with necessary configurations.""" # Load configuration file and connection helper @@ -51,10 +50,10 @@ def __init__( self._campaigns = campaigns self._events = events self._report_processor = ReportProcessor( - tlp_marking_name=self._config.tap.marking_definition, + tlp_marking_name=self._config.proofpoint_tap.marking_definition, ) self._incident_processor = IncidentProcessor( - tlp_marking_name=self._config.tap.marking_definition, + tlp_marking_name=self._config.proofpoint_tap.marking_definition, ) # To be intialized during work @@ -134,10 +133,10 @@ def _set_acquisition_date(state_key: str) -> datetime: ) return midnight - if config.tap.export_campaigns: + if self._config.proofpoint_tap.export_campaigns: self._campaign_since_datetime = _set_acquisition_date(CAMPAIGN_STATE_KEY) - if config.tap.export_events: + if self._config.proofpoint_tap.export_events: self._event_since_datetime = _set_acquisition_date(EVENT_STATE_KEY) # Initiate a new work @@ -162,12 +161,12 @@ def _finalize_work(self, error_flag: bool) -> None: """ # Update State - if config.tap.export_campaigns: + if self._config.proofpoint_tap.export_campaigns: self._force_update_state( key=CAMPAIGN_STATE_KEY, value=self._work_start_datetime, # type: ignore[arg-type] # should not be None ) - if config.tap.export_events: + if self._config.proofpoint_tap.export_events: self._force_update_state( key=EVENT_STATE_KEY, value=self._work_start_datetime, # type: ignore[arg-type] # should not be None @@ -264,7 +263,7 @@ def _process_events(self) -> bool: events: list[EventPort] = self._events.fetch( start_time=self._event_since_datetime, stop_time=datetime.now(timezone.utc), - select=self._config.tap.events_type, + select=self._config.proofpoint_tap.events_type, ) self._logger.info( "[CONNECTOR] Events fetched", @@ -307,11 +306,13 @@ def work(self) -> None: campaigns_error_flag = ( not self._process_campaigns() - if self._config.tap.export_campaigns + if self._config.proofpoint_tap.export_campaigns else False ) events_error_flag = ( - not self._process_events() if self._config.tap.export_events else False + not self._process_events() + if self._config.proofpoint_tap.export_events + else False ) error_flag = campaigns_error_flag or events_error_flag @@ -342,43 +343,5 @@ def start(self) -> None: """ self._helper.schedule_iso( message_callback=self.work, - duration_period=self._config.connector.duration_period, - ) - - -if __name__ == "__main__": - import traceback - - from proofpoint_tap.adapters.campaign import CampaignsAPIV2 - from proofpoint_tap.adapters.config import ConfigLoaderEnv - - # Configuration - try: - config = ConfigLoaderEnv() - helper = OpenCTIConnectorHelper(config=config.to_dict(token_as_plaintext=True)) - campaigns = CampaignsAPIV2( - base_url=config.tap.api_base_url, - principal=config.tap.api_principal_key, - secret=config.tap.api_secret_key, - timeout=config.tap.api_timeout, - retry=config.tap.api_retries, - backoff=config.tap.api_backoff, - ) - events = EventsAPIV2( - base_url=config.tap.api_base_url, - principal=config.tap.api_principal_key, - secret=config.tap.api_secret_key, - timeout=config.tap.api_timeout, - retry=config.tap.api_retries, - backoff=config.tap.api_backoff, + duration_period=self._config.connector.duration_period, # type: ignore[arg-type] ) - except ( - Exception - ): # Start up issue exception, Otherwise shoud be handle gracefully by the connector - traceback.print_exc() - sys.exit(1) - - # Run the connector - # Error will be handled in the connector - connector = Connector(config, campaigns, events, helper) - connector.start() diff --git a/external-import/proofpoint-tap/src/proofpoint_tap/domain/__init__.py b/external-import/proofpoint-tap/src/proofpoint_tap/domain/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/external-import/proofpoint-tap/src/proofpoint_tap/domain/models/__init__.py b/external-import/proofpoint-tap/src/proofpoint_tap/domain/models/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/external-import/proofpoint-tap/proofpoint_tap/domain/models/octi/__init__.py b/external-import/proofpoint-tap/src/proofpoint_tap/domain/models/octi/__init__.py similarity index 100% rename from external-import/proofpoint-tap/proofpoint_tap/domain/models/octi/__init__.py rename to external-import/proofpoint-tap/src/proofpoint_tap/domain/models/octi/__init__.py diff --git a/external-import/proofpoint-tap/proofpoint_tap/domain/models/octi/common.py b/external-import/proofpoint-tap/src/proofpoint_tap/domain/models/octi/common.py similarity index 100% rename from external-import/proofpoint-tap/proofpoint_tap/domain/models/octi/common.py rename to external-import/proofpoint-tap/src/proofpoint_tap/domain/models/octi/common.py diff --git a/external-import/proofpoint-tap/proofpoint_tap/domain/models/octi/domain.py b/external-import/proofpoint-tap/src/proofpoint_tap/domain/models/octi/domain.py similarity index 100% rename from external-import/proofpoint-tap/proofpoint_tap/domain/models/octi/domain.py rename to external-import/proofpoint-tap/src/proofpoint_tap/domain/models/octi/domain.py diff --git a/external-import/proofpoint-tap/proofpoint_tap/domain/models/octi/observables.py b/external-import/proofpoint-tap/src/proofpoint_tap/domain/models/octi/observables.py similarity index 100% rename from external-import/proofpoint-tap/proofpoint_tap/domain/models/octi/observables.py rename to external-import/proofpoint-tap/src/proofpoint_tap/domain/models/octi/observables.py diff --git a/external-import/proofpoint-tap/proofpoint_tap/domain/models/octi/relationships.py b/external-import/proofpoint-tap/src/proofpoint_tap/domain/models/octi/relationships.py similarity index 100% rename from external-import/proofpoint-tap/proofpoint_tap/domain/models/octi/relationships.py rename to external-import/proofpoint-tap/src/proofpoint_tap/domain/models/octi/relationships.py diff --git a/external-import/proofpoint-tap/src/proofpoint_tap/domain/use_cases/__init__.py b/external-import/proofpoint-tap/src/proofpoint_tap/domain/use_cases/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/external-import/proofpoint-tap/proofpoint_tap/domain/use_cases/common.py b/external-import/proofpoint-tap/src/proofpoint_tap/domain/use_cases/common.py similarity index 100% rename from external-import/proofpoint-tap/proofpoint_tap/domain/use_cases/common.py rename to external-import/proofpoint-tap/src/proofpoint_tap/domain/use_cases/common.py diff --git a/external-import/proofpoint-tap/proofpoint_tap/domain/use_cases/ingest_incident.py b/external-import/proofpoint-tap/src/proofpoint_tap/domain/use_cases/ingest_incident.py similarity index 100% rename from external-import/proofpoint-tap/proofpoint_tap/domain/use_cases/ingest_incident.py rename to external-import/proofpoint-tap/src/proofpoint_tap/domain/use_cases/ingest_incident.py diff --git a/external-import/proofpoint-tap/proofpoint_tap/domain/use_cases/ingest_report.py b/external-import/proofpoint-tap/src/proofpoint_tap/domain/use_cases/ingest_report.py similarity index 100% rename from external-import/proofpoint-tap/proofpoint_tap/domain/use_cases/ingest_report.py rename to external-import/proofpoint-tap/src/proofpoint_tap/domain/use_cases/ingest_report.py diff --git a/external-import/proofpoint-tap/proofpoint_tap/errors.py b/external-import/proofpoint-tap/src/proofpoint_tap/errors.py similarity index 100% rename from external-import/proofpoint-tap/proofpoint_tap/errors.py rename to external-import/proofpoint-tap/src/proofpoint_tap/errors.py diff --git a/external-import/proofpoint-tap/src/proofpoint_tap/ports/__init__.py b/external-import/proofpoint-tap/src/proofpoint_tap/ports/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/external-import/proofpoint-tap/proofpoint_tap/ports/campaign.py b/external-import/proofpoint-tap/src/proofpoint_tap/ports/campaign.py similarity index 100% rename from external-import/proofpoint-tap/proofpoint_tap/ports/campaign.py rename to external-import/proofpoint-tap/src/proofpoint_tap/ports/campaign.py diff --git a/external-import/proofpoint-tap/proofpoint_tap/ports/event.py b/external-import/proofpoint-tap/src/proofpoint_tap/ports/event.py similarity index 100% rename from external-import/proofpoint-tap/proofpoint_tap/ports/event.py rename to external-import/proofpoint-tap/src/proofpoint_tap/ports/event.py diff --git a/external-import/proofpoint-tap/src/proofpoint_tap/py.typed b/external-import/proofpoint-tap/src/proofpoint_tap/py.typed new file mode 100644 index 00000000000..e69de29bb2d diff --git a/external-import/proofpoint-tap/src/proofpoint_tap/settings.py b/external-import/proofpoint-tap/src/proofpoint_tap/settings.py new file mode 100644 index 00000000000..4855e1bf04e --- /dev/null +++ b/external-import/proofpoint-tap/src/proofpoint_tap/settings.py @@ -0,0 +1,136 @@ +from datetime import timedelta +from typing import Literal, Self + +from connectors_sdk import ( + BaseConfigModel, + BaseConnectorSettings, + BaseExternalImportConnectorConfig, + DeprecatedField, + ListFromString, +) +from pydantic import Field, HttpUrl, SecretStr, model_validator +from pydantic.json_schema import SkipJsonSchema + + +class ExternalImportConnectorConfig(BaseExternalImportConnectorConfig): + """ + Override the `BaseExternalImportConnectorConfig` to add parameters and/or defaults + to the configuration for connectors of type `EXTERNAL_IMPORT`. + """ + + id: str = Field( + description="A unique UUIDv4 identifier for this connector instance.", + default="c2635ebc-67f7-43a4-9caa-0d10cdc95b85", + min_length=1, + ) + name: str = Field( + description="The name of the connector.", + default="ProofPointTAP", + ) + scope: ListFromString = Field( + description="The type of data the connector is importing, i.e. the type of Stix Objects (for information only).", + default=["report"], + min_length=1, + ) + duration_period: timedelta = Field( + description="The period of time to await between two runs of the connector.", + default=timedelta(hours=12), + ) + + +class ProofpointTapConfig(BaseConfigModel): + """ + Define parameters and/or defaults for the configuration specific to the `ProofpointTapConnector`. + """ + + api_base_url: HttpUrl = Field( + description="Proofpoint API base URL.", + default=HttpUrl("https://tap-api-v2.proofpoint.com"), + ) + api_principal_key: SecretStr = Field( + description="Proofpoint API principal key for authentication." + ) + api_secret_key: SecretStr = Field( + description="Proofpoint API secret key for authentication." + ) + api_timeout: timedelta = Field( + description="Timeout duration for API requests.", + default=timedelta(seconds=30), + ) + api_backoff: timedelta = Field( + description="Backoff duration for API requests.", + default=timedelta(seconds=5), + ) + api_retries: int = Field( + description="Number of retries for API requests.", + default=3, + ) + marking_definition: Literal[ + "white", + "green", + "amber", + "amber+strict", + "red", + ] = Field( + description="Default TLP level of the imported entities.", + default="amber+strict", + ) + export_campaigns: bool = Field( + description="Whether to export Proofpoint campaigns and import them into OpenCTI.", + default=True, + ) + export_events: bool = Field( + description="Whether to export Proofpoint events and import them into OpenCTI.", + default=False, + ) + events_type: Literal[ + "all", + "issues", + "messages_blocked", + "messages_delivered", + "clicks_blocked", + "clicks_permitted", + ] = Field( + description="The type of events to export (`PROOFPOINT_TAP_EXPORT_EVENTS` must be enabled).", + default="issues", + ) + + # Handle deprecation of mispelled env vars + # These fields will are excluded from the connector's config JSON schema to reduce noise + api_principal: SkipJsonSchema[SecretStr] = DeprecatedField( + new_namespaced_var="api_principal_key", + removal_date="2026-08-27", + ) + api_secret: SkipJsonSchema[SecretStr] = DeprecatedField( + new_namespaced_var="api_secret_key", + removal_date="2026-08-27", + ) + + @model_validator(mode="after") + def _validate_export_flags(self) -> Self: + """Validate that at least one of the export flags is enabled.""" + if not self.export_campaigns and not self.export_events: + raise ValueError( + "At least one of `PROOFPOINT_TAP_EXPORT_CAMPAIGNS` or `PROOFPOINT_TAP_EXPORT_EVENTS` must be set to `True`" + ) + + return self + + +class ConnectorSettings(BaseConnectorSettings): + """ + Override `BaseConnectorSettings` to include `ExternalImportConnectorConfig` and `ProofpointTapConfig`. + """ + + connector: ExternalImportConnectorConfig = Field( + default_factory=ExternalImportConnectorConfig + ) + proofpoint_tap: ProofpointTapConfig = Field(default_factory=ProofpointTapConfig) + + # Handle deprecation of `tap` namespace in favor of `proofpoint_tap` in config.yml + # and `TAP_` prefix in favor of `PROOFPOINT_TAP_` prefix in environment variables. + # It maintains backward compatibility while migrating to the new namespace. + tap: ProofpointTapConfig = DeprecatedField( + new_namespace="proofpoint_tap", + removal_date="2026-08-27", + ) diff --git a/external-import/proofpoint-tap/proofpoint_tap/warnings.py b/external-import/proofpoint-tap/src/proofpoint_tap/warnings.py similarity index 100% rename from external-import/proofpoint-tap/proofpoint_tap/warnings.py rename to external-import/proofpoint-tap/src/proofpoint_tap/warnings.py diff --git a/external-import/proofpoint-tap/tests/test_main.py b/external-import/proofpoint-tap/tests/test_main.py new file mode 100644 index 00000000000..72bac26f7bc --- /dev/null +++ b/external-import/proofpoint-tap/tests/test_main.py @@ -0,0 +1,115 @@ +from typing import Any +from unittest.mock import MagicMock + +import pytest +from proofpoint_tap import Connector, ConnectorSettings +from pycti import OpenCTIConnectorHelper + + +@pytest.fixture +def mock_opencti_connector_helper(monkeypatch): + """Mock all heavy dependencies of OpenCTIConnectorHelper, typically API calls to OpenCTI.""" + + module_import_path = "pycti.connector.opencti_connector_helper" + monkeypatch.setattr(f"{module_import_path}.killProgramHook", MagicMock()) + monkeypatch.setattr(f"{module_import_path}.sched.scheduler", MagicMock()) + monkeypatch.setattr(f"{module_import_path}.ConnectorInfo", MagicMock()) + monkeypatch.setattr(f"{module_import_path}.OpenCTIApiClient", MagicMock()) + monkeypatch.setattr(f"{module_import_path}.OpenCTIConnector", MagicMock()) + monkeypatch.setattr(f"{module_import_path}.OpenCTIMetricHandler", MagicMock()) + monkeypatch.setattr(f"{module_import_path}.PingAlive", MagicMock()) + + +class StubConnectorSettings(ConnectorSettings): + """ + Subclass of `ConnectorSettings` (implementation of `BaseConnectorSettings`) for testing purpose. + It overrides `BaseConnectorSettings._load_config_dict` to return a fake but valid config dict. + """ + + @classmethod + def _load_config_dict(cls, _, handler) -> dict[str, Any]: + return handler( + { + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + "connector": { + "id": "connector-id", + "name": "Test Connector", + "scope": "test, connector", + "log_level": "error", + "duration_period": "PT5M", + }, + "proofpoint_tap": { + "api_base_url": "http://test.com", + "api_principal_key": "test-api-principal-key", + "api_secret_key": "test-api-secret-key", + "api_timeout": "PT30S", + "api_backoff": "PT5S", + "api_retries": 3, + "marking_definition": "white", + "export_campaigns": True, + "export_events": False, + "events_type": "all", + }, + } + ) + + +def test_connector_settings_is_instantiated(): + """ + Test that the implementation of `BaseConnectorSettings` (from `connectors-sdk`) can be instantiated successfully: + - the implemented class MUST have a method `to_helper_config` (inherited from `BaseConnectorSettings`) + - the method `to_helper_config` MUST return a dict (as in base class) + """ + settings = StubConnectorSettings() + + assert isinstance(settings, ConnectorSettings) + assert isinstance(settings.to_helper_config(), dict) + + +def test_opencti_connector_helper_is_instantiated(mock_opencti_connector_helper): + """ + Test that `OpenCTIConnectorHelper` (from `pycti`) can be instantiated successfully: + - the value of `settings.to_helper_config` MUST be the expected dict for `OpenCTIConnectorHelper` + - the helper MUST be able to get its instance's attributes from the config dict + + :param mock_opencti_connector_helper: `OpenCTIConnectorHelper` is mocked during this test to avoid any external calls to OpenCTI API + """ + settings = StubConnectorSettings() + helper = OpenCTIConnectorHelper(config=settings.to_helper_config()) + + assert helper.opencti_url == "http://localhost:8080/" + assert helper.opencti_token == "test-token" + assert helper.connect_id == "connector-id" + assert helper.connect_name == "Test Connector" + assert helper.connect_scope == "test,connector" + assert helper.log_level == "ERROR" + assert helper.connect_duration_period == "PT5M" + + +def test_connector_is_instantiated(mock_opencti_connector_helper): + """ + Test that the connector's main class can be instantiated successfully: + - the connector's main class MUST be able to access env/config vars through `self.config` + - the connector's main class MUST be able to access `pycti` API through `self.helper` + + :param mock_opencti_connector_helper: `OpenCTIConnectorHelper` is mocked during this test to avoid any external calls to OpenCTI API + """ + settings = StubConnectorSettings() + helper = OpenCTIConnectorHelper(config=settings.to_helper_config()) + mock_campaigns = MagicMock() + mock_events = MagicMock() + + connector = Connector( + config=settings, + helper=helper, + campaigns=mock_campaigns, + events=mock_events, + ) + + assert connector._config == settings + assert connector._helper == helper + assert connector._campaigns == mock_campaigns + assert connector._events == mock_events diff --git a/external-import/proofpoint-tap/tests/test_adapters/test_events.py b/external-import/proofpoint-tap/tests/tests_connector/test_adapters/test_events.py similarity index 98% rename from external-import/proofpoint-tap/tests/test_adapters/test_events.py rename to external-import/proofpoint-tap/tests/tests_connector/test_adapters/test_events.py index c32adb3559e..6796e124705 100644 --- a/external-import/proofpoint-tap/tests/test_adapters/test_events.py +++ b/external-import/proofpoint-tap/tests/tests_connector/test_adapters/test_events.py @@ -11,7 +11,7 @@ from yarl import URL from proofpoint_tap.adapters.events import EventsAPIV2 -from proofpoint_tap.client_api.v2.siem import SIEMClient +from client_api.v2.siem import SIEMClient def make_fake_get_client_response() -> ClientResponse: diff --git a/external-import/proofpoint-tap/tests/test_client_api/test_common.py b/external-import/proofpoint-tap/tests/tests_connector/test_client_api/test_common.py similarity index 98% rename from external-import/proofpoint-tap/tests/test_client_api/test_common.py rename to external-import/proofpoint-tap/tests/tests_connector/test_client_api/test_common.py index 3cb3582d92d..8569440c194 100644 --- a/external-import/proofpoint-tap/tests/test_client_api/test_common.py +++ b/external-import/proofpoint-tap/tests/tests_connector/test_client_api/test_common.py @@ -6,7 +6,7 @@ import pytest from aiohttp import ClientResponse, ClientResponseError, ContentTypeError -from proofpoint_tap.client_api.common import BaseClient, ResponseModel +from client_api.common import BaseClient, ResponseModel from proofpoint_tap.errors import ( ProofpointAPI404Error, ProofpointAPI404NoReasonError, diff --git a/external-import/proofpoint-tap/tests/test_client_api/test_tools.py b/external-import/proofpoint-tap/tests/tests_connector/test_client_api/test_tools.py similarity index 93% rename from external-import/proofpoint-tap/tests/test_client_api/test_tools.py rename to external-import/proofpoint-tap/tests/tests_connector/test_client_api/test_tools.py index e0554d6e9da..6e057590bf5 100644 --- a/external-import/proofpoint-tap/tests/test_client_api/test_tools.py +++ b/external-import/proofpoint-tap/tests/tests_connector/test_client_api/test_tools.py @@ -5,7 +5,7 @@ from unittest.mock import patch import pytest -from proofpoint_tap.client_api.tools import ( +from client_api.tools import ( _convert_get_query_url_to_filepath, cache_get_response_decorator, ) @@ -42,7 +42,7 @@ async def test_cache_get_response_decorator_load_from_cache(client): query_url = URL("https://domain.com/api/item/ids?filter=1") filepath = _convert_get_query_url_to_filepath(query_url, client.cache_folder_path) with patch( - "proofpoint_tap.client_api.tools._load_response_from_local_cache", + "client_api.tools._load_response_from_local_cache", return_value="cached_response", ) as mock_load: with patch("pathlib.Path.exists", return_value=True): @@ -63,7 +63,7 @@ async def test_cache_get_response_decorator_store_to_cache(client): query_url = URL("https://domain.com/api/item/ids?filter=1") filepath = _convert_get_query_url_to_filepath(query_url, client.cache_folder_path) with patch( - "proofpoint_tap.client_api.tools._store_response_to_local_cache", + "client_api.tools._store_response_to_local_cache", return_value=filepath, ) as mock_store: with patch("pathlib.Path.exists", return_value=False): diff --git a/external-import/proofpoint-tap/tests/test_client_api/test_v2/test_campaign.py b/external-import/proofpoint-tap/tests/tests_connector/test_client_api/test_v2/test_campaign.py similarity index 99% rename from external-import/proofpoint-tap/tests/test_client_api/test_v2/test_campaign.py rename to external-import/proofpoint-tap/tests/tests_connector/test_client_api/test_v2/test_campaign.py index 820f351a87b..db18c6f2609 100644 --- a/external-import/proofpoint-tap/tests/test_client_api/test_v2/test_campaign.py +++ b/external-import/proofpoint-tap/tests/tests_connector/test_client_api/test_v2/test_campaign.py @@ -14,7 +14,7 @@ import pytest from aiohttp import ClientResponse, ClientResponseError -from proofpoint_tap.client_api.v2.campaign import CampaignClient +from client_api.v2.campaign import CampaignClient from proofpoint_tap.errors import ( ProofpointAPI404Error, ProofpointAPI404NoReasonError, diff --git a/external-import/proofpoint-tap/tests/test_client_api/test_v2/test_forensics.py b/external-import/proofpoint-tap/tests/tests_connector/test_client_api/test_v2/test_forensics.py similarity index 98% rename from external-import/proofpoint-tap/tests/test_client_api/test_v2/test_forensics.py rename to external-import/proofpoint-tap/tests/tests_connector/test_client_api/test_v2/test_forensics.py index 43f9980c9fd..186fb36201c 100644 --- a/external-import/proofpoint-tap/tests/test_client_api/test_v2/test_forensics.py +++ b/external-import/proofpoint-tap/tests/tests_connector/test_client_api/test_v2/test_forensics.py @@ -14,7 +14,7 @@ import pytest from aiohttp import ClientResponse, ClientResponseError -from proofpoint_tap.client_api.v2.forensics import Forensics, ForensicsClient +from client_api.v2.forensics import Forensics, ForensicsClient from proofpoint_tap.errors import ( ProofpointAPIError, ProofpointAPIInvalidResponseError, diff --git a/external-import/proofpoint-tap/tests/test_client_api/test_v2/test_siem.py b/external-import/proofpoint-tap/tests/tests_connector/test_client_api/test_v2/test_siem.py similarity index 99% rename from external-import/proofpoint-tap/tests/test_client_api/test_v2/test_siem.py rename to external-import/proofpoint-tap/tests/tests_connector/test_client_api/test_v2/test_siem.py index 9b8b97265b8..3d28477c534 100644 --- a/external-import/proofpoint-tap/tests/test_client_api/test_v2/test_siem.py +++ b/external-import/proofpoint-tap/tests/tests_connector/test_client_api/test_v2/test_siem.py @@ -16,7 +16,7 @@ import pytest from aiohttp import ClientResponse, ClientResponseError from aiohttp_retry import Any -from proofpoint_tap.client_api.v2.siem import SIEMClient, SIEMResponse +from client_api.v2.siem import SIEMClient, SIEMResponse from proofpoint_tap.errors import ( ProofpointAPIError, ProofpointAPIInvalidResponseError, diff --git a/external-import/proofpoint-tap/tests/test_client_api/test_v2/test_threat.py b/external-import/proofpoint-tap/tests/tests_connector/test_client_api/test_v2/test_threat.py similarity index 98% rename from external-import/proofpoint-tap/tests/test_client_api/test_v2/test_threat.py rename to external-import/proofpoint-tap/tests/tests_connector/test_client_api/test_v2/test_threat.py index 54694a13b3b..14aabcc0bb2 100644 --- a/external-import/proofpoint-tap/tests/test_client_api/test_v2/test_threat.py +++ b/external-import/proofpoint-tap/tests/tests_connector/test_client_api/test_v2/test_threat.py @@ -13,7 +13,7 @@ import pytest from aiohttp import ClientResponse, ClientResponseError -from proofpoint_tap.client_api.v2.threat import ThreatClient, ThreatSummary +from client_api.v2.threat import ThreatClient, ThreatSummary from proofpoint_tap.errors import ProofpointAPIError, ProofpointAPIInvalidResponseError from pydantic import SecretStr from yarl import URL diff --git a/external-import/proofpoint-tap/tests/test_domain/test_use_cases/test_ingest_incident.py b/external-import/proofpoint-tap/tests/tests_connector/test_domain/test_use_cases/test_ingest_incident.py similarity index 100% rename from external-import/proofpoint-tap/tests/test_domain/test_use_cases/test_ingest_incident.py rename to external-import/proofpoint-tap/tests/tests_connector/test_domain/test_use_cases/test_ingest_incident.py diff --git a/external-import/proofpoint-tap/tests/test_domain/test_use_cases/test_ingest_report.py b/external-import/proofpoint-tap/tests/tests_connector/test_domain/test_use_cases/test_ingest_report.py similarity index 100% rename from external-import/proofpoint-tap/tests/test_domain/test_use_cases/test_ingest_report.py rename to external-import/proofpoint-tap/tests/tests_connector/test_domain/test_use_cases/test_ingest_report.py diff --git a/external-import/proofpoint-tap/tests/tests_connector/test_settings.py b/external-import/proofpoint-tap/tests/tests_connector/test_settings.py new file mode 100644 index 00000000000..2e831709b84 --- /dev/null +++ b/external-import/proofpoint-tap/tests/tests_connector/test_settings.py @@ -0,0 +1,169 @@ +from typing import Any + +import pytest +from connectors_sdk import BaseConfigModel, ConfigValidationError +from proofpoint_tap import ConnectorSettings + + +@pytest.mark.parametrize( + "settings_dict", + [ + pytest.param( + { + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + "connector": { + "id": "connector-id", + "name": "Test Connector", + "scope": "test, connector", + "log_level": "error", + "duration_period": "PT5M", + }, + "proofpoint_tap": { + "api_base_url": "http://test.com", + "api_principal_key": "test-api-principal-key", + "api_secret_key": "test-api-secret-key", + "api_timeout": "PT30S", + "api_backoff": "PT5S", + "api_retries": 3, + "marking_definition": "white", + "export_campaigns": True, + "export_events": False, + "events_type": "all", + }, + }, + id="full_valid_settings_dict", + ), + pytest.param( + { + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + "connector": {}, + "proofpoint_tap": { + "api_principal_key": "test-api-principal-key", + "api_secret_key": "test-api-secret-key", + }, + }, + id="minimal_valid_settings_dict", + ), + ], +) +def test_settings_should_accept_valid_input(settings_dict): + """ + Test that `ConnectorSettings` (implementation of `BaseConnectorSettings` from `connectors-sdk`) accepts valid input. + For the test purpose, `BaseConnectorSettings._load_config_dict` is overridden to return + a fake but valid dict (instead of the env/config vars parsed from `config.yml`, `.env` or env vars). + + :param settings_dict: The dict to use as `ConnectorSettings` input + """ + + class FakeConnectorSettings(ConnectorSettings): + """ + Subclass of `ConnectorSettings` (implementation of `BaseConnectorSettings`) for testing purpose. + It overrides `BaseConnectorSettings._load_config_dict` to return a fake but valid config dict. + """ + + @classmethod + def _load_config_dict(cls, _, handler) -> dict[str, Any]: + return handler(settings_dict) + + settings = FakeConnectorSettings() + + assert isinstance(settings.opencti, BaseConfigModel) is True + assert isinstance(settings.connector, BaseConfigModel) is True + assert isinstance(settings.proofpoint_tap, BaseConfigModel) is True + + +@pytest.mark.parametrize( + "settings_dict, field_name", + [ + pytest.param( + {}, + "settings", + id="empty_settings_dict", + ), + pytest.param( + { + "opencti": { + "url": "http://localhost:PORT", + "token": "test-token", + }, + "connector": { + "id": "connector-id", + "name": "Test Connector", + "scope": "test, connector", + "log_level": "error", + "duration_period": "PT5M", + }, + "proofpoint_tap": { + "api_base_url": "http://test.com", + "api_principal_key": "test-api-principal-key", + "api_secret_key": "test-api-secret-key", + "api_timeout": "PT30S", + "api_backoff": "PT5S", + "api_retries": 3, + "marking_definition": "white", + "export_campaigns": True, + "export_events": False, + "events_type": "all", + }, + }, + "opencti.url", + id="invalid_opencti_url", + ), + pytest.param( + { + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + "connector": { + "id": "connector-id", + "name": "Test Connector", + "scope": "test, connector", + "log_level": "error", + "duration_period": "PT5M", + }, + "proofpoint_tap": { + "api_base_url": "http://test.com", + "api_principal_key": "test-api-principal-key", + "api_timeout": "PT30S", + "api_backoff": "PT5S", + "api_retries": 3, + "marking_definition": "white", + "export_campaigns": True, + "export_events": False, + "events_type": "all", + }, + }, + "proofpoint_tap.id", + id="missing_proofpoint_tap_api_secret_key", + ), + ], +) +def test_settings_should_raise_when_invalid_input(settings_dict, field_name): + """ + Test that `ConnectorSettings` (implementation of `BaseConnectorSettings` from `connectors-sdk`) raises on invalid input. + For the test purpose, `BaseConnectorSettings._load_config_dict` is overridden to return + a fake and invalid dict (instead of the env/config vars parsed from `config.yml`, `.env` or env vars). + + :param settings_dict: The dict to use as `ConnectorSettings` input + """ + + class FakeConnectorSettings(ConnectorSettings): + """ + Subclass of `ConnectorSettings` (implementation of `BaseConnectorSettings`) for testing purpose. + It overrides `BaseConnectorSettings._load_config_dict` to return a fake but valid config dict. + """ + + @classmethod + def _load_config_dict(cls, _, handler) -> dict[str, Any]: + return handler(settings_dict) + + with pytest.raises(ConfigValidationError) as err: + FakeConnectorSettings() + assert str("Error validating configuration") in str(err) diff --git a/external-import/ransomfeed/Dockerfile b/external-import/ransomfeed/Dockerfile new file mode 100644 index 00000000000..216c498f4da --- /dev/null +++ b/external-import/ransomfeed/Dockerfile @@ -0,0 +1,17 @@ +FROM python:3.12-alpine +ENV CONNECTOR_TYPE=EXTERNAL_IMPORT + +# Copy the connector +COPY src /opt/opencti-connector-ransomfeed +WORKDIR /opt/opencti-connector-ransomfeed + +# Install Python modules +# hadolint ignore=DL3003 +RUN apk --no-cache add git build-base libmagic libffi-dev && \ + pip3 install --no-cache-dir -r requirements.txt && \ + apk del git build-base + +# Expose and entrypoint +COPY entrypoint.sh / +RUN chmod +x /entrypoint.sh +ENTRYPOINT ["/entrypoint.sh"] diff --git a/external-import/ransomfeed/README.md b/external-import/ransomfeed/README.md new file mode 100644 index 00000000000..57093f8d2cd --- /dev/null +++ b/external-import/ransomfeed/README.md @@ -0,0 +1,141 @@ +# OpenCTI RansomFeed Connector + +## Introduction +This connector for OpenCTI automatically imports ransomware claim data from the RansomFeed API. Each claim is transformed into STIX 2.1 objects and sent to OpenCTI via RabbitMQ for processing by workers, enriching global ransomware threat intelligence. + +## Installation + +From the connector's `src/` directory: + +```shell +cd external-import/ransomfeed/src +pip install -r requirements.txt +python main.py +``` + +See [Manual Deployment](#manual-deployment) below for a complete walkthrough. + +### Requirements + +- OpenCTI Platform >= 6 +- Python >= 3.12 (matching the connector Docker image) + +## Configuration variables + +There are a number of configuration options, which are set either in `docker-compose.yml` (for Docker) or +in `config.yml` (for manual deployment). + +### OpenCTI environment variables + +Below are the parameters you'll need to set for OpenCTI: + +| Parameter | config.yml | Docker environment variable | Mandatory | Description | +|---------------|------------|-----------------------------|-----------|------------------------------------------------------| +| OpenCTI URL | url | `OPENCTI_URL` | Yes | The URL of the OpenCTI platform. | +| OpenCTI Token | token | `OPENCTI_TOKEN` | Yes | The default admin token set in the OpenCTI platform. | + +### Connector environment variables + +| Parameter | config.yml | Docker environment variable | Mandatory | Description | +|-------------------------|----------------------|------------------------------------|-----------|-----------------------------------------------------------| +| Connector ID | id | `CONNECTOR_ID` | Yes | A unique identifier for this connector instance. | +| Connector Type | type | `CONNECTOR_TYPE` | Yes | Must be `EXTERNAL_IMPORT`. | +| Connector Name | name | `CONNECTOR_NAME` | Yes | Name of the connector. | +| Connector Scope | scope | `CONNECTOR_SCOPE` | Yes | Scope of the connector (e.g., `ransomfeed`). | +| Confidence Level | confidence_level | `CONNECTOR_CONFIDENCE_LEVEL` | Yes | Confidence level for created entities (0-100). | +| Log Level | log_level | `CONNECTOR_LOG_LEVEL` | Yes | Log level (`debug`, `info`, `warning`, `error`). | +| Duration Period | duration_period | `CONNECTOR_DURATION_PERIOD` | Yes | Interval between runs (ISO 8601 format, e.g., `PT1H`). | + +### RansomFeed-specific environment variables + +| Parameter | config.yml | Docker environment variable | Mandatory | Description | +|-------------------------|----------------------|------------------------------------|-----------|-----------------------------------------------------------| +| API URL | api_url | `RANSOMFEED_API_URL` | Yes | Base URL of the RansomFeed API. | +| TLP Level | tlp_level | `RANSOMFEED_TLP_LEVEL` | No | TLP marking level: `clear`, `white`, `green`, `amber`, `amber+strict`, `red` (default: `white`). | +| Create Indicators | create_indicators | `RANSOMFEED_CREATE_INDICATORS` | No | Create indicators from file hashes (default: `true`). | + + +## Deployment + +### Docker Deployment + +Before building the Docker container, you need to set the version of pycti in `requirements.txt` equal to whatever +version of OpenCTI you're running. Example, `pycti==5.12.20`. If you don't, it will take the latest version, but +sometimes the OpenCTI SDK fails to initialize. + +Build a Docker Image using the provided `Dockerfile`. + +Example: + +```shell +docker build . -t ransomfeed-connector +docker run --rm ransomfeed-connector +``` + +Make sure to replace the environment variables in `docker-compose.yml` with the appropriate configurations for your +environment. Then, start the docker container with the provided docker-compose.yml + +```shell +docker compose up -d +# -d for detached +``` + +### Manual Deployment + +Create a file `config.yml` based on the provided `config.yml.sample`. + +Replace the configuration variables (especially the "**ChangeMe**" variables) with the appropriate configurations for +you environment. + +Install the required python dependencies (preferably in a virtual environment): + +```shell +pip3 install -r requirements.txt +``` + +Then, start the connector from ransomfeed/src: + +```shell +python3 main.py +``` + +## Usage + +After Installation, the connector should require minimal interaction to use, and should update automatically at a regular interval specified in your `docker-compose.yml` or `config.yml` in `duration_period`. + +However, if you would like to force an immediate download of a new batch of entities, navigate to: + +`Data management` -> `Ingestion` -> `Connectors` in the OpenCTI platform. + +Find the connector, and click on the refresh button to reset the connector's state and force a new +download of data by re-running the connector. + +## Behavior + +This connector follows OpenCTI best practices by creating STIX 2.1 objects and publishing them to RabbitMQ for processing by OpenCTI workers. + +* **Data retrieval**: Automatic data retrieval via RansomFeed API. +* **STIX Objects created**: + * `Identity` - Organization representing the victim + * `Intrusion Set` - Ransomware group + * `Report` - Contains all entities involved in the ransomware attack + * `Location` - Country where the victim is located (if available) + * `Domain Name` - Victim's website/domain (if available) + * `Indicator` - File hash indicators (if available and enabled) + * `Relationship` - Relationships between entities (`targets`, `located-at`, `belongs-to`) + +* **Data modeling**: Following the pattern used in the `ransomwarelive` connector, this connector creates comprehensive **Report** entities (not Incidents) that contain all related entities and relationships for each ransomware attack. + +* **Processing**: All STIX bundles are sent to OpenCTI's RabbitMQ queue for asynchronous processing by workers, rather than using direct GraphQL API calls. + + +## Debugging + +The connector can be debugged by setting the appropriate log level. +Note that logging messages can be added using `self.helper.connector_logger,{LOG_LEVEL}("Sample message")`, i. +e., `self.helper.connector_logger.error("An error message")`. + +## Additional information + +In case of errors, bugs, or any other issues please feel free to contact the main developer [Dario Fadda](dario@ransomfeed.it). +Main project: [GitHub](https://github.com/ransomfeed/Ransomfeed_OpenCTI_connector). diff --git a/external-import/ransomfeed/__metadata__/connector_manifest.json b/external-import/ransomfeed/__metadata__/connector_manifest.json new file mode 100644 index 00000000000..a3533fc46b0 --- /dev/null +++ b/external-import/ransomfeed/__metadata__/connector_manifest.json @@ -0,0 +1,22 @@ +{ + "title": "RansomFeed", + "slug": "ransomfeed", + "description": "Imports public ransomware claims from the RansomFeed API (https://ransomfeed.it). Each claim is converted into STIX 2.1 objects describing the victim (Identity), the ransomware group (IntrusionSet), the targeted country (Location), the leak-site domain (Domain-Name) and an optional file-hash Indicator, all grouped under a Report. Bundles are pushed to OpenCTI through the standard RabbitMQ ingest queue.", + "short_description": "Imports ransomware claims from the RansomFeed API as STIX 2.1 Reports.", + "logo": null, + "use_cases": [ + "Threat Intelligence", + "Open Source Threat Intel" + ], + "verified": false, + "last_verified_date": null, + "playbook_supported": false, + "max_confidence_level": 70, + "support_version": ">=6.0.0", + "subscription_link": "https://ransomfeed.it", + "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/external-import/ransomfeed", + "manager_supported": false, + "container_version": "rolling", + "container_image": "opencti/connector-ransomfeed", + "container_type": "EXTERNAL_IMPORT" +} diff --git a/external-import/ransomfeed/docker-compose.yml b/external-import/ransomfeed/docker-compose.yml new file mode 100644 index 00000000000..37158d8cbeb --- /dev/null +++ b/external-import/ransomfeed/docker-compose.yml @@ -0,0 +1,16 @@ +version: '3' +services: + connector-ransomfeed: + image: opencti/connector-ransomfeed:latest + environment: + - OPENCTI_URL=http://localhost + - OPENCTI_TOKEN=ChangeMe + - CONNECTOR_ID=ChangeMe + - CONNECTOR_NAME=RansomFeed + - CONNECTOR_SCOPE=ransomfeed + - CONNECTOR_LOG_LEVEL=info + - CONNECTOR_DURATION_PERIOD=PT1H # ISO 8601 duration period + - RANSOMFEED_API_URL=https://api.ransomfeed.it + - RANSOMFEED_TLP_LEVEL=clear # clear, white, green, amber, amber+strict, red + - RANSOMFEED_CREATE_INDICATORS=true # Create indicators from file hashes + restart: always diff --git a/external-import/ransomfeed/entrypoint.sh b/external-import/ransomfeed/entrypoint.sh new file mode 100644 index 00000000000..f01e720d21d --- /dev/null +++ b/external-import/ransomfeed/entrypoint.sh @@ -0,0 +1,5 @@ +#!/bin/sh +set -e + +cd /opt/opencti-connector-ransomfeed +exec python3 main.py diff --git a/external-import/ransomfeed/src/config.yml.sample b/external-import/ransomfeed/src/config.yml.sample new file mode 100644 index 00000000000..9a4955f69d8 --- /dev/null +++ b/external-import/ransomfeed/src/config.yml.sample @@ -0,0 +1,17 @@ +opencti: + url: 'http://opencti:8080' + token: 'ChangeMe' + +connector: + id: 'ChangeMe' # Must be a unique UUIDv4 + type: 'EXTERNAL_IMPORT' + name: 'RansomFeed' + scope: 'ransomfeed' + confidence_level: 70 + log_level: 'info' + duration_period: 'PT1H' # Run every hour (ISO 8601 format) + +ransomfeed: + api_url: 'https://api.ransomfeed.it' # Base URL of your RansomFeed API + tlp_level: 'clear' # TLP level: clear, white, green, amber, amber+strict, red + create_indicators: true # Create indicators from file hashes diff --git a/external-import/ransomfeed/src/main.py b/external-import/ransomfeed/src/main.py new file mode 100644 index 00000000000..53976332677 --- /dev/null +++ b/external-import/ransomfeed/src/main.py @@ -0,0 +1,30 @@ +""" +RansomFeed Connector +Entry point for the RansomFeed external import connector +""" + +import sys +import traceback + +from pycti import OpenCTIConnectorHelper +from ransomfeed.config_loader import ConfigLoader +from ransomfeed.connector import RansomFeedConnector + +if __name__ == "__main__": + """ + Entry point of the connector + """ + try: + # Load configuration + config = ConfigLoader() + + # Initialize OpenCTI connector helper + helper = OpenCTIConnectorHelper(config=config.load) + + # Initialize and run the connector + connector = RansomFeedConnector(helper=helper, config=config) + connector.run() + + except Exception: + traceback.print_exc() + sys.exit(1) diff --git a/external-import/ransomfeed/src/ransomfeed/__init__.py b/external-import/ransomfeed/src/ransomfeed/__init__.py new file mode 100644 index 00000000000..a47e95c2bd3 --- /dev/null +++ b/external-import/ransomfeed/src/ransomfeed/__init__.py @@ -0,0 +1 @@ +# Ransomfeed connector module diff --git a/external-import/ransomfeed/src/ransomfeed/api_client.py b/external-import/ransomfeed/src/ransomfeed/api_client.py new file mode 100644 index 00000000000..437d7a1bbe7 --- /dev/null +++ b/external-import/ransomfeed/src/ransomfeed/api_client.py @@ -0,0 +1,80 @@ +""" +RansomFeed API Client +Handles communication with the RansomFeed API +""" + +import requests + + +class RansomFeedAPIError(Exception): + """Custom exception for RansomFeed API errors""" + + pass + + +class RansomFeedAPIClient: + """ + Client for interacting with the RansomFeed API + """ + + def __init__(self, api_url: str, helper): + """ + Initialize the API client + + Args: + api_url: Base URL for the RansomFeed API + helper: OpenCTI connector helper for logging + """ + self.api_url = api_url.rstrip("/") + self.helper = helper + + def get_recent_claims(self, since: str = None): + """ + Fetch recent ransomware claims from the API. + + Args: + since: Optional ``"%Y-%m-%d %H:%M:%S"`` UTC date string + forwarded to the API as the ``since`` query parameter. + The public ``api.ransomfeed.it`` endpoint does **not** + currently document this parameter and may silently + ignore it — the connector filters the response + client-side in ``RansomFeedConnector._process_claim`` + so this argument is best-effort. + + Returns: + List of claim dictionaries. + + Raises: + RansomFeedAPIError: If the API request fails. + """ + try: + url = self.api_url + params = {} + + if since: + params["since"] = since + + self.helper.connector_logger.info( + "Fetching data from RansomFeed API", {"url": url, "params": params} + ) + + response = requests.get(url, params=params, timeout=30) + response.raise_for_status() + + data = response.json() + + self.helper.connector_logger.info( + "Successfully fetched data from RansomFeed API", + {"num_claims": len(data) if isinstance(data, list) else 0}, + ) + + return data if isinstance(data, list) else [] + + except requests.exceptions.RequestException as e: + error_msg = f"Error fetching data from RansomFeed API: {str(e)}" + self.helper.connector_logger.error(error_msg) + raise RansomFeedAPIError(error_msg) from e + except Exception as e: + error_msg = f"Unexpected error in RansomFeed API client: {str(e)}" + self.helper.connector_logger.error(error_msg) + raise RansomFeedAPIError(error_msg) from e diff --git a/external-import/ransomfeed/src/ransomfeed/config_loader.py b/external-import/ransomfeed/src/ransomfeed/config_loader.py new file mode 100644 index 00000000000..1b160556790 --- /dev/null +++ b/external-import/ransomfeed/src/ransomfeed/config_loader.py @@ -0,0 +1,73 @@ +""" +Configuration Loader +Handles loading and validation of connector configuration +""" + +import os +from pathlib import Path + +import yaml +from pycti import get_config_variable + + +class ConfigLoader: + """ + Loads and manages connector configuration + """ + + def __init__(self): + """ + Initialize the configuration loader + """ + self.load = self._load_config() + self._initialize_configurations() + + @staticmethod + def _load_config() -> dict: + """ + Load configuration from YAML file + + Returns: + Configuration dictionary + """ + config_file_path = Path(__file__).parents[1].joinpath("config.yml") + config = ( + yaml.load(open(config_file_path), Loader=yaml.FullLoader) + if os.path.isfile(config_file_path) + else {} + ) + return config + + def _initialize_configurations(self) -> None: + """ + Initialize connector configuration variables + """ + # OpenCTI connector configurations + self.duration_period = get_config_variable( + "CONNECTOR_DURATION_PERIOD", + ["connector", "duration_period"], + self.load, + default="PT1H", + ) + + # RansomFeed specific configurations + self.api_url = get_config_variable( + "RANSOMFEED_API_URL", + ["ransomfeed", "api_url"], + self.load, + required=True, + ) + + self.tlp_level = get_config_variable( + "RANSOMFEED_TLP_LEVEL", + ["ransomfeed", "tlp_level"], + self.load, + default="white", + ) + + self.create_indicators = get_config_variable( + "RANSOMFEED_CREATE_INDICATORS", + ["ransomfeed", "create_indicators"], + self.load, + default=True, + ) diff --git a/external-import/ransomfeed/src/ransomfeed/connector.py b/external-import/ransomfeed/src/ransomfeed/connector.py new file mode 100644 index 00000000000..6c0ec8ebcf3 --- /dev/null +++ b/external-import/ransomfeed/src/ransomfeed/connector.py @@ -0,0 +1,453 @@ +""" +RansomFeed Connector +Main connector logic for importing ransomware claims from RansomFeed +""" + +import sys +from datetime import datetime, timezone + +import stix2 +from pycti import OpenCTIConnectorHelper +from ransomfeed.api_client import RansomFeedAPIClient, RansomFeedAPIError +from ransomfeed.config_loader import ConfigLoader +from ransomfeed.converter_to_stix import ConverterToStix + + +class RansomFeedConnector: + """ + RansomFeed external import connector + + This connector fetches ransomware claims from the RansomFeed API and converts + them into STIX 2.1 objects, which are then sent to OpenCTI via RabbitMQ. + """ + + def __init__(self, helper: OpenCTIConnectorHelper, config: ConfigLoader) -> None: + """ + Initialize the connector + + Args: + helper: OpenCTI connector helper + config: Connector configuration + """ + self.helper = helper + self.config = config + self.api_client = RansomFeedAPIClient(config.api_url, helper) + self.converter = ConverterToStix(helper, config) + self.work_id = None + + def _process_claim( + self, + claim: dict, + since: "datetime | None" = None, + ) -> list: + """ + Process a single ransomware claim and convert it to STIX objects + + Args: + claim: Dictionary containing claim data from RansomFeed API + since: When set, claims with ``claimed_at < since`` are skipped + with a debug log. Used to incrementally process the feed + even when the upstream API does not honour the ``since`` + query parameter (which is the typical case for RansomFeed — + the public endpoint always returns the last ~24h of + claims). + """ + stix_objects = [] + + try: + # Extract claim data + claim_id = claim.get("id") + victim_name = claim.get("victim") + gang_name = claim.get("gang") + date_str = claim.get("date") + country = claim.get("country") + website = claim.get("website") + hash_value = claim.get("hash") + + if not victim_name or not gang_name: + self.helper.connector_logger.warning( + "Skipping claim with missing victim or gang", {"claim_id": claim_id} + ) + return [] + + # Parse date - the timestamp is used as input for deterministic + # ``Report.generate_id`` / relationship ID generators, so we need + # a stable value. If the date is missing or unparseable, skip the + # claim instead of falling back to ``datetime.now()`` (which would + # produce a different ID on every run and create duplicates). + claim_date = None + if date_str: + for fmt in ( + "%Y-%m-%d %H:%M:%S", + "%Y-%m-%dT%H:%M:%S", + "%Y-%m-%d", + ): + try: + claim_date = datetime.strptime(date_str, fmt).replace( + tzinfo=timezone.utc + ) + break + except ValueError: + continue + + if claim_date is None: + self.helper.connector_logger.warning( + "Skipping claim with missing or unparseable date", + {"claim_id": claim_id, "date": date_str}, + ) + return [] + + # Defense-in-depth client-side filtering. The RansomFeed API + # currently returns every recent claim (its ``since`` query + # parameter, if any, is undocumented and appears to be a + # no-op), so skip claims older than the cursor here. + if since is not None and claim_date < since: + self.helper.connector_logger.debug( + "Skipping claim older than last_run", + { + "claim_id": claim_id, + "claim_date": claim_date.isoformat(), + "last_run": since.isoformat(), + }, + ) + return [] + + # Create victim organization + victim = self.converter.create_identity( + name=victim_name, identity_class="organization" + ) + stix_objects.append(victim) + + # Create intrusion set (ransomware group) + intrusion_set = self.converter.create_intrusion_set( + name=gang_name, description=f"Ransomware group known as {gang_name}" + ) + stix_objects.append(intrusion_set) + + # Create relationship: intrusion_set targets victim + relationship = self.converter.create_relationship( + source_ref=intrusion_set.get("id"), + target_ref=victim.get("id"), + relationship_type="targets", + start_time=claim_date, + created=claim_date, + ) + stix_objects.append(relationship) + + # Track object references for the report + object_refs = [ + victim.get("id"), + intrusion_set.get("id"), + relationship.get("id"), + ] + + # Add location if country is provided + if country: + location = self.converter.create_location(country) + stix_objects.append(location) + + # Victim located at country + victim_location_rel = self.converter.create_relationship( + source_ref=victim.get("id"), + target_ref=location.get("id"), + relationship_type="located-at", + ) + stix_objects.append(victim_location_rel) + + # Intrusion set targets country + intrusion_location_rel = self.converter.create_relationship( + source_ref=intrusion_set.get("id"), + target_ref=location.get("id"), + relationship_type="targets", + start_time=claim_date, + created=claim_date, + ) + stix_objects.append(intrusion_location_rel) + + object_refs.extend( + [ + location.get("id"), + victim_location_rel.get("id"), + intrusion_location_rel.get("id"), + ] + ) + + # Add domain if website is provided + if website: + try: + # Extract domain from URL + from urllib.parse import urlparse + + parsed = urlparse( + website if website.startswith("http") else f"http://{website}" + ) + domain_name = parsed.netloc or parsed.path + + if domain_name: + domain = self.converter.create_domain(domain_name) + stix_objects.append(domain) + + # Domain belongs to victim + domain_rel = self.converter.create_relationship( + source_ref=domain.get("id"), + target_ref=victim.get("id"), + relationship_type="belongs-to", + ) + stix_objects.append(domain_rel) + + object_refs.extend([domain.get("id"), domain_rel.get("id")]) + except Exception as e: + self.helper.connector_logger.warning( + "Error processing website/domain", + {"website": website, "error": str(e)}, + ) + + # Add indicator if hash is provided and enabled + if hash_value and self.config.create_indicators: + try: + indicator = self.converter.create_indicator( + pattern=f"[file:hashes.'SHA-256' = '{hash_value}']", + name=f"Ransomware sample related to {victim_name}", + description=f"Hash of ransomware sample from {gang_name} attack on {victim_name}", + ) + stix_objects.append(indicator) + object_refs.append(indicator.get("id")) + except Exception as e: + self.helper.connector_logger.warning( + "Error creating indicator", + {"hash": hash_value, "error": str(e)}, + ) + + # Create external references + external_refs = [] + if website: + external_refs.append( + stix2.ExternalReference( + source_name="RansomFeed", + url=website, + description=f"Victim website for {victim_name}", + ) + ) + + # Create report + report_name = f"{gang_name} has published a new victim: {victim_name}" + report_description = ( + f"Ransomware attack by {gang_name} against {victim_name}" + ) + if date_str: + report_description += f" discovered on {date_str}" + + report = self.converter.create_report( + name=report_name, + description=report_description, + published=claim_date, + object_refs=object_refs, + external_references=external_refs if external_refs else None, + ) + stix_objects.append(report) + + self.helper.connector_logger.info( + "Successfully processed claim", + {"claim_id": claim_id, "victim": victim_name, "gang": gang_name}, + ) + + except Exception as e: + self.helper.connector_logger.error( + "Error processing claim", {"claim": claim, "error": str(e)} + ) + return [] + + return stix_objects + + @staticmethod + def _parse_last_run(last_run): + """Return ``last_run`` parsed as a timezone-aware UTC datetime. + + Accepts the canonical ``"%Y-%m-%dT%H:%M:%SZ"`` format produced + by :meth:`process_message` and any other ISO-8601 string + ``datetime.fromisoformat`` understands (older state values may + carry microseconds / an explicit offset). Returns ``None`` on + empty / invalid input so the caller can treat the first run as + "no cursor". + """ + if not last_run: + return None + try: + parsed = datetime.strptime(last_run, "%Y-%m-%dT%H:%M:%SZ") + except ValueError: + try: + parsed = datetime.fromisoformat(last_run.replace("Z", "+00:00")) + except ValueError: + return None + if parsed.tzinfo is None: + parsed = parsed.replace(tzinfo=timezone.utc) + return parsed.astimezone(timezone.utc) + + def _collect_intelligence(self, last_run: str = None) -> list: + """ + Collect intelligence from RansomFeed API + + Args: + last_run: Optional last run timestamp ("YYYY-MM-DDTHH:MM:SSZ") + stored by :meth:`process_message`. Used to filter the API + response client-side and as a best-effort ``since`` query + parameter for the API. + + Returns: + List of STIX objects + """ + stix_objects = [] + + # Parse ``last_run`` back into a timezone-aware datetime so the + # client-side filter in ``_process_claim`` and the API + # ``since`` parameter use a consistent representation. + since_dt = self._parse_last_run(last_run) + api_since = ( + since_dt.strftime("%Y-%m-%d %H:%M:%S") if since_dt is not None else None + ) + + try: + # Fetch claims from API. The query parameter is best-effort; + # ``_process_claim`` filters the response client-side too. + claims = self.api_client.get_recent_claims(since=api_since) + + if not claims: + self.helper.connector_logger.info("No new claims to process") + return [] + + self.helper.connector_logger.info( + "Processing claims from RansomFeed", + {"num_claims": len(claims), "since": api_since}, + ) + + # Process each claim + for claim in claims: + claim_objects = self._process_claim(claim, since=since_dt) + stix_objects.extend(claim_objects) + + # Add author and TLP marking definition to objects so the + # ``cleanup_inconsistent_bundle=True`` worker option does not + # strip ``object_marking_refs`` / ``created_by_ref`` references. + if stix_objects: + stix_objects.append(self.converter.author) + if self.converter.marking is not None: + stix_objects.append(self.converter.marking) + + except RansomFeedAPIError as e: + self.helper.connector_logger.error( + "Error fetching data from RansomFeed API", {"error": str(e)} + ) + raise + + return stix_objects + + def process_message(self) -> None: + """ + Main process to collect intelligence from RansomFeed + """ + self.helper.connector_logger.info( + "[CONNECTOR] Starting RansomFeed connector...", + {"connector_name": self.helper.connect_name}, + ) + + try: + # Get current state + now = datetime.now(timezone.utc) + current_state = self.helper.get_state() + + last_run = None + if current_state and "last_run" in current_state: + last_run = current_state["last_run"] + self.helper.connector_logger.info( + "[CONNECTOR] Connector last run", {"last_run": last_run} + ) + else: + self.helper.connector_logger.info("[CONNECTOR] Connector has never run") + + # Initiate work + friendly_name = "RansomFeed import" + self.work_id = self.helper.api.work.initiate_work( + self.helper.connect_id, friendly_name + ) + + self.helper.connector_logger.info( + "[CONNECTOR] Running RansomFeed connector...", + {"connector_name": self.helper.connect_name}, + ) + + # Collect intelligence + stix_objects = self._collect_intelligence(last_run) + + if stix_objects: + # Deduplicate objects + stix_objects = self.helper.stix2_deduplicate_objects(stix_objects) + + # Create and send bundle + bundle = self.helper.stix2_create_bundle(stix_objects) + + self.helper.connector_logger.info( + "Sending STIX bundle to OpenCTI", {"num_objects": len(stix_objects)} + ) + + self.helper.send_stix2_bundle( + bundle=bundle, + work_id=self.work_id, + cleanup_inconsistent_bundle=True, + ) + + self.helper.connector_logger.info( + "Successfully sent STIX objects to OpenCTI", + {"num_objects": len(stix_objects)}, + ) + else: + self.helper.connector_logger.info("No data to send to OpenCTI") + + # Update state. Use a stable, parseable representation + # (no microseconds, no offset) so the value is unambiguous + # across runs and matches what ``_parse_last_run`` expects. + current_state = self.helper.get_state() + current_state_datetime = now.strftime("%Y-%m-%dT%H:%M:%SZ") + + if current_state: + current_state["last_run"] = current_state_datetime + else: + current_state = {"last_run": current_state_datetime} + + self.helper.set_state(current_state) + + message = f"RansomFeed connector successfully run, storing last_run as {current_state_datetime}" + self.helper.api.work.to_processed(self.work_id, message) + self.helper.connector_logger.info(message) + + except (KeyboardInterrupt, SystemExit): + self.helper.connector_logger.info( + "[CONNECTOR] Connector stopped", + {"connector_name": self.helper.connect_name}, + ) + sys.exit(0) + except Exception as e: + self.helper.connector_logger.error( + "[CONNECTOR] Error in connector", {"error": str(e)} + ) + if self.work_id: + # ``in_error=True`` so the work is marked as failed in + # the OpenCTI UI instead of being silently reported as + # successful (matches the pattern used by + # ``external-import/cvelistv5`` and + # ``external-import/opencti-stream``). + self.helper.api.work.to_processed( + self.work_id, + f"Error: {str(e)}", + in_error=True, + ) + finally: + self.work_id = None + + def run(self) -> None: + """ + Run the main process encapsulated in a scheduler + """ + self.helper.schedule_iso( + message_callback=self.process_message, + duration_period=self.config.duration_period, + ) diff --git a/external-import/ransomfeed/src/ransomfeed/converter_to_stix.py b/external-import/ransomfeed/src/ransomfeed/converter_to_stix.py new file mode 100644 index 00000000000..d768cf6426d --- /dev/null +++ b/external-import/ransomfeed/src/ransomfeed/converter_to_stix.py @@ -0,0 +1,271 @@ +""" +Converter to STIX +Converts RansomFeed data into STIX 2.1 objects +""" + +from datetime import datetime + +import stix2 +from pycti import ( + Identity, + Indicator, + IntrusionSet, + Location, + MarkingDefinition, + Report, + StixCoreRelationship, +) + + +class ConverterToStix: + """ + Provides methods for converting RansomFeed data into STIX 2.1 objects + """ + + def __init__(self, helper, config): + """ + Initialize the converter + + Args: + helper: OpenCTI connector helper + config: Connector configuration + """ + self.helper = helper + self.config = config + self.marking = self._create_tlp_marking(config.tlp_level.lower()) + self.author = self.create_author() + + @staticmethod + def _create_tlp_marking(level: str): + """ + Create TLP marking based on level + + Args: + level: TLP level (clear, white, green, amber, amber+strict, red) + + Returns: + STIX TLP marking object + + Raises: + ValueError: If the TLP level is not one of the supported values. + """ + mapping = { + "white": stix2.TLP_WHITE, + "clear": stix2.TLP_WHITE, + "green": stix2.TLP_GREEN, + "amber": stix2.TLP_AMBER, + "amber+strict": stix2.MarkingDefinition( + id=MarkingDefinition.generate_id("TLP", "TLP:AMBER+STRICT"), + definition_type="statement", + definition={"statement": "custom"}, + custom_properties={ + "x_opencti_definition_type": "TLP", + "x_opencti_definition": "TLP:AMBER+STRICT", + }, + ), + "red": stix2.TLP_RED, + } + if level not in mapping: + raise ValueError( + f"Invalid TLP level '{level}'. Supported values: " + f"{', '.join(mapping.keys())}." + ) + return mapping[level] + + def create_author(self) -> dict: + """ + Create STIX 2.1 Identity object representing the author + + Returns: + Author Identity in STIX 2.1 format + """ + author = stix2.Identity( + id=Identity.generate_id(name="RansomFeed", identity_class="organization"), + name="RansomFeed", + identity_class="organization", + type="identity", + description="RansomFeed - Ransomware Intelligence Platform", + object_marking_refs=[self.marking.get("id")], + contact_information=self.config.api_url, + allow_custom=True, + ) + return author + + def create_identity(self, name: str, identity_class: str = "organization") -> dict: + """ + Create a STIX Identity object + + Args: + name: Name of the identity + identity_class: Class of identity (organization or individual) + + Returns: + STIX Identity object + """ + identity = stix2.Identity( + id=Identity.generate_id(name, identity_class), + name=name, + identity_class=identity_class, + type="identity", + created_by_ref=self.author.get("id"), + object_marking_refs=[self.marking.get("id")], + ) + return identity + + def create_intrusion_set(self, name: str, description: str = None) -> dict: + """ + Create a STIX IntrusionSet object + + Args: + name: Name of the intrusion set (ransomware group) + description: Optional description + + Returns: + STIX IntrusionSet object + """ + if not description: + description = f"Ransomware group: {name}" + + intrusion_set = stix2.IntrusionSet( + id=IntrusionSet.generate_id(name), + name=name, + labels=["ransomware"], + created_by_ref=self.author.get("id"), + description=description, + object_marking_refs=[self.marking.get("id")], + ) + return intrusion_set + + def create_location(self, country_code: str) -> dict: + """ + Create a STIX Location object for a country + + Args: + country_code: ISO country code + + Returns: + STIX Location object + """ + location = stix2.Location( + id=Location.generate_id(country_code, "Country"), + name=country_code, + country=country_code, + type="location", + created_by_ref=self.author.get("id"), + object_marking_refs=[self.marking.get("id")], + ) + return location + + def create_relationship( + self, + source_ref: str, + target_ref: str, + relationship_type: str, + start_time: datetime = None, + created: datetime = None, + ) -> dict: + """ + Create a STIX Relationship object + + Args: + source_ref: Source object ID + target_ref: Target object ID + relationship_type: Type of relationship + start_time: Optional start time + created: Optional created time + + Returns: + STIX Relationship object + """ + relationship = stix2.Relationship( + id=StixCoreRelationship.generate_id( + relationship_type, source_ref, target_ref, start_time + ), + relationship_type=relationship_type, + source_ref=source_ref, + target_ref=target_ref, + start_time=start_time, + created=created, + created_by_ref=self.author.get("id"), + object_marking_refs=[self.marking.get("id")], + ) + return relationship + + def create_report( + self, + name: str, + description: str, + published: datetime, + object_refs: list, + external_references: list = None, + ) -> dict: + """ + Create a STIX Report object + + Args: + name: Name of the report + description: Description of the report + published: Published date + object_refs: List of STIX object IDs referenced in the report + external_references: Optional list of external references + + Returns: + STIX Report object + """ + report = stix2.Report( + id=Report.generate_id(name, published), + report_types=["threat-report"], + name=name, + description=description, + published=published, + created_by_ref=self.author.get("id"), + object_refs=object_refs, + object_marking_refs=[self.marking.get("id")], + external_references=external_references if external_references else [], + ) + return report + + def create_domain(self, domain_name: str) -> dict: + """ + Create a STIX DomainName object + + Args: + domain_name: Domain name + + Returns: + STIX DomainName object + """ + domain = stix2.DomainName( + value=domain_name, + type="domain-name", + object_marking_refs=[self.marking.get("id")], + custom_properties={ + "x_opencti_created_by_ref": self.author.get("id"), + }, + ) + return domain + + def create_indicator( + self, pattern: str, name: str, description: str = None + ) -> dict: + """ + Create a STIX Indicator object + + Args: + pattern: STIX pattern + name: Name of the indicator + description: Optional description + + Returns: + STIX Indicator object + """ + indicator = stix2.Indicator( + id=Indicator.generate_id(pattern), + name=name, + description=description if description else name, + pattern_type="stix", + pattern=pattern, + created_by_ref=self.author.get("id"), + object_marking_refs=[self.marking.get("id")], + ) + return indicator diff --git a/external-import/ransomfeed/src/requirements.txt b/external-import/ransomfeed/src/requirements.txt new file mode 100644 index 00000000000..c1c44a2c678 --- /dev/null +++ b/external-import/ransomfeed/src/requirements.txt @@ -0,0 +1,4 @@ +pycti==7.260515.0 +stix2~=3.0 +requests~=2.32 +PyYAML>=6.0,<7 diff --git a/external-import/ransomwarelive/__metadata__/connector_manifest.json b/external-import/ransomwarelive/__metadata__/connector_manifest.json index 2aa5f42ddb6..eda8e306235 100644 --- a/external-import/ransomwarelive/__metadata__/connector_manifest.json +++ b/external-import/ransomwarelive/__metadata__/connector_manifest.json @@ -13,9 +13,9 @@ "max_confidence_level": 50, "support_version": ">= 6.7.5", "subscription_link": "https://www.ransomware.live", - "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/oob/connector_manager/external-import/ransomwarelive", + "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/external-import/ransomwarelive", "manager_supported": true, "container_version": "rolling", "container_image": "opencti/connector-ransomwarelive", "container_type": "EXTERNAL_IMPORT" -} \ No newline at end of file +} diff --git a/external-import/ransomwarelive/requirements.txt b/external-import/ransomwarelive/requirements.txt index f634ff992cb..4b7a857f56c 100644 --- a/external-import/ransomwarelive/requirements.txt +++ b/external-import/ransomwarelive/requirements.txt @@ -1,8 +1,8 @@ -pycti==7.260309.0 +pycti==7.260515.0 pydantic>=2.10, <3 pydantic-settings~=2.9.1 python-whois>=0.9.5 -requests==2.32.5 +requests==2.33.0 stix2==3.0.1 tldextract==5.3.0 validators==0.35.0 diff --git a/external-import/ransomwarelive/src/models/configs/config_loader.py b/external-import/ransomwarelive/src/models/configs/config_loader.py index be9c90637d5..eac88ba7ee0 100644 --- a/external-import/ransomwarelive/src/models/configs/config_loader.py +++ b/external-import/ransomwarelive/src/models/configs/config_loader.py @@ -1,3 +1,4 @@ +import datetime import warnings from datetime import timedelta from pathlib import Path @@ -9,7 +10,7 @@ _ConfigLoaderConnector, _ConfigLoaderOCTI, ) -from pydantic import Field, model_validator +from pydantic import Field, TypeAdapter, model_validator from pydantic_settings import ( BaseSettings, DotEnvSettingsSource, @@ -122,6 +123,15 @@ def migrate_deprecated_interval(cls, data: dict) -> dict: else: raise ValueError(f"Invalid value for CONNECTOR_RUN_EVERY: {run_every}") + duration_period = connector_data.get("duration_period") + if duration_period is None: + return data + + timedelta_adapter = TypeAdapter(datetime.timedelta) + td = timedelta_adapter.validate_python(duration_period) + if td < timedelta(minutes=1): + raise ValueError("CONNECTOR_DURATION_PERIOD must at least 1 minute") + return data def model_dump_pycti(self) -> dict[str, Any]: diff --git a/external-import/ransomwarelive/src/ransomwarelive/api_client.py b/external-import/ransomwarelive/src/ransomwarelive/api_client.py index bde64ee76f6..20201fdcea0 100644 --- a/external-import/ransomwarelive/src/ransomwarelive/api_client.py +++ b/external-import/ransomwarelive/src/ransomwarelive/api_client.py @@ -1,33 +1,73 @@ import requests +from pycti import OpenCTIConnectorHelper +from requests.adapters import HTTPAdapter +from urllib3.util.retry import Retry class RansomwareAPIError(Exception): """Custom wrapper for exceptions raised in RansomwareAPIClient""" +_MAX_RETRIES = 5 +_RETRY_BACKOFF_FACTOR = 60 # seconds — matches the API's "1 per 1 minute" rate limit +_RETRY_BACKOFF_JITTER = ( + 30 # seconds of random jitter to spread retries across instances +) +_REQUEST_TIMEOUT_SECONDS = 30 + +API_BASE_URL = "https://api.ransomware.live/v2/" + + class RansomwareAPIClient: - def __init__( - self, - ): + def __init__(self, helper: OpenCTIConnectorHelper): """ Initialize the client with necessary configurations """ - self.api_base_url = "https://api.ransomware.live/v2/" + self.helper = helper + self._session = self._build_session() + + @staticmethod + def _build_session() -> requests.Session: + retry = Retry( + total=_MAX_RETRIES, + status_forcelist=[429], + backoff_factor=_RETRY_BACKOFF_FACTOR, + backoff_jitter=_RETRY_BACKOFF_JITTER, + ) + adapter = HTTPAdapter(max_retries=retry) + session = requests.Session() + session.mount("https://", adapter) + session.mount("http://", adapter) + return session def _send_request(self, url: str): """ Send a request to Ransomware API. + Retries up to _MAX_RETRIES times on HTTP 429 with exponential backoff and jitter. :param url: request URL in string :return: response data returned by the API """ try: - response = requests.get( - url, headers={"accept": "application/json", "User-Agent": "OpenCTI"} + response = self._session.get( + url, + headers={"accept": "application/json", "User-Agent": "OpenCTI"}, + timeout=_REQUEST_TIMEOUT_SECONDS, ) response.raise_for_status() if response.content: return response.json() + return None + + except requests.exceptions.RetryError as err: + self.helper.connector_logger.error( + "Exceeded maximum retries for Ransomware API due to rate limiting", + {"url": f"GET {url}", "status_code": 429, "retries": _MAX_RETRIES}, + ) + raise RansomwareAPIError( + f"Error while fetching Ransomware API: HTTP 429 after {_MAX_RETRIES} retries", + {"url": f"GET {url}", "status_code": 429}, + ) from err except requests.exceptions.HTTPError as err: status = err.response.status_code @@ -36,16 +76,20 @@ def _send_request(self, url: str): if status == 500 and "No victims found" in text: return [] + self.helper.connector_logger.error( + "HTTP error while fetching Ransomware API", + {"url": f"GET {url}", "status_code": status, "response_body": text}, + ) raise RansomwareAPIError( f"Error while fetching Ransomware API: HTTP {status}", - { - "url": f"GET {url}", - "status_code": status, - "response_body": text, - }, + {"url": f"GET {url}", "status_code": status, "response_body": text}, ) from err except requests.RequestException as err: + self.helper.connector_logger.error( + "Request error while fetching Ransomware API", + {"url": f"GET {url}", "error": str(err)}, + ) raise RansomwareAPIError( f"Error while fetching Ransomware API: {err}", {"url": f"GET {url}", "error": err}, @@ -57,7 +101,21 @@ def get_feed(self, path: str) -> list[dict]: :param path: path to get feed from. :return: data's feed items """ - url = f"{self.api_base_url}{path}" + url = f"{API_BASE_URL}{path}" data = self._send_request(url) + if data is None: + return [] + + if not isinstance(data, list): + raise RansomwareAPIError( + "Unexpected Ransomware API response type for feed", + {"url": f"GET {url}", "response_type": type(data).__name__}, + ) + if not all(isinstance(item, dict) for item in data): + raise RansomwareAPIError( + "Unexpected Ransomware API feed item type", + {"url": f"GET {url}", "response_type": "list"}, + ) + return data diff --git a/external-import/ransomwarelive/src/ransomwarelive/ransom_conn.py b/external-import/ransomwarelive/src/ransomwarelive/ransom_conn.py index 733d9758529..60df187dfef 100644 --- a/external-import/ransomwarelive/src/ransomwarelive/ransom_conn.py +++ b/external-import/ransomwarelive/src/ransomwarelive/ransom_conn.py @@ -29,7 +29,7 @@ def __init__(self, helper: OpenCTIConnectorHelper, config: ConfigLoader) -> None self.last_run_datetime_with_ingested_data = None self.converter_to_stix = ConverterToStix() self.author = self.converter_to_stix.author - self.api_client = RansomwareAPIClient() + self.api_client = RansomwareAPIClient(helper=self.helper) def location_fetcher(self, country: str): """ @@ -327,6 +327,11 @@ def collect_historic_intelligence(self): """Collects historic intelligence from ransomware.live""" # fetching group information group_data = self.api_client.get_feed("groups") + if not group_data: + self.helper.connector_logger.info( + "No group data retrieved from ransomware.live API" + ) + return # Checking if the historic year is less than 2020 as there is no data past 2020 year = ( @@ -345,6 +350,11 @@ def collect_historic_intelligence(self): bundles = [] path = year_url + "/" + str(month) response_json = self.api_client.get_feed(path) + if not response_json: + self.helper.connector_logger.info( + f"No data retrieved from ransomware.live API for {year}/{month}" + ) + continue for item in response_json: try: @@ -401,18 +411,29 @@ def collect_intelligence(self): """Collects intelligence from the last 24 on ransomware.live""" # fetching group information group_data = self.api_client.get_feed("groups") + if not group_data: + self.helper.connector_logger.info( + "No group data retrieved from ransomware.live API" + ) + return # fetching recent requests response_json = self.api_client.get_feed("recentvictims") + if not response_json: + self.helper.connector_logger.info( + "No recent victim data retrieved from ransomware.live API" + ) + return nb_stix_objects = 0 bundles = [] last_run_datetime = self.last_run_datetime_with_ingested_data or self.last_run for item in response_json: - created = datetime.strptime( - item.get("discovered"), "%Y-%m-%d %H:%M:%S.%f" - ).replace(tzinfo=timezone.utc) + discovered_raw = item.get("discovered") + created = safe_datetime(discovered_raw) + if created.tzinfo is None: + created = created.replace(tzinfo=timezone.utc) # We only retrieve the data from the last 24h. # If no last_run, just put time_diff to 0. diff --git a/external-import/recorded-future/README.md b/external-import/recorded-future/README.md index 28ac0496381..b9c991eb51e 100644 --- a/external-import/recorded-future/README.md +++ b/external-import/recorded-future/README.md @@ -71,7 +71,7 @@ There are a number of configuration options, which are set either in `docker-com | Insikt Only | recorded_future.insikt_only | `RECORDED_FUTURE_INSIKT_ONLY` | true | No | Only import Insikt Group notes. | | Pull Signatures | recorded_future.pull_signatures | `RECORDED_FUTURE_PULL_SIGNATURES` | false | No | Import detection signatures. | | Person to Threat Actor | recorded_future.person_to_ta | `RECORDED_FUTURE_PERSON_TO_TA` | false | No | Convert person entities to threat actors. | -| Threat Actor to Intrusion Set | recorded_future.ta_to_intrusion_set | `RECORDED_FUTURE_TA_TO_INTRUSION_SET` | false | No | Convert threat actors to intrusion sets. | +| Threat Actor to Intrusion Set | recorded_future.ta_to_intrusion_set | `RECORDED_FUTURE_TA_TO_INTRUSION_SET` | false | No | When true, maps all Threat Actor entities to Intrusion Sets. | | Risk as Score | recorded_future.risk_as_score | `RECORDED_FUTURE_RISK_AS_SCORE` | true | No | Use RF risk score as OpenCTI score. | | Risk Threshold | recorded_future.risk_threshold | `RECORDED_FUTURE_RISK_THRESHOLD` | 60 | No | Minimum risk score for import. | | Analyst Notes Guess Relationships | recorded_future.analyst_notes_guess_relationships | `RECORDED_FUTURE_ANALYST_NOTES_GUESS_RELATIONSHIPS` | false | No | Infer relationships from notes. | @@ -465,4 +465,4 @@ CONNECTOR_LOG_LEVEL=debug - **Risk Scoring**: Recorded Future's risk scores (0-100) can be mapped to OpenCTI scores - **Entity Types**: Configure `RISKLIST_RELATED_ENTITIES` to control relationship creation - **TLP Levels**: Supports `white`, `green`, `amber`, `amber+strict`, `red` -- **Reference**: [Recorded Future API Documentation](https://api.recordedfuture.com/) \ No newline at end of file +- **Reference**: [Recorded Future API Documentation](https://api.recordedfuture.com/) diff --git a/external-import/recorded-future/__metadata__/CONNECTOR_CONFIG_DOC.md b/external-import/recorded-future/__metadata__/CONNECTOR_CONFIG_DOC.md index d1045b997d3..368b64fc8ac 100644 --- a/external-import/recorded-future/__metadata__/CONNECTOR_CONFIG_DOC.md +++ b/external-import/recorded-future/__metadata__/CONNECTOR_CONFIG_DOC.md @@ -23,7 +23,7 @@ Below is an exhaustive enumeration of all configurable parameters available, eac | RECORDED_FUTURE_INSIKT_ONLY | `boolean` | | boolean | `true` | Whether to import only Insikt notes (Recorded Future's analyst reports). | | RECORDED_FUTURE_PULL_SIGNATURES | `boolean` | | boolean | `false` | Whether to import detection signatures (Yara/Snort/Sigma rules) from analyst notes. | | RECORDED_FUTURE_PERSON_TO_TA | `boolean` | | boolean | `false` | Whether to convert Person entities to Threat Actor entities. | -| RECORDED_FUTURE_TA_TO_INTRUSION_SET | `boolean` | | boolean | `false` | Whether to convert Threat Actor entities to Intrusion Set entities. | +| RECORDED_FUTURE_TA_TO_INTRUSION_SET | `boolean` | | boolean | `false` | Whether to map Threat Actor entities to Intrusion Set instead of Threat Actor. | | RECORDED_FUTURE_RISK_AS_SCORE | `boolean` | | boolean | `true` | Whether to import risk scores as confidence scores in OpenCTI. | | RECORDED_FUTURE_RISK_THRESHOLD | `integer` | | `0 < x ` | `60` | Minimum risk score threshold (0-100) for importing entities. | | RECORDED_FUTURE_ANALYST_NOTES_GUESS_RELATIONSHIPS | `boolean` | | boolean | `false` | Enable or disable the automatic guessing of relationships between entities when processing analyst notes. | diff --git a/external-import/recorded-future/__metadata__/connector_config_schema.json b/external-import/recorded-future/__metadata__/connector_config_schema.json index f0683c9ee58..18cfdd0238c 100644 --- a/external-import/recorded-future/__metadata__/connector_config_schema.json +++ b/external-import/recorded-future/__metadata__/connector_config_schema.json @@ -133,7 +133,7 @@ }, "RECORDED_FUTURE_TA_TO_INTRUSION_SET": { "default": false, - "description": "Whether to convert Threat Actor entities to Intrusion Set entities.", + "description": "Whether to map Threat Actor entities to Intrusion Set instead of Threat Actor.", "type": "boolean" }, "RECORDED_FUTURE_RISK_AS_SCORE": { diff --git a/external-import/recorded-future/docker-compose.yml b/external-import/recorded-future/docker-compose.yml index 0555ba70e10..27b94b9d9a9 100644 --- a/external-import/recorded-future/docker-compose.yml +++ b/external-import/recorded-future/docker-compose.yml @@ -1,4 +1,4 @@ -version: '3' +version: "3" services: connector-recorded-future: image: opencti/connector-recorded-future:latest @@ -19,7 +19,7 @@ services: - RECORDED_FUTURE_INSIKT_ONLY=True #optional, can remove - RECORDED_FUTURE_PULL_SIGNATURES=False #optional, can remove - RECORDED_FUTURE_PERSON_TO_TA=False #optional, can remove - - RECORDED_FUTURE_TA_TO_INTRUSION_SET=False #optional, can remove + - RECORDED_FUTURE_TA_TO_INTRUSION_SET=False # optional. Set to true to map Threat Actor entities to Intrusion Set. - RECORDED_FUTURE_RISK_AS_SCORE=True #optional, can remove - RECORDED_FUTURE_RISK_THRESHOLD=60 #optional, can remove - RECORDED_FUTURE_ANALYST_NOTES_GUESS_RELATIONSHIPS=False #optional, can remove diff --git a/external-import/recorded-future/src/config.yml.sample b/external-import/recorded-future/src/config.yml.sample index d70c768f7b1..d8f319586f0 100644 --- a/external-import/recorded-future/src/config.yml.sample +++ b/external-import/recorded-future/src/config.yml.sample @@ -20,7 +20,7 @@ rf: insikt_only: True # optional pull_signatures: False # Pull Yara/Snort/Sigma rules into OpenCTI. optional person_to_ta: False # optional - ta_to_intrusion_set: False # optional + ta_to_intrusion_set: false # optional. Set to true to map Threat Actor entities to Intrusion Set. risk_as_score: True # optional risk_threshold: 60 # optional analyst_notes_guess_relationships=False # optional @@ -45,4 +45,4 @@ playbook_alert: severity_threshold_identity_novel_exposures: 'Informational' # optional severity_threshold_code_repo_leakage: 'Informational' # optional severity_threshold_cyber_vulnerability: 'Informational' # optional - debug: False # optional \ No newline at end of file + debug: False # optional diff --git a/external-import/recorded-future/src/main.py b/external-import/recorded-future/src/main.py index eb8cd71db26..4949963f8bb 100644 --- a/external-import/recorded-future/src/main.py +++ b/external-import/recorded-future/src/main.py @@ -50,7 +50,7 @@ def __init__(self): ) self.rf_person_to_TA = self.config.recorded_future.person_to_ta - self.rf_TA_to_intrusion_set = self.config.recorded_future.ta_to_intrusion_set + self.ta_to_intrusion_set = self.config.recorded_future.ta_to_intrusion_set self.risk_as_score = self.config.recorded_future.risk_as_score self.risk_threshold = self.config.recorded_future.risk_threshold self.risk_list_threshold = self.config.recorded_future.risk_list_threshold @@ -137,6 +137,7 @@ def all_processes(self): self.RF.rf_alerts_api, self.RF.opencti_default_severity, self.RF.tlp, + self.RF.rf_initial_lookback, ) self.alerts.start() threads.append(self.alerts) @@ -174,6 +175,7 @@ def all_processes(self): self.RF.risk_list_threshold, self.RF.risklist_related_entities, self.RF.rf_riskrules_as_label, + self.RF.ta_to_intrusion_set, ) self.risk_list.start() threads.append(self.risk_list) @@ -209,7 +211,7 @@ def all_processes(self): self.RF.rf_topics, self.RF.tlp, self.RF.rf_person_to_TA, - self.RF.rf_TA_to_intrusion_set, + self.RF.ta_to_intrusion_set, self.RF.risk_as_score, self.RF.risk_threshold, self.RF.analyst_notes_guess_relationships, diff --git a/external-import/recorded-future/src/models/configs/recorded_future_configs.py b/external-import/recorded-future/src/models/configs/recorded_future_configs.py index bbf028a941f..dfd1f9b179e 100644 --- a/external-import/recorded-future/src/models/configs/recorded_future_configs.py +++ b/external-import/recorded-future/src/models/configs/recorded_future_configs.py @@ -65,9 +65,20 @@ def validate_tlp_lowercase(cls, v: str) -> str: ) ta_to_intrusion_set: bool = Field( default=False, - alias="TA_to_intrusion_set", - description="Whether to convert Threat Actor entities to Intrusion Set entities.", + description="Whether to map Threat Actor entities to Intrusion Set instead of Threat Actor.", ) + + @field_validator("ta_to_intrusion_set", mode="before") + @classmethod + def validate_ta_to_intrusion_set(cls, v: str | bool) -> bool: + """Convert ta_to_intrusion_set value to bool.""" + if isinstance(v, bool): + return v + elif isinstance(v, str) and v.strip().lower() != "false": + return True + else: + return False + risk_as_score: bool = Field( default=True, description="Whether to import risk scores as confidence scores in OpenCTI.", diff --git a/external-import/recorded-future/src/requirements.txt b/external-import/recorded-future/src/requirements.txt index 0d687327b2e..28deae3c664 100644 --- a/external-import/recorded-future/src/requirements.txt +++ b/external-import/recorded-future/src/requirements.txt @@ -3,7 +3,7 @@ chardet datefinder idna pika -pycti==7.260309.0 +pycti==7.260515.0 pydantic>=2.10, <3 pydantic-settings>=2.0 python-dateutil diff --git a/external-import/recorded-future/src/rflib/analyst_note.py b/external-import/recorded-future/src/rflib/analyst_note.py index bf8c7c6f810..2e29cd4fce2 100644 --- a/external-import/recorded-future/src/rflib/analyst_note.py +++ b/external-import/recorded-future/src/rflib/analyst_note.py @@ -17,7 +17,7 @@ def __init__( rf_topics, tlp, rf_person_to_TA, - rf_TA_to_intrusion_set, + ta_to_intrusion_set, risk_as_score, risk_threshold, analyst_notes_guess_relationships, @@ -32,7 +32,7 @@ def __init__( self.rf_topics = rf_topics self.tlp = tlp self.rf_person_to_TA = rf_person_to_TA - self.rf_TA_to_intrusion_set = rf_TA_to_intrusion_set + self.ta_to_intrusion_set = ta_to_intrusion_set self.risk_as_score = risk_as_score self.risk_threshold = risk_threshold self.analyst_notes_guess_relationships = analyst_notes_guess_relationships @@ -135,7 +135,7 @@ def convert_and_send(self, published, tas, work_id): tas, self.rfapi, self.rf_person_to_TA, - self.rf_TA_to_intrusion_set, + self.ta_to_intrusion_set, self.risk_as_score, self.risk_threshold, self.analyst_notes_guess_relationships, diff --git a/external-import/recorded-future/src/rflib/pyrf.py b/external-import/recorded-future/src/rflib/pyrf.py index 7d7edd3439b..29db9fd786f 100644 --- a/external-import/recorded-future/src/rflib/pyrf.py +++ b/external-import/recorded-future/src/rflib/pyrf.py @@ -168,9 +168,13 @@ def _raw_get_alerts( :return: Search alerts raw dictionary. """ try: - triggered_since_iso = triggered_since.isoformat().replace("+00:00", "Z") + triggered_since_iso = triggered_since.isoformat( + timespec="milliseconds" + ).replace("+00:00", "Z") triggered_until_iso = ( - triggered_until.isoformat().replace("+00:00", "Z") + triggered_until.isoformat(timespec="milliseconds").replace( + "+00:00", "Z" + ) if triggered_until else "" ) @@ -183,7 +187,9 @@ def _raw_get_alerts( }, params={ "alertRule": rule.rule_id, - "triggered": f"[{triggered_since_iso},{triggered_until_iso}]", + "triggered": f"({triggered_since_iso},{triggered_until_iso}]", + "orderby": "triggered", + "direction": "asc", "limit": limit, "from": offset, }, @@ -270,7 +276,10 @@ def get_playbook_id(self, category, trigger_from, trigger_to, priority_threshold "Moderate": ["High", "Moderate"], "Informational": ["High", "Moderate", "Informational"], } - for created_or_updated in ["created", "updated"]: + for created_or_updated, order_by in [ + ("created", "created"), + ("updated", "modified"), + ]: while int(from_api) < int(alert_count): response = requests.post( str(self.base_url + "playbook-alert/search"), @@ -282,7 +291,7 @@ def get_playbook_id(self, category, trigger_from, trigger_to, priority_threshold json={ "from": from_api, "limit": 100, - "order_by": created_or_updated, + "order_by": order_by, "direction": "asc", "category": [str(category)], str(created_or_updated + "_range"): { @@ -292,7 +301,6 @@ def get_playbook_id(self, category, trigger_from, trigger_to, priority_threshold "priority": priority_matrix[priority_threshold], }, ) - # If there is an error during the request, the method raise the error response.raise_for_status() diff --git a/external-import/recorded-future/src/rflib/rf_alerts.py b/external-import/recorded-future/src/rflib/rf_alerts.py index 902ef3f5b99..db5fee6aecd 100644 --- a/external-import/recorded-future/src/rflib/rf_alerts.py +++ b/external-import/recorded-future/src/rflib/rf_alerts.py @@ -1,6 +1,6 @@ import base64 import threading -from datetime import datetime, timezone +from datetime import datetime, timedelta, timezone from re import search import pycti @@ -30,9 +30,11 @@ def __init__( rf_alerts_api: RecordedFutureApiClient, opencti_default_severity: str, tlp: str, + rf_initial_lookback: int, ): threading.Thread.__init__(self) self.helper = helper + self.rf_initial_lookback = rf_initial_lookback self.helper.connector_logger.info( "Starting Recorded Future Alert connector module initialization" @@ -188,15 +190,34 @@ def run(self): self.update_rules() current_state = self.helper.get_state() or {} - last_alerts_run = ( - datetime.fromisoformat( - current_state.get("last_alerts_run", "") - ).replace(tzinfo=timezone.utc) - if current_state.get("last_alerts_run") - else None + + # Migrate old state key to new name + if "last_alerts_run" in current_state: + if "last_processed_alert_date" not in current_state: + current_state["last_processed_alert_date"] = current_state[ + "last_alerts_run" + ] + del current_state["last_alerts_run"] + self.helper.set_state(current_state) + + state_last_processed_alert_date = current_state.get( + "last_processed_alert_date" ) + if state_last_processed_alert_date is None: + last_processed_alert_date = now - timedelta( + hours=self.rf_initial_lookback + ) + self.helper.connector_logger.info( + "[ALERTS] First run, looking back", + {"initial_lookback_hours": self.rf_initial_lookback}, + ) + else: + last_processed_alert_date = datetime.fromisoformat( + state_last_processed_alert_date + ).replace(tzinfo=timezone.utc) - alerts = self.collect_alerts(since=last_alerts_run or now) + alerts = self.collect_alerts(since=last_processed_alert_date) + alerts.sort(key=lambda a: a.alert_date or "") for alert in alerts: try: self.alert_to_incident(alert) @@ -207,9 +228,16 @@ def run(self): ) continue - current_state = self.helper.get_state() or {} - current_state["last_alerts_run"] = now.isoformat() - self.helper.set_state(current_state) + current_state = self.helper.get_state() or {} + checkpoint = ( + datetime.fromisoformat(alert.alert_date) + if alert.alert_date + else now + ) + current_state["last_processed_alert_date"] = checkpoint.isoformat( + timespec="milliseconds" + ) + self.helper.set_state(current_state) message = f"{self.helper.connect_name} connector successfully run for Recorded Future Alerts" self.helper.api.work.to_processed(self.work_id, message) diff --git a/external-import/recorded-future/src/rflib/rf_playbook_alerts.py b/external-import/recorded-future/src/rflib/rf_playbook_alerts.py index 9b73a99e62d..3bbdbd4ba24 100644 --- a/external-import/recorded-future/src/rflib/rf_playbook_alerts.py +++ b/external-import/recorded-future/src/rflib/rf_playbook_alerts.py @@ -871,31 +871,25 @@ def create_incident_from_playbook_alert_domain_abuse(self, playbook_alert): created_by_ref=self.author["id"], ) bundle_objects.append(stix_note) - evidence_summary_content = "" - if len(playbook_alert["data"]["panel_evidence_summary"]) > 0 and ( - len( - playbook_alert["data"]["panel_evidence_summary"]["resolved_record_list"] - ) - > 0 - or len(playbook_alert["data"]["panel_evidence_summary"]["screenshots"]) > 0 + + panel_evidence_summary = playbook_alert["data"]["panel_evidence_summary"] + if len(panel_evidence_summary) > 0 and ( + len(panel_evidence_summary["resolved_record_list"]) > 0 + or len(panel_evidence_summary["screenshots"]) > 0 ): evidence_summary_content = "### Resolved records" - for record in playbook_alert["data"]["panel_evidence_summary"][ - "resolved_record_list" - ]: - evidence_summary_content = ( - evidence_summary_content - + "\n" - + make_markdown_table( - [ - ["Key", "Value"], - ["entity", str(record["entity"])], - ["risk_score", str(record["risk_score"])], - ["criticality", str(record["criticality"])], - ["record_type", str(record["record_type"])], - ["context_list", str(record["context_list"])], - ] - ) - ) + for record in panel_evidence_summary["resolved_record_list"]: + markdown_table = [["Key", "Value"]] + for key in [ + "entity", + "risk_score", + "criticality", + "record_type", + "context_list", + ]: + # Set value to N/A if key is not present in the record + markdown_table.append([key, str(record.get(key, "N/A"))]) + evidence_summary_content += f"\n{make_markdown_table(markdown_table)}" + bundle = stix2.Bundle(objects=bundle_objects, allow_custom=True).serialize() self.helper.send_stix2_bundle(bundle, update=True, work_id=self.work_id) diff --git a/external-import/recorded-future/src/rflib/rf_to_stix2.py b/external-import/recorded-future/src/rflib/rf_to_stix2.py index 99752b1b1a3..ec32762510d 100644 --- a/external-import/recorded-future/src/rflib/rf_to_stix2.py +++ b/external-import/recorded-future/src/rflib/rf_to_stix2.py @@ -197,7 +197,9 @@ def to_stix_bundle(self): allow_custom=True, ) - def map_data(self, rf_indicator, tlp, risklist_related_entities): + def map_data( + self, rf_indicator, tlp, risklist_related_entities, ta_to_intrusion_set=False + ): handled_related_entities_types = risklist_related_entities try: self.risk_score = int(rf_indicator["Risk"]) @@ -226,9 +228,11 @@ def map_data(self, rf_indicator, tlp, risklist_related_entities): for rf_related_element in element["entities"]: type_ = element["type"]["name"] name_ = rf_related_element["name"] - related_element = ENTITY_TYPE_MAPPER[type_]( - name_, type_, self.author, tlp + cls = _resolve_entity_class( + type_, + enabled=ta_to_intrusion_set, ) + related_element = cls(name_, type_, self.author, tlp) stix_objs = related_element.to_stix_objects() self.related_entities.extend(stix_objs) @@ -245,7 +249,7 @@ def build_bundle(self, stix_name): for entity in self.related_entities: if entity["type"] in ["indicator"]: relationships.append(self._create_rel("related-to", entity.id)) - if entity["type"] in ["attack-pattern", "malware", "threat-actor"]: + if entity["type"] in _STIX_DIRECTIONAL_REL_TYPES: relationships.append(self._create_rel("indicates", entity.id)) self.objects.extend(relationships) @@ -830,7 +834,9 @@ def add_description(self, description): def add_labels(self, labels): self.labels = labels - def map_data(self, rf_vuln, tlp, risklist_related_entities): + def map_data( + self, rf_vuln, tlp, risklist_related_entities, ta_to_intrusion_set=False + ): handled_related_entities_types = risklist_related_entities try: self.risk_score = int(rf_vuln["Risk"]) @@ -859,9 +865,11 @@ def map_data(self, rf_vuln, tlp, risklist_related_entities): for rf_related_element in element["entities"]: type_ = element["type"]["name"] name_ = rf_related_element["name"] - related_element = ENTITY_TYPE_MAPPER[type_]( - name_, type_, self.author, tlp + cls = _resolve_entity_class( + type_, + enabled=ta_to_intrusion_set, ) + related_element = cls(name_, type_, self.author, tlp) stix_objs = related_element.to_stix_objects() self.related_entities.extend(stix_objs) @@ -878,7 +886,7 @@ def build_bundle(self, stix_name): for entity in self.related_entities: if entity["type"] in ["indicator"]: relationships.append(self._create_rel("related-to", entity.id)) - if entity["type"] in ["attack-pattern", "malware", "threat-actor"]: + if entity["type"] in _STIX_DIRECTIONAL_REL_TYPES: relationships.append(self._create_rel("targets", entity.id)) self.objects.extend(relationships) @@ -1022,6 +1030,20 @@ def create_stix_objects(self): "Threat Actor": ThreatActor, } + +def _resolve_entity_class(type_: str, enabled: bool = False): + if enabled and type_ == "Threat Actor": + return IntrusionSet + return ENTITY_TYPE_MAPPER[type_] + + +# STIX types that justify a directional relationship (indicates / targets) +# rather than the generic "related-to" used for other indicators. +_STIX_DIRECTIONAL_REL_TYPES = frozenset( + ["attack-pattern", "malware", "threat-actor", "intrusion-set"] +) + + # maps RF types to the corresponding url to get the risk score INDICATOR_TYPE_URL_MAPPER = { "IpAddress": "ip", diff --git a/external-import/recorded-future/src/rflib/risk_list.py b/external-import/recorded-future/src/rflib/risk_list.py index 3e65e852edd..0b8bc2fe562 100644 --- a/external-import/recorded-future/src/rflib/risk_list.py +++ b/external-import/recorded-future/src/rflib/risk_list.py @@ -16,6 +16,7 @@ def __init__( risk_list_threshold, risklist_related_entities, riskrules_as_label, + ta_to_intrusion_set=False, ): threading.Thread.__init__(self) self.helper = helper @@ -24,6 +25,7 @@ def __init__( self.risk_list_threshold = risk_list_threshold self.risklist_related_entities = risklist_related_entities self.riskrules_as_label = riskrules_as_label + self.ta_to_intrusion_set = ta_to_intrusion_set def run(self): try: @@ -201,7 +203,12 @@ def run(self): last_seen=last_seen, ) - stix_obj.map_data(row, self.tlp, self.risklist_related_entities) + stix_obj.map_data( + row, + self.tlp, + self.risklist_related_entities, + ta_to_intrusion_set=self.ta_to_intrusion_set, + ) stix_obj.add_description(description) if self.riskrules_as_label: diff --git a/external-import/recorded-future/tests/test-requirements.txt b/external-import/recorded-future/tests/test-requirements.txt index b46752671ca..386ed5a0a36 100644 --- a/external-import/recorded-future/tests/test-requirements.txt +++ b/external-import/recorded-future/tests/test-requirements.txt @@ -1,3 +1,3 @@ # Main dependencies needs to be installed -r ../src/requirements.txt -pytest==8.4.2 +pytest==9.0.3 diff --git a/external-import/recorded-future/tests/test_settings.py b/external-import/recorded-future/tests/test_settings.py index 66dbb5c8cb3..c7df35e94c7 100644 --- a/external-import/recorded-future/tests/test_settings.py +++ b/external-import/recorded-future/tests/test_settings.py @@ -172,3 +172,27 @@ def test_none_or_empty_raises_value_error(field, value, error_message): _ConfigLoaderRecordedFuture(**kwargs) assert error_message in str(err) + + +def test_ta_to_intrusion_set_default_is_false(): + config = _ConfigLoaderRecordedFuture(**_minimal_kwargs()) + + assert config.ta_to_intrusion_set is False + + +def test_ta_to_intrusion_set_accepts_true(): + kwargs = _minimal_kwargs() + kwargs["ta_to_intrusion_set"] = True + + config = _ConfigLoaderRecordedFuture(**kwargs) + + assert config.ta_to_intrusion_set is True + + +def test_ta_to_intrusion_set_accepts_false(): + kwargs = _minimal_kwargs() + kwargs["ta_to_intrusion_set"] = False + + config = _ConfigLoaderRecordedFuture(**kwargs) + + assert config.ta_to_intrusion_set is False diff --git a/external-import/recorded-future/tests/tests_connector/test_rf_alerts.py b/external-import/recorded-future/tests/tests_connector/test_rf_alerts.py new file mode 100644 index 00000000000..083be52f701 --- /dev/null +++ b/external-import/recorded-future/tests/tests_connector/test_rf_alerts.py @@ -0,0 +1,244 @@ +from datetime import datetime, timedelta, timezone +from unittest.mock import MagicMock, call, patch + +from rflib.pyrf import Alert, PrioritiedRule, RecordedFutureApiClient +from rflib.rf_alerts import RecordedFutureAlertConnector + +_RULE = PrioritiedRule( + rule_id="rule-1", + rule_name="Test Rule", + rule_intelligence_goal="Test Goal", +) + + +def _make_alert(alert_id, alert_date="2025-01-01T00:00:00Z"): + """Create a minimal Alert object for testing.""" + return Alert( + alert_id=alert_id, + alert_url="https://example.com", + alert_date=alert_date, + alert_title=f"Alert {alert_id}", + alert_ai_insight="insight", + alert_rf_rule=_RULE, + alert_hits=[], + ) + + +def _build_connector(helper, rf_initial_lookback=48): + """Build a connector instance with mocked internals.""" + rf_api = MagicMock() + with patch.object( + RecordedFutureAlertConnector, "__init__", lambda self, *a, **kw: None + ): + connector = RecordedFutureAlertConnector.__new__(RecordedFutureAlertConnector) + connector.helper = helper + connector.work_id = "work-1" + connector.api_recorded_future = rf_api + connector.opencti_default_severity = "low" + connector.tlp = None + connector.author = MagicMock() + connector.update_rules = MagicMock() + connector.alert_to_incident = MagicMock() + connector.rf_initial_lookback = rf_initial_lookback + return connector + + +def test_set_state_called_for_each_alert(): + """set_state must be called once per successfully processed alert.""" + # Given: 3 alerts to process + helper = MagicMock() + helper.get_state.return_value = {} + helper.connect_name = "RecordedFuture" + helper.connector_id = "connector-1" + + connector = _build_connector(helper) + alerts = [_make_alert("a1"), _make_alert("a2"), _make_alert("a3")] + connector.collect_alerts = MagicMock(return_value=alerts) + + # When: the connector runs + connector.run() + + # Then: set_state is called once per alert + assert helper.set_state.call_count == len(alerts) + + +def test_set_state_uses_alert_date(): + """set_state should persist each alert's date as last_processed_alert_date.""" + # Given: 2 alerts with distinct dates + helper = MagicMock() + helper.get_state.return_value = {} + helper.connect_name = "RecordedFuture" + helper.connector_id = "connector-1" + + connector = _build_connector(helper) + alerts = [ + _make_alert("a1", alert_date="2025-06-01T10:00:00Z"), + _make_alert("a2", alert_date="2025-06-02T12:00:00Z"), + ] + connector.collect_alerts = MagicMock(return_value=alerts) + + # When: the connector runs + connector.run() + + # Then: each set_state call saves the alert's date with millisecond precision + helper.set_state.assert_has_calls( + [ + call({"last_processed_alert_date": "2025-06-01T10:00:00.000+00:00"}), + call({"last_processed_alert_date": "2025-06-02T12:00:00.000+00:00"}), + ] + ) + + +def test_migrates_old_state_key(): + """Old last_alerts_run key should be migrated to last_processed_alert_date.""" + # Given: state contains the old key name + helper = MagicMock() + helper.get_state.return_value = {"last_alerts_run": "2025-06-01T10:00:00"} + helper.connect_name = "RecordedFuture" + helper.connector_id = "connector-1" + + connector = _build_connector(helper) + connector.collect_alerts = MagicMock(return_value=[]) + + # When: the connector runs + connector.run() + + # Then: old key is removed and value is migrated to the new key + migration_call = helper.set_state.call_args_list[0] + saved_state = migration_call.args[0] + assert "last_alerts_run" not in saved_state + assert saved_state["last_processed_alert_date"] == "2025-06-01T10:00:00" + + +def test_alerts_processed_in_chronological_order(): + """Alerts must be sorted by date before processing, even if collected out of order.""" + # Given: alerts collected in reverse chronological order + helper = MagicMock() + helper.get_state.return_value = {} + helper.connect_name = "RecordedFuture" + helper.connector_id = "connector-1" + + connector = _build_connector(helper) + alerts = [ + _make_alert("a3", alert_date="2025-06-10T00:00:00Z"), + _make_alert("a1", alert_date="2025-06-01T00:00:00Z"), + _make_alert("a2", alert_date="2025-06-05T00:00:00Z"), + ] + connector.collect_alerts = MagicMock(return_value=alerts) + + # When: the connector runs + connector.run() + + # Then: alerts are processed oldest-first + processed_ids = [ + c.args[0].alert_id for c in connector.alert_to_incident.call_args_list + ] + assert processed_ids == ["a1", "a2", "a3"] + + +def test_checkpoint_excludes_last_processed_alert(): + """Checkpoint must equal the last alert's triggered time (ms precision). + + On the next run the API range ``(since,]`` naturally excludes this checkpoint. + """ + # Given: an alert with millisecond-precision triggered time + helper = MagicMock() + helper.get_state.return_value = {} + helper.connect_name = "RecordedFuture" + helper.connector_id = "connector-1" + + connector = _build_connector(helper) + alert = _make_alert("a1", alert_date="2025-09-23T12:03:58.567Z") + connector.collect_alerts = MagicMock(return_value=[alert]) + + # When: the connector runs + connector.run() + + # Then: the saved checkpoint preserves the exact alert triggered time + saved_state = helper.set_state.call_args_list[-1].args[0] + saved_date = datetime.fromisoformat(saved_state["last_processed_alert_date"]) + alert_date = datetime.fromisoformat("2025-09-23T12:03:58.567Z") + assert saved_date == alert_date + + +def test_triggered_param_uses_exclusive_start_and_millisecond_precision(): + """The triggered query parameter must use exclusive start '(' and millisecond precision.""" + # Given: a Recorded Future API client + helper = MagicMock() + rule = PrioritiedRule( + rule_id="rule-1", + rule_name="Test Rule", + rule_intelligence_goal="Test Goal", + ) + + client = RecordedFutureApiClient.__new__(RecordedFutureApiClient) + client.x_rf_token = "fake-token" + client.base_url = "https://api.recordedfuture.com/" + client.helper = helper + + fake_response = MagicMock() + fake_response.json.return_value = {"data": [], "counts": {"total": 0}} + + # When: _raw_get_alerts is called with a timestamp that has sub-second precision + since = datetime(2025, 9, 23, 12, 3, 58, 567000, tzinfo=timezone.utc) + with patch("rflib.pyrf.requests.get", return_value=fake_response) as mock_get: + client._raw_get_alerts(rule=rule, triggered_since=since) + + # Then: triggered param uses exclusive start bracket with milliseconds + params = mock_get.call_args.kwargs["params"] + assert params["triggered"] == "(2025-09-23T12:03:58.567Z,]" + + +def test_raw_get_alerts_sends_sort_params(): + """_raw_get_alerts must request alerts sorted by triggered date ascending.""" + # Given: a Recorded Future API client + helper = MagicMock() + rule = PrioritiedRule( + rule_id="rule-1", + rule_name="Test Rule", + rule_intelligence_goal="Test Goal", + ) + + client = RecordedFutureApiClient.__new__(RecordedFutureApiClient) + client.x_rf_token = "fake-token" + client.base_url = "https://api.recordedfuture.com/" + client.helper = helper + + fake_response = MagicMock() + fake_response.json.return_value = {"data": [], "counts": {"total": 0}} + + # When: _raw_get_alerts is called + with patch("rflib.pyrf.requests.get", return_value=fake_response) as mock_get: + client._raw_get_alerts( + rule=rule, + triggered_since=datetime(2025, 1, 1, tzinfo=timezone.utc), + ) + + # Then: request includes orderby=triggered and direction=asc + params = mock_get.call_args.kwargs["params"] + assert params["orderby"] == "triggered" + assert params["direction"] == "asc" + + +def test_first_run_uses_initial_lookback(): + """On first run (no state), collect_alerts must use now - rf_initial_lookback hours.""" + # Given: no prior state and a specific lookback + helper = MagicMock() + helper.get_state.return_value = {} + helper.connect_name = "RecordedFuture" + helper.connector_id = "connector-1" + + lookback_hours = 72 + connector = _build_connector(helper, rf_initial_lookback=lookback_hours) + connector.collect_alerts = MagicMock(return_value=[]) + + # When: the connector runs + before = datetime.now(tz=timezone.utc) + connector.run() + after = datetime.now(tz=timezone.utc) + + # Then: collect_alerts was called with a 'since' approximately now - lookback + since_arg = connector.collect_alerts.call_args.kwargs["since"] + expected_earliest = before - timedelta(hours=lookback_hours) + expected_latest = after - timedelta(hours=lookback_hours) + assert expected_earliest <= since_arg <= expected_latest diff --git a/external-import/recorded-future/tests/tests_connector/test_rf_to_stix2.py b/external-import/recorded-future/tests/tests_connector/test_rf_to_stix2.py index 9aa6a890e2f..31ac290caec 100644 --- a/external-import/recorded-future/tests/tests_connector/test_rf_to_stix2.py +++ b/external-import/recorded-future/tests/tests_connector/test_rf_to_stix2.py @@ -1,6 +1,10 @@ +import json + import pytest from pycti import Identity as PyctiIdentity from rflib.rf_to_stix2 import ENTITY_TYPE_MAPPER +from rflib.rf_to_stix2 import IPAddress as RFIPAddress +from rflib.rf_to_stix2 import Vulnerability as RFVulnerability from stix2 import ( URL, AttackPattern, @@ -9,6 +13,7 @@ File, Identity, Indicator, + IntrusionSet, IPv4Address, Location, Malware, @@ -18,17 +23,7 @@ Vulnerability, ) - -def fake_valid_author(): - return Identity( - id=PyctiIdentity.generate_id("Fake author", "organization"), - name="Fake author", - identity_class="organization", - ) - - -def fake_valid_markings(): - return "red" +# ── Tests ───────────────────────────────────────────────────────────────────── @pytest.mark.parametrize( @@ -61,16 +56,308 @@ def fake_valid_markings(): ("Threat Actor", "test threat actor", [Identity, ThreatActor]), ], ) +# Scenario: Each Recorded Future entity type maps to the expected STIX2 object type(s) def test_maps_rf_types_to_the_corresponding_stix_object(rf_type, name, created_objs): - """testing the correct generation of entities with ENTITY_TYPE_MAPPER""" - # Given - author = fake_valid_author() - tlp = fake_valid_markings() - rf_object = ENTITY_TYPE_MAPPER[rf_type](name, rf_type, author, tlp) + # Given a valid author identity and TLP marking + author = _given_author() + tlp = _given_tlp() + # And an RF entity of type with name resolved via ENTITY_TYPE_MAPPER + rf_object = _given_rf_entity(rf_type, name, author, tlp) + + # When the entity is converted to STIX objects + stix_objects = _when_to_stix_objects(rf_object) + + # Then each resulting STIX object matches the expected type at the corresponding index + _then_stix_types_match(stix_objects, created_objs) + + +# Scenario: Threat Actor related to a Vulnerability risk list row is ingested as an IntrusionSet +def test_vulnerability_map_data_produces_intrusion_set_for_threat_actor(): + # Given a valid author identity and TLP marking + author = _given_author() + tlp = _given_tlp() + # And a Vulnerability entity for CVE-2023-1234 + vuln = _given_vulnerability("CVE-2023-1234", author, tlp) + # And a risk list CSV row with risk score 75 + # And the row's Links contain a related entity of type "Threat Actor" named "APT28" + rf_row = _given_vuln_risk_row(risk=75, threat_actor_name="APT28") + + # When the vulnerability processes the risk row with ta_to_intrusion_set enabled + _when_vuln_map_data_with_ta_scope( + vuln, + rf_row, + tlp, + related_entity_types=["Threat Actor"], + ta_to_intrusion_set=True, + ) + + # Then exactly one IntrusionSet is present in the resolved related entities + _then_contains_intrusion_set(vuln.related_entities) + # And no ThreatActor object is present in the resolved related entities + _then_contains_no_threat_actor(vuln.related_entities) + + +# Scenario: Threat Actor related to an Indicator risk list row is ingested as an IntrusionSet +def test_indicator_map_data_produces_intrusion_set_for_threat_actor(): + # Given a valid author identity and TLP marking + author = _given_author() + tlp = _given_tlp() + # And an IP address indicator for "1.1.1.1" + indicator = _given_ip_indicator("1.1.1.1", author, tlp) + # And a risk list CSV row with risk score 75 + # And the row's Links hits contain a related entity of type "Threat Actor" named "APT28" + rf_row = _given_indicator_risk_row(risk=75, threat_actor_name="APT28") + + # When the indicator processes the risk row with ta_to_intrusion_set enabled + _when_indicator_map_data_with_ta_scope( + indicator, + rf_row, + tlp, + related_entity_types=["Threat Actor"], + ta_to_intrusion_set=True, + ) + + # Then exactly one IntrusionSet is present in the resolved related entities + _then_contains_intrusion_set(indicator.related_entities) + # And no ThreatActor object is present in the resolved related entities + _then_contains_no_threat_actor(indicator.related_entities) + + +# Scenario: Vulnerability Threat Actor → IntrusionSet when ta_to_intrusion_set is True +def test_vulnerability_map_data_respects_risk_list_enabled(): + # Given a valid author identity and TLP marking + author = _given_author() + tlp = _given_tlp() + # And a Vulnerability entity for CVE-2024-9999 + vuln = _given_vulnerability("CVE-2024-9999", author, tlp) + # And a risk list CSV row with risk score 80 whose Links contain "APT29" + rf_row = _given_vuln_risk_row(risk=80, threat_actor_name="APT29") + + # When map_data is called with ta_to_intrusion_set=True + _when_vuln_map_data_with_ta_scope( + vuln, + rf_row, + tlp, + related_entity_types=["Threat Actor"], + ta_to_intrusion_set=True, + ) + + # Then exactly one IntrusionSet is present in the resolved related entities + _then_contains_intrusion_set(vuln.related_entities) + # And no ThreatActor object is present + _then_contains_no_threat_actor(vuln.related_entities) + + +# Scenario: Vulnerability Threat Actor → ThreatActor when ta_to_intrusion_set is False +def test_vulnerability_map_data_respects_risk_list_disabled(): + # Given a valid author identity and TLP marking + author = _given_author() + tlp = _given_tlp() + # And a Vulnerability entity for CVE-2024-9999 + vuln = _given_vulnerability("CVE-2024-9999", author, tlp) + # And a risk list CSV row with risk score 80 whose Links contain "APT29" + rf_row = _given_vuln_risk_row(risk=80, threat_actor_name="APT29") + + # When map_data is called with ta_to_intrusion_set=False + _when_vuln_map_data_with_ta_scope( + vuln, + rf_row, + tlp, + related_entity_types=["Threat Actor"], + ta_to_intrusion_set=False, + ) + + # Then exactly one ThreatActor is present in the resolved related entities + _then_contains_threat_actor(vuln.related_entities) + # And no IntrusionSet object is present + _then_contains_no_intrusion_set(vuln.related_entities) + + +# Scenario: Indicator Threat Actor → IntrusionSet when ta_to_intrusion_set is True +def test_indicator_map_data_respects_risk_list_enabled(): + # Given a valid author identity and TLP marking + author = _given_author() + tlp = _given_tlp() + # And an IP address indicator for "2.2.2.2" + indicator = _given_ip_indicator("2.2.2.2", author, tlp) + # And a risk list CSV row with risk score 80 whose Links contain "APT29" + rf_row = _given_indicator_risk_row(risk=80, threat_actor_name="APT29") + + # When map_data is called with ta_to_intrusion_set=True + _when_indicator_map_data_with_ta_scope( + indicator, + rf_row, + tlp, + related_entity_types=["Threat Actor"], + ta_to_intrusion_set=True, + ) + + # Then exactly one IntrusionSet is present in the resolved related entities + _then_contains_intrusion_set(indicator.related_entities) + # And no ThreatActor object is present + _then_contains_no_threat_actor(indicator.related_entities) + + +# Scenario: Indicator Threat Actor → ThreatActor when ta_to_intrusion_set is False +def test_indicator_map_data_respects_risk_list_disabled(): + # Given a valid author identity and TLP marking + author = _given_author() + tlp = _given_tlp() + # And an IP address indicator for "2.2.2.2" + indicator = _given_ip_indicator("2.2.2.2", author, tlp) + # And a risk list CSV row with risk score 80 whose Links contain "APT29" + rf_row = _given_indicator_risk_row(risk=80, threat_actor_name="APT29") + + # When map_data is called with ta_to_intrusion_set=False + _when_indicator_map_data_with_ta_scope( + indicator, + rf_row, + tlp, + related_entity_types=["Threat Actor"], + ta_to_intrusion_set=False, + ) + + # Then exactly one ThreatActor is present in the resolved related entities + _then_contains_threat_actor(indicator.related_entities) + # And no IntrusionSet object is present + _then_contains_no_intrusion_set(indicator.related_entities) + + +# ── Given helpers ──────────────────────────────────────────────────────────── - # When - stix_objects = rf_object.to_stix_objects() - # Then +def _given_author(): + return Identity( # pylint: disable=W9101 # it's a test no real ingest + id=PyctiIdentity.generate_id("Fake author", "organization"), + name="Fake author", + identity_class="organization", + ) + + +def _given_tlp(): + return "red" + + +def _given_rf_entity(rf_type, name, author, tlp): + return ENTITY_TYPE_MAPPER[rf_type](name, rf_type, author, tlp) + + +def _given_vulnerability(name, author, tlp): + return RFVulnerability(name, "CyberVulnerability", author, tlp) + + +def _given_ip_indicator(ip, author, tlp): + return RFIPAddress(ip, "IpAddress", author, tlp) + + +def _given_vuln_risk_row(risk, threat_actor_name): + links = [ + { + "sections": [ + { + "section_id": {"name": "Indicators"}, + "lists": [ + { + "type": {"name": "Threat Actor"}, + "entities": [{"name": threat_actor_name}], + } + ], + } + ] + } + ] + return {"Risk": str(risk), "Links": json.dumps(links)} + + +def _given_indicator_risk_row(risk, threat_actor_name): + links = { + "hits": [ + { + "sections": [ + { + "section_id": {"name": "Indicators"}, + "lists": [ + { + "type": {"name": "Threat Actor"}, + "entities": [{"name": threat_actor_name}], + } + ], + } + ] + } + ] + } + return {"Risk": str(risk), "Links": json.dumps(links)} + + +# ── When helpers ───────────────────────────────────────────────────────────── + + +def _when_to_stix_objects(rf_object): + return rf_object.to_stix_objects() + + +def _when_vuln_map_data(vuln, rf_row, tlp, related_entity_types): + vuln.map_data(rf_row, tlp, risklist_related_entities=related_entity_types) + + +def _when_indicator_map_data(indicator, rf_row, tlp, related_entity_types): + indicator.map_data(rf_row, tlp, risklist_related_entities=related_entity_types) + + +def _when_vuln_map_data_with_ta_scope( + vuln, rf_row, tlp, related_entity_types, ta_to_intrusion_set +): + vuln.map_data( + rf_row, + tlp, + risklist_related_entities=related_entity_types, + ta_to_intrusion_set=ta_to_intrusion_set, + ) + + +def _when_indicator_map_data_with_ta_scope( + indicator, rf_row, tlp, related_entity_types, ta_to_intrusion_set +): + indicator.map_data( + rf_row, + tlp, + risklist_related_entities=related_entity_types, + ta_to_intrusion_set=ta_to_intrusion_set, + ) + + +# ── Then helpers ───────────────────────────────────────────────────────────── + + +def _then_stix_types_match(stix_objects, expected_types): for i, stix_obj in enumerate(stix_objects): - assert isinstance(stix_obj, created_objs[i]) + assert isinstance(stix_obj, expected_types[i]) + + +def _then_contains_intrusion_set(related_entities, expected_count=1): + found = [e for e in related_entities if isinstance(e, IntrusionSet)] + assert ( + len(found) == expected_count + ), f"Expected {expected_count} IntrusionSet in related_entities, got {len(found)}" + + +def _then_contains_no_threat_actor(related_entities): + found = [e for e in related_entities if isinstance(e, ThreatActor)] + assert ( + len(found) == 0 + ), f"Expected 0 ThreatActor in related_entities, got {len(found)}" + + +def _then_contains_threat_actor(related_entities, expected_count=1): + found = [e for e in related_entities if isinstance(e, ThreatActor)] + assert ( + len(found) == expected_count + ), f"Expected {expected_count} ThreatActor in related_entities, got {len(found)}" + + +def _then_contains_no_intrusion_set(related_entities): + found = [e for e in related_entities if isinstance(e, IntrusionSet)] + assert ( + len(found) == 0 + ), f"Expected 0 IntrusionSet in related_entities, got {len(found)}" diff --git a/external-import/red-flag-domains/src/requirements.txt b/external-import/red-flag-domains/src/requirements.txt index 77419e3f68d..74aa49434b9 100644 --- a/external-import/red-flag-domains/src/requirements.txt +++ b/external-import/red-flag-domains/src/requirements.txt @@ -1,5 +1,5 @@ python-dateutil==2.9.0.post0 -pycti==7.260309.0 +pycti==7.260515.0 stix2==3.0.1 pydantic >=2.8.2, <3 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk diff --git a/external-import/red-flag-domains/tests/test-requirements.txt b/external-import/red-flag-domains/tests/test-requirements.txt index bdef682113c..d405632324b 100644 --- a/external-import/red-flag-domains/tests/test-requirements.txt +++ b/external-import/red-flag-domains/tests/test-requirements.txt @@ -1,2 +1,2 @@ -r ../src/requirements.txt -pytest==8.4.2 +pytest==9.0.3 diff --git a/external-import/restore-files/src/requirements.txt b/external-import/restore-files/src/requirements.txt index e1e0bd9718c..e3a19393203 100644 --- a/external-import/restore-files/src/requirements.txt +++ b/external-import/restore-files/src/requirements.txt @@ -1 +1 @@ -pycti==7.260309.0 +pycti==7.260515.0 diff --git a/external-import/s3/src/requirements.txt b/external-import/s3/src/requirements.txt index a4399793a9a..76ec060a3df 100644 --- a/external-import/s3/src/requirements.txt +++ b/external-import/s3/src/requirements.txt @@ -1,2 +1,2 @@ -pycti==7.260309.0 +pycti==7.260515.0 boto3 \ No newline at end of file diff --git a/external-import/sekoia/src/requirements.txt b/external-import/sekoia/src/requirements.txt index 1c16de41d44..4ca452b404d 100644 --- a/external-import/sekoia/src/requirements.txt +++ b/external-import/sekoia/src/requirements.txt @@ -1,4 +1,4 @@ -pycti==7.260309.0 +pycti==7.260515.0 pydantic>=2.10, <3 pydantic-settings==2.10.1 python-dateutil==2.9.0.post0 diff --git a/external-import/sentinelone-incidents/src/requirements.txt b/external-import/sentinelone-incidents/src/requirements.txt index e68cca26f0f..6b26fb207cb 100644 --- a/external-import/sentinelone-incidents/src/requirements.txt +++ b/external-import/sentinelone-incidents/src/requirements.txt @@ -1,4 +1,4 @@ -pycti==7.260309.0 +pycti==7.260515.0 validators -requests +requests<=2.33.0 pyyaml diff --git a/external-import/sentinelone-threats/src/requirements.txt b/external-import/sentinelone-threats/src/requirements.txt index e1e0bd9718c..e3a19393203 100644 --- a/external-import/sentinelone-threats/src/requirements.txt +++ b/external-import/sentinelone-threats/src/requirements.txt @@ -1 +1 @@ -pycti==7.260309.0 +pycti==7.260515.0 diff --git a/external-import/servicenow/.build.env b/external-import/servicenow/.build.env new file mode 100644 index 00000000000..b163a6dfb21 --- /dev/null +++ b/external-import/servicenow/.build.env @@ -0,0 +1,4 @@ +CONNECTOR_CMD="-m src" +CONNECTOR_WORKDIR="/opt/connector" +EXTRA_PACKAGES="libxslt libxml2" + diff --git a/external-import/servicenow/src/requirements.txt b/external-import/servicenow/src/requirements.txt index d0fcf8da4b9..1e7c758ef1d 100644 --- a/external-import/servicenow/src/requirements.txt +++ b/external-import/servicenow/src/requirements.txt @@ -1,7 +1,7 @@ -pycti==7.260309.0 +pycti==7.260515.0 validators==0.35.0 pydantic>=2.10, <3 -requests~=2.32.3 +requests~=2.33.0 stix2~=3.0.1 PyYAML==6.0.3 aiohttp~=3.13.2 diff --git a/external-import/servicenow/tests/test-requirements.txt b/external-import/servicenow/tests/test-requirements.txt index b53283588d4..c5f50a66869 100644 --- a/external-import/servicenow/tests/test-requirements.txt +++ b/external-import/servicenow/tests/test-requirements.txt @@ -1,4 +1,4 @@ # Main dependencies needs to be installed -r ../src/requirements.txt -pytest<9,>=8.1.1 +pytest==9.0.3 pytest-asyncio<1,>=0.16 diff --git a/external-import/shadowserver/.env.sample b/external-import/shadowserver/.env.sample index d8d705f4644..df8743a0d3c 100644 --- a/external-import/shadowserver/.env.sample +++ b/external-import/shadowserver/.env.sample @@ -17,5 +17,6 @@ SHADOWSERVER_INCIDENT_SEVERITY=low SHADOWSERVER_INCIDENT_PRIORITY=P4 SHADOWSERVER_MAX_THREADS=8 SHADOWSERVER_REPORT_TYPES= +SHADOWSERVER_REPORT_NAMES= SHADOWSERVER_INITIAL_LOOKBACK=30 SHADOWSERVER_LOOKBACK=3 \ No newline at end of file diff --git a/external-import/shadowserver/__metadata__/CONNECTOR_CONFIG_DOC.md b/external-import/shadowserver/__metadata__/CONNECTOR_CONFIG_DOC.md index 00684c83fee..0a5f282960f 100644 --- a/external-import/shadowserver/__metadata__/CONNECTOR_CONFIG_DOC.md +++ b/external-import/shadowserver/__metadata__/CONNECTOR_CONFIG_DOC.md @@ -20,6 +20,7 @@ Below is an exhaustive enumeration of all configurable parameters available, eac | SHADOWSERVER_INCIDENT_SEVERITY | `string` | | string | | `"low"` | Default incident severity. | | SHADOWSERVER_INCIDENT_PRIORITY | `string` | | string | | `"P4"` | Default incident priority. | | SHADOWSERVER_REPORT_TYPES | `array` | | string | | `[]` | List of report types to retrieve. If empty, all report types will be retrieved. | +| SHADOWSERVER_REPORT_NAMES | `array` | | string | | `[]` | List of report names to retrieve. If empty, all report names will be retrieved. | | SHADOWSERVER_INITIAL_LOOKBACK | `integer` | | `0 <= x ` | | `30` | Number of days to look back for reports during the first run. | | SHADOWSERVER_LOOKBACK | `integer` | | `0 <= x ` | | `3` | Number of days to look back for reports during subsequent runs. | | SHADOWSERVER_MAX_THREADS | `integer` | | `1 <= x <= 32` | | `8` | Maximum number of threads used to download and transform reports in parallel. | diff --git a/external-import/shadowserver/__metadata__/connector_config_schema.json b/external-import/shadowserver/__metadata__/connector_config_schema.json index f31a357dec9..6649a45822f 100644 --- a/external-import/shadowserver/__metadata__/connector_config_schema.json +++ b/external-import/shadowserver/__metadata__/connector_config_schema.json @@ -106,6 +106,14 @@ }, "type": "array" }, + "SHADOWSERVER_REPORT_NAMES": { + "default": [], + "description": "List of report names to retrieve. If empty, all report names will be retrieved.", + "items": { + "type": "string" + }, + "type": "array" + }, "SHADOWSERVER_INITIAL_LOOKBACK": { "default": 30, "description": "Number of days to look back for reports during the first run.", diff --git a/external-import/shadowserver/config.yml.sample b/external-import/shadowserver/config.yml.sample index f9f57502c8b..0624342cdcf 100644 --- a/external-import/shadowserver/config.yml.sample +++ b/external-import/shadowserver/config.yml.sample @@ -19,5 +19,6 @@ shadowserver: incident_priority: 'P4' max_threads: 8 report_types: '' + report_names: '' initial_lookback: 30 lookback: 3 diff --git a/external-import/shadowserver/docker-compose.yml b/external-import/shadowserver/docker-compose.yml index 7b0ad33e4ed..b2732ca9c33 100644 --- a/external-import/shadowserver/docker-compose.yml +++ b/external-import/shadowserver/docker-compose.yml @@ -21,6 +21,7 @@ services: - SHADOWSERVER_INCIDENT_PRIORITY=P2 - SHADOWSERVER_MAX_THREADS=8 - SHADOWSERVER_REPORT_TYPES= + - SHADOWSERVER_REPORT_NAMES= - SHADOWSERVER_INITIAL_LOOKBACK=30 - SHADOWSERVER_LOOKBACK=3 restart: always diff --git a/external-import/shadowserver/requirements.txt b/external-import/shadowserver/requirements.txt index 40f246f91fb..482fc57dc9c 100644 --- a/external-import/shadowserver/requirements.txt +++ b/external-import/shadowserver/requirements.txt @@ -1,9 +1,9 @@ -pycti==7.260309.0 +pycti==7.260515.0 pydantic~=2.11.4 pydantic-settings~=2.9.1 python-magic~=0.4.27; sys_platform == 'linux' or sys_platform == 'darwin' python-magic-bin~=0.4.14; sys_platform == 'win32' -requests~=2.32.3 +requests~=2.33.0 stix2~=3.0.1 tabulate~=0.9.0 # Required for Pandas to Markdown connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk diff --git a/external-import/shadowserver/src/shadowserver/api.py b/external-import/shadowserver/src/shadowserver/api.py index 57636dae8d3..962735cba3a 100644 --- a/external-import/shadowserver/src/shadowserver/api.py +++ b/external-import/shadowserver/src/shadowserver/api.py @@ -90,7 +90,7 @@ def get_report_list( date: Optional[str] = None, limit: int = 1000, reports: Optional[List[str]] = None, - type: Optional[str] = None, + type: Optional[str | List[str]] = None, ) -> Optional[Dict]: """ Submit API request to retrieve a list of reports. @@ -99,7 +99,7 @@ def get_report_list( date (str, optional): The date for which to retrieve reports. Defaults to None. limit (int, optional): The maximum number of reports to retrieve. Defaults to 1000. reports (list, optional): A list of report names to retrieve. Defaults to None. - type (str, optional): The type of reports to retrieve. Defaults to None. + type (str or list, optional): The type(s) of reports to retrieve. Defaults to None. Returns: dict or None: The JSON response from the request, or None if an error occurred. diff --git a/external-import/shadowserver/src/shadowserver/connector.py b/external-import/shadowserver/src/shadowserver/connector.py index bb77c55634d..b21aef7b17f 100644 --- a/external-import/shadowserver/src/shadowserver/connector.py +++ b/external-import/shadowserver/src/shadowserver/connector.py @@ -55,10 +55,15 @@ def _collect_intelligence(self) -> Generator[tuple[list, str], None, None]: marking_refs=marking_refs, ) report_types = self.config.shadowserver.report_types + report_names = self.config.shadowserver.report_names if report_types: self.helper.connector_logger.info( f"Report types to retrieve: {', '.join(report_types)}." ) + if report_names: + self.helper.connector_logger.info( + f"Report names to retrieve: {', '.join(report_names)}." + ) for days_lookback in range(self.lookback, -1, -1): stix_objects = [] @@ -66,7 +71,7 @@ def _collect_intelligence(self) -> Generator[tuple[list, str], None, None]: date_str = date.strftime("%Y-%m-%d") self.helper.connector_logger.info(f"Getting reports for {date_str}.") report_list = shadowserver_api.get_report_list( - date=date_str, reports=report_types + date=date_str, reports=report_names, type=report_types ) if not report_list: self.helper.connector_logger.info(f"No reports found for {date_str}.") diff --git a/external-import/shadowserver/src/shadowserver/settings.py b/external-import/shadowserver/src/shadowserver/settings.py index e55b13bb49d..b712496112e 100644 --- a/external-import/shadowserver/src/shadowserver/settings.py +++ b/external-import/shadowserver/src/shadowserver/settings.py @@ -85,6 +85,10 @@ class ShadowserverConfig(BaseConfigModel): description="List of report types to retrieve. If empty, all report types will be retrieved.", default=[], ) + report_names: ListFromString = Field( + description="List of report names to retrieve. If empty, all report names will be retrieved.", + default=[], + ) initial_lookback: int = Field( description="Number of days to look back for reports during the first run.", default=30, diff --git a/external-import/shadowserver/src/shadowserver/stix_transform.py b/external-import/shadowserver/src/shadowserver/stix_transform.py index 74f212ac0df..5121347bc8e 100644 --- a/external-import/shadowserver/src/shadowserver/stix_transform.py +++ b/external-import/shadowserver/src/shadowserver/stix_transform.py @@ -711,16 +711,14 @@ def create_stix_note_from_data(self, labels: list = []): else: content = str(element) - abstract = f'Shadowserver {self.type} Report {self.report_id} - {element.get("timestamp", "") if isinstance(element, dict) else ""}' - created = ( - note_timestamp_to_datetime(element.get("timestamp", "")) - if isinstance(element, dict) - else datetime.now() + timestamp = ( + element.get("timestamp", "") if isinstance(element, dict) else "" ) + abstract = f"Shadowserver {self.type} Report {self.report_id} - {timestamp}" + created = note_timestamp_to_datetime(timestamp) if timestamp else None kwargs = { "abstract": abstract, "content": content, - "created": created, "created_by_ref": self.author_id, "object_marking_refs": self.marking_refs, "labels": labels, @@ -728,6 +726,8 @@ def create_stix_note_from_data(self, labels: list = []): "object_refs": [], "custom_properties": {"note_types": "external"}, } + if created is not None: + kwargs["created"] = created # Add the case and report to the object refs if self.case_id: @@ -737,7 +737,9 @@ def create_stix_note_from_data(self, labels: list = []): if kwargs["object_refs"]: stix_object = stix2.Note( - id=pycti.Note.generate_id(created, content), **kwargs + id=pycti.Note.generate_id(created=created, content=content), + allow_custom=True, + **kwargs, ) if stix_object and not self.stix_object_exists(kwargs.get("id")): self.stix_objects.append(stix_object) diff --git a/external-import/shadowserver/tests/conftest.py b/external-import/shadowserver/tests/conftest.py index 1413e72e689..0142eaffc44 100644 --- a/external-import/shadowserver/tests/conftest.py +++ b/external-import/shadowserver/tests/conftest.py @@ -33,6 +33,7 @@ def fixture_config_dict() -> dict[str, dict[str, Any]]: "incident_severity": "high", "incident_priority": "P1", "report_types": "scan_http,open_dns_resolvers", + "report_names": "company", "initial_lookback": 45, "lookback": 7, }, diff --git a/external-import/shadowserver/tests/test-requirements.txt b/external-import/shadowserver/tests/test-requirements.txt index 04d1e9ef580..b322115470c 100644 --- a/external-import/shadowserver/tests/test-requirements.txt +++ b/external-import/shadowserver/tests/test-requirements.txt @@ -1,4 +1,4 @@ -r ../requirements.txt freezegun~=1.5.2 -pytest~=8.3.5 +pytest~=9.0.3 pytest-mock~=3.14.0 \ No newline at end of file diff --git a/external-import/shadowserver/tests/tests_connector/test_api.py b/external-import/shadowserver/tests/tests_connector/test_api.py index a9c00209553..8de7c85ee8d 100644 --- a/external-import/shadowserver/tests/tests_connector/test_api.py +++ b/external-import/shadowserver/tests/tests_connector/test_api.py @@ -84,6 +84,43 @@ def test_get_report_list(self, shadow_server_api, mocker): assert len(report_list) > 0 assert len(report_list) == 12 + def test_get_report_list_with_type(self, shadow_server_api, mocker): + """Test get_report_list passes the type parameter to _request.""" + mock_request = mocker.patch.object(shadow_server_api, "_request") + mock_request.return_value = [] + + shadow_server_api.get_report_list(date=self.default_date, type=["scan_http"]) + + call_args = mock_request.call_args + assert call_args.kwargs["request"]["type"] == ["scan_http"] + assert "reports" not in call_args.kwargs["request"] + + def test_get_report_list_with_reports_and_type(self, shadow_server_api, mocker): + """Test get_report_list passes both reports and type to _request.""" + mock_request = mocker.patch.object(shadow_server_api, "_request") + mock_request.return_value = [] + + shadow_server_api.get_report_list( + date=self.default_date, + reports=["my_report"], + type=["scan_http"], + ) + + call_args = mock_request.call_args + assert call_args.kwargs["request"]["reports"] == ["my_report"] + assert call_args.kwargs["request"]["type"] == ["scan_http"] + + def test_get_report_list_without_optional_params(self, shadow_server_api, mocker): + """Test get_report_list omits reports and type when not provided.""" + mock_request = mocker.patch.object(shadow_server_api, "_request") + mock_request.return_value = [] + + shadow_server_api.get_report_list(date=self.default_date) + + call_args = mock_request.call_args + assert "reports" not in call_args.kwargs["request"] + assert "type" not in call_args.kwargs["request"] + def test_get_subscriptions(self, shadow_server_api, mocker): """Test the get_subscriptions method.""" self.shadowserver_fixture( diff --git a/external-import/shadowserver/tests/tests_connector/test_connector.py b/external-import/shadowserver/tests/tests_connector/test_connector.py index ffaa33da232..6528abacaf1 100644 --- a/external-import/shadowserver/tests/tests_connector/test_connector.py +++ b/external-import/shadowserver/tests/tests_connector/test_connector.py @@ -29,6 +29,7 @@ def test_connector_initialization(mocked_helper) -> None: "scan_http", "open_dns_resolvers", ] + assert connector.config.shadowserver.report_names == ["company"] assert connector.config.shadowserver.initial_lookback == 45 assert connector.config.shadowserver.lookback == 7 @@ -176,3 +177,51 @@ def test_connector_run( else: mocked_helper.api.work.initiate_work.assert_not_called() mocked_helper.api.work.to_processed.assert_not_called() + + +@pytest.mark.usefixtures("mock_config") +@freezegun.freeze_time("2025-07-01T12:00:00Z") +def test_collect_intelligence_passes_report_names_and_types( + mocked_helper, mocker +) -> None: + """Test _collect_intelligence passes report_names and report_types to the API.""" + connector = CustomConnector(helper=mocked_helper, config=_ConnectorSettings()) + connector.lookback = 0 # Single iteration + + mock_api_instance = MagicMock() + mock_api_instance.get_report_list.return_value = [ + {"id": "report-1", "report": "scan_http"} + ] + mock_api_instance.get_stix_report.return_value = [ + stix2.Identity( + id=pycti.Identity.generate_id(name="test", identity_class="organization"), + name="test", + ) + ] + mocker.patch( + "shadowserver.connector.ShadowserverAPI", + return_value=mock_api_instance, + ) + + results = list(connector._collect_intelligence()) + + # Verify report_names and report_types are passed to get_report_list + mock_api_instance.get_report_list.assert_called_once_with( + date="2025-07-01", + reports=["company"], + type=["scan_http", "open_dns_resolvers"], + ) + + # Verify log messages for both report_names and report_types + log_calls = [c.args[0] for c in mocked_helper.connector_logger.info.call_args_list] + assert any("Report names to retrieve: company." in msg for msg in log_calls) + assert any( + "Report types to retrieve: scan_http, open_dns_resolvers." in msg + for msg in log_calls + ) + + # Verify results are yielded + assert len(results) == 1 + stix_objects, date_str = results[0] + assert date_str == "2025-07-01" + assert len(stix_objects) == 1 diff --git a/external-import/shadowserver/tests/tests_connector/test_settings.py b/external-import/shadowserver/tests/tests_connector/test_settings.py index bd881615b8a..26f6fe2171a 100644 --- a/external-import/shadowserver/tests/tests_connector/test_settings.py +++ b/external-import/shadowserver/tests/tests_connector/test_settings.py @@ -44,6 +44,23 @@ }, id="minimal_valid_settings_dict", ), + pytest.param( + { + "opencti": {"url": "http://localhost:8080", "token": "test-token"}, + "connector": {}, + "shadowserver": { + "api_key": "SecretStr", + "api_secret": "SecretStr", + "marking": "TLP:CLEAR", + "create_incident": False, + "incident_severity": "low", + "incident_priority": "P4", + "report_names": "scan_http,blocklist", + "report_types": "scan_http", + }, + }, + id="valid_settings_with_report_names_and_types", + ), ], ) def test_settings_should_accept_valid_input(settings_dict): diff --git a/external-import/shadowserver/tests/tests_connector/test_stix_transform.py b/external-import/shadowserver/tests/tests_connector/test_stix_transform.py index b7e7a48add7..d38a6bc55fc 100644 --- a/external-import/shadowserver/tests/tests_connector/test_stix_transform.py +++ b/external-import/shadowserver/tests/tests_connector/test_stix_transform.py @@ -108,6 +108,74 @@ def test_create_stix_note_from_data(self): obj.startswith("note--") for obj in self.transformation.stix_objects ) + def test_create_stix_note_from_data_deterministic_id(self): + """Note IDs must be deterministic to prevent duplication on repeated runs.""" + + # Ensure a note will be created + self.transformation.case_id = ( + "case-incident--0cbce91a-8963-4e3c-bb7a-150615942944" + ) + self.transformation.report_id = "report--93cd2052-c4ee-4f52-bc0d-4a6dc96ff207" + + # When notes are created twice from the same data + self.transformation.create_stix_note_from_data() + first_ids = [ + obj.get("id") + for obj in self.transformation.stix_objects + if hasattr(obj, "get") and obj.get("type") == "note" + ] + + # Ensure the test actually produced notes + self.assertTrue(first_ids, "Test setup failed: no notes were created") + + self.transformation.stix_objects = [] + self.transformation.object_refs = [] + + self.transformation.create_stix_note_from_data() + second_ids = [ + obj.get("id") + for obj in self.transformation.stix_objects + if hasattr(obj, "get") and obj.get("type") == "note" + ] + + # Then the generated note IDs must be identical across both runs + self.assertEqual(first_ids, second_ids) + + def test_create_stix_note_from_data_no_timestamp(self): + """Notes created from elements without a timestamp must still have deterministic IDs.""" + + # Ensure a note will be created + self.transformation.case_id = ( + "case-incident--0cbce91a-8963-4e3c-bb7a-150615942944" + ) + self.transformation.report_id = "report--93cd2052-c4ee-4f52-bc0d-4a6dc96ff207" + + # Given report data that contains no timestamp field + self.transformation.report_list = [{"key": "value"}] + + # When notes are created twice from that data + self.transformation.create_stix_note_from_data() + first_ids = [ + obj.get("id") + for obj in self.transformation.stix_objects + if hasattr(obj, "get") and obj.get("type") == "note" + ] + + self.assertTrue(first_ids, "Test setup failed: no notes were created") + + self.transformation.stix_objects = [] + self.transformation.object_refs = [] + + self.transformation.create_stix_note_from_data() + second_ids = [ + obj.get("id") + for obj in self.transformation.stix_objects + if hasattr(obj, "get") and obj.get("type") == "note" + ] + + # Then the generated note IDs must still be identical + self.assertEqual(first_ids, second_ids) + def test_create_ip(self): ipv4 = self.transformation.create_ip("192.168.0.1") ipv6 = self.transformation.create_ip("2001:0db8:85a3:0000:0000:8a2e:0370:7334") diff --git a/external-import/silobreaker/src/requirements.txt b/external-import/silobreaker/src/requirements.txt index a40eabeaf72..3cbeda17861 100644 --- a/external-import/silobreaker/src/requirements.txt +++ b/external-import/silobreaker/src/requirements.txt @@ -1,4 +1,4 @@ -pycti==7.260309.0 +pycti==7.260515.0 html2text==2025.4.15 pydantic >=2.8.2, <3 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk diff --git a/external-import/silobreaker/tests/test-requirements.txt b/external-import/silobreaker/tests/test-requirements.txt index bdef682113c..d405632324b 100644 --- a/external-import/silobreaker/tests/test-requirements.txt +++ b/external-import/silobreaker/tests/test-requirements.txt @@ -1,2 +1,2 @@ -r ../src/requirements.txt -pytest==8.4.2 +pytest==9.0.3 diff --git a/external-import/socprime/src/requirements.txt b/external-import/socprime/src/requirements.txt index ba4792f71fa..cbd870fa586 100644 --- a/external-import/socprime/src/requirements.txt +++ b/external-import/socprime/src/requirements.txt @@ -1,7 +1,7 @@ -pycti==7.260309.0 +pycti==7.260515.0 pydantic==2.11.9 pydantic-settings==2.9.1 python-dateutil==2.9.0.post0 PyYAML==6.0.3 -requests==2.32.5 +requests==2.33.0 stix2==3.0.1 diff --git a/external-import/socprime/tests/test-requirements.txt b/external-import/socprime/tests/test-requirements.txt index 9f81081e8a8..27617b91c57 100644 --- a/external-import/socprime/tests/test-requirements.txt +++ b/external-import/socprime/tests/test-requirements.txt @@ -1,3 +1,3 @@ -r ../src/requirements.txt -pytest==8.4.0 +pytest==9.0.3 pytest-mock==3.14.1 \ No newline at end of file diff --git a/external-import/socradar/requirements.txt b/external-import/socradar/requirements.txt index 07833a4218a..fc3cc2d6ed2 100644 --- a/external-import/socradar/requirements.txt +++ b/external-import/socradar/requirements.txt @@ -1,6 +1,6 @@ -pycti==7.260309.0 +pycti==7.260515.0 python-dateutil==2.8.2 -requests==2.32.5 +requests==2.33.0 stix2==3.0.1 pydantic==2.11.7 pydantic-settings==2.9.1 diff --git a/external-import/sparta/src/requirements.txt b/external-import/sparta/src/requirements.txt index e5e0280e578..42d2cf36d22 100644 --- a/external-import/sparta/src/requirements.txt +++ b/external-import/sparta/src/requirements.txt @@ -1,6 +1,6 @@ -pycti==7.260309.0 +pycti==7.260515.0 stix2==3.0.1 -urllib3==2.6.3 +urllib3==2.7.0 pydantic>=2.10, <3 pydantic-settings==2.11.0 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk diff --git a/external-import/spycloud/pyproject.toml b/external-import/spycloud/pyproject.toml index 08429514aa6..11c6668476d 100644 --- a/external-import/spycloud/pyproject.toml +++ b/external-import/spycloud/pyproject.toml @@ -13,13 +13,13 @@ authors = [ ] requires-python = ">= 3.11, <3.13" dependencies = [ - "pycti==7.260309.0", + "pycti==7.260515.0", "validators~=0.35.0", ] [project.optional-dependencies] test = [ - "pytest>=8.1.1,<9", + "pytest>=9.0.3,<10", ] all = [ diff --git a/external-import/stopforumspam/src/requirements.txt b/external-import/stopforumspam/src/requirements.txt index 2e1238a8a8e..7ba225bbd73 100644 --- a/external-import/stopforumspam/src/requirements.txt +++ b/external-import/stopforumspam/src/requirements.txt @@ -1,2 +1,2 @@ -pycti==7.260309.0 -urllib3==2.6.3 +pycti==7.260515.0 +urllib3==2.7.0 diff --git a/external-import/stream-importer/src/importer/connector.py b/external-import/stream-importer/src/importer/connector.py index 51e5ca5bd4b..c78ecb3cb7f 100644 --- a/external-import/stream-importer/src/importer/connector.py +++ b/external-import/stream-importer/src/importer/connector.py @@ -6,7 +6,7 @@ import pika from minio import Minio from minio.commonconfig import CopySource -from pika.exceptions import NackError, UnroutableError +from pika.exceptions import ChannelClosedByBroker, NackError, UnroutableError from .lib.external_import import ExternalImportConnector from .metrics import Metrics @@ -232,9 +232,27 @@ def _send_event(self, channel, event: str) -> None: ) self.helper.connector_logger.debug("Event has been sent") self.helper.metric.inc("bundle_send") - except (UnroutableError, NackError): + except ChannelClosedByBroker as err: + # ``ChannelClosedByBroker`` is raised when the RabbitMQ broker + # closes the channel itself (most commonly because the message + # exceeds the broker-side ``max_message_size``). The channel + # is now permanently closed, so the previous catch-and-recurse + # pattern used for ``UnroutableError`` / ``NackError`` would + # have looped forever on the very same closed channel — every + # subsequent ``basic_publish`` would re-raise the same + # exception. Just record the metric, log the error, and drop + # this event so the outer per-file loop in :meth:`send_event` + # can open a fresh channel for the next file. self.metrics.send_error() - self.helper.connector_logger.error("Unable to send bundle, retry...") + self.helper.connector_logger.error( + f"Unable to send bundle ({type(err).__name__}): {err}; " + "channel is closed, skipping retry." + ) + except (NackError, UnroutableError) as err: + self.metrics.send_error() + self.helper.connector_logger.error( + f"Unable to send bundle ({type(err).__name__}): {err}, retrying..." + ) self._send_event(channel, event) diff --git a/external-import/stream-importer/src/requirements.txt b/external-import/stream-importer/src/requirements.txt index bd120f35910..3d7f6bda588 100644 --- a/external-import/stream-importer/src/requirements.txt +++ b/external-import/stream-importer/src/requirements.txt @@ -1,2 +1,2 @@ minio==7.2.18 -pycti==7.260309.0 \ No newline at end of file +pycti==7.260515.0 \ No newline at end of file diff --git a/external-import/sublime/Dockerfile b/external-import/sublime/Dockerfile index 02ec1bee1a8..c32126bcf7b 100644 --- a/external-import/sublime/Dockerfile +++ b/external-import/sublime/Dockerfile @@ -2,6 +2,7 @@ FROM python:3.12-alpine # Copy the connector COPY src /opt/opencti-connector-sublime +WORKDIR /opt/opencti-connector-sublime # Install Python modules # hadolint ignore=DL3003 @@ -13,7 +14,5 @@ RUN cd /opt/opencti-connector-sublime && \ apk del git build-base && \ rm -rf /var/cache/apk/* -# Expose and entrypoint -COPY entrypoint.sh / -RUN chmod +x /entrypoint.sh -ENTRYPOINT ["/entrypoint.sh"] \ No newline at end of file +# Execute the connector +CMD [ "python", "main.py" ] \ No newline at end of file diff --git a/external-import/sublime/README.md b/external-import/sublime/README.md index 60b057603f3..7268ebe5351 100644 --- a/external-import/sublime/README.md +++ b/external-import/sublime/README.md @@ -28,38 +28,13 @@ Example details added to an event incident: ## Installation -### Configuration - -Use the provided Docker Compose example to configure the connector inside your existing OpenCTI deployment. -Add the environment variables below to your OpenCTI `docker-compose.yml` under the connector service. - -Required environment variables in `docker-compose.yml`: - -```yaml - environment: - - OPENCTI_URL=http://opencti:8080 - - OPENCTI_TOKEN=ChangeMe - - - CONNECTOR_ID=a2c156d3-3bbe-4170-b370-bf6faebb56e2 - - CONNECTOR_NAME=Sublime Security Incidents - - CONNECTOR_SCOPE=sublime - - CONNECTOR_LOG_LEVEL=info - - CONNECTOR_DURATION_PERIOD=PT3M # ISO 8601 duration (PT10M = 10 minutes) - - - SUBLIME_URL=https://platform.sublime.security - - SUBLIME_TOKEN=ChangeMe - - SUBLIME_INCIDENT_TYPE=phishing # STIX incident type - - SUBLIME_INCIDENT_PREFIX=Sublime Incident - - - SUBLIME_CASE_PREFIX=Sublime - - - SUBLIME_AUTO_CREATE_CASES=false # Automatically create cases for incidents - - SUBLIME_VERDICTS=malicious # Multiple verdicts can be comma-separated: malicious,suspicious - - SUBLIME_SET_PRIORITY=true # Enable priority mapping from attack score verdict - - SUBLIME_SET_SEVERITY=false # Enable severity mapping from attack score verdict - - SUBLIME_CONFIDENCE_LEVEL=80 # 0-100 confidence score - - SUBLIME_FIRST_RUN_DURATION=PT8H # Duration for initial data fetch in ISO 8601 format (P14D = 14 days, PT1H = 1 hour) - - SUBLIME_FORCE_HISTORICAL=false # Force historical fetch by overriding existing state - - SUBLIME_BATCH_SIZE=100 # Number of message groups to process per batch (default: 100) -``` +## Configuration + +Find all the configuration variables available here: [Connector Configurations](./__metadata__/CONNECTOR_CONFIG_DOC.md) + +_The `opencti` and `connector` options in the `docker-compose.yml` and `config.yml` are the same as for any other connector. +For more information regarding variables, please refer to [OpenCTI's documentation on connectors](https://docs.opencti.io/latest/deployment/connectors/)._ + ### Deployment @@ -80,37 +55,6 @@ Monitor connector logs: docker compose logs -f connector-sublime ``` -## Configuration Reference - -### Required Variables - -| Variable | Description | -|----------|-------------| -| `OPENCTI_URL` | OpenCTI platform URL | -| `OPENCTI_TOKEN` | OpenCTI API authentication token | -| `CONNECTOR_ID` | Unique identifier for this connector instance | -| `CONNECTOR_NAME` | Display name for the connector (`Sublime Security Incidents`) | -| `CONNECTOR_SCOPE` | Connector scope identifier | -| `SUBLIME_URL` | Sublime platform URL for API connections | -| `SUBLIME_TOKEN` | Sublime Security API authentication token | - -### Optional Variables - -| Variable | Default | Description | -|----------|---------|-------------| -| `CONNECTOR_DURATION_PERIOD` | `PT3M` | Polling interval (ISO 8601 duration format) | -| `SUBLIME_INCIDENT_TYPE` | `phishing` | Label to apply to incident type | -| `SUBLIME_INCIDENT_PREFIX` | `Sublime Incident - ` | Prefix for incident object names | -| `SUBLIME_CASE_PREFIX` | `Sublime - ` | Prefix for case object names | -| `SUBLIME_AUTO_CREATE_CASES` | `false` | Automatically create investigation cases | -| `SUBLIME_VERDICTS` | `malicious` | Comma-separated attack score verdicts to process | -| `SUBLIME_CONFIDENCE_LEVEL` | `80` | Confidence score for STIX objects (0-100) | -| `SUBLIME_FIRST_RUN_DURATION` | `PT8H` | ISO 8601 duration for initial data fetch on first run | -| `SUBLIME_FORCE_HISTORICAL` | `false` | Force historical fetch ignoring existing state for correcting improper states | -| `SUBLIME_SET_PRIORITY` | `true` | Enable priority mapping from attack score | -| `SUBLIME_SET_SEVERITY` | `false` | Enable severity mapping from attack score | -| `SUBLIME_BATCH_SIZE` | `100` | Number of messages per processing batch | - ## API Token Configuration ### Sublime Security API Token diff --git a/external-import/sublime/__metadata__/CONNECTOR_CONFIG_DOC.md b/external-import/sublime/__metadata__/CONNECTOR_CONFIG_DOC.md new file mode 100644 index 00000000000..f54cfedf9c0 --- /dev/null +++ b/external-import/sublime/__metadata__/CONNECTOR_CONFIG_DOC.md @@ -0,0 +1,28 @@ +# Connector Configurations + +Below is an exhaustive enumeration of all configurable parameters available, each accompanied by detailed explanations of their purposes, default behaviors, and usage guidelines to help you understand and utilize them effectively. + +### Type: `object` + +| Property | Type | Required | Possible values | Default | Description | +| -------- | ---- | -------- | --------------- | ------- | ----------- | +| OPENCTI_URL | `string` | ✅ | Format: [`uri`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | The base URL of the OpenCTI instance. | +| OPENCTI_TOKEN | `string` | ✅ | string | | The API token to connect to OpenCTI. | +| SUBLIME_TOKEN | `string` | ✅ | Format: [`password`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | Sublime Security API authentication token. | +| CONNECTOR_NAME | `string` | | string | `"Sublime Security"` | The name of the connector. | +| CONNECTOR_SCOPE | `array` | | string | `["sublime"]` | The scope or type of data the connector is importing, either a MIME type or Stix Object (for information only). | +| CONNECTOR_LOG_LEVEL | `string` | | `debug` `info` `warn` `warning` `error` | `"error"` | The minimum level of logs to display. | +| CONNECTOR_TYPE | `const` | | `EXTERNAL_IMPORT` | `"EXTERNAL_IMPORT"` | | +| CONNECTOR_DURATION_PERIOD | `string` | | Format: [`duration`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | `"PT3M"` | The period of time to await between two runs of the connector. | +| SUBLIME_URL | `string` | | Format: [`uri`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | `"https://platform.sublime.security"` | Sublime platform URL for API connections. | +| SUBLIME_INCIDENT_TYPE | `string` | | string | `"phishing"` | Label to apply to incident type. | +| SUBLIME_INCIDENT_PREFIX | `string` | | string | `"Sublime Incident - "` | Prefix for incident object names. | +| SUBLIME_CASE_PREFIX | `string` | | string | `"Case - "` | Prefix for case object names. | +| SUBLIME_AUTO_CREATE_CASES | `boolean` | | boolean | `false` | Automatically create investigation cases. | +| SUBLIME_VERDICTS | `array` | | string | `["malicious"]` | Comma-separated attack score verdicts to process. | +| SUBLIME_SET_PRIORITY | `boolean` | | boolean | `true` | Enable priority mapping from attack score. | +| SUBLIME_SET_SEVERITY | `boolean` | | boolean | `true` | Enable severity mapping from attack score. | +| SUBLIME_FIRST_RUN_DURATION | `string` | | Format: [`duration`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | `"PT8H"` | ISO 8601 duration for initial data fetch on first run. | +| SUBLIME_FORCE_HISTORICAL | `boolean` | | boolean | `false` | Force historical fetch ignoring existing state for correcting improper states. | +| SUBLIME_BATCH_SIZE | `integer` | | integer | `100` | Number of messages per processing batch. | +| SUBLIME_TLP_LEVEL | `string` | | `clear` `white` `green` `amber` `amber+strict` `red` | `"amber"` | TLP marking level applied to created STIX entities. | diff --git a/external-import/sublime/__metadata__/connector_config_schema.json b/external-import/sublime/__metadata__/connector_config_schema.json new file mode 100644 index 00000000000..8b66fabe1bd --- /dev/null +++ b/external-import/sublime/__metadata__/connector_config_schema.json @@ -0,0 +1,145 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://www.filigran.io/connectors/sublime_config.schema.json", + "type": "object", + "properties": { + "OPENCTI_URL": { + "description": "The base URL of the OpenCTI instance.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "OPENCTI_TOKEN": { + "description": "The API token to connect to OpenCTI.", + "type": "string" + }, + "CONNECTOR_NAME": { + "default": "Sublime Security", + "description": "The name of the connector.", + "type": "string" + }, + "CONNECTOR_SCOPE": { + "default": [ + "sublime" + ], + "description": "The scope or type of data the connector is importing, either a MIME type or Stix Object (for information only).", + "items": { + "type": "string" + }, + "type": "array" + }, + "CONNECTOR_LOG_LEVEL": { + "default": "error", + "description": "The minimum level of logs to display.", + "enum": [ + "debug", + "info", + "warn", + "warning", + "error" + ], + "type": "string" + }, + "CONNECTOR_TYPE": { + "const": "EXTERNAL_IMPORT", + "default": "EXTERNAL_IMPORT", + "type": "string" + }, + "CONNECTOR_DURATION_PERIOD": { + "default": "PT3M", + "description": "The period of time to await between two runs of the connector.", + "format": "duration", + "type": "string" + }, + "SUBLIME_URL": { + "default": "https://platform.sublime.security", + "description": "Sublime platform URL for API connections.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "SUBLIME_TOKEN": { + "description": "Sublime Security API authentication token.", + "format": "password", + "type": "string", + "writeOnly": true + }, + "SUBLIME_INCIDENT_TYPE": { + "default": "phishing", + "description": "Label to apply to incident type.", + "type": "string" + }, + "SUBLIME_INCIDENT_PREFIX": { + "default": "Sublime Incident - ", + "description": "Prefix for incident object names.", + "type": "string" + }, + "SUBLIME_CASE_PREFIX": { + "default": "Case - ", + "description": "Prefix for case object names.", + "type": "string" + }, + "SUBLIME_AUTO_CREATE_CASES": { + "default": false, + "description": "Automatically create investigation cases.", + "type": "boolean" + }, + "SUBLIME_VERDICTS": { + "default": [ + "malicious" + ], + "description": "Comma-separated attack score verdicts to process.", + "items": { + "type": "string" + }, + "type": "array" + }, + "SUBLIME_SET_PRIORITY": { + "default": true, + "description": "Enable priority mapping from attack score.", + "type": "boolean" + }, + "SUBLIME_SET_SEVERITY": { + "default": true, + "description": "Enable severity mapping from attack score.", + "type": "boolean" + }, + "SUBLIME_FIRST_RUN_DURATION": { + "default": "PT8H", + "description": "ISO 8601 duration for initial data fetch on first run.", + "format": "duration", + "type": "string" + }, + "SUBLIME_FORCE_HISTORICAL": { + "default": false, + "description": "Force historical fetch ignoring existing state for correcting improper states.", + "type": "boolean" + }, + "SUBLIME_BATCH_SIZE": { + "default": 100, + "description": "Number of messages per processing batch.", + "type": "integer" + }, + "SUBLIME_TLP_LEVEL": { + "description": "TLP marking level applied to created STIX entities.", + "enum": [ + "clear", + "white", + "green", + "amber", + "amber+strict", + "red" + ], + "type": "string", + "default": "amber" + } + }, + "required": [ + "OPENCTI_URL", + "OPENCTI_TOKEN", + "SUBLIME_TOKEN" + ], + "additionalProperties": true +} \ No newline at end of file diff --git a/external-import/sublime/__metadata__/connector_manifest.json b/external-import/sublime/__metadata__/connector_manifest.json index 9d46d7ce79c..e671bf627e1 100644 --- a/external-import/sublime/__metadata__/connector_manifest.json +++ b/external-import/sublime/__metadata__/connector_manifest.json @@ -8,14 +8,14 @@ "Commercial Threat Intel", "Incident Response & Ticketing" ], - "verified": false, - "last_verified_date": null, + "verified": true, + "last_verified_date": "2026-04-30", "playbook_supported": false, "max_confidence_level": 50, "support_version": ">=6.8.12", "subscription_link": "https://sublime.security/", "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/external-import/sublime", - "manager_supported": false, + "manager_supported": true, "container_version": "rolling", "container_image": "opencti/connector-sublime", "container_type": "EXTERNAL_IMPORT" diff --git a/external-import/sublime/config.yml.sample b/external-import/sublime/config.yml.sample new file mode 100644 index 00000000000..ef706fc1690 --- /dev/null +++ b/external-import/sublime/config.yml.sample @@ -0,0 +1,37 @@ +# Sublime Security OpenCTI Connector Configuration +# This config replicates docker-compose.yml options for non-Docker installs +# Copy this file to config.yml and customize for your environment + +# OpenCTI Configuration +opencti: + url: 'http://localhost' + token: "ChangeMe" + +# Connector Configuration +connector: + # id: "d5003f91-27b0-4b4e-995d-a4b9a8a970a4" + # name: "Sublime Security Incidents" + # scope: "sublime" + # log_level: "error" + # duration_period: "PT3M" # ISO 8601 duration (PT10M = 10 minutes) + +# Sublime Security Configuration +sublime: + token: "ChangeMe" # Required + # url: "https://platform.sublime.security" + + # verdicts: "malicious" # Comma-separated: malicious,suspicious + # incident_type: "phishing" # STIX incident type + + # incident_prefix: "Sublime Incident - " + # case_prefix: "Case - " + + # auto_create_cases: false # Automatically create cases for incidents + + # set_priority: true # Enable priority mapping from attack score verdict + # set_severity: true # Enable severity mapping from attack score verdict + + # first_run_duration: "PT8H" # Duration for initial data fetch in ISO 8601 format + # force_historical: false # Force historical fetch by overriding existing state + # batch_size: 100 # Number of message groups to process per batch (default: 100) + # tlp_level: "amber" \ No newline at end of file diff --git a/external-import/sublime/docker-compose.yml b/external-import/sublime/docker-compose.yml index d634d0b2941..e1e5503ae81 100644 --- a/external-import/sublime/docker-compose.yml +++ b/external-import/sublime/docker-compose.yml @@ -5,22 +5,22 @@ services: environment: - OPENCTI_URL=http://localhost - OPENCTI_TOKEN=ChangeMe - - CONNECTOR_ID=ChangeMe - - CONNECTOR_NAME=Sublime Security - - CONNECTOR_SCOPE=sublime - - CONNECTOR_LOG_LEVEL=info - - CONNECTOR_DURATION_PERIOD=PT3M - - SUBLIME_URL=https://platform.sublime.security + # - CONNECTOR_ID=d5003f91-27b0-4b4e-995d-a4b9a8a970a4 + # - CONNECTOR_NAME=Sublime Security + # - CONNECTOR_SCOPE=sublime + # - CONNECTOR_LOG_LEVEL=error + # - CONNECTOR_DURATION_PERIOD=PT3M + # - SUBLIME_URL=https://platform.sublime.security - SUBLIME_TOKEN=ChangeMe - - SUBLIME_INCIDENT_TYPE=phishing - - SUBLIME_INCIDENT_PREFIX=Sublime Incident - - - SUBLIME_CASE_PREFIX=Sublime - - - SUBLIME_AUTO_CREATE_CASES=false - - SUBLIME_VERDICTS=malicious - - SUBLIME_SET_PRIORITY=true - - SUBLIME_SET_SEVERITY=false - - SUBLIME_CONFIDENCE_LEVEL=80 - - SUBLIME_FIRST_RUN_DURATION=PT8H - - SUBLIME_FORCE_HISTORICAL=false - - SUBLIME_BATCH_SIZE=100 + # - SUBLIME_INCIDENT_TYPE=phishing + # - SUBLIME_INCIDENT_PREFIX=Sublime Incident - + # - SUBLIME_CASE_PREFIX=Case - + # - SUBLIME_AUTO_CREATE_CASES=false + # - SUBLIME_VERDICTS=malicious + # - SUBLIME_SET_PRIORITY=true + # - SUBLIME_SET_SEVERITY=true + # - SUBLIME_FIRST_RUN_DURATION=PT8H + # - SUBLIME_FORCE_HISTORICAL=false + # - SUBLIME_BATCH_SIZE=100 + # - SUBLIME_TLP_LEVEL=amber restart: always diff --git a/external-import/sublime/entrypoint.sh b/external-import/sublime/entrypoint.sh deleted file mode 100644 index 901514cc7d7..00000000000 --- a/external-import/sublime/entrypoint.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh - -# Go to the Sublime connector directory -cd /opt/opencti-connector-sublime - -# Launch the connector -python3 sublime_connector.py \ No newline at end of file diff --git a/external-import/sublime/src/config.yml.sample b/external-import/sublime/src/config.yml.sample deleted file mode 100644 index e368ce39e4a..00000000000 --- a/external-import/sublime/src/config.yml.sample +++ /dev/null @@ -1,40 +0,0 @@ -# Sublime Security OpenCTI Connector Configuration -# This config replicates docker-compose.yml options for non-Docker installs -# Copy this file to config.yml and customize for your environment - -# OpenCTI Configuration -opencti: - url: 'http://localhost' - token: "ChangeMe" - -# Connector Configuration -connector: - type: 'EXTERNAL_IMPORT' - # Must match CONNECTOR_ID in docker-compose.yml if you use both - id: "a2c156d3-3bbe-4170-b370-bf6faebb56e2" - name: "Sublime Security Incidents" - scope: "sublime" - log_level: "info" - duration_period: "PT3M" # ISO 8601 duration (PT10M = 10 minutes) - -# Sublime Security Configuration -sublime: - # Required - token: "ChangeMe" - url: "https://platform.sublime.security" - - verdicts: "malicious" # Comma-separated: malicious,suspicious - incident_type: "phishing" # STIX incident type - - incident_prefix: "Sublime Incident - " - case_prefix: "Sublime - " - - auto_create_cases: false # Automatically create cases for incidents - - set_priority: true # Enable priority mapping from attack score verdict - set_severity: false # Enable severity mapping from attack score verdict - confidence_level: 80 # 0-100 confidence score - - first_run_duration: "PT8H" # Duration for initial data fetch in ISO 8601 format - force_historical: false # Force historical fetch by overriding existing state - batch_size: 100 # Number of message groups to process per batch (default: 100) \ No newline at end of file diff --git a/external-import/sublime/src/connector/__init__.py b/external-import/sublime/src/connector/__init__.py new file mode 100644 index 00000000000..6d5b85e57cd --- /dev/null +++ b/external-import/sublime/src/connector/__init__.py @@ -0,0 +1,7 @@ +from connector.settings import ConnectorSettings +from connector.sublime_connector import SublimeConnector + +__all__ = [ + "ConnectorSettings", + "SublimeConnector", +] diff --git a/external-import/sublime/src/connector/converter_to_stix.py b/external-import/sublime/src/connector/converter_to_stix.py new file mode 100644 index 00000000000..481b2e8a03a --- /dev/null +++ b/external-import/sublime/src/connector/converter_to_stix.py @@ -0,0 +1,299 @@ +import ipaddress + +import stix2 +from connectors_sdk.models.enums import TLPLevel +from pycti import ( + CaseIncident, + CustomObjectCaseIncident, + Identity, + Incident, + Indicator, + MarkingDefinition, + OpenCTIConnectorHelper, + StixCoreRelationship, +) + + +class ConverterToStix: + """ + Provides methods for converting various types of input data into STIX 2.1 objects. + + REQUIREMENTS: + - `generate_id()` methods from `pycti` library MUST be used to generate the `id` of each entity (except observables), + e.g. `pycti.Identity.generate_id(name="Source Name", identity_class="organization")` for a STIX Identity. + """ + + def __init__( + self, + helper: OpenCTIConnectorHelper, + tlp_level: TLPLevel, + ): + """ + Initialize the converter with necessary configuration. + For log purpose, the connector's helper CAN be injected. + Other arguments CAN be added (e.g. `tlp_level`) if necessary. + + Args: + helper (OpenCTIConnectorHelper): The helper of the connector. Used for logs. + tlp_level (TLPLevel): The TLP level to add to the created STIX entities. + """ + self.helper = helper + + self.author = self.create_author() + self.tlp_marking = self._create_tlp_marking(level=tlp_level.value) + + @staticmethod + def create_author() -> stix2.Identity: + """ + Create Author + :return: Author in Stix2 object + """ + author = stix2.Identity( + id=Identity.generate_id(name="Sublime", identity_class="organization"), + name="Sublime", + identity_class="organization", + description="Email Security Platform", + custom_properties={"x_opencti_type": "Organization"}, + allow_custom=True, + ) + return author + + def create_case_incident( + self, + name: str, + created: str, + description: str = None, + object_refs: list = None, + external_references: list = None, + severity: str = None, + priority: str = None, + ): + """Create Custom Case Incident STIX object with deterministic ID. + + Args: + name: Case incident name. + created: ISO 8601 timestamp used for deterministic ID generation. + description: Case description. + object_refs: List of STIX object IDs to include in the case. + external_references: List of external reference dicts. + severity: Severity level (e.g. "high", "medium", "low"). + priority: Priority level (e.g. "P1", "P2", "P3", "P4"). + + Returns: + CustomObjectCaseIncident: STIX case-incident object. + """ + case_data = { + "id": CaseIncident.generate_id(name=name, created=created), + "name": name, + "created": created, + "created_by_ref": self.author["id"], + "object_marking_refs": [self.tlp_marking.id], + } + if description: + case_data["description"] = description + if object_refs: + case_data["object_refs"] = object_refs + if external_references: + case_data["external_references"] = external_references + if severity: + case_data["severity"] = severity + if priority: + case_data["priority"] = priority + + return CustomObjectCaseIncident(**case_data) + + def create_domain_name(self, value: str): + """Create DomainName object""" + return stix2.DomainName( + value=value, + object_marking_refs=[self.tlp_marking.id], + custom_properties={ + "x_opencti_created_by_ref": self.author["id"], + }, + ) + + def create_email_address(self, value: str): + """Create EmailAddress object""" + return stix2.EmailAddress( + value=value, + object_marking_refs=[self.tlp_marking.id], + custom_properties={ + "x_opencti_created_by_ref": self.author["id"], + }, + ) + + def create_email_message(self, email_data: dict): + """Create EmailMessage object""" + return stix2.EmailMessage(**email_data) + + def create_file( + self, + hashes: dict, + file_name: str | None, + file_size: int | None, + mime_type: str | None, + ): + """Create File object""" + return stix2.File( + hashes=hashes, + name=file_name, + size=file_size, + mime_type=mime_type, + object_marking_refs=[self.tlp_marking.id], + custom_properties={ + "x_opencti_created_by_ref": self.author["id"], + }, + ) + + def create_incident( + self, + name, + created_timestamp, + description, + group_id, + incident_type, + url, + severity, + ): + """Create Incident object""" + return stix2.Incident( + id=Incident.generate_id(name, created_timestamp), + name=name, + description=description, + created=created_timestamp, + created_by_ref=self.author["id"], + object_marking_refs=[self.tlp_marking.id], + external_references=[ + { + "source_name": "Sublime", + "description": "View this message group in Sublime platform", + "url": url, + "external_id": str(group_id or "unknown"), + } + ], + custom_properties={ + "x_opencti_type": "Incident", + "x_opencti_incident_type": incident_type, + "x_sublime_security_canonical_id": group_id, + }, + allow_custom=True, + incident_type=incident_type.capitalize(), + source="Sublime Security", + severity=severity, + ) + + def create_indicator(self, pattern): + """Create Indicator object""" + return stix2.Indicator( + id=Indicator.generate_id(pattern), + pattern=pattern, + pattern_type="stix", + labels=["malicious-activity"], + created_by_ref=self.author["id"], + object_marking_refs=[self.tlp_marking.id], + custom_properties={ + "x_opencti_type": "Indicator", + }, + allow_custom=True, + ) + + def create_ip_address(self, ip_value): + """Create IPv4Address object""" + if self._is_ipv4(ip_value): + return stix2.IPv4Address( + value=ip_value, + object_marking_refs=[self.tlp_marking.id], + custom_properties={ + "x_opencti_created_by_ref": f"{self.author.id}", + }, + ) + elif self._is_ipv6(ip_value): + return stix2.IPv6Address( + value=ip_value, + object_marking_refs=[self.tlp_marking.id], + custom_properties={ + "x_opencti_created_by_ref": f"{self.author.id}", + }, + ) + else: + self.helper.connector_logger.error( + "This value is not a valid IPv4 or IPv6 address", + {"value": ip_value}, + ) + + def create_relationship( + self, source_id: str, target_id: str, relationship_type: str + ) -> dict: + """ + Creates Relationship object + :param source_id: ID of source in string + :param target_id: ID of target in string + :param relationship_type: Relationship type in string + :return: Relationship STIX2 object + """ + return stix2.Relationship( + id=StixCoreRelationship.generate_id( + relationship_type, source_id, target_id + ), + relationship_type=relationship_type, + source_ref=source_id, + target_ref=target_id, + created_by_ref=self.author.id, + object_marking_refs=[self.tlp_marking.id], + ) + + def create_url(self, url: str): + """Create URL object""" + return stix2.URL( + value=url, + object_marking_refs=[self.tlp_marking.id], + custom_properties={ + "x_opencti_created_by_ref": self.author.id, + }, + ) + + @staticmethod + def _create_tlp_marking(level): + mapping = { + "white": stix2.TLP_WHITE, + "clear": stix2.TLP_WHITE, + "green": stix2.TLP_GREEN, + "amber": stix2.TLP_AMBER, + "amber+strict": stix2.MarkingDefinition( + id=MarkingDefinition.generate_id("TLP", "TLP:AMBER+STRICT"), + definition_type="statement", + definition={"statement": "custom"}, + custom_properties={ + "x_opencti_definition_type": "TLP", + "x_opencti_definition": "TLP:AMBER+STRICT", + }, + ), + "red": stix2.TLP_RED, + } + return mapping[level] + + @staticmethod + def _is_ipv6(value: str) -> bool: + """ + Determine whether the provided IP string is IPv6 + :param value: Value in string + :return: A boolean + """ + try: + ipaddress.IPv6Address(value) + return True + except ipaddress.AddressValueError: + return False + + @staticmethod + def _is_ipv4(value: str) -> bool: + """ + Determine whether the provided IP string is IPv4 + :param value: Value in string + :return: A boolean + """ + try: + ipaddress.IPv4Address(value) + return True + except ipaddress.AddressValueError: + return False diff --git a/external-import/sublime/src/connector/settings.py b/external-import/sublime/src/connector/settings.py new file mode 100644 index 00000000000..e0e4f363673 --- /dev/null +++ b/external-import/sublime/src/connector/settings.py @@ -0,0 +1,97 @@ +from datetime import timedelta + +from connectors_sdk import ( + BaseConfigModel, + BaseConnectorSettings, + BaseExternalImportConnectorConfig, + ListFromString, +) +from connectors_sdk.models.enums import TLPLevel +from pydantic import Field, HttpUrl, SecretStr + + +class ExternalImportConnectorConfig(BaseExternalImportConnectorConfig): + """ + Override the `BaseExternalImportConnectorConfig` to add parameters and/or defaults + to the configuration for connectors of type `EXTERNAL_IMPORT`. + """ + + name: str = Field( + description="The name of the connector.", + default="Sublime Security", + ) + scope: ListFromString = Field( + default=["sublime"], + description=( + "The scope or type of data the connector is importing, " + "either a MIME type or Stix Object (for information only)." + ), + ) + duration_period: timedelta = Field( + description="The period of time to await between two runs of the connector.", + default=timedelta(minutes=3), + ) + id: str = Field( + description="A UUID v4 to identify the connector in OpenCTI.", + default="0a3a00ad-b5f0-4dca-83b6-9012662dcf80", + ) + + +class SublimeConfig(BaseConfigModel): + """ + Define parameters and/or defaults for the configuration specific to the `SublimeConnector`. + """ + + url: HttpUrl = Field( + description="Sublime platform URL for API connections.", + default="https://platform.sublime.security", + ) + token: SecretStr = Field(description="Sublime Security API authentication token.") + incident_type: str = Field( + default="phishing", description="Label to apply to incident type." + ) + incident_prefix: str = Field( + default="Sublime Incident - ", description="Prefix for incident object names." + ) + case_prefix: str = Field( + default="Case - ", description="Prefix for case object names." + ) + auto_create_cases: bool = Field( + default=False, description="Automatically create investigation cases." + ) + verdicts: ListFromString = Field( + default=["malicious"], + description="Comma-separated attack score verdicts to process.", + ) + set_priority: bool = Field( + default=True, description="Enable priority mapping from attack score." + ) + set_severity: bool = Field( + default=True, description="Enable severity mapping from attack score." + ) + first_run_duration: timedelta = Field( + default=timedelta(hours=8), + description="ISO 8601 duration for initial data fetch on first run.", + ) + force_historical: bool = Field( + default=False, + description="Force historical fetch ignoring existing state for correcting improper states.", + ) + batch_size: int = Field( + default=100, description="Number of messages per processing batch." + ) + tlp_level: TLPLevel = Field( + default=TLPLevel.AMBER, + description="TLP marking level applied to created STIX entities.", + ) + + +class ConnectorSettings(BaseConnectorSettings): + """ + Override `BaseConnectorSettings` to include `ExternalImportConnectorConfig` and `SublimeConfig`. + """ + + connector: ExternalImportConnectorConfig = Field( + default_factory=ExternalImportConnectorConfig + ) + sublime: SublimeConfig = Field(default_factory=SublimeConfig) diff --git a/external-import/sublime/src/sublime_connector.py b/external-import/sublime/src/connector/sublime_connector.py similarity index 52% rename from external-import/sublime/src/sublime_connector.py rename to external-import/sublime/src/connector/sublime_connector.py index 4e54c2b8c2c..6a94666cb0b 100644 --- a/external-import/sublime/src/sublime_connector.py +++ b/external-import/sublime/src/connector/sublime_connector.py @@ -4,16 +4,16 @@ """ import json -import os import sys -import time from datetime import datetime, timedelta, timezone import isodate -import pycti import requests -import stix2 -import yaml +from connector.converter_to_stix import ConverterToStix +from connector.settings import ConnectorSettings +from connector.utils import lookup_MDM_value, map_attack_score_to_level, sanitize_email +from pycti import OpenCTIConnectorHelper +from sublime_client import SublimeClient class SublimeConnector: @@ -21,240 +21,39 @@ class SublimeConnector: Sublime external import connector for OpenCTI """ - def __init__(self): + def __init__(self, config: ConnectorSettings, helper: OpenCTIConnectorHelper): """ - Initialize the Sublime OpenCTI connector. + Initialize `SublimeConnector` with its configuration. - Configuration Sources (in priority order): - 1. Environment variables - 2. config.yml file (if exists) - 3. Default values + Args: + config (ConnectorSettings): Configuration of the connector + helper (OpenCTIConnectorHelper): Helper to manage connection and requests to OpenCTI """ - # Load configuration from config.yml if it exists - config_file_path = os.path.join( - os.path.dirname(os.path.abspath(__file__)), "config.yml" - ) - config_dict = {} - - if os.path.isfile(config_file_path): - try: - with open(config_file_path, "r", encoding="utf-8") as config_file: - config_dict = yaml.safe_load(config_file) - except Exception: - config_dict = {} - - # Initialize configuration for OpenCTI connector pattern - config = { - "opencti": { - "url": pycti.get_config_variable( - "OPENCTI_URL", ["opencti", "url"], config_dict, False - ), - "token": pycti.get_config_variable( - "OPENCTI_TOKEN", ["opencti", "token"], config_dict, False - ), - }, - "connector": { - "id": pycti.get_config_variable( - "CONNECTOR_ID", ["connector", "id"], config_dict, False - ), - "type": "EXTERNAL_IMPORT", - "name": pycti.get_config_variable( - "CONNECTOR_NAME", ["connector", "name"], config_dict, False - ), - "scope": pycti.get_config_variable( - "CONNECTOR_SCOPE", ["connector", "scope"], config_dict, False - ), - "log_level": pycti.get_config_variable( - "CONNECTOR_LOG_LEVEL", - ["connector", "log_level"], - config_dict, - False, - "info", - ), - "duration_period": pycti.get_config_variable( - "CONNECTOR_DURATION_PERIOD", - ["connector", "duration_period"], - config_dict, - False, - "PT3M", - ), - }, - } - - # Validate required configuration - if not config["opencti"]["url"]: - raise ValueError("OPENCTI_URL environment variable is required") - if not config["opencti"]["token"]: - raise ValueError("OPENCTI_TOKEN environment variable is required") - if not config["connector"]["id"]: - raise ValueError("CONNECTOR_ID environment variable is required") - if not config["connector"]["name"]: - raise ValueError("CONNECTOR_NAME environment variable is required") - if not config["connector"]["scope"]: - raise ValueError("CONNECTOR_SCOPE environment variable is required") - - # Initialize OpenCTI helper - self.helper = pycti.OpenCTIConnectorHelper(config) - - # Get connector duration period for scheduling - self.duration_period = pycti.get_config_variable( - "CONNECTOR_DURATION_PERIOD", - ["connector", "duration_period"], - config, - False, - "PT3M", - ) - - # Get Sublime specific config from environment variables or config.yml - self.api_token = pycti.get_config_variable( - "SUBLIME_TOKEN", ["sublime", "token"], config_dict, False - ) - self.api_base_url = pycti.get_config_variable( - "SUBLIME_URL", - ["sublime", "url"], - config_dict, - False, - "https://platform.sublime.security", - ) - - # Configurable naming and case creation. Making double sure we get data in them - self.incident_name_prefix = pycti.get_config_variable( - "SUBLIME_INCIDENT_PREFIX", - ["sublime", "incident_prefix"], - config_dict, - False, - "Sublime Incident - ", - ) - self.case_name_prefix = pycti.get_config_variable( - "SUBLIME_CASE_PREFIX", - ["sublime", "case_prefix"], - config_dict, - False, - "Case - ", - ) - self.auto_create_cases = pycti.get_config_variable( - "SUBLIME_AUTO_CREATE_CASES", - ["sublime", "auto_create_cases"], - config_dict, - False, - False, - ) + self.config = config + self.helper = helper - verdicts_config = pycti.get_config_variable( - "SUBLIME_VERDICTS", ["sublime", "verdicts"], config_dict, False, "malicious" - ) self.verdicts = [ - v.strip().lower() for v in verdicts_config.split(",") if v.strip() + v.strip().lower() for v in self.config.sublime.verdicts if v.strip() ] - self.confidence_level = int( - pycti.get_config_variable( - "SUBLIME_CONFIDENCE_LEVEL", - ["sublime", "confidence_level"], - config_dict, - True, - 80, - ) - ) - self.incident_type = pycti.get_config_variable( - "SUBLIME_INCIDENT_TYPE", - ["sublime", "incident_type"], - config_dict, - False, - "phishing", - ) - - self.first_run_duration = pycti.get_config_variable( - "SUBLIME_FIRST_RUN_DURATION", - ["sublime", "first_run_duration"], - config_dict, - False, - "PT8H", - ) - self.force_historical = pycti.get_config_variable( - "SUBLIME_FORCE_HISTORICAL", - ["sublime", "force_historical"], - config_dict, - False, - False, - ) - - self.set_priority = pycti.get_config_variable( - "SUBLIME_SET_PRIORITY", - ["sublime", "set_priority"], - config_dict, - False, - True, - ) - self.set_severity = pycti.get_config_variable( - "SUBLIME_SET_SEVERITY", - ["sublime", "set_severity"], - config_dict, - False, - True, - ) - - self.batch_size = int( - pycti.get_config_variable( - "SUBLIME_BATCH_SIZE", - ["sublime", "batch_size"], - config_dict, - True, - 100, - ) - ) - - if not self.api_token: - raise ValueError("SUBLIME_TOKEN environment variable is required") - - # Value for if to update an existing bundle. - # Currently set to False as placeholder for potential future feature - self.update_existing_data = False - # Track first run of this connector session (not persisted) self._first_run_completed = False - self.session = requests.Session() - self.session.headers.update( - { - "Authorization": "Bearer {}".format(self.api_token), - "Accept": "application/json", - "User-Agent": "OpenCTI-SublimeConnector/1.0", - } + self.client = SublimeClient( + helper=self.helper, + base_url=self.config.sublime.url, + api_key=self.config.sublime.token, ) - # Create Sublime Identity for STIX objects - self.sublime_identity = stix2.Identity( - id=pycti.Identity.generate_id( - name="Sublime", identity_class="organization" - ), - name="Sublime", - identity_class="organization", - description="Email Security Platform", - custom_properties={"x_opencti_type": "Organization"}, - allow_custom=True, + self.converter_to_stix = ConverterToStix( + self.helper, + tlp_level=self.config.sublime.tlp_level, ) - self.helper.log_info("[*] Sublime connector initialized") - self.helper.log_info( - "[*] Configuration: verdicts={}, confidence={}, incident_type={}, duration_period={}, first_run_duration={}, force_historical={}, incident_prefix='{}', case_prefix='{}', auto_create_cases={}, set_priority={}, set_severity={}, batch_size={}, platform_url={}".format( - self.verdicts, - self.confidence_level, - self.incident_type, - self.duration_period, - self.first_run_duration, - self.force_historical, - self.incident_name_prefix, - self.case_name_prefix, - self.auto_create_cases, - self.set_priority, - self.set_severity, - self.batch_size, - self.api_base_url, - ) - ) + # Create Sublime Identity for STIX objects + self.sublime_identity = self.converter_to_stix.author - def _get_last_timestamp(self): + def get_last_run(self, current_state: dict): """ Get the last processed timestamp from OpenCTI connector state. @@ -265,196 +64,48 @@ def _get_last_timestamp(self): str: ISO 8601 timestamp string of last processed message, or calculated based on first_run_duration if no previous state exists or force_historical is enabled """ - current_state = self.helper.get_state() or {} - # If force_historical is enabled and this is the first run, ignore state # After first run, use state for incremental polling - use_state = not self.force_historical or self._first_run_completed + use_state = ( + not self.config.sublime.force_historical or self._first_run_completed + ) if use_state and current_state and "last_timestamp" in current_state: return current_state["last_timestamp"] # First run or forced historical: use configured duration for initial data fetch try: - duration_obj = isodate.parse_duration(self.first_run_duration) - default_time = datetime.now(timezone.utc) - duration_obj + default_time = ( + datetime.now(timezone.utc) - self.config.sublime.first_run_duration + ) - if self.force_historical: + if self.config.sublime.force_historical: mode = "Forced historical" else: mode = "First run" - self.helper.log_info( - "[*] {}: fetching {} of historical data".format( - mode, self.first_run_duration - ) + self.helper.connector_logger.info( + "[Sublime Connector] Fetch historical data.", + { + "mode": mode, + "first_run_duration": self.config.sublime.first_run_duration, + }, ) except (isodate.ISO8601Error, ValueError) as e: - self.helper.log_warning( - '[!] Invalid first run duration format "{}": {}. Using default 8 hours.'.format( - self.first_run_duration, e - ) + self.helper.connector_logger.warning( + "[Sublime Connector] Invalid first run duration format. Using default 8 hours.", + { + "first_run_duration": self.config.sublime.first_run_duration, + "error": e, + }, ) + # Fallback to 1 day default_time = datetime.now(timezone.utc) - timedelta(hours=8) # Format for Sublime API: 2025-12-31T05:00:00.000Z return default_time.strftime("%Y-%m-%dT%H:%M:%S.000Z") - def _sanitize_email(self, email): - """ - Sanitize email address by removing Unicode BOM and other problematic characters. - - Args: - email (str): Raw email address - - Returns: - str: Sanitized email address - """ - if not email: - return email - - # Remove Unicode BOM (Byte Order Mark) characters - sanitized = ( - email.replace("\ufeff", "") - .replace("\ufffe", "") - .replace("\u00ef\u00bb\u00bf", "") - ) - - # Strip leading/trailing whitespace - sanitized = sanitized.strip() - - return sanitized - - def _map_attack_score_to_level(self, attack_score_verdict, mapping_type): - """ - Map Sublime attack score verdict to OpenCTI priority or severity level. - - Attack score verdicts: benign, unknown, graymail, suspicious, malicious, spam - - Args: - attack_score_verdict (str): Sublime attack score verdict - mapping_type (str): Either 'priority' or 'severity' - - Returns: - str: Mapped level (low, medium, high, critical) or None if not configured - """ - if mapping_type == "priority" and not self.set_priority: - return None - if mapping_type == "severity" and not self.set_severity: - return None - - # Verdict to level mapping - OpenCTI expects different values for priority vs severity - if mapping_type == "priority": - # Priority uses P1/P2/P3/P4 format (P1 = highest priority) - verdict_mapping = { - "malicious": "P1", # Highest priority - "suspicious": "P2", # High priority - "spam": "P3", # Medium priority - "graymail": "P3", # Medium priority - "unknown": "P4", # Low priority - "benign": "P4", # Low priority - } - else: - # Severity mapping - verdict_mapping = { - "malicious": "high", - "suspicious": "medium", - "spam": "low", - "graymail": "low", - "unknown": "low", - "benign": "low", - } - - verdict = (attack_score_verdict or "unknown").lower() - default_value = "P4" if mapping_type == "priority" else "low" - return verdict_mapping.get(verdict, default_value) - - def _fetch_group_ids(self, start_time, end_time): - """ - Fetch list of flagged group IDs within time range from Sublime API. - - Args: - start_time (str): ISO 8601 timestamp for range start - end_time (str): ISO 8601 timestamp for range end - - Returns: - list: List of group canonical IDs that are flagged - """ - params = { - "created_at__gte": start_time, - "created_at__lt": end_time, - "fetch_all_ids": True, - "stats_limit": 100000, - "flagged__eq": True, - } - - api_url = self.api_base_url.rstrip("/") - if not api_url.endswith("/v1"): - api_url = api_url + "/v1" - - full_url = "{}/messages/groups".format(api_url) - - self.helper.log_debug("Fetch time range: {} to {}".format(start_time, end_time)) - self.helper.log_debug( - "API request: {} with {} parameters".format(full_url, len(params)) - ) - - response = self.session.get(full_url, params=params, timeout=30) - - if not response.ok: - self.helper.log_error( - "[!] API request failed - Status: {}, Response: {}".format( - response.status_code, response.text - ) - ) - raise Exception( - "API request failed: {} {}".format(response.status_code, response.text) - ) - - data = response.json() - group_ids = data.get("all_group_canonical_ids") or [] - return group_ids - - def _fetch_single_group(self, group_id): - """ - Fetch individual message group by ID from Sublime API. - - Args: - group_id (str): Canonical ID of the message group to fetch - - Returns: - dict: Message group data dictionary, or None if fetch fails - """ - api_url = self.api_base_url.rstrip("/") - if not api_url.endswith("/v1"): - api_url = api_url + "/v1" - - full_url = "{}/messages/groups/{}".format(api_url, group_id) - - self.helper.log_debug("Fetching group: {}".format(group_id)) - - response = self.session.get(full_url, timeout=30) - - # Enable if you need in depth troubleshooting - # self.helper.log_debug("DEBUG: Response body: {}".format(response.text)) - - if not response.ok: - self.helper.log_warning( - "[!] Failed to fetch group {}: {} {}".format( - group_id, response.status_code, response.text - ) - ) - return None - - data = response.json() - - # Map API field name to code expectation (data_model -> MDM) - if "data_model" in data and "MDM" not in data: - data["MDM"] = data["data_model"] - - return data - def _fetch_messages(self, since_timestamp): """ Fetch malicious message groups from Sublime API since provided time. @@ -482,24 +133,28 @@ def _fetch_messages(self, since_timestamp): end_time = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%S.000Z") try: - group_ids = self._fetch_group_ids(start_time, end_time) + group_ids = self.client.get_group_ids(start_time, end_time) if not group_ids: - self.helper.log_debug("No flagged message groups found in time range") + self.helper.connector_logger.debug( + "No flagged message groups found in time range" + ) return - self.helper.log_info( - "[*] Found {} flagged group IDs. Processing in batches of {}".format( - len(group_ids), self.batch_size - ) + self.helper.connector_logger.info( + "[Sublime Connector] Flagged group IDs found. Processing in batches", + { + "length_group_ids": len(group_ids), + "batch_size": self.config.sublime.batch_size, + }, ) total_fetched = 0 - for i in range(0, len(group_ids), self.batch_size): - batch_ids = group_ids[i : i + self.batch_size] + for i in range(0, len(group_ids), self.config.sublime.batch_size): + batch_ids = group_ids[i : i + self.config.sublime.batch_size] batch_messages = [] for group_id in batch_ids: - message_group = self._fetch_single_group(group_id) + message_group = self.client.get_single_group(group_id) if message_group: attack_score_raw = message_group.get("attack_score_verdict") if not attack_score_raw: @@ -509,22 +164,28 @@ def _fetch_messages(self, since_timestamp): if attack_score in self.verdicts: batch_messages.append(message_group) else: - self.helper.log_debug( - "Skipping group {} with verdict '{}' (not in {})".format( - group_id, attack_score, self.verdicts - ) + self.helper.connector_logger.debug( + "[Sublime Connector] Skipping group", + { + "group_id": group_id, + "attack_score": attack_score, + "verdicts": self.verdicts, + }, ) if batch_messages: total_fetched += len(batch_messages) - self.helper.log_info( - "[*] Batch yielding {} messages (verdicts: {})".format( - len(batch_messages), self.verdicts - ) + self.helper.connector_logger.info( + "[Sublime Connector] Batch yielding messages", + { + "length_batch_messages": len(batch_messages), + "verdicts": self.verdicts, + }, ) + yield batch_messages - self.helper.log_info( + self.helper.connector_logger.info( "[*] Completed: {}/{} flagged groups matched verdicts {}".format( total_fetched, len(group_ids), self.verdicts ) @@ -552,17 +213,23 @@ def _validate_message(self, message_group): """ # Check for basic message group structure if "id" not in message_group: - self.helper.log_warning("[!] Message group missing id field") + self.helper.connector_logger.warning( + "[Sublime Connector] Message group missing id field" + ) return False # Check for subjects if not message_group.get("subjects"): - self.helper.log_warning("[!] Message group missing subjects") + self.helper.connector_logger.warning( + "[Sublime Connector] Message group missing subjects" + ) return False # Check for MDM (where the detailed email data is) if "MDM" not in message_group: - self.helper.log_warning("[!] Message group missing MDM") + self.helper.connector_logger.warning( + "[Sublime Connector] Message group missing MDM" + ) return False MDM = message_group["MDM"] @@ -573,7 +240,9 @@ def _validate_message(self, message_group): or "email" not in MDM.get("sender", {}) or "email" not in MDM.get("sender", {}).get("email", {}) ): - self.helper.log_warning("[!] Message group MDM missing sender email") + self.helper.connector_logger.warning( + "[Sublime Connector] Message group MDM missing sender email" + ) return False return True @@ -605,9 +274,11 @@ def _create_stix_objects(self, message_group): primary_email, observables, additional_emails = self._create_primary_email( message_group ) + # Add observables (email-addr, urls, etc.) BEFORE email-message so + # that referenced objects are ingested first by OpenCTI. + objects.extend(observables) if primary_email: objects.append(primary_email) - objects.extend(observables) objects.extend(additional_emails) # Add any additional EmailMessage objects # Create basic emails from previews of other emails in group @@ -629,13 +300,9 @@ def _create_stix_objects(self, message_group): except Exception as e: # Log the problematic observable value for debugging obs_value = getattr(observable, "value", "Unknown") - self.helper.log_warning( - "[!] Failed to create indicator for {}: {}".format( - observable._type, e - ) - ) - self.helper.log_warning( - "[!] Problematic {} value: {}".format(observable._type, obs_value) + self.helper.connector_logger.warning( + "[Sublime Connector] Failed to create indicator", + {"obs_type": observable._type, "obs_value": obs_value, "error": e}, ) objects.extend(indicators) @@ -665,13 +332,11 @@ def _create_primary_email(self, message_group): observables = [] - sender_email = self._lookup_MDM_value(MDM, "sender.email.email") + sender_email = lookup_MDM_value(MDM, "sender.email.email") sender = None if sender_email: - sender_email = self._sanitize_email(sender_email) - sender = stix2.EmailAddress( - value=sender_email, - ) + sender_email = sanitize_email(sender_email) + sender = self.converter_to_stix.create_email_address(value=sender_email) recipients = self._extract_recipients(MDM) if sender: observables.append(sender) @@ -683,15 +348,15 @@ def _create_primary_email(self, message_group): observables.extend(self._extract_attachments(MDM)) # Build email message (STIX2: is_multipart requires body) - body_text = self._lookup_MDM_value(MDM, "body.plain.raw") + body_text = lookup_MDM_value(MDM, "body.plain.raw") # raw text makes things easier, but option is here for HTML - # html_content = self._lookup_MDM_value(MDM, 'body.html.raw') + # html_content = lookup_MDM_value(MDM, 'body.html.raw') # Edge case. Sometimes the raw body doesn't exist. In that case, use HTML # e.g. html.raw =

if not body_text: - html_text = self._lookup_MDM_value(MDM, "body.html.raw") + html_text = lookup_MDM_value(MDM, "body.html.raw") body_text = html_text # Use first subject if exists and not empty, otherwise default @@ -710,13 +375,7 @@ def _create_primary_email(self, message_group): or "Email content not provided due to Sublime Security access controls.", } - if sender: - email_data["from_ref"] = sender.id - - if recipients: - email_data["to_refs"] = [recipient.id for recipient in recipients] - - email = stix2.EmailMessage(**email_data) + email = self.converter_to_stix.create_email_message(email_data) return email, observables, [] # No additional emails in single email case def _create_preview_emails(self, previews): @@ -739,18 +398,16 @@ def _create_preview_emails(self, previews): recipients = [] if preview.get("sender_email_address"): - sender_email = self._sanitize_email(preview["sender_email_address"]) - sender = stix2.EmailAddress( - value=sender_email, - ) + sender_email = sanitize_email(preview["sender_email_address"]) + sender = self.converter_to_stix.create_email_address(value=sender_email) all_objects.append(sender) # Create recipient email addresses for recipient_addr in preview.get("recipients") or []: if recipient_addr: - recipient_addr = self._sanitize_email(recipient_addr) - recipient = stix2.EmailAddress( - value=recipient_addr, + recipient_addr = sanitize_email(recipient_addr) + recipient = self.converter_to_stix.create_email_address( + value=recipient_addr ) recipients.append(recipient) all_objects.append(recipient) @@ -759,8 +416,11 @@ def _create_preview_emails(self, previews): attachment_hashes = preview.get("attachment_sha256s") or [] for hash_value in attachment_hashes: if hash_value: - file_obj = stix2.File( + file_obj = self.converter_to_stix.create_file( hashes={"SHA-256": hash_value}, + file_name=None, + file_size=None, + mime_type=None, ) all_objects.append(file_obj) @@ -817,9 +477,9 @@ def _create_description(self, message_group): MDM = message_group.get("MDM", {}) if MDM: - to_list = self._lookup_MDM_value(MDM, "recipients.to") or [] + to_list = lookup_MDM_value(MDM, "recipients.to") or [] for recipient in to_list: - email = self._lookup_MDM_value(recipient, "email.email") + email = lookup_MDM_value(recipient, "email.email") if email: recipients.add(email) @@ -842,7 +502,9 @@ def _create_description(self, message_group): return description except Exception as e: - self.helper.log_warning("[!] Failed to create description: {}".format(e)) + self.helper.connector_logger.warning( + "[Sublime Connector] Failed to create description", {"error": e} + ) return "Malicious email group detected by Sublime Security. Description unavailable." def _create_group_incident(self, message_group): @@ -869,33 +531,19 @@ def _create_group_incident(self, message_group): ) # Create Event Incident with deterministic ID - incident = stix2.Incident( - id=pycti.Incident.generate_id(incident_name, created_timestamp), + incident = self.converter_to_stix.create_incident( name=incident_name, + created_timestamp=created_timestamp, description=incident_description, - created=created_timestamp, - created_by_ref=self.sublime_identity.id, - object_marking_refs=[stix2.TLP_AMBER], - confidence=self.confidence_level, - external_references=[ - { - "source_name": "Sublime", - "description": "View this message group in Sublime platform", - "url": "{}/messages/{}".format( - self.api_base_url, str(group_id or "unknown") - ), - "external_id": str(group_id or "unknown"), - } - ], - custom_properties={ - "x_opencti_type": "Incident", - "x_opencti_incident_type": self.incident_type, - "x_sublime_security_canonical_id": group_id, - }, - allow_custom=True, - incident_type=self.incident_type.capitalize(), - source="Sublime Security", - severity=self._map_attack_score_to_level(attack_score_verdict, "severity"), + group_id=group_id, + incident_type=self.config.sublime.incident_type, + url=f"{self.config.sublime.url.unicode_string()}/messages/{group_id or 'unknown'}", + severity=map_attack_score_to_level( + self.config.sublime.set_priority, + self.config.sublime.set_severity, + attack_score_verdict, + "severity", + ), ) return incident @@ -914,31 +562,29 @@ def _generate_incident_name(self, message_group): try: sender_email = "Unknown Sender" MDM = message_group.get("MDM", {}) - if MDM and self._lookup_MDM_value(MDM, "sender.email.email"): - sender_email = self._sanitize_email( - self._lookup_MDM_value(MDM, "sender.email.email") + if MDM and lookup_MDM_value(MDM, "sender.email.email"): + sender_email = sanitize_email( + lookup_MDM_value(MDM, "sender.email.email") ) elif message_group.get("previews"): for preview in message_group.get("previews", []): if not preview: continue if preview.get("sender_email_address"): - sender_email = self._sanitize_email( + sender_email = sanitize_email( preview.get("sender_email_address") ) break preview_count = len(message_group.get("previews", [])) - has_primary = bool( - MDM and self._lookup_MDM_value(MDM, "sender.email.email") - ) + has_primary = bool(MDM and lookup_MDM_value(MDM, "sender.email.email")) email_count = max(preview_count, 1) if has_primary else preview_count recipients = set() if MDM: - to_list = self._lookup_MDM_value(MDM, "recipients.to") or [] + to_list = lookup_MDM_value(MDM, "recipients.to") or [] for recipient in to_list: - email = self._lookup_MDM_value(recipient, "email.email") + email = lookup_MDM_value(recipient, "email.email") if email: recipients.add(email) @@ -967,7 +613,7 @@ def _generate_incident_name(self, message_group): if email_count == 0: incident_name = "{} {} Sent {} to {} {}. {}".format( - self.incident_name_prefix, + self.config.sublime.incident_prefix, sender_email, email_plural, recipient_count, @@ -979,7 +625,7 @@ def _generate_incident_name(self, message_group): "{}".format(email_count) if preview_count > 0 else str(email_count) ) incident_name = "{} {} Sent {} {} to {} {}. {}".format( - self.incident_name_prefix, + self.config.sublime.incident_prefix, sender_email, count_display, email_plural, @@ -991,29 +637,33 @@ def _generate_incident_name(self, message_group): return incident_name except Exception as e: - self.helper.log_warning( - "[!] Failed to generate incident name: {}. Using fallback.".format(e) + self.helper.connector_logger.warning( + "[Sublime Connector] Failed to generate incident name. Using fallback.", + {"error": e}, ) # Fallback to simple incident naming - return "{} {}".format(self.incident_name_prefix, subject) + return f"{self.config.sublime.incident_prefix} {subject}" def _create_opencti_case(self, incident, stix_objects, message_group): """ - Create a Case using OpenCTI API for the incident. + Create a CaseIncident STIX object for the incident. Args: incident (stix2.Incident): The main incident object stix_objects (list): All STIX objects created for this message group message_group (dict): Original message group data from Sublime API + + Returns: + CustomObjectCaseIncident or None: The case STIX object, or None on failure. """ group_id = message_group.get("id", "unknown") try: MDM = message_group.get("MDM", {}) sender_email = ( - self._sanitize_email(self._lookup_MDM_value(MDM, "sender.email.email")) - if self._lookup_MDM_value(MDM, "sender.email.email") - else self._sanitize_email( + sanitize_email(lookup_MDM_value(MDM, "sender.email.email")) + if lookup_MDM_value(MDM, "sender.email.email") + else sanitize_email( next( ( p.get("sender_email_address") @@ -1026,16 +676,14 @@ def _create_opencti_case(self, incident, stix_objects, message_group): ) preview_count = len(message_group.get("previews", [])) - has_primary = bool( - MDM and self._lookup_MDM_value(MDM, "sender.email.email") - ) + has_primary = bool(MDM and lookup_MDM_value(MDM, "sender.email.email")) email_count = max(preview_count, 1) if has_primary else preview_count recipients = set() if MDM: - to_list = self._lookup_MDM_value(MDM, "recipients.to") or [] + to_list = lookup_MDM_value(MDM, "recipients.to") or [] for recipient in to_list: - email = self._lookup_MDM_value(recipient, "email.email") + email = lookup_MDM_value(recipient, "email.email") if email: recipients.add(email) @@ -1064,7 +712,7 @@ def _create_opencti_case(self, incident, stix_objects, message_group): # Build case name case_name = "{} {} Sent {} {} to {} {}. {}".format( - self.case_name_prefix, + self.config.sublime.case_prefix, sender_email, email_count, email_plural, @@ -1072,14 +720,14 @@ def _create_opencti_case(self, incident, stix_objects, message_group): recipient_plural, subject_abbreviated, ) - object_ids = [incident.id] + [ + object_refs = [incident.id] + [ obj.id for obj in stix_objects if hasattr(obj, "id") and obj.id not in [self.sublime_identity.id, incident.id] ] - # Convert STIX external references to dictionary format for OpenCTI API + # Use incident's external references for the case external_refs = [ { "source_name": ref.source_name, @@ -1090,86 +738,54 @@ def _create_opencti_case(self, incident, stix_objects, message_group): for ref in incident.external_references ] - # Create case data without external references. They're added separately - group_id = message_group.get("id", "unknown") case_description = self._create_description(message_group) - case_data = { - # Removed as OpenCTI ignores and creates its own id regardless - # "id": deterministic_case_id, - "name": case_name, - "description": case_description, - "objects": object_ids, - "created_by": self.sublime_identity.id, - "object_marking_refs": [stix2.TLP_AMBER.id], - } + # Use incident's created timestamp for deterministic ID generation + created_timestamp = incident.created # Add priority and severity if configured attack_score_verdict = message_group.get("attack_score_verdict") - priority = self._map_attack_score_to_level(attack_score_verdict, "priority") - severity = self._map_attack_score_to_level(attack_score_verdict, "severity") - - if priority: - case_data["priority"] = priority - - if severity: - case_data["severity"] = severity - - self.helper.log_info("[*] Creating new case for group: {}".format(group_id)) - case = self.helper.api.case_incident.create(**case_data) - - # Add external references after case creation (for all cases to ensure proper linking) - if case and isinstance(case, dict) and case.get("id") and external_refs: - try: - # Get existing external references to avoid duplicates - existing_ext_refs = case.get("externalReferences", []) - existing_ext_ids = { - ref.get("external_id") for ref in existing_ext_refs - } - - for ext_ref in external_refs: - # Skip if external reference already exists on this case - if ext_ref["external_id"] in existing_ext_ids: - self.helper.log_info("*" * 100) - continue + priority = map_attack_score_to_level( + self.config.sublime.set_priority, + self.config.sublime.set_severity, + attack_score_verdict, + "priority", + ) + severity = map_attack_score_to_level( + self.config.sublime.set_priority, + self.config.sublime.set_severity, + attack_score_verdict, + "severity", + ) - ext_ref_result = self.helper.api.external_reference.create( - source_name=ext_ref["source_name"], - description=ext_ref["description"], - url=ext_ref["url"], - external_id=ext_ref["external_id"], - ) + self.helper.connector_logger.info( + "[Sublime Connector] Creating case incident STIX object for group", + {"group_id": group_id}, + ) - if ( - ext_ref_result - and isinstance(ext_ref_result, dict) - and ext_ref_result.get("id") - ): - self.helper.api.stix_domain_object.add_external_reference( - id=case["id"], - external_reference_id=ext_ref_result["id"], - ) - except Exception as ext_ref_error: - self.helper.log_error( - "[!] Failed to add external references to case {}: {}".format( - case.get("id", "unknown"), ext_ref_error - ) - ) + case = self.converter_to_stix.create_case_incident( + name=case_name, + created=created_timestamp, + description=case_description, + object_refs=object_refs, + external_references=external_refs, + severity=severity, + priority=priority, + ) - if case: - self.helper.log_info( - "[*] Successfully processed case with ID: {}".format( - case.get("id", "unknown") - ) - ) - else: - self.helper.log_error("[!] Case creation returned None") + self.helper.connector_logger.info( + "[Sublime Connector] Successfully created case incident", + {"case_id": case.id}, + ) + return case except Exception as e: - self.helper.log_error( - "[!] Failed to create case for incident {}: {}".format(incident.id, e) + self.helper.connector_logger.error( + "[Sublime Connector] Failed to create case for incident", + {"incident_id": incident.id, "error": e}, ) + return None def _create_indicator_for_observable(self, observable): """ @@ -1198,21 +814,10 @@ def _create_indicator_for_observable(self, observable): return None # Log pattern generation for troubleshooting if needed - # self.helper.log_debug("Generated STIX pattern for {}: {}".format(observable._type, pattern)) + # self.helper.connector_logger.debug("Generated STIX pattern for {}: {}".format(observable._type, pattern)) # Create indicator with proper metadata - indicator = stix2.Indicator( - id=pycti.Indicator.generate_id(pattern), - pattern=pattern, - pattern_type="stix", - labels=["malicious-activity"], - created_by_ref=self.sublime_identity.id, - object_marking_refs=[stix2.TLP_AMBER], - custom_properties={ - "x_opencti_type": "Indicator", - }, - allow_custom=True, - ) + indicator = self.converter_to_stix.create_indicator(pattern=pattern) return indicator @@ -1235,11 +840,23 @@ def _create_relationships( relationships = [] if primary_email and hasattr(primary_email, "id"): - relationships.append(self._create_relationship(incident, primary_email)) + relationships.append( + self.converter_to_stix.create_relationship( + source_id=incident.id, + target_id=primary_email.id, + relationship_type="related-to", + ) + ) for observable in observables: if observable and hasattr(observable, "id"): - relationships.append(self._create_relationship(incident, observable)) + relationships.append( + self.converter_to_stix.create_relationship( + source_id=incident.id, + target_id=observable.id, + relationship_type="related-to", + ) + ) for obj in all_emails: if ( @@ -1248,61 +865,26 @@ def _create_relationships( and obj._type == "email-message" and hasattr(obj, "id") ): - relationships.append(self._create_relationship(incident, obj)) + relationships.append( + self.converter_to_stix.create_relationship( + source_id=incident.id, + target_id=obj.id, + relationship_type="related-to", + ) + ) for indicator in indicators: if indicator and hasattr(indicator, "id"): - relationships.append(self._create_relationship(incident, indicator)) + relationships.append( + self.converter_to_stix.create_relationship( + source_id=incident.id, + target_id=indicator.id, + relationship_type="related-to", + ) + ) return relationships - def _create_relationship(self, source, target, relationship_type="related-to"): - """ - Create a single relationship between two STIX objects. Uses deterministic ID generation for consistent relationships. - - Args: - source (stix2.SDO): Source STIX object - target (stix2.SDO): Target STIX object - relationship_type (str): Type of relationship (default: 'related-to') - - Returns: - stix2.Relationship: STIX Relationship object - """ - from pycti import StixCoreRelationship - - return stix2.Relationship( - id=StixCoreRelationship.generate_id( - relationship_type, source.id, target.id - ), - relationship_type=relationship_type, - source_ref=source.id, - target_ref=target.id, - created_by_ref=self.sublime_identity.id, - confidence=self.confidence_level, - object_marking_refs=[stix2.TLP_AMBER], - ) - - def _lookup_MDM_value(self, MDM, value): - """ - Lookup values in MDM based on their rule structure. - This may seem overcomplicated compared to parsing JSON but it easier correlates to MQL rule structure. - - Args: - MDM (dict): Message data to search - value (str): Dot-separated path (e.g., 'sender.email.email') - - Returns: - Any: Value at the path, or None if path doesn't exist - """ - keys = value.split(".") - value = MDM - for key in keys: - if isinstance(value, dict): - value = value.get(key) - else: - return None - return value - def _extract_recipients(self, MDM): """ Extract recipient email addresses from message data model. @@ -1314,12 +896,14 @@ def _extract_recipients(self, MDM): list: List of stix2.EmailAddress objects for recipients """ recipients = [] - to_list = self._lookup_MDM_value(MDM, "recipients.to") or [] + to_list = lookup_MDM_value(MDM, "recipients.to") or [] for recipient in to_list: - email = self._lookup_MDM_value(recipient, "email.email") + email = lookup_MDM_value(recipient, "email.email") if email: - email = self._sanitize_email(email) - recipients.append(stix2.EmailAddress(value=email)) + email = sanitize_email(email) + recipients.append( + self.converter_to_stix.create_email_address(value=email) + ) return recipients def _extract_urls(self, MDM): @@ -1333,14 +917,14 @@ def _extract_urls(self, MDM): list: List of stix2.URL objects """ urls = [] - links = self._lookup_MDM_value(MDM, "body.links") or [] + links = lookup_MDM_value(MDM, "body.links") or [] for link in links: - url = self._lookup_MDM_value(link, "href_url.url") + url = lookup_MDM_value(link, "href_url.url") if url: if "://" not in url: - scheme = self._lookup_MDM_value(link, "href_url.scheme") or "http" + scheme = lookup_MDM_value(link, "href_url.scheme") or "http" url = "{}://{}".format(scheme, url) - urls.append(stix2.URL(value=url)) + urls.append(self.converter_to_stix.create_url(url=url)) return urls def _extract_domains(self, MDM): @@ -1356,16 +940,12 @@ def _extract_domains(self, MDM): domains = [] seen = set() - header_domains = self._lookup_MDM_value(MDM, "headers.domains") or [] + header_domains = lookup_MDM_value(MDM, "headers.domains") or [] for domain_info in header_domains: domain = domain_info.get("domain") if domain and domain.lower() not in seen: seen.add(domain.lower()) - domains.append( - stix2.DomainName( - value=domain, - ) - ) + domains.append(self.converter_to_stix.create_domain_name(value=domain)) return domains @@ -1381,12 +961,11 @@ def _extract_ips(self, MDM): list: List of stix2.IPv4Address or stix2.IPv6Address objects """ ips = [] - header_ips = self._lookup_MDM_value(MDM, "headers.ips") or [] + header_ips = lookup_MDM_value(MDM, "headers.ips") or [] for ip_info in header_ips: ip = ip_info.get("ip") if ip: - ip_class = stix2.IPv6Address if ":" in ip else stix2.IPv4Address - ips.append(ip_class(value=ip)) + ips.append(self.converter_to_stix.create_ip_address(ip_value=ip)) return ips def _extract_attachments(self, MDM): @@ -1400,7 +979,7 @@ def _extract_attachments(self, MDM): list: List of stix2.File objects """ files = [] - attachments = self._lookup_MDM_value(MDM, "attachments") or [] + attachments = lookup_MDM_value(MDM, "attachments") or [] for attachment in attachments: filename = attachment.get("file_name") @@ -1412,21 +991,24 @@ def _extract_attachments(self, MDM): continue hashes = {"SHA-256": sha256} - - file_data = { - "name": filename, - "hashes": hashes, - } - - if attachment.get("size"): - file_data["size"] = attachment.get("size") + file_size = attachment.get("size") # Only use MIME type if provided and not generic - mime_type = attachment.get("content_type") - if mime_type and mime_type != "application/octet-stream": - file_data["mime_type"] = mime_type + mime_type = ( + content_type + if (content_type := attachment.get("content_type")) + and content_type != "application/octet-stream" + else None + ) - files.append(stix2.File(**file_data)) + files.append( + self.converter_to_stix.create_file( + hashes=hashes, + file_name=filename, + file_size=file_size, + mime_type=mime_type, + ) + ) return files @@ -1458,27 +1040,26 @@ def _process_message_batch(self, messages, work_id): group_id = message.get("id", "unknown") if not self._validate_message(message): - self.helper.log_warning( - "[!] Skipping group {} - failed basic validation".format( - group_id - ) + self.helper.connector_logger.warning( + "[Sublime Connector] Skipping group - failed basic validation", + {"group_id": group_id}, ) continue # Check if this message group already exists in OpenCTI using temp cache if group_id in self._existing_group_ids: - self.helper.log_debug( - "[DEBUG] Skipping existing group: {}".format(group_id) + self.helper.connector_logger.debug( + "[Sublime Connector] Skipping existing group", + {"group_id": group_id}, ) continue existing_incident = None try: all_incidents = self.helper.api.incident.list() - self.helper.log_debug( - "[DEBUG] Checking {} total incidents for external reference match".format( - len(all_incidents) if all_incidents else 0 - ) + self.helper.connector_logger.debug( + "[Sublime Connector] Checking incidents for external reference match", + {"length_incident": len(all_incidents) if all_incidents else 0}, ) if all_incidents: @@ -1489,34 +1070,41 @@ def _process_message_batch(self, messages, work_id): for ext_ref in incident_ext_refs: if ext_ref.get("external_id") == group_id: existing_incident = incident_obj - self.helper.log_info( - "[*] Found existing event incident by external_id: {} for group: {}".format( - incident_obj.get("id"), group_id - ) + self.helper.connector_logger.info( + "[Sublime Connector] Found existing event incident by external_id", + { + "incident_id": incident_obj.get("id"), + "group_id": group_id, + }, ) break if existing_incident: break if existing_incident: - self.helper.log_debug( - "[DEBUG] Skipping group {} - event incident already exists: {}".format( - group_id, existing_incident.get("id") - ) + self.helper.connector_logger.debug( + "[Sublime Connector] Skipping group - event incident already exists", + { + "group_id": group_id, + "incident_id": existing_incident.get("id"), + }, ) continue else: - self.helper.log_debug( - "[DEBUG] No existing event incident found for group: {} (checked {} incidents)".format( - group_id, len(all_incidents) if all_incidents else 0 - ) + self.helper.connector_logger.debug( + "[Sublime Connector] No existing event incident found for group", + { + "group_id": group_id, + "length_incident": ( + len(all_incidents) if all_incidents else 0 + ), + }, ) except Exception as incident_check_error: - self.helper.log_warning( - "[!] Event incident existence check failed: {}".format( - incident_check_error - ) + self.helper.connector_logger.warning( + "[Sublime Connector] Event incident existence check failed", + {"error": incident_check_error}, ) # Create STIX objects @@ -1532,36 +1120,49 @@ def _process_message_batch(self, messages, work_id): flattened_objects.append(obj) stix_objects = flattened_objects - bundle = stix2.Bundle(objects=stix_objects, allow_custom=True) + # Deduplicate objects by ID to avoid "single ref" conflicts + seen_ids = set() + unique_objects = [] + for obj in stix_objects: + obj_id = getattr(obj, "id", None) + if obj_id and obj_id in seen_ids: + continue + if obj_id: + seen_ids.add(obj_id) + unique_objects.append(obj) + stix_objects = unique_objects + + # Create case incident STIX object if enabled + if self.config.sublime.auto_create_cases: + case = self._create_opencti_case(incident, stix_objects, message) + if case: + stix_objects.append(case) + + stix_objects_bundle = self.helper.stix2_create_bundle(stix_objects) # Send to OpenCTI - self.helper.log_debug( - "[DEBUG] About to send STIX Bundle for incident: {}".format( - incident.id - ) + self.helper.connector_logger.debug( + "[Sublime Connector] About to send STIX Bundle for incident", + {"incident_id": incident.id}, ) + try: self.helper.send_stix2_bundle( - bundle.serialize(), + stix_objects_bundle, work_id=work_id, - update=self.update_existing_data, + update=True, + cleanup_inconsistent_bundle=True, ) - self.helper.log_debug( - "[DEBUG] Bundle sent successfully for incident: {}".format( - incident.id - ) + self.helper.connector_logger.debug( + "[Sublime Connector] Bundle sent successfully for incident", + {"incident_id": incident.id}, ) except Exception as bundle_error: - self.helper.log_warning( - "[!] Failed to send STIX bundle for incident {}: {}".format( - incident.id, bundle_error - ) + self.helper.connector_logger.warning( + "[Sublime Connector] Failed to send STIX bundle for incident", + {"incident_id": incident.id, "error": bundle_error}, ) - # Create OpenCTI case if enabled - if self.auto_create_cases: - self._create_opencti_case(incident, stix_objects, message) - processed_count += 1 # Track latest timestamp (use last_created_at for most recent activity in group) @@ -1575,8 +1176,9 @@ def _process_message_batch(self, messages, work_id): except Exception as e: canonical_id = message.get("id", "unknown") - self.helper.log_error( - "[!] Failed to process message {}: {}".format(canonical_id, e) + self.helper.connector_logger.error( + "[Sublime Connector] Failed to process message", + {"canonical_id": canonical_id, "error": e}, ) return processed_count, latest_timestamp @@ -1620,16 +1222,15 @@ def _get_existing_group_ids(self): ): existing_group_ids.add(ext_ref["external_id"]) - self.helper.log_info( - "[*] Found {} existing Sublime group IDs in OpenCTI".format( - len(existing_group_ids) - ) + self.helper.connector_logger.info( + "[Sublime Connector] Found existing Sublime group IDs in OpenCTI", + {"length_group_ids": len(existing_group_ids)}, ) return existing_group_ids except Exception as e: - self.helper.log_warning( - "[!] Error fetching existing group IDs: {}".format(e) + self.helper.connector_logger.warning( + "[Sublime Connector] Error fetching existing group IDs", {"error": e} ) return set() @@ -1640,18 +1241,20 @@ def _process_messages(self): Returns: int: Total number of messages processed """ + work_id = None + current_state = self.helper.get_state() or {} + # Get last processed timestamp - since_timestamp = self._get_last_timestamp() - self.helper.log_debug("Fetching messages since {}".format(since_timestamp)) + since_timestamp = self.get_last_run(current_state) + self.helper.connector_logger.debug( + "[Sublime Connector] Fetching messages", + {"since_timestamp": since_timestamp}, + ) # Mark first run as completed after getting timestamp if not self._first_run_completed: self._first_run_completed = True - work_id = self.helper.api.work.initiate_work( - self.helper.connect_id, "Sublime Import" - ) - try: total_processed = 0 global_latest_timestamp = None @@ -1660,8 +1263,14 @@ def _process_messages(self): if not batch_messages: continue - self.helper.log_info( - "[*] Processing batch of {} messages".format(len(batch_messages)) + if not work_id and batch_messages: + work_id = self.helper.api.work.initiate_work( + self.helper.connect_id, "Sublime Import" + ) + + self.helper.connector_logger.info( + "[Sublime Connector] Processing batch of messages", + {"length_batch_messages": len(batch_messages)}, ) batch_processed, batch_latest_timestamp = self._process_message_batch( @@ -1677,10 +1286,9 @@ def _process_messages(self): global_latest_timestamp = batch_latest_timestamp if global_latest_timestamp: - current_state = self.helper.get_state() or {} current_state["last_timestamp"] = global_latest_timestamp self.helper.set_state(current_state) - self.helper.log_debug( + self.helper.connector_logger.debug( "Batch complete: {} processed this batch, {} total processed, state updated to {}".format( batch_processed, total_processed, global_latest_timestamp ) @@ -1690,23 +1298,31 @@ def _process_messages(self): current_time = datetime.now(timezone.utc).strftime( "%Y-%m-%dT%H:%M:%S.000Z" ) - current_state = self.helper.get_state() or {} current_state["last_timestamp"] = current_time self.helper.set_state(current_state) - completion_message = "Processed {} messages".format(total_processed) - self.helper.log_info("[*] {}".format(completion_message)) - self.helper.api.work.to_processed(work_id, completion_message) - - return total_processed + self.helper.connector_logger.info( + "[Sublime Connector] Processed messages", + { + "total_processed": total_processed, + }, + ) + except (KeyboardInterrupt, SystemExit): + self.helper.connector_logger.info( + "[Sublime Connector] Connector stopped...", + {"connector_name": self.helper.connect_name}, + ) + sys.exit(0) except Exception as e: - error_message = "Batch processing failed after {} messages: {}".format( - total_processed, e + self.helper.connector_logger.error( + "[Sublime Connector] Batch processing failed", + {"total_processed": total_processed, "error": e}, ) - self.helper.log_error("[!] {}".format(error_message)) - self.helper.api.work.to_received(work_id, error_message) - raise + finally: + if work_id: + message = f"{self.helper.connect_name} connector successfully run" + self.helper.api.work.to_processed(work_id, message) def run(self): """ @@ -1714,15 +1330,5 @@ def run(self): """ self.helper.schedule_iso( message_callback=self._process_messages, - duration_period=self.duration_period, + duration_period=self.config.connector.duration_period, ) - - -if __name__ == "__main__": - try: - connector = SublimeConnector() - connector.run() - except Exception as e: - print("[ERROR] Sublime Security Connector failed: {}".format(e)) - time.sleep(10) - sys.exit(1) diff --git a/external-import/sublime/src/connector/utils.py b/external-import/sublime/src/connector/utils.py new file mode 100644 index 00000000000..2c7a3b8ed58 --- /dev/null +++ b/external-import/sublime/src/connector/utils.py @@ -0,0 +1,93 @@ +def sanitize_email(email): + """ + Sanitize email address by removing Unicode BOM and other problematic characters. + + Args: + email (str): Raw email address + + Returns: + str: Sanitized email address + """ + if not email: + return email + + # Remove Unicode BOM (Byte Order Mark) characters + sanitized = ( + email.replace("\ufeff", "") + .replace("\ufffe", "") + .replace("\u00ef\u00bb\u00bf", "") + ) + + # Strip leading/trailing whitespace + sanitized = sanitized.strip() + + return sanitized + + +def map_attack_score_to_level( + set_priority, set_severity, attack_score_verdict, mapping_type +): + """ + Map Sublime attack score verdict to OpenCTI priority or severity level. + + Attack score verdicts: benign, unknown, graymail, suspicious, malicious, spam + + Args: + attack_score_verdict (str): Sublime attack score verdict + mapping_type (str): Either 'priority' or 'severity' + + Returns: + str: Mapped level (low, medium, high, critical) or None if not configured + """ + if mapping_type == "priority" and not set_priority: + return None + if mapping_type == "severity" and not set_severity: + return None + + # Verdict to level mapping - OpenCTI expects different values for priority vs severity + if mapping_type == "priority": + # Priority uses P1/P2/P3/P4 format (P1 = highest priority) + verdict_mapping = { + "malicious": "P1", # Highest priority + "suspicious": "P2", # High priority + "spam": "P3", # Medium priority + "graymail": "P3", # Medium priority + "unknown": "P4", # Low priority + "benign": "P4", # Low priority + } + else: + # Severity mapping + verdict_mapping = { + "malicious": "high", + "suspicious": "medium", + "spam": "low", + "graymail": "low", + "unknown": "low", + "benign": "low", + } + + verdict = (attack_score_verdict or "unknown").lower() + default_value = "P4" if mapping_type == "priority" else "low" + return verdict_mapping.get(verdict, default_value) + + +def lookup_MDM_value(MDM, value): + """ + Lookup values in MDM based on their rule structure. + This may seem overcomplicated compared to parsing JSON but it easier correlates to MQL rule structure. + + Args: + MDM (dict): Message data to search + value (str): Dot-separated path (e.g., 'sender.email.email') + + Returns: + Any: Value at the path, or None if path doesn't exist + """ + keys = value.split(".") + value = MDM + for key in keys: + if isinstance(value, dict): + value = value.get(key) + else: + return None + return value diff --git a/external-import/sublime/src/main.py b/external-import/sublime/src/main.py new file mode 100644 index 00000000000..0985591331f --- /dev/null +++ b/external-import/sublime/src/main.py @@ -0,0 +1,24 @@ +import traceback + +from connector import ConnectorSettings, SublimeConnector +from pycti import OpenCTIConnectorHelper + +if __name__ == "__main__": + """ + Entry point of the script + + - traceback.print_exc(): This function prints the traceback of the exception to the standard error (stderr). + The traceback includes information about the point in the program where the exception occurred, + which is very useful for debugging purposes. + - exit(1): effective way to terminate a Python program when an error is encountered. + It signals to the operating system and any calling processes that the program did not complete successfully. + """ + try: + settings = ConnectorSettings() + helper = OpenCTIConnectorHelper(config=settings.to_helper_config()) + + connector = SublimeConnector(config=settings, helper=helper) + connector.run() + except Exception: + traceback.print_exc() + exit(1) diff --git a/external-import/sublime/src/requirements.txt b/external-import/sublime/src/requirements.txt index 374c6c7d380..9a17824568a 100644 --- a/external-import/sublime/src/requirements.txt +++ b/external-import/sublime/src/requirements.txt @@ -1,4 +1,5 @@ isodate==0.7.2 -pycti==7.260309.0 +pycti==7.260515.0 pyyaml==6.0.1 -stix2==3.0.1 \ No newline at end of file +stix2==3.0.1 +connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk \ No newline at end of file diff --git a/external-import/sublime/src/sublime_client/__init__.py b/external-import/sublime/src/sublime_client/__init__.py new file mode 100644 index 00000000000..832a248421d --- /dev/null +++ b/external-import/sublime/src/sublime_client/__init__.py @@ -0,0 +1,5 @@ +from sublime_client.api_client import SublimeClient + +__all__ = [ + "SublimeClient", +] diff --git a/external-import/sublime/src/sublime_client/api_client.py b/external-import/sublime/src/sublime_client/api_client.py new file mode 100644 index 00000000000..74d8e54e3b5 --- /dev/null +++ b/external-import/sublime/src/sublime_client/api_client.py @@ -0,0 +1,144 @@ +import requests +from pycti import OpenCTIConnectorHelper +from pydantic import HttpUrl, SecretStr + + +class SublimeClient: + def __init__( + self, helper: OpenCTIConnectorHelper, base_url: HttpUrl, api_key: SecretStr + ): + """ + Initialize the client with necessary configuration. + For log purpose, the connector's helper CAN be injected. + Other arguments CAN be added (e.g. `api_key`) if necessary. + + Args: + helper (OpenCTIConnectorHelper): The helper of the connector. Used for logs. + base_url (HttpUrl): The external API base URL. + api_key (SecretStr): The API key to authenticate the connector to the external API. + """ + self.helper = helper + self.base_url = base_url + headers = { + "Authorization": f"Bearer {api_key.get_secret_value()}", + "Accept": "application/json", + "User-Agent": "OpenCTI-SublimeConnector/1.0", + } + self.session = requests.Session() + self.session.headers.update(headers) + + def _request_data(self, api_url: str, params=None): + """ + Internal method to handle API requests + :return: Response in JSON format + """ + try: + response = self.session.get(api_url, params=params, timeout=30) + + self.helper.connector_logger.info( + "[API] HTTP Get Request to endpoint", {"url_path": api_url} + ) + + response.raise_for_status() + return response + + except requests.RequestException as err: + self.helper.connector_logger.error( + "[API] Error while fetching data", + {"url_path": {api_url}, "error": {str(err)}}, + ) + return None + + def get_group_ids(self, start_time, end_time) -> list: + """ + Fetch list of flagged group IDs within time range from Sublime API. + Args: + start_time (str): ISO 8601 timestamp for range start + end_time (str): ISO 8601 timestamp for range end + Returns: + list: List of group canonical IDs that are flagged + """ + try: + params = { + "created_at__gte": start_time, + "created_at__lt": end_time, + "fetch_all_ids": True, + "stats_limit": 100000, + "flagged__eq": True, + } + + api_url = self.base_url.unicode_string().rstrip("/") + if not api_url.endswith("/v1"): + api_url = f"{api_url}/v1" + + full_url = f"{api_url}/messages/groups" + + self.helper.connector_logger.debug( + "[API] API request for groups", {"url": full_url, "params": params} + ) + + response = self._request_data(api_url=full_url, params=params) + + if not response.ok: + self.helper.connector_logger.error( + "[API] API request for groups failed", + { + "status_code": response.status_code, + "response_text": response.text, + }, + ) + raise Exception( + f"API request failed: {response.status_code} {response.text}" + ) + + data = response.json() + group_ids = data.get("all_group_canonical_ids") or [] + return group_ids + + except Exception as err: + self.helper.connector_logger.error( + "[API] Error fetching group IDs", {"error": str(err)} + ) + raise + + def get_single_group(self, group_id: str) -> dict: + """ + Fetch individual message group by ID from Sublime API. + Args: + group_id (str): Canonical ID of the message group to fetch + Returns: + dict: Message group data dictionary, or None if fetch fails + """ + try: + api_url = self.base_url.unicode_string().rstrip("/") + if not api_url.endswith("/v1"): + api_url = f"{api_url}/v1" + + full_url = f"{api_url}/messages/groups/{group_id}" + + self.helper.connector_logger.debug( + "[API] Fetching group", {"group_id": group_id} + ) + + response = self._request_data(api_url=full_url) + + if not response.ok: + self.helper.connector_logger.warning( + "[API] Failed to fetch group", + { + "group_id": group_id, + "status_code": response.status_code, + "response_text": response.text, + }, + ) + return None + + data = response.json() + + # Map API field name to code expectation (data_model -> MDM) + if "data_model" in data and "MDM" not in data: + data["MDM"] = data["data_model"] + + return data + except Exception as err: + self.helper.connector_logger.error(err) diff --git a/external-import/sublime/tests/__init__.py b/external-import/sublime/tests/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/external-import/sublime/tests/conftest.py b/external-import/sublime/tests/conftest.py new file mode 100644 index 00000000000..8f3a72938a1 --- /dev/null +++ b/external-import/sublime/tests/conftest.py @@ -0,0 +1,25 @@ +""" +Pytest configuration for Sublime Security connector tests. +""" + +import sys +from pathlib import Path +from unittest.mock import Mock + +import pytest + +src_dir = str(Path(__file__).parent.parent.joinpath("src").absolute()) +if src_dir not in sys.path: + sys.path.insert(0, src_dir) + + +@pytest.fixture +def mock_helper(): + """Return a mock OpenCTI helper.""" + helper = Mock() + helper.connector_logger = Mock() + helper.api = Mock() + helper.api.work = Mock() + helper.stix2_create_bundle = Mock(return_value='{"type": "bundle", "objects": []}') + helper.send_stix2_bundle = Mock() + return helper diff --git a/external-import/sublime/tests/test-requirements.txt b/external-import/sublime/tests/test-requirements.txt new file mode 100644 index 00000000000..4603b6dc8c1 --- /dev/null +++ b/external-import/sublime/tests/test-requirements.txt @@ -0,0 +1,3 @@ +-r ../src/requirements.txt +pytest>=8.0.0 +pytest-mock>=3.10.0 diff --git a/external-import/sublime/tests/test_api_client.py b/external-import/sublime/tests/test_api_client.py new file mode 100644 index 00000000000..bf4d1bdda70 --- /dev/null +++ b/external-import/sublime/tests/test_api_client.py @@ -0,0 +1,198 @@ +"""Tests for SublimeClient API client.""" + +from unittest.mock import Mock, patch + +import pytest +from pydantic import HttpUrl, SecretStr +from sublime_client.api_client import SublimeClient + + +@pytest.fixture +def client(mock_helper): + """Create a SublimeClient instance with mocked dependencies.""" + return SublimeClient( + helper=mock_helper, + base_url=HttpUrl("https://platform.sublime.security"), + api_key=SecretStr("test-api-key"), + ) + + +class TestSublimeClientInit: + """Test client initialization.""" + + def test_init_sets_auth_header(self, mock_helper): + client = SublimeClient( + helper=mock_helper, + base_url=HttpUrl("https://platform.sublime.security"), + api_key=SecretStr("my-secret-token"), + ) + assert client.session.headers["Authorization"] == "Bearer my-secret-token" + assert client.session.headers["Accept"] == "application/json" + + def test_init_sets_base_url(self, mock_helper): + client = SublimeClient( + helper=mock_helper, + base_url=HttpUrl("https://custom.api.example.com"), + api_key=SecretStr("key"), + ) + assert "custom.api.example.com" in client.base_url.unicode_string() + + +class TestGetGroupIds: + """Test get_group_ids method.""" + + def test_returns_group_ids(self, client): + mock_response = Mock() + mock_response.ok = True + mock_response.json.return_value = { + "all_group_canonical_ids": ["id-1", "id-2", "id-3"] + } + + with patch.object(client, "_request_data", return_value=mock_response): + result = client.get_group_ids( + "2026-01-01T00:00:00Z", "2026-01-02T00:00:00Z" + ) + + assert result == ["id-1", "id-2", "id-3"] + + def test_returns_empty_list_when_no_ids(self, client): + mock_response = Mock() + mock_response.ok = True + mock_response.json.return_value = {"all_group_canonical_ids": None} + + with patch.object(client, "_request_data", return_value=mock_response): + result = client.get_group_ids( + "2026-01-01T00:00:00Z", "2026-01-02T00:00:00Z" + ) + + assert result == [] + + def test_uses_correct_params(self, client): + mock_response = Mock() + mock_response.ok = True + mock_response.json.return_value = {"all_group_canonical_ids": []} + + with patch.object( + client, "_request_data", return_value=mock_response + ) as mock_req: + client.get_group_ids("2026-01-01T00:00:00Z", "2026-01-02T00:00:00Z") + + call_kwargs = mock_req.call_args + assert "messages/groups" in call_kwargs.kwargs.get( + "api_url", call_kwargs[1].get("api_url", "") + ) + params = call_kwargs.kwargs.get("params", call_kwargs[1].get("params", {})) + assert params["flagged__eq"] is True + assert params["created_at__gte"] == "2026-01-01T00:00:00Z" + assert params["created_at__lt"] == "2026-01-02T00:00:00Z" + + def test_builds_url_with_v1(self, client): + mock_response = Mock() + mock_response.ok = True + mock_response.json.return_value = {"all_group_canonical_ids": []} + + with patch.object( + client, "_request_data", return_value=mock_response + ) as mock_req: + client.get_group_ids("2026-01-01T00:00:00Z", "2026-01-02T00:00:00Z") + + api_url = mock_req.call_args[1].get("api_url") or mock_req.call_args.kwargs.get( + "api_url" + ) + assert "/v1/messages/groups" in api_url + + +class TestGetSingleGroup: + """Test get_single_group method.""" + + def test_returns_group_data(self, client): + mock_response = Mock() + mock_response.ok = True + mock_response.json.return_value = { + "id": "group-123", + "subjects": ["Phishing email"], + "attack_score_verdict": "malicious", + } + + with patch.object(client, "_request_data", return_value=mock_response): + result = client.get_single_group("group-123") + + assert result["id"] == "group-123" + assert result["attack_score_verdict"] == "malicious" + + def test_maps_data_model_to_mdm(self, client): + mock_response = Mock() + mock_response.ok = True + mock_response.json.return_value = { + "id": "group-123", + "data_model": {"sender": {"email": {"email": "evil@phish.com"}}}, + } + + with patch.object(client, "_request_data", return_value=mock_response): + result = client.get_single_group("group-123") + + assert "MDM" in result + assert result["MDM"]["sender"]["email"]["email"] == "evil@phish.com" + + def test_does_not_overwrite_existing_mdm(self, client): + mock_response = Mock() + mock_response.ok = True + mock_response.json.return_value = { + "id": "group-123", + "data_model": {"new": "data"}, + "MDM": {"existing": "data"}, + } + + with patch.object(client, "_request_data", return_value=mock_response): + result = client.get_single_group("group-123") + + assert result["MDM"] == {"existing": "data"} + + def test_returns_none_on_failure(self, client): + mock_response = Mock() + mock_response.ok = False + mock_response.status_code = 404 + mock_response.text = "Not found" + + with patch.object(client, "_request_data", return_value=mock_response): + result = client.get_single_group("nonexistent") + + assert result is None + + def test_returns_none_on_exception(self, client): + with patch.object( + client, "_request_data", side_effect=Exception("network error") + ): + result = client.get_single_group("group-123") + + assert result is None + + +class TestRequestData: + """Test the internal _request_data method.""" + + def test_successful_request(self, client): + mock_response = Mock() + mock_response.raise_for_status = Mock() + + with patch.object(client.session, "get", return_value=mock_response): + result = client._request_data("https://api.example.com/v1/test") + + assert result == mock_response + + def test_request_timeout(self, client): + with patch.object(client.session, "get") as mock_get: + client._request_data("https://api.example.com/v1/test") + mock_get.assert_called_once_with( + "https://api.example.com/v1/test", params=None, timeout=30 + ) + + def test_request_exception_returns_none(self, client): + import requests + + with patch.object( + client.session, "get", side_effect=requests.RequestException("timeout") + ): + result = client._request_data("https://api.example.com/v1/test") + + assert result is None diff --git a/external-import/sublime/tests/test_converter_to_stix.py b/external-import/sublime/tests/test_converter_to_stix.py new file mode 100644 index 00000000000..8d67b3e25e5 --- /dev/null +++ b/external-import/sublime/tests/test_converter_to_stix.py @@ -0,0 +1,294 @@ +"""Tests for ConverterToStix.""" + +import stix2 +from connector.converter_to_stix import ConverterToStix +from connectors_sdk.models.enums import TLPLevel + + +class TestConverterToStixInit: + """Test ConverterToStix initialization.""" + + def test_init_with_amber(self, mock_helper): + converter = ConverterToStix(mock_helper, tlp_level=TLPLevel.AMBER) + assert converter.tlp_marking == stix2.TLP_AMBER + assert converter.author is not None + assert converter.author.name == "Sublime" + + def test_init_with_red(self, mock_helper): + converter = ConverterToStix(mock_helper, tlp_level=TLPLevel.RED) + assert converter.tlp_marking == stix2.TLP_RED + + def test_init_with_green(self, mock_helper): + converter = ConverterToStix(mock_helper, tlp_level=TLPLevel.GREEN) + assert converter.tlp_marking == stix2.TLP_GREEN + + def test_init_with_clear(self, mock_helper): + converter = ConverterToStix(mock_helper, tlp_level=TLPLevel.CLEAR) + assert converter.tlp_marking == stix2.TLP_WHITE + + def test_init_with_amber_strict(self, mock_helper): + converter = ConverterToStix(mock_helper, tlp_level=TLPLevel.AMBER_STRICT) + assert converter.tlp_marking.id is not None + assert "AMBER+STRICT" in converter.tlp_marking.x_opencti_definition + + +class TestCreateAuthor: + """Test author creation.""" + + def test_create_author(self, mock_helper): + converter = ConverterToStix(mock_helper, tlp_level=TLPLevel.AMBER) + author = converter.author + assert author.type == "identity" + assert author.name == "Sublime" + assert author.identity_class == "organization" + assert author.description == "Email Security Platform" + + def test_author_has_deterministic_id(self, mock_helper): + c1 = ConverterToStix(mock_helper, tlp_level=TLPLevel.AMBER) + c2 = ConverterToStix(mock_helper, tlp_level=TLPLevel.AMBER) + assert c1.author.id == c2.author.id + + +class TestCreateDomainName: + """Test domain name observable creation.""" + + def test_create_domain_name(self, mock_helper): + converter = ConverterToStix(mock_helper, tlp_level=TLPLevel.AMBER) + domain = converter.create_domain_name("example.com") + assert domain.type == "domain-name" + assert domain.value == "example.com" + assert stix2.TLP_AMBER.id in domain.object_marking_refs + + def test_create_domain_name_has_author_ref(self, mock_helper): + converter = ConverterToStix(mock_helper, tlp_level=TLPLevel.AMBER) + domain = converter.create_domain_name("test.org") + assert domain.x_opencti_created_by_ref == converter.author["id"] + + +class TestCreateEmailAddress: + """Test email address observable creation.""" + + def test_create_email_address(self, mock_helper): + converter = ConverterToStix(mock_helper, tlp_level=TLPLevel.AMBER) + email = converter.create_email_address("user@example.com") + assert email.type == "email-addr" + assert email.value == "user@example.com" + assert stix2.TLP_AMBER.id in email.object_marking_refs + + def test_create_email_address_tlp_red(self, mock_helper): + converter = ConverterToStix(mock_helper, tlp_level=TLPLevel.RED) + email = converter.create_email_address("user@example.com") + assert stix2.TLP_RED.id in email.object_marking_refs + + +class TestCreateFile: + """Test file observable creation.""" + + def test_create_file_with_hash(self, mock_helper): + converter = ConverterToStix(mock_helper, tlp_level=TLPLevel.AMBER) + sha256 = "a" * 64 # valid SHA-256 hash + file_obj = converter.create_file( + hashes={"SHA-256": sha256}, + file_name="malware.exe", + file_size=1024, + mime_type="application/x-executable", + ) + assert file_obj.type == "file" + assert file_obj.hashes["SHA-256"] == sha256 + assert file_obj.name == "malware.exe" + assert file_obj.size == 1024 + assert file_obj.mime_type == "application/x-executable" + + def test_create_file_with_none_fields(self, mock_helper): + converter = ConverterToStix(mock_helper, tlp_level=TLPLevel.AMBER) + md5 = "d41d8cd98f00b204e9800998ecf8427e" # valid MD5 hash + file_obj = converter.create_file( + hashes={"MD5": md5}, + file_name=None, + file_size=None, + mime_type=None, + ) + assert file_obj.type == "file" + assert file_obj.hashes["MD5"] == md5 + + +class TestCreateIncident: + """Test incident creation.""" + + def test_create_incident(self, mock_helper): + converter = ConverterToStix(mock_helper, tlp_level=TLPLevel.AMBER) + incident = converter.create_incident( + name="Test Incident", + created_timestamp="2026-01-15T10:00:00Z", + description="A phishing incident", + group_id="group-123", + incident_type="phishing", + url="https://sublime.security/messages/group-123", + severity="high", + ) + assert incident.type == "incident" + assert incident.name == "Test Incident" + assert incident.description == "A phishing incident" + assert incident.created.year == 2026 + assert incident.created.month == 1 + assert incident.created.day == 15 + assert incident.severity == "high" + assert stix2.TLP_AMBER.id in incident.object_marking_refs + + def test_create_incident_deterministic_id(self, mock_helper): + converter = ConverterToStix(mock_helper, tlp_level=TLPLevel.AMBER) + i1 = converter.create_incident( + name="Incident", + created_timestamp="2026-01-01T00:00:00Z", + description="desc", + group_id="g1", + incident_type="phishing", + url="http://example.com", + severity="high", + ) + i2 = converter.create_incident( + name="Incident", + created_timestamp="2026-01-01T00:00:00Z", + description="desc", + group_id="g1", + incident_type="phishing", + url="http://example.com", + severity="high", + ) + assert i1.id == i2.id + + def test_create_incident_external_reference(self, mock_helper): + converter = ConverterToStix(mock_helper, tlp_level=TLPLevel.AMBER) + incident = converter.create_incident( + name="Test", + created_timestamp="2026-01-15T10:00:00Z", + description="desc", + group_id="abc-123", + incident_type="phishing", + url="https://sublime.security/messages/abc-123", + severity="high", + ) + ext_ref = incident.external_references[0] + assert ext_ref.source_name == "Sublime" + assert ext_ref.external_id == "abc-123" + assert "abc-123" in ext_ref.url + + +class TestCreateIndicator: + """Test indicator creation.""" + + def test_create_indicator(self, mock_helper): + converter = ConverterToStix(mock_helper, tlp_level=TLPLevel.AMBER) + pattern = "[email-addr:value = 'evil@phish.com']" + indicator = converter.create_indicator(pattern=pattern) + assert indicator.type == "indicator" + assert indicator.pattern == pattern + assert indicator.pattern_type == "stix" + assert "malicious-activity" in indicator.labels + + def test_create_indicator_deterministic_id(self, mock_helper): + converter = ConverterToStix(mock_helper, tlp_level=TLPLevel.AMBER) + pattern = "[ipv4-addr:value = '1.2.3.4']" + ind1 = converter.create_indicator(pattern=pattern) + ind2 = converter.create_indicator(pattern=pattern) + assert ind1.id == ind2.id + + +class TestCreateIpAddress: + """Test IP address observable creation.""" + + def test_create_ipv4(self, mock_helper): + converter = ConverterToStix(mock_helper, tlp_level=TLPLevel.AMBER) + ip = converter.create_ip_address("192.168.1.1") + assert ip.type == "ipv4-addr" + assert ip.value == "192.168.1.1" + assert stix2.TLP_AMBER.id in ip.object_marking_refs + + def test_create_ipv6(self, mock_helper): + converter = ConverterToStix(mock_helper, tlp_level=TLPLevel.AMBER) + ip = converter.create_ip_address("2001:db8::1") + assert ip.type == "ipv6-addr" + assert ip.value == "2001:db8::1" + + def test_create_invalid_ip_returns_none(self, mock_helper): + converter = ConverterToStix(mock_helper, tlp_level=TLPLevel.AMBER) + result = converter.create_ip_address("not-an-ip") + assert result is None + + +class TestCreateRelationship: + """Test relationship creation.""" + + def test_create_relationship(self, mock_helper): + from pycti import Incident, Indicator + + converter = ConverterToStix(mock_helper, tlp_level=TLPLevel.AMBER) + source_id = Indicator.generate_id("[ipv4-addr:value = '1.2.3.4']") + target_id = Incident.generate_id("Test", "2026-01-01T00:00:00Z") + rel = converter.create_relationship( + source_id=source_id, + target_id=target_id, + relationship_type="indicates", + ) + assert rel.type == "relationship" + assert rel.relationship_type == "indicates" + assert rel.source_ref == source_id + assert rel.target_ref == target_id + + def test_create_relationship_deterministic_id(self, mock_helper): + from pycti import Incident, Indicator + + converter = ConverterToStix(mock_helper, tlp_level=TLPLevel.AMBER) + source_id = Indicator.generate_id("[ipv4-addr:value = '1.2.3.4']") + target_id = Incident.generate_id("Test", "2026-01-01T00:00:00Z") + r1 = converter.create_relationship(source_id, target_id, "indicates") + r2 = converter.create_relationship(source_id, target_id, "indicates") + assert r1.id == r2.id + + +class TestCreateUrl: + """Test URL observable creation.""" + + def test_create_url(self, mock_helper): + converter = ConverterToStix(mock_helper, tlp_level=TLPLevel.AMBER) + url = converter.create_url("https://evil.com/phish") + assert url.type == "url" + assert url.value == "https://evil.com/phish" + assert stix2.TLP_AMBER.id in url.object_marking_refs + + +class TestCreateCaseIncident: + """Test case incident creation.""" + + def test_create_case_incident(self, mock_helper): + from pycti import Incident + + converter = ConverterToStix(mock_helper, tlp_level=TLPLevel.AMBER) + incident_id = Incident.generate_id("Test", "2026-01-15T10:00:00Z") + case = converter.create_case_incident( + name="Test Case", + created="2026-01-15T10:00:00Z", + description="Test description", + object_refs=[incident_id], + severity="high", + priority="P1", + ) + assert case.type == "case-incident" + assert case.name == "Test Case" + assert case.severity == "high" + assert case.priority == "P1" + assert stix2.TLP_AMBER.id in case.object_marking_refs + + def test_create_case_incident_deterministic_id(self, mock_helper): + converter = ConverterToStix(mock_helper, tlp_level=TLPLevel.AMBER) + c1 = converter.create_case_incident(name="Case", created="2026-01-01T00:00:00Z") + c2 = converter.create_case_incident(name="Case", created="2026-01-01T00:00:00Z") + assert c1.id == c2.id + + def test_create_case_incident_without_optional_fields(self, mock_helper): + converter = ConverterToStix(mock_helper, tlp_level=TLPLevel.AMBER) + case = converter.create_case_incident( + name="Minimal Case", created="2026-01-01T00:00:00Z" + ) + assert case.type == "case-incident" + assert case.name == "Minimal Case" diff --git a/external-import/sublime/tests/test_settings.py b/external-import/sublime/tests/test_settings.py new file mode 100644 index 00000000000..3c7ac559f44 --- /dev/null +++ b/external-import/sublime/tests/test_settings.py @@ -0,0 +1,163 @@ +"""Tests for ConnectorSettings validation.""" + +from typing import Any + +import pytest +from connector.settings import ConnectorSettings +from connectors_sdk import BaseConfigModel, ConfigValidationError + + +@pytest.mark.parametrize( + "settings_dict", + [ + pytest.param( + { + "opencti": {"url": "http://localhost:8080", "token": "test-token"}, + "connector": { + "id": "0a3a00ad-b5f0-4dca-83b6-9012662dcf80", + "name": "Sublime Security", + "scope": "sublime", + "log_level": "error", + "duration_period": "PT3M", + }, + "sublime": { + "url": "https://platform.sublime.security", + "token": "my-secret-token", + "incident_type": "phishing", + "verdicts": "malicious,suspicious", + "tlp_level": "amber", + }, + }, + id="full_valid_settings_dict", + ), + pytest.param( + { + "opencti": {"url": "http://localhost:8080", "token": "test-token"}, + "connector": {}, + "sublime": { + "token": "my-secret-token", + }, + }, + id="minimal_valid_settings_dict", + ), + pytest.param( + { + "opencti": {"url": "http://localhost:8080", "token": "test-token"}, + "connector": {}, + "sublime": { + "token": "my-secret-token", + "auto_create_cases": True, + "set_priority": False, + "set_severity": False, + "batch_size": 50, + "force_historical": True, + "first_run_duration": "PT24H", + "tlp_level": "red", + }, + }, + id="valid_settings_with_all_options", + ), + pytest.param( + { + "opencti": {"url": "http://localhost:8080", "token": "test-token"}, + "connector": {}, + "sublime": { + "token": "my-secret-token", + "verdicts": "malicious", + "tlp_level": "clear", + }, + }, + id="valid_settings_with_single_verdict", + ), + ], +) +def test_settings_should_accept_valid_input(settings_dict): + """ + Test that `ConnectorSettings` accepts valid input. + `BaseConnectorSettings._load_config_dict` is overridden to return + a fake but valid dict. + """ + + class FakeConnectorSettings(ConnectorSettings): + @classmethod + def _load_config_dict(cls, _, handler) -> dict[str, Any]: + return handler(settings_dict) + + settings = FakeConnectorSettings() + assert isinstance(settings.opencti, BaseConfigModel) is True + assert isinstance(settings.connector, BaseConfigModel) is True + assert isinstance(settings.sublime, BaseConfigModel) is True + + +@pytest.mark.parametrize( + "settings_dict, field_name", + [ + pytest.param({}, "settings", id="empty_settings_dict"), + pytest.param( + { + "opencti": {"url": "http://localhost:8080"}, + "connector": {}, + "sublime": {"token": "my-secret-token"}, + }, + "opencti.token", + id="missing_opencti_token", + ), + pytest.param( + { + "opencti": {"url": "http://localhost:8080", "token": "test-token"}, + "connector": {"id": 123456}, + "sublime": {"token": "my-secret-token"}, + }, + "connector.id", + id="invalid_connector_id", + ), + pytest.param( + { + "opencti": {"url": "http://localhost:8080", "token": "test-token"}, + "connector": {}, + "sublime": {}, + }, + "sublime.token", + id="missing_sublime_token", + ), + pytest.param( + { + "opencti": {"url": "http://localhost:8080", "token": "test-token"}, + "connector": {}, + "sublime": { + "token": "my-secret-token", + "url": "not-a-valid-url", + }, + }, + "sublime.url", + id="invalid_sublime_url", + ), + pytest.param( + { + "opencti": {"url": "http://localhost:8080", "token": "test-token"}, + "connector": {}, + "sublime": { + "token": "my-secret-token", + "tlp_level": "INVALID_TLP", + }, + }, + "sublime.tlp_level", + id="invalid_tlp_level", + ), + ], +) +def test_settings_should_raise_when_invalid_input(settings_dict, field_name): + """ + Test that `ConnectorSettings` raises on invalid input. + `BaseConnectorSettings._load_config_dict` is overridden to return + a fake and invalid dict. + """ + + class FakeConnectorSettings(ConnectorSettings): + @classmethod + def _load_config_dict(cls, _, handler) -> dict[str, Any]: + return handler(settings_dict) + + with pytest.raises(ConfigValidationError) as err: + FakeConnectorSettings() + assert "Error validating configuration" in str(err) diff --git a/external-import/sublime/tests/test_utils.py b/external-import/sublime/tests/test_utils.py new file mode 100644 index 00000000000..b7d0edc9506 --- /dev/null +++ b/external-import/sublime/tests/test_utils.py @@ -0,0 +1,99 @@ +"""Tests for utility functions.""" + +from connector.utils import lookup_MDM_value, map_attack_score_to_level, sanitize_email + + +class TestSanitizeEmail: + """Test email sanitization.""" + + def test_removes_bom(self): + assert sanitize_email("\ufeffuser@example.com") == "user@example.com" + + def test_removes_trailing_bom(self): + assert sanitize_email("user@example.com\ufeff") == "user@example.com" + + def test_strips_whitespace(self): + assert sanitize_email(" user@example.com ") == "user@example.com" + + def test_none_returns_none(self): + assert sanitize_email(None) is None + + def test_empty_string_returns_empty(self): + assert sanitize_email("") == "" + + def test_normal_email_unchanged(self): + assert sanitize_email("test@company.com") == "test@company.com" + + +class TestMapAttackScoreToLevel: + """Test attack score to priority/severity mapping.""" + + def test_malicious_priority(self): + assert map_attack_score_to_level(True, True, "malicious", "priority") == "P1" + + def test_malicious_severity(self): + assert map_attack_score_to_level(True, True, "malicious", "severity") == "high" + + def test_suspicious_priority(self): + assert map_attack_score_to_level(True, True, "suspicious", "priority") == "P2" + + def test_suspicious_severity(self): + assert ( + map_attack_score_to_level(True, True, "suspicious", "severity") == "medium" + ) + + def test_spam_priority(self): + assert map_attack_score_to_level(True, True, "spam", "priority") == "P3" + + def test_spam_severity(self): + assert map_attack_score_to_level(True, True, "spam", "severity") == "low" + + def test_unknown_verdict_defaults(self): + assert map_attack_score_to_level(True, True, "unknown", "priority") == "P4" + assert map_attack_score_to_level(True, True, "unknown", "severity") == "low" + + def test_none_verdict_treated_as_unknown(self): + assert map_attack_score_to_level(True, True, None, "priority") == "P4" + assert map_attack_score_to_level(True, True, None, "severity") == "low" + + def test_set_priority_false_returns_none_for_priority(self): + assert map_attack_score_to_level(False, True, "malicious", "priority") is None + + def test_set_severity_false_returns_none_for_severity(self): + assert map_attack_score_to_level(True, False, "malicious", "severity") is None + + def test_set_priority_false_still_returns_severity_when_enabled(self): + assert map_attack_score_to_level(False, True, "malicious", "severity") == "high" + + def test_case_insensitive(self): + assert map_attack_score_to_level(True, True, "MALICIOUS", "severity") == "high" + + +class TestLookupMDMValue: + """Test MDM lookup utility.""" + + def test_simple_key(self): + mdm = {"sender": "test@example.com"} + assert lookup_MDM_value(mdm, "sender") == "test@example.com" + + def test_nested_key(self): + mdm = {"sender": {"email": {"email": "phish@evil.com"}}} + assert lookup_MDM_value(mdm, "sender.email.email") == "phish@evil.com" + + def test_missing_key_returns_none(self): + mdm = {"sender": {"email": {}}} + assert lookup_MDM_value(mdm, "sender.email.email") is None + + def test_completely_missing_path_returns_none(self): + mdm = {} + assert lookup_MDM_value(mdm, "sender.email.email") is None + + def test_non_dict_intermediate_returns_none(self): + mdm = {"sender": "not_a_dict"} + assert lookup_MDM_value(mdm, "sender.email.email") is None + + def test_list_value(self): + mdm = {"recipients": {"to": [{"email": "a@b.com"}, {"email": "c@d.com"}]}} + result = lookup_MDM_value(mdm, "recipients.to") + assert len(result) == 2 + assert result[0]["email"] == "a@b.com" diff --git a/external-import/tanium-incidents/src/requirements.txt b/external-import/tanium-incidents/src/requirements.txt index e1e0bd9718c..e3a19393203 100644 --- a/external-import/tanium-incidents/src/requirements.txt +++ b/external-import/tanium-incidents/src/requirements.txt @@ -1 +1 @@ -pycti==7.260309.0 +pycti==7.260515.0 diff --git a/external-import/taxii2/src/requirements.txt b/external-import/taxii2/src/requirements.txt index 72b42ba3fa1..8b0ad1552d9 100644 --- a/external-import/taxii2/src/requirements.txt +++ b/external-import/taxii2/src/requirements.txt @@ -1,4 +1,4 @@ -pycti==7.260309.0 +pycti==7.260515.0 antlr4-python3-runtime chardet datefinder diff --git a/external-import/teamt5/src/requirements.txt b/external-import/teamt5/src/requirements.txt index 94c5856841f..1f5f40e2193 100644 --- a/external-import/teamt5/src/requirements.txt +++ b/external-import/teamt5/src/requirements.txt @@ -1,5 +1,5 @@ -pycti==7.260309.0 +pycti==7.260515.0 PyYAML==6.0.3 -requests==2.32.5 +requests==2.33.0 validators==0.35.0 stix2==3.0.1 \ No newline at end of file diff --git a/external-import/tenable-security-center/pyproject.toml b/external-import/tenable-security-center/pyproject.toml index c8f57a1e96d..baf0bb566bb 100644 --- a/external-import/tenable-security-center/pyproject.toml +++ b/external-import/tenable-security-center/pyproject.toml @@ -16,7 +16,7 @@ classifiers = [ "Programming Language :: Python :: 3.12", ] dependencies = [ - "pycti==7.260309.0", + "pycti==7.260515.0", "validators~=0.35.0", "pydantic>=2.8.2,<3.0.0", "pytenable~=1.5.3", # for now we handle API from 5.13 to 6.4 @@ -27,7 +27,7 @@ dependencies = [ [project.optional-dependencies] # Define extras for testing and development test = [ - "pytest>=8.1.1,<9", # Pytest for running tests + "pytest>=9.0.3,<10", # Pytest for running tests ] dev = [ "black>=26.1,<27", # Code formatter @@ -36,7 +36,7 @@ dev = [ "mypy>=1.13.0,<2", # type validator "types-requests", # stubs for requests lib "types-PyYAML", # stubs for PyYAML lib - "python-dotenv~=1.1.0", + "python-dotenv~=1.2.2", "pip-audit~=2.10.0" ] all = [ diff --git a/external-import/tenable-vuln-management/requirements.txt b/external-import/tenable-vuln-management/requirements.txt index 50f7d9369d0..44497a20fda 100644 --- a/external-import/tenable-vuln-management/requirements.txt +++ b/external-import/tenable-vuln-management/requirements.txt @@ -1,6 +1,6 @@ pyTenable==1.5.3 python-dateutil==2.9.0.post0 -pycti==7.260309.0 +pycti==7.260515.0 validators==0.35.0 pydantic>=2.8.2, <3.0.0 stix2~=3.0.1 \ No newline at end of file diff --git a/external-import/tenable-vuln-management/src/tenable_vuln_management/models/opencti.py b/external-import/tenable-vuln-management/src/tenable_vuln_management/models/opencti.py index 20019b9a00a..4f691180e9f 100644 --- a/external-import/tenable-vuln-management/src/tenable_vuln_management/models/opencti.py +++ b/external-import/tenable-vuln-management/src/tenable_vuln_management/models/opencti.py @@ -270,9 +270,6 @@ class Hostname(Observable): """Represents a hostname observable.""" value: str = Field(..., description="The hostname.", min_length=1) - __value_validator = field_validator("value", mode="after")( - make_validator("value", validators.hostname) - ) def to_stix2_object(self) -> Any: return PyCTIHostname( diff --git a/external-import/tenable-vuln-management/src/tenable_vuln_management/models/tenable.py b/external-import/tenable-vuln-management/src/tenable_vuln_management/models/tenable.py index 7b38c92672e..a87faa5790d 100644 --- a/external-import/tenable-vuln-management/src/tenable_vuln_management/models/tenable.py +++ b/external-import/tenable-vuln-management/src/tenable_vuln_management/models/tenable.py @@ -140,7 +140,9 @@ class Plugin(FrozenBaseModelWithWarnedExtra): Represents plugin details that provide information about the detected vulnerability. """ - bid: list[int] = Field(..., description="Bugtraq IDs related to the vulnerability.") + bid: Optional[list[int]] = Field( + None, description="Bugtraq IDs related to the vulnerability." + ) checks_for_default_account: bool = Field( ..., description="Indicates if the plugin checks for default accounts." ) @@ -260,8 +262,8 @@ class Asset(FrozenBaseModelWithWarnedExtra): """ bios_uuid: Optional[str] = Field(None, description="The BIOS UUID of the asset.") - device_type: str = Field( - ..., description="The type of device (e.g., hypervisor, general-purpose)." + device_type: Optional[str] = Field( + None, description="The type of device (e.g., hypervisor, general-purpose)." ) fqdn: Optional[str] = Field( None, description="The fully qualified domain name of the asset." diff --git a/external-import/thehive/src/requirements.txt b/external-import/thehive/src/requirements.txt index 0645e9c9b16..571d069831e 100644 --- a/external-import/thehive/src/requirements.txt +++ b/external-import/thehive/src/requirements.txt @@ -1,3 +1,3 @@ -pycti==7.260309.0 +pycti==7.260515.0 stix2 thehive4py>=2.0.0b diff --git a/external-import/thehive/src/tests/test_thehive.py b/external-import/thehive/src/tests/test_thehive.py new file mode 100644 index 00000000000..530e95759ab --- /dev/null +++ b/external-import/thehive/src/tests/test_thehive.py @@ -0,0 +1,94 @@ +import time +import unittest +from unittest.mock import MagicMock, patch, sentinel + +import thehive as module + + +@patch.object(module, "TheHiveApi") +@patch.object(module, "OpenCTIConnectorHelper") +@patch.object(module, "yaml") +@patch.object(module, "os") +class TheHiveTest(unittest.TestCase): + + def test_process_comments_simple(self, m_os, m_yaml, m_helper, m_thehiveapi): + """testing the calls made to hive API by the process_comments function""" + _now = int(time.time() * 1000) + _case = MagicMock() + _case_values = { + "_id": sentinel.case_id, + "title": MagicMock(), + "_createdAt": _now, + } + _case.get.side_effect = _case_values.get + + _stix_case = MagicMock() + _stix_case.id = sentinel.stix_case_id + + _comment = "this is my comment" + _case_comment = MagicMock() + _case_comment_values = {"message": _comment, "_createdAt": _now} + _case_comment.get.side_effect = _case_comment_values.get + m_thehiveapi.return_value.case.find_comments.return_value = [_case_comment] + + m_os.path.isfile.return_value = False + _connector = module.TheHive() + + processed_comments = _connector.process_comments(_case, _stix_case) + + m_thehiveapi.return_value.case.find_comments.assert_called_with( + case_id=sentinel.case_id, + sortby=module.Asc("_createdAt"), + paginate=module.Paginate(start=0, end=10), + ) + self.assertEqual(len(processed_comments), 1) + self.assertEqual(processed_comments[0]["type"], "note") + self.assertEqual(processed_comments[0]["content"], _comment) + self.assertEqual(processed_comments[0]["object_refs"], [sentinel.stix_case_id]) + + def test_process_comments_duplicate(self, m_os, m_yaml, m_helper, m_thehiveapi): + """testing process_comments proper handling of duplicates""" + _now = int(time.time() * 1000) + _case = MagicMock() + _case_values = { + "_id": sentinel.case_id, + "title": MagicMock(), + "_createdAt": _now, + } + _case.get.side_effect = _case_values.get + + _stix_case = MagicMock() + _stix_case.id = sentinel.stix_case_id + + _comment = "this is my comment" + _case_comment = MagicMock() + _case_comment_values = {"message": _comment, "_createdAt": _now} + _case_comment.get.side_effect = _case_comment_values.get + m_thehiveapi.return_value.case.find_comments.return_value = [ + _case_comment, + _case_comment, + ] + + m_os.path.isfile.return_value = False + _connector = module.TheHive() + + processed_comments = _connector.process_comments(_case, _stix_case) + + m_thehiveapi.return_value.case.find_comments.assert_called_with( + case_id=sentinel.case_id, + sortby=module.Asc("_createdAt"), + paginate=module.Paginate(start=0, end=10), + ) + self.assertEqual(len(processed_comments), 2) + self.assertEqual(processed_comments[0]["type"], "note") + self.assertEqual(processed_comments[0]["type"], processed_comments[1]["type"]) + self.assertEqual(processed_comments[0]["content"], _comment) + self.assertEqual( + processed_comments[0]["content"], processed_comments[1]["content"] + ) + self.assertEqual(processed_comments[0]["object_refs"], [sentinel.stix_case_id]) + self.assertEqual( + processed_comments[0]["object_refs"], processed_comments[1]["object_refs"] + ) + + self.assertEqual(processed_comments[0]["id"], processed_comments[1]["id"]) diff --git a/external-import/thehive/src/thehive.py b/external-import/thehive/src/thehive.py index 4965ffa6ec6..06b91f0b76a 100644 --- a/external-import/thehive/src/thehive.py +++ b/external-import/thehive/src/thehive.py @@ -4,7 +4,6 @@ import sys import time import traceback -import uuid from datetime import datetime import requests @@ -21,6 +20,7 @@ CustomObjectCaseIncident, CustomObjectTask, Incident, + Note, OpenCTIConnectorHelper, StixCoreRelationship, StixSightingRelationship, @@ -647,7 +647,7 @@ def process_comments(self, case, stix_case): # Creating a dictionary representing a STIX Note object stix_comment = { "type": "note", - "id": "note--" + str(uuid.uuid4()), + "id": Note.generate_id(comment.get("message", "No comment"), created), "content": comment.get("message", "No comment"), "created": created, "modified": created, diff --git a/external-import/threatfox/src/requirements.txt b/external-import/threatfox/src/requirements.txt index 4d517c2e066..9b869c70585 100644 --- a/external-import/threatfox/src/requirements.txt +++ b/external-import/threatfox/src/requirements.txt @@ -1,5 +1,5 @@ -pycti==7.260309.0 -urllib3==2.6.3 +pycti==7.260515.0 +urllib3==2.7.0 validators==0.35.0 pydantic>=2.10, <3 pydantic-settings==2.9.1 diff --git a/external-import/threatmatch/src/requirements.txt b/external-import/threatmatch/src/requirements.txt index 342f5676d0c..d33a607fada 100644 --- a/external-import/threatmatch/src/requirements.txt +++ b/external-import/threatmatch/src/requirements.txt @@ -1,4 +1,4 @@ -pycti==7.260309.0 +pycti==7.260515.0 beautifulsoup4==4.14.2 pydantic==2.11.9 pydantic-settings==2.10.1 \ No newline at end of file diff --git a/external-import/threatmatch/tests/test-requirements.txt b/external-import/threatmatch/tests/test-requirements.txt index 8164121b32a..c3de415d29c 100644 --- a/external-import/threatmatch/tests/test-requirements.txt +++ b/external-import/threatmatch/tests/test-requirements.txt @@ -1,4 +1,4 @@ -r ../src/requirements.txt freezegun==1.5.4 -pytest==8.4.1 +pytest==9.0.3 pytest-mock==3.14.1 \ No newline at end of file diff --git a/external-import/tweetfeed/src/requirements.txt b/external-import/tweetfeed/src/requirements.txt index e9684a32073..f5b8181a0c7 100644 --- a/external-import/tweetfeed/src/requirements.txt +++ b/external-import/tweetfeed/src/requirements.txt @@ -1 +1 @@ -pycti==7.260309.0 \ No newline at end of file +pycti==7.260515.0 \ No newline at end of file diff --git a/external-import/urlhaus-recent-payloads/src/requirements.txt b/external-import/urlhaus-recent-payloads/src/requirements.txt index c55331d2020..28ced3192ed 100644 --- a/external-import/urlhaus-recent-payloads/src/requirements.txt +++ b/external-import/urlhaus-recent-payloads/src/requirements.txt @@ -1,3 +1,3 @@ -pycti==7.260309.0 +pycti==7.260515.0 pydantic >=2.8.2, <3 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk diff --git a/external-import/urlhaus-recent-payloads/tests/test-requirements.txt b/external-import/urlhaus-recent-payloads/tests/test-requirements.txt index bdef682113c..d405632324b 100644 --- a/external-import/urlhaus-recent-payloads/tests/test-requirements.txt +++ b/external-import/urlhaus-recent-payloads/tests/test-requirements.txt @@ -1,2 +1,2 @@ -r ../src/requirements.txt -pytest==8.4.2 +pytest==9.0.3 diff --git a/external-import/urlhaus/src/requirements.txt b/external-import/urlhaus/src/requirements.txt index 95b9cb1a2a8..31c8f935547 100644 --- a/external-import/urlhaus/src/requirements.txt +++ b/external-import/urlhaus/src/requirements.txt @@ -1,7 +1,7 @@ -pycti==7.260309.0 -urllib3==2.6.3 +pycti==7.260515.0 +urllib3==2.7.0 pyyaml~=6.0.2 -requests~=2.32.3 +requests~=2.33.0 python_dateutil==2.9.0.post0 pydantic >=2.8.2, <3 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk diff --git a/external-import/urlhaus/tests/test-requirements.txt b/external-import/urlhaus/tests/test-requirements.txt index bdef682113c..d405632324b 100644 --- a/external-import/urlhaus/tests/test-requirements.txt +++ b/external-import/urlhaus/tests/test-requirements.txt @@ -1,2 +1,2 @@ -r ../src/requirements.txt -pytest==8.4.2 +pytest==9.0.3 diff --git a/external-import/urlscan/src/requirements.txt b/external-import/urlscan/src/requirements.txt index 3f213457f7c..c33a762304a 100644 --- a/external-import/urlscan/src/requirements.txt +++ b/external-import/urlscan/src/requirements.txt @@ -1,3 +1,3 @@ -pycti==7.260309.0 +pycti==7.260515.0 pydantic>=2.8.2,<3.0.0 validators==0.35.0 \ No newline at end of file diff --git a/external-import/usta/.dockerignore b/external-import/usta/.dockerignore new file mode 100644 index 00000000000..48c0cf09cf7 --- /dev/null +++ b/external-import/usta/.dockerignore @@ -0,0 +1,9 @@ +**/__pycache__ +**/*.pyc +**/*.pyo +**/.pytest_cache +**/.coverage +**/tests +.git +.gitignore +*.md diff --git a/external-import/usta/.env.sample b/external-import/usta/.env.sample new file mode 100644 index 00000000000..b8449b46431 --- /dev/null +++ b/external-import/usta/.env.sample @@ -0,0 +1,23 @@ +OPENCTI_URL=http://opencti:8080 +OPENCTI_TOKEN=ChangeMe + +CONNECTOR_ID=ChangeMe +CONNECTOR_NAME=USTA +CONNECTOR_SCOPE=indicator,observable,malware,identity,incident,user-account,report,threat-actor +CONNECTOR_LOG_LEVEL=info +CONNECTOR_DURATION_PERIOD=PT30M +CONNECTOR_QUEUE_THRESHOLD=500 + +USTA_API_BASE_URL=https://usta.prodaft.com +USTA_API_KEY=ChangeMe +USTA_IMPORT_START_DATE=P90D +USTA_PAGE_SIZE=100 +USTA_IMPORT_MALICIOUS_URLS=true +USTA_IMPORT_PHISHING_SITES=true +USTA_IMPORT_MALWARE_HASHES=true +USTA_IMPORT_COMPROMISED_CREDENTIALS=true +USTA_IMPORT_CREDIT_CARDS=true +USTA_IMPORT_DEEP_SIGHT_TICKETS=true +USTA_STORE_CREDENTIAL_PASSWORD=false +USTA_TLP_LEVEL=red +USTA_CONFIDENCE_LEVEL=99 \ No newline at end of file diff --git a/external-import/usta/.gitignore b/external-import/usta/.gitignore new file mode 100644 index 00000000000..fa8af505dea --- /dev/null +++ b/external-import/usta/.gitignore @@ -0,0 +1,6 @@ +.venv +.env +tests/.coverage +.pytest_cache +.coverage +__pycache__/ \ No newline at end of file diff --git a/external-import/usta/.pylintrc b/external-import/usta/.pylintrc new file mode 100644 index 00000000000..52aa8737326 --- /dev/null +++ b/external-import/usta/.pylintrc @@ -0,0 +1,7 @@ +[MASTER] +init-hook= + import sys; + sys.path.insert(0, 'src') + +[FORMAT] +max-line-length=100 diff --git a/external-import/usta/Dockerfile b/external-import/usta/Dockerfile new file mode 100644 index 00000000000..b0c1088fc36 --- /dev/null +++ b/external-import/usta/Dockerfile @@ -0,0 +1,17 @@ +FROM python:3.12-alpine +ENV CONNECTOR_TYPE=EXTERNAL_IMPORT + +RUN apk add --no-cache git build-base libffi-dev openssl-dev libmagic + +COPY src /opt/opencti-connector-usta + +RUN cd /opt/opencti-connector-usta && \ + pip install --no-cache-dir -r requirements.txt && \ + apk del git build-base libffi-dev openssl-dev + +WORKDIR /opt/opencti-connector-usta + +COPY entrypoint.sh / +RUN chmod +x /entrypoint.sh + +ENTRYPOINT ["/entrypoint.sh"] diff --git a/external-import/usta/README.md b/external-import/usta/README.md new file mode 100644 index 00000000000..ecc3aeeb4bc --- /dev/null +++ b/external-import/usta/README.md @@ -0,0 +1,252 @@ +# OpenCTI PRODAFT USTA External Import Connector + +This connector imports threat intelligence data from the [USTA](https://usta.prodaft.com) Threat Stream API by [Prodaft](https://prodaft.com) into [OpenCTI](https://www.opencti.io/). + +## Table of Contents + +- [Overview](#overview) +- [Data Imported](#data-imported) +- [STIX Mapping](#stix-mapping) +- [Requirements](#requirements) +- [Configuration](#configuration) +- [Deployment](#deployment) +- [Testing](#testing) +- [Architecture](#architecture) +- [Finding Data in OpenCTI](#finding-data-in-opencti) + +--- + +## Overview + +The USTA connector is an **External Import** connector that periodically fetches IOCs and ticket data from six USTA Threat Stream v4 API endpoints and converts them into STIX 2.1 bundles for ingestion into OpenCTI. + +**Key features:** + +- Imports **malicious URLs**, **phishing sites**, **malware hashes**, **compromised credentials**, **credit card fraud tickets**, and **Deep Sight intelligence tickets** +- Per-feed cursor-based incremental import (never re-imports data) +- Graceful degradation — if one feed fails, the others continue +- Deterministic STIX IDs for proper deduplication +- Automatic batch splitting for large datasets +- Rate limiting and exponential-backoff retry +- Full `schedule_process()` integration (OpenCTI ≥ 6.6.4) +- Raw passwords are **not** stored by default (opt-in via `USTA_STORE_CREDENTIAL_PASSWORD=true`); card numbers are masked to BIN + last 4 + +--- + +## Data Imported + +| USTA Endpoint | Data Type | STIX Objects Created | +|---|---|---| +| `/ioc/malicious-urls` | C2 infrastructure, RAT callbacks | IPv4-Addr, Domain-Name, URL, Indicator, Malware | +| `/ioc/phishing-sites` | Credential harvesting domains | URL, Domain-Name, Indicator | +| `/ioc/malware-hashes` | Known malware samples | File (StixFile), Indicator, Malware | +| `.../compromised-credentials-tickets` | Stolen credentials | Incident, User-Account, URL, Domain-Name, IPv4-Addr, Malware, Note | +| `.../credit-card-tickets` | Compromised payment cards | Incident, Identity, Note | +| `.../deep-sight-tickets` | Threat reports, leaks, APT activity | Report, ThreatActor, Identity, Relationship | + +--- + +## STIX Mapping + +### IOC Feeds (Malicious URLs, Phishing Sites, Malware Hashes) + +``` +Indicator ──based-on──▸ Observable (IPv4 / Domain / URL / File) + │ + └──indicates──▸ Malware (from API "tags" field) +``` + +### Compromised Credentials + +``` +Incident ──related-to──▸ User-Account (compromised login) + │ ──related-to──▸ URL (target login page) + │ ──related-to──▸ Domain-Name (extracted from URL) + │ ──related-to──▸ IPv4-Addr (victim machine IP) + │ ──uses────────▸ Malware (stealer family from victim_detail) + │ + └── Note (victim telemetry: OS, CPU, infection date) + +User-Account ──related-to──▸ URL (target login page) +``` + +### Credit Card Fraud Tickets + +``` +Incident ──targets──▸ Identity (affected company) + │ + └── Note (masked card: BIN + last 4, expiry) +``` + +### Deep Sight Intelligence Tickets + +``` +Report ──contains──▸ ThreatActor (per threat actor entry) + │ ▸ Identity (per targeted organization) + │ ▸ Relationship (ThreatActor ──targets──▸ Identity) + │ + └── (optional PDF attachment via x_opencti_files) +``` + +**Author:** `Identity` SDO — "USTA" (organization) +**Markings:** Configurable TLP level (default: TLP:RED) +**Confidence:** Configurable (default: 99) + +--- + +## Requirements + +- OpenCTI Platform ≥ **6.6.4** +- Python ≥ **3.12** (for local development) +- A valid **USTA API Bearer Token** (obtain from USTA platform) + +--- + +## Configuration + +| Parameter | Environment Variable | Required | Default | Description | +|---------------------------------------|---|---|---|---| +| `opencti.url` | `OPENCTI_URL` | **Yes** | — | OpenCTI platform URL | +| `opencti.token` | `OPENCTI_TOKEN` | **Yes** | — | OpenCTI API token | +| `connector.id` | `CONNECTOR_ID` | **Yes** | — | Unique UUIDv4 for this connector | +| `connector.name` | `CONNECTOR_NAME` | No | `USTA` | Display name | +| `connector.duration_period` | `CONNECTOR_DURATION_PERIOD` | No | `PT30M` | Interval between runs (ISO 8601) | +| `usta.api_key` | `USTA_API_KEY` | **Yes** | — | USTA API bearer token | +| `usta.api_base_url` | `USTA_API_BASE_URL` | No | `https://usta.prodaft.com` | API base URL | +| `usta.import_start_date` | `USTA_IMPORT_START_DATE` | No | `P90D` | How far back on first run | +| `usta.page_size` | `USTA_PAGE_SIZE` | No | `100` | Records per API page | +| `usta.import_malicious_urls` | `USTA_IMPORT_MALICIOUS_URLS` | No | `true` | Enable malicious URL feed | +| `usta.import_phishing_sites` | `USTA_IMPORT_PHISHING_SITES` | No | `true` | Enable phishing sites feed | +| `usta.import_malware_hashes` | `USTA_IMPORT_MALWARE_HASHES` | No | `true` | Enable malware hashes feed | +| `usta.import_compromised_credentials` | `USTA_IMPORT_COMPROMISED_CREDENTIALS` | No | `true` | Enable compromised credentials feed | +| `usta.import_credit_cards` | `USTA_IMPORT_CREDIT_CARDS` | No | `true` | Enable credit card fraud feed | +| `usta.import_deep_sight_tickets` | `USTA_IMPORT_DEEP_SIGHT_TICKETS` | No | `true` | Enable Deep Sight intelligence tickets feed | +| `usta.store_credential_password` | `USTA_STORE_CREDENTIAL_PASSWORD` | No | `false` | Store raw password in User-Account STIX object (disabled by default) | +| `usta.tlp_level` | `USTA_TLP_LEVEL` | No | `red` | TLP marking for all objects | +| `usta.confidence_level` | `USTA_CONFIDENCE_LEVEL` | No | `99` | Confidence score (0–100) | + +--- + +## Deployment + +### Docker (Recommended) + +Set the required env variables in `docker-compose.yml`, then run. + +```bash +# Build and run +docker compose up --build +``` + +### Standalone Python + +```bash +cd src +python3 -m venv venv && source venv/bin/activate +pip install -r requirements.txt +# ..Set required env vars here.. +python main.py +``` + +--- + +## Testing + +Tests use `pytest` with `pytest-cov` for 95%+ code coverage. + +```bash +# From the project root: +pip install -r src/requirements.txt -r tests/test-requirements.txt +pytest --cov --cov-report=term-missing +``` + +`tests/conftest.py` injects `src/` into `sys.path` so that `pytest` can resolve `from connector import ...` and `from usta_client import ...` correctly regardless of the working directory. + +--- + +## Architecture + +``` +usta/ +├── __metadata__ +| ├── connector_manifest.json +| └── logo.png +├── src/ +| ├── requirements.txt +│ ├── main.py # Entry point +│ ├── connector/ +│ │ ├── __init__.py +│ │ ├── connector.py # Import orchestration (state, work, batching) +│ │ ├── converter_to_stix.py # STIX 2.1 conversion for all 6 data families +│ │ ├── settings.py # Pydantic configuration models +│ │ └── utils.py # Shared utility functions +│ └── usta_client/ +│ ├── __init__.py +│ └── api_client.py # USTA API client (rate-limited, retried) +├── tests/ +│ ├── conftest.py # Shared fixtures +│ ├── test_main.py # Import smoke tests +│ ├── test_connector/ +│ │ ├── test_connector.py # Orchestrator tests +│ │ ├── test_converter_to_stix.py # Converter tests +│ │ ├── test_settings.py # Configuration tests +│ │ └── test_utils.py # Utility tests +│ └── test_client/ +│ └── test_api_client.py # API client tests +├── entrypoint.sh # Docker entrypoint +├── Dockerfile +├── pytest.ini +└── docker-compose.yml +``` + +### State Management + +| State Key | Purpose | +|---|---| +| `last_run_start` | Timestamp of the last run | +| `last_run_with_data` | Timestamp of last run that ingested data | +| `malicious_urls_last_created` | Cursor for malicious URLs feed | +| `phishing_sites_last_created` | Cursor for phishing sites feed | +| `malware_hashes_last_created` | Cursor for malware hashes feed | +| `compromised_creds_last_created` | Cursor for compromised credentials feed | +| `credit_cards_last_created` | Cursor for credit card tickets feed | +| `deep_sight_last_created` | Cursor for Deep Sight intelligence tickets feed | + +--- + +## Finding Data in OpenCTI + +### Compromised Accounts / Credentials + +Compromised credentials are imported as an **Incident** with related STIX objects. + +1. **Observations → Observables**: Filter by type `User Account`. Each compromised login appears as a `User-Account` SCO with the `account_login` field set to the stolen username/email. + +2. **Events → Incidents**: An Incident SDO is created per credential record, linked to the User-Account, URL, and IP observables via `related-to` relationships. + +3. **Analysis → Notes**: Victim telemetry (OS, IP, computer name, infection date, stealer family) is attached as Notes linked to the Incident and User-Account. + +4. **Threats → Malware**: Stealer families (e.g., "StealC", "Vidar") are created as Malware SDOs and linked via `related-to` relationships. + +### Malicious URLs / Phishing Sites + +**Analysis → Indicators**: Filter labels by `malicious-activity` or `phishing`. + +### Malware Hashes + +**Analysis → Indicators**: Filter by main observable type `StixFile`. +**Observations → Observables**: Filter by type `File` to see the hash observables directly. + +### Credit Card Fraud + +**Events → Incidents**: Each compromised card appears as an Incident with masked card details in the description. The company is linked via a `targets` relationship. + +### Deep Sight Intelligence Tickets + +**Analyses → Reports**: Each Deep Sight ticket is imported as a Report SDO. Threat actors and targeted organizations are linked via `targets` relationships and appear under **Threats → Threat Actors** and **Entities → Organizations** respectively. + +--- + +## License + +Apache 2.0 diff --git a/external-import/usta/__metadata__/CONNECTOR_CONFIG_DOC.md b/external-import/usta/__metadata__/CONNECTOR_CONFIG_DOC.md new file mode 100644 index 00000000000..0c9197b5346 --- /dev/null +++ b/external-import/usta/__metadata__/CONNECTOR_CONFIG_DOC.md @@ -0,0 +1,28 @@ +# Connector Configurations + +Below is an exhaustive enumeration of all configurable parameters available, each accompanied by detailed explanations of their purposes, default behaviors, and usage guidelines to help you understand and utilize them effectively. + +### Type: `object` + +| Property | Type | Required | Possible values | Default | Description | +| -------- | ---- | -------- | --------------- | ------- | ----------- | +| OPENCTI_URL | `string` | ✅ | Format: [`uri`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | The base URL of the OpenCTI instance. | +| OPENCTI_TOKEN | `string` | ✅ | string | | The API token to connect to OpenCTI. | +| USTA_API_KEY | `string` | ✅ | string | | USTA API bearer token for authentication. | +| CONNECTOR_NAME | `string` | | string | `"USTA"` | The name of the connector. | +| CONNECTOR_SCOPE | `string` | | string | `"indicator,observable,malware,identity,incident,user-account,report,threat-actor"` | The scope of the connector. | +| CONNECTOR_LOG_LEVEL | `string` | | `debug` `info` `warn` `warning` `error` | `"error"` | The minimum level of logs to display. | +| CONNECTOR_TYPE | `const` | | `EXTERNAL_IMPORT` | `"EXTERNAL_IMPORT"` | | +| CONNECTOR_DURATION_PERIOD | `string` | | Format: [`duration`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | `"PT30M"` | The period of time to await between two runs. | +| USTA_API_BASE_URL | `string` | | Format: [`uri`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | `"https://usta.prodaft.com"` | USTA API base URL. | +| USTA_IMPORT_START_DATE | `string` | | Format: [`duration`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | `"P90D"` | ISO 8601 duration string specifying how far back to import data (e.g., P90D for 90 days, P30D for 30 days). Only used on the very first run when no state exists. | +| USTA_PAGE_SIZE | `integer` | | `1 <= x <= 500` | `100` | Number of records to fetch per API page. | +| USTA_IMPORT_MALICIOUS_URLS | `boolean` | | boolean | `true` | Enable import of malicious URL indicators. | +| USTA_IMPORT_PHISHING_SITES | `boolean` | | boolean | `true` | Enable import of phishing site indicators. | +| USTA_IMPORT_MALWARE_HASHES | `boolean` | | boolean | `true` | Enable import of malware hash indicators. | +| USTA_IMPORT_COMPROMISED_CREDENTIALS | `boolean` | | boolean | `true` | Enable import of compromised credentials tickets (Account Takeover Prevention). | +| USTA_IMPORT_CREDIT_CARDS | `boolean` | | boolean | `true` | Enable import of compromised credit card tickets (Fraud Intelligence). | +| USTA_IMPORT_DEEP_SIGHT_TICKETS | `boolean` | | boolean | `true` | Enable import of Deep Sight intelligence tickets (threat reports, leaks, APT activity). | +| USTA_STORE_CREDENTIAL_PASSWORD | `boolean` | | boolean | `false` | When enabled, the raw password from Account Takeover Prevention records is stored in the STIX User-Account credential field. Disabled by default for security reasons. | +| USTA_TLP_LEVEL | `string` | | `clear` `white` `green` `amber` `red` | `"red"` | TLP marking level to apply to imported data. | +| USTA_CONFIDENCE_LEVEL | `integer` | | `0 <= x <= 100` | `99` | Confidence level for created STIX objects (0-100). | diff --git a/external-import/usta/__metadata__/connector_config_schema.json b/external-import/usta/__metadata__/connector_config_schema.json new file mode 100644 index 00000000000..e1b4a23e69f --- /dev/null +++ b/external-import/usta/__metadata__/connector_config_schema.json @@ -0,0 +1,137 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://www.filigran.io/connectors/usta_config.schema.json", + "type": "object", + "properties": { + "OPENCTI_URL": { + "description": "The base URL of the OpenCTI instance.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "OPENCTI_TOKEN": { + "description": "The API token to connect to OpenCTI.", + "type": "string" + }, + "CONNECTOR_NAME": { + "default": "USTA", + "description": "The name of the connector.", + "type": "string" + }, + "CONNECTOR_SCOPE": { + "default": "indicator,observable,malware,identity,incident,user-account,report,threat-actor", + "description": "The scope of the connector.", + "type": "string" + }, + "CONNECTOR_LOG_LEVEL": { + "default": "error", + "description": "The minimum level of logs to display.", + "enum": [ + "debug", + "info", + "warn", + "warning", + "error" + ], + "type": "string" + }, + "CONNECTOR_TYPE": { + "const": "EXTERNAL_IMPORT", + "default": "EXTERNAL_IMPORT", + "type": "string" + }, + "CONNECTOR_DURATION_PERIOD": { + "default": "PT30M", + "description": "The period of time to await between two runs.", + "format": "duration", + "type": "string" + }, + "USTA_API_BASE_URL": { + "default": "https://usta.prodaft.com", + "description": "USTA API base URL.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "USTA_API_KEY": { + "description": "USTA API bearer token for authentication.", + "format": "password", + "type": "string" + }, + "USTA_IMPORT_START_DATE": { + "default": "P90D", + "description": "ISO 8601 duration string specifying how far back to import data (e.g., P90D for 90 days, P30D for 30 days). Only used on the very first run when no state exists.", + "format": "duration", + "type": "string" + }, + "USTA_PAGE_SIZE": { + "default": 100, + "description": "Number of records to fetch per API page.", + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + "USTA_IMPORT_MALICIOUS_URLS": { + "default": true, + "description": "Enable import of malicious URL indicators.", + "type": "boolean" + }, + "USTA_IMPORT_PHISHING_SITES": { + "default": true, + "description": "Enable import of phishing site indicators.", + "type": "boolean" + }, + "USTA_IMPORT_MALWARE_HASHES": { + "default": true, + "description": "Enable import of malware hash indicators.", + "type": "boolean" + }, + "USTA_IMPORT_COMPROMISED_CREDENTIALS": { + "default": true, + "description": "Enable import of compromised credentials tickets (Account Takeover Prevention).", + "type": "boolean" + }, + "USTA_IMPORT_CREDIT_CARDS": { + "default": true, + "description": "Enable import of compromised credit card tickets (Fraud Intelligence).", + "type": "boolean" + }, + "USTA_IMPORT_DEEP_SIGHT_TICKETS": { + "default": true, + "description": "Enable import of Deep Sight intelligence tickets (threat reports, leaks, APT activity).", + "type": "boolean" + }, + "USTA_STORE_CREDENTIAL_PASSWORD": { + "default": false, + "description": "When enabled, the raw password from Account Takeover Prevention records is stored in the STIX User-Account credential field. Disabled by default for security reasons.", + "type": "boolean" + }, + "USTA_TLP_LEVEL": { + "default": "red", + "description": "TLP marking level to apply to imported data.", + "enum": [ + "clear", + "white", + "green", + "amber", + "red" + ], + "type": "string" + }, + "USTA_CONFIDENCE_LEVEL": { + "default": 99, + "description": "Confidence level for created STIX objects (0-100).", + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "OPENCTI_URL", + "OPENCTI_TOKEN", + "USTA_API_KEY" + ], + "additionalProperties": true +} \ No newline at end of file diff --git a/external-import/usta/__metadata__/connector_manifest.json b/external-import/usta/__metadata__/connector_manifest.json new file mode 100644 index 00000000000..502246d9e26 --- /dev/null +++ b/external-import/usta/__metadata__/connector_manifest.json @@ -0,0 +1,23 @@ +{ + "title": "USTA", + "slug": "usta", + "description": "The USTA connector leverages the USTA Threat Stream API to import comprehensive cyber threat intelligence, including malicious URLs, phishing sites, malware hashes, compromised credentials, credit card fraud alerts, and Deep Sight tickets.", + "short_description": "Import malicious URLs, phishing sites, malware hashes, compromised credentials, credit card fraud alerts and Deep Sight tickets from USTA", + "logo": "external-import/usta/__metadata__/logo.png", + "use_cases": [ + "Commercial Threat Intel" + ], + "verified": false, + "last_verified_date": null, + "playbook_supported": false, + "max_confidence_level": 100, + "support_version": ">=6.6.4", + "subscription_link": "mailto:integration@prodaft.com", + "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/external-import/usta", + "manager_supported": false, + "container_version": "rolling", + "container_image": "opencti/connector-usta", + "container_type": "EXTERNAL_IMPORT", + "config_schema": "external-import/usta/__metadata__/connector_config_schema.json", + "config_documentation": "external-import/usta/__metadata__/CONNECTOR_CONFIG_DOC.md" +} \ No newline at end of file diff --git a/external-import/usta/__metadata__/logo.png b/external-import/usta/__metadata__/logo.png new file mode 100644 index 00000000000..cb0fa47669b Binary files /dev/null and b/external-import/usta/__metadata__/logo.png differ diff --git a/external-import/usta/docker-compose.yml b/external-import/usta/docker-compose.yml new file mode 100644 index 00000000000..6cfe6e6ede6 --- /dev/null +++ b/external-import/usta/docker-compose.yml @@ -0,0 +1,30 @@ +services: + connector-usta: + image: opencti/connector-usta:latest + # build: + # context: . + environment: + - OPENCTI_URL=http://opencti:8080 + - OPENCTI_TOKEN=ChangeMe + + - CONNECTOR_ID=ChangeMe + # - CONNECTOR_NAME=USTA + # - CONNECTOR_SCOPE=indicator,observable,malware,identity,incident,user-account,report,threat-actor + - CONNECTOR_LOG_LEVEL=info + # - CONNECTOR_DURATION_PERIOD=PT30M + # - CONNECTOR_QUEUE_THRESHOLD=500 + + # - USTA_API_BASE_URL=https://usta.prodaft.com + - USTA_API_KEY=ChangeMe + # - USTA_IMPORT_START_DATE=P90D + # - USTA_PAGE_SIZE=100 + # - USTA_IMPORT_MALICIOUS_URLS=true + # - USTA_IMPORT_PHISHING_SITES=true + # - USTA_IMPORT_MALWARE_HASHES=true + # - USTA_IMPORT_COMPROMISED_CREDENTIALS=true + # - USTA_IMPORT_CREDIT_CARDS=true + # - USTA_IMPORT_DEEP_SIGHT_TICKETS=true + # - USTA_STORE_CREDENTIAL_PASSWORD=false + # - USTA_TLP_LEVEL=red + # - USTA_CONFIDENCE_LEVEL=99 + restart: always diff --git a/external-import/usta/entrypoint.sh b/external-import/usta/entrypoint.sh new file mode 100644 index 00000000000..f9357fba6de --- /dev/null +++ b/external-import/usta/entrypoint.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +cd /opt/opencti-connector-usta +python main.py diff --git a/external-import/usta/pytest.ini b/external-import/usta/pytest.ini new file mode 100644 index 00000000000..442bb943265 --- /dev/null +++ b/external-import/usta/pytest.ini @@ -0,0 +1,3 @@ +[pytest] +pythonpath = src +testpaths = tests diff --git a/external-import/usta/src/connector/__init__.py b/external-import/usta/src/connector/__init__.py new file mode 100644 index 00000000000..8ee070e355c --- /dev/null +++ b/external-import/usta/src/connector/__init__.py @@ -0,0 +1,7 @@ +"""USTA OpenCTI connector package.""" + +from connector.connector import UstaConnector +from connector.converter_to_stix import ConverterToStix +from connector.settings import ConnectorSettings + +__all__ = ["UstaConnector", "ConverterToStix", "ConnectorSettings"] diff --git a/external-import/usta/src/connector/connector.py b/external-import/usta/src/connector/connector.py new file mode 100644 index 00000000000..42bb3fc5467 --- /dev/null +++ b/external-import/usta/src/connector/connector.py @@ -0,0 +1,666 @@ +""" +USTA OpenCTI External Import Connector. + +Orchestrates the full import lifecycle: + 1. Read / initialize connector state + 2. Fetch IOCs from all enabled USTA endpoints (paginated) + 3. Convert to STIX 2.1 objects via ConverterToStix + 4. Send bundles to OpenCTI in batches + 5. Update state on success +""" + +from __future__ import annotations + +import io +import sys +import time +from dataclasses import dataclass +from datetime import datetime, timedelta, timezone +from itertools import islice +from typing import Any, Callable +from urllib.parse import unquote, urlparse + +import requests +from connector.converter_to_stix import ConverterToStix +from connector.settings import ConnectorSettings +from pycti import OpenCTIConnectorHelper +from usta_client import UstaClient, UstaClientError + +_MAX_PDF_BYTES = 50 * 1024 * 1024 # 50 MB + + +@dataclass +class _FeedConfig: + """ + Runtime configuration for a single USTA data feed. + + Attributes: + label: Human-readable feed name used in log messages and work item names. + state_key: Key under which the per-feed cursor (last ``created`` + timestamp) is persisted in the OpenCTI connector state. + enabled: When ``False`` the feed is skipped entirely this run. + collect: Callable that accepts a start-timestamp string and returns + ``(stix_objects, last_created_cursor)``. + """ + + label: str + state_key: str + enabled: bool + collect: Callable[[str], tuple[list, str | None]] + + +class UstaConnector: + """ + External Import connector for USTA Threat Intelligence. + + Imports six data families: + - Malicious URLs (C2 infrastructure, RAT callbacks, stealer panels) + - Phishing Sites (credential harvesting domains) + - Malware Hashes (file indicators for known malware families) + - Compromised Credentials (account takeover prevention tickets) + - Credit Card Tickets (fraud intelligence) + - Deep Sight Tickets (intelligence reports: ransomware, leaks, APT activity) + """ + + # Maximum objects per STIX bundle before splitting into a new batch + BUNDLE_BATCH_SIZE = 5000 + + # State keys + STATE_KEY_LAST_RUN_START = "last_run_start" + STATE_KEY_LAST_RUN_WITH_DATA = "last_run_with_data" + STATE_KEY_MALICIOUS_URLS_CURSOR = "malicious_urls_last_created" + STATE_KEY_PHISHING_SITES_CURSOR = "phishing_sites_last_created" + STATE_KEY_MALWARE_HASHES_CURSOR = "malware_hashes_last_created" + STATE_KEY_COMPROMISED_CREDS_CURSOR = "compromised_creds_last_created" + STATE_KEY_CREDIT_CARDS_CURSOR = "credit_cards_last_created" + STATE_KEY_DEEP_SIGHT_CURSOR = "deep_sight_last_created" + + def __init__( + self, + config: ConnectorSettings, + helper: OpenCTIConnectorHelper, + ) -> None: + """ + Args: + config: Fully validated connector settings, including USTA API + credentials and per-feed enable flags. + helper: Initialised OpenCTI connector helper — used for API calls, + state management, bundle sending, and structured logging. + """ + self.config = config + self.helper = helper + self.work_id: str | None = None + + # API client + self.client = UstaClient( + helper=self.helper, + base_url=str(self.config.usta.api_base_url), + api_key=self.config.usta.api_key.get_secret_value(), + page_size=self.config.usta.page_size, + ) + + # STIX converter + self.converter = ConverterToStix( + helper=self.helper, + author_name="USTA", + tlp_level=self.config.usta.tlp_level, + confidence_level=self.config.usta.confidence_level, + store_credential_password=self.config.usta.store_credential_password, + ) + + # ------------------------------------------------------------------ + # State helpers + # ------------------------------------------------------------------ + + def _get_state(self) -> dict[str, Any]: + """Retrieve current state or return an empty dict.""" + state = self.helper.get_state() + return state if state is not None else {} + + def _compute_default_start(self) -> str: + """ + Compute the default start timestamp for the very first run, + based on the configured import_start_date duration. + """ + delta: timedelta = self.config.usta.import_start_date + start_dt = datetime.now(timezone.utc) - delta + return start_dt.strftime("%Y-%m-%dT%H:%M:%SZ") + + def _get_start_for_feed(self, state: dict, state_key: str) -> str: + """ + Determine the start timestamp for a specific feed. + Uses per-feed cursor if available, otherwise falls back to + default start date. + """ + cursor_value = state.get(state_key) + if cursor_value: + return cursor_value + return self._compute_default_start() + + # ------------------------------------------------------------------ + # Work management + # ------------------------------------------------------------------ + + def _initiate_work(self, friendly_name: str) -> str: + """Create a new work item in OpenCTI.""" + self.work_id = self.helper.api.work.initiate_work( + self.helper.connect_id, friendly_name + ) + self.helper.connector_logger.info( + "[CONNECTOR] Work initiated", + {"work_id": self.work_id, "name": friendly_name}, + ) + return self.work_id + + def _complete_work(self, message: str, in_error: bool = False) -> None: + """Mark the current work item as completed or failed.""" + if self.work_id: + self.helper.api.work.to_processed(self.work_id, message, in_error=in_error) + self.helper.connector_logger.info( + "[CONNECTOR] Work completed", + {"work_id": self.work_id, "message": message, "in_error": in_error}, + ) + self.work_id = None + + # ------------------------------------------------------------------ + # Bundle sending with batching + # ------------------------------------------------------------------ + + def _send_stix_objects( + self, + stix_objects: list[Any], + work_id: str, + feed_label: str, + ) -> int: + """ + Send STIX objects to OpenCTI in batches of up to ``BUNDLE_BATCH_SIZE``. + + Every batch is augmented with the connector author Identity and all + four standard TLP marking definitions so that + ``cleanup_inconsistent_bundle`` never discards objects whose per-record + TLP (e.g. ``amber`` on a Deep Sight ticket) differs from the + connector-level default. + + Args: + stix_objects: Flat list of STIX objects to send. + work_id: OpenCTI work item ID to associate with the bundle. + feed_label: Human-readable feed name used in log messages. + + Returns: + Total number of STIX objects sent (author and TLP markings + injected per batch are not counted). + """ + if not stix_objects: + return 0 + + total_sent = 0 + batch_num = 0 + + stix_iter = iter(stix_objects) + + while batch := list(islice(stix_iter, self.BUNDLE_BATCH_SIZE)): + batch_num += 1 + + # Include author + all TLP markings in every batch so that + # cleanup_inconsistent_bundle never drops objects whose per-record + # TLP (e.g. amber on a deep-sight ticket) differs from the + # connector-level default. + batch_with_meta = ( + batch + + [ + self.converter.author, + ] + + list(self.converter.TLP_MARKINGS) + ) + + bundle = self.helper.stix2_create_bundle(batch_with_meta) + self.helper.send_stix2_bundle( + bundle, + work_id=work_id, + cleanup_inconsistent_bundle=True, + ) + + total_sent += len(batch) + self.helper.connector_logger.info( + f"[CONNECTOR] {feed_label} batch sent", + { + "batch": batch_num, + "objects_in_batch": len(batch), + "total_sent": total_sent, + }, + ) + + return total_sent + + # ------------------------------------------------------------------ + # Generic feed collector (DRY core) + # ------------------------------------------------------------------ + + def _collect_feed( # pylint: disable=too-many-locals + self, + client_method: Callable[..., Any], + converter_method: Callable[[dict], list], + label: str, + start: str, + ) -> tuple[list[Any], str | None]: + """ + Collect one data feed, deduplicate STIX objects by ID, and return them. + + Deduplication is done in-memory using each object's STIX ID so that + shared SDOs (e.g. the same Malware SDO referenced by many records) are + only included once per bundle, reducing bundle size and server-side load. + + Returns: + Tuple of (stix_objects, last_created_timestamp). + """ + stix_objects: list[Any] = [] + seen_ids: set[str] = set() + last_created: str | None = None + record_count = 0 + failed_count = 0 + + for page in client_method(start=start): + for record in page: + try: + for obj in converter_method(record): + if obj.id not in seen_ids: + seen_ids.add(obj.id) + stix_objects.append(obj) + record_count += 1 + created = record.get("created") + if created: + last_created = created + except Exception as e: # pylint: disable=broad-exception-caught + failed_count += 1 + self.helper.connector_logger.warning( + f"[CONNECTOR] Failed to convert {label} record — skipping", + { + "record_id": record.get("id"), + "error_type": type(e).__name__, + "error": str(e), + }, + ) + + self.helper.connector_logger.info( + f"[CONNECTOR] {label} collection finished", + { + "records_ok": record_count, + "records_failed": failed_count, + "stix_objects": len(stix_objects), + "last_created_cursor": last_created, + }, + ) + return stix_objects, last_created + + # ------------------------------------------------------------------ + # Per-feed collection methods (thin delegates to _collect_feed) + # ------------------------------------------------------------------ + + def _collect_malicious_urls(self, start: str) -> tuple[list[Any], str | None]: + """Collect malicious URL IOCs and convert to STIX.""" + return self._collect_feed( + self.client.get_malicious_urls, + self.converter.convert_malicious_url, + "Malicious URLs", + start, + ) + + def _collect_phishing_sites(self, start: str) -> tuple[list[Any], str | None]: + """Collect phishing site IOCs and convert to STIX.""" + return self._collect_feed( + self.client.get_phishing_sites, + self.converter.convert_phishing_site, + "Phishing Sites", + start, + ) + + def _collect_malware_hashes(self, start: str) -> tuple[list[Any], str | None]: + """Collect malware hash IOCs and convert to STIX.""" + return self._collect_feed( + self.client.get_malware_hashes, + self.converter.convert_malware_hash, + "Malware Hashes", + start, + ) + + def _collect_compromised_credentials( + self, start: str + ) -> tuple[list[Any], str | None]: + """Collect compromised credentials tickets and convert to STIX.""" + return self._collect_feed( + self.client.get_compromised_credentials, + self.converter.convert_compromised_credential, + "Compromised Credentials", + start, + ) + + def _collect_credit_card_tickets(self, start: str) -> tuple[list[Any], str | None]: + """Collect credit card fraud tickets and convert to STIX.""" + return self._collect_feed( + self.client.get_credit_card_tickets, + self.converter.convert_credit_card_ticket, + "Credit Card Tickets", + start, + ) + + def _collect_deep_sight_tickets( # pylint: disable=too-many-locals + self, start: str + ) -> tuple[list[Any], str | None]: + """ + Collect Deep Sight intelligence tickets, download any attached report + PDFs immediately, and convert to STIX. + + PDFs are embedded directly in the STIX Report via the x_opencti_files + custom property so OpenCTI attaches them atomically during bundle + ingestion — no async timing issues. + """ + stix_objects: list[Any] = [] + seen_ids: set[str] = set() + last_created: str | None = None + record_count = 0 + failed_count = 0 + + for page in self.client.get_deep_sight_tickets(start=start): + for record in page: + record_id = record.get("id") + try: + # Download PDF before conversion so the converter can embed it + content = record.get("content") or {} + report_url = content.get("report") + if report_url: + parsed_url = urlparse(report_url) + if parsed_url.scheme != "https" or not parsed_url.hostname: + self.helper.connector_logger.warning( + "[CONNECTOR] Deep Sight report URL must use HTTPS" + " — skipping attachment download", + {"ticket_id": record_id, "report_url": report_url}, + ) + else: + filename = self._extract_filename_from_url(report_url) + try: + with requests.get( + report_url, + timeout=60, + stream=True, + allow_redirects=False, + ) as response: + response.raise_for_status() + buf = io.BytesIO() + total = 0 + too_large = False + for chunk in response.iter_content( + chunk_size=65536 + ): + total += len(chunk) + if total > _MAX_PDF_BYTES: + too_large = True + break + buf.write(chunk) + if too_large: + self.helper.connector_logger.warning( + "[CONNECTOR] Deep Sight report PDF exceeds size" + " limit — skipping attachment", + { + "ticket_id": record_id, + "limit_bytes": _MAX_PDF_BYTES, + }, + ) + else: + record["_pdf_data"] = buf.getvalue() + record["_pdf_filename"] = filename + self.helper.connector_logger.debug( + "[CONNECTOR] Downloaded Deep Sight report PDF", + { + "ticket_id": record_id, + "filename": filename, + "file_size_bytes": total, + }, + ) + except ( + Exception # pylint: disable=broad-exception-caught + ) as dl_err: + self.helper.connector_logger.warning( + "[CONNECTOR] Failed to download Deep Sight report PDF" + " — continuing without attachment", + { + "ticket_id": record_id, + "error_type": type(dl_err).__name__, + "error": str(dl_err), + }, + ) + + converted = self.converter.convert_deep_sight_ticket(record) + for obj in converted: + if obj.id not in seen_ids: + seen_ids.add(obj.id) + stix_objects.append(obj) + record_count += 1 + created = record.get("created") + if created: + last_created = created + + except Exception as e: # pylint: disable=broad-exception-caught + failed_count += 1 + self.helper.connector_logger.warning( + "[CONNECTOR] Failed to convert Deep Sight ticket record — skipping", + { + "ticket_id": record_id, + "error_type": type(e).__name__, + "error": str(e), + }, + ) + + self.helper.connector_logger.info( + "[CONNECTOR] Deep Sight Tickets collection finished", + { + "records_ok": record_count, + "records_failed": failed_count, + "stix_objects": len(stix_objects), + "last_created_cursor": last_created, + }, + ) + return stix_objects, last_created + + @staticmethod + def _extract_filename_from_url(url: str) -> str: + """Extract and URL-decode the filename from a pre-signed CDN path.""" + path = urlparse(url).path + raw_name = path.rsplit("/", 1)[-1] if "/" in path else "" + filename = unquote(raw_name) + if not filename or not filename.lower().endswith(".pdf"): + filename = (filename or "report") + ".pdf" + return filename + + # ------------------------------------------------------------------ + # Main processing method + # ------------------------------------------------------------------ + + def process_message(self) -> None: # pylint: disable=too-many-locals + """ + Main processing method called by the scheduler on each run. + + Implements graceful degradation: if one feed fails, the others + continue to be processed. Each feed's work item is always closed + (with in_error=True on failure) so OpenCTI never has orphaned works. + """ + try: + run_start_mono = time.monotonic() + run_start = datetime.now(timezone.utc) + current_start_iso = run_start.isoformat() + current_state = self._get_state() + + last_run_start = current_state.get(self.STATE_KEY_LAST_RUN_START) + last_run_with_data = current_state.get(self.STATE_KEY_LAST_RUN_WITH_DATA) + + self.helper.connector_logger.info( + "[CONNECTOR] Starting USTA import run", + { + "connector_name": self.config.connector.name, + "last_run_start": last_run_start or "Never run", + "last_run_with_data": last_run_with_data or "Never ingested data", + "import_malicious_urls": self.config.usta.import_malicious_urls, + "import_phishing_sites": self.config.usta.import_phishing_sites, + "import_malware_hashes": self.config.usta.import_malware_hashes, + "import_compromised_credentials": ( + self.config.usta.import_compromised_credentials + ), + "import_credit_cards": self.config.usta.import_credit_cards, + "import_deep_sight_tickets": self.config.usta.import_deep_sight_tickets, + }, + ) + + total_objects_sent = 0 + new_state = dict(current_state) + new_state[self.STATE_KEY_LAST_RUN_START] = current_start_iso + + feeds = [ + _FeedConfig( + label="Malicious URLs", + state_key=self.STATE_KEY_MALICIOUS_URLS_CURSOR, + enabled=self.config.usta.import_malicious_urls, + collect=self._collect_malicious_urls, + ), + _FeedConfig( + label="Phishing Sites", + state_key=self.STATE_KEY_PHISHING_SITES_CURSOR, + enabled=self.config.usta.import_phishing_sites, + collect=self._collect_phishing_sites, + ), + _FeedConfig( + label="Malware Hashes", + state_key=self.STATE_KEY_MALWARE_HASHES_CURSOR, + enabled=self.config.usta.import_malware_hashes, + collect=self._collect_malware_hashes, + ), + _FeedConfig( + label="Compromised Credentials", + state_key=self.STATE_KEY_COMPROMISED_CREDS_CURSOR, + enabled=self.config.usta.import_compromised_credentials, + collect=self._collect_compromised_credentials, + ), + _FeedConfig( + label="Credit Card Tickets", + state_key=self.STATE_KEY_CREDIT_CARDS_CURSOR, + enabled=self.config.usta.import_credit_cards, + collect=self._collect_credit_card_tickets, + ), + _FeedConfig( + label="Deep Sight Tickets", + state_key=self.STATE_KEY_DEEP_SIGHT_CURSOR, + enabled=self.config.usta.import_deep_sight_tickets, + collect=self._collect_deep_sight_tickets, + ), + ] + + for feed in feeds: + if not feed.enabled: + self.helper.connector_logger.debug( + f"[CONNECTOR] {feed.label} feed is disabled — skipping", + {"feed": feed.label}, + ) + continue + + try: + start = self._get_start_for_feed(current_state, feed.state_key) + self.helper.connector_logger.info( + f"[CONNECTOR] Starting {feed.label} feed", + {"feed": feed.label, "start_cursor": start}, + ) + stix_objects, last_created = feed.collect(start) + + if stix_objects: + work_id = self._initiate_work( + f"USTA - {feed.label} - {current_start_iso}" + ) + try: + sent = self._send_stix_objects( + stix_objects, work_id, feed.label + ) + self._complete_work( + f"Imported {sent} STIX objects from {feed.label.lower()}" + ) + total_objects_sent += sent + except Exception as send_err: + self._complete_work( + f"{feed.label} send failed: {send_err}", + in_error=True, + ) + raise + else: + self.helper.connector_logger.info( + f"[CONNECTOR] {feed.label} feed produced no new STIX" + " objects — nothing to send", + {"feed": feed.label, "start_cursor": start}, + ) + + if last_created: + new_state[feed.state_key] = last_created + self.helper.connector_logger.info( + f"[CONNECTOR] {feed.label} cursor advanced", + {"feed": feed.label, "new_cursor": last_created}, + ) + + except UstaClientError as e: + self.helper.connector_logger.error( + f"[CONNECTOR] {feed.label} feed failed with a non-retryable API error", + { + "feed": feed.label, + "error_type": type(e).__name__, + "error": str(e), + "hint": "Check API key permissions and USTA endpoint availability", + }, + ) + except Exception as e: # pylint: disable=broad-exception-caught + self.helper.connector_logger.error( + f"[CONNECTOR] {feed.label} feed failed with an unexpected error", + { + "feed": feed.label, + "error_type": type(e).__name__, + "error": str(e), + }, + ) + + # ---- Update state ---- + if total_objects_sent > 0: + new_state[self.STATE_KEY_LAST_RUN_WITH_DATA] = datetime.now( + timezone.utc + ).isoformat() + + self.helper.set_state(new_state) + + elapsed = time.monotonic() - run_start_mono + self.helper.connector_logger.info( + "[CONNECTOR] Import run completed", + { + "total_objects_sent": total_objects_sent, + "duration_seconds": round(elapsed, 2), + }, + ) + + except (KeyboardInterrupt, SystemExit): + self.helper.connector_logger.info("[CONNECTOR] Connector stopped by signal") + sys.exit(0) + except Exception as err: # pylint: disable=broad-exception-caught + self.helper.connector_logger.error( + "[CONNECTOR] Unexpected error in process_message — run aborted", + { + "error_type": type(err).__name__, + "error": str(err), + }, + ) + + # ------------------------------------------------------------------ + # Entry point + # ------------------------------------------------------------------ + + def run(self) -> None: + """ + Start the connector with scheduled execution. + + Uses schedule_process() for scheduled execution. + Handles both periodic and run-and-terminate modes automatically. + """ + self.helper.schedule_process( + message_callback=self.process_message, + duration_period=self.config.connector.duration_period.total_seconds(), + ) diff --git a/external-import/usta/src/connector/converter_to_stix.py b/external-import/usta/src/connector/converter_to_stix.py new file mode 100644 index 00000000000..45dd2456600 --- /dev/null +++ b/external-import/usta/src/connector/converter_to_stix.py @@ -0,0 +1,1343 @@ +""" +USTA STIX 2.1 Converter. + +Converts raw USTA Threat Stream API responses into valid STIX 2.1 objects +suitable for ingestion by OpenCTI. Uses deterministic IDs via pycti's +generate_id() to ensure correct deduplication on the platform. + +Handles six data families: + - Malicious URLs → Indicator + IPv4-Addr / DomainName / URL + Malware SDO + - Phishing Sites → Indicator + DomainName / URL + - Malware Hashes → Indicator + File (StixFile) + Malware SDO + - Compromised Credentials → Incident + UserAccount + URL + IPv4-Addr + Malware SDO + Note + - Credit Card Tickets → Incident + Identity + Note + - Deep Sight Tickets → Report + ThreatActor / Identity + Relationships + Note +""" + +# pylint: disable=too-many-lines + +from __future__ import annotations + +import base64 +import html as html_lib +import ipaddress +import re +import uuid +from datetime import datetime, timezone +from typing import Any +from urllib.parse import urlparse + +import stix2 +from pycti import Identity as PyctiIdentity +from pycti import Incident as PyctiIncident +from pycti import Indicator as PyctiIndicator +from pycti import Malware as PyctiMalware +from pycti import Note as PyctiNote +from pycti import OpenCTIConnectorHelper +from pycti import Report as PyctiReport +from pycti import StixCoreRelationship +from pycti import ThreatActor as PyctiThreatActor + + +class ConverterToStix: + """ + Converts USTA Threat Stream API records into STIX 2.1 objects for OpenCTI. + + Each public ``convert_*`` method accepts a single raw API record dict and + returns a flat list of STIX objects (SDOs, SCOs, SROs) ready to be added + to a bundle. All IDs are generated deterministically so that re-importing + the same record produces identical IDs, enabling correct deduplication on + the OpenCTI platform. + + TLP is applied at the connector level via *tlp_level*, but individual Deep + Sight ticket records may carry their own TLP that overrides the default. + The connector must include all four standard TLP marking definitions in + every bundle (available via ``TLP_MARKINGS``) to prevent + ``cleanup_inconsistent_bundle`` from dropping objects whose per-record TLP + differs from the connector default. + """ + + # Map motivation strings from the API to STIX 2.1 motivation vocabulary values + _MOTIVATION_MAP: dict[str, str] = { + "money": "personal-gain", + "ideological": "ideology", + "individual_satisfaction": "personal-satisfaction", + "state_supported_operation": "organizational-gain", + } + + # Map TLP level strings to their corresponding STIX 2.1 MarkingDefinition objects. + # "clear" and "white" both resolve to TLP:WHITE for backwards compatibility. + TLP_MARKING_MAP: dict[str, stix2.MarkingDefinition] = { + "clear": stix2.TLP_WHITE, + "white": stix2.TLP_WHITE, + "green": stix2.TLP_GREEN, + "amber": stix2.TLP_AMBER, + "red": stix2.TLP_RED, + } + + # All standard TLP marking definition objects — must be included in every + # bundle so that cleanup_inconsistent_bundle never drops per-record TLP refs. + TLP_MARKINGS: list[stix2.MarkingDefinition] = [ + stix2.TLP_WHITE, + stix2.TLP_GREEN, + stix2.TLP_AMBER, + stix2.TLP_RED, + ] + + # Base URL for deep-linking tickets back to the USTA portal via ExternalReference + USTA_TICKET_BASE_URL = "https://usta.prodaft.com/intelligence/tickets/" + + def __init__( # pylint: disable=too-many-arguments,too-many-positional-arguments + self, + helper: OpenCTIConnectorHelper, + author_name: str = "USTA", + tlp_level: str = "amber", + confidence_level: int = 80, + store_credential_password: bool = False, + ) -> None: + """ + Initialise the converter with connector-wide defaults. + + Args: + helper: OpenCTI connector helper, used for logging throughout + conversion. + author_name: Display name for the STIX Identity SDO that will be + set as the ``created_by_ref`` on every produced object. + tlp_level: Default TLP marking level applied to all produced + objects. Accepted values: ``"clear"``, ``"white"``, + ``"green"``, ``"amber"``, ``"red"``. Deep Sight ticket + records may carry their own TLP that overrides this default. + confidence_level: Integer 0–100 assigned to all produced STIX + objects. + store_credential_password: When ``True``, raw passwords from + Account Takeover Prevention records are written to the STIX + UserAccount credential field. Disabled by default to avoid + storing plaintext credentials in the platform. + """ + self.helper = helper + self.confidence = confidence_level + self.store_credential_password = store_credential_password + + # TLP marking + self.tlp_level = tlp_level.lower() + self.tlp_marking: stix2.MarkingDefinition = self.TLP_MARKING_MAP.get( + self.tlp_level, stix2.TLP_AMBER + ) + + # Author identity (deterministic ID) + self.author = stix2.Identity( + id=PyctiIdentity.generate_id(author_name, "organization"), + name=author_name, + identity_class="organization", + description=( + "USTA Threat Intelligence Platform — PRODAFT's threat-intelligence " + "service covering malicious URLs, phishing sites, malware hashes, " + "compromised credentials, credit-card fraud, and Deep Sight " + "intelligence reports." + ), + ) + + # ------------------------------------------------------------------ + # Internal helpers + # ------------------------------------------------------------------ + + @staticmethod + def _escape_stix_value(value: str) -> str: + """Escape backslashes and single quotes for STIX patterns.""" + return value.replace("\\", "\\\\").replace("'", "\\'") + + @staticmethod + def _parse_datetime(value: str | None) -> str: + """Safely parse an ISO datetime string, normalize to UTC with Z suffix.""" + if not value: + return datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%S.000Z") + try: + dt = datetime.fromisoformat(value.replace("Z", "+00:00")) + return dt.astimezone(timezone.utc).isoformat().replace("+00:00", "Z") + except (ValueError, AttributeError): + return value + + @staticmethod + def _extract_host(url_string: str) -> str: + """Extract the host from a URL-like string, handling IPv6 literals and bare hosts.""" + if not url_string or url_string.startswith("/"): + return "" + + # Full URL with scheme: http://host:port/path, http://[::1]:443/ + parsed = urlparse(url_string) + if parsed.hostname: + return parsed.hostname + + # Scheme-relative parse covers: bare "host", "host/path", "host:port", + # bracketed "[::1]:port", and IPv4-with-port in one shot + parsed = urlparse(f"//{url_string}") + if parsed.hostname: + return parsed.hostname + + # Last resort: raw IP literals that may be invalid in standard URL syntax. + # First, handle bare IPv4/IPv6 like "2001:db8::1" which urlparse() cannot + # treat as a hostname when unbracketed. + try: + ipaddress.ip_address(url_string) + return url_string + except ValueError: + pass + # Then handle unbracketed IPv6 with an appended port, e.g. "2001:db8::1:443". + if ":" in url_string: + host_candidate, _sep, _port = url_string.rpartition(":") + if host_candidate: + try: + ipaddress.ip_address(host_candidate) + return host_candidate + except ValueError: + pass + + return "" + + @staticmethod + def _is_ip(value: str) -> bool: + """Return True if value is a valid IPv4 or IPv6 address.""" + try: + ipaddress.ip_address(value) + return True + except ValueError: + return False + + @staticmethod + def _is_ipv6(value: str) -> bool: + """Return True if value is a valid IPv6 address.""" + try: + return isinstance(ipaddress.ip_address(value), ipaddress.IPv6Address) + except ValueError: + return False + + @staticmethod + def _strip_html(html_text: str) -> str: + """Strip HTML tags, converting block elements to newlines and unescaping entities.""" + if not html_text: + return "" + text = re.sub(r"", "\n", html_text, flags=re.IGNORECASE) + text = re.sub(r"

||", "\n", text, flags=re.IGNORECASE) + text = re.sub(r"", "\n• ", text, flags=re.IGNORECASE) + text = re.sub(r"<[^>]+>", "", text) + text = html_lib.unescape(text) + lines = [line.strip() for line in text.splitlines()] + return "\n".join(line for line in lines if line).strip() + + def _make_usta_ext_ref(self, ticket_id: Any) -> stix2.ExternalReference | None: + """Build an ExternalReference pointing to the USTA ticket portal URL.""" + if not ticket_id: + return None + return stix2.ExternalReference( + source_name="USTA", + url=f"{self.USTA_TICKET_BASE_URL}{ticket_id}", + description=f"USTA ticket <#{ticket_id}>", + ) + + def _make_relationship( # pylint: disable=too-many-arguments,too-many-positional-arguments + self, + relationship_type: str, + source_id: str, + target_id: str, + start_time: str | None = None, + stop_time: str | None = None, + tlp_marking: stix2.MarkingDefinition | None = None, + ) -> stix2.Relationship: + """Create a deterministic STIX Relationship.""" + marking = tlp_marking if tlp_marking is not None else self.tlp_marking + return stix2.Relationship( + id=StixCoreRelationship.generate_id( + relationship_type, + source_id, + target_id, + start_time, + stop_time, + ), + relationship_type=relationship_type, + source_ref=source_id, + target_ref=target_id, + start_time=start_time, + stop_time=stop_time, + created_by_ref=self.author.id, + object_marking_refs=[marking.id], + confidence=self.confidence, + allow_custom=True, + ) + + def _create_malware_sdo(self, malware_name: str) -> stix2.Malware: + """Create a STIX Malware SDO with deterministic ID.""" + return stix2.Malware( + id=PyctiMalware.generate_id(malware_name), + name=malware_name, + is_family=True, + created_by_ref=self.author.id, + object_marking_refs=[self.tlp_marking.id], + confidence=self.confidence, + allow_custom=True, + ) + + # ------------------------------------------------------------------ + # Observable creation helpers + # ------------------------------------------------------------------ + + def _create_ipv4_observable(self, ip_value: str) -> stix2.IPv4Address: + """Create an IPv4-Addr SCO with deterministic ID. + + The stix2 library auto-generates a deterministic UUIDv5 based on + the 'value' contributing property per the STIX 2.1 specification. + """ + return stix2.IPv4Address( + value=ip_value, + object_marking_refs=[self.tlp_marking.id], + custom_properties={ + "x_opencti_created_by_ref": self.author.id, + }, + ) + + def _create_ipv6_observable(self, ip_value: str) -> stix2.IPv6Address: + """Create an IPv6-Addr SCO with deterministic ID.""" + return stix2.IPv6Address( + value=ip_value, + object_marking_refs=[self.tlp_marking.id], + custom_properties={ + "x_opencti_created_by_ref": self.author.id, + }, + ) + + def _create_domain_observable(self, domain_value: str) -> stix2.DomainName: + """Create a Domain-Name SCO with deterministic ID.""" + return stix2.DomainName( + value=domain_value, + object_marking_refs=[self.tlp_marking.id], + custom_properties={ + "x_opencti_created_by_ref": self.author.id, + }, + ) + + def _create_url_observable(self, url_value: str) -> stix2.URL: + """Create a URL SCO with deterministic ID.""" + return stix2.URL( + value=url_value, + object_marking_refs=[self.tlp_marking.id], + custom_properties={ + "x_opencti_created_by_ref": self.author.id, + }, + ) + + def _create_file_observable( + self, + md5: str | None = None, + sha1: str | None = None, + sha256: str | None = None, + ) -> stix2.File: + """Create a File SCO with deterministic ID based on hash values. + + The stix2 library generates a deterministic UUIDv5 from the + hashes dict (ID contributing property for File objects). + """ + hashes: dict[str, str] = {} + if md5: + hashes["MD5"] = md5 + if sha1: + hashes["SHA-1"] = sha1 + if sha256: + hashes["SHA-256"] = sha256 + + if not hashes: + raise ValueError( + "At least one hash value is required to create a File SCO." + ) + + return stix2.File( + hashes=hashes, + object_marking_refs=[self.tlp_marking.id], + custom_properties={ + "x_opencti_created_by_ref": self.author.id, + }, + ) + + # ------------------------------------------------------------------ + # Public conversion methods (one per IOC family) + # ------------------------------------------------------------------ + + def convert_malicious_url( # pylint: disable=too-many-locals,too-many-branches,too-many-statements + self, record: dict[str, Any] + ) -> list: + """ + Convert a single malicious-URL record to a list of STIX objects. + + Expected record shape (from API): + { + "id": "uuid", + "url": "1.2.3.4:8080", + "host": "1.2.3.4", + "is_domain": false, + "ip_addresses": ["1.2.3.4"], + "tags": ["Ghost RAT"], + "valid_from": "...", + "valid_until": "...", + "created": "..." + } + """ + stix_objects: list = [] + + url_value = record.get("url", "") + host_value = record.get("host", "") or self._extract_host(url_value) + is_domain = record.get("is_domain", False) + ip_addresses = record.get("ip_addresses", []) + tags = record.get("tags", []) + valid_from = self._parse_datetime(record.get("valid_from")) + valid_until = self._parse_datetime(record.get("valid_until")) + + if not url_value: + return stix_objects + + # --- Determine the main observable pattern --- + observable_objects: list = [] + pattern_parts: list[str] = [] + + if is_domain and host_value and not self._is_ip(host_value): + # Domain observable + domain_obs = self._create_domain_observable(host_value) + observable_objects.append(domain_obs) + pattern_parts.append( + f"[domain-name:value = '{self._escape_stix_value(host_value)}']" + ) + elif ip_addresses: + for ip_addr in ip_addresses: + escaped_ip = self._escape_stix_value(ip_addr) + if self._is_ipv6(ip_addr): + ip_obs = self._create_ipv6_observable(ip_addr) + observable_objects.append(ip_obs) + pattern_parts.append(f"[ipv6-addr:value = '{escaped_ip}']") + elif self._is_ip(ip_addr): + ip_obs = self._create_ipv4_observable(ip_addr) + observable_objects.append(ip_obs) + pattern_parts.append(f"[ipv4-addr:value = '{escaped_ip}']") + elif host_value: + escaped_host = self._escape_stix_value(host_value) + if self._is_ip(host_value): + ip_obs = self._create_ipv4_observable(host_value) + observable_objects.append(ip_obs) + pattern_parts.append(f"[ipv4-addr:value = '{escaped_host}']") + else: + domain_obs = self._create_domain_observable(host_value) + observable_objects.append(domain_obs) + pattern_parts.append(f"[domain-name:value = '{escaped_host}']") + + # Also create a URL observable if the url field contains a path or port. + # Skip path-only values (starting with /) — prepending a scheme would + # produce an invalid URL like http:///path/to/resource. + if ( + url_value + and not url_value.startswith("/") + and ("/" in url_value or ":" in url_value) + ): + # Normalise to include scheme for URL observable if missing + normalised_url = url_value + if not normalised_url.startswith(("http://", "https://")): + normalised_url = f"http://{normalised_url}" + url_obs = self._create_url_observable(normalised_url) + observable_objects.append(url_obs) + # Include the full URL in the pattern to avoid collapsing distinct + # URLs on the same host/IP into a single Indicator. + escaped_url = self._escape_stix_value(normalised_url) + pattern_parts.append(f"[url:value = '{escaped_url}']") + + stix_objects.extend(observable_objects) + + # --- Build the STIX pattern --- + if not pattern_parts: + # Path-only values (e.g. /api/path) cannot be given a valid absolute + # URL scheme — no meaningful indicator can be created. + if url_value.startswith("/"): + return stix_objects + # Fallback: treat entire url value as a URL pattern + if not url_value.startswith(("http://", "https://")): + url_value_norm = f"http://{url_value}" + else: + url_value_norm = url_value + pattern = f"[url:value = '{self._escape_stix_value(url_value_norm)}']" + elif len(pattern_parts) == 1: + pattern = pattern_parts[0] + else: + pattern = " OR ".join(pattern_parts) + + # --- Create the Indicator --- + indicator_name = url_value + description_parts = ["Malicious URL indicator reported by USTA.\n"] + if tags: + description_parts.append(f"Associated malware: {', '.join(tags)}.") + + indicator = stix2.Indicator( + id=PyctiIndicator.generate_id(pattern), + name=indicator_name, + description=" ".join(description_parts), + pattern=pattern, + pattern_type="stix", + valid_from=valid_from, + valid_until=valid_until, + labels=["malicious-activity"] + [t.lower().replace(" ", "-") for t in tags], + created_by_ref=self.author.id, + object_marking_refs=[self.tlp_marking.id], + confidence=self.confidence, + custom_properties={ + "x_opencti_score": self.confidence, + "x_opencti_main_observable_type": self._main_observable_type( + is_domain, host_value, ip_addresses + ), + }, + ) + stix_objects.append(indicator) + + # --- Relationships: indicator → observable ("based-on") --- + for obs in observable_objects: + rel = self._make_relationship( + "based-on", + indicator.id, + obs.id, + start_time=valid_from, + stop_time=valid_until, + ) + stix_objects.append(rel) + + # --- Malware SDOs from tags --- + for tag in tags: + malware_sdo = self._create_malware_sdo(tag) + stix_objects.append(malware_sdo) + # indicator "indicates" malware + rel = self._make_relationship( + "indicates", + indicator.id, + malware_sdo.id, + start_time=valid_from, + stop_time=valid_until, + ) + stix_objects.append(rel) + + return stix_objects + + def convert_phishing_site( # pylint: disable=too-many-locals + self, record: dict[str, Any] + ) -> list: + """ + Convert a single phishing-site record to a list of STIX objects. + + Expected record shape (from API): + { + "id": 42936, + "url": "http://yapikredi.world", + "host": "", + "is_domain": true, + "ip_addresses": [], + "country": "", + "created": "2015-06-06T08:36:12.950000Z" + } + """ + stix_objects: list = [] + + url_value = record.get("url", "") + # is_domain = record.get("is_domain", False) + ip_addresses = record.get("ip_addresses", []) + created = self._parse_datetime(record.get("created")) + + if not url_value or url_value.startswith("/"): + return stix_objects + + # Normalize to a full URL so the observable, pattern, and host extraction + # are all consistent. Without a scheme, urlparse treats the whole string as + # a path and yields no hostname. + normalized_url = url_value if "://" in url_value else f"http://{url_value}" + host_value = urlparse(normalized_url).hostname or "" + + observable_objects: list = [] + pattern_parts: list[str] = [] + + # Create URL observable using the normalized value + url_obs = self._create_url_observable(normalized_url) + observable_objects.append(url_obs) + pattern_parts.append( + f"[url:value = '{self._escape_stix_value(normalized_url)}']" + ) + + # Create domain observable if applicable + if host_value and not self._is_ip(host_value): + domain_obs = self._create_domain_observable(host_value) + observable_objects.append(domain_obs) + + # Create IP observables + for ip_addr in ip_addresses: + if ip_addr and self._is_ip(ip_addr): + if self._is_ipv6(ip_addr): + ip_obs = self._create_ipv6_observable(ip_addr) + else: + ip_obs = self._create_ipv4_observable(ip_addr) + observable_objects.append(ip_obs) + + stix_objects.extend(observable_objects) + + # --- Build pattern (URL-centric for phishing) --- + pattern = ( + pattern_parts[0] + if pattern_parts + else f"[url:value = '{self._escape_stix_value(normalized_url)}']" + ) + + indicator_name = f"{host_value or normalized_url}" + + indicator = stix2.Indicator( + id=PyctiIndicator.generate_id(pattern), + name=indicator_name, + description="Phishing site identified by USTA threat intelligence.", + pattern=pattern, + pattern_type="stix", + valid_from=created, + labels=["malicious-activity", "phishing"], + created_by_ref=self.author.id, + object_marking_refs=[self.tlp_marking.id], + confidence=self.confidence, + custom_properties={ + "x_opencti_score": self.confidence, + "x_opencti_main_observable_type": "Url", + }, + ) + stix_objects.append(indicator) + + # Relationships: indicator → observables + for obs in observable_objects: + rel = self._make_relationship("based-on", indicator.id, obs.id) + stix_objects.append(rel) + + return stix_objects + + def convert_malware_hash( # pylint: disable=too-many-locals + self, record: dict[str, Any] + ) -> list: + """ + Convert a single malware-hash record to a list of STIX objects. + + Expected record shape (from API): + { + "id": "uuid", + "hashes": { + "md5": "...", + "sha1": "...", + "sha256": "..." + }, + "tags": ["Vidar"], + "valid_from": "...", + "valid_until": "...", + "created": "..." + } + """ + stix_objects: list = [] + + hashes = record.get("hashes", {}) + md5 = hashes.get("md5") + sha1 = hashes.get("sha1") + sha256 = hashes.get("sha256") + tags = record.get("tags", []) + valid_from = self._parse_datetime(record.get("valid_from")) + valid_until = self._parse_datetime(record.get("valid_until")) + + if not (md5 or sha1 or sha256): + return stix_objects + + # --- File observable --- + file_obs = self._create_file_observable(md5=md5, sha1=sha1, sha256=sha256) + stix_objects.append(file_obs) + + # --- STIX pattern --- + pattern_components: list[str] = [] + if sha256: + pattern_components.append(f"file:hashes.'SHA-256' = '{sha256}'") + if sha1: + pattern_components.append(f"file:hashes.'SHA-1' = '{sha1}'") + if md5: + pattern_components.append(f"file:hashes.MD5 = '{md5}'") + + pattern = "[" + " AND ".join(pattern_components) + "]" + + # --- Indicator --- + display_hash = sha256 or sha1 or md5 + short_hash = ( + display_hash[:16] + "..." if len(display_hash) > 16 else display_hash + ) + indicator_name = short_hash + if tags: + indicator_name = f"{tags[0]} - {short_hash}" + + description_parts = ["Malware hash indicator reported by USTA."] + if tags: + description_parts.append(f"Associated malware families: {', '.join(tags)}.") + + indicator = stix2.Indicator( + id=PyctiIndicator.generate_id(pattern), + name=indicator_name, + description=" ".join(description_parts), + pattern=pattern, + pattern_type="stix", + valid_from=valid_from, + valid_until=valid_until, + labels=["malicious-activity", "malware-hash"] + + [t.lower().replace(" ", "-") for t in tags], + created_by_ref=self.author.id, + object_marking_refs=[self.tlp_marking.id], + confidence=self.confidence, + custom_properties={ + "x_opencti_score": self.confidence, + "x_opencti_main_observable_type": "StixFile", + }, + ) + stix_objects.append(indicator) + + # Relationship: indicator → file observable + rel = self._make_relationship( + "based-on", + indicator.id, + file_obs.id, + start_time=valid_from, + stop_time=valid_until, + ) + stix_objects.append(rel) + + # --- Malware SDOs from tags --- + for tag in tags: + malware_sdo = self._create_malware_sdo(tag) + stix_objects.append(malware_sdo) + # indicator "indicates" malware + rel = self._make_relationship( + "indicates", + indicator.id, + malware_sdo.id, + start_time=valid_from, + stop_time=valid_until, + ) + stix_objects.append(rel) + + return stix_objects + + # ------------------------------------------------------------------ + # Utility + # ------------------------------------------------------------------ + + @staticmethod + def _mask_card_number(card_number: str) -> str: + """ + Mask a credit card number preserving BIN (first 6) and last 4 digits. + Example: '4289691967078106' → '428969******8106' + """ + cleaned = card_number.replace(" ", "").replace("-", "") + if len(cleaned) < 10: + return "*" * len(cleaned) + return cleaned[:6] + "*" * (len(cleaned) - 10) + cleaned[-4:] + + def _create_user_account_observable( + self, + account_login: str, + account_password: str, + record_id: int | str = "", + labels: list[str] | None = None, + ) -> stix2.UserAccount: + """Create a User-Account SCO with deterministic ID. + + User-Account has no ID-contributing properties in the STIX 2.1 spec, + so stix2 would generate a random UUID each time. We manually build a + deterministic UUIDv5 from the USTA API record ID so that the same API + record always maps to the same STIX object without + leaking the password into the ID. + + Args: + account_password: Raw password — only stored in ``credential`` + when ``store_credential_password`` is enabled; never used + for ID generation. + record_id: The unique record ID returned by the USTA API. Used + as the primary deduplication key. + labels: Optional list of label strings attached via + x_opencti_labels (e.g. "corporate", "personal", "malware"). + """ + record_id_str = str(record_id).strip() if record_id is not None else "" + if record_id_str: + uuid_name = record_id_str + else: + if not account_login: + raise ValueError( + "Cannot generate deterministic UserAccount ID: both record_id " + "and account_login are empty." + ) + uuid_name = f"login:{account_login}" + deterministic_id = "user-account--" + str( + uuid.uuid5( + uuid.UUID("00abedb4-aa42-466c-9c01-fed23315a9b7"), + name=uuid_name, + ) + ) + custom: dict[str, Any] = {"x_opencti_created_by_ref": self.author.id} + if labels: + custom["x_opencti_labels"] = labels + kwargs: dict[str, Any] = { + "id": deterministic_id, + "account_login": account_login, + "object_marking_refs": [self.tlp_marking.id], + "custom_properties": custom, + } + if self.store_credential_password: + kwargs["credential"] = account_password + return stix2.UserAccount(**kwargs) + + # ------------------------------------------------------------------ + # Compromised Credentials conversion + # ------------------------------------------------------------------ + + def convert_compromised_credential( # pylint: disable=too-many-locals,too-many-branches,too-many-statements + self, record: dict[str, Any] + ) -> list: + """ + Convert a single compromised-credentials ticket to STIX objects. + + Expected record shape: + { + "id": 11185291, + "status": "open", + "created": "2026-01-19T09:46:44.942396Z", + "content_type": "compromised-credentials", + "company": {"id": 73, "name": "..."}, + "content": { + "username": "user@example.com", + "password": "...", + "password_complexity": {"score": "weak", "length": 7, ...}, + "url": "https://login.example.com", + "source": "malware" | "phishing_site", + "is_corporate": true, + "victim_detail": { // may be null + "victim_uid": "...", + "country": "...", + "ip": "...", + "computer_name": "...", + "victim_os": "...", + "infection_date": "...", + "malware": "StealC", + ... + } + } + } + + STIX mapping: + - UserAccount SCO (the compromised account) + - URL SCO (the targeted login URL) + - Domain-Name SCO (extracted from URL) + - IPv4-Addr SCO (victim machine IP, if victim_detail present) + - Malware SDO (stealer family, if victim_detail.malware present) + - Incident SDO (the account-takeover event) + - Note SDO (victim telemetry & password complexity — no raw password) + - Relationships (incident targets user-account, incident related-to + observables, incident uses malware) + + IMPORTANT: Raw passwords are NOT stored by default. + They are only placed in the User-Account ``credential`` field when + ``store_credential_password`` is explicitly enabled. + Only the password_complexity metadata is preserved otherwise. + """ + stix_objects: list = [] + + content = record.get("content", {}) + username = content.get("username", "") + _password = content.get("password", "") + target_url = content.get("url", "") + source = content.get("source", "unknown") + is_corporate = content.get("is_corporate", False) + password_complexity = content.get("password_complexity", {}) + victim_detail = content.get("victim_detail") # May be None + created = self._parse_datetime(record.get("created")) + ticket_id = record.get("id", "unknown") + company = record.get("company", {}) + company_name = company.get("name", "Unknown Company") + + if not username: + return stix_objects + + # --- UserAccount SCO --- + # Labels classify the account type and the credential-theft vector so + # analysts can filter UserAccount observables in OpenCTI directly. + ua_labels = ["corporate" if is_corporate else "personal"] + if source: + ua_labels.append(source.replace("_", "-")) + if password_complexity: + score = password_complexity.get("score", "") + if score: + ua_labels.append(f"password-strength-{score}") + + user_account = self._create_user_account_observable( + username, _password, record_id=ticket_id, labels=ua_labels + ) + stix_objects.append(user_account) + + # UserAccount is always included in observable_scos so it receives a + # `related-to` relationship from the Incident. OpenCTI's schema does + # not allow `targets` from an Incident to an SCO (only to SDOs such as + # Identity/Location), so `related-to` is the correct relationship type + # for all SCO links. + observable_scos: list = [user_account] + + # --- URL SCO (target login page) --- + # Skip path-only values — prepending a scheme would produce an invalid URL. + if target_url and not target_url.startswith("/"): + # Normalize once: ensures a valid URL SCO value and consistent parsing. + normalised_target_url = ( + target_url if "://" in target_url else f"http://{target_url}" + ) + url_obs = self._create_url_observable(normalised_target_url) + stix_objects.append(url_obs) + observable_scos.append(url_obs) + # Direct link: user-account → related-to → url so the target URL + # is visible on the UserAccount entity in OpenCTI. + stix_objects.append( + self._make_relationship("related-to", user_account.id, url_obs.id) + ) + + # Extract domain from the already-normalised URL + hostname = urlparse(normalised_target_url).hostname or "" + if hostname and not self._is_ip(hostname): + domain_obs = self._create_domain_observable(hostname) + stix_objects.append(domain_obs) + observable_scos.append(domain_obs) + + # --- Victim IP (if victim_detail present) --- + malware_name: str | None = None + if victim_detail: + victim_ip = victim_detail.get("ip", "") + if victim_ip and self._is_ip(victim_ip): + if self._is_ipv6(victim_ip): + ip_obs = self._create_ipv6_observable(victim_ip) + else: + ip_obs = self._create_ipv4_observable(victim_ip) + stix_objects.append(ip_obs) + observable_scos.append(ip_obs) + + malware_name = victim_detail.get("malware") + + # --- Incident SDO --- + incident_name = f"Compromised Credential: {username} (Ticket #{ticket_id})" + + description_lines = [ + f"Compromised credential detected by USTA (Ticket #{ticket_id}).", + "", + f"- Source: {source}", + f"- Company: {company_name}", + ] + if is_corporate: + description_lines.append("- Flagged as corporate credential") + if password_complexity: + score = password_complexity.get("score", "unknown") + length = password_complexity.get("length", "?") + description_lines.append(f"- Password strength: {score} (length: {length})") + + labels = ["compromised-credential", source.replace("_", "-")] + if is_corporate: + labels.append("corporate") + + ext_ref = self._make_usta_ext_ref(ticket_id) + incident = stix2.Incident( + id=PyctiIncident.generate_id(incident_name, created), + name=incident_name, + description="\n".join(description_lines), + created=created, + modified=created, + labels=labels, + created_by_ref=self.author.id, + object_marking_refs=[self.tlp_marking.id], + confidence=self.confidence, + allow_custom=True, + external_references=[ext_ref] if ext_ref else None, + custom_properties={ + "incident_type": "account-takeover", + "source": "usta", + }, + ) + stix_objects.append(incident) + + # --- Relationships: incident related-to all SCOs (user-account, url, domain, ip) --- + for obs in observable_scos: + stix_objects.append( + self._make_relationship("related-to", incident.id, obs.id) + ) + + # --- Malware SDO from victim_detail --- + if malware_name: + malware_sdo = self._create_malware_sdo(malware_name) + stix_objects.append(malware_sdo) + stix_objects.append( + self._make_relationship("uses", incident.id, malware_sdo.id) + ) + + # --- Note SDO: victim telemetry (no raw passwords) --- + if victim_detail: + note_content_parts = [ + f"**Compromised Credential Ticket #{ticket_id} — Victim Telemetry**", + "", + f"- Victim UID: {victim_detail.get('victim_uid', 'N/A')}", + f"- OS Username: {victim_detail.get('username', 'N/A')}", + f"- Country: {victim_detail.get('country', 'N/A')}", + f"- Victim IP: {victim_detail.get('ip', 'N/A')}", + f"- Computer Name: {victim_detail.get('computer_name', 'N/A')}", + f"- OS: {victim_detail.get('victim_os', 'N/A')}", + f"- CPU: {victim_detail.get('cpu', 'N/A')}", + f"- Memory: {victim_detail.get('memory', 'N/A')}", + f"- Infection Date: {victim_detail.get('infection_date', 'N/A')}", + f"- Stealer Family: {victim_detail.get('malware', 'N/A')}", + ] + note_abstract = f"Victim telemetry for compromised credential: {username}" + + note = stix2.Note( + id=PyctiNote.generate_id(created, note_content_parts[0]), + abstract=note_abstract, + content="\n".join(note_content_parts), + created=created, + created_by_ref=self.author.id, + object_marking_refs=[self.tlp_marking.id], + object_refs=[incident.id, user_account.id], + ) + stix_objects.append(note) + + return stix_objects + + # ------------------------------------------------------------------ + # Credit Card Ticket conversion + # ------------------------------------------------------------------ + + def convert_credit_card_ticket( # pylint: disable=too-many-locals + self, record: dict[str, Any] + ) -> list: + """ + Convert a single credit card fraud ticket to STIX objects. + + Expected record shape: + { + "id": 591197, + "status": "open", + "created": "2019-03-08T10:17:46.865262Z", + "content_type": "credit-card", + "company": {"id": 73, "name": "API Integration Demo Company"}, + "content": { + "number": "4289691967078106", + "expiration_date": "2019-10-01" + } + } + + STIX mapping: + - Incident SDO (the fraud ticket itself) + - Identity SDO (the affected company / card issuer) + - Note SDO (masked card details) + - Relationship (incident → identity: "targets") + + IMPORTANT: Credit card numbers are masked to BIN (first 6) + last 4 + digits in all STIX objects. Full PANs are NEVER stored. + """ + stix_objects: list = [] + + content = record.get("content", {}) + card_number_raw = content.get("number", "") + expiration_date = content.get("expiration_date", "") + created = self._parse_datetime(record.get("created")) + ticket_id = record.get("id", "unknown") + status = record.get("status", "unknown") + company = record.get("company", {}) + company_name = company.get("name", "Unknown Company") + + if not card_number_raw: + return stix_objects + + masked_number = self._mask_card_number(card_number_raw) + # BIN is first 6 digits + bin_prefix = card_number_raw.replace(" ", "").replace("-", "")[:6] + + # --- Company Identity SDO --- + company_identity = stix2.Identity( + id=PyctiIdentity.generate_id(company_name, "organization"), + name=company_name, + identity_class="organization", + created_by_ref=self.author.id, + object_marking_refs=[self.tlp_marking.id], + ) + stix_objects.append(company_identity) + + # --- Incident SDO --- + usta_ticket_url = f"{self.USTA_TICKET_BASE_URL}{ticket_id}" + ext_ref = self._make_usta_ext_ref(ticket_id) + + incident_name = f"{masked_number} (USTA Ticket <#{ticket_id}>)" + incident_description = "\n".join( + [ + "Credit card fraud ticket reported by USTA.", + "", + f"- Ticket ID: {ticket_id}", + f"- Status: {status}", + f"- BIN: {bin_prefix}", + f"- Card (masked): {masked_number}", + f"- Expiration: {expiration_date}", + f"- Affected Company: {company_name}", + ] + ) + incident = stix2.Incident( + id=PyctiIncident.generate_id(incident_name, created), + name=incident_name, + description=incident_description, + created=created, + modified=created, + labels=["credit-card-fraud", "financial-crime"], + created_by_ref=self.author.id, + object_marking_refs=[self.tlp_marking.id], + confidence=self.confidence, + allow_custom=True, + external_references=[ext_ref] if ext_ref else None, + custom_properties={ + "incident_type": "credit-card-compromise", + "severity": "high", + "source": "usta", + }, + ) + stix_objects.append(incident) + + # --- Relationship: incident targets company --- + rel_targets = self._make_relationship( + "targets", incident.id, company_identity.id + ) + stix_objects.append(rel_targets) + + # --- Note SDO: card details (masked) --- + note_content_parts = [ + f"**Credit Card Fraud Ticket #{ticket_id}**", + "", + f"- Card Number (masked): {masked_number}", + f"- BIN: {bin_prefix}", + f"- Expiration Date: {expiration_date}", + f"- Status: {status}", + f"- Affected Company: {company_name}", + f"- USTA Ticket URL: {usta_ticket_url}", + ] + + note = stix2.Note( + id=PyctiNote.generate_id(created, note_content_parts[0]), + abstract=f"Credit card compromise details for ticket #{ticket_id}", + content="\n".join(note_content_parts), + created=created, + created_by_ref=self.author.id, + object_marking_refs=[self.tlp_marking.id], + object_refs=[incident.id, company_identity.id], + ) + stix_objects.append(note) + + return stix_objects + + # ------------------------------------------------------------------ + # Deep Sight Ticket conversion + # ------------------------------------------------------------------ + + def convert_deep_sight_ticket( # pylint: disable=too-many-locals,too-many-branches,too-many-statements + self, record: dict[str, Any] + ) -> list: + """ + Convert a single Deep Sight intelligence ticket to STIX objects. + + Expected record shape (from API): + { + "id": 11309166, + "status": "open", + "created": "2026-03-05T07:30:03.581281Z", + "content_type": "deep-sight", + "company": {"id": 73, "name": "..."}, + "content": { + "title": "[REGIONAL] Ransomware Attack...", + "threat_actors": [ + {"nickname": "DragonForce", "real_name": "", "country": "my", + "motivations": ["ideological"]} + ], + "targets": [ + {"name": "Tenteks", "risk_score": "medium", "analyst_notes": "

...

"} + ], + "detected_platforms": ["sigint"], + "analyst_notes": "

HTML analyst report text

", + "tlp": "amber", + "labels": ["ransomware"], + "report": null | "", + "detected_at": "2026-03-05T07:28:00Z", + "markers": ["regional"] + } + } + + STIX mapping: + - ThreatActor SDO per content.threat_actors[] entry + - Identity SDO per content.targets[] entry (organization) + - Relationship ThreatActor "targets" Identity (per pair) + - Report SDO main container → appears in OpenCTI Analyses/Reports + """ + stix_objects: list = [] + + content = record.get("content") or {} + ticket_id = record.get("id", "unknown") + title = content.get("title", "") + if not title: + title = f"Deep Sight Ticket #{ticket_id}" + created = self._parse_datetime(record.get("created")) + status = record.get("status", "unknown") + + # Per-record TLP (overrides connector-level TLP for all objects in this ticket) + tlp_key = str(content.get("tlp") or self.tlp_level).lower() + record_tlp = self.TLP_MARKING_MAP.get(tlp_key, self.tlp_marking) + + analyst_notes = self._strip_html(content.get("analyst_notes", "")) + threat_actors_data = content.get("threat_actors") or [] + targets_data = content.get("targets") or [] + labels_raw = content.get("labels") or [] + markers_raw = content.get("markers") or [] + + # --- Threat Actor SDOs --- + threat_actor_objs: list = [] + for ta in threat_actors_data: + nickname = (ta.get("nickname") or ta.get("name") or "").strip() + if not nickname or nickname.upper() == "N/A": + continue + + motivations_raw = [str(m).lower() for m in (ta.get("motivations") or [])] + mapped_motivations = [ + self._MOTIVATION_MAP.get(m, m) for m in motivations_raw if m + ] + + kwargs: dict[str, Any] = { + "id": PyctiThreatActor.generate_id( + name=nickname, opencti_type="Threat-Actor-Individual" + ), + "name": nickname, + "threat_actor_types": ["unknown"], + "created_by_ref": self.author.id, + "object_marking_refs": [record_tlp.id], + "confidence": self.confidence, + "allow_custom": True, + } + if mapped_motivations: + kwargs["primary_motivation"] = mapped_motivations[0] + if len(mapped_motivations) > 1: + kwargs["secondary_motivations"] = mapped_motivations[1:] + + threat_actor_objs.append(stix2.ThreatActor(id=kwargs.pop("id"), **kwargs)) + + stix_objects.extend(threat_actor_objs) + + # --- Target Identity SDOs --- + identity_objs: list = [] + for target in targets_data: + target_name = (target.get("name") or "").strip() + if not target_name or target_name.upper() == "N/A": + continue + + identity = stix2.Identity( + id=PyctiIdentity.generate_id(target_name, "organization"), + name=target_name, + identity_class="organization", + created_by_ref=self.author.id, + object_marking_refs=[record_tlp.id], + ) + identity_objs.append(identity) + + stix_objects.extend(identity_objs) + + # --- Relationships: ThreatActor → Identity ("targets") --- + rel_objs: list = [] + for ta_sdo in threat_actor_objs: + for identity in identity_objs: + rel = self._make_relationship( + "targets", + ta_sdo.id, + identity.id, + tlp_marking=record_tlp, + ) + rel_objs.append(rel) + + stix_objects.extend(rel_objs) + + # --- Report SDO --- + object_refs = [o.id for o in threat_actor_objs + identity_objs + rel_objs] + if not object_refs: + object_refs = [self.author.id] + + labels = [lbl for lbl in (labels_raw + markers_raw) if lbl] + if status: + labels.append(status) + # Tag whether the record ships with a PDF attachment + labels.append("has-attachment" if content.get("report") else "no-attachment") + # Deduplicate while preserving order + seen_labels: set[str] = set() + unique_labels = [] + for lbl in labels: + if lbl not in seen_labels: + seen_labels.add(lbl) + unique_labels.append(lbl) + + ext_ref = self._make_usta_ext_ref(ticket_id) + + # Embed report PDF directly in the STIX bundle so OpenCTI attaches it + # to the Report entity atomically — no async timing issues. + custom_properties: dict[str, Any] = {} + pdf_data: bytes | None = record.get("_pdf_data") + pdf_filename: str | None = record.get("_pdf_filename") + if pdf_data and pdf_filename: + custom_properties["x_opencti_files"] = [ + { + "name": pdf_filename, + "data": base64.b64encode(pdf_data).decode("utf-8"), + "mime_type": "application/pdf", + "no_trigger_import": True, + "object_marking_refs": [record_tlp.id], + } + ] + + report = stix2.Report( + id=PyctiReport.generate_id(title, created), + name=title, + description=analyst_notes + or f"Deep Sight intelligence ticket #{ticket_id}. Status: {status}.", + published=created, + report_types=["threat-report"], + object_refs=object_refs, + labels=unique_labels if unique_labels else ["deep-sight"], + created=created, + created_by_ref=self.author.id, + object_marking_refs=[record_tlp.id], + confidence=self.confidence, + allow_custom=True, + external_references=[ext_ref] if ext_ref else None, + custom_properties=custom_properties, + ) + stix_objects.append(report) + + return stix_objects + + @staticmethod + def _main_observable_type( + is_domain: bool, + host_value: str, + ip_addresses: list[str], + ) -> str: + """Determine the x_opencti_main_observable_type for an indicator.""" + if is_domain and host_value and not ConverterToStix._is_ip(host_value): + return "Domain-Name" + if ip_addresses: + for addr_str in ip_addresses: + try: + addr = ipaddress.ip_address(addr_str) + return ( + "IPv6-Addr" + if isinstance(addr, ipaddress.IPv6Address) + else "IPv4-Addr" + ) + except ValueError: + continue + if host_value: + try: + addr = ipaddress.ip_address(host_value) + if isinstance(addr, ipaddress.IPv6Address): + return "IPv6-Addr" + return "IPv4-Addr" + except ValueError: + return "Domain-Name" + return "Url" diff --git a/external-import/usta/src/connector/settings.py b/external-import/usta/src/connector/settings.py new file mode 100644 index 00000000000..72ce5d007b3 --- /dev/null +++ b/external-import/usta/src/connector/settings.py @@ -0,0 +1,185 @@ +""" +USTA connector settings. + +Configuration management using Pydantic models following +the OpenCTI connector SDK patterns. +""" + +# pylint: disable=too-few-public-methods + +from abc import ABC +from datetime import timedelta +from typing import Any, Literal + +from pydantic import BaseModel, ConfigDict, Field, HttpUrl, SecretStr, field_serializer +from pydantic_settings import BaseSettings, SettingsConfigDict + + +class BaseConfigModel(BaseModel, ABC): + """Base class for config models — frozen and accepts extra fields.""" + + model_config = ConfigDict(extra="allow", frozen=True, validate_default=True) + + +class _OpenCTIConfig(BaseConfigModel): + url: HttpUrl = Field(description="The base URL of the OpenCTI instance.") + token: SecretStr = Field(description="The API token to connect to OpenCTI.") + + @field_serializer("token") + def _serialize_token(self, v: SecretStr) -> str: + return v.get_secret_value() + + +class _BaseConnectorConfig(BaseConfigModel, ABC): + id: str = Field(description="A UUID v4 to identify the connector in OpenCTI.") + name: str = Field(description="The name of the connector.") + scope: str = Field(description="The scope of the connector.") + log_level: Literal["debug", "info", "warn", "warning", "error"] = Field( + description="The minimum level of logs to display.", + default="error", + ) + + +class BaseExternalImportConnectorConfig(_BaseConnectorConfig): + """Base config for external import connectors.""" + + type: Literal["EXTERNAL_IMPORT"] = "EXTERNAL_IMPORT" + duration_period: timedelta = Field( + description="The period of time to await between two runs of the connector." + ) + + +class BaseConnectorSettings(BaseSettings): + """Base settings class — loads configuration from environment variables.""" + + model_config = SettingsConfigDict( + env_nested_delimiter="_", + env_nested_max_split=1, + extra="allow", + frozen=True, + ) + + opencti: _OpenCTIConfig = Field( + default_factory=_OpenCTIConfig, # type: ignore[arg-type] + description="OpenCTI configurations.", + ) + connector: _BaseConnectorConfig = Field( + default_factory=_BaseConnectorConfig, # type: ignore[arg-type] + description="Connector configurations.", + ) + + def to_helper_config(self) -> dict[str, Any]: + """Convert settings to a dict suitable for OpenCTIConnectorHelper.""" + return self.model_dump(mode="json", exclude_none=True) + + +class ExternalImportConnectorConfig(BaseExternalImportConnectorConfig): + """ + Override the BaseExternalImportConnectorConfig to add parameters + and/or defaults specific to the USTA connector. + """ + + name: str = Field( + description="The name of the connector.", + default="USTA", + ) + scope: str = Field( + description="The scope of the connector.", + default="indicator,observable,malware,identity,incident,user-account,report,threat-actor", + ) + duration_period: timedelta = Field( + description="The period of time to await between two runs.", + default=timedelta(minutes=30), + ) + + +class UstaConfig(BaseConfigModel): + """ + Define parameters specific to the USTA connector. + """ + + api_base_url: HttpUrl = Field( + description="USTA API base URL.", + default="https://usta.prodaft.com", + ) + api_key: SecretStr = Field( + description="USTA API bearer token for authentication.", + ) + + @field_serializer("api_key") + def _serialize_api_key(self, v: SecretStr) -> str: + return v.get_secret_value() + + import_start_date: timedelta = Field( + description=( + "ISO 8601 duration string specifying how far back to import data " + "(e.g., P90D for 90 days, P30D for 30 days). " + "Only used on the very first run when no state exists." + ), + default=timedelta(days=90), + ) + page_size: int = Field( + description="Number of records to fetch per API page.", + default=100, + ge=1, + le=500, + ) + import_malicious_urls: bool = Field( + description="Enable import of malicious URL indicators.", + default=True, + ) + import_phishing_sites: bool = Field( + description="Enable import of phishing site indicators.", + default=True, + ) + import_malware_hashes: bool = Field( + description="Enable import of malware hash indicators.", + default=True, + ) + import_compromised_credentials: bool = Field( + description=( + "Enable import of compromised credentials tickets " + "(Account Takeover Prevention)." + ), + default=True, + ) + import_credit_cards: bool = Field( + description="Enable import of compromised credit card tickets (Fraud Intelligence).", + default=True, + ) + import_deep_sight_tickets: bool = Field( + description=( + "Enable import of Deep Sight intelligence tickets " + "(threat reports, leaks, APT activity)." + ), + default=True, + ) + store_credential_password: bool = Field( + description=( + "When enabled, the raw password from Account Takeover Prevention " + "records is stored in the STIX User-Account credential field. " + "Disabled by default for security reasons." + ), + default=False, + ) + tlp_level: Literal["clear", "white", "green", "amber", "red"] = Field( + description="TLP marking level to apply to imported data.", + default="red", + ) + confidence_level: int = Field( + description="Confidence level for created STIX objects (0-100).", + default=99, + ge=0, + le=100, + ) + + +class ConnectorSettings(BaseConnectorSettings): + """ + Main settings class that combines all configuration sections. + """ + + connector: ExternalImportConnectorConfig = Field( + default_factory=ExternalImportConnectorConfig + ) + usta: UstaConfig = Field(default_factory=UstaConfig) diff --git a/external-import/usta/src/connector/utils.py b/external-import/usta/src/connector/utils.py new file mode 100644 index 00000000000..c554eab305e --- /dev/null +++ b/external-import/usta/src/connector/utils.py @@ -0,0 +1,48 @@ +""" +USTA connector utility functions. + +Lightweight helpers shared across the connector modules. Kept dependency-free +so they can be imported without the OpenCTI/STIX stack being present (useful in +unit tests that don't mock the full helper chain). +""" + +from __future__ import annotations + +from datetime import datetime, timezone +from typing import Any + + +def iso_now() -> str: + """Return the current UTC time as an ISO 8601 string (``YYYY-MM-DDTHH:MM:SSZ``).""" + return datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ") + + +def safe_get(data: dict, *keys: str, default: Any = None) -> Any: + """ + Safely traverse a nested dictionary without raising ``KeyError``. + + Stops early and returns *default* whenever an intermediate key is missing + or the traversal hits a non-dict value. + + Args: + data: The root dictionary to traverse. + *keys: Sequence of keys forming the lookup path. + default: Value to return when any key is absent. Defaults to ``None``. + + Returns: + The value at the end of the key path, or *default*. + + Example:: + + safe_get(record, "hashes", "sha256") # → record["hashes"]["sha256"] + safe_get(record, "missing", "key") # → None + """ + current = data + for key in keys: + if isinstance(current, dict): + current = current.get(key) + else: + return default + if current is None: + return default + return current diff --git a/external-import/usta/src/main.py b/external-import/usta/src/main.py new file mode 100644 index 00000000000..04f56c8f73d --- /dev/null +++ b/external-import/usta/src/main.py @@ -0,0 +1,23 @@ +""" +USTA OpenCTI External Import Connector - Entry Point. + +This is the main entry point for the connector. It initializes +the Pydantic settings, the OpenCTI helper, and starts the connector. +""" + +import sys +import traceback + +from connector import ConnectorSettings, UstaConnector +from pycti import OpenCTIConnectorHelper + +if __name__ == "__main__": + try: + settings = ConnectorSettings() + helper = OpenCTIConnectorHelper(config=settings.to_helper_config()) + + connector = UstaConnector(config=settings, helper=helper) + connector.run() + except Exception: # pylint: disable=broad-exception-caught + traceback.print_exc() + sys.exit(1) diff --git a/external-import/usta/src/requirements.txt b/external-import/usta/src/requirements.txt new file mode 100644 index 00000000000..a0e8cccd621 --- /dev/null +++ b/external-import/usta/src/requirements.txt @@ -0,0 +1,7 @@ +pycti==7.260515.0 +pydantic>=2.8.2,<3 +pydantic_settings>=2.9.1,<3 +stix2>=3.0.0,<4.0.0 +requests>=2.31.0,<=2.33.0 +tenacity>=8.2.0,<10.0.0 +limiter>=0.5.0,<1.0.0 diff --git a/external-import/usta/src/usta_client/__init__.py b/external-import/usta/src/usta_client/__init__.py new file mode 100644 index 00000000000..b7b99087855 --- /dev/null +++ b/external-import/usta/src/usta_client/__init__.py @@ -0,0 +1,5 @@ +"""USTA API client package.""" + +from .api_client import UstaClient, UstaClientError + +__all__ = ["UstaClient", "UstaClientError"] diff --git a/external-import/usta/src/usta_client/api_client.py b/external-import/usta/src/usta_client/api_client.py new file mode 100644 index 00000000000..e05ba9daefd --- /dev/null +++ b/external-import/usta/src/usta_client/api_client.py @@ -0,0 +1,440 @@ +""" +USTA API client. + +Handles communication with all six USTA Threat Stream v4 endpoints: + - .../security-intelligence/ioc/malicious-urls (cursor-based pagination) + - .../security-intelligence/ioc/phishing-sites (page-based pagination) + - .../security-intelligence/ioc/malware-hashes (cursor-based pagination) + - .../security-intelligence/account-takeover-prevention/compromised-credentials-tickets (page-based, order param) + - .../fraud-intelligence/credit-card-tickets (page-based, ordering param) + - .../deep-sight-tickets (page-based pagination) + +Implements rate limiting (via limiter) and retry logic (via tenacity) +as prescribed by the OpenCTI connector specification. +""" + +from __future__ import annotations + +from typing import Any, Generator +from urllib.parse import urljoin + +import requests +from limiter import Limiter +from pycti import OpenCTIConnectorHelper +from tenacity import ( + retry, + retry_if_exception, + stop_after_attempt, + wait_exponential_jitter, +) + + +def _is_retryable_error(exc: BaseException) -> bool: + """Return True only for transient errors worth retrying (timeouts, 429, 5xx).""" + if isinstance( + exc, (requests.exceptions.ConnectionError, requests.exceptions.Timeout) + ): + return True + if isinstance(exc, requests.exceptions.HTTPError): + response = exc.response + return response is not None and ( + response.status_code == 429 or response.status_code >= 500 + ) + return False + + +class UstaClientError(Exception): + """Raised when the USTA API returns an unexpected error.""" + + +class UstaClient: + """ + Client for the USTA Threat Stream v4 Security Intelligence API. + + Supports automatic pagination across all six IOC / ticket endpoint families. + """ + + API_PREFIX = "/api/threat-stream/v4" + API_PREFIX_IOC = f"{API_PREFIX}/security-intelligence/ioc" + API_PREFIX_ATP = f"{API_PREFIX}/security-intelligence/account-takeover-prevention" + API_PREFIX_FRAUD = f"{API_PREFIX}/fraud-intelligence" + + ENDPOINT_MALICIOUS_URLS = f"{API_PREFIX_IOC}/malicious-urls" + ENDPOINT_PHISHING_SITES = f"{API_PREFIX_IOC}/phishing-sites" + ENDPOINT_MALWARE_HASHES = f"{API_PREFIX_IOC}/malware-hashes" + ENDPOINT_COMPROMISED_CREDENTIALS = ( + f"{API_PREFIX_ATP}/compromised-credentials-tickets" + ) + ENDPOINT_CREDIT_CARDS = f"{API_PREFIX_FRAUD}/credit-card-tickets" + ENDPOINT_DEEP_SIGHT_TICKETS = f"{API_PREFIX}/deep-sight-tickets" + + def __init__( + self, + helper: OpenCTIConnectorHelper, + base_url: str, + api_key: str, + page_size: int = 100, + ) -> None: + self.helper = helper + self.base_url = str(base_url).rstrip("/") + self.api_key = api_key + self.page_size = page_size + + self.session = requests.Session() + self.session.headers.update( + { + "User-Agent": "USTA-OpenCTI-Integration/1.0", + "Authorization": f"Bearer {self.api_key}", + "Accept": "application/json", + } + ) + + # Rate limiter: 10 requests per second, bucket capacity of 20 + self.rate_limiter = Limiter( + rate=10, + capacity=20, + bucket=b"usta", + ) + + @retry( + stop=stop_after_attempt(5), + wait=wait_exponential_jitter(initial=2, max=120, jitter=2), + retry=retry_if_exception(_is_retryable_error), + ) + def _request(self, url: str, params: dict[str, Any] | None = None) -> dict: + """ + Execute a single HTTP GET request with retry and rate limiting. + + Args: + url: Full URL or path relative to base_url. + params: Optional query parameters. + + Returns: + Parsed JSON response as a dict. + + Raises: + UstaClientError: On all permanent errors (401, 403, and non-retryable 4xx). + requests.exceptions.HTTPError: On transient errors (429, 5xx) — consumed + internally by the tenacity retry decorator. + """ + # Build absolute URL if a relative path was given + if url.startswith("http://") or url.startswith("https://"): + full_url = url + else: + full_url = urljoin(self.base_url, url) + + with self.rate_limiter: + self.helper.connector_logger.debug( + "[USTA_CLIENT] Requesting", + {"url": full_url, "params": params}, + ) + response = self.session.get(full_url, params=params, timeout=60) + + if response.status_code == 401: + raise UstaClientError( + f"Authentication failed (HTTP 401) for {full_url}. " + "Verify your USTA_API_KEY." + ) + if response.status_code == 403: + raise UstaClientError( + f"Access denied (HTTP 403) for {full_url}. " + "Your API key may lack the required permissions for this endpoint." + ) + + if not response.ok: + self.helper.connector_logger.warning( + "[USTA_CLIENT] Unexpected HTTP error response", + { + "url": full_url, + "http_status": response.status_code, + "response_preview": response.text[:500], + }, + ) + + try: + response.raise_for_status() + except requests.exceptions.HTTPError as exc: + if _is_retryable_error(exc): + raise # Let the tenacity retry decorator handle transient errors + raise UstaClientError( + f"Permanent HTTP error {response.status_code} for {full_url}: " + f"{response.text[:200]}" + ) from exc + try: + return response.json() + except ValueError as exc: + self.helper.connector_logger.warning( + "[USTA_CLIENT] Failed to decode JSON response", + { + "url": full_url, + "http_status": response.status_code, + "content_type": response.headers.get("Content-Type"), + "response_preview": response.text[:500], + }, + ) + raise UstaClientError( + f"Non-JSON response from {full_url} (status {response.status_code})" + ) from exc + + # ------------------------------------------------------------------ + # Cursor-based pagination (malicious-urls and malware-hashes) + # ------------------------------------------------------------------ + + def _fetch_cursor_paginated( + self, + endpoint: str, + start: str, + ordering: str = "created", + ) -> Generator[list[dict], None, None]: + """ + Generator that yields pages (list of result dicts) from a + cursor-paginated USTA endpoint. + + The API returns: + { + "cursor": "", + "next": "", + "results": [...] + } + + Args: + endpoint: Relative API path (e.g. /api/.../malicious-urls). + start: ISO-8601 datetime string for the start filter. + ordering: Field to order by (always 'created'). + + Yields: + Lists of result dictionaries per page. + """ + params: dict[str, Any] = { + "ordering": ordering, + "start": start, + "size": self.page_size, + "format": "json", + } + + url = endpoint + page_num = 0 + + while True: + data = self._request(url, params=params) + + page_num += 1 + results = data.get("results", []) + self.helper.connector_logger.info( + "[USTA_CLIENT] Cursor-paginated page received", + { + "endpoint": endpoint, + "page": page_num, + "results_in_page": len(results), + "has_next": bool(data.get("next")), + }, + ) + + if results: + yield results + + next_url = data.get("next") + if not next_url or not results: + self.helper.connector_logger.debug( + "[USTA_CLIENT] Cursor pagination exhausted", + {"endpoint": endpoint, "total_pages": page_num}, + ) + break + + url = next_url + if params: + params = {} + + # ------------------------------------------------------------------ + # Page-based pagination (phishing-sites) + # ------------------------------------------------------------------ + + def _fetch_page_paginated( + self, + endpoint: str, + start: str | None = None, + ordering: str = "created", + order_param_name: str = "ordering", + ) -> Generator[list[dict], None, None]: + """ + Generator that yields pages from a standard page-number-paginated + USTA endpoint. + + The API returns: + { + "count": N, + "next": "", + "previous": "", + "results": [...] + } + + Args: + endpoint: Relative API path. + start: ISO-8601 datetime string. + ordering: Value for the ordering field (e.g. 'created'). + order_param_name: Query parameter key name. Most endpoints use + 'ordering', but compromised-credentials uses 'order'. + + Yields: + Lists of result dictionaries per page. + """ + params: dict[str, Any] = { + order_param_name: ordering, + "size": self.page_size, + "format": "json", + } + if start: + params["start"] = start + + url = endpoint + page_num = 0 + + while True: + data = self._request(url, params=params) + + page_num += 1 + total_count = data.get("count") + results = data.get("results", []) + self.helper.connector_logger.debug( + "[USTA_CLIENT] Page-paginated page received", + { + "endpoint": endpoint, + "page": page_num, + "results_in_page": len(results), + "total_count": total_count, + "has_next": bool(data.get("next")), + }, + ) + if results: + yield results + + next_url = data.get("next") + if not next_url or not results: + self.helper.connector_logger.debug( + "[USTA_CLIENT] Page pagination exhausted", + { + "endpoint": endpoint, + "total_pages": page_num, + "total_count": total_count, + }, + ) + break + + url = next_url + if params: + params = {} + + # ------------------------------------------------------------------ + # Public high-level methods + # ------------------------------------------------------------------ + + def get_malicious_urls(self, start: str) -> Generator[list[dict], None, None]: + """ + Fetch malicious URL IOCs created since `start`. + + Args: + start: ISO-8601 datetime string (e.g. '2026-01-01T00:00:00Z'). + + Yields: + Pages of malicious URL result dicts. + """ + self.helper.connector_logger.info( + "[USTA_CLIENT] Fetching malicious URLs", + {"start": start, "page_size": self.page_size}, + ) + yield from self._fetch_cursor_paginated( + self.ENDPOINT_MALICIOUS_URLS, start=start + ) + + def get_phishing_sites(self, start: str) -> Generator[list[dict], None, None]: + """ + Fetch phishing site IOCs created since `start`. + + Args: + start: ISO-8601 datetime string. + + Yields: + Pages of phishing site result dicts. + """ + self.helper.connector_logger.info( + "[USTA_CLIENT] Fetching phishing sites", + {"start": start, "page_size": self.page_size}, + ) + yield from self._fetch_page_paginated(self.ENDPOINT_PHISHING_SITES, start=start) + + def get_malware_hashes(self, start: str) -> Generator[list[dict], None, None]: + """ + Fetch malware hash IOCs created since `start`. + + Args: + start: ISO-8601 datetime string. + + Yields: + Pages of malware hash result dicts. + """ + self.helper.connector_logger.info( + "[USTA_CLIENT] Fetching malware hashes", + {"start": start, "page_size": self.page_size}, + ) + yield from self._fetch_cursor_paginated( + self.ENDPOINT_MALWARE_HASHES, start=start + ) + + def get_compromised_credentials( + self, start: str + ) -> Generator[list[dict], None, None]: + """ + Fetch compromised credentials tickets created since `start`. + + NOTE: This endpoint uses the query parameter ``order`` (not + ``ordering``) based on the observed API contract. + + Args: + start: ISO-8601 datetime string. + + Yields: + Pages of compromised credentials ticket dicts. + """ + self.helper.connector_logger.info( + "[USTA_CLIENT] Fetching compromised credentials tickets", + {"start": start, "page_size": self.page_size}, + ) + yield from self._fetch_page_paginated( + self.ENDPOINT_COMPROMISED_CREDENTIALS, + start=start, + order_param_name="order", + ) + + def get_credit_card_tickets(self, start: str) -> Generator[list[dict], None, None]: + """ + Fetch credit card fraud tickets created since `start`. + + Args: + start: ISO-8601 datetime string. + + Yields: + Pages of credit card ticket dicts. + """ + self.helper.connector_logger.info( + "[USTA_CLIENT] Fetching credit card fraud tickets", + {"start": start, "page_size": self.page_size}, + ) + yield from self._fetch_page_paginated(self.ENDPOINT_CREDIT_CARDS, start=start) + + def get_deep_sight_tickets(self, start: str) -> Generator[list[dict], None, None]: + """ + Fetch Deep Sight intelligence tickets created since `start`. + + Args: + start: ISO-8601 datetime string. + + Yields: + Pages of Deep Sight ticket dicts. + """ + self.helper.connector_logger.info( + "[USTA_CLIENT] Fetching Deep Sight tickets", + {"start": start, "page_size": self.page_size}, + ) + yield from self._fetch_page_paginated( + self.ENDPOINT_DEEP_SIGHT_TICKETS, start=start + ) diff --git a/external-import/usta/tests/__init__.py b/external-import/usta/tests/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/external-import/usta/tests/conftest.py b/external-import/usta/tests/conftest.py new file mode 100644 index 00000000000..045d4dc0d7b --- /dev/null +++ b/external-import/usta/tests/conftest.py @@ -0,0 +1,252 @@ +"""Shared pytest fixtures for USTA connector tests.""" + +# pylint: disable=missing-function-docstring + +from __future__ import annotations + +import os +import sys + +sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "src")) + +from unittest.mock import MagicMock + +import pytest + + +@pytest.fixture +def mock_helper(): + """Create a mock OpenCTIConnectorHelper.""" + helper = MagicMock() + helper.connect_id = "test-connector-id" + helper.connect_name = "USTA Test" + helper.connector_logger = MagicMock() + helper.get_state = MagicMock(return_value=None) + helper.set_state = MagicMock() + helper.api = MagicMock() + helper.api.work.initiate_work = MagicMock(return_value="test-work-id") + helper.api.work.to_processed = MagicMock() + helper.stix2_create_bundle = MagicMock( + return_value='{"type":"bundle","objects":[]}' + ) + helper.send_stix2_bundle = MagicMock(return_value=["bundle-1"]) + helper.schedule_process = MagicMock() + return helper + + +# ---- Malicious URL fixtures ---- + + +@pytest.fixture +def sample_malicious_url_record(): + return { + "id": "12345678-1234-1234-1234-123456789012", + "url": "127.0.0.1:10798", + "host": "127.0.0.1", + "is_domain": False, + "ip_addresses": ["127.0.0.1"], + "tags": ["Ghost RAT"], + "valid_from": "2026-01-01T01:05:03.000Z", + "valid_until": "2027-01-01T01:05:03.000Z", + "created": "2026-01-01T02:34:54.520Z", + } + + +# ---- Phishing Site fixtures ---- + + +@pytest.fixture +def sample_phishing_site_record(): + return { + "id": 42936, + "url": "http://phishing.example.com", + "host": "", + "is_domain": True, + "ip_addresses": [], + "country": "", + "created": "2015-06-06T08:36:12.950000Z", + } + + +# ---- Malware Hash fixtures ---- + + +@pytest.fixture +def sample_malware_hash_record(): + return { + "id": "12341234-1234-1234-1234-123412341234", + "hashes": { + "md5": "1234567890abcdef1234567890abcdef", + "sha1": "1234567890abcdef1234567890abcdef12345678", + "sha256": "1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", + }, + "tags": ["CustomMalwareTag"], + "valid_from": "2026-01-05T06:33:19.637Z", + "valid_until": "2027-01-05T06:33:19.637Z", + "created": "2026-01-05T06:20:29.401Z", + } + + +# ---- Compromised Credential fixtures ---- + + +@pytest.fixture +def sample_compromised_credential_record(): + return { + "id": 12345678, + "status": "open", + "created": "2026-01-15T13:40:48.983257Z", + "content_type": "compromised-credentials", + "company": {"id": 1, "name": "API Integration Demo Company"}, + "content": { + "username": "username@domain.com", + "password": "t3stPassw0rd!", + "password_complexity": {"score": "medium", "length": 8}, + "url": "https://login.domain.com/testing", + "source": "malware", + "is_corporate": True, + "victim_detail": { + "victim_uid": "12345678-1234-1234-1234-123456123456", + "username": "username", + "phone_number": "", + "country": "Zambia", + "ip": "10.0.0.1", + "computer_name": "DESKTOP-TEST", + "victim_os": "Windows 11", + "memory": "16 GB", + "cpu": "Intel(R) Core(TM) i9-0000X CPU @ 0.00GHz", + "gpu": "", + "infection_date": "2025-01-15 12:34:00", + "malware": "TheMalware", + }, + }, + } + + +@pytest.fixture +def sample_compromised_credential_no_victim(): + return { + "id": 12345678, + "status": "open", + "created": "2026-01-19T09:46:44.942396Z", + "content_type": "compromised-credentials", + "company": {"id": 1, "name": "API Integration Demo Company"}, + "content": { + "username": "username", + "password": "thepass", + "password_complexity": {"score": "weak", "length": 7}, + "url": "http://domain.com", + "source": "phishing_site", + "is_corporate": True, + "victim_detail": None, + }, + } + + +# ---- Credit Card fixtures ---- + + +@pytest.fixture +def sample_credit_card_record(): + return { + "id": 123456, + "status": "open", + "created": "2019-03-08T10:17:46.865262Z", + "content_type": "credit-card", + "company": {"id": 1, "name": "API Integration Demo Company"}, + "content": {"number": "4242424242424242", "expiration_date": "2026-03-01"}, + } + + +# ---- Deep Sight fixtures ---- + + +@pytest.fixture +def sample_deep_sight_ticket_record(): + return { + "id": 12345678, + "status": "open", + "status_timestamp": "2026-03-05T07:30:03.581287Z", + "created": "2026-03-05T07:30:03.581281Z", + "content_type": "deep-sight", + "company": {"id": 1, "name": "API Integration Demo Company"}, + "content": { + "title": "[REGIONAL] Some Ransomware Attack", + "threat_actors": [ + { + "nickname": "CoolGroupName", + "real_name": "", + "country": "us", + "motivations": ["ideological"], + } + ], + "targets": [ + { + "name": "SomeOrganization", + "risk_score": "medium", + "analyst_notes": "

SomeOrganization began its operations in 2026.

", + } + ], + "detected_platforms": ["sigint"], + "analyst_notes": "

CoolGroupName ransomware group has targeted SomeOrganization.

", + "tlp": "amber", + "labels": ["ransomware"], + "report": None, + "detected_at": "2026-03-05T07:28:00Z", + "markers": ["regional"], + }, + } + + +@pytest.fixture +def sample_deep_sight_ticket_with_report(): + return { + "id": 12345678, + "status": "open", + "created": "2026-02-25T08:36:29.515506Z", + "content_type": "deep-sight", + "company": {"id": 1, "name": "API Integration Demo Company"}, + "content": { + "title": "[REGIONAL] Bank Account Access Method", + "threat_actors": [ + { + "nickname": "MoneyMan", + "real_name": "", + "country": "xx", + "motivations": ["money"], + } + ], + "targets": [], + "analyst_notes": "

A bank account blocking method was found.

", + "tlp": "red", + "labels": [], + "report": ( + "https://cdn.example.com/attachments/Report_fdUMjgkC.pdf" + "?AWSAccessKeyId=EXO&Signature=xxx&Expires=1773736716" + ), + "detected_at": "2026-02-25T00:00:00Z", + "markers": ["regional", "critical"], + }, + } + + +@pytest.fixture +def sample_deep_sight_ticket_no_actors_no_targets(): + return { + "id": 12345678, + "status": "open", + "created": "2026-02-12T06:46:07.630858Z", + "content_type": "deep-sight", + "company": {"id": 1, "name": "API Integration Demo Company"}, + "content": { + "title": "[REGIONAL: CRITICAL] Investment Fraud Report", + "threat_actors": [], + "targets": [], + "analyst_notes": "

Investment fraud analysis report.

", + "tlp": "amber", + "labels": [], + "report": None, + "detected_at": "2026-02-12T06:38:00Z", + "markers": [], + }, + } diff --git a/external-import/usta/tests/test-requirements.txt b/external-import/usta/tests/test-requirements.txt new file mode 100644 index 00000000000..a07d63810be --- /dev/null +++ b/external-import/usta/tests/test-requirements.txt @@ -0,0 +1,4 @@ +-r ../src/requirements.txt +pytest==9.0.3 +pytest-cov>=4.1.0,<6.0.0 +pytest-mock>=3.12.0,<4.0.0 \ No newline at end of file diff --git a/external-import/usta/tests/test_client/__init__.py b/external-import/usta/tests/test_client/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/external-import/usta/tests/test_client/test_api_client.py b/external-import/usta/tests/test_client/test_api_client.py new file mode 100644 index 00000000000..1680708fbda --- /dev/null +++ b/external-import/usta/tests/test_client/test_api_client.py @@ -0,0 +1,208 @@ +"""Unit tests for the USTA API client — 100 % coverage.""" + +# pylint: disable=missing-function-docstring,missing-class-docstring,redefined-outer-name,protected-access + +from __future__ import annotations + +from unittest.mock import MagicMock, patch + +import pytest +from usta_client.api_client import UstaClient, UstaClientError + + +@pytest.fixture +def client(mock_helper): + """Create an UstaClient with mocked session and rate limiter.""" + with patch("usta_client.api_client.Limiter"): + c = UstaClient( + helper=mock_helper, + base_url="https://usta.prodaft.com", + api_key="test-key", + page_size=10, + ) + c.session = MagicMock() + c.rate_limiter = MagicMock() + c.rate_limiter.__enter__ = MagicMock(return_value=None) + c.rate_limiter.__exit__ = MagicMock(return_value=False) + return c + + +# ===================================================================== +# _request +# ===================================================================== + + +class TestRequest: + def test_success_absolute_url(self, client): + resp = MagicMock() + resp.status_code = 200 + resp.json.return_value = {"results": []} + client.session.get.return_value = resp + result = client._request("https://other.com/api", params={"a": 1}) + assert result == {"results": []} + client.session.get.assert_called_once_with( + "https://other.com/api", params={"a": 1}, timeout=60 + ) + + def test_success_relative_url(self, client): + resp = MagicMock() + resp.status_code = 200 + resp.json.return_value = {"ok": True} + client.session.get.return_value = resp + result = client._request("/api/test") + assert result == {"ok": True} + call_url = client.session.get.call_args[0][0] + assert call_url == "https://usta.prodaft.com/api/test" + + def test_401_raises_client_error(self, client): + resp = MagicMock() + resp.status_code = 401 + client.session.get.return_value = resp + with pytest.raises(UstaClientError, match="Authentication failed"): + client._request("/api/test") + + def test_403_raises_client_error(self, client): + resp = MagicMock() + resp.status_code = 403 + client.session.get.return_value = resp + with pytest.raises(UstaClientError, match="Access denied"): + client._request("/api/test") + + +# ===================================================================== +# Cursor-based pagination +# ===================================================================== + + +class TestCursorPagination: + def test_single_page(self, client): + client._request = MagicMock( + return_value={"results": [{"id": 1}], "next": None, "cursor": "c1"} + ) + pages = list(client._fetch_cursor_paginated("/ep", start="2026-01-01")) + assert pages == [[{"id": 1}]] + assert client._request.call_count == 1 + + def test_multi_page(self, client): + client._request = MagicMock( + side_effect=[ + {"results": [{"id": 1}], "next": "https://next", "cursor": "c1"}, + {"results": [{"id": 2}], "next": None, "cursor": "c2"}, + ] + ) + pages = list(client._fetch_cursor_paginated("/ep", start="2026-01-01")) + assert len(pages) == 2 + + def test_empty_results(self, client): + client._request = MagicMock(return_value={"results": [], "next": None}) + pages = list(client._fetch_cursor_paginated("/ep", start="2026-01-01")) + assert not pages + + def test_next_url_used_on_second_page(self, client): + client._request = MagicMock( + side_effect=[ + {"results": [{"id": 1}], "next": "https://page2"}, + {"results": [], "next": None}, + ] + ) + list(client._fetch_cursor_paginated("/ep", start="s")) + # Second call should use the next URL without params + second_call = client._request.call_args_list[1] + assert second_call[0][0] == "https://page2" + + +# ===================================================================== +# Page-based pagination +# ===================================================================== + + +class TestPagePagination: + def test_single_page(self, client): + client._request = MagicMock( + return_value={"count": 1, "results": [{"id": 1}], "next": None} + ) + pages = list(client._fetch_page_paginated("/ep", start="s")) + assert pages == [[{"id": 1}]] + + def test_multi_page(self, client): + client._request = MagicMock( + side_effect=[ + {"count": 2, "results": [{"id": 1}], "next": "https://p2"}, + {"count": 2, "results": [{"id": 2}], "next": None}, + ] + ) + pages = list(client._fetch_page_paginated("/ep", start="s")) + assert len(pages) == 2 + + def test_empty(self, client): + client._request = MagicMock( + return_value={"count": 0, "results": [], "next": None} + ) + assert not list(client._fetch_page_paginated("/ep")) + + def test_custom_order_param(self, client): + client._request = MagicMock(return_value={"results": [], "next": None}) + list(client._fetch_page_paginated("/ep", start="s", order_param_name="order")) + params = client._request.call_args[1]["params"] + assert "order" in params + assert "ordering" not in params + + def test_no_start(self, client): + client._request = MagicMock(return_value={"results": [], "next": None}) + list(client._fetch_page_paginated("/ep")) + params = client._request.call_args[1]["params"] + assert "start" not in params + + +# ===================================================================== +# Public methods (thin wrappers) +# ===================================================================== + + +class TestPublicMethods: + def _mock_pagination(self, client, method_name): + """Patch the underlying paginator to return one page.""" + results = [[{"id": 1}]] + if "cursor" in method_name or method_name in ( + "get_malicious_urls", + "get_malware_hashes", + ): + client._fetch_cursor_paginated = MagicMock(return_value=iter(results)) + else: + client._fetch_page_paginated = MagicMock(return_value=iter(results)) + + def test_get_malicious_urls(self, client): + client._fetch_cursor_paginated = MagicMock(return_value=iter([[{"id": 1}]])) + pages = list(client.get_malicious_urls("2026-01-01")) + assert len(pages) == 1 + + def test_get_phishing_sites(self, client): + client._fetch_page_paginated = MagicMock(return_value=iter([[{"id": 1}]])) + pages = list(client.get_phishing_sites("2026-01-01")) + assert len(pages) == 1 + + def test_get_malware_hashes(self, client): + client._fetch_cursor_paginated = MagicMock(return_value=iter([[{"id": 1}]])) + pages = list(client.get_malware_hashes("2026-01-01")) + assert len(pages) == 1 + + def test_get_compromised_credentials(self, client): + client._fetch_page_paginated = MagicMock(return_value=iter([[{"id": 1}]])) + pages = list(client.get_compromised_credentials("2026-01-01")) + assert len(pages) == 1 + # Verify order_param_name="order" is passed + call_kwargs = client._fetch_page_paginated.call_args[1] + assert call_kwargs["order_param_name"] == "order" + + def test_get_credit_card_tickets(self, client): + client._fetch_page_paginated = MagicMock(return_value=iter([[{"id": 1}]])) + pages = list(client.get_credit_card_tickets("2026-01-01")) + assert len(pages) == 1 + + def test_get_deep_sight_tickets(self, client): + client._fetch_page_paginated = MagicMock(return_value=iter([[{"id": 1}]])) + pages = list(client.get_deep_sight_tickets("2026-01-01")) + assert len(pages) == 1 + # Must use page-based pagination with ordering=created + call_kwargs = client._fetch_page_paginated.call_args + assert call_kwargs[0][0] == client.ENDPOINT_DEEP_SIGHT_TICKETS diff --git a/external-import/usta/tests/test_connector/__init__.py b/external-import/usta/tests/test_connector/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/external-import/usta/tests/test_connector/test_connector.py b/external-import/usta/tests/test_connector/test_connector.py new file mode 100644 index 00000000000..790e0625895 --- /dev/null +++ b/external-import/usta/tests/test_connector/test_connector.py @@ -0,0 +1,620 @@ +"""Unit tests for the USTA connector orchestrator — 100 % coverage.""" + +# pylint: disable=missing-function-docstring,missing-class-docstring +# pylint: disable=protected-access,import-outside-toplevel,too-few-public-methods + +from __future__ import annotations + +from datetime import timedelta +from unittest.mock import MagicMock + +import pytest +from connector.connector import UstaConnector +from usta_client import UstaClientError + +# ---- Helpers ---- + + +def _make_config(**overrides): + """Build a minimal mock ConnectorSettings.""" + cfg = MagicMock() + cfg.connector.name = "USTA Test" + cfg.connector.duration_period = timedelta(hours=1) + usta_cfg = MagicMock() + usta_cfg.api_base_url = "https://usta.prodaft.com" + usta_cfg.api_key = "key" + usta_cfg.page_size = 10 + usta_cfg.tlp_level = "amber" + usta_cfg.confidence_level = 80 + usta_cfg.import_start_date = timedelta(days=7) + usta_cfg.import_malicious_urls = True + usta_cfg.import_phishing_sites = True + usta_cfg.import_malware_hashes = True + usta_cfg.import_compromised_credentials = True + usta_cfg.import_credit_cards = True + usta_cfg.import_deep_sight_tickets = True + for k, v in overrides.items(): + setattr(usta_cfg, k, v) + cfg.usta = usta_cfg + return cfg + + +def _make_connector(mock_helper, **config_overrides): + """Instantiate connector with mocks, bypassing real client/converter init.""" + cfg = _make_config(**config_overrides) + conn = UstaConnector.__new__(UstaConnector) + conn.config = cfg + conn.helper = mock_helper + conn.work_id = None + conn.client = MagicMock() + conn.converter = MagicMock() + conn.converter.author = MagicMock() + conn.converter.tlp_marking = MagicMock() + return conn + + +# ===================================================================== +# State helpers +# ===================================================================== + + +class TestStateHelpers: + def test_get_state_none(self, mock_helper): + conn = _make_connector(mock_helper) + mock_helper.get_state.return_value = None + assert conn._get_state() == {} + + def test_get_state_existing(self, mock_helper): + conn = _make_connector(mock_helper) + mock_helper.get_state.return_value = {"cursor": "abc"} + assert conn._get_state() == {"cursor": "abc"} + + def test_compute_default_start(self, mock_helper): + conn = _make_connector(mock_helper) + result = conn._compute_default_start() + assert result.endswith("Z") + + def test_get_start_for_feed_with_cursor(self, mock_helper): + conn = _make_connector(mock_helper) + assert ( + conn._get_start_for_feed({"k": "2026-01-01T00:00:00Z"}, "k") + == "2026-01-01T00:00:00Z" + ) + + def test_get_start_for_feed_without_cursor(self, mock_helper): + conn = _make_connector(mock_helper) + result = conn._get_start_for_feed({}, "missing_key") + assert result.endswith("Z") + + +# ===================================================================== +# Work management +# ===================================================================== + + +class TestWorkManagement: + def test_initiate_work(self, mock_helper): + conn = _make_connector(mock_helper) + wid = conn._initiate_work("test job") + assert wid == "test-work-id" + assert conn.work_id == "test-work-id" + + def test_complete_work(self, mock_helper): + conn = _make_connector(mock_helper) + conn.work_id = "w1" + conn._complete_work("done") + mock_helper.api.work.to_processed.assert_called_once_with( + "w1", "done", in_error=False + ) + assert conn.work_id is None + + def test_complete_work_in_error(self, mock_helper): + conn = _make_connector(mock_helper) + conn.work_id = "w1" + conn._complete_work("failed", in_error=True) + mock_helper.api.work.to_processed.assert_called_once_with( + "w1", "failed", in_error=True + ) + assert conn.work_id is None + + def test_complete_work_no_work_id(self, mock_helper): + conn = _make_connector(mock_helper) + conn.work_id = None + conn._complete_work("done") + mock_helper.api.work.to_processed.assert_not_called() + + +# ===================================================================== +# Bundle sending +# ===================================================================== + + +class TestSendStixObjects: + def test_empty_list(self, mock_helper): + conn = _make_connector(mock_helper) + assert conn._send_stix_objects([], "w1", "Test") == 0 + + def test_single_batch(self, mock_helper): + conn = _make_connector(mock_helper) + objs = [MagicMock()] * 10 + sent = conn._send_stix_objects(objs, "w1", "Test") + assert sent == 10 + mock_helper.send_stix2_bundle.assert_called_once() + + def test_multiple_batches(self, mock_helper): + conn = _make_connector(mock_helper) + conn.BUNDLE_BATCH_SIZE = 3 + objs = [MagicMock()] * 7 + sent = conn._send_stix_objects(objs, "w1", "Test") + assert sent == 7 + assert mock_helper.send_stix2_bundle.call_count == 3 # 3+3+1 + + +# ===================================================================== +# Per-feed collectors +# ===================================================================== + + +class TestCollectors: + def _setup_client_pages(self, conn, method_name, pages): + getattr(conn.client, method_name).return_value = iter(pages) + + def test_collect_malicious_urls(self, mock_helper): + conn = _make_connector(mock_helper) + conn.converter.convert_malicious_url.return_value = [MagicMock()] + self._setup_client_pages( + conn, + "get_malicious_urls", + [[{"id": "1", "created": "2026-01-01T00:00:00Z"}]], + ) + objs, last = conn._collect_malicious_urls("2026-01-01T00:00:00Z") + assert len(objs) == 1 + assert last == "2026-01-01T00:00:00Z" + + def test_collect_malicious_urls_convert_error(self, mock_helper): + conn = _make_connector(mock_helper) + conn.converter.convert_malicious_url.side_effect = ValueError("bad") + self._setup_client_pages( + conn, "get_malicious_urls", [[{"id": "1", "created": "t"}]] + ) + objs, _ = conn._collect_malicious_urls("t") + assert objs == [] + + def test_collect_phishing_sites(self, mock_helper): + conn = _make_connector(mock_helper) + conn.converter.convert_phishing_site.return_value = [MagicMock()] + self._setup_client_pages( + conn, "get_phishing_sites", [[{"id": "1", "created": "t"}]] + ) + objs, _ = conn._collect_phishing_sites("t") + assert len(objs) == 1 + + def test_collect_phishing_sites_convert_error(self, mock_helper): + conn = _make_connector(mock_helper) + conn.converter.convert_phishing_site.side_effect = ValueError("bad") + self._setup_client_pages( + conn, "get_phishing_sites", [[{"id": "1", "created": "t"}]] + ) + objs, _ = conn._collect_phishing_sites("t") + assert objs == [] + + def test_collect_malware_hashes(self, mock_helper): + conn = _make_connector(mock_helper) + conn.converter.convert_malware_hash.return_value = [MagicMock()] + self._setup_client_pages( + conn, "get_malware_hashes", [[{"id": "1", "created": "t"}]] + ) + objs, _ = conn._collect_malware_hashes("t") + assert len(objs) == 1 + + def test_collect_malware_hashes_convert_error(self, mock_helper): + conn = _make_connector(mock_helper) + conn.converter.convert_malware_hash.side_effect = ValueError("bad") + self._setup_client_pages( + conn, "get_malware_hashes", [[{"id": "1", "created": "t"}]] + ) + objs, _ = conn._collect_malware_hashes("t") + assert objs == [] + + def test_collect_compromised_credentials(self, mock_helper): + conn = _make_connector(mock_helper) + conn.converter.convert_compromised_credential.return_value = [MagicMock()] + self._setup_client_pages( + conn, "get_compromised_credentials", [[{"id": "1", "created": "t"}]] + ) + objs, _ = conn._collect_compromised_credentials("t") + assert len(objs) == 1 + + def test_collect_compromised_credentials_convert_error(self, mock_helper): + conn = _make_connector(mock_helper) + conn.converter.convert_compromised_credential.side_effect = ValueError("bad") + self._setup_client_pages( + conn, "get_compromised_credentials", [[{"id": "1", "created": "t"}]] + ) + objs, _ = conn._collect_compromised_credentials("t") + assert objs == [] + + def test_collect_credit_card_tickets(self, mock_helper): + conn = _make_connector(mock_helper) + conn.converter.convert_credit_card_ticket.return_value = [MagicMock()] + self._setup_client_pages( + conn, "get_credit_card_tickets", [[{"id": "1", "created": "t"}]] + ) + objs, _ = conn._collect_credit_card_tickets("t") + assert len(objs) == 1 + + def test_collect_credit_card_tickets_convert_error(self, mock_helper): + conn = _make_connector(mock_helper) + conn.converter.convert_credit_card_ticket.side_effect = ValueError("bad") + self._setup_client_pages( + conn, "get_credit_card_tickets", [[{"id": "1", "created": "t"}]] + ) + objs, _ = conn._collect_credit_card_tickets("t") + assert objs == [] + + def test_collect_no_created_field(self, mock_helper): + """Record without 'created' key → last_created stays None.""" + conn = _make_connector(mock_helper) + conn.converter.convert_malicious_url.return_value = [MagicMock()] + self._setup_client_pages(conn, "get_malicious_urls", [[{"id": "1"}]]) + _, last = conn._collect_malicious_urls("t") + assert last is None + + def test_collect_deep_sight_tickets(self, mock_helper): + conn = _make_connector(mock_helper) + report_obj = MagicMock() + report_obj.id = "report--test-id" + report_obj.type = "report" + conn.converter.convert_deep_sight_ticket.return_value = [report_obj] + self._setup_client_pages( + conn, + "get_deep_sight_tickets", + [ + [ + { + "id": 1, + "created": "2026-03-01T00:00:00Z", + "content": {"report": None}, + } + ] + ], + ) + objs, last = conn._collect_deep_sight_tickets("2026-01-01T00:00:00Z") + assert len(objs) == 1 + assert last == "2026-03-01T00:00:00Z" + + def test_collect_deep_sight_tickets_downloads_pdf_inline(self, mock_helper): + """When a record has a report URL, the PDF is downloaded and embedded in the record + before conversion so that convert_deep_sight_ticket receives _pdf_data/_pdf_filename. + """ + from unittest.mock import patch + + conn = _make_connector(mock_helper) + report_obj = MagicMock() + report_obj.id = "report--abc" + report_obj.type = "report" + conn.converter.convert_deep_sight_ticket.return_value = [report_obj] + url = "https://cdn.example.com/attachments/Report_test.pdf?AWSKey=x&Expires=999" + self._setup_client_pages( + conn, + "get_deep_sight_tickets", + [ + [ + { + "id": 1, + "created": "2026-03-01T00:00:00Z", + "content": {"report": url}, + } + ] + ], + ) + with patch("connector.connector.requests") as mock_requests: + mock_resp = MagicMock() + mock_resp.iter_content.return_value = [b"%PDF-1.4 test"] + mock_resp.raise_for_status = MagicMock() + mock_resp.__enter__ = MagicMock(return_value=mock_resp) + mock_resp.__exit__ = MagicMock(return_value=False) + mock_requests.get.return_value = mock_resp + conn._collect_deep_sight_tickets("t") + # The converter must have been called with _pdf_data/_pdf_filename injected + call_record = conn.converter.convert_deep_sight_ticket.call_args[0][0] + assert call_record.get("_pdf_data") == b"%PDF-1.4 test" + assert call_record.get("_pdf_filename", "").endswith(".pdf") + + def test_collect_deep_sight_tickets_pdf_download_failure_continues( + self, mock_helper + ): + """A PDF download failure logs a warning but does not abort record conversion.""" + from unittest.mock import patch + + conn = _make_connector(mock_helper) + report_obj = MagicMock() + report_obj.id = "report--abc" + report_obj.type = "report" + conn.converter.convert_deep_sight_ticket.return_value = [report_obj] + url = "https://cdn.example.com/attachments/Report_expired.pdf" + self._setup_client_pages( + conn, + "get_deep_sight_tickets", + [ + [ + { + "id": 1, + "created": "2026-03-01T00:00:00Z", + "content": {"report": url}, + } + ] + ], + ) + with patch("connector.connector.requests") as mock_requests: + mock_requests.get.side_effect = Exception("connection timeout") + objs, _ = conn._collect_deep_sight_tickets("t") + # Record still converted — just without _pdf_data + assert len(objs) == 1 + mock_helper.connector_logger.warning.assert_called() + + def test_collect_deep_sight_tickets_convert_error(self, mock_helper): + conn = _make_connector(mock_helper) + conn.converter.convert_deep_sight_ticket.side_effect = ValueError("bad") + self._setup_client_pages( + conn, "get_deep_sight_tickets", [[{"id": 1, "created": "t", "content": {}}]] + ) + objs, _ = conn._collect_deep_sight_tickets("t") + assert objs == [] + + +# ===================================================================== +# process_message — integration-level +# ===================================================================== + + +class TestProcessMessage: + def test_full_run_all_feeds_with_data(self, mock_helper): + conn = _make_connector(mock_helper) + mock_helper.get_state.return_value = None + # Each collector returns some objects + for m in ( + "_collect_malicious_urls", + "_collect_phishing_sites", + "_collect_malware_hashes", + "_collect_compromised_credentials", + "_collect_credit_card_tickets", + "_collect_deep_sight_tickets", + ): + setattr( + conn, m, MagicMock(return_value=([MagicMock()], "2026-01-01T00:00:00Z")) + ) + conn._send_stix_objects = MagicMock(return_value=1) + conn.process_message() + assert mock_helper.set_state.called + state_arg = mock_helper.set_state.call_args[0][0] + assert state_arg.get("last_run_with_data") is not None + + def test_full_run_no_data(self, mock_helper): + conn = _make_connector(mock_helper) + for m in ( + "_collect_malicious_urls", + "_collect_phishing_sites", + "_collect_malware_hashes", + "_collect_compromised_credentials", + "_collect_credit_card_tickets", + "_collect_deep_sight_tickets", + ): + setattr(conn, m, MagicMock(return_value=([], None))) + conn.process_message() + state_arg = mock_helper.set_state.call_args[0][0] + assert "last_run_with_data" not in state_arg + + def test_feed_disabled(self, mock_helper): + conn = _make_connector( + mock_helper, + import_malicious_urls=False, + import_phishing_sites=False, + import_malware_hashes=False, + import_compromised_credentials=False, + import_credit_cards=False, + import_deep_sight_tickets=False, + ) + conn.process_message() + # No collectors should have been called + conn.client.get_malicious_urls.assert_not_called() + + def test_usta_client_error_caught(self, mock_helper): + conn = _make_connector( + mock_helper, + import_phishing_sites=False, + import_malware_hashes=False, + import_compromised_credentials=False, + import_credit_cards=False, + ) + conn._collect_malicious_urls = MagicMock(side_effect=UstaClientError("auth")) + conn.process_message() # should not raise + mock_helper.connector_logger.error.assert_called() + + def test_generic_error_caught(self, mock_helper): + conn = _make_connector( + mock_helper, + import_phishing_sites=False, + import_malware_hashes=False, + import_compromised_credentials=False, + import_credit_cards=False, + ) + conn._collect_malicious_urls = MagicMock(side_effect=RuntimeError("boom")) + conn.process_message() # should not raise + + def test_keyboard_interrupt(self, mock_helper): + conn = _make_connector(mock_helper) + mock_helper.get_state.side_effect = KeyboardInterrupt() + with pytest.raises(SystemExit): + conn.process_message() + + def test_unexpected_outer_error(self, mock_helper): + conn = _make_connector(mock_helper) + mock_helper.get_state.side_effect = TypeError("weird") + conn.process_message() # logged, not raised + mock_helper.connector_logger.error.assert_called() + + def test_existing_state_preserved(self, mock_helper): + conn = _make_connector( + mock_helper, + import_malicious_urls=False, + import_phishing_sites=False, + import_malware_hashes=False, + import_compromised_credentials=False, + import_credit_cards=False, + ) + mock_helper.get_state.return_value = {"old_key": "old_val"} + conn.process_message() + state_arg = mock_helper.set_state.call_args[0][0] + assert state_arg["old_key"] == "old_val" + + def test_phishing_client_error(self, mock_helper): + conn = _make_connector( + mock_helper, + import_malicious_urls=False, + import_malware_hashes=False, + import_compromised_credentials=False, + import_credit_cards=False, + ) + conn._collect_phishing_sites = MagicMock(side_effect=UstaClientError("x")) + conn.process_message() + + def test_phishing_generic_error(self, mock_helper): + conn = _make_connector( + mock_helper, + import_malicious_urls=False, + import_malware_hashes=False, + import_compromised_credentials=False, + import_credit_cards=False, + ) + conn._collect_phishing_sites = MagicMock(side_effect=RuntimeError("x")) + conn.process_message() + + def test_hashes_client_error(self, mock_helper): + conn = _make_connector( + mock_helper, + import_malicious_urls=False, + import_phishing_sites=False, + import_compromised_credentials=False, + import_credit_cards=False, + ) + conn._collect_malware_hashes = MagicMock(side_effect=UstaClientError("x")) + conn.process_message() + + def test_hashes_generic_error(self, mock_helper): + conn = _make_connector( + mock_helper, + import_malicious_urls=False, + import_phishing_sites=False, + import_compromised_credentials=False, + import_credit_cards=False, + ) + conn._collect_malware_hashes = MagicMock(side_effect=RuntimeError("x")) + conn.process_message() + + def test_creds_client_error(self, mock_helper): + conn = _make_connector( + mock_helper, + import_malicious_urls=False, + import_phishing_sites=False, + import_malware_hashes=False, + import_credit_cards=False, + ) + conn._collect_compromised_credentials = MagicMock( + side_effect=UstaClientError("x") + ) + conn.process_message() + + def test_creds_generic_error(self, mock_helper): + conn = _make_connector( + mock_helper, + import_malicious_urls=False, + import_phishing_sites=False, + import_malware_hashes=False, + import_credit_cards=False, + ) + conn._collect_compromised_credentials = MagicMock(side_effect=RuntimeError("x")) + conn.process_message() + + def test_cards_client_error(self, mock_helper): + conn = _make_connector( + mock_helper, + import_malicious_urls=False, + import_phishing_sites=False, + import_malware_hashes=False, + import_compromised_credentials=False, + ) + conn._collect_credit_card_tickets = MagicMock(side_effect=UstaClientError("x")) + conn.process_message() + + def test_cards_generic_error(self, mock_helper): + conn = _make_connector( + mock_helper, + import_malicious_urls=False, + import_phishing_sites=False, + import_malware_hashes=False, + import_compromised_credentials=False, + ) + conn._collect_credit_card_tickets = MagicMock(side_effect=RuntimeError("x")) + conn.process_message() + + def test_deep_sight_client_error(self, mock_helper): + conn = _make_connector( + mock_helper, + import_malicious_urls=False, + import_phishing_sites=False, + import_malware_hashes=False, + import_compromised_credentials=False, + import_credit_cards=False, + ) + conn._collect_deep_sight_tickets = MagicMock(side_effect=UstaClientError("x")) + conn.process_message() + + def test_deep_sight_generic_error(self, mock_helper): + conn = _make_connector( + mock_helper, + import_malicious_urls=False, + import_phishing_sites=False, + import_malware_hashes=False, + import_compromised_credentials=False, + import_credit_cards=False, + ) + conn._collect_deep_sight_tickets = MagicMock(side_effect=RuntimeError("x")) + conn.process_message() + + +# ===================================================================== +# _extract_filename_from_url +# ===================================================================== + + +class TestExtractFilenameFromUrl: + def test_standard_cdn_url(self): + url = "https://cdn.example.com/attachments/Report_test.pdf?AWSKey=x&Expires=999" + assert UstaConnector._extract_filename_from_url(url) == "Report_test.pdf" + + def test_url_encoded_filename(self): + url = "https://cdn.example.com/attachments/TR_Rapor%20Final.pdf?foo=bar" + assert UstaConnector._extract_filename_from_url(url) == "TR_Rapor Final.pdf" + + def test_no_pdf_extension_appended(self): + url = "https://cdn.example.com/attachments/somefile" + result = UstaConnector._extract_filename_from_url(url) + assert result.endswith(".pdf") + + def test_empty_path(self): + url = "https://cdn.example.com/" + result = UstaConnector._extract_filename_from_url(url) + assert result.endswith(".pdf") + + +# ===================================================================== +# run() +# ===================================================================== + + +class TestRun: + def test_run_calls_schedule_process(self, mock_helper): + conn = _make_connector(mock_helper) + conn.run() + mock_helper.schedule_process.assert_called_once() diff --git a/external-import/usta/tests/test_connector/test_converter_to_stix.py b/external-import/usta/tests/test_connector/test_converter_to_stix.py new file mode 100644 index 00000000000..70b18bb0e2f --- /dev/null +++ b/external-import/usta/tests/test_connector/test_converter_to_stix.py @@ -0,0 +1,1116 @@ +"""Unit tests for the USTA STIX converter — 100 % branch coverage.""" + +# pylint: disable=missing-function-docstring,missing-class-docstring,too-many-lines +# pylint: disable=protected-access,import-outside-toplevel,unused-argument + +from unittest.mock import MagicMock + +import pytest +from connector.converter_to_stix import ConverterToStix + +# ===================================================================== +# Initialization +# ===================================================================== + + +class TestInit: + def test_author_identity(self, mock_helper): + c = ConverterToStix(mock_helper) + assert c.author.name == "USTA" + assert c.author.identity_class == "organization" + + def test_default_tlp(self, mock_helper): + c = ConverterToStix(mock_helper) + assert "marking-definition" in c.tlp_marking.id + + def test_each_tlp_level(self, mock_helper): + for level in ("clear", "white", "green", "amber", "red"): + c = ConverterToStix(mock_helper, tlp_level=level) + assert c.tlp_marking is not None + + def test_unknown_tlp_falls_back_to_amber(self, mock_helper): + c = ConverterToStix(mock_helper, tlp_level="NONEXISTENT") + assert c.tlp_marking == ConverterToStix.TLP_MARKING_MAP["amber"] + + def test_deterministic_author_id(self, mock_helper): + assert ( + ConverterToStix(mock_helper, author_name="A").author.id + == ConverterToStix(mock_helper, author_name="A").author.id + ) + + +# ===================================================================== +# Static / internal helpers +# ===================================================================== + + +class TestParseDatetime: + def test_none_returns_now(self, mock_helper): + result = ConverterToStix._parse_datetime(None) + assert result.endswith("Z") + + def test_plus_utc_suffix_replaced(self, mock_helper): + assert ( + ConverterToStix._parse_datetime("2026-01-01T00:00:00+00:00") + == "2026-01-01T00:00:00Z" + ) + + def test_normal_passthrough(self, mock_helper): + assert ( + ConverterToStix._parse_datetime("2026-01-01T00:00:00Z") + == "2026-01-01T00:00:00Z" + ) + + +class TestExtractHost: + def test_with_scheme(self): + assert ConverterToStix._extract_host("https://evil.com:443/path") == "evil.com" + + def test_without_scheme(self): + assert ConverterToStix._extract_host("evil.com:443") == "evil.com" + + def test_ip_with_port(self): + assert ConverterToStix._extract_host("1.2.3.4:8080") == "1.2.3.4" + + def test_bare_domain(self): + assert ConverterToStix._extract_host("example.org") == "example.org" + + def test_no_match_with_colon(self): + # Contrived input where regex cannot match but colon exists + assert ConverterToStix._extract_host(":something") == "" + + +class TestIsIp: + def test_valid_ipv4(self): + assert ConverterToStix._is_ip("1.2.3.4") is True + + def test_valid_ipv6(self): + assert ConverterToStix._is_ip("::1") is True + + def test_invalid(self): + assert ConverterToStix._is_ip("not-an-ip") is False + + +class TestIsIpv6: + def test_ipv6(self): + assert ConverterToStix._is_ipv6("2001:db8::1") is True + + def test_ipv4(self): + assert ConverterToStix._is_ipv6("1.2.3.4") is False + + def test_invalid(self): + assert ConverterToStix._is_ipv6("garbage") is False + + +class TestMainObservableType: + def test_domain(self): + assert ( + ConverterToStix._main_observable_type(True, "evil.com", []) == "Domain-Name" + ) + + def test_ip_addresses(self): + assert ( + ConverterToStix._main_observable_type(False, "", ["1.2.3.4"]) == "IPv4-Addr" + ) + + def test_host_ipv4(self): + assert ( + ConverterToStix._main_observable_type(False, "1.2.3.4", []) == "IPv4-Addr" + ) + + def test_host_ipv6(self): + assert ConverterToStix._main_observable_type(False, "::1", []) == "IPv6-Addr" + + def test_host_domain_fallback(self): + assert ( + ConverterToStix._main_observable_type(False, "evil.com", []) + == "Domain-Name" + ) + + def test_nothing(self): + assert ConverterToStix._main_observable_type(False, "", []) == "Url" + + +class TestMaskCardNumber: + def test_standard_16(self): + assert ( + ConverterToStix._mask_card_number("4289691967078106") == "428969******8106" + ) + + def test_short_card(self): + assert ConverterToStix._mask_card_number("12345") == "*****" + + def test_with_spaces_and_dashes(self): + assert ( + ConverterToStix._mask_card_number("4289-6919-6707-8106") + == "428969******8106" + ) + + +# ===================================================================== +# Observable helpers +# ===================================================================== + + +class TestObservableHelpers: + def test_ipv4(self, mock_helper): + c = ConverterToStix(mock_helper) + obs = c._create_ipv4_observable("1.2.3.4") + assert obs.type == "ipv4-addr" + assert obs.value == "1.2.3.4" + + def test_ipv6(self, mock_helper): + c = ConverterToStix(mock_helper) + obs = c._create_ipv6_observable("2001:db8::1") + assert obs.type == "ipv6-addr" + + def test_domain(self, mock_helper): + c = ConverterToStix(mock_helper) + obs = c._create_domain_observable("evil.com") + assert obs.type == "domain-name" + + def test_url(self, mock_helper): + c = ConverterToStix(mock_helper) + obs = c._create_url_observable("https://evil.com") + assert obs.type == "url" + + def test_file_all_hashes(self, mock_helper): + c = ConverterToStix(mock_helper) + obs = c._create_file_observable( + md5="bf92342b0a0c34878bb3ef89b9f18196", + sha1="5b960c29570ea3d8af2a7dde7ddf6672d6a9a024", + sha256="285f7b8f2bbee896cf8a14af480f1f09811bdcd6cd2abff12a0046a0d286f131", + ) + assert obs.type == "file" + assert "MD5" in obs.hashes + + def test_file_only_md5(self, mock_helper): + c = ConverterToStix(mock_helper) + obs = c._create_file_observable(md5="bf92342b0a0c34878bb3ef89b9f18196") + assert "MD5" in obs.hashes + + def test_file_no_hashes_raises(self, mock_helper): + c = ConverterToStix(mock_helper) + with pytest.raises(ValueError): + c._create_file_observable() + + def test_user_account_deterministic(self, mock_helper): + c = ConverterToStix(mock_helper) + a1 = c._create_user_account_observable("user@test.com", "s3cr3t", record_id=42) + a2 = c._create_user_account_observable("user@test.com", "s3cr3t", record_id=42) + assert a1.id == a2.id + assert a1.account_login == "user@test.com" + + def test_user_account_same_record_id_gives_same_id_regardless_of_password( + self, mock_helper + ): + # Password no longer influences the deterministic ID — only record_id does. + c = ConverterToStix(mock_helper) + a1 = c._create_user_account_observable("user@test.com", "pass1", record_id=99) + a2 = c._create_user_account_observable("user@test.com", "pass2", record_id=99) + assert a1.id == a2.id + + def test_user_account_different_record_id_gives_different_id(self, mock_helper): + c = ConverterToStix(mock_helper) + a1 = c._create_user_account_observable("user@test.com", "pass", record_id=1) + a2 = c._create_user_account_observable("user@test.com", "pass", record_id=2) + assert a1.id != a2.id + + def test_user_account_labels_stored_in_custom_property(self, mock_helper): + c = ConverterToStix(mock_helper) + ua = c._create_user_account_observable( + "u@t.com", + "p", + labels=["corporate", "malware"], + ) + assert ua.get("x_opencti_labels") == ["corporate", "malware"] + + def test_user_account_no_labels_omits_custom_property(self, mock_helper): + c = ConverterToStix(mock_helper) + ua = c._create_user_account_observable("u", "p") + assert ua.get("x_opencti_labels") is None + + +# ===================================================================== +# Malicious URL conversion — all branches +# ===================================================================== + + +class TestConvertMaliciousUrl: + def test_ip_based(self, mock_helper, sample_malicious_url_record): + c = ConverterToStix(mock_helper) + result = c.convert_malicious_url(sample_malicious_url_record) + types = {o.type for o in result} + assert {"ipv4-addr", "url", "indicator", "malware", "relationship"} <= types + + def test_empty_url(self, mock_helper): + assert not ConverterToStix(mock_helper).convert_malicious_url({"url": ""}) + + def test_domain_based(self, mock_helper): + record = { + "url": "evil.com:443", + "host": "evil.com", + "is_domain": True, + "ip_addresses": [], + "tags": [], + "valid_from": "2026-01-01T00:00:00Z", + "valid_until": "2027-01-01T00:00:00Z", + } + result = ConverterToStix(mock_helper).convert_malicious_url(record) + types = {o.type for o in result} + assert "domain-name" in types + + def test_ipv6_in_ip_addresses(self, mock_helper): + record = { + "url": "[::1]:80", + "host": "::1", + "is_domain": False, + "ip_addresses": ["2001:db8::1"], + "tags": [], + "valid_from": "2026-01-01T00:00:00Z", + "valid_until": "2027-01-01T00:00:00Z", + } + result = ConverterToStix(mock_helper).convert_malicious_url(record) + types = {o.type for o in result} + assert "ipv6-addr" in types + + def test_host_only_ip_fallback(self, mock_helper): + """No ip_addresses, not domain, host is an IP → uses host.""" + record = { + "url": "10.0.0.1:80", + "host": "10.0.0.1", + "is_domain": False, + "ip_addresses": [], + "tags": [], + "valid_from": "2026-01-01T00:00:00Z", + "valid_until": "2027-01-01T00:00:00Z", + } + result = ConverterToStix(mock_helper).convert_malicious_url(record) + types = {o.type for o in result} + assert "ipv4-addr" in types + + def test_host_only_domain_fallback(self, mock_helper): + """No ip_addresses, not is_domain flag, host is a domain string.""" + record = { + "url": "bad.org", + "host": "bad.org", + "is_domain": True, + "ip_addresses": [], + "tags": [], + "valid_from": "2026-01-01T00:00:00Z", + "valid_until": "2027-01-01T00:00:00Z", + } + result = ConverterToStix(mock_helper).convert_malicious_url(record) + types = {o.type for o in result} + assert "domain-name" in types + + def test_host_not_ip(self, mock_helper): + """No ip_addresses, not is_domain flag, host is filled.""" + record = { + "url": "http://example.com", + "host": "example.com", + "is_domain": False, + "ip_addresses": [], + "tags": [], + "valid_from": "2026-01-01T00:00:00Z", + "valid_until": "2027-01-01T00:00:00Z", + } + result = ConverterToStix(mock_helper).convert_malicious_url(record) + types = {o.type for o in result} + assert "domain-name" in types + + def test_convert_malicious_url_path_only_skipped(self, mock_helper): + """Path-only URLs (no host, no scheme) must not produce an indicator.""" + converter = ConverterToStix(mock_helper) + + record = { + "url": "/api/v1/malware", + "host": "", + "is_domain": False, + "ip_addresses": [], + "tags": ["test"], + "valid_from": "2026-01-01T00:00:00Z", + } + + result = converter.convert_malicious_url(record) + + assert not any(o["type"] == "indicator" for o in result) + + def test_convert_malicious_url_fallback_with_scheme(self, mock_helper): + converter = ConverterToStix(mock_helper) + converter._extract_host = MagicMock(return_value="") + converter._is_ip = MagicMock(return_value=False) + + record = { + "url": "https://unknown-format-url.com", + "host": "", + "is_domain": False, + "ip_addresses": [], + "valid_from": "2026-01-01T00:00:00Z", + } + + result = converter.convert_malicious_url(record) + + indicator = next(o for o in result if o["type"] == "indicator") + assert "url:value = 'https://unknown-format-url.com'" in indicator["pattern"] + + def test_multiple_ips_or_pattern(self, mock_helper): + """Two IPs → OR-joined pattern.""" + record = { + "url": "1.1.1.1:80", + "host": "", + "is_domain": False, + "ip_addresses": ["1.1.1.1", "2.2.2.2"], + "tags": [], + "valid_from": "2026-01-01T00:00:00Z", + "valid_until": "2027-01-01T00:00:00Z", + } + result = ConverterToStix(mock_helper).convert_malicious_url(record) + indicators = [o for o in result if o.type == "indicator"] + assert " OR " in indicators[0].pattern + + def test_invalid_ip_in_list_skipped(self, mock_helper): + record = { + "url": "x:80", + "host": "", + "is_domain": True, + "ip_addresses": ["not-an-ip"], + "tags": [], + "valid_from": "2026-01-01T00:00:00Z", + "valid_until": "2027-01-01T00:00:00Z", + } + result = ConverterToStix(mock_helper).convert_malicious_url(record) + # No observable created for invalid IP, falls back to URL pattern + indicators = [o for o in result if o.type == "indicator"] + assert len(indicators) == 1 + + def test_url_without_slash_or_colon_no_extra_url_obs(self, mock_helper): + record = { + "url": "plaintext", + "host": "", + "is_domain": True, + "ip_addresses": [], + "tags": [], + "valid_from": "2026-01-01T00:00:00Z", + "valid_until": "2027-01-01T00:00:00Z", + } + result = ConverterToStix(mock_helper).convert_malicious_url(record) + url_obs = [o for o in result if o.type == "url"] + assert len(url_obs) == 0 + + def test_tags_produce_malware_and_relationship( + self, mock_helper, sample_malicious_url_record + ): + result = ConverterToStix(mock_helper).convert_malicious_url( + sample_malicious_url_record + ) + assert any(o.type == "malware" and o.name == "Ghost RAT" for o in result) + rel_types = {o.relationship_type for o in result if o.type == "relationship"} + assert "indicates" in rel_types + assert "based-on" in rel_types + + def test_deterministic_ids(self, mock_helper, sample_malicious_url_record): + c = ConverterToStix(mock_helper) + assert {o.id for o in c.convert_malicious_url(sample_malicious_url_record)} == { + o.id for o in c.convert_malicious_url(sample_malicious_url_record) + } + + +# ===================================================================== +# Phishing Site conversion +# ===================================================================== + + +class TestConvertPhishingSite: + def test_basic(self, mock_helper, sample_phishing_site_record): + result = ConverterToStix(mock_helper).convert_phishing_site( + sample_phishing_site_record + ) + types = {o.type for o in result} + assert {"url", "domain-name", "indicator", "relationship"} <= types + + def test_empty_url(self, mock_helper): + assert not ConverterToStix(mock_helper).convert_phishing_site({"url": ""}) + + def test_phishing_label(self, mock_helper, sample_phishing_site_record): + result = ConverterToStix(mock_helper).convert_phishing_site( + sample_phishing_site_record + ) + ind = [o for o in result if o.type == "indicator"][0] + assert "phishing" in ind.labels + + def test_ip_host_no_domain_obs(self, mock_helper): + record = { + "url": "http://1.2.3.4/phish", + "ip_addresses": [], + "created": "2026-01-01T00:00:00Z", + } + result = ConverterToStix(mock_helper).convert_phishing_site(record) + assert not any(o.type == "domain-name" for o in result) + + def test_ip_addresses_ipv4(self, mock_helper): + record = { + "url": "http://evil.com", + "ip_addresses": ["1.2.3.4"], + "created": "2026-01-01T00:00:00Z", + } + result = ConverterToStix(mock_helper).convert_phishing_site(record) + assert any(o.type == "ipv4-addr" for o in result) + + def test_ip_addresses_ipv6(self, mock_helper): + record = { + "url": "http://evil.com", + "ip_addresses": ["2001:db8::1"], + "created": "2026-01-01T00:00:00Z", + } + result = ConverterToStix(mock_helper).convert_phishing_site(record) + assert any(o.type == "ipv6-addr" for o in result) + + def test_empty_ip_string_skipped(self, mock_helper): + record = { + "url": "http://evil.com", + "ip_addresses": [""], + "created": "2026-01-01T00:00:00Z", + } + result = ConverterToStix(mock_helper).convert_phishing_site(record) + assert not any(o.type == "ipv4-addr" for o in result) + + def test_url_without_scheme(self, mock_helper): + record = { + "url": "evil.com/phish", + "ip_addresses": [], + "created": "2026-01-01T00:00:00Z", + } + result = ConverterToStix(mock_helper).convert_phishing_site(record) + assert any(o.type == "domain-name" for o in result) + + +# ===================================================================== +# Malware Hash conversion +# ===================================================================== + + +class TestConvertMalwareHash: + def test_full_record(self, mock_helper, sample_malware_hash_record): + result = ConverterToStix(mock_helper).convert_malware_hash( + sample_malware_hash_record + ) + types = {o.type for o in result} + assert {"file", "indicator", "malware", "relationship"} <= types + + def test_empty_hashes(self, mock_helper): + assert not ConverterToStix(mock_helper).convert_malware_hash( + {"hashes": {}, "tags": []} + ) + + def test_no_tags_indicator_name(self, mock_helper): + record = { + "hashes": {"sha256": "a" * 64}, + "tags": [], + "valid_from": "2026-01-01T00:00:00Z", + "valid_until": "2027-01-01T00:00:00Z", + } + result = ConverterToStix(mock_helper).convert_malware_hash(record) + ind = [o for o in result if o.type == "indicator"][0] + assert "..." in ind.name # truncated hash + + +# ===================================================================== +# Compromised Credential conversion +# ===================================================================== + + +class TestConvertCompromisedCredential: + def test_full_with_victim(self, mock_helper, sample_compromised_credential_record): + result = ConverterToStix(mock_helper).convert_compromised_credential( + sample_compromised_credential_record + ) + types = {o.type for o in result} + assert { + "user-account", + "url", + "domain-name", + "ipv4-addr", + "incident", + "malware", + "relationship", + "note", + } <= types + + def test_incident_related_to_user_account( + self, mock_helper, sample_compromised_credential_record + ): + # OpenCTI schema forbids `targets` from an Incident (SDO) to a + # UserAccount (SCO); `related-to` is the correct relationship type. + result = ConverterToStix(mock_helper).convert_compromised_credential( + sample_compromised_credential_record + ) + incident = next(o for o in result if o.type == "incident") + user_account = next(o for o in result if o.type == "user-account") + rels = [ + o + for o in result + if o.type == "relationship" + and o.relationship_type == "related-to" + and o.source_ref == incident.id + and o.target_ref == user_account.id + ] + assert len(rels) == 1 + + def test_incident_uses_malware( + self, mock_helper, sample_compromised_credential_record + ): + result = ConverterToStix(mock_helper).convert_compromised_credential( + sample_compromised_credential_record + ) + incident = next(o for o in result if o.type == "incident") + malware = next(o for o in result if o.type == "malware") + uses_rels = [ + o + for o in result + if o.type == "relationship" + and o.relationship_type == "uses" + and o.source_ref == incident.id + and o.target_ref == malware.id + ] + assert len(uses_rels) == 1 + + def test_empty_username(self, mock_helper): + assert not ConverterToStix(mock_helper).convert_compromised_credential( + {"content": {"username": ""}} + ) + + def test_no_victim_detail( + self, mock_helper, sample_compromised_credential_no_victim + ): + result = ConverterToStix(mock_helper).convert_compromised_credential( + sample_compromised_credential_no_victim + ) + types = {o.type for o in result} + assert "user-account" in types + assert "note" not in types + assert "malware" not in types + + def test_no_raw_password(self, mock_helper, sample_compromised_credential_record): + result = ConverterToStix(mock_helper).convert_compromised_credential( + sample_compromised_credential_record + ) + for obj in result: + assert "t3stPassw0rd!" not in str(obj) + + def test_store_password_when_flag_enabled( + self, mock_helper, sample_compromised_credential_record + ): + c = ConverterToStix(mock_helper, store_credential_password=True) + result = c.convert_compromised_credential(sample_compromised_credential_record) + user_accounts = [o for o in result if o.type == "user-account"] + assert len(user_accounts) == 1 + assert user_accounts[0].credential == "t3stPassw0rd!" + + def test_corporate_label(self, mock_helper, sample_compromised_credential_record): + result = ConverterToStix(mock_helper).convert_compromised_credential( + sample_compromised_credential_record + ) + inc = [o for o in result if o.type == "incident"][0] + assert "corporate" in inc.labels + + def test_non_corporate(self, mock_helper): + record = { + "id": 1, + "created": "2026-01-01T00:00:00Z", + "company": {}, + "content": { + "username": "u", + "password": "p", + "url": "", + "source": "malware", + "is_corporate": False, + "password_complexity": {}, + "victim_detail": None, + }, + } + result = ConverterToStix(mock_helper).convert_compromised_credential(record) + inc = [o for o in result if o.type == "incident"][0] + assert "corporate" not in inc.labels + + def test_user_account_corporate_label( + self, mock_helper, sample_compromised_credential_record + ): + result = ConverterToStix(mock_helper).convert_compromised_credential( + sample_compromised_credential_record + ) + ua = next(o for o in result if o.type == "user-account") + ua_labels = ua.get("x_opencti_labels", []) + assert "corporate" in ua_labels + + def test_user_account_personal_label(self, mock_helper): + record = { + "id": 1, + "created": "2026-01-01T00:00:00Z", + "company": {}, + "content": { + "username": "u@example.com", + "password": "p", + "url": "", + "source": "malware", + "is_corporate": False, + "password_complexity": {}, + "victim_detail": None, + }, + } + result = ConverterToStix(mock_helper).convert_compromised_credential(record) + ua = next(o for o in result if o.type == "user-account") + ua_labels = ua.get("x_opencti_labels", []) + assert "personal" in ua_labels + assert "corporate" not in ua_labels + + def test_user_account_source_label(self, mock_helper): + record = { + "id": 1, + "created": "2026-01-01T00:00:00Z", + "company": {}, + "content": { + "username": "u@example.com", + "password": "p", + "url": "", + "source": "phishing_site", + "is_corporate": False, + "password_complexity": {}, + "victim_detail": None, + }, + } + result = ConverterToStix(mock_helper).convert_compromised_credential(record) + ua = next(o for o in result if o.type == "user-account") + ua_labels = ua.get("x_opencti_labels", []) + assert "phishing-site" in ua_labels + + def test_user_account_password_strength_label(self, mock_helper): + record = { + "id": 1, + "created": "2026-01-01T00:00:00Z", + "company": {}, + "content": { + "username": "u@example.com", + "password": "p", + "url": "", + "source": "malware", + "is_corporate": True, + "password_complexity": {"score": "weak", "length": 6}, + "victim_detail": None, + }, + } + result = ConverterToStix(mock_helper).convert_compromised_credential(record) + ua = next(o for o in result if o.type == "user-account") + ua_labels = ua.get("x_opencti_labels", []) + assert "password-strength-weak" in ua_labels + + def test_no_target_url(self, mock_helper): + record = { + "id": 1, + "created": "2026-01-01T00:00:00Z", + "company": {}, + "content": { + "username": "u", + "password": "p", + "url": "", + "source": "x", + "is_corporate": False, + "password_complexity": {}, + "victim_detail": None, + }, + } + result = ConverterToStix(mock_helper).convert_compromised_credential(record) + assert not any(o.type == "url" for o in result) + + def test_victim_ipv6(self, mock_helper): + record = { + "id": 1, + "created": "2026-01-01T00:00:00Z", + "company": {}, + "content": { + "username": "u", + "password": "p", + "url": "", + "source": "x", + "is_corporate": False, + "password_complexity": {}, + "victim_detail": {"ip": "2001:db8::1", "malware": "X"}, + }, + } + result = ConverterToStix(mock_helper).convert_compromised_credential(record) + assert any(o.type == "ipv6-addr" for o in result) + + def test_victim_invalid_ip(self, mock_helper): + record = { + "id": 1, + "created": "2026-01-01T00:00:00Z", + "company": {}, + "content": { + "username": "u", + "password": "p", + "url": "", + "source": "x", + "is_corporate": False, + "password_complexity": {}, + "victim_detail": {"ip": "not-ip", "malware": None}, + }, + } + result = ConverterToStix(mock_helper).convert_compromised_credential(record) + assert not any(o.type in ("ipv4-addr", "ipv6-addr") for o in result) + + def test_victim_empty_ip(self, mock_helper): + record = { + "id": 1, + "created": "2026-01-01T00:00:00Z", + "company": {}, + "content": { + "username": "u", + "password": "p", + "url": "", + "source": "x", + "is_corporate": False, + "password_complexity": {}, + "victim_detail": {"ip": ""}, + }, + } + result = ConverterToStix(mock_helper).convert_compromised_credential(record) + assert not any(o.type in ("ipv4-addr", "ipv6-addr") for o in result) + + def test_no_password_complexity(self, mock_helper): + record = { + "id": 1, + "created": "2026-01-01T00:00:00Z", + "company": {}, + "content": { + "username": "u", + "password": "p", + "url": "", + "source": "x", + "is_corporate": False, + "password_complexity": None, + "victim_detail": None, + }, + } + result = ConverterToStix(mock_helper).convert_compromised_credential(record) + assert any(o.type == "incident" for o in result) + + def test_deterministic(self, mock_helper, sample_compromised_credential_record): + c = ConverterToStix(mock_helper) + assert { + o.id + for o in c.convert_compromised_credential( + sample_compromised_credential_record + ) + } == { + o.id + for o in c.convert_compromised_credential( + sample_compromised_credential_record + ) + } + + def test_target_url_with_ip_host(self, mock_helper): + """Target URL whose hostname is an IP → no domain-name created.""" + record = { + "id": 1, + "created": "2026-01-01T00:00:00Z", + "company": {}, + "content": { + "username": "u", + "password": "p", + "url": "http://10.0.0.1/login", + "source": "x", + "is_corporate": False, + "password_complexity": {}, + "victim_detail": None, + }, + } + result = ConverterToStix(mock_helper).convert_compromised_credential(record) + assert not any(o.type == "domain-name" for o in result) + + +# ===================================================================== +# Credit Card Ticket conversion +# ===================================================================== + + +class TestStripHtml: + def test_removes_tags(self): + assert ConverterToStix._strip_html("

Hello

") == "Hello" + + def test_br_becomes_newline(self): + result = ConverterToStix._strip_html("line1
line2") + assert "line1" in result and "line2" in result + + def test_unescape_entities(self): + assert "&" not in ConverterToStix._strip_html("&") + assert "&" in ConverterToStix._strip_html("&") + + def test_empty_string(self): + assert ConverterToStix._strip_html("") == "" + + def test_none_returns_empty(self): + assert ConverterToStix._strip_html(None) == "" # type: ignore + + +# ===================================================================== +# Deep Sight Ticket conversion +# ===================================================================== + + +class TestConvertDeepSightTicket: + def test_full_record(self, mock_helper, sample_deep_sight_ticket_record): + result = ConverterToStix(mock_helper).convert_deep_sight_ticket( + sample_deep_sight_ticket_record + ) + types = {o.type for o in result} + assert {"threat-actor", "identity", "relationship", "report"} <= types + + def test_no_actors_no_targets( + self, mock_helper, sample_deep_sight_ticket_no_actors_no_targets + ): + result = ConverterToStix(mock_helper).convert_deep_sight_ticket( + sample_deep_sight_ticket_no_actors_no_targets + ) + types = {o.type for o in result} + assert "report" in types + assert "threat-actor" not in types + assert "identity" not in types + # Report must have at least one object_ref (fallback to author) + rep = [o for o in result if o.type == "report"][0] + assert len(rep.object_refs) >= 1 + + def test_per_record_tlp_amber(self, mock_helper, sample_deep_sight_ticket_record): + """amber TLP in content must be applied to all objects in the ticket.""" + import stix2 + + c = ConverterToStix(mock_helper, tlp_level="red") # connector default = red + result = c.convert_deep_sight_ticket(sample_deep_sight_ticket_record) + for obj in result: + markings = getattr(obj, "object_marking_refs", None) + if markings: + assert stix2.TLP_AMBER.id in markings + + def test_per_record_tlp_red( + self, mock_helper, sample_deep_sight_ticket_with_report + ): + import stix2 + + c = ConverterToStix(mock_helper, tlp_level="amber") # connector default = amber + result = c.convert_deep_sight_ticket(sample_deep_sight_ticket_with_report) + for obj in result: + markings = getattr(obj, "object_marking_refs", None) + if markings: + assert stix2.TLP_RED.id in markings + + def test_targets_relationship(self, mock_helper, sample_deep_sight_ticket_record): + result = ConverterToStix(mock_helper).convert_deep_sight_ticket( + sample_deep_sight_ticket_record + ) + rels = [o for o in result if o.type == "relationship"] + assert any(r.relationship_type == "targets" for r in rels) + + def test_labels_from_content(self, mock_helper, sample_deep_sight_ticket_record): + result = ConverterToStix(mock_helper).convert_deep_sight_ticket( + sample_deep_sight_ticket_record + ) + rep = [o for o in result if o.type == "report"][0] + assert "ransomware" in rep.labels + assert "regional" in rep.labels + + def test_motivation_mapped(self, mock_helper, sample_deep_sight_ticket_record): + result = ConverterToStix(mock_helper).convert_deep_sight_ticket( + sample_deep_sight_ticket_record + ) + ta = [o for o in result if o.type == "threat-actor"][0] + assert ta.primary_motivation == "ideology" + + def test_multiple_motivations(self, mock_helper): + record = { + "id": 1, + "status": "open", + "created": "2026-01-01T00:00:00Z", + "content": { + "title": "Test", + "analyst_notes": "", + "threat_actors": [ + {"nickname": "TestActor", "motivations": ["money", "ideological"]} + ], + "targets": [], + "tlp": "amber", + "labels": [], + "markers": [], + }, + } + result = ConverterToStix(mock_helper).convert_deep_sight_ticket(record) + ta = [o for o in result if o.type == "threat-actor"][0] + assert ta.primary_motivation == "personal-gain" + assert "ideology" in ta.secondary_motivations + + def test_na_nickname_skipped(self, mock_helper): + record = { + "id": 1, + "status": "open", + "created": "2026-01-01T00:00:00Z", + "content": { + "title": "Test", + "analyst_notes": "", + "threat_actors": [{"nickname": "N/A", "motivations": []}], + "targets": [], + "tlp": "amber", + "labels": [], + "markers": [], + }, + } + result = ConverterToStix(mock_helper).convert_deep_sight_ticket(record) + assert not any(o.type == "threat-actor" for o in result) + + def test_na_target_skipped(self, mock_helper): + record = { + "id": 1, + "status": "open", + "created": "2026-01-01T00:00:00Z", + "content": { + "title": "Test", + "analyst_notes": "", + "threat_actors": [], + "targets": [{"name": "N/A", "risk_score": "low"}], + "tlp": "amber", + "labels": [], + "markers": [], + }, + } + result = ConverterToStix(mock_helper).convert_deep_sight_ticket(record) + assert not any(o.type == "identity" for o in result) + + def test_html_stripped_in_description(self, mock_helper): + record = { + "id": 1, + "status": "open", + "created": "2026-01-01T00:00:00Z", + "content": { + "title": "Test", + "analyst_notes": "

Clean text here.

", + "threat_actors": [], + "targets": [], + "tlp": "green", + "labels": [], + "markers": [], + }, + } + result = ConverterToStix(mock_helper).convert_deep_sight_ticket(record) + rep = [o for o in result if o.type == "report"][0] + assert "

" not in rep.description + assert "Clean text here." in rep.description + + def test_deterministic_ids(self, mock_helper, sample_deep_sight_ticket_record): + c = ConverterToStix(mock_helper) + ids1 = { + o.id for o in c.convert_deep_sight_ticket(sample_deep_sight_ticket_record) + } + ids2 = { + o.id for o in c.convert_deep_sight_ticket(sample_deep_sight_ticket_record) + } + assert ids1 == ids2 + + def test_pdf_embedded_in_x_opencti_files(self, mock_helper): + """When _pdf_data/_pdf_filename are present, the Report gets x_opencti_files.""" + import base64 + + record = { + "id": 99, + "status": "open", + "created": "2026-01-01T00:00:00Z", + "content": { + "title": "Test Report With PDF", + "analyst_notes": "", + "threat_actors": [], + "targets": [], + "tlp": "amber", + "labels": [], + "markers": [], + }, + "_pdf_data": b"%PDF-1.4 fake content", + "_pdf_filename": "report_99.pdf", + } + c = ConverterToStix(mock_helper) + result = c.convert_deep_sight_ticket(record) + rep = [o for o in result if o.type == "report"][0] + files = rep.get("x_opencti_files") + assert files is not None and len(files) == 1 + f = files[0] + assert f["name"] == "report_99.pdf" + assert f["mime_type"] == "application/pdf" + assert f["no_trigger_import"] is True + assert base64.b64decode(f["data"]) == b"%PDF-1.4 fake content" + + def test_no_pdf_no_x_opencti_files( + self, mock_helper, sample_deep_sight_ticket_record + ): + """When no _pdf_data is present, x_opencti_files must not be in the Report.""" + # sample_deep_sight_ticket_record has report: None so no PDF + c = ConverterToStix(mock_helper) + result = c.convert_deep_sight_ticket(sample_deep_sight_ticket_record) + rep = [o for o in result if o.type == "report"][0] + assert rep.get("x_opencti_files") is None + + def test_has_attachment_label( + self, mock_helper, sample_deep_sight_ticket_with_report + ): + """Records with a non-null report URL get the 'has-attachment' label.""" + c = ConverterToStix(mock_helper) + result = c.convert_deep_sight_ticket(sample_deep_sight_ticket_with_report) + rep = [o for o in result if o.type == "report"][0] + assert "has-attachment" in rep.labels + assert "no-attachment" not in rep.labels + + def test_no_attachment_label(self, mock_helper, sample_deep_sight_ticket_record): + """Records with report: null get the 'no-attachment' label.""" + # sample_deep_sight_ticket_record has report: None + c = ConverterToStix(mock_helper) + result = c.convert_deep_sight_ticket(sample_deep_sight_ticket_record) + rep = [o for o in result if o.type == "report"][0] + assert "no-attachment" in rep.labels + assert "has-attachment" not in rep.labels + + +class TestConvertCreditCardTicket: + def test_full_record(self, mock_helper, sample_credit_card_record): + result = ConverterToStix(mock_helper).convert_credit_card_ticket( + sample_credit_card_record + ) + types = {o.type for o in result} + assert {"incident", "identity", "relationship", "note"} <= types + + def test_empty_card(self, mock_helper): + assert not ConverterToStix(mock_helper).convert_credit_card_ticket( + {"content": {"number": ""}} + ) + + def test_pan_never_stored(self, mock_helper, sample_credit_card_record): + for obj in ConverterToStix(mock_helper).convert_credit_card_ticket( + sample_credit_card_record + ): + assert "4242424242424242" not in str(obj) + + def test_masked_in_description(self, mock_helper, sample_credit_card_record): + result = ConverterToStix(mock_helper).convert_credit_card_ticket( + sample_credit_card_record + ) + inc = [o for o in result if o.type == "incident"][0] + assert "424242" in inc.description + assert "4242" in inc.description + + def test_targets_relationship(self, mock_helper, sample_credit_card_record): + result = ConverterToStix(mock_helper).convert_credit_card_ticket( + sample_credit_card_record + ) + assert any( + o.type == "relationship" and o.relationship_type == "targets" + for o in result + ) + + def test_deterministic(self, mock_helper, sample_credit_card_record): + c = ConverterToStix(mock_helper) + assert { + o.id for o in c.convert_credit_card_ticket(sample_credit_card_record) + } == {o.id for o in c.convert_credit_card_ticket(sample_credit_card_record)} diff --git a/external-import/usta/tests/test_connector/test_settings.py b/external-import/usta/tests/test_connector/test_settings.py new file mode 100644 index 00000000000..65098d32168 --- /dev/null +++ b/external-import/usta/tests/test_connector/test_settings.py @@ -0,0 +1,72 @@ +"""Unit tests for USTA connector settings.""" + +# pylint: disable=missing-function-docstring,missing-class-docstring,unsupported-membership-test + +from datetime import timedelta + +import pytest +from connector.settings import ExternalImportConnectorConfig, UstaConfig + + +class TestUstaConfig: + def test_default_page_size(self): + assert UstaConfig(api_key="k").page_size == 100 + + def test_default_import_start_date(self): + assert UstaConfig(api_key="k").import_start_date == timedelta(days=90) + + def test_default_tlp(self): + assert UstaConfig(api_key="k").tlp_level == "red" + + def test_default_confidence(self): + assert UstaConfig(api_key="k").confidence_level == 99 + + def test_all_feeds_enabled(self): + c = UstaConfig(api_key="k") + assert c.import_malicious_urls is True + assert c.import_phishing_sites is True + assert c.import_malware_hashes is True + assert c.import_compromised_credentials is True + assert c.import_credit_cards is True + assert c.import_deep_sight_tickets is True + + def test_store_credential_password_defaults_false(self): + assert UstaConfig(api_key="k").store_credential_password is False + + def test_store_credential_password_can_be_enabled(self): + assert ( + UstaConfig( + api_key="k", store_credential_password=True + ).store_credential_password + is True + ) + + def test_invalid_confidence(self): + with pytest.raises(Exception): + UstaConfig(api_key="k", confidence_level=150) + + def test_invalid_tlp(self): + with pytest.raises(Exception): + UstaConfig(api_key="k", tlp_level="purple") + + def test_default_api_base_url(self): + c = UstaConfig(api_key="k") + assert "usta.prodaft.com" in str(c.api_base_url) + + +class TestExternalImportConnectorConfig: + def test_default_name(self): + assert ExternalImportConnectorConfig(id="1234").name == "USTA" + + def test_default_duration(self): + assert ExternalImportConnectorConfig(id="1234").duration_period == timedelta( + minutes=30 + ) + + def test_default_scope(self): + c = ExternalImportConnectorConfig(id="1234") + assert "indicator" in c.scope + assert "incident" in c.scope + assert "user-account" in c.scope + assert "report" in c.scope + assert "threat-actor" in c.scope diff --git a/external-import/usta/tests/test_connector/test_utils.py b/external-import/usta/tests/test_connector/test_utils.py new file mode 100644 index 00000000000..f25a9244c26 --- /dev/null +++ b/external-import/usta/tests/test_connector/test_utils.py @@ -0,0 +1,35 @@ +"""Unit tests for connector utility functions.""" + +# pylint: disable=missing-function-docstring,missing-class-docstring,too-few-public-methods + +from connector.utils import iso_now, safe_get + + +class TestIsoNow: + def test_returns_utc_string(self): + result = iso_now() + assert result.endswith("Z") + assert "T" in result + + +class TestSafeGet: + def test_single_key(self): + assert safe_get({"a": 1}, "a") == 1 + + def test_nested_keys(self): + assert safe_get({"a": {"b": {"c": 3}}}, "a", "b", "c") == 3 + + def test_missing_key(self): + assert safe_get({"a": 1}, "b") is None + + def test_missing_key_with_default(self): + assert safe_get({"a": 1}, "b", default=42) == 42 + + def test_none_intermediate(self): + assert safe_get({"a": None}, "a", "b") is None + + def test_non_dict_intermediate(self): + assert safe_get({"a": "string"}, "a", "b") is None + + def test_empty_dict(self): + assert safe_get({}, "a", default="x") == "x" diff --git a/external-import/usta/tests/test_main.py b/external-import/usta/tests/test_main.py new file mode 100644 index 00000000000..722d5917592 --- /dev/null +++ b/external-import/usta/tests/test_main.py @@ -0,0 +1,43 @@ +"""Tests for the main entry point module.""" + +# pylint: disable=missing-function-docstring + +import os +from unittest.mock import MagicMock, patch + +from connector import ConnectorSettings, ConverterToStix, UstaConnector +from usta_client import UstaClient, UstaClientError + + +def test_connector_imports(): + assert ConnectorSettings is not None + assert ConverterToStix is not None + assert UstaConnector is not None + + +def test_usta_client_imports(): + assert UstaClient is not None + assert UstaClientError is not None + + +def test_usta_connector_init(): + env_vars = { + "OPENCTI_URL": "https://opencti:8080", + "OPENCTI_TOKEN": "fake-token", + "CONNECTOR_ID": "12345678-1234-1234-1234-123456789012", + "USTA_API_KEY": "test-key", + } + + with patch.dict(os.environ, env_vars): + settings = ConnectorSettings() + + # Mock OpenCTI helper to prevent AttributeError during dereferencing + mock_helper = MagicMock() + mock_helper.connector_logger = MagicMock() + + uc = UstaConnector(config=settings, helper=mock_helper) + + assert isinstance(uc.config, ConnectorSettings) + assert isinstance(uc.client, UstaClient) + assert isinstance(uc.converter, ConverterToStix) + assert uc.helper == mock_helper diff --git a/external-import/valhalla/src/requirements.txt b/external-import/valhalla/src/requirements.txt index 49f248dd671..9f6cb58a87a 100644 --- a/external-import/valhalla/src/requirements.txt +++ b/external-import/valhalla/src/requirements.txt @@ -1,4 +1,4 @@ -pycti==7.260309.0 +pycti==7.260515.0 pydantic>=2.8.2,<3.0.0 valhallaAPI==0.6.0 python-dateutil==2.9.0.post0 diff --git a/external-import/valhalla/tests/test-requirements.txt b/external-import/valhalla/tests/test-requirements.txt index bdef682113c..d405632324b 100644 --- a/external-import/valhalla/tests/test-requirements.txt +++ b/external-import/valhalla/tests/test-requirements.txt @@ -1,2 +1,2 @@ -r ../src/requirements.txt -pytest==8.4.2 +pytest==9.0.3 diff --git a/external-import/virustotal-livehunt-notifications/src/requirements.txt b/external-import/virustotal-livehunt-notifications/src/requirements.txt index 12b010b79a4..d5a241b073d 100644 --- a/external-import/virustotal-livehunt-notifications/src/requirements.txt +++ b/external-import/virustotal-livehunt-notifications/src/requirements.txt @@ -1,4 +1,4 @@ plyara~=2.2.1 -pycti==7.260309.0 +pycti==7.260515.0 vt-py==0.21.0 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk diff --git a/external-import/virustotal-livehunt-notifications/tests/test-requirements.txt b/external-import/virustotal-livehunt-notifications/tests/test-requirements.txt index b46752671ca..386ed5a0a36 100644 --- a/external-import/virustotal-livehunt-notifications/tests/test-requirements.txt +++ b/external-import/virustotal-livehunt-notifications/tests/test-requirements.txt @@ -1,3 +1,3 @@ # Main dependencies needs to be installed -r ../src/requirements.txt -pytest==8.4.2 +pytest==9.0.3 diff --git a/external-import/vmray-platform/src/requirements.txt b/external-import/vmray-platform/src/requirements.txt index 2ebba1c6f66..930b6125c57 100644 --- a/external-import/vmray-platform/src/requirements.txt +++ b/external-import/vmray-platform/src/requirements.txt @@ -1,3 +1,3 @@ -pycti==7.260309.0 -urllib3==2.6.3 +pycti==7.260515.0 +urllib3==2.7.0 vmray-rest-api==6.0.0 diff --git a/external-import/vulncheck/pyproject.toml b/external-import/vulncheck/pyproject.toml index ea88a627391..733dda1c0ea 100644 --- a/external-import/vulncheck/pyproject.toml +++ b/external-import/vulncheck/pyproject.toml @@ -11,7 +11,7 @@ authors = [{ name = "VulnCheck" }] requires-python = ">= 3.12, <3.13" dependencies = [ "vulncheck-sdk==0.0.40", - "pycti==7.260309.0", + "pycti==7.260515.0", "pydantic==2.11.9", "validators==0.35.0", "psutil==7.1.2", @@ -20,10 +20,10 @@ dependencies = [ [project.optional-dependencies] dev = [ - "pytest==8.3.3", + "pytest==9.0.3", "pytest-mock==3.14.0", "flake8==7.3.0", - "black==26.1.0", + "black==26.3.1", "isort==6.1.0", ] diff --git a/external-import/vxvault/.env.sample b/external-import/vxvault/.env.sample new file mode 100644 index 00000000000..14017636fa5 --- /dev/null +++ b/external-import/vxvault/.env.sample @@ -0,0 +1,10 @@ +OPENCTI_URL=http://localhost +OPENCTI_TOKEN=ChangeMe +# CONNECTOR_ID=d790f4c0-84c1-4e91-8e6b-3a6f3a0e3b7a +# CONNECTOR_NAME=VX Vault URL list +# CONNECTOR_SCOPE=vxvault +# CONNECTOR_DURATION_PERIOD=P3D +# CONNECTOR_LOG_LEVEL=error +# VXVAULT_URL=https://vxvault.net/URL_List.php +# VXVAULT_CREATE_INDICATORS=true +# VXVAULT_SSL_VERIFY=false diff --git a/external-import/vxvault/Dockerfile b/external-import/vxvault/Dockerfile index 415eca031bb..3e90c05f848 100644 --- a/external-import/vxvault/Dockerfile +++ b/external-import/vxvault/Dockerfile @@ -1,17 +1,14 @@ FROM python:3.12-alpine -ENV CONNECTOR_TYPE=EXTERNAL_IMPORT - -# Copy the connector -COPY src /opt/opencti-connector-vxvault # Install Python modules # hadolint ignore=DL3003 -RUN apk --no-cache add git build-base libmagic libffi-dev && \ - cd /opt/opencti-connector-vxvault && \ - pip3 install --no-cache-dir -r requirements.txt && \ - apk del git build-base +WORKDIR /opt/opencti-connector-vxvault +RUN apk --no-cache add git build-base libmagic libffi-dev +RUN --mount=type=bind,source=./src/requirements.txt,target=requirements.txt \ + pip3 install --no-cache-dir -r requirements.txt +RUN apk del git build-base + +COPY src/ . # Expose and entrypoint -COPY entrypoint.sh / -RUN chmod +x /entrypoint.sh -ENTRYPOINT ["/entrypoint.sh"] +ENTRYPOINT ["python3", "main.py"] diff --git a/external-import/vxvault/README.md b/external-import/vxvault/README.md new file mode 100644 index 00000000000..e7e30a776bc --- /dev/null +++ b/external-import/vxvault/README.md @@ -0,0 +1,121 @@ +# OpenCTI VX Vault Connector + +The VX Vault connector imports URLs of potential malicious payloads from [VX Vault](http://vxvault.net) into OpenCTI as STIX 2.1 URL observables. + +## Table of Contents + +- [OpenCTI VX Vault Connector](#opencti-vx-vault-connector) + - [Table of Contents](#table-of-contents) + - [Introduction](#introduction) + - [Installation](#installation) + - [Requirements](#requirements) + - [Configuration variables](#configuration-variables) + - [Deployment](#deployment) + - [Docker Deployment](#docker-deployment) + - [Manual Deployment](#manual-deployment) + - [Usage](#usage) + - [Behavior](#behavior) + - [Debugging](#debugging) + - [Additional information](#additional-information) + +## Introduction + +[VX Vault](http://vxvault.net) is a public repository that tracks URLs associated with potential malicious payloads. This connector periodically fetches the VX Vault URL list and imports the URLs as STIX 2.1 URL observables into OpenCTI, marked with TLP:WHITE. + +## Installation + +### Requirements + +- OpenCTI Platform >= 6.x +- Python >= 3.11 + +## Configuration variables + +Find all the configuration variables available here: [Connector Configurations](./__metadata__/CONNECTOR_CONFIG_DOC.md) + +_The `opencti` and `connector` options in the `docker-compose.yml` and `config.yml` are the same as for any other connector. +For more information regarding variables, please refer to [OpenCTI's documentation on connectors](https://docs.opencti.io/latest/deployment/connectors/)._ + +## Deployment + +### Docker Deployment + +Build the Docker image: + +```bash +docker build -t opencti/connector-vxvault:latest . +``` + +Configure the connector in `docker-compose.yml`: + +```yaml +connector-vxvault: + image: opencti/connector-vxvault:latest + environment: + - OPENCTI_URL=http://localhost + - OPENCTI_TOKEN=ChangeMe + - CONNECTOR_ID=ChangeMe + - CONNECTOR_NAME=VX Vault URL list + - CONNECTOR_SCOPE=vxvault + - CONNECTOR_LOG_LEVEL=info + - CONNECTOR_DURATION_PERIOD=P3D + - VXVAULT_URL=https://vxvault.net/URL_List.php + - VXVAULT_CREATE_INDICATORS=true + - VXVAULT_SSL_VERIFY=false + restart: always +``` + +Start the connector: + +```bash +docker compose up -d +``` + +### Manual Deployment + +1. Create `config.yml` based on `config.yml.sample`. + +2. Install dependencies: + +```bash +pip3 install -r requirements.txt +``` + +3. Start the connector: + +```bash +cd src +python3 main.py +``` + +## Usage + +The connector runs automatically at the interval defined by `CONNECTOR_DURATION_PERIOD`. To force an immediate run: + +**Data Management → Ingestion → Connectors** + +Find the connector and click the refresh button to reset the state and trigger a new import. + +## Behavior + +On each run, the connector: + +1. Fetches the VX Vault URL list from the configured endpoint +2. Parses the response, skipping header lines and HTML tags +3. Creates a STIX 2.1 URL observable for each valid URL, marked with TLP:WHITE and a score of 80 +4. Sends the resulting STIX bundle to OpenCTI + +All imported URLs are attributed to the "VX Vault" organization identity. + +## Debugging + +Enable verbose logging: + +```env +CONNECTOR_LOG_LEVEL=debug +``` + +## Additional information + +- **Data Source**: [VX Vault](http://vxvault.net) +- **Source Code**: [GitHub](https://github.com/OpenCTI-Platform/connectors/tree/master/external-import/vxvault) diff --git a/external-import/vxvault/__metadata__/CONNECTOR_CONFIG_DOC.md b/external-import/vxvault/__metadata__/CONNECTOR_CONFIG_DOC.md new file mode 100644 index 00000000000..db813838ba3 --- /dev/null +++ b/external-import/vxvault/__metadata__/CONNECTOR_CONFIG_DOC.md @@ -0,0 +1,19 @@ +# Connector Configurations + +Below is an exhaustive enumeration of all configurable parameters available, each accompanied by detailed explanations of their purposes, default behaviors, and usage guidelines to help you understand and utilize them effectively. + +### Type: `object` + +| Property | Type | Required | Possible values | Deprecated | Default | Description | +| -------- | ---- | -------- | --------------- | ---------- | ------- | ----------- | +| OPENCTI_URL | `string` | ✅ | Format: [`uri`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | | The base URL of the OpenCTI instance. | +| OPENCTI_TOKEN | `string` | ✅ | string | | | The API token to connect to OpenCTI. | +| CONNECTOR_NAME | `string` | | string | | `"VX Vault URL list"` | The name of the connector. | +| CONNECTOR_SCOPE | `array` | | string | | `["vxvault"]` | The scope of the connector. | +| CONNECTOR_LOG_LEVEL | `string` | | `debug` `info` `warn` `warning` `error` | | `"error"` | The minimum level of logs to display. | +| CONNECTOR_TYPE | `const` | | `EXTERNAL_IMPORT` | | `"EXTERNAL_IMPORT"` | | +| CONNECTOR_DURATION_PERIOD | `string` | | Format: [`duration`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | `"P3D"` | The period of time to await between two runs of the connector. | +| VXVAULT_URL | `string` | | string | | `"https://vxvault.net/URL_List.php"` | The URL of the VXVault dataset to fetch. | +| VXVAULT_CREATE_INDICATORS | `boolean` | | boolean | | `true` | If true, create indicators from the imported URLs. | +| VXVAULT_SSL_VERIFY | `boolean` | | boolean | | `false` | Whether to verify SSL certificates when fetching the dataset. | +| VXVAULT_INTERVAL | `integer` | | integer | ⛔️ | `null` | Use CONNECTOR_DURATION_PERIOD instead. | diff --git a/external-import/vxvault/__metadata__/connector_config_schema.json b/external-import/vxvault/__metadata__/connector_config_schema.json new file mode 100644 index 00000000000..a903a32b373 --- /dev/null +++ b/external-import/vxvault/__metadata__/connector_config_schema.json @@ -0,0 +1,82 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://www.filigran.io/connectors/vxvault_config.schema.json", + "type": "object", + "properties": { + "OPENCTI_URL": { + "description": "The base URL of the OpenCTI instance.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "OPENCTI_TOKEN": { + "description": "The API token to connect to OpenCTI.", + "type": "string" + }, + "CONNECTOR_NAME": { + "default": "VX Vault URL list", + "description": "The name of the connector.", + "type": "string" + }, + "CONNECTOR_SCOPE": { + "default": [ + "vxvault" + ], + "description": "The scope of the connector.", + "items": { + "type": "string" + }, + "type": "array" + }, + "CONNECTOR_LOG_LEVEL": { + "default": "error", + "description": "The minimum level of logs to display.", + "enum": [ + "debug", + "info", + "warn", + "warning", + "error" + ], + "type": "string" + }, + "CONNECTOR_TYPE": { + "const": "EXTERNAL_IMPORT", + "default": "EXTERNAL_IMPORT", + "type": "string" + }, + "CONNECTOR_DURATION_PERIOD": { + "default": "P3D", + "description": "The period of time to await between two runs of the connector.", + "format": "duration", + "type": "string" + }, + "VXVAULT_URL": { + "default": "https://vxvault.net/URL_List.php", + "description": "The URL of the VXVault dataset to fetch.", + "type": "string" + }, + "VXVAULT_CREATE_INDICATORS": { + "default": true, + "description": "If true, create indicators from the imported URLs.", + "type": "boolean" + }, + "VXVAULT_INTERVAL": { + "default": null, + "deprecated": true, + "type": "integer", + "description": "Use CONNECTOR_DURATION_PERIOD instead." + }, + "VXVAULT_SSL_VERIFY": { + "default": false, + "description": "Whether to verify SSL certificates when fetching the dataset.", + "type": "boolean" + } + }, + "required": [ + "OPENCTI_URL", + "OPENCTI_TOKEN" + ], + "additionalProperties": true +} \ No newline at end of file diff --git a/external-import/vxvault/__metadata__/connector_manifest.json b/external-import/vxvault/__metadata__/connector_manifest.json index f783c6feada..7aad0837d80 100644 --- a/external-import/vxvault/__metadata__/connector_manifest.json +++ b/external-import/vxvault/__metadata__/connector_manifest.json @@ -1,20 +1,20 @@ { "title": "VX Vault", "slug": "vxvault", - "description": "Information coming soon", - "short_description": "Information coming soon", + "description": "VX Vault is a publicly available repository that continuously tracks URLs linked to potentially malicious payloads, serving as a valuable source of threat intelligence for cybersecurity teams. By aggregating known malware distribution URLs, VX Vault helps analysts stay ahead of active threats targeting organizations across the globe.\n\nThe VX Vault connector for OpenCTI periodically fetches the VX Vault URL list and imports each entry as a STIX 2.1 URL observable. When indicator creation is enabled, the connector also generates corresponding STIX indicators, further enriching the threat intelligence graph. By integrating VX Vault data into OpenCTI, security teams gain automated, up-to-date visibility into malware delivery infrastructure, supporting faster detection, investigation, and response workflows.", + "short_description": "VX Vault is a public repository tracking URLs associated with malicious payloads. This connector imports these URLs into OpenCTI as STIX 2.1 observables, enabling security teams to detect and monitor active malware distribution infrastructure.", "logo": "external-import/vxvault/__metadata__/logo.png", "use_cases": [ "Open Source Threat Intel" ], - "verified": false, - "last_verified_date": null, + "verified": true, + "last_verified_date": "2026-04-09", "playbook_supported": false, "max_confidence_level": 50, "support_version": ">=5.5.0", "subscription_link": "http://vxvault.net", "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/external-import/vxvault", - "manager_supported": false, + "manager_supported": true, "container_version": "rolling", "container_image": "opencti/connector-vxvault", "container_type": "EXTERNAL_IMPORT" diff --git a/external-import/vxvault/docker-compose.yml b/external-import/vxvault/docker-compose.yml index da138026392..0ed0eac1a5c 100644 --- a/external-import/vxvault/docker-compose.yml +++ b/external-import/vxvault/docker-compose.yml @@ -5,12 +5,12 @@ services: environment: - OPENCTI_URL=http://localhost - OPENCTI_TOKEN=ChangeMe - - CONNECTOR_ID=ChangeMe - - "CONNECTOR_NAME=VX Vault URL list" - - CONNECTOR_SCOPE=vxvault - - CONNECTOR_LOG_LEVEL=error - - VXVAULT_URL=https://vxvault.net/URL_List.php - - VXVAULT_CREATE_INDICATORS=true - - VXVAULT_INTERVAL=3 # In days, must be strictly greater than 1 - - VXVAULT_SSL_VERIFY=False + # - CONNECTOR_ID=d790f4c0-84c1-4e91-8e6b-3a6f3a0e3b7a + # - "CONNECTOR_NAME=VX Vault URL list" + # - CONNECTOR_SCOPE=vxvault + # - CONNECTOR_LOG_LEVEL=error + # - CONNECTOR_DURATION_PERIOD=P3D + # - VXVAULT_URL=https://vxvault.net/URL_List.php + # - VXVAULT_CREATE_INDICATORS=true + # - VXVAULT_SSL_VERIFY=false restart: always diff --git a/external-import/vxvault/src/config.yml.sample b/external-import/vxvault/src/config.yml.sample index 24502ea4463..dec40c747e9 100644 --- a/external-import/vxvault/src/config.yml.sample +++ b/external-import/vxvault/src/config.yml.sample @@ -2,17 +2,15 @@ opencti: url: 'http://localhost' token: 'ChangeMe' -connector: - type: 'EXTERNAL_IMPORT' - id: 'ChangeMe' - name: 'VX Vault URL list' - scope: 'vxvault' - create_indicator: False - log_level: 'info' +# connector: +# id: 'd790f4c0-84c1-4e91-8e6b-3a6f3a0e3b7a' +# name: 'VX Vault URL list' +# scope: 'vxvault' +# log_level: 'error' +# duration_period: 'P3D' # ISO 8601 duration (3 days) -vxvault: - url: 'https://vxvault.net/URL_List.php' - create_indicators: True - interval: 3 # In days, must be strictly greater than 1 - ssl_verify: False +# vxvault: +# url: 'https://vxvault.net/URL_List.php' +# create_indicators: true +# ssl_verify: false diff --git a/external-import/vxvault/src/connector/__init__.py b/external-import/vxvault/src/connector/__init__.py new file mode 100644 index 00000000000..4b4a86a3ea4 --- /dev/null +++ b/external-import/vxvault/src/connector/__init__.py @@ -0,0 +1,4 @@ +from connector.connector import VXVault +from connector.settings import ConnectorSettings + +__all__ = ["VXVault", "ConnectorSettings"] diff --git a/external-import/vxvault/src/connector/connector.py b/external-import/vxvault/src/connector/connector.py new file mode 100644 index 00000000000..20ba54ffb9e --- /dev/null +++ b/external-import/vxvault/src/connector/connector.py @@ -0,0 +1,139 @@ +import re +import ssl +import sys +import urllib.request +from datetime import datetime, timezone + +import stix2 +from connector.settings import ConnectorSettings +from pycti import Identity, OpenCTIConnectorHelper +from stix2 import TLP_WHITE, URL, Bundle + + +class VXVault: + """ + VXVault external import connector. + + Fetches URLs of potential malicious payloads from VX Vault and imports them + as STIX URL observables into OpenCTI. + """ + + def __init__(self, config: ConnectorSettings, helper: OpenCTIConnectorHelper): + self.config = config + self.helper = helper + + self.author = stix2.Identity( + id=Identity.generate_id(name="VX Vault", identity_class="organization"), + name="VX Vault", + identity_class="organization", + description="VX Vault is providing URLs of potential malicious payload.", + external_references=[ + stix2.ExternalReference( + source_name="External Source", + url="http://vxvault.net", + description="VX Vault is providing URLs of potential malicious payload.", + ) + ], + ) + + def process_message(self) -> None: + """ + Connector main process to collect intelligence. + Fetches the VXVault URL list, parses it, and sends STIX bundles to OpenCTI. + """ + self.helper.connector_logger.info( + "[CONNECTOR] Starting connector...", + {"connector_name": self.helper.connect_name}, + ) + work_id = None + try: + now = datetime.now(timezone.utc) + friendly_name = "VXVault run @ " + now.strftime("%Y-%m-%d %H:%M:%S") + work_id = self.helper.api.work.initiate_work( + self.helper.connect_id, friendly_name + ) + if work_id is None: + self.helper.connector_logger.error( + "Failed to initiate work for connector run." + ) + return + + self.helper.connector_logger.info( + "[CONNECTOR] Running connector...", + {"connector_name": self.helper.connect_name}, + ) + + ctx = ssl.create_default_context() + if not self.config.vxvault.ssl_verify: + ctx.check_hostname = False + ctx.verify_mode = ssl.CERT_NONE + + response = urllib.request.urlopen( + self.config.vxvault.url, + context=ctx, + ) + data = response.read().decode("utf-8", errors="replace") + + count = 0 + bundle_objects = [self.author] + for line in data.splitlines(): + count += 1 + if count <= 3: + continue + line = line.strip() + # Skip HTML tags + if re.search(r"^<\/?\w+>", line): + continue + # Skip blank lines + if re.search(r"^\s*$", line): + continue + stix_observable = URL( + value=line, + object_marking_refs=[TLP_WHITE], + custom_properties={ + "description": "VX Vault URL", + "x_opencti_score": 80, + "created_by_ref": self.author["id"], + "x_opencti_create_indicator": self.config.vxvault.create_indicators, + }, + ) + bundle_objects.append(stix_observable) + + bundle = Bundle(objects=bundle_objects, allow_custom=True).serialize() + bundles_sent = self.helper.send_stix2_bundle( + bundle, + update=False, + work_id=work_id, + ) + self.helper.connector_logger.info( + "Sending STIX objects to OpenCTI...", + {"bundles_sent": str(len(bundles_sent))}, + ) + + message = f"{self.helper.connect_name} connector successfully run" + self.helper.api.work.to_processed(work_id, message) + work_id = None + self.helper.connector_logger.info(message) + + except (KeyboardInterrupt, SystemExit): + self.helper.connector_logger.info( + "[CONNECTOR] Connector stopped...", + {"connector_name": self.helper.connect_name}, + ) + if work_id is not None: + self.helper.api.work.to_processed( + work_id, "Connector stopped by user", in_error=True + ) + sys.exit(0) + except Exception as err: + self.helper.connector_logger.error(str(err)) + + def run(self) -> None: + """ + Run the main process encapsulated in a scheduler. + Uses the pycti connector helper scheduler with ISO-8601 duration period. + """ + self.helper.schedule_iso( + message_callback=self.process_message, + duration_period=self.config.connector.duration_period, + ) diff --git a/external-import/vxvault/src/connector/settings.py b/external-import/vxvault/src/connector/settings.py new file mode 100644 index 00000000000..18fe68bc767 --- /dev/null +++ b/external-import/vxvault/src/connector/settings.py @@ -0,0 +1,71 @@ +from datetime import timedelta + +from connectors_sdk import ( + BaseConfigModel, + BaseConnectorSettings, + BaseExternalImportConnectorConfig, + DeprecatedField, + ListFromString, +) +from pydantic import Field + + +class ExternalImportConnectorConfig(BaseExternalImportConnectorConfig): + """ + Override the `BaseExternalImportConnectorConfig` to add parameters and/or defaults + to the configuration for connectors of type `EXTERNAL_IMPORT`. + """ + + id: str = Field( + description="A UUID v4 to identify the connector in OpenCTI.", + default="d790f4c0-84c1-4e91-8e6b-3a6f3a0e3b7a", + ) + name: str = Field( + description="The name of the connector.", + default="VX Vault URL list", + ) + scope: ListFromString = Field( + description="The scope of the connector.", + default=["vxvault"], + ) + duration_period: timedelta = Field( + description="The period of time to await between two runs of the connector.", + default=timedelta(days=3), + ) + + +class VxvaultConfig(BaseConfigModel): + """ + Define parameters and/or defaults for the configuration specific to the VXVault connector. + """ + + url: str = Field( + description="The URL of the VXVault dataset to fetch.", + default="https://vxvault.net/URL_List.php", + ) + create_indicators: bool = Field( + description="If true, create indicators from the imported URLs.", + default=True, + ) + interval: int | None = DeprecatedField( + default=None, + deprecated="Use 'CONNECTOR_DURATION_PERIOD' in the 'connector' section instead.", + new_namespace="connector", + new_namespaced_var="duration_period", + new_value_factory=lambda x: timedelta(days=int(x)), + ) + ssl_verify: bool = Field( + description="Whether to verify SSL certificates when fetching the dataset.", + default=False, + ) + + +class ConnectorSettings(BaseConnectorSettings): + """ + Override `BaseConnectorSettings` to include `ExternalImportConnectorConfig` and `VxvaultConfig`. + """ + + connector: ExternalImportConnectorConfig = Field( + default_factory=ExternalImportConnectorConfig + ) + vxvault: VxvaultConfig = Field(default_factory=VxvaultConfig) diff --git a/external-import/vxvault/src/main.py b/external-import/vxvault/src/main.py new file mode 100644 index 00000000000..c2cd367021a --- /dev/null +++ b/external-import/vxvault/src/main.py @@ -0,0 +1,24 @@ +import traceback + +from connector import ConnectorSettings, VXVault +from pycti import OpenCTIConnectorHelper + +if __name__ == "__main__": + """ + Entry point of the script + + - traceback.print_exc(): This function prints the traceback of the exception to the standard error (stderr). + The traceback includes information about the point in the program where the exception occurred, + which is very useful for debugging purposes. + - exit(1): effective way to terminate a Python program when an error is encountered. + It signals to the operating system and any calling processes that the program did not complete successfully. + """ + try: + settings = ConnectorSettings() + helper = OpenCTIConnectorHelper(config=settings.to_helper_config()) + + connector = VXVault(config=settings, helper=helper) + connector.run() + except Exception: + traceback.print_exc() + exit(1) diff --git a/external-import/vxvault/src/requirements.txt b/external-import/vxvault/src/requirements.txt index 2e1238a8a8e..1dd5a8feec8 100644 --- a/external-import/vxvault/src/requirements.txt +++ b/external-import/vxvault/src/requirements.txt @@ -1,2 +1,4 @@ -pycti==7.260309.0 -urllib3==2.6.3 +pycti==7.260515.0 +urllib3==2.7.0 +pydantic >=2.8.2, <3 +connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk diff --git a/external-import/vxvault/src/vxvault.py b/external-import/vxvault/src/vxvault.py deleted file mode 100644 index da11bd0c206..00000000000 --- a/external-import/vxvault/src/vxvault.py +++ /dev/null @@ -1,190 +0,0 @@ -import os -import re -import ssl -import sys -import time -import urllib.request -from datetime import datetime - -import yaml -from pycti import OpenCTIConnectorHelper, get_config_variable -from stix2 import TLP_WHITE, URL, Bundle - - -class VXVault: - def __init__(self): - # Instantiate the connector helper from config - config_file_path = os.path.dirname(os.path.abspath(__file__)) + "/config.yml" - config = ( - yaml.load(open(config_file_path), Loader=yaml.FullLoader) - if os.path.isfile(config_file_path) - else {} - ) - self.helper = OpenCTIConnectorHelper(config) - # Extra config - self.vxvault_url = get_config_variable( - "VXVAULT_URL", ["vxvault", "url"], config - ) - self.vxvault_interval = get_config_variable( - "VXVAULT_INTERVAL", ["vxvault", "interval"], config, True - ) - self.create_indicators = get_config_variable( - "VXVAULT_CREATE_INDICATORS", - ["vxvault", "create_indicators"], - config, - False, - True, - ) - self.verify_ssl = get_config_variable( - "VXVAULT_SSL_VERIFY", - ["vxvault", "ssl_verify"], - config, - False, - True, - ) - self.update_existing_data = get_config_variable( - "CONNECTOR_UPDATE_EXISTING_DATA", - ["connector", "update_existing_data"], - config, - ) - self.identity = self.helper.api.identity.create( - type="Organization", - name="VX Vault", - description="VX Vault is providing URLs of potential malicious payload.", - ) - - def get_interval(self): - return int(self.vxvault_interval) * 60 * 60 * 24 - - def next_run(self, seconds): - return - - def run(self): - self.helper.log_info("Fetching VXVault dataset...") - while True: - try: - # Get the current timestamp and check - timestamp = int(time.time()) - current_state = self.helper.get_state() - if current_state is not None and "last_run" in current_state: - last_run = current_state["last_run"] - self.helper.log_info( - "Connector last run: " - + datetime.utcfromtimestamp(last_run).strftime( - "%Y-%m-%d %H:%M:%S" - ) - ) - else: - last_run = None - self.helper.log_info("Connector has never run") - # If the last_run is more than interval-1 day - if last_run is None or ( - (timestamp - last_run) - > ((int(self.vxvault_interval) - 1) * 60 * 60 * 24) - ): - self.helper.log_info("Connector will run!") - now = datetime.utcfromtimestamp(timestamp) - friendly_name = "VXVault run @ " + now.strftime("%Y-%m-%d %H:%M:%S") - work_id = self.helper.api.work.initiate_work( - self.helper.connect_id, friendly_name - ) - try: - ctx = ssl.create_default_context() - if not bool(self.verify_ssl): - ctx.check_hostname = False - ctx.verify_mode = ssl.CERT_NONE - - response = urllib.request.urlopen( - self.vxvault_url, - context=ctx, - ) - image = response.read() - with open( - os.path.dirname(os.path.abspath(__file__)) + "/data.txt", - "wb", - ) as file: - file.write(image) - count = 0 - bundle_objects = [] - with open( - os.path.dirname(os.path.abspath(__file__)) + "/data.txt" - ) as fp: - for line in fp: - count += 1 - if count <= 3: - continue - line = line.strip() - matchHtmlTag = re.search(r"^<\/?\w+>", line) - if matchHtmlTag: - continue - matchBlankLine = re.search(r"^\s*$", line) - if matchBlankLine: - continue - stix_observable = URL( - value=line, - object_marking_refs=[TLP_WHITE], - custom_properties={ - "description": "VX Vault URL", - "x_opencti_score": 80, - "created_by_ref": self.identity["standard_id"], - "x_opencti_create_indicator": self.create_indicators, - }, - ) - bundle_objects.append(stix_observable) - bundle = Bundle( - objects=bundle_objects, allow_custom=True - ).serialize() - self.helper.send_stix2_bundle( - bundle, - update=self.update_existing_data, - work_id=work_id, - ) - if os.path.exists( - os.path.dirname(os.path.abspath(__file__)) + "/data.txt" - ): - os.remove( - os.path.dirname(os.path.abspath(__file__)) + "/data.txt" - ) - except Exception as e: - self.helper.log_error(str(e)) - # Store the current timestamp as a last run - message = "Connector successfully run, storing last_run as " + str( - timestamp - ) - self.helper.log_info(message) - self.helper.set_state({"last_run": timestamp}) - self.helper.api.work.to_processed(work_id, message) - self.helper.log_info( - "Last_run stored, next run in: " - + str(round(self.get_interval() / 60 / 60 / 24, 2)) - + " days" - ) - else: - new_interval = self.get_interval() - (timestamp - last_run) - self.helper.log_info( - "Connector will not run, next run in: " - + str(round(new_interval / 60 / 60 / 24, 2)) - + " days" - ) - except (KeyboardInterrupt, SystemExit): - self.helper.log_info("Connector stop") - sys.exit(0) - except Exception as e: - self.helper.log_error(str(e)) - - if self.helper.connect_run_and_terminate: - self.helper.log_info("Connector stop") - self.helper.force_ping() - sys.exit(0) - - time.sleep(60) - - -if __name__ == "__main__": - try: - VXVaultConnector = VXVault() - VXVaultConnector.run() - except Exception as e: - print(e) - time.sleep(10) - sys.exit(0) diff --git a/external-import/vxvault/tests/conftest.py b/external-import/vxvault/tests/conftest.py new file mode 100644 index 00000000000..5ee8fc0e226 --- /dev/null +++ b/external-import/vxvault/tests/conftest.py @@ -0,0 +1,4 @@ +import os +import sys + +sys.path.append(os.path.join(os.path.dirname(__file__), "..", "src")) diff --git a/external-import/vxvault/tests/test-requirements.txt b/external-import/vxvault/tests/test-requirements.txt new file mode 100644 index 00000000000..d405632324b --- /dev/null +++ b/external-import/vxvault/tests/test-requirements.txt @@ -0,0 +1,2 @@ +-r ../src/requirements.txt +pytest==9.0.3 diff --git a/external-import/vxvault/tests/test_main.py b/external-import/vxvault/tests/test_main.py new file mode 100644 index 00000000000..ef51a79909a --- /dev/null +++ b/external-import/vxvault/tests/test_main.py @@ -0,0 +1,99 @@ +from typing import Any +from unittest.mock import MagicMock + +import pytest +from connector import ConnectorSettings, VXVault +from pycti import OpenCTIConnectorHelper + + +@pytest.fixture +def mock_opencti_connector_helper(monkeypatch): + """Mock all heavy dependencies of OpenCTIConnectorHelper, typically API calls to OpenCTI.""" + + module_import_path = "pycti.connector.opencti_connector_helper" + monkeypatch.setattr(f"{module_import_path}.killProgramHook", MagicMock()) + monkeypatch.setattr(f"{module_import_path}.sched.scheduler", MagicMock()) + monkeypatch.setattr(f"{module_import_path}.ConnectorInfo", MagicMock()) + monkeypatch.setattr(f"{module_import_path}.OpenCTIApiClient", MagicMock()) + monkeypatch.setattr(f"{module_import_path}.OpenCTIConnector", MagicMock()) + monkeypatch.setattr(f"{module_import_path}.OpenCTIMetricHandler", MagicMock()) + monkeypatch.setattr(f"{module_import_path}.PingAlive", MagicMock()) + + +class StubConnectorSettings(ConnectorSettings): + """ + Subclass of `ConnectorSettings` (implementation of `BaseConnectorSettings`) for testing purpose. + It overrides `BaseConnectorSettings._load_config_dict` to return a fake but valid config dict. + """ + + @classmethod + def _load_config_dict(cls, _, handler) -> dict[str, Any]: + return handler( + { + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + "connector": { + "id": "connector-id", + "name": "Test Connector", + "scope": "test, connector", + "log_level": "error", + "duration_period": "PT5M", + }, + "vxvault": { + "url": "https://vxvault.net/URL_List.php", + "create_indicators": True, + "ssl_verify": False, + }, + } + ) + + +def test_connector_settings_is_instantiated(): + """ + Test that the implementation of `BaseConnectorSettings` (from `connectors-sdk`) can be instantiated successfully: + - the implemented class MUST have a method `to_helper_config` (inherited from `BaseConnectorSettings`) + - the method `to_helper_config` MUST return a dict (as in base class) + """ + settings = StubConnectorSettings() + + assert isinstance(settings, ConnectorSettings) + assert isinstance(settings.to_helper_config(), dict) + + +def test_opencti_connector_helper_is_instantiated(mock_opencti_connector_helper): + """ + Test that `OpenCTIConnectorHelper` (from `pycti`) can be instantiated successfully: + - the value of `settings.to_helper_config` MUST be the expected dict for `OpenCTIConnectorHelper` + - the helper MUST be able to get its instance's attributes from the config dict + + :param mock_opencti_connector_helper: `OpenCTIConnectorHelper` is mocked during this test to avoid any external calls to OpenCTI API + """ + settings = StubConnectorSettings() + helper = OpenCTIConnectorHelper(config=settings.to_helper_config()) + + assert helper.opencti_url == "http://localhost:8080/" + assert helper.opencti_token == "test-token" + assert helper.connect_id == "connector-id" + assert helper.connect_name == "Test Connector" + assert helper.connect_scope == "test,connector" + assert helper.log_level == "ERROR" + assert helper.connect_duration_period == "PT5M" + + +def test_connector_is_instantiated(mock_opencti_connector_helper): + """ + Test that the connector's main class can be instantiated successfully: + - the connector's main class MUST be able to access env/config vars through `self.config` + - the connector's main class MUST be able to access `pycti` API through `self.helper` + + :param mock_opencti_connector_helper: `OpenCTIConnectorHelper` is mocked during this test to avoid any external calls to OpenCTI API + """ + settings = StubConnectorSettings() + helper = OpenCTIConnectorHelper(config=settings.to_helper_config()) + + connector = VXVault(config=settings, helper=helper) + + assert connector.config == settings + assert connector.helper == helper diff --git a/external-import/vxvault/tests/tests_connector/test_settings.py b/external-import/vxvault/tests/tests_connector/test_settings.py new file mode 100644 index 00000000000..eb8c4ba74e3 --- /dev/null +++ b/external-import/vxvault/tests/tests_connector/test_settings.py @@ -0,0 +1,183 @@ +import warnings +from datetime import timedelta +from typing import Any + +import pytest +from connector import ConnectorSettings +from connectors_sdk import BaseConfigModel, ConfigValidationError + + +@pytest.mark.parametrize( + "settings_dict", + [ + pytest.param( + { + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + "connector": { + "id": "connector-id", + "name": "Test Connector", + "scope": "test, connector", + "log_level": "error", + "duration_period": "PT5M", + }, + "vxvault": { + "url": "https://vxvault.net/URL_List.php", + "create_indicators": True, + "ssl_verify": False, + }, + }, + id="full_valid_settings_dict", + ), + pytest.param( + { + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + "connector": {}, + "vxvault": {}, + }, + id="minimal_valid_settings_dict", + ), + ], +) +def test_settings_should_accept_valid_input(settings_dict): + """ + Test that `ConnectorSettings` (implementation of `BaseConnectorSettings` from `connectors-sdk`) accepts valid input. + For the test purpose, `BaseConnectorSettings._load_config_dict` is overridden to return + a fake but valid dict (instead of the env/config vars parsed from `config.yml`, `.env` or env vars). + + :param settings_dict: The dict to use as `ConnectorSettings` input + """ + + class FakeConnectorSettings(ConnectorSettings): + """ + Subclass of `ConnectorSettings` (implementation of `BaseConnectorSettings`) for testing purpose. + It overrides `BaseConnectorSettings._load_config_dict` to return a fake but valid config dict. + """ + + @classmethod + def _load_config_dict(cls, _, handler) -> dict[str, Any]: + return handler(settings_dict) + + settings = FakeConnectorSettings() + + assert isinstance(settings.opencti, BaseConfigModel) is True + assert isinstance(settings.connector, BaseConfigModel) is True + assert isinstance(settings.vxvault, BaseConfigModel) is True + + +@pytest.mark.parametrize( + "settings_dict, field_name", + [ + pytest.param( + {}, + "settings", + id="empty_settings_dict", + ), + pytest.param( + { + "opencti": { + "url": "http://localhost:8080", + }, + "connector": { + "id": "connector-id", + "name": "Test Connector", + "scope": "test, connector", + "log_level": "error", + "duration_period": "PT5M", + }, + "vxvault": { + "url": "https://vxvault.net/URL_List.php", + "create_indicators": True, + "ssl_verify": False, + }, + }, + "opencti.token", + id="missing_opencti_token", + ), + pytest.param( + { + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + "connector": { + "id": 123456, + "name": "Test Connector", + "scope": "test, connector", + "log_level": "error", + "duration_period": "PT5M", + }, + "vxvault": { + "url": "https://vxvault.net/URL_List.php", + "create_indicators": True, + "ssl_verify": False, + }, + }, + "connector.id", + id="invalid_connector_id", + ), + ], +) +def test_settings_should_raise_when_invalid_input(settings_dict, field_name): + """ + Test that `ConnectorSettings` (implementation of `BaseConnectorSettings` from `connectors-sdk`) raises on invalid input. + For the test purpose, `BaseConnectorSettings._load_config_dict` is overridden to return + a fake and invalid dict (instead of the env/config vars parsed from `config.yml`, `.env` or env vars). + + :param settings_dict: The dict to use as `ConnectorSettings` input + """ + + class FakeConnectorSettings(ConnectorSettings): + """ + Subclass of `ConnectorSettings` (implementation of `BaseConnectorSettings`) for testing purpose. + It overrides `BaseConnectorSettings._load_config_dict` to return a fake but valid config dict. + """ + + @classmethod + def _load_config_dict(cls, _, handler) -> dict[str, Any]: + return handler(settings_dict) + + with pytest.raises(ConfigValidationError) as err: + FakeConnectorSettings() + assert str("Error validating configuration") in str(err) + + +def test_settings_should_migrate_deprecated_interval(): + """ + Test that the deprecated `VXVAULT_INTERVAL` (days) is automatically migrated + to `CONNECTOR_DURATION_PERIOD` via `DeprecatedField` metadata in `BaseConnectorSettings`. + """ + + class FakeConnectorSettings(ConnectorSettings): + @classmethod + def _load_config_dict(cls, _, handler) -> dict[str, Any]: + return handler( + { + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + "connector": { + "id": "connector-id", + "name": "Test Connector", + "scope": "test, connector", + }, + "vxvault": { + "url": "https://vxvault.net/URL_List.php", + "interval": 5, + }, + } + ) + + with warnings.catch_warnings(record=True) as w: + warnings.simplefilter("always") + settings = FakeConnectorSettings() + + assert settings.connector.duration_period == timedelta(days=5) + warning_messages = [str(warning.message) for warning in w] + assert any("interval" in msg.lower() for msg in warning_messages) diff --git a/external-import/wiz/src/requirements.txt b/external-import/wiz/src/requirements.txt index c55331d2020..28ced3192ed 100644 --- a/external-import/wiz/src/requirements.txt +++ b/external-import/wiz/src/requirements.txt @@ -1,3 +1,3 @@ -pycti==7.260309.0 +pycti==7.260515.0 pydantic >=2.8.2, <3 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk diff --git a/external-import/wiz/tests/test-requirements.txt b/external-import/wiz/tests/test-requirements.txt index b4d12f78f29..a30bbfc3bde 100644 --- a/external-import/wiz/tests/test-requirements.txt +++ b/external-import/wiz/tests/test-requirements.txt @@ -1,5 +1,5 @@ # Main dependencies needs to be installed -r ../src/requirements.txt -pytest==8.3.5 +pytest==9.0.3 pytest-mock==3.14.0 freezegun==1.5.1 \ No newline at end of file diff --git a/external-import/zerofox/README.md b/external-import/zerofox/README.md index 6ca84284ac8..cc4951ed12c 100644 --- a/external-import/zerofox/README.md +++ b/external-import/zerofox/README.md @@ -28,7 +28,7 @@ the RabbitMQ on the port configured in the OpenCTI platform. ### Requirements -- OpenCTI Platform >= 7.260309.0 +- OpenCTI Platform >= 7.260515.0 ### Configuration diff --git a/external-import/zerofox/src/requirements.txt b/external-import/zerofox/src/requirements.txt index f8607ce1083..382f1e391dc 100644 --- a/external-import/zerofox/src/requirements.txt +++ b/external-import/zerofox/src/requirements.txt @@ -1,6 +1,6 @@ -requests>=2.31.0,<3.0.0 +requests>=2.31.0,<=2.33.0 pydantic>=2.7.1,<3.0.0 -pycti==7.260309.0 +pycti==7.260515.0 urllib3>=2.2.1,<3.0.0 stix2[semantic]>=3.0.1,<4.0.0 pycountry>=24.6.1,<25.0.0 diff --git a/external-import/zvelo/src/requirements.txt b/external-import/zvelo/src/requirements.txt index e9684a32073..f5b8181a0c7 100644 --- a/external-import/zvelo/src/requirements.txt +++ b/external-import/zvelo/src/requirements.txt @@ -1 +1 @@ -pycti==7.260309.0 \ No newline at end of file +pycti==7.260515.0 \ No newline at end of file diff --git a/internal-enrichment/abuseipdb/src/connector/abuseipdb.py b/internal-enrichment/abuseipdb/src/connector/abuseipdb.py index 4caa1712a09..0f65deaf072 100644 --- a/internal-enrichment/abuseipdb/src/connector/abuseipdb.py +++ b/internal-enrichment/abuseipdb/src/connector/abuseipdb.py @@ -119,7 +119,7 @@ def _process_message(self, data: Dict) -> str: found = [] cl = defaultdict(dict) for report in data["reports"]: - countryN = report["reporterCountryCode"] + countryN = report.get("reporterCountryCode") if countryN in cl: cl[countryN]["count"] += 1 cl[countryN]["firstseen"] = report["reportedAt"] diff --git a/internal-enrichment/abuseipdb/src/requirements.txt b/internal-enrichment/abuseipdb/src/requirements.txt index f8eb200ca85..c39db443cd3 100644 --- a/internal-enrichment/abuseipdb/src/requirements.txt +++ b/internal-enrichment/abuseipdb/src/requirements.txt @@ -1,5 +1,5 @@ python-dateutil==2.9.0.post0 pydantic-settings==2.10.1 pydantic>=2.10, <3 -pycti==7.260309.0 +pycti==7.260515.0 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk diff --git a/internal-enrichment/anyrun-lookup/Dockerfile b/internal-enrichment/anyrun-lookup/Dockerfile new file mode 100644 index 00000000000..045451cc5ca --- /dev/null +++ b/internal-enrichment/anyrun-lookup/Dockerfile @@ -0,0 +1,15 @@ +FROM python:3.12-alpine +ENV CONNECTOR_TYPE=INTERNAL_ENRICHMENT + +# Install Python modules +RUN apk --no-cache add git build-base libmagic libffi-dev libxml2-dev libxslt-dev + +# Copy the connector +COPY src /opt/connector +WORKDIR /opt/connector +RUN pip3 install --no-cache-dir -r requirements.txt + +# Expose and entrypoint +COPY entrypoint.sh / +RUN chmod +x /entrypoint.sh +ENTRYPOINT ["/entrypoint.sh"] \ No newline at end of file diff --git a/internal-enrichment/anyrun-lookup/README.md b/internal-enrichment/anyrun-lookup/README.md new file mode 100644 index 00000000000..b691a7baf2b --- /dev/null +++ b/internal-enrichment/anyrun-lookup/README.md @@ -0,0 +1,285 @@ +

+ + ANY.RUN logo + +

+ +______________________________________________________________________ + +# OpenCTI ANY.RUN TI Lookup Connector + +| Status | Date | Comment | +|------------------|------|---------| +| Partner Verified | - | - | + +The ANY.RUN TI Lookup connector analyzes StixFile, Artifact, Domain-Name, Hostname, IPv4-Addr or Url observables in the ANY.RUN Threat Intelligence Lookup, enriching them with search results including threat scores, tags, country relationships and IOCs. + +## Table of Contents + +- [OpenCTI ANY.RUN TI Lookup Connector](#opencti-anyrun-ti-lookup-connector) + - [Table of Contents](#table-of-contents) + - [Introduction](#introduction) + - [Installation](#installation) + - [Requirements](#requirements) + - [Generate API-KEY](#generate-api-key) + - [Configuration variables](#configuration-variables) + - [OpenCTI environment variables](#opencti-environment-variables) + - [Base connector environment variables](#base-connector-environment-variables) + - [Base ANY.RUN environment variables](#base-anyrun-environment-variables) + - [Deployment](#deployment) + - [Docker Deployment](#docker-deployment) + - [Manual Deployment](#manual-deployment) + - [Usage](#usage) + - [Behavior](#behavior) + - [Debugging](#debugging) + - [Additional information](#additional-information) + - [Support](#support) + +## Introduction + +ANY.RUN’s [Threat Intelligence Lookup](https://any.run/threat-intelligence-lookup/?utm_source=anyrungithub&utm_medium=documentation&utm_campaign=opencti_lookup&utm_content=linktolookuplanding) (TI Lookup) is a service that allows you to browse IOCs and related threat data to simplify and enrich cyberattack investigations. + +The Threat Intelligence Lookup сonnector enables OpenCTI users to browse various types of IOCs, from IPs and domains to URLs and hashes. + +* Browse indicators in TI Lookup without leaving OpenCTI +* Receive data related to your query to gain actionable insights +* Use them for incident response, to create new rules, train models, update playbooks, etc. + +As a result of integration of TI Lookup with OpenCTI, you’ll achieve: + +* Early Threat Detection: Correlate IOCs to identify incidents before they escalate. +* Proactive Defense Enrichment: Collect indicators from attacks on other companies to update your detection systems. +* Reduced MTTR and Increased Detection Rate: Access to rich threat context enables SOCs to make informed decisions fast. + +## Installation + +To use this integration, make sure that you have an active [ANY.RUN TI Lookup license](https://intelligence.any.run/plans/?utm_source=anyrungithub&utm_medium=documentation&utm_campaign=opencti_lookup&utm_content=linktotiplans). +ANY.RUN TI Lookup connector for OpenCTI is a standalone Python service that requires access to both the OpenCTI platform and RabbitMQ. +RabbitMQ credentials and connection parameters are provided automatically by the OpenCTI API, based on the platform’s configuration. + +You can enable the connector in one of the following ways: + +* Run as a Python process: simply configure the config.yml file with the appropriate values and launch the connector directly. +* Run in Docker: use the OpenCTI docker image opencti/connector-anyrun-lookup + +### Requirements + +- OpenCTI Platform >= 6.0.0 +- Available on ANY.RUN plans with API access, including trial + +### Generate API-KEY + +* Go to [ANY.RUN Sandbox](https://app.any.run/?utm_source=anyrungithub&utm_medium=documentation&utm_campaign=opencti_sandbox&utm_content=linktoservice) +* Click Profile > API and Limits > Generate > Copy +![img.png](static/ANYRUN_API_TOKEN.png) + +## Configuration variables + +There are a number of configuration options, which are set either in `docker-compose.yml` (for Docker) or in `config.yml` (for manual deployment). + +#### OpenCTI environment variables +| Parameter | Docker envvar | Mandatory | Description | +|------------------------------|----------------------------------|-----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `opencti_url` | `OPENCTI_URL` | Yes | The URL of the OpenCTI platform. Note that final `/` should be avoided. Example value: `http://opencti:8080` | +| `opencti_token` | `OPENCTI_TOKEN` | Yes | The default admin token configured in the OpenCTI platform parameters file. We recommend setting up a separate ``OPENCTI_TOKEN`` named **ANY.RUN** to identify the work of our integrations. | + +#### Base connector environment variables +| Parameter | Docker envvar | Mandatory | Description | +|------------------------------|----------------------------------|-----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `connector_id` | `CONNECTOR_ID` | Yes | A valid arbitrary `UUIDv4` that must be unique for this connector. | +| `connector_type` | `CONNECTOR_TYPE` | Yes | A connector type. | +| `connector_name` | `CONNECTOR_NAME` | Yes | A connector name to be shown in OpenCTI. | +| `connector_scope` | `CONNECTOR_SCOPE` | Yes | Supported scope. E. g., `text/html`. | +| `connector_auto` | `CONNECTOR_AUTO` | Yes | Enable/disable auto-enrichment of observables. | +| `connector_confidence_level` | `CONNECTOR_CONFIDENCE_LEVEL` | Yes | The default confidence level for created sightings (a number between 0 and 100, where 0 = Unknown and 100 = Fully trusted). | +| `connector_log_level` | `CONNECTOR_LOG_LEVEL` | Yes | The log level for this connector, could be `debug`, `info`, `warn` or `error` (less verbose). | + + +#### Base ANY.RUN environment variables +| Parameter | Docker env_var | Mandatory | Description | +|------------------------------|----------------------------------|-----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `token` | `ANYRUN_API_KEY` | Yes | ANY.RUN Lookup API-KEY. See "Generate API KEY" section in the README file. | +| `lookup_depth` | `ANYRUN_LOOKUP_DEPTH` | Yes | Specify the number of days from the current date for which you want to lookup. | + +## Deployment + +### Docker Deployment + +Build the Docker image: + +```bash +docker build -t opencti/connector-anyrun-lookup:latest . +``` + +Configure the connector in `docker-compose.yml`: + +```yaml +connector-anyrun-ti-lookup: + image: anyrun/opencti-connector-anyrun-ti-lookup:latest + environment: + # OpenCTI settings. + - OPENCTI_URL=http://localhost # The URL of the OpenCTI platform. Note that final `/` should be avoided. Example value: `http://opencti:8080` + - OPENCTI_TOKEN=ChangeMe # The default admin token configured in the OpenCTI platform parameters file. + + # Connector settings. + - CONNECTOR_ID=ChangeMe # A valid arbitrary `UUIDv4` that must be unique for this connector. + - CONNECTOR_TYPE=INTERNAL_ENRICHMENT # A connector type. + - CONNECTOR_NAME=ANY.RUN TI Lookup # A connector name to be shown in OpenCTI. + - CONNECTOR_SCOPE=StixFile,Artifact,Domain-Name,Hostname,IPv4-Addr,Url # Supported scope. E. g., `text/html`. + - CONNECTOR_AUTO=false # Enable/disable auto-enrichment of observables. + - CONNECTOR_CONFIDENCE_LEVEL=75 # From 0 (Unknown) to 100 (Fully trusted) + - CONNECTOR_LOG_LEVEL=info # The log level for this connector, could be `debug`, `info`, `warn` or `error` (less verbose). + + # ANY.RUN base settings. + - ANYRUN_API_KEY=ChangeMe # ANY.RUN Lookup API-KEY. See "Generate API token" section in the README file. + - ANYRUN_LOOKUP_DEPTH=90 # Specify the number of days from the current date for which you want to lookup. + restart: always +``` + +Start the connector: + +```bash +docker compose up -d +``` + +### Manual Deployment + +1. Copy and configure `config.yml` from the provided `config.yml.sample`. + +2. Install dependencies: + +```bash +pip3 install -r requirements.txt +``` + +3. Start the connector from the `src` directory: + +```bash +python3 anyrun_lookup.py +``` + +## Usage + +The connector enriches StixFile, Artifact, Domain-Name, Hostname, IPv4-Addr or Url observables by submitting them to the ANY.RUN TI Lookup. + +**Observations → Observables** + +Select a StixFile, Artifact, Domain-Name, Hostname, IPv4-Addr or Url then click the enrichment button and choose ANY.RUN TI Lookup. + +## Behavior + +The connector submits observables to ANY.RUN TI Lookup and imports the results back into OpenCTI. + +### Data Flow + +```mermaid +graph LR + subgraph OpenCTI Input + StixFile[StixFile Observable] + Artifact[Artifact Observable] + Domain-Name[Domain-Name Observable] + Hostname[Hostname Observable] + IPv4-Addr[IPv4-Addr Observable] + Url[Url Observable] + + end + + subgraph ANY.RUN TI Lookup + Intelligence[Threat Intelligence] + end + + subgraph OpenCTI Output + EnrichedObs[Enriched Observable] + Labels[Tags/Labels] + ExtRef[External Reference] + IOCs[IOC Observables] + Indicators[Indicators] + Note[Score Note] + end + + StixFile --> Intelligence + Artifact --> Intelligence + Domain-Name --> Intelligence + Hostname --> Intelligence + IPv4-Addr --> Intelligence + Url --> Intelligence + Intelligence --> EnrichedObs + Intelligence --> Labels + Intelligence --> ExtRef + Intelligence --> IOCs + Intelligence --> Indicators + Intelligence --> Note + +``` + +### Enrichment Mapping + +| ANY.RUN Data | OpenCTI Entity/Property | Description | +|------------------------|-------------------------|---------------------------------------| +| Lookup URL | External Reference | Link to the ANY.RUN TI Lookup request | +| lookup.summary.tags | Labels | Tags assigned by ANY.RUN analysts | +| lookup.summary.verdcit | Observable Score | Threat verdict score from analysis | +| IOCs (domain) | Domain-Name Observable | Extracted domain IOCs with indicators | +| IOCs (url) | URL Observable | Extracted URL IOCs with indicators | +| IOCs (ip) | IPv4-Addr Observable | Extracted IP IOCs with indicators | + +### IOC Types Mapping + +| ANY.RUN IOC Type | OpenCTI Observable Type | +|----------------|-------------------------| +| domain | Domain-Name | +| url | Url | +| ip | IPv4-Addr | + + +### Processing Details + +1. **Analysis Submission**: Submits StixFile, Artifact, Domain-Name, Hostname, IPv4-Addr or Url to ANY.RUN TI Lookup with configured lookup settings +2. **Tags/Labels**: Imports lookup tags as labels on the observable +3. **Country Relationship**: Adds country relationship to the main observable if it's type is IPv4-Addr +4. **Score Update**: Updates observable score with verdict score (or creates note if lower) +5. **IOCs**: Creates observables and indicators for malicious and suspiocus IOCs +6. **Source tasks**: Adds related tasks to the main observable if applicable + +### Generated STIX Objects + +| STIX Object Type | Condition | Description | +|-----------------------|------------------------|------------------------------------------------------------------| +| External Reference | Always | Link to ANY.RUN TI Lookup request | +| Labels | When tags present | Analysis tags applied to observable | +| Note | When score is lower | Records ANY.RUN score when lower than existing | +| Domain-Name | IOC enabled | Extracted malicious domains | +| URL | IOC enabled | Extracted malicious URLs | +| IPv4-Addr | IOC enabled | Extracted malicious IP addresses | +| Relationship | Various | `related-to`, `based-on`, `located-at` linking entities together | + +### Relationships Created + +- Original Observable → `related-to` → Extracted IOC Observables +- Indicator → `based-on` → Extracted IOC Observables +- Original IPv4-Addr Observable → `located-at` → TI Lookup GEO Country information + +## Debugging + +Enable verbose logging by setting: + +```env +CONNECTOR_LOG_LEVEL=debug +``` + +Log output includes: +- Lookup status polling +- IOC extraction progress +- Relationship creation status + +## Additional information + +- **Analysis Time**: TI Lookup typically takes 5-10 seconds depending on the observable +- **Enterprise Plan Required**: API access requires at minimum the "Enterprise" subscription plan +- **Rate Limits**: API calls are subject to ANY.RUN rate limits based on subscription tier +- **API Access Required**: Available on ANY.RUN plans with API access, including trial +- **Organization Identity**: The connector creates an "ANY.RUN" organization identity for attribution + +## Support +This is an ANY.RUN’s supported connector. You can write to us for help with integration via [techsupport@any.run](mailto:techsupport@any.run) . +Contact us for a quote or demo via [this form](https://app.any.run/contact-us/?utm_source=anyrungithub&utm_medium=documentation&utm_campaign=opencti_lookup&utm_content=linktocontactus). diff --git a/internal-enrichment/anyrun-lookup/__metadata__/CONNECTOR_CONFIG_DOC.md b/internal-enrichment/anyrun-lookup/__metadata__/CONNECTOR_CONFIG_DOC.md new file mode 100644 index 00000000000..25b9b093b71 --- /dev/null +++ b/internal-enrichment/anyrun-lookup/__metadata__/CONNECTOR_CONFIG_DOC.md @@ -0,0 +1,12 @@ +# Connector Configurations + +Below is an exhaustive enumeration of all configurable parameters available, each accompanied by detailed explanations of their purposes, default behaviors, and usage guidelines to help you understand and utilize them effectively. + +### Type: `object` + +| Property | Type | Required | Possible values | Deprecated | Default | Description | +| -------- |-----------| ------ |-----------------------------------------------------------------------------------------------------------| ---------- |---------|--------------------------------------------------------------------------------------------------------------------------------| +| OPENCTI_URL | `string` | ✅ | Format: [`uri`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | | The base URL of the OpenCTI instance. | +| OPENCTI_TOKEN | `string` | ✅ | string | | | The API token to connect to OpenCTI. | +| ANYRUN_API_KEY | `string` | ✅ | Format: [`password`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | | ANY.RUN Sandbox API-KEY. See 'Generate API KEY' section in the README file. | +| ANYRUN_LOOKUP_DEPTH | `integer` | | integer | | `90` | Specify the number of days from the current date for which you want to lookup. | diff --git a/internal-enrichment/anyrun-lookup/__metadata__/connector_config_schema.json b/internal-enrichment/anyrun-lookup/__metadata__/connector_config_schema.json new file mode 100644 index 00000000000..68acfd185a8 --- /dev/null +++ b/internal-enrichment/anyrun-lookup/__metadata__/connector_config_schema.json @@ -0,0 +1,73 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://www.filigran.io/connectors/anyrun-lookup_config.schema.json", + "type": "object", + "properties": { + "OPENCTI_URL": { + "description": "The base URL of the OpenCTI instance.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "OPENCTI_TOKEN": { + "description": "The API token to connect to OpenCTI.", + "type": "string" + }, + "CONNECTOR_NAME": { + "default": "ANY.RUN task", + "description": "The name of the connector.", + "type": "string" + }, + "CONNECTOR_SCOPE": { + "default": [ + "Artifact", + "Url" + ], + "description": "The scope of the connector.", + "items": { + "type": "string" + }, + "type": "array" + }, + "CONNECTOR_LOG_LEVEL": { + "default": "error", + "description": "The minimum level of logs to display.", + "enum": [ + "debug", + "info", + "warn", + "warning", + "error" + ], + "type": "string" + }, + "CONNECTOR_TYPE": { + "const": "INTERNAL_ENRICHMENT", + "default": "INTERNAL_ENRICHMENT", + "type": "string" + }, + "CONNECTOR_AUTO": { + "default": false, + "description": "Whether the connector should run automatically when an entity is created or updated.", + "type": "boolean" + }, + "ANYRUN_API_KEY": { + "description": "ANY.RUN TI Lookup API-KEY. See 'Generate API KEY' section in the README file.", + "format": "password", + "type": "string", + "writeOnly": true + }, + "ANYRUN_LOOKUP_DEPTH": { + "default": 90, + "type": "integer", + "description": "Specify the number of days from the current date for which you want to lookup." + } + }, + "required": [ + "OPENCTI_URL", + "OPENCTI_TOKEN", + "ANYRUN_API_KEY" + ], + "additionalProperties": true +} \ No newline at end of file diff --git a/internal-enrichment/anyrun-lookup/__metadata__/connector_manifest.json b/internal-enrichment/anyrun-lookup/__metadata__/connector_manifest.json new file mode 100644 index 00000000000..49bff65620e --- /dev/null +++ b/internal-enrichment/anyrun-lookup/__metadata__/connector_manifest.json @@ -0,0 +1,23 @@ +{ + "title": "ANY.RUN TI Lookup", + "slug": "anyrun-lookup", + "description": "ANY.RUN’s TI Lookup is a service that allows you to browse IOCs and related threat data to simplify and enrich cyberattack investigations.", + "short_description": "Analyze StixFile, Artifact, Domain-Name, Hostname, IPv4-Addr or Url in ANY.RUN TI Lookup", + "logo": "internal-enrichment/anyrun-lookup/__metadata__/logo.png", + "use_cases": [ + "Enrichment & Analysis", + "Threat Intelligence", + "Commercial Threat Intel" + ], + "verified": true, + "last_verified_date": null, + "playbook_supported": false, + "max_confidence_level": 75, + "support_version": ">=6.0.0", + "subscription_link": null, + "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/internal-enrichment/anyrun-lookup", + "manager_supported": true, + "container_version": "rolling", + "container_image": "opencti/connector-anyrun-lookup", + "container_type": "INTERNAL_ENRICHMENT" +} \ No newline at end of file diff --git a/internal-enrichment/anyrun-lookup/__metadata__/logo.png b/internal-enrichment/anyrun-lookup/__metadata__/logo.png new file mode 100644 index 00000000000..037989efd42 Binary files /dev/null and b/internal-enrichment/anyrun-lookup/__metadata__/logo.png differ diff --git a/internal-enrichment/anyrun-lookup/docker-compose.yml b/internal-enrichment/anyrun-lookup/docker-compose.yml new file mode 100644 index 00000000000..ab45b586d18 --- /dev/null +++ b/internal-enrichment/anyrun-lookup/docker-compose.yml @@ -0,0 +1,22 @@ +version: '3' +services: + connector-anyrun-ti-lookup: + image: opencti/connector-anyrun-lookup:latest + environment: + # OpenCTI settings. + - OPENCTI_URL=http://localhost # The URL of the OpenCTI platform. Note that final `/` should be avoided. Example value: `http://opencti:8080` + - OPENCTI_TOKEN=ChangeMe # The default admin token configured in the OpenCTI platform parameters file. + + # Connector settings. + - CONNECTOR_ID=ChangeMe # A valid arbitrary `UUIDv4` that must be unique for this connector. + - CONNECTOR_TYPE=INTERNAL_ENRICHMENT # A connector type. + - CONNECTOR_NAME=ANY.RUN TI Lookup # A connector name to be shown in OpenCTI. + - CONNECTOR_SCOPE=StixFile,Artifact,Domain-Name,Hostname,IPv4-Addr,Url # Supported scope. E. g., `text/html`. + - CONNECTOR_AUTO=false # Enable/disable auto-enrichment of observables. + - CONNECTOR_CONFIDENCE_LEVEL=100 # From 0 (Unknown) to 100 (Fully trusted) + - CONNECTOR_LOG_LEVEL=info # The log level for this connector, could be `debug`, `info`, `warn` or `error` (less verbose). + + # ANY.RUN base settings. + - ANYRUN_API_KEY=ChangeMe # ANY.RUN Lookup API-KEY. See "Generate API token" section in the README file. + - ANYRUN_LOOKUP_DEPTH=90 # Specify the number of days from the current date for which you want to lookup. + restart: always diff --git a/internal-enrichment/anyrun-lookup/entrypoint.sh b/internal-enrichment/anyrun-lookup/entrypoint.sh new file mode 100644 index 00000000000..11a15812074 --- /dev/null +++ b/internal-enrichment/anyrun-lookup/entrypoint.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# Start the connector (WORKDIR is /opt/connector as set in the Dockerfile) +python3 anyrun_lookup.py \ No newline at end of file diff --git a/internal-enrichment/anyrun-lookup/src/anyrun_lookup.py b/internal-enrichment/anyrun-lookup/src/anyrun_lookup.py new file mode 100644 index 00000000000..1fb5271230a --- /dev/null +++ b/internal-enrichment/anyrun-lookup/src/anyrun_lookup.py @@ -0,0 +1,514 @@ +import json +from urllib.parse import quote + +import stix2 +from anyrun.connectors import LookupConnector +from config import Config, config +from pycti import ( + Identity, + Indicator, + Note, + OpenCTIConnectorHelper, + StixCoreRelationship, +) + +ANYRUN_INDICATOR_TO_MAIN_OBSERVABLE = { + "relatedDNS": "Domain-Name", + "relatedURLs": "Url", + "destinationIP": "IPv4-Addr", +} + +ANYRUN_INDICATOR_TO_STIX = { + "relatedDNS": "domain-name", + "relatedURLs": "url", + "destinationIP": "ipv4-addr", +} + +SDK_ENTITY_TO_LOOKUP_OBJECT = { + "domain_name": "domainName", + "destination_ip": "destinationIp", + "url": "url", + "sha256": "sha256", + "sha1": "sha1", + "md5": "md5", +} + +# Map an algorithm key (as returned by the SDK / used in our lookup params) +# to the canonical STIX File hash key used in indicator patterns. +HASH_ALGORITHM_TO_STIX = { + "sha256": "SHA-256", + "sha1": "SHA-1", + "md5": "MD5", +} + + +class AnyRunTILookup: + def __init__(self, config_obj: Config): + self._helper = OpenCTIConnectorHelper(config) + self._config = config_obj + + self._identity = stix2.Identity( + id=Identity.generate_id("ANY.RUN", "organization"), + name="ANY.RUN", + identity_class="organization", + description=( + "Empowers SOC teams with a Sandbox for real-time malware analysis, " + "Threat Intelligence Lookup, and high-quality feeds to enhance " + "detection and threat coverage." + ), + contact_information="techsupport@any.run", + ) + + self._helper.send_stix2_bundle( + self._helper.stix2_create_bundle([self._identity]), + ) + + def _process_message(self, data): + self._load_opencti_entity(data) + + lookup_search_results = self._get_intelligence() + + if ( + self._is_empty(lookup_search_results) + or lookup_search_results.get("summary").get("threatLevel") > 2 + ): + self._helper.api.work.to_received( + self._helper.work_id, "Object was not found in ANY.RUN TI Lookup." + ) + return + + self._create_related_objects( + lookup_search_results.get("relatedDNS"), "relatedDNS" + ) + self._create_related_objects( + lookup_search_results.get("relatedURLs"), "relatedURLs" + ) + self._create_related_objects( + lookup_search_results.get("destinationIP"), "destinationIP" + ) + + self._update_main_observable(lookup_search_results) + self._create_note() + + if self._opencti_entity.get("entity_type") == "IPv4-Addr": + self._create_country_relationship( + lookup_search_results.get("destinationIPgeo") + ) + + if self._opencti_entity.get("entity_type") in ( + "StixFile", + "Artifact", + ) and lookup_search_results.get("summary").get("threatLevel") in (1, 2): + self._create_file_indicator( + lookup_search_results.get("summary").get("threatLevel") + ) + + def _create_country_relationship(self, destination_ips: list[dict | None]) -> None: + """ + Creates STIX Country relationship for main observable + + :param destination_ips: Geo countries + """ + for ipgeo in destination_ips: + opencti_locations = self._helper.api.location.list(search=ipgeo) + if not opencti_locations: + continue + + self._helper.send_stix2_bundle( + self._helper.stix2_create_bundle( + [ + stix2.Relationship( + id=StixCoreRelationship.generate_id( + "located-at", + self._opencti_entity.get("standard_id"), + opencti_locations[0].get("standard_id"), + ), + relationship_type="located-at", + created_by_ref=self._identity.get("id"), + source_ref=self._opencti_entity.get("standard_id"), + target_ref=opencti_locations[0].get("standard_id"), + ) + ] + ) + ) + + def _create_related_objects( + self, indicators: list[dict], indicator_type: str + ) -> None: + """ + Process ANY.RUN task indicators. If indicator's threat level is 'No threads detected' creates related observable + else creates a new stix indicator + + :param indicators: List of ANY.RUN indicators + :param indicator_type: ANY.RUN indicator type + """ + objects: list = [] + + for ioc in indicators: + value = self._extract_indicator_value(ioc, indicator_type) + if not value: + continue + + if ioc["threatLevel"] == 0: + observable = _build_observable(indicator_type, value, self._identity) + + relationship = stix2.Relationship( + id=StixCoreRelationship.generate_id( + "related-to", + observable.id, + self._opencti_entity.get("standard_id"), + ), + confidence=100, + description="Detected by ANY.RUN TI Lookup", + relationship_type="related-to", + created_by_ref=self._identity.get("id"), + source_ref=observable.id, + target_ref=self._opencti_entity.get("standard_id"), + ) + + objects.append(observable) + objects.append(relationship) + + elif ioc["threatLevel"] in (1, 2): + pattern = f"[{ANYRUN_INDICATOR_TO_STIX.get(indicator_type)}:value = '{value}']" + + indicator = stix2.Indicator( + id=Indicator.generate_id(pattern), + created_by_ref=self._identity.get("id"), + name=value, + pattern_type="stix", + pattern=pattern, + custom_properties={ + "x_opencti_score": {0: 0, 1: 50, 2: 100}.get( + ioc.get("threatLevel") + ), + "x_opencti_created_by_ref": self._identity.get("id"), + "x_opencti_main_observable_type": ANYRUN_INDICATOR_TO_MAIN_OBSERVABLE.get( + indicator_type + ), + }, + ) + + relationship = stix2.Relationship( + id=StixCoreRelationship.generate_id( + "based-on", + indicator.id, + self._opencti_entity.get("standard_id"), + ), + confidence=100, + description="Detected by ANY.RUN TI Lookup", + relationship_type="based-on", + created_by_ref=self._identity.get("id"), + source_ref=indicator.id, + target_ref=self._opencti_entity.get("standard_id"), + ) + + objects.append(indicator) + objects.append(relationship) + + if objects: + self._helper.send_stix2_bundle(self._helper.stix2_create_bundle(objects)) + + def _create_file_indicator(self, score: int) -> None: + """ + Creates STIX File indicator using the proper ``file:hashes.'XXX'`` pattern. + + :param score: ANY.RUN score + """ + params = self._prepare_lookup_params() + algorithm, value = next(iter(params.items())) + stix_algorithm = HASH_ALGORITHM_TO_STIX.get(algorithm) + if stix_algorithm is None: + return + + pattern = f"[file:hashes.'{stix_algorithm}' = '{value}']" + + indicator = stix2.Indicator( + id=Indicator.generate_id(pattern), + created_by_ref=self._identity.get("id"), + description="Detected by ANY.RUN TI Lookup", + name=value, + pattern_type="stix", + pattern=pattern, + custom_properties={ + "x_opencti_score": {1: 50, 2: 100}.get(score), + "x_opencti_created_by_ref": self._identity.get("id"), + "x_opencti_main_observable_type": "File", + }, + ) + + relationship = stix2.Relationship( + id=StixCoreRelationship.generate_id( + "based-on", + indicator.id, + self._opencti_entity.get("standard_id"), + ), + confidence=100, + description="Detected by ANY.RUN TI Lookup", + relationship_type="based-on", + created_by_ref=self._identity.get("id"), + source_ref=indicator.id, + target_ref=self._opencti_entity.get("standard_id"), + ) + + self._helper.send_stix2_bundle( + self._helper.stix2_create_bundle([indicator, relationship]) + ) + + def _update_main_observable(self, lookup_search_results: dict) -> None: + """ + Updates main observable using ANY.RUN Lookup summary + + :param lookup_search_results: ANY.RUN lookup result + """ + custom_properties = self._get_custom_properties(lookup_search_results) + entity_type = self._opencti_entity.get("entity_type") + + if entity_type in ("StixFile", "Artifact"): + hashes = { + hash_data.get("algorithm"): hash_data.get("hash") + for hash_data in self._opencti_entity.get("hashes") or [] + } + if not hashes: + return + observable = stix2.File(hashes=hashes, custom_properties=custom_properties) + elif entity_type in ("Domain-Name", "Hostname"): + observable = stix2.DomainName( + value=self._opencti_entity.get("value"), + custom_properties=custom_properties, + ) + elif entity_type == "Url": + observable = stix2.URL( + value=self._opencti_entity.get("value"), + custom_properties=custom_properties, + ) + elif entity_type == "IPv4-Addr": + observable = stix2.IPv4Address( + value=self._opencti_entity.get("value"), + custom_properties=custom_properties, + ) + else: + return + + self._helper.send_stix2_bundle( + self._helper.stix2_create_bundle([observable]), update=True + ) + + def _get_custom_properties(self, lookup_search_results: dict) -> dict: + return { + "x_opencti_labels": lookup_search_results.get("summary").get("tags"), + "x_opencti_score": self._update_score(lookup_search_results), + "x_opencti_description": "Detected by ANY.RUN TI Lookup", + "x_opencti_created_by_ref": self._identity.get("id"), + "x_opencti_external_references": self._create_external_references( + lookup_search_results.get("sourceTasks") + ), + } + + def _update_score(self, lookup_search_results: dict) -> int: + """ + Adds score to the main observable + + :param lookup_search_results: ANY.RUN lookup result + :return: The greatest score + """ + opencti_score = self._opencti_entity.get("x_opencti_score", 0) + anyrun_score = lookup_search_results.get("summary").get("threatLevel") + + if not opencti_score: + return anyrun_score + + if not anyrun_score: + return opencti_score + + anyrun_score = {0: 0, 1: 50, 2: 100}.get(anyrun_score) + + if anyrun_score > opencti_score: + return anyrun_score + + return opencti_score + + def _load_opencti_entity(self, data) -> None: + """ + Loads OpenCTI entity object using message data + + :param data: Message data + """ + self._helper.log_debug(str(data)) + + self._opencti_entity = self._helper.api.stix_cyber_observable.read( + id=data["entity_id"], withFiles=True + ) + + if self._opencti_entity is None: + raise ValueError( + "Observable not found (or the connector does not has access to this observable, check the group of the connector user)" + ) + + def _get_intelligence(self) -> dict | None: + """ + Executes a request to ANY.RUN TI Lookup + + :return: TI Lookup summary + """ + with LookupConnector( + self._config.anyrun_token, + integration=self._config.VERSION, + enable_requests=True, + ) as connector: + connector.check_authorization() + + return connector.get_intelligence( + **self._prepare_lookup_params(), lookup_depth=self._config.lookup_depth + ) + + def _prepare_lookup_params(self) -> dict: + """ + Converts OpenCTI entity data to the SDK query parameters + + :return: Query parameters + """ + entity_type = self._opencti_entity["entity_type"] + + if entity_type == "Domain-Name": + return {"domain_name": self._opencti_entity["value"]} + if entity_type == "Hostname": + return {"domain_name": self._opencti_entity["value"]} + if entity_type == "IPv4-Addr": + return {"destination_ip": self._opencti_entity["value"]} + if entity_type == "Url": + return {"url": self._opencti_entity["value"]} + if entity_type in ("StixFile", "Artifact"): + if hashes := self._opencti_entity.get("hashes"): + for file_hash in hashes: + if (algorithm := file_hash.get("algorithm")) in ( + "SHA-256", + "SHA-1", + "MD5", + ): + return { + algorithm.lower().replace("-", ""): file_hash.get("hash") + } + raise ValueError( + "StixFile or Artifact entity must have at least one of the following hashes: SHA-256, SHA-1, MD5" + ) + + raise ValueError( + "Wrong scope! Supported only Artifact, StixFile, Directory, Domain-Name, " + "Hostname, IPv4-Addr, Mutex, Process, Url, Windows-Registry-Key, " + "Windows-Registry-Value-Type observables" + ) + + def _create_note(self) -> None: + """ + Creates note for the main observable + """ + entity_type, entity_value = list(self._prepare_lookup_params().items())[0] + + params = { + "query": f"{SDK_ENTITY_TO_LOOKUP_OBJECT.get(entity_type)}:{entity_value}", + "dateRange": self._config.lookup_depth, + } + + url = ( + f"https://intelligence.any.run/analysis/lookup#{quote(json.dumps(params))}" + ) + note_content = f"ANY.RUN TI Lookup link:\n {url}" + + self._helper.send_stix2_bundle( + self._helper.stix2_create_bundle( + [ + stix2.Note( + id=Note.generate_id(None, note_content), + abstract=note_content, + content=note_content, + created_by_ref=self._identity.get("id"), + object_refs=[self._opencti_entity.get("standard_id")], + ) + ] + ) + ) + + @staticmethod + def _create_external_references( + source_tasks: list[dict | None], + ) -> list[stix2.ExternalReference] | None: + """ + Adds external references to the indicator + + :param source_tasks: List of the related tasks + :return: List of the external references + """ + if not source_tasks: + return None + + refs_identifiers = [] + for task in source_tasks: + if task.get("threatLevel") == 2: + refs_identifiers.append( + stix2.ExternalReference( + source_name=f"ANY.RUN analysis {task.get('uuid')}", + url=task.get("related"), + description="ANY.RUN related analysis URL", + ) + ) + return refs_identifiers or None + + @staticmethod + def _extract_indicator_value(indicator: dict, indicator_type: str) -> str | None: + """ + Extracts indicator value according to the indicator type + + :param indicator: ANY.RUN indicator + :param indicator_type: ANY.RUN indicator type + :return: ANY.RUN indicator value + """ + if indicator_type == "relatedDNS": + return indicator.get("domainName") + if indicator_type == "relatedURLs": + return indicator.get("url") + return indicator.get("destinationIP") + + @staticmethod + def _is_empty(lookup_search_results: dict) -> bool: + """ + Checks if ANY.RUN TI Lookup summary is empty + + :param lookup_search_results: TI Lookup summary + :return: True if TI Lookup summary is not empty else False + """ + for key, value in lookup_search_results.items(): + if key != "summary" and value: + return False + return True + + def mainloop(self): + self._helper.listen(self._process_message) + + +def _build_observable( + indicator_type: str, value: str, identity: stix2.Identity +) -> stix2.DomainName | stix2.URL | stix2.IPv4Address: + """ + Build a STIX Cyber Observable matching the related-indicator type. + + The STIX 2.1 spec assigns deterministic UUID5 ids to SCOs based on the + object's value contributing properties, so we don't need to set ``id=`` + explicitly here - the underlying ``stix2`` library does it for us as long + as we provide every contributing property (``value`` for DomainName / URL + / IPv4Address). + """ + custom_properties = { + "x_opencti_description": "Detected by ANY.RUN TI Lookup", + "x_opencti_created_by_ref": identity.get("id"), + } + if indicator_type == "relatedDNS": + return stix2.DomainName(value=value, custom_properties=custom_properties) + if indicator_type == "relatedURLs": + return stix2.URL(value=value, custom_properties=custom_properties) + return stix2.IPv4Address(value=value, custom_properties=custom_properties) + + +if __name__ == "__main__": + anyrun_connector = AnyRunTILookup(Config()) + anyrun_connector.mainloop() diff --git a/internal-enrichment/anyrun-lookup/src/config.py b/internal-enrichment/anyrun-lookup/src/config.py new file mode 100644 index 00000000000..47dbaa1851f --- /dev/null +++ b/internal-enrichment/anyrun-lookup/src/config.py @@ -0,0 +1,39 @@ +import os + +import yaml +from pycti import get_config_variable + +config_file_path: str = os.path.join( + os.path.dirname(os.path.abspath(__file__)), "config.yml" +) + +config: dict = ( + yaml.safe_load(open(config_file_path, encoding="utf-8")) + if os.path.isfile(config_file_path) + else {} +) + + +class Config: + """Base configuration class.""" + + VERSION = "OpenCTI:7.260422.0" + DATE_TIME_FORMAT = "%Y-%m-%d %H:%M:%S" + + def __init__(self) -> None: + self._create_base_config() + self.anyrun_token = get_config_variable( + "ANYRUN_API_KEY", ["anyrun", "api_key"], config + ) + + def _create_base_config(self) -> None: + """ + Updates connector parameters using content of docker-compose.yml or config.yml file + """ + self.lookup_depth = get_config_variable( + "ANYRUN_LOOKUP_DEPTH", + ["anyrun", "lookup_depth"], + config, + isNumber=True, + default=90, + ) diff --git a/internal-enrichment/anyrun-lookup/src/config.yml.sample b/internal-enrichment/anyrun-lookup/src/config.yml.sample new file mode 100644 index 00000000000..105a36d2efe --- /dev/null +++ b/internal-enrichment/anyrun-lookup/src/config.yml.sample @@ -0,0 +1,16 @@ +opencti: + url: 'http://localhost:8080' # The URL of the OpenCTI platform. Note that final `/` should be avoided. Example value: `http://opencti:8080` + token: 'ChangeMe' # The default admin token configured in the OpenCTI platform parameters file. + +connector: + id: 'ChangeMe' # A valid arbitrary `UUIDv4` that must be unique for this connector. + type: 'INTERNAL_ENRICHMENT' # A connector type. + name: 'ANY.RUN TI Lookup' # A connector name to be shown in OpenCTI. + scope: 'StixFile,Artifact,Domain-Name,Hostname,IPv4-Addr,Url' # Supported scope. E. g., `text/html`. + auto: false # Enable/disable auto-enrichment of observables + confidence_level: 75 # From 0 (Unknown) to 100 (Fully trusted) + log_level: 'info' # The log level for this connector, could be `debug`, `info`, `warn` or `error` (less verbose). + +anyrun: + api_key: 'ChangeMe' # ANY.RUN Lookup API-KEY. See "Generate API token" section in the README file. + lookup_depth: 90 # Specify the number of days from the current date for which you want to lookup. diff --git a/internal-enrichment/anyrun-lookup/src/requirements.txt b/internal-enrichment/anyrun-lookup/src/requirements.txt new file mode 100644 index 00000000000..e0c312981eb --- /dev/null +++ b/internal-enrichment/anyrun-lookup/src/requirements.txt @@ -0,0 +1,3 @@ +pycti==7.260515.0 +requests==2.33.0 +anyrun-sdk==1.14.12 \ No newline at end of file diff --git a/internal-enrichment/anyrun-lookup/static/ANYRUN_API_TOKEN.png b/internal-enrichment/anyrun-lookup/static/ANYRUN_API_TOKEN.png new file mode 100644 index 00000000000..7a7804a72c5 Binary files /dev/null and b/internal-enrichment/anyrun-lookup/static/ANYRUN_API_TOKEN.png differ diff --git a/internal-enrichment/anyrun-task/Dockerfile b/internal-enrichment/anyrun-task/Dockerfile index 59536accc0c..045451cc5ca 100644 --- a/internal-enrichment/anyrun-task/Dockerfile +++ b/internal-enrichment/anyrun-task/Dockerfile @@ -1,17 +1,15 @@ FROM python:3.12-alpine - -# Install dependencies -RUN apk --no-cache add git build-base libmagic libffi-dev - -# Copy the worker -WORKDIR /opt/connector-anyrun-task +ENV CONNECTOR_TYPE=INTERNAL_ENRICHMENT # Install Python modules -COPY src/requirements.txt . -RUN pip3 install --no-cache-dir -r requirements.txt +RUN apk --no-cache add git build-base libmagic libffi-dev libxml2-dev libxslt-dev -# Copy the source code -COPY src . +# Copy the connector +COPY src /opt/connector +WORKDIR /opt/connector +RUN pip3 install --no-cache-dir -r requirements.txt # Expose and entrypoint -ENTRYPOINT ["python3", "main.py"] \ No newline at end of file +COPY entrypoint.sh / +RUN chmod +x /entrypoint.sh +ENTRYPOINT ["/entrypoint.sh"] \ No newline at end of file diff --git a/internal-enrichment/anyrun-task/README.md b/internal-enrichment/anyrun-task/README.md index 532c6b6e998..36bfacfd4c6 100644 --- a/internal-enrichment/anyrun-task/README.md +++ b/internal-enrichment/anyrun-task/README.md @@ -1,10 +1,18 @@ +

+ + ANY.RUN logo + +

+ +______________________________________________________________________ + # OpenCTI ANY.RUN Task Connector -| Status | Date | Comment | -|--------|------|---------| -| Community | - | - | +| Status | Date | Comment | +|------------------|------|---------| +| Partner Verified | - | - | -The ANY.RUN Task connector analyzes URL and Artifact observables in the ANY.RUN Interactive Online Malware Sandbox, enriching them with sandbox analysis results including threat scores, tags, IOCs, and MITRE ATT&CK patterns. +The ANY.RUN Task connector analyzes URL and StixFile observables in the ANY.RUN Interactive Online Malware Sandbox, enriching them with sandbox analysis results including threat scores, tags, and IOCs. ## Table of Contents @@ -13,10 +21,14 @@ The ANY.RUN Task connector analyzes URL and Artifact observables in the ANY.RUN - [Introduction](#introduction) - [Installation](#installation) - [Requirements](#requirements) + - [Generate API-KEY](#generate-api-key) - [Configuration variables](#configuration-variables) - [OpenCTI environment variables](#opencti-environment-variables) - [Base connector environment variables](#base-connector-environment-variables) - - [Connector extra parameters environment variables](#connector-extra-parameters-environment-variables) + - [Base ANY.RUN environment variables](#base-anyrun-environment-variables) + - [ANY.RUN Windows environment variables](#anyrun-windows-environment-variables) + - [ANY.RUN Linux environment variables](#anyrun-linux-environment-preferences) + - [ANY.RUN Android environment variables](#anyrun-android-environment-preferences) - [Deployment](#deployment) - [Docker Deployment](#docker-deployment) - [Manual Deployment](#manual-deployment) @@ -24,60 +36,115 @@ The ANY.RUN Task connector analyzes URL and Artifact observables in the ANY.RUN - [Behavior](#behavior) - [Debugging](#debugging) - [Additional information](#additional-information) + - [Support](#support) ## Introduction -ANY.RUN is an interactive online malware sandbox that allows security researchers to analyze suspicious files and URLs in a safe, isolated environment. It provides detailed behavioral analysis, network activity monitoring, and threat intelligence data from malware execution. +[ANY.RUN's Interactive Sandbox](https://any.run/features/?utm_source=anyrungithub&utm_medium=documentation&utm_campaign=opencti_sandbox&utm_content=linktosandboxlanding) is a cloud-based service that provides SOC teams with a simple way to analyze cyber threats, enabling rapid threat intelligence and deep analysis in a secure environment. + +The connector for the Interactive Sandbox enables OpenCTI users to quickly analyze and identify observables, such as files and URLs in the cloud sandbox. + +* Perform real-time analysis to make fast decisions +* Get detailed reports that include insights into network activity, dropped files, and MITRE ATT&CK techniques +* Enrich observables in OpenCTI + +As a result of the integration of ANY.RUN’s Interactive Sandbox with OpenCTI, you’ll achieve: + +* Streamlined Triage and Detection: Automate threat analysis to receive actionable verdicts and reports to prioritize incidents effectively. +* Shorter MTTD and MTTR: Lower response times by gaining a full understanding of the threat’s behavior in seconds. +* Higher Detection Rates: In-depth insights and advanced detection mechanisms provide deep visibility into complex threats. +* Minimized Workload: Reduce analyst workload by automating repetitive tasks. +* Stronger Security: Use sandbox reports and related data to refine rules, update playbooks, and train threat detection models. -This connector integrates ANY.RUN with OpenCTI to submit URL and Artifact (file) observables for sandbox analysis. The analysis results are imported back into OpenCTI, including threat verdicts, tags, IOCs extracted during analysis, MITRE ATT&CK technique mappings, and process behavior information. ## Installation +To use this integration, make sure that you have an active [ANY.RUN Sandbox license](https://app.any.run/plans/?utm_source=anyrungithub&utm_medium=documentation&utm_campaign=opencti_sandbox&utm_content=linktopricing). +ANY.RUN connector for OpenCTI is a standalone Python service that requires access to both the OpenCTI platform and RabbitMQ. +RabbitMQ credentials and connection parameters are provided automatically by the OpenCTI API, based on the platform’s configuration. + +You can enable the connector in one of the following ways: + +* Run as a Python process: simply configure the config.yml file with the appropriate values and launch the connector directly. +* Run in Docker: use the OpenCTI docker image opencti/connector-anyrun-task + + ### Requirements - OpenCTI Platform >= 6.0.0 -- ANY.RUN "Hunter" plan or higher (API access required) +- Available on ANY.RUN plans with API access, including trial + +### Generate API-KEY + +* Go to [ANY.RUN Sandbox](https://app.any.run/?utm_source=anyrungithub&utm_medium=documentation&utm_campaign=opencti_sandbox&utm_content=linktoservice) +* Click Profile > API and Limits > Generate > Copy +![img.png](static/ANYRUN_API_TOKEN.png) ## Configuration variables There are a number of configuration options, which are set either in `docker-compose.yml` (for Docker) or in `config.yml` (for manual deployment). -### OpenCTI environment variables - -| Parameter | config.yml | Docker environment variable | Mandatory | Description | -|---------------|------------|-----------------------------|-----------|------------------------------------------------------| -| OpenCTI URL | url | `OPENCTI_URL` | Yes | The URL of the OpenCTI platform. | -| OpenCTI Token | token | `OPENCTI_TOKEN` | Yes | The default admin token set in the OpenCTI platform. | - -### Base connector environment variables - -| Parameter | config.yml | Docker environment variable | Default | Mandatory | Description | -|--------------------|------------------|-------------------------------|---------------|-----------|-------------------------------------------------------------------------------| -| Connector ID | id | `CONNECTOR_ID` | | Yes | A unique `UUIDv4` identifier for this connector instance. | -| Connector Name | name | `CONNECTOR_NAME` | | Yes | Name of the connector. | -| Connector Scope | scope | `CONNECTOR_SCOPE` | Artifact,Url | Yes | The scope of observables the connector will enrich. | -| Connector Type | type | `CONNECTOR_TYPE` | INTERNAL_ENRICHMENT | Yes | Should always be `INTERNAL_ENRICHMENT` for this connector. | -| Log Level | log_level | `CONNECTOR_LOG_LEVEL` | error | No | Determines the verbosity of the logs: `debug`, `info`, `warn`, or `error`. | -| Confidence Level | confidence_level | `CONNECTOR_CONFIDENCE_LEVEL` | | Yes | The default confidence level for created relationships (1-100). | -| Auto Mode | auto | `CONNECTOR_AUTO` | false | No | Enables or disables automatic enrichment of observables. | - -### Connector extra parameters environment variables - -| Parameter | config.yml | Docker environment variable | Default | Mandatory | Description | -|---------------------------|-----------------------------|-------------------------------------|----------------|-----------|------------------------------------------------------------------------------------| -| API Token | anyrun.token | `ANYRUN_TOKEN` | | Yes | ANY.RUN API token for authentication. | -| API URL | anyrun.url | `ANYRUN_API_URL` | https://api.any.run | No | Base URL for the ANY.RUN API. | -| Task Timer | anyrun.timer | `ANYRUN_TASK_TIMER` | 60 | No | Sandbox execution time in seconds. | -| Operating System | anyrun.os | `ANYRUN_OS` | windows | No | Operating system for sandbox environment. | -| OS Bitness | anyrun.bitness | `ANYRUN_OS_BITNESS` | 64 | No | Operating system bitness: `32` or `64`. | -| OS Version | anyrun.version | `ANYRUN_OS_VERSION` | 10 | No | Windows version: `7`, `8.1`, `10`, or `11`. | -| OS Locale | anyrun.locale | `ANYRUN_OS_LOCALE` | en-US | No | Operating system language locale. | -| Browser | anyrun.browser | `ANYRUN_OS_BROWSER` | Google Chrome | No | Browser for URL analysis: `Google Chrome`, `Mozilla Firefox`, `Opera`, `Internet Explorer`, `Microsoft Edge`. | -| Privacy | anyrun.privacy | `ANYRUN_PRIVACY` | bylink | No | Task privacy: `public`, `bylink`, `owner`, `team`. | -| Automated Interactivity | anyrun.automated_interactivity | `ANYRUN_AUTOMATED_INTERACTIVITY` | false | No | Enable ML-based automated interactivity during analysis. | -| Enable IOCs | anyrun.ioc | `ANYRUN_IOC` | true | No | Import IOCs (domains, URLs, IPs) extracted during analysis. | -| Enable MITRE | anyrun.mitre | `ANYRUN_MITRE` | false | No | Create relationships to MITRE ATT&CK techniques. | -| Enable Processes | anyrun.processes | `ANYRUN_PROCESSES` | false | No | Import malicious process observables. | +#### OpenCTI environment variables +| Parameter | Docker envvar | Mandatory | Description | +|------------------------------|----------------------------------|-----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `opencti_url` | `OPENCTI_URL` | Yes | The URL of the OpenCTI platform. Note that final `/` should be avoided. Example value: `http://opencti:8080` | +| `opencti_token` | `OPENCTI_TOKEN` | Yes | The default admin token configured in the OpenCTI platform parameters file. We recommend setting up a separate ``OPENCTI_TOKEN`` named **ANY.RUN** to identify the work of our integrations. | + +#### Base connector environment variables +| Parameter | Docker envvar | Mandatory | Description | +|------------------------------|----------------------------------|-----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `connector_id` | `CONNECTOR_ID` | Yes | A valid arbitrary `UUIDv4` that must be unique for this connector. | +| `connector_type` | `CONNECTOR_TYPE` | Yes | A connector type. | +| `connector_name` | `CONNECTOR_NAME` | Yes | A connector name to be shown in OpenCTI. | +| `connector_scope` | `CONNECTOR_SCOPE` | Yes | Supported scope. E. g., `text/html`. | +| `connector_auto` | `CONNECTOR_AUTO` | Yes | Enable/disable auto-enrichment of observables. | +| `connector_confidence_level` | `CONNECTOR_CONFIDENCE_LEVEL` | Yes | The default confidence level for created sightings (a number between 0 and 100, where 0 = Unknown and 100 = Fully trusted). | +| `connector_log_level` | `CONNECTOR_LOG_LEVEL` | Yes | The log level for this connector, could be `debug`, `info`, `warn` or `error` (less verbose). | + +#### Base ANY.RUN environment variables +| Parameter | Docker envvar | Mandatory | Description | +|------------------------------|----------------------------------|-----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `token` | `ANYRUN_API_KEY` | Yes | ANY.RUN Sandbox API-KEY. See "Generate API KEY" section in the README file. | +| `opt_timeout` | `ANYRUN_OPT_TIMEOUT` | No | Select analysis completion time. Size range: 10-660 seconds. | +| `opt_network_connect` | `ANYRUN_OPT_NETWORK_CONNECT` | No | Enable network connection. | +| `opt_network_fakenet` | `ANYRUN_OPT_NETWORK_FAKENET` | No | Enable FakeNet feature. | +| `opt_network_tor` | `ANYRUN_TOR` | No | Enable TOR using. | +| `opt_network_geo` | `ANYRUN_GEO` | No | TOR geolocation option. Example: US, AU | +| `opt_network_mitm` | `ANYRUN_MITM` | No | Enable HTTPS MITM Proxy using. | +| `opt_network_residential_proxy` | `ANYRUN_RESIDENTIAL_PROXY` | No | Residential proxy using. | +| `opt_network_residential_proxy_geo` | `ANYRUN_RESIDENTIAL_PROXY_GEO` | No | Residential proxy geolocation option. Example: US, AU. | +| `opt_privacy_type` | `ANYRUN_PRIVACY_TYPE` | No | Privacy settings. Supports: public, bylink, owner, byteam. | +| `obj_ext_extension` | `ANYRUN_OBJ_EXT_EXTENSION` | No | Automatically change file extension to valid. | +| `env_locale` | `ANYRUN_ENV_LOCALE` | No | Operation system's language. Use locale identifier or country name (Ex: "en-US" or "Brazil"). Case-insensitive. | + +#### ANY.RUN Windows environment variables +| Parameter | Docker envvar | Mandatory | Description | +|------------------------------|----------------------------------|-----------|---------------------------------------------------------------------------------------------------------------| +|`os_type` | `ANYRUN_OS_TYPE` | Yes | Must be `windows`| +| `env_version` | `ANYRUN_ENV_VERSION` | No | Version of OS. Supports: 7, 10, 11. | +| `env_bitness` | `ANYRUN_ENV_BITNESS` | No | Bitness of Operation System. Supports 32, 64. | +| `env_type` | `ANYRUN_ENV_TYPE` | No | Environment preset type. You can select **development** env for OS Windows 10 x64. For all other cases, **complete** env is required. | +| `obj_ext_startfolder` | `ANYRUN_OBJ_EXT_STARTFOLDER` | No | Supports: desktop, home, downloads, appdata, temp, windows, root. | +| `obj_ext_cmd` | `ANYRUN_OBJ_EXT_CMD` | No | Optional command-line arguments for the analyzed object. Use an empty string ("") to apply the default behavior. | +| `obj_force_elevation` | `ANYRUN_OBJ_FORCE_ELEVATION` | No | Forces the file to execute with elevated privileges and an elevated token (for PE32, PE32+, PE64 files only). | +| `obj_ext_browser` | `ANYRUN_OBJ_EXT_BROWSER` | No | Browser name. Supports: Google Chrome, Mozilla Firefox, Internet Explorer, Microsoft Edge. | + + +#### ANY.RUN Linux environment preferences +| Parameter | Docker envvar | Mandatory | Description | +|------------------------------|----------------------------------|-----------|---------------------------------------------------------| +|`os_type` | `ANYRUN_OS_TYPE` | Yes | Must be `linux`| +| `obj_ext_startfolder` | `ANYRUN_OBJ_EXT_STARTFOLDER` | No | Start object from. Supports: desktop, home, downloads, temp. | +| `obj_ext_cmd` | `ANYRUN_OBJ_EXT_CMD` | No | Optional command-line arguments for the analyzed object. Use an empty string ("") to apply the default behavior. | +| `run_as_root` | `ANYRUN_RUN_AS_ROOT` | No | Run file with superuser privileges. | +| `obj_ext_browser` | `ANYRUN_OBJ_EXT_BROWSER` | No | Browser name. Supports: Google Chrome, Mozilla Firefox. | + + +#### ANY.RUN Android environment preferences +| Parameter | Docker envvar | Mandatory | Description | +|------------------------------|----------------------------------|-----------|--------------------------------------------------------------------------------------------------------------| +|`os_type` | `ANYRUN_OS_TYPE` | Yes | Must be `android`| +| `obj_ext_cmd` | `ANYRUN_OBJ_EXT_CMD` | No | Optional command-line arguments for the analyzed object. Use an empty string ("") to apply the default behavior. | ## Deployment @@ -92,29 +159,68 @@ docker build -t opencti/connector-anyrun-task:latest . Configure the connector in `docker-compose.yml`: ```yaml - connector-anyrun-task: - image: opencti/connector-anyrun-task:latest - environment: - - OPENCTI_URL=http://localhost - - OPENCTI_TOKEN=ChangeMe - - CONNECTOR_ID=ChangeMe_UUID4 - - CONNECTOR_NAME=ANY.RUN Task - - CONNECTOR_SCOPE=Artifact,Url - - CONNECTOR_LOG_LEVEL=error - - CONNECTOR_AUTO=false - - ANYRUN_TOKEN=ChangeMe - - ANYRUN_TASK_TIMER=120 - - ANYRUN_OS=windows - - ANYRUN_OS_BITNESS=64 - - ANYRUN_OS_VERSION=10 - - ANYRUN_OS_LOCALE=en-US - - ANYRUN_OS_BROWSER=Google Chrome - - ANYRUN_PRIVACY=bylink - - ANYRUN_AUTOMATED_INTERACTIVITY=false - - ANYRUN_IOC=true - - ANYRUN_MITRE=false - - ANYRUN_PROCESSES=false - restart: always +connector-anyrun-task: + image: anyrun/opencti-connector-anyrun-task:latest + environment: + # OpenCTI settings. + - OPENCTI_URL=http://localhost # The URL of the OpenCTI platform. Note that final `/` should be avoided. Example value: `http://opencti:8080` + - OPENCTI_TOKEN=ChangeMe # The default admin token configured in the OpenCTI platform parameters file. + + # Connector settings. + - CONNECTOR_ID=ChangeMe # A valid arbitrary `UUIDv4` that must be unique for this connector. + - CONNECTOR_TYPE=INTERNAL_ENRICHMENT # A connector type. + - CONNECTOR_NAME=ANY.RUN Sandbox # A connector name to be shown in OpenCTI. + - CONNECTOR_SCOPE=StixFile,Url # Supported scope. E. g., `text/html`. + - CONNECTOR_AUTO=false # Enable/disable auto-enrichment of observables. + - CONNECTOR_CONFIDENCE_LEVEL=75 # From 0 (Unknown) to 100 (Fully trusted) + - CONNECTOR_LOG_LEVEL=info # The log level for this connector, could be `debug`, `info`, `warn` or `error` (less verbose). + + # ANY.RUN base settings. + - ANYRUN_API_KEY=ChangeMe # ANY.RUN Sandbox API-KEY. See "Generate API token" section in the README file. + - ANYRUN_ENABLE_IOC=true # Add found indicators to the OpenCTI Indicators and Observables tab. + + # ANY.RUN analysis options. + - ANYRUN_OPT_TIMEOUT=240 # Select analysis completion time. Size range: 10-660 seconds. + - ANYRUN_OPT_NETWORK_CONNECT=true # Enable network connection. + - ANYRUN_OPT_NETWORK_FAKENET=false # Enable FakeNet feature. + - ANYRUN_TOR=false # Enable TOR using. + - ANYRUN_GEO=fastest # TOR geolocation option. Example: US, AU + - ANYRUN_MITM=false # Enable HTTPS MITM Proxy using. + - ANYRUN_RESIDENTIAL_PROXY=false # Residential proxy using. + - ANYRUN_RESIDENTIAL_PROXY_GEO=fastest # Residential proxy geolocation option. Example: US, AU. + - ANYRUN_PRIVACY_TYPE=bylink # Privacy settings. Supports: public, bylink, owner, byteam. + + # ANY.RUN analysis object settings. + - ANYRUN_OBJ_EXT_EXTENSION=true # Automatically change file extension to valid. + + # ANY.RUN analysis environment settings. + - ANYRUN_ENV_LOCALE=en-US # Operation system's language. Use locale identifier or country name (Ex: "en-US" or "Brazil"). Case-insensitive. + + # Please use one of the following environments in the same time: + + # Windows analysis environment. + - ANYRUN_OS_TYPE=windows # Type of OS. Must be windows + - ANYRUN_ENV_VERSION=10 # Version of OS. Supports: 7, 10, 11 + - ANYRUN_ENV_BITNESS=64 # Bitness of Operation System. Supports 32, 64. + - ANYRUN_ENV_TYPE=complete # Environment preset type. You can select **development** env for OS Windows 10 x64. For all other cases, **complete** env is required. + - ANYRUN_OBJ_EXT_STARTFOLDER=temp # Supports: desktop, home, downloads, appdata, temp, windows, root. + - ANYRUN_OBJ_EXT_CMD="" # Optional command-line arguments for the analyzed object. Use an empty string ("") to apply the default behavior. + - ANYRUN_OBJ_FORCE_ELEVATION=false # Forces the file to execute with elevated privileges and an elevated token (for PE32, PE32+, PE64 file s only). + # Only for the Url analysis. + # - ANYRUN_OBJ_EXT_BROWSER=Microsoft Edge # Browser name. Supports: Google Chrome, Mozilla Firefox, Internet Explorer, Microsoft Edge. + + # Linux analysis environment. + # - ANYRUN_OS_TYPE=linux # Type of OS. Must be linux + # - ANYRUN_OBJ_EXT_STARTFOLDER=temp # Start object from. Supports: desktop, home, downloads, appdata, temp, windows, root. + # - ANYRUN_OBJ_EXT_CMD="" # Optional command-line arguments for the analyzed object. Use an empty string ("") to apply the default behavior. + # - ANYRUN_RUN_AS_ROOT=true # Run file with superuser privileges. + # Only for the Url analysis. + # - ANYRUN_OBJ_EXT_BROWSER=Google Chrome # Browser name. Supports: Google Chrome, Mozilla Firefox. + + # Android analysis environment. + # - ANYRUN_OS_TYPE=android # Type of OS. Must be android + # - ANYRUN_OBJ_EXT_CMD="" # Optional command-line arguments for the analyzed object. Use an empty string ("") to apply the default behavior. + restart: always ``` Start the connector: @@ -136,16 +242,16 @@ pip3 install -r requirements.txt 3. Start the connector from the `src` directory: ```bash -python3 anyrun_task.py +python3 opencti_client.py ``` ## Usage -The connector enriches URL and Artifact observables by submitting them to the ANY.RUN sandbox. Due to the time required for sandbox analysis, automatic mode is typically disabled. +The connector enriches URL and StixFile observables by submitting them to the ANY.RUN sandbox. Due to the time required for sandbox analysis, automatic mode is typically disabled. **Observations → Observables** -Select a URL or Artifact observable, then click the enrichment button and choose ANY.RUN Task. +Select a URL or StixFile observable, then click the enrichment button and choose ANY.RUN Task. ## Behavior @@ -157,11 +263,11 @@ The connector submits observables to ANY.RUN for sandbox analysis and imports th graph LR subgraph OpenCTI Input URL[URL Observable] - Artifact[Artifact Observable] + StixFile[StixFile Observable] end subgraph ANY.RUN Sandbox - Task[Sandbox Task] + Task[Sandbox Analysis] Analysis[Behavioral Analysis] end @@ -171,76 +277,71 @@ graph LR ExtRef[External Reference] IOCs[IOC Observables] Indicators[Indicators] - Processes[Process Observables] - AttackPatterns[Attack Pattern Relations] Note[Score Note] + HTML[HTML report] end URL --> Task - Artifact --> Task + StixFile --> Task Task --> Analysis Analysis --> EnrichedObs Analysis --> Labels Analysis --> ExtRef Analysis --> IOCs Analysis --> Indicators - Analysis --> Processes - Analysis --> AttackPatterns Analysis --> Note + Analysis --> HTML report ``` ### Enrichment Mapping -| ANY.RUN Data | OpenCTI Entity/Property | Description | -|----------------------------|------------------------------|-----------------------------------------------------------------| -| Task URL | External Reference | Link to the ANY.RUN task analysis page | -| analysis.tags | Labels | Tags assigned by ANY.RUN analysts | -| scores.verdict.score | Observable Score | Threat verdict score from analysis | -| mitre | Attack Pattern Relationships | MITRE ATT&CK technique relationships (when enabled) | -| IOCs (domain) | Domain-Name Observable | Extracted domain IOCs with indicators | -| IOCs (url) | URL Observable | Extracted URL IOCs with indicators | -| IOCs (ip) | IPv4-Addr Observable | Extracted IP IOCs with indicators | -| processes | Process Observable | Malicious process information (when enabled) | +| ANY.RUN Data | OpenCTI Entity/Property | Description | +|----------------------|-------------------------|-----------------------------------| +| Task URL | External Reference | Link to the ANY.RUN analysis page | +| analysis.tags | Labels | Tags assigned by ANY.RUN analysts | +| scores.verdict.score | Observable Score | Threat verdict score from analysis | +| IOCs (domain) | Domain-Name Observable | Extracted domain IOCs with indicators | +| IOCs (url) | URL Observable | Extracted URL IOCs with indicators | +| IOCs (ip) | IPv4-Addr Observable | Extracted IP IOCs with indicators | +| IOCs (sha256) | File Observable | Extracted File IOCs with indicators ### IOC Types Mapping | ANY.RUN IOC Type | OpenCTI Observable Type | -|------------------|-------------------------| -| domain | Domain-Name | -| url | Url | -| ip | IPv4-Addr | +|----------------|-------------------------| +| domain | Domain-Name | +| url | Url | +| ip | IPv4-Addr | +| sha256 | File | + ### Processing Details -1. **Task Submission**: Submits URL or Artifact to ANY.RUN with configured sandbox settings -2. **External Reference**: Creates link to the ANY.RUN task page -3. **Wait for Analysis**: Polls task status until completion (with timeout) +1. **Analysis Submission**: Submits URL or StixFile to ANY.RUN with configured sandbox settings +2. **External Reference**: Creates link to the ANY.RUN analysis page +3. **Wait for Analysis**: Polls analysis status until completion (with timeout) 4. **Tags/Labels**: Imports analysis tags as labels on the observable 5. **Score Update**: Updates observable score with verdict score (or creates note if lower) -6. **MITRE ATT&CK** (optional): Creates `related-to` relationships to matching attack patterns -7. **IOCs** (optional): Creates observables and indicators for malicious IOCs found during analysis -8. **Processes** (optional): Creates Process observables for malicious processes with parent-child relationships +6. **IOCs**: Creates observables and indicators for malicious and suspiocus IOCs found during analysis ### Generated STIX Objects -| STIX Object Type | Condition | Description | -|-----------------------|------------------------|------------------------------------------------------------| -| External Reference | Always | Link to ANY.RUN task analysis | -| Labels | When tags present | Analysis tags applied to observable | -| Note | When score is lower | Records ANY.RUN score when lower than existing | -| Domain-Name | IOC enabled | Extracted malicious domains | -| URL | IOC enabled | Extracted malicious URLs | -| IPv4-Addr | IOC enabled | Extracted malicious IP addresses | -| Indicator | IOC enabled | STIX patterns for extracted IOCs | -| Process | Processes enabled | Malicious process information | -| Relationship | Various | `related-to` linking entities together | +| STIX Object Type | Condition | Description | +|-----------------------|------------------------|--------------------------------------------------| +| External Reference | Always | Link to ANY.RUN analysis | +| Labels | When tags present | Analysis tags applied to observable | +| Note | When score is lower | Records ANY.RUN score when lower than existing | +| Domain-Name | IOC enabled | Extracted malicious domains | +| URL | IOC enabled | Extracted malicious URLs | +| IPv4-Addr | IOC enabled | Extracted malicious IP addresses | +| Indicator | IOC enabled | STIX patterns for extracted IOCs | +| Process | Processes enabled | Malicious process information | +| Relationship | Various | `related-to`, `based-on` linking entities together | ### Relationships Created - Original Observable → `related-to` → Extracted IOC Observables -- Original Observable → `related-to` → Attack Patterns (MITRE) -- Process → `related-to` → Original Observable -- Child Process → `related-to` → Parent Process +- Indicator → `based-on` → Extracted IOC Observables ## Debugging @@ -251,16 +352,20 @@ CONNECTOR_LOG_LEVEL=debug ``` Log output includes: -- Task submission details -- Task status polling +- Analysis submission details +- Analysis status polling - IOC extraction progress - Relationship creation status ## Additional information - **Analysis Time**: Sandbox analysis typically takes 1-3 minutes depending on the sample -- **Task Timer**: Configure `ANYRUN_TASK_TIMER` based on expected analysis time +- **Task Timer**: Configure `ANYRUN_OPT_TIMEOUT` based on expected analysis time - **Privacy Settings**: Use `bylink` or `team` for sensitive samples -- **Hunter Plan Required**: API access requires at minimum the "Hunter" subscription plan +- **API Access Required**: Available on ANY.RUN plans with API access, including trial - **Rate Limits**: API calls are subject to ANY.RUN rate limits based on subscription tier - **Organization Identity**: The connector creates an "ANY.RUN" organization identity for attribution + +## Support +This is an ANY.RUN’s supported connector. You can write to us for help with integration via [techsupport@any.run](mailto:techsupport@any.run) . +Contact us for a quote or demo via [this form](https://app.any.run/contact-us/?utm_source=anyrungithub&utm_medium=documentation&utm_campaign=opencti_sandbox&utm_content=linktocontactus). diff --git a/internal-enrichment/anyrun-task/__metadata__/CONNECTOR_CONFIG_DOC.md b/internal-enrichment/anyrun-task/__metadata__/CONNECTOR_CONFIG_DOC.md index a55eff52bdd..f0488219391 100644 --- a/internal-enrichment/anyrun-task/__metadata__/CONNECTOR_CONFIG_DOC.md +++ b/internal-enrichment/anyrun-task/__metadata__/CONNECTOR_CONFIG_DOC.md @@ -4,30 +4,28 @@ Below is an exhaustive enumeration of all configurable parameters available, eac ### Type: `object` -| Property | Type | Required | Possible values | Deprecated | Default | Description | -| -------- | ---- | -------- | --------------- | ---------- | ------- | ----------- | -| OPENCTI_URL | `string` | ✅ | Format: [`uri`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | | The base URL of the OpenCTI instance. | -| OPENCTI_TOKEN | `string` | ✅ | string | | | The API token to connect to OpenCTI. | -| ANYRUN_TOKEN | `string` | ✅ | Format: [`password`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | | ANY.RUN API token for authentication. | -| CONNECTOR_NAME | `string` | | string | | `"ANY.RUN task"` | The name of the connector. | -| CONNECTOR_SCOPE | `array` | | string | | `["Artifact", "Url"]` | The scope of the connector. | -| CONNECTOR_LOG_LEVEL | `string` | | `debug` `info` `warn` `warning` `error` | | `"error"` | The minimum level of logs to display. | -| CONNECTOR_TYPE | `const` | | `INTERNAL_ENRICHMENT` | | `"INTERNAL_ENRICHMENT"` | | -| CONNECTOR_AUTO | `boolean` | | boolean | | `false` | Whether the connector should run automatically when an entity is created or updated. | -| ANYRUN_MAX_TLP | `string` | | `TLP:WHITE` `TLP:CLEAR` `TLP:GREEN` `TLP:AMBER` `TLP:AMBER+STRICT` `TLP:RED` | | `"TLP:AMBER"` | Maximum TLP level for the connector. | -| ANYRUN_URL | `string` | | Format: [`uri`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | `"https://api.any.run/"` | Base URL for the ANY.RUN API. | -| ANYRUN_TASK_TIMER | `integer` | | integer | | `60` | Sandbox execution time in seconds. | -| ANYRUN_OS | `string` | | string | | `"windows"` | Operating system for sandbox environment. | -| ANYRUN_OS_BITNESS | `string` | | `32` `64` | | `"64"` | Operating system bitness: `32` or `64`. | -| ANYRUN_OS_VERSION | `string` | | `7` `8.1` `10` `11` | | `"10"` | Windows version: `7`, `8.1`, `10`, or `11`. | -| ANYRUN_OS_LOCALE | `string` | | string | | `"en-US"` | Operating system language locale. | -| ANYRUN_OS_BROWSER | `string` | | `Google Chrome` `Mozilla Firefox` `Opera` `Internet Explorer` `Microsoft Edge` | | `"Google Chrome"` | Browser for URL analysis: `Google Chrome`, `Mozilla Firefox`, `Opera`, `Internet Explorer`, `Microsoft Edge`. | -| ANYRUN_PRIVACY | `string` | | `public` `bylink` `owner` `team` | | `"bylink"` | Task privacy: `public`, `bylink`, `owner`, `team`. | -| ANYRUN_AUTOMATED_INTERACTIVITY | `boolean` | | boolean | | `false` | Enable ML-based automated interactivity during analysis. | -| ANYRUN_IOC | `boolean` | | boolean | | `true` | Import IOCs (domains, URLs, IPs) extracted during analysis. | -| ANYRUN_MITRE | `boolean` | | boolean | | `false` | Create relationships to MITRE ATT&CK techniques. | -| ANYRUN_PROCESSES | `boolean` | | boolean | | `false` | Import malicious process observables. | -| ANYRUN_BITNESS | `string` | | string | ⛔️ | `null` | Use ANYRUN_OS_BITNESS instead. | -| ANYRUN_VERSION | `string` | | string | ⛔️ | `null` | Use ANYRUN_OS_VERSION instead. | -| ANYRUN_LOCALE | `string` | | string | ⛔️ | `null` | Use ANYRUN_OS_LOCALE instead. | -| ANYRUN_BROWSER | `string` | | string | ⛔️ | `null` | Use ANYRUN_OS_BROWSER instead. | +| Property | Type | Required | Possible values | Deprecated | Default | Description | +| -------- |-----------| ------ |-----------------------------------------------------------------------------------------------------------| ---------- |-----------------|--------------------------------------------------------------------------------------------------------------------------------| +| OPENCTI_URL | `string` | ✅ | Format: [`uri`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | | The base URL of the OpenCTI instance. | +| OPENCTI_TOKEN | `string` | ✅ | string | | | The API token to connect to OpenCTI. | +| ANYRUN_API_KEY | `string` | ✅ | Format: [`password`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | | ANY.RUN Sandbox API-KEY. See 'Generate API KEY' section in the README file. | +| ANYRUN_OPT_TIMEOUT | `integer` | | integer | | | Select analysis completion time. Size range: 10-660 seconds. | +| ANYRUN_OPT_NETWORK_CONNECT | `boolean` | | boolean | | `true` | Enable network connection. | +| ANYRUN_OPT_NETWORK_FAKENET | `boolean` | | boolean | | `false` | Enable FakeNet feature. | +| ANYRUN_TOR | `boolean` | | boolean | | `false` | Enable TOR using. | +| ANYRUN_GEO | `string` | | string | | `fastest` | TOR geolocation option. Example: US, AU. | +| ANYRUN_MITM | `boolean` | | boolean | | `false` | Enable HTTPS MITM Proxy using. | +| ANYRUN_RESIDENTIAL_PROXY | `boolean` | | boolean | | `false` | Residential proxy using. | +| ANYRUN_RESIDENTIAL_PROXY_GEO | `string` | | string | | `fastest` | Residential proxy geolocation option. Example: US, AU. | +| ANYRUN_PRIVACY_TYPE | `string` | | `public` `bylink` `owner` `team` | | `bylink` | Privacy settings. | +| ANYRUN_OBJ_EXT_EXTENSION | `boolean` | | boolean | | `true` | Automatically change file extension to valid. | +| ANYRUN_ENV_LOCALE | `string` | | string | | `en-US` | Operation system's language. Use locale identifier or country name (Ex: en-US or Brazil). Case-insensitive. | +| ANYRUN_OS_TYPE | `string` | | `windows` `linux` `android` | | `windows` | Operating system. | +| ANYRUN_ENV_VERSION | `string` | | `7` `10` `11` | | `10` | Windows environment version. | +| ANYRUN_ENV_BITNESS | `string` | | `32` `64` | | `64` | Operating system bitness: 32 or 64 for Windows, 64 for Linux and Android. | +| ANYRUN_ENV_TYPE | `string` | | `complete` `development` | | `complete` | Windows environment type. You can select development env for OS Windows 10 x64. For all other cases, complete env is required. | +| ANYRUN_OBJ_EXT_STARTFOLDER | `string` | | `desktop` `home` `downloads` `appdata` `temp` `windows` `root` | | `temp` | Start object from. | +| ANYRUN_OBJ_EXT_CMD | `string` | | string | | | Optional command-line arguments for the analyzed object. Use an empty string '' to apply the default behavior. | +| ANYRUN_OBJ_FORCE_ELEVATION | `boolean` | | boolean | | `true` | Forces the file to execute with elevated privileges and an elevated token (for PE32, PE32+, PE64 files only). | +| ANYRUN_OBJ_EXT_BROWSER | `string` | | `Google Chrome` `Mozilla Firefox` `Internet Explorer` `Microsoft Edge` | | `Google Chrome` | Browser name. | +| ANYRUN_RUN_AS_ROOT | `boolean` | | boolean | | `true` | Run file with superuser privileges. | diff --git a/internal-enrichment/anyrun-task/__metadata__/connector_config_schema.json b/internal-enrichment/anyrun-task/__metadata__/connector_config_schema.json index 8297b3ced00..d3a30c1ffb4 100644 --- a/internal-enrichment/anyrun-task/__metadata__/connector_config_schema.json +++ b/internal-enrichment/anyrun-task/__metadata__/connector_config_schema.json @@ -21,7 +21,7 @@ }, "CONNECTOR_SCOPE": { "default": [ - "Artifact", + "StixFile", "Url" ], "description": "The scope of the connector.", @@ -52,140 +52,156 @@ "description": "Whether the connector should run automatically when an entity is created or updated.", "type": "boolean" }, - "ANYRUN_TOKEN": { - "description": "ANY.RUN API token for authentication.", + "ANYRUN_API_KEY": { + "description": "ANY.RUN Sandbox API-KEY. See 'Generate API KEY' section in the README file.", "format": "password", "type": "string", "writeOnly": true }, - "ANYRUN_MAX_TLP": { - "default": "TLP:AMBER", - "description": "Maximum TLP level for the connector.", + "ANYRUN_OPT_TIMEOUT": { + "default": null, + "type": "integer", + "description": "Select analysis completion time. Size range: 10-660 seconds." + }, + "ANYRUN_OPT_NETWORK_CONNECT": { + "default": true, + "description": "Enable network connection.", + "type": "boolean" + }, + "ANYRUN_OPT_NETWORK_FAKENET": { + "default": false, + "description": "Enable FakeNet feature.", + "type": "boolean" + }, + "ANYRUN_TOR": { + "default": false, + "description": "Enable TOR using.", + "type": "boolean" + }, + "ANYRUN_GEO": { + "default": "fastest", + "description": "TOR geolocation option. Example: US, AU", + "type": "string" + }, + "ANYRUN_MITM": { + "default": false, + "description": "Enable HTTPS MITM Proxy using.", + "type": "boolean" + }, + "ANYRUN_RESIDENTIAL_PROXY": { + "default": false, + "description": "Residential proxy using.", + "type": "boolean" + }, + "ANYRUN_RESIDENTIAL_PROXY_GEO": { + "default": "fastest", + "description": "Residential proxy geolocation option. Example: US, AU.", + "type": "string" + }, + "ANYRUN_PRIVACY_TYPE": { + "default": "bylink", + "description": "Privacy settings.", "enum": [ - "TLP:WHITE", - "TLP:CLEAR", - "TLP:GREEN", - "TLP:AMBER", - "TLP:AMBER+STRICT", - "TLP:RED" + "public", + "bylink", + "owner", + "team" ], "type": "string" }, - "ANYRUN_URL": { - "default": "https://api.any.run/", - "description": "Base URL for the ANY.RUN API.", - "format": "uri", - "maxLength": 2083, - "minLength": 1, - "type": "string" + "ANYRUN_OBJ_EXT_EXTENSION": { + "default": true, + "description": "Automatically change file extension to valid.", + "type": "boolean" }, - "ANYRUN_TASK_TIMER": { - "default": 60, - "description": "Sandbox execution time in seconds.", - "type": "integer" + "ANYRUN_ENV_LOCALE": { + "default": "en-US", + "description": "Operation system's language. Use locale identifier or country name (Ex: en-US or Brazil). Case-insensitive.", + "type": "string" }, - "ANYRUN_OS": { + "ANYRUN_OS_TYPE": { "default": "windows", - "description": "Operating system for sandbox environment.", + "description": "Operating system.", + "enum": [ + "windows", + "linux", + "android" + ], "type": "string" }, - "ANYRUN_BITNESS": { - "default": null, - "deprecated": true, - "type": "string", - "description": "Use ANYRUN_OS_BITNESS instead." + "ANYRUN_ENV_VERSION": { + "default": "10", + "description": "Windows environment version.", + "enum": [ + "7", + "10", + "11" + ], + "type": "string" }, - "ANYRUN_OS_BITNESS": { + "ANYRUN_ENV_BITNESS": { "default": "64", - "description": "Operating system bitness: `32` or `64`.", + "description": "Operating system bitness: 32 or 64 for Windows, 64 for Linux and Android.", "enum": [ "32", "64" ], "type": "string" }, - "ANYRUN_VERSION": { - "default": null, - "deprecated": true, - "type": "string", - "description": "Use ANYRUN_OS_VERSION instead." - }, - "ANYRUN_OS_VERSION": { - "default": "10", - "description": "Windows version: `7`, `8.1`, `10`, or `11`.", + "ANYRUN_ENV_TYPE": { + "default": "complete", + "description": "Windows environment type. You can select development env for OS Windows 10 x64. For all other cases, complete env is required.", "enum": [ - "7", - "8.1", - "10", - "11" + "complete", + "development" ], "type": "string" }, - "ANYRUN_LOCALE": { - "default": null, - "deprecated": true, - "type": "string", - "description": "Use ANYRUN_OS_LOCALE instead." + "ANYRUN_OBJ_EXT_STARTFOLDER": { + "default": "temp", + "description": "Start object from.", + "enum": [ + "desktop", + "home", + "downloads", + "appdata", + "temp", + "windows", + "root" + ], + "type": "string" }, - "ANYRUN_OS_LOCALE": { - "default": "en-US", - "description": "Operating system language locale.", + "ANYRUN_OBJ_EXT_CMD": { + "default": "", + "description": "Optional command-line arguments for the analyzed object. Use an empty string '' to apply the default behavior.", "type": "string" }, - "ANYRUN_BROWSER": { - "default": null, - "deprecated": true, - "type": "string", - "description": "Use ANYRUN_OS_BROWSER instead." + "ANYRUN_OBJ_FORCE_ELEVATION": { + "default": true, + "description": "Forces the file to execute with elevated privileges and an elevated token (for PE32, PE32+, PE64 files only).", + "type": "boolean" }, - "ANYRUN_OS_BROWSER": { + "ANYRUN_OBJ_EXT_BROWSER": { "default": "Google Chrome", - "description": "Browser for URL analysis: `Google Chrome`, `Mozilla Firefox`, `Opera`, `Internet Explorer`, `Microsoft Edge`.", + "description": "Browser name.", "enum": [ "Google Chrome", "Mozilla Firefox", - "Opera", "Internet Explorer", "Microsoft Edge" ], "type": "string" }, - "ANYRUN_PRIVACY": { - "default": "bylink", - "description": "Task privacy: `public`, `bylink`, `owner`, `team`.", - "enum": [ - "public", - "bylink", - "owner", - "team" - ], - "type": "string" - }, - "ANYRUN_AUTOMATED_INTERACTIVITY": { - "default": false, - "description": "Enable ML-based automated interactivity during analysis.", - "type": "boolean" - }, - "ANYRUN_IOC": { + "ANYRUN_RUN_AS_ROOT": { "default": true, - "description": "Import IOCs (domains, URLs, IPs) extracted during analysis.", - "type": "boolean" - }, - "ANYRUN_MITRE": { - "default": false, - "description": "Create relationships to MITRE ATT&CK techniques.", - "type": "boolean" - }, - "ANYRUN_PROCESSES": { - "default": false, - "description": "Import malicious process observables.", + "description": "Run file with superuser privileges.", "type": "boolean" } }, "required": [ "OPENCTI_URL", "OPENCTI_TOKEN", - "ANYRUN_TOKEN" + "ANYRUN_API_KEY" ], "additionalProperties": true } \ No newline at end of file diff --git a/internal-enrichment/anyrun-task/__metadata__/connector_manifest.json b/internal-enrichment/anyrun-task/__metadata__/connector_manifest.json index 86a66463b96..1dffc4a88e8 100644 --- a/internal-enrichment/anyrun-task/__metadata__/connector_manifest.json +++ b/internal-enrichment/anyrun-task/__metadata__/connector_manifest.json @@ -1,8 +1,8 @@ { "title": "ANY.RUN Task", "slug": "anyrun-task", - "description": "Analyze URL or Artifact in ANY.RUN Interactive Online Malware Sandbox", - "short_description": "Analyze Url or Artifact in ANY.RUN Interactive Online Malware Sandbox", + "description": "ANY.RUN's Interactive Sandbox is a cloud-based service that provides SOC teams with a simple way to analyze cyber threats, enabling rapid threat intelligence and deep analysis in a secure environment.", + "short_description": "Analyze Url or StixFile in ANY.RUN Interactive Sandbox", "logo": "internal-enrichment/anyrun-task/__metadata__/logo.png", "use_cases": [ "Enrichment & Analysis", @@ -12,7 +12,7 @@ "verified": true, "last_verified_date": null, "playbook_supported": false, - "max_confidence_level": 75, + "max_confidence_level": 100, "support_version": ">=6.0.0", "subscription_link": null, "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/internal-enrichment/anyrun-task", diff --git a/internal-enrichment/anyrun-task/docker-compose.yml b/internal-enrichment/anyrun-task/docker-compose.yml index 878b651b319..c6999d5173b 100644 --- a/internal-enrichment/anyrun-task/docker-compose.yml +++ b/internal-enrichment/anyrun-task/docker-compose.yml @@ -3,23 +3,62 @@ services: connector-anyrun-task: image: opencti/connector-anyrun-task:latest environment: - - OPENCTI_URL=http://localhost - - OPENCTI_TOKEN=ChangeMe - # - CONNECTOR_ID=30c40257-9514-4b54-bcc9-15445fe21e5e - # - CONNECTOR_NAME=ANY.RUN task - # - CONNECTOR_SCOPE=Artifact,Url - # - CONNECTOR_AUTO=false - # - CONNECTOR_LOG_LEVEL=error - - ANYRUN_TOKEN=ChangeMe - # - ANYRUN_TASK_TIMER=60 - # - ANYRUN_OS=windows - # - ANYRUN_OS_BITNESS=64 # 32, 64 - # - ANYRUN_OS_VERSION=10 # "7", "8.1", "10", "11" - # - ANYRUN_OS_LOCALE=en-US - # - ANYRUN_OS_BROWSER=Google Chrome # "Google Chrome", "Mozilla Firefox", "Opera", "Internet Explorer", "Microsoft Edge" - # - ANYRUN_PRIVACY=bylink # "public", "bylink", "owner", "team" - # - ANYRUN_AUTOMATED_INTERACTIVITY=False # Automated Interactivity (ML) option - # - ANYRUN_IOC=True # Add IOCs - # - ANYRUN_MITRE=False # Add mitre attack patterns relationships - # - ANYRUN_PROCESSES=False # Add malicious processes + # OpenCTI settings. + - OPENCTI_URL=http://localhost # The URL of the OpenCTI platform. Note that final `/` should be avoided. Example value: `http://opencti:8080` + - OPENCTI_TOKEN=ChangeMe # The default admin token configured in the OpenCTI platform parameters file. + + # Connector settings. + - CONNECTOR_ID=ChangeMe # A valid arbitrary `UUIDv4` that must be unique for this connector. + - CONNECTOR_TYPE=INTERNAL_ENRICHMENT # A connector type. + - CONNECTOR_NAME=ANY.RUN Sandbox # A connector name to be shown in OpenCTI. + - CONNECTOR_SCOPE=StixFile,Url # Supported scope. E. g., `text/html`. + - CONNECTOR_AUTO=false # Enable/disable auto-enrichment of observables. + - CONNECTOR_CONFIDENCE_LEVEL=100 # From 0 (Unknown) to 100 (Fully trusted) + - CONNECTOR_LOG_LEVEL=info # The log level for this connector, could be `debug`, `info`, `warn` or `error` (less verbose). + + # ANY.RUN base settings. + - ANYRUN_API_KEY=ChangeMe # ANY.RUN Sandbox API-KEY. See "Generate API token" section in the README file. + - ANYRUN_ENABLE_IOC=true # Add found indicators to the OpenCTI Indicators and Observables tab. + + # ANY.RUN analysis options. + - ANYRUN_OPT_TIMEOUT=240 # Select task completion time. Size range: 10-660 seconds. + - ANYRUN_OPT_NETWORK_CONNECT=true # Enable network connection. + - ANYRUN_OPT_NETWORK_FAKENET=false # Enable FakeNet feature. + - ANYRUN_TOR=false # Enable TOR using. + - ANYRUN_GEO=fastest # TOR geolocation option. Example: US, AU + - ANYRUN_MITM=false # Enable HTTPS MITM Proxy using. + - ANYRUN_RESIDENTIAL_PROXY=false # Residential proxy using. + - ANYRUN_RESIDENTIAL_PROXY_GEO=fastest # Residential proxy geolocation option. Example: US, AU. + - ANYRUN_PRIVACY_TYPE=bylink # Privacy settings. Supports: public, bylink, owner, byteam. + + # ANY.RUN analysis object settings. + - ANYRUN_OBJ_EXT_EXTENSION=true # Automatically change file extension to valid. + + # ANY.RUN analysis environment settings. + - ANYRUN_ENV_LOCALE=en-US # Operation system's language. Use locale identifier or country name (Ex: "en-US" or "Brazil"). Case-insensitive. + + # Please use one of the following environments in the same time: + + # Windows analysis environment. + - ANYRUN_OS_TYPE=windows # Type of OS. Must be windows + - ANYRUN_ENV_VERSION=10 # Version of OS. Supports: 7, 10, 11 + - ANYRUN_ENV_BITNESS=64 # Bitness of Operation System. Supports 32, 64. + - ANYRUN_ENV_TYPE=complete # Environment preset type. You can select **development** env for OS Windows 10 x64. For all other cases, **complete** env is required. + - ANYRUN_OBJ_EXT_STARTFOLDER=temp # Supports: desktop, home, downloads, appdata, temp, windows, root. + - ANYRUN_OBJ_EXT_CMD="" # Optional command-line arguments for the analyzed object. Use an empty string ("") to apply the default behavior. + - ANYRUN_OBJ_FORCE_ELEVATION=false # Forces the file to execute with elevated privileges and an elevated token (for PE32, PE32+, PE64 files only). + # Only for the Url analysis. + # - ANYRUN_OBJ_EXT_BROWSER=Microsoft Edge # Browser name. Supports: Google Chrome, Mozilla Firefox, Internet Explorer, Microsoft Edge. + + # Linux analysis environment. + # - ANYRUN_OS_TYPE=linux # Type of OS. Must be linux + # - ANYRUN_OBJ_EXT_STARTFOLDER=temp # Start object from. Supports: desktop, home, downloads, temp. + # - ANYRUN_OBJ_EXT_CMD="" # Optional command-line arguments for the analyzed object. Use an empty string ("") to apply the default behavior. + # - ANYRUN_RUN_AS_ROOT=true # Run file with superuser privileges. + # Only for the Url analysis. + # - ANYRUN_OBJ_EXT_BROWSER=Google Chrome # Browser name. Supports: Google Chrome, Mozilla Firefox. + + # Android analysis environment. + # - ANYRUN_OS_TYPE=android # Type of OS. Must be android + # - ANYRUN_OBJ_EXT_CMD="" # Optional command-line arguments for the analyzed object. Use an empty string ("") to apply the default behavior. restart: always diff --git a/internal-enrichment/anyrun-task/entrypoint.sh b/internal-enrichment/anyrun-task/entrypoint.sh new file mode 100644 index 00000000000..02cfa2b4e4d --- /dev/null +++ b/internal-enrichment/anyrun-task/entrypoint.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# Start the connector (WORKDIR is /opt/connector as set in the Dockerfile) +python3 opencti_client.py \ No newline at end of file diff --git a/internal-enrichment/anyrun-task/src/anyrun_sandbox.py b/internal-enrichment/anyrun-task/src/anyrun_sandbox.py new file mode 100644 index 00000000000..618e03286da --- /dev/null +++ b/internal-enrichment/anyrun-task/src/anyrun_sandbox.py @@ -0,0 +1,184 @@ +import time + +from anyrun.connectors import SandboxConnector +from anyrun.connectors.sandbox.base_connector import BaseSandboxConnector +from anyrun.connectors.sandbox.operation_systems import ( + AndroidConnector, + LinuxConnector, + WindowsConnector, +) +from config import Config +from pycti import OpenCTIConnectorHelper + + +class AnyRunSandbox: + def __init__(self, helper: OpenCTIConnectorHelper) -> None: + self._config: Config | None = None + self._helper = helper + self._analysis_type: str | None = None + + def load_analysis_object(self, opencti_entity: dict) -> None: + """ + Setups ANY.RUN client using OpenCTI entity data + + :param opencti_entity: OpenCTI entity + """ + if opencti_entity["entity_type"] == "StixFile": + if not opencti_entity["importFiles"]: + raise ValueError( + "Failed to stat analysis. Observable hasn't attachments" + ) + + self._config = Config.update_config( + self._get_file_content(opencti_entity["importFiles"][-1]), "File" + ) + self._analysis_type = "File" + elif opencti_entity["entity_type"] == "Url": + self._config = Config.update_config(opencti_entity["value"], "Url") + self._analysis_type = "Url" + else: + raise ValueError("Wrong scope! Supported only StixFile and Url observables") + + def process_analysis(self) -> dict: + """ + Starts new ANY.RUN Sandbox analysis using env_os option value + + """ + if self._config.env_os == "windows": + return self._process_windows_analysis() + elif self._config.env_os == "linux": + return self._process_linux_analysis() + elif self._config.env_os == "android": + return self._process_android_analysis() + else: + raise ValueError( + "ANY.RUN env_os option value is invalid! Please specify one of the following environments: windows, linux, android" + ) + + def get_iocs(self, task_uuid) -> list[dict] | None: + """ + Loads ANY.RUN task indicators + + :param task_uuid: ANY.RUN task uuid + :return: List of indicators if exists + """ + with SandboxConnector.windows( + self._config.anyrun_token, + integration=self._config.VERSION, + enable_requests=True, + ) as connector: + iocs = connector.get_analysis_report( + task_uuid, report_format="ioc", ioc_reputation="all" + ) + + return iocs if iocs else None + + def get_report(self, task_uuid: str) -> bytes | dict: + """ + Loads ANY.RUN task html report + + :param task_uuid: ANY.RUN task uuid + :return: HTML report bytes + """ + with BaseSandboxConnector( + self._config.anyrun_token, + integration=self._config.VERSION, + enable_requests=True, + ) as connector: + return connector.get_analysis_report(task_uuid, "html") + + def get_verdict(self, task_uuid: str) -> str: + """ + Loads ANY.RUN task verdict + + :param task_uuid: ANY.RUN task uuid + :return: Verdict + """ + with BaseSandboxConnector( + self._config.anyrun_token, + integration=self._config.VERSION, + enable_requests=True, + ) as connector: + return connector.get_analysis_verdict(task_uuid) + + def _get_file_content(self, file: dict) -> tuple[bytes, str]: + """ + Loads OpenCTI entity file + + :param file: OpenCTI file params + :return: File data + """ + artifact_url = f'{self._helper.opencti_url}/storage/get/{file.get("id")}' + try: + return self._helper.api.fetch_opencti_file( + artifact_url, binary=True + ), file.get("name") + except Exception as err: + raise ValueError("Error fetching attachment from the observable") from err + + def _process_windows_analysis(self) -> dict: + """ + Initializes ANY.RUN Sandbox analysis using Windows environment + + :return: ANY.RUN Sandbox analysis summary + """ + with SandboxConnector.windows( + self._config.anyrun_token, + integration=self._config.VERSION, + enable_requests=True, + ) as connector: + summary = self._get_submission(connector) + return summary + + def _process_linux_analysis(self) -> dict: + """ + Initializes ANY.RUN Linux analysis using Windows environment + + :return: ANY.RUN Linux analysis summary + """ + with SandboxConnector.linux( + self._config.anyrun_token, + integration=self._config.VERSION, + enable_requests=True, + ) as connector: + summary = self._get_submission(connector) + return summary + + def _process_android_analysis(self) -> dict: + """ + Initializes ANY.RUN Android analysis using Windows environment + + :return: ANY.RUN Android analysis summary + """ + with SandboxConnector.android( + self._config.anyrun_token, + integration=self._config.VERSION, + enable_requests=True, + ) as connector: + summary = self._get_submission(connector) + return summary + + def _get_submission( + self, connector: WindowsConnector | LinuxConnector | AndroidConnector + ) -> dict: + """ + Process analysis + + :param connector: ANY.RUN Sandbox connector instance + :return: ANY.RUN analysis summary + """ + connector.check_authorization() + + if self._analysis_type == "File": + task_uuid = connector.run_file_analysis(**self._config.to_dict) + else: + task_uuid = connector.run_url_analysis(**self._config.to_dict) + + time.sleep(10) + + self._helper.log_info("Analysis is started successfully.") + for status in connector.get_task_status(task_uuid): + self._helper.log_info(str(status)) + + self._helper.log_info("Analysis is completed. Processing the report results.") + return connector.get_analysis_report(task_uuid, report_format="json") diff --git a/internal-enrichment/anyrun-task/src/anyrun_task/__init__.py b/internal-enrichment/anyrun-task/src/anyrun_task/__init__.py deleted file mode 100644 index fbfc1e05963..00000000000 --- a/internal-enrichment/anyrun-task/src/anyrun_task/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -from .connector import AnyRunTask -from .settings import ConnectorSettings - -__all__ = [ - "AnyRunTask", - "ConnectorSettings", -] diff --git a/internal-enrichment/anyrun-task/src/anyrun_task/connector.py b/internal-enrichment/anyrun-task/src/anyrun_task/connector.py deleted file mode 100644 index dd43bced851..00000000000 --- a/internal-enrichment/anyrun-task/src/anyrun_task/connector.py +++ /dev/null @@ -1,306 +0,0 @@ -import json -import time -from typing import TYPE_CHECKING - -import requests - -if TYPE_CHECKING: - from pycti import OpenCTIConnectorHelper - - from .settings import ConnectorSettings - - -class AnyRunTask: - def __init__(self, config: "ConnectorSettings", helper: "OpenCTIConnectorHelper"): - self.config = config - self.helper = helper - self.token = self.config.anyrun.token.get_secret_value() - self.anyrun_url = self.config.anyrun.url - self.organization = self.helper.api.identity.create( - type="Organization", - name="ANY.RUN", - description="Interactive Online Malware Sandbox", - contact_information="https://any.run/", - ) - self.task_timer = self.config.anyrun.task_timer - self.task_os = self.config.anyrun.os - self.task_os_bitness = self.config.anyrun.os_bitness - self.task_os_version = self.config.anyrun.os_version - self.task_os_locale = self.config.anyrun.os_locale - self.task_os_browser = self.config.anyrun.os_browser - self.task_privacy = self.config.anyrun.privacy - self.automated_interactivity = self.config.anyrun.automated_interactivity - self.enable_ioc = self.config.anyrun.ioc - self.enable_mitre = self.config.anyrun.mitre - self.enable_processes = self.config.anyrun.processes - self.iocs_types_mapping = { - "domain": "Domain-Name", - "url": "Url", - "ip": "IPv4-Addr", - } - - def call_anyrun_api(self, method, uri, data=None, file=None): - if data is None: - data = {} - url = "{}/{}".format(self.anyrun_url, uri) - if method == "POST": - response = requests.post( - url, - data=data, - headers={"Authorization": "API-Key {}".format(self.token)}, - files={"file": file}, - ) - elif method == "GET": - response = requests.get( - url, headers={"Authorization": "API-Key {}".format(self.token)} - ) - return response - - def run_task(self, type, data, file=None): - """ - - :param file: bytes file content - :param data: dict - :param type: str: 'url' or 'file' - :return: int: task id - """ - rdata = { - "env_os": self.task_os, - "env_bitness": self.task_os_bitness, - "env_locale": self.task_os_locale, - "env_version": self.task_os_version, - "obj_url": data.get("value"), - "obj_type": type, - "opt_network_connect": "true", - "obj_ext_browser": self.task_os_browser, - "opt_timeout": self.task_timer, - "opt_automated_interactivity": self.automated_interactivity, - "opt_privacy_type": self.task_privacy, - } - response = self.call_anyrun_api("POST", "v1/analysis", rdata, file) - json_data = json.loads(response.text) - return json_data - - def wait_for_task(self, task_id, timer=300): - num = 0 - self.helper.log_info(f"ANY.RUN Waiting {timer} seconds for task {task_id}") - while True: - time.sleep(1) - num += 1 - response = self.call_anyrun_api("GET", f"v1/analysis/{task_id}") - try: - result = json.loads(response.text) - if result["data"]["status"] == "done": - self.helper.log_info(f"ANY.RUN task {task_id} completed") - return result - except Exception as e: - self.helper.log_error(f"Error waiting for task {task_id}: {e}") - continue - finally: - if num == timer: - raise ValueError("ANY.RUN task waiting timeout") - - def _process_message(self, data): - self.helper.log_debug(str(data)) - opencti_entity = self.helper.api.stix_cyber_observable.read( - id=data["entity_id"], withFiles=True - ) - if opencti_entity is None: - raise ValueError( - "Observable not found (or the connector does not has access to this observable, check the group of the connector user)" - ) - self.helper.log_debug(str(opencti_entity)) - if opencti_entity["entity_type"] == "Artifact": - artifact_url = f"{self.helper.opencti_url}/storage/get/{opencti_entity['importFiles'][0]['id']}" - try: - artifact = self.helper.api.fetch_opencti_file(artifact_url, binary=True) - except Exception as err: - raise ValueError("Error fetching artifact from OpenCTI") from err - task = self.run_task("file", data={}, file=artifact) - elif opencti_entity["entity_type"] == "Url": - task = self.run_task("url", {"value": opencti_entity["value"]}) - else: - raise ValueError( - 'Wrong scope! supported only "Artifact" and "Url" observables types' - ) - if task.get("error", False): - error_message = task.get("message", "Unknown error") - raise ValueError(error_message) - else: - self.helper.log_info( - f"ANY.RUN task started url: https://app.any.run/tasks/{task['data']['taskid']}" - ) - # Create external reference to ANY.RUN task - external_reference_task = self.helper.api.external_reference.create( - source_name=f"ANY.RUN task {task['data']['taskid']}", - url=f"https://app.any.run/tasks/{task['data']['taskid']}", - ) - self.helper.api.stix_cyber_observable.add_external_reference( - id=opencti_entity["id"], - external_reference_id=external_reference_task["id"], - ) - result = self.wait_for_task( - task["data"]["taskid"], timer=self.task_timer + 20 - ) - - # Add labels from ANY.RUN task result - for tag in result["data"]["analysis"]["tags"]: - label = self.helper.api.label.create(value=tag["tag"]) - self.helper.api.stix_cyber_observable.add_label( - id=opencti_entity["id"], label_id=label["id"] - ) - - # Update observable score - anyrun_score = result["data"]["analysis"]["scores"]["verdict"]["score"] - opencti_score = opencti_entity.get("x_opencti_score", anyrun_score) - if opencti_score is None: - opencti_score = 0 - if anyrun_score < opencti_score: - note = self.helper.api.note.create( - authors=[self.organization["id"]], - content=f"ANY.RUN score: {anyrun_score}", - ) - self.helper.api.note.add_stix_object_or_stix_relationship( - id=note["id"], stixObjectOrStixRelationshipId=opencti_entity["id"] - ) - else: - self.helper.api.stix_cyber_observable.update_field( - id=opencti_entity["id"], - input={"key": "x_opencti_score", "value": str(anyrun_score)}, - ) - - # Add MITRE ATT&CK relationships - if self.enable_mitre: - for pattern_anyrun in result["data"]["mitre"]: - patterns_opencti = self.helper.api.attack_pattern.list( - search=pattern_anyrun["id"] - ) - for pattern_opencti in patterns_opencti: - if pattern_opencti["x_mitre_id"] == pattern_anyrun["id"]: - self.helper.api.stix_core_relationship.create( - toId=pattern_opencti["id"], - fromId=opencti_entity["id"], - confidence=90, - createdBy=self.organization["id"], - relationship_type="related-to", - description="Attack pattern", - ) - - # Add malicious IOCs - if self.enable_ioc: - response = self.call_anyrun_api( - "GET", f"report/{task['data']['taskid']}/ioc/json" - ) - iocs = json.loads(response.text) - for ioc in iocs: - if self.iocs_types_mapping.get(ioc["type"]) is None: - self.helper.log_warning( - "Indicator type {} is not supported. value ({})".format( - ioc["type"], str(ioc) - ) - ) - continue - if ioc["reputation"] == 2: - new_observable = self.helper.api.stix_cyber_observable.create( - observableData={ - "type": self.iocs_types_mapping.get(ioc["type"]), - "value": ioc["ioc"], - }, - createIndicator=True, - createdBy=self.organization["id"], - update=True, - ) - if new_observable["id"] != opencti_entity["id"]: - self.helper.api.stix_core_relationship.create( - toId=new_observable["id"], - fromId=opencti_entity["id"], - confidence=90, - createdBy=self.organization["id"], - relationship_type="related-to", - description=ioc["category"], - ) - indicator = self.helper.api.indicator.create( - name=ioc["ioc"], - description=ioc["category"], - pattern_type="stix", - pattern="[{}:value = '{}']".format( - self.iocs_types_mapping[ioc["type"]].lower(), ioc["ioc"] - ), - x_opencti_main_observable_type=self.iocs_types_mapping[ - ioc["type"] - ], - x_opencti_score=opencti_score, - update=True, - x_mitre_platforms=[self.config.anyrun.os], - createdBy=self.organization["id"], - ) - if new_observable["id"] != opencti_entity["id"]: - self.helper.api.indicator.add_stix_cyber_observable( - id=indicator["id"], - stix_cyber_observable_id=opencti_entity["id"], - ) - else: - self.helper.api.indicator.add_stix_cyber_observable( - id=indicator["id"], - stix_cyber_observable_id=new_observable["id"], - ) - - # Add malicious processes - if self.enable_processes: - procs_links = [] - for proc in result["data"]["processes"]: - if ( - proc["scores"]["verdict"]["score"] > 0 - and proc["important"] is True - ): - process = self.helper.api.stix_cyber_observable.create( - observableData={ - "type": "Process", - "x_opencti_description": proc["scores"]["verdict"][ - "threatLevelText" - ], - "cwd": proc["fileName"], - "pid": proc["pid"], - "command_line": proc["commandLine"], - "x_opencti_score": proc["scores"]["verdict"]["score"], - "value": proc["commandLine"], - }, - createdBy=self.organization["id"], - update=True, - ) - if proc.get("threatName") is not None: - label = self.helper.api.label.create( - value=proc["threatName"] - ) - self.helper.api.stix_cyber_observable.add_label( - id=process["id"], label_id=label["id"] - ) - self.helper.api.stix_core_relationship.create( - toId=opencti_entity["id"], - fromId=process["id"], - confidence=90, - createdBy=self.organization["id"], - relationship_type="related-to", - description="Relation between the Main object and Process objects", - ) - procs_links.append( - { - "pid": proc["pid"], - "ppid": proc["ppid"], - "observable_id": process["id"], - } - ) - for proc_main in procs_links: - for proc_child in procs_links: - if proc_child["ppid"] == proc_main["pid"]: - self.helper.api.stix_core_relationship.create( - toId=proc_main["observable_id"], - fromId=proc_child["observable_id"], - confidence=90, - createdBy=self.organization["id"], - relationship_type="related-to", - description="Relation between child and parent process", - ) - - def run(self): - self.helper.listen(self._process_message) diff --git a/internal-enrichment/anyrun-task/src/anyrun_task/settings.py b/internal-enrichment/anyrun-task/src/anyrun_task/settings.py deleted file mode 100644 index 62cc5ab941d..00000000000 --- a/internal-enrichment/anyrun-task/src/anyrun_task/settings.py +++ /dev/null @@ -1,125 +0,0 @@ -from typing import Literal - -from connectors_sdk import ( - BaseConfigModel, - BaseConnectorSettings, - BaseInternalEnrichmentConnectorConfig, - DeprecatedField, - ListFromString, -) -from pydantic import Field, HttpUrl, SecretStr, SkipValidation - - -class InternalEnrichmentConnectorConfig(BaseInternalEnrichmentConnectorConfig): - """ - Override the `BaseInternalEnrichmentConnectorConfig` to add parameters and/or defaults - to the configuration for connectors of type `INTERNAL_ENRICHMENT`. - """ - - id: str = Field( - description="A UUID v4 to identify the connector in OpenCTI.", - default="30c40257-9514-4b54-bcc9-15445fe21e5e", - ) - name: str = Field( - description="The name of the connector.", - default="ANY.RUN task", - ) - scope: ListFromString = Field( - description="The scope of the connector.", - default=["Artifact", "Url"], - ) - - -class AnyrunTaskConfig(BaseConfigModel): - """ - Define parameters and/or defaults for the configuration specific to the `AnyrunTaskConnector`. - """ - - token: SecretStr = Field( - description="ANY.RUN API token for authentication.", - ) - max_tlp: Literal[ - "TLP:WHITE", - "TLP:CLEAR", - "TLP:GREEN", - "TLP:AMBER", - "TLP:AMBER+STRICT", - "TLP:RED", - ] = Field(description="Maximum TLP level for the connector.", default="TLP:AMBER") - url: HttpUrl = Field( - description="Base URL for the ANY.RUN API.", - default=HttpUrl("https://api.any.run"), - ) - task_timer: int = Field( - description="Sandbox execution time in seconds.", default=60 - ) - os: str = Field( - description="Operating system for sandbox environment.", default="windows" - ) - bitness: SkipValidation[str] = DeprecatedField( # type: ignore[assignment] - deprecated="Deprecated: Use `os_bitness` instead.", - new_namespaced_var="os_bitness", - ) - os_bitness: Literal["32", "64"] = Field( - description="Operating system bitness: `32` or `64`.", default="64" - ) - version: SkipValidation[str] = DeprecatedField( # type: ignore[assignment] - deprecated="Deprecated: Use `os_version` instead.", - new_namespaced_var="os_version", - ) - os_version: Literal["7", "8.1", "10", "11"] = Field( - description="Windows version: `7`, `8.1`, `10`, or `11`.", default="10" - ) - locale: SkipValidation[str] = DeprecatedField( # type: ignore[assignment] - deprecated="Deprecated: Use `os_locale` instead.", - new_namespaced_var="os_locale", - ) - os_locale: str = Field( - description="Operating system language locale.", default="en-US" - ) - browser: SkipValidation[str] = DeprecatedField( # type: ignore[assignment] - deprecated="Deprecated: Use `os_browser` instead.", - new_namespaced_var="os_browser", - ) - os_browser: Literal[ - "Google Chrome", - "Mozilla Firefox", - "Opera", - "Internet Explorer", - "Microsoft Edge", - ] = Field( - description=( - "Browser for URL analysis: `Google Chrome`, `Mozilla Firefox`, `Opera`, " - "`Internet Explorer`, `Microsoft Edge`." - ), - default="Google Chrome", - ) - privacy: Literal["public", "bylink", "owner", "team"] = Field( - description="Task privacy: `public`, `bylink`, `owner`, `team`.", - default="bylink", - ) - automated_interactivity: bool = Field( - description="Enable ML-based automated interactivity during analysis.", - default=False, - ) - ioc: bool = Field( - description="Import IOCs (domains, URLs, IPs) extracted during analysis.", - default=True, - ) - mitre: bool = Field( - description="Create relationships to MITRE ATT&CK techniques.", default=False - ) - processes: bool = Field( - description="Import malicious process observables.", default=False - ) - - -class ConnectorSettings(BaseConnectorSettings): - """ - Override `BaseConnectorSettings` to include `InternalEnrichmentConnectorConfig` and `AnyrunTaskConfig`. - """ - - connector: InternalEnrichmentConnectorConfig = Field( - default_factory=InternalEnrichmentConnectorConfig - ) - anyrun: AnyrunTaskConfig = Field(default_factory=AnyrunTaskConfig) diff --git a/internal-enrichment/anyrun-task/src/config.py b/internal-enrichment/anyrun-task/src/config.py new file mode 100644 index 00000000000..2dbf5fda7c0 --- /dev/null +++ b/internal-enrichment/anyrun-task/src/config.py @@ -0,0 +1,264 @@ +import os +from typing import Self + +import yaml +from pycti import get_config_variable + +config_file_path: str = os.path.join( + os.path.dirname(os.path.abspath(__file__)), "config.yml" +) + +config: dict = ( + yaml.safe_load(open(config_file_path, encoding="utf-8")) + if os.path.isfile(config_file_path) + else {} +) + + +# Mapping from internal parameter name (used as a kwarg of the ANY.RUN SDK) +# to the corresponding environment variable name and YAML path. Keeping the +# table explicit avoids surprises caused by previous `f"ANYRUN_{name.upper()}"` +# generation that did not match the variable names documented in the +# docker-compose / __metadata__ files. +_BASE_PARAMS: dict[str, tuple[str, list[str]]] = { + "env_locale": ("ANYRUN_ENV_LOCALE", ["anyrun_env", "env_locale"]), + "opt_network_connect": ( + "ANYRUN_OPT_NETWORK_CONNECT", + ["anyrun_opt", "opt_network_connect"], + ), + "opt_network_fakenet": ( + "ANYRUN_OPT_NETWORK_FAKENET", + ["anyrun_opt", "opt_network_fakenet"], + ), + "opt_network_tor": ("ANYRUN_TOR", ["anyrun_opt", "opt_network_tor"]), + "opt_network_geo": ("ANYRUN_GEO", ["anyrun_opt", "opt_network_geo"]), + "opt_network_mitm": ("ANYRUN_MITM", ["anyrun_opt", "opt_network_mitm"]), + "opt_network_residential_proxy": ( + "ANYRUN_RESIDENTIAL_PROXY", + ["anyrun_opt", "opt_network_residential_proxy"], + ), + "opt_network_residential_proxy_geo": ( + "ANYRUN_RESIDENTIAL_PROXY_GEO", + ["anyrun_opt", "opt_network_residential_proxy_geo"], + ), + "opt_privacy_type": ( + "ANYRUN_PRIVACY_TYPE", + ["anyrun_opt", "opt_privacy_type"], + ), + "obj_ext_extension": ( + "ANYRUN_OBJ_EXT_EXTENSION", + ["anyrun_obj", "obj_ext_extension"], + ), +} + + +class Config: + """Base configuration class.""" + + VERSION = "OpenCTI:7.260401.0" + + def __init__(self, params: dict[str, bool | int | None | str]) -> None: + self._params = params + self._create_base_config() + + self.env_os: str = params.pop("env_os") + self.anyrun_token = get_config_variable( + "ANYRUN_API_KEY", ["anyrun", "api_key"], config + ) + self.enable_ioc = get_config_variable( + "ANYRUN_ENABLE_IOC", + ["anyrun", "enable_ioc"], + config, + default=True, + ) + + def _create_base_config(self) -> dict[str, bool | int | None | str]: + """ + Generates a dictionary using content of docker-compose.yml or config.yml file + + :return: Dictionary with base user settings + """ + for param_name, (env_var, yaml_path) in _BASE_PARAMS.items(): + self._params[param_name] = get_config_variable( + env_var, + yaml_path, + config, + ) + + self._params["opt_timeout"] = get_config_variable( + "ANYRUN_OPT_TIMEOUT", + ["anyrun_opt", "opt_timeout"], + config, + isNumber=True, + ) + + return self._params + + @classmethod + def update_config( + cls, submission_obj: str | tuple[bytes, str], entity_type: str + ) -> Self: + """ + Update config parameters using user environment settings + + :param submission_obj: OpenCTI entity object + :param entity_type: OpenCTI entity type + :return: New Config instance for the specified environment + :raises ValueError: If invalid **os_type** option value is specified + """ + os_type = get_config_variable( + "ANYRUN_OS_TYPE", ["anyrun_env", "os_type"], config + ) + + if os_type == "windows": + return cls(cls._create_windows_config(submission_obj, entity_type)) + + if os_type == "linux": + return cls(cls._create_linux_config(submission_obj, entity_type)) + + if os_type == "android": + return cls(cls._create_android_config(submission_obj, entity_type)) + + raise ValueError( + f"Unspecified submission os: {os_type}" + if os_type + else "The os_type option must be specified" + ) + + @staticmethod + def _create_windows_config( + submission_obj: str | tuple[bytes, str], entity_type: str + ) -> dict[str, bool | int | None | str]: + """ + Updates config using Windows environment settings + + :param submission_obj: OpenCTI entity object + :param entity_type: OpenCTI entity type + :return: New Config instance for the Windows environment + """ + params: dict[str, bool | int | None | str] = {"env_os": "windows"} + + params["env_version"] = get_config_variable( + "ANYRUN_ENV_VERSION", ["anyrun_windows_env", "env_version"], config + ) + + params["env_bitness"] = get_config_variable( + "ANYRUN_ENV_BITNESS", + ["anyrun_windows_env", "env_bitness"], + config, + isNumber=True, + ) + + params["env_type"] = get_config_variable( + "ANYRUN_ENV_TYPE", ["anyrun_windows_env", "env_type"], config + ) + + if entity_type == "File": + params["file_content"] = submission_obj[0] + params["filename"] = submission_obj[1] + + params["obj_ext_startfolder"] = get_config_variable( + "ANYRUN_OBJ_EXT_STARTFOLDER", + ["anyrun_windows_env", "obj_ext_startfolder"], + config, + ) + + params["obj_ext_cmd"] = get_config_variable( + "ANYRUN_OBJ_EXT_CMD", ["anyrun_windows_env", "obj_ext_cmd"], config + ) + + params["obj_force_elevation"] = get_config_variable( + "ANYRUN_OBJ_FORCE_ELEVATION", + ["anyrun_windows_env", "obj_force_elevation"], + config, + ) + + if entity_type == "Url": + params = Config._process_url(params, submission_obj) + + return params + + @staticmethod + def _create_linux_config( + submission_obj: str | tuple[bytes, str], entity_type: str + ) -> dict[str, bool | int | None | str]: + """ + Updates config using Linux environment settings + + :param submission_obj: OpenCTI entity object + :param entity_type: OpenCTI entity type + :return: New Config instance for the Linux environment + """ + params: dict[str, bool | int | None | str] = {"env_os": "linux"} + + if entity_type == "File": + params["file_content"] = submission_obj[0] + params["filename"] = submission_obj[1] + + params["obj_ext_startfolder"] = get_config_variable( + "ANYRUN_OBJ_EXT_STARTFOLDER", + ["anyrun_linux_env", "obj_ext_startfolder"], + config, + ) + + params["obj_ext_cmd"] = get_config_variable( + "ANYRUN_OBJ_EXT_CMD", ["anyrun_linux_env", "obj_ext_cmd"], config + ) + + params["run_as_root"] = get_config_variable( + "ANYRUN_RUN_AS_ROOT", ["anyrun_linux_env", "run_as_root"], config + ) + + if entity_type == "Url": + params = Config._process_url(params, submission_obj) + + return params + + @staticmethod + def _create_android_config( + submission_obj: str | tuple[bytes, str], entity_type: str + ) -> dict[str, bool | int | None | str]: + """ + Updates config using Android environment settings + + :param submission_obj: OpenCTI entity object + :param entity_type: OpenCTI entity type + :return: New Config instance for the Android environment + """ + params: dict[str, bool | int | None | str] = {"env_os": "android"} + + if entity_type == "File": + params["file_content"] = submission_obj[0] + params["filename"] = submission_obj[1] + + params["obj_ext_cmd"] = get_config_variable( + "ANYRUN_OBJ_EXT_CMD", ["anyrun_android_env", "obj_ext_cmd"], config + ) + + if entity_type == "Url": + params = Config._process_url(params, submission_obj) + + return params + + @staticmethod + def _process_url( + params: dict[str, bool | int | None | str], submission_obj: str + ) -> dict[str, bool | int | None | str]: + """ + Updates config using Url environment settings + + :param params: Config parameters + :param submission_obj: OpenCTI entity object + :return: Updated config + """ + params["obj_url"] = submission_obj + + params["obj_ext_browser"] = get_config_variable( + "ANYRUN_OBJ_EXT_BROWSER", ["anyrun_env", "obj_ext_browser"], config + ) + + return params + + @property + def to_dict(self) -> dict[str, bool | int | None | str]: + return self._params diff --git a/internal-enrichment/anyrun-task/src/config.yml.sample b/internal-enrichment/anyrun-task/src/config.yml.sample index db50cc007c1..eeb3e446d3e 100644 --- a/internal-enrichment/anyrun-task/src/config.yml.sample +++ b/internal-enrichment/anyrun-task/src/config.yml.sample @@ -1,26 +1,57 @@ opencti: - url: 'http://localhost' - token: 'ChangeMe' + url: "http://localhost:8080" # The URL of the OpenCTI platform. Note that final `/` should be avoided. Example value: `http://opencti:8080` + token: "ChangeMe" # The default admin token configured in the OpenCTI platform parameters file. -# connector: - # id: '30c40257-9514-4b54-bcc9-15445fe21e5e' - # name: 'ANY.RUN task' - # scope: 'Artifact,Url' - # auto: false # Enable/disable auto-enrichment of observables - # log_level: 'error' +connector: + id: "ChangeMe" # A valid arbitrary `UUIDv4` that must be unique for this connector. + type: "INTERNAL_ENRICHMENT" # A connector type. + name: "ANY.RUN Sandbox" # A connector name to be shown in OpenCTI. + scope: "StixFile,Url" # Supported scope. E. g., `text/html`. + auto: false # Enable/disable auto-enrichment of observables + confidence_level: 75 # From 0 (Unknown) to 100 (Fully trusted) + log_level: "info" # The log level for this connector, could be `debug`, `info`, `warn` or `error` (less verbose). anyrun: - token: 'ChangeMe' - # max_tlp: 'TLP:AMBER' - # url: 'https://api.any.run' - # task_timer: 60 - # os: 'windows' - # os_bitness: '64' # Operating system bitness: `32` or `64`. - # os_version: '10' # Windows version: `7`, `8.1`, `10`, or `11`. - # os_locale: 'en-US' - # os_browser: 'Google Chrome' # Browser for URL analysis: `Google Chrome`, `Mozilla Firefox`, `Opera`, `Internet Explorer`, `Microsoft Edge` - # privacy: 'bylink' # Task privacy: `public`, `bylink`, `owner`, `team` - # automated_interactivity: False - # ioc: True # Import IOCs (domains, URLs, IPs) extracted during analysis - # mitre: False # Create relationships to MITRE ATT&CK techniques. - # processes: False # Import malicious process observables + api_key: "ChangeMe" # ANY.RUN Sandbox API-KEY. See "Generate API token" section in the README file. + enable_ioc: true # Add found indicators to the OpenCTI Indicators and Observables tab. + +anyrun_opt: + opt_timeout: 240 # Timeout option. Size range: 10-660 seconds. + opt_network_connect: true # Enable network connection. + opt_network_fakenet: false # Enable FakeNet feature. + opt_network_tor: false # Enable TOR using. + opt_network_geo: "fastest" # TOR geolocation option. Example: US, AU + opt_network_mitm: false # Enable HTTPS MITM Proxy using. + opt_network_residential_proxy: false # Residential proxy using. + opt_network_residential_proxy_geo: "fastest" # Residential proxy geolocation option. Example: US, AU. + opt_privacy_type: "bylink" # Privacy settings. Supports: public, bylink, owner, byteam. + +anyrun_obj: + obj_ext_extension: true # Automatically change file extension to valid. + +anyrun_env: + # Operating system. Supports: windows, linux, android. Only one of the + # ``anyrun_*_env`` sections below should be filled, matching this value. + os_type: "windows" + env_locale: "en-US" # Operation system's language. Use locale identifier or country name (Ex: "en-US" or "Brazil"). Case-insensitive. + +# Windows environment - used when ``anyrun_env.os_type`` is ``windows``. +anyrun_windows_env: + env_version: "10" # Version of OS. Supports: 7, 10, 11. + env_bitness: "64" # Bitness of Operation System. Supports 32, 64. + env_type: "complete" # Environment preset type. You can select **development** env for OS Windows 10 x64. For all other cases, **complete** env is required. + obj_ext_startfolder: "temp" # Supports: desktop, home, downloads, appdata, temp, windows, root. + obj_ext_cmd: "" # Optional command-line arguments for the analyzed object. Use an empty string ("") to apply the default behavior. + obj_force_elevation: false # Forces the file to execute with elevated privileges and an elevated token (for PE32, PE32+, PE64 files only). + obj_ext_browser: "Microsoft Edge" # Browser name. Supports: Google Chrome, Mozilla Firefox, Internet Explorer, Microsoft Edge. Only for the Url analysis. + +# Linux environment - used when ``anyrun_env.os_type`` is ``linux``. +anyrun_linux_env: + obj_ext_startfolder: "temp" # Start object from. Supports: desktop, home, downloads, temp. + obj_ext_cmd: "" # Optional command-line arguments for the analyzed object. Use an empty string ("") to apply the default behavior. + run_as_root: true # Run file with superuser privileges. + obj_ext_browser: "Google Chrome" # Browser name. Supports: Google Chrome, Mozilla Firefox. Only for the Url analysis. + +# Android environment - used when ``anyrun_env.os_type`` is ``android``. +anyrun_android_env: + obj_ext_cmd: "" # Optional command-line arguments for the analyzed object. \ No newline at end of file diff --git a/internal-enrichment/anyrun-task/src/opencti_client.py b/internal-enrichment/anyrun-task/src/opencti_client.py new file mode 100644 index 00000000000..3e5e5c4fcfc --- /dev/null +++ b/internal-enrichment/anyrun-task/src/opencti_client.py @@ -0,0 +1,341 @@ +import stix2 +from anyrun_sandbox import AnyRunSandbox +from config import config +from pycti import ( + Identity, + Indicator, + OpenCTIConnectorHelper, + StixCoreRelationship, + get_config_variable, +) + +ANYRUN_INDICATOR_TO_MAIN_OBSERVABLE = { + "domain": "Domain-Name", + "url": "Url", + "ip": "IPv4-Addr", + "sha256": "File", +} + +# Patterns used to build STIX indicators from ANY.RUN IoC entries. +# File hashes have to follow the canonical ``file:hashes.''`` syntax so +# OpenCTI's pattern parser can normalise them; the other observable types use +# the simple ``:value`` pattern. +ANYRUN_INDICATOR_PATTERNS = { + "domain": "[domain-name:value = '{value}']", + "url": "[url:value = '{value}']", + "ip": "[ipv4-addr:value = '{value}']", + "sha256": "[file:hashes.'SHA-256' = '{value}']", +} + + +class OpenCTI: + def __init__(self, helper: OpenCTIConnectorHelper, anyrun: AnyRunSandbox): + self._helper = helper + self._anyrun = anyrun + + self._opencti_entity: dict | None = None + + self._identity = stix2.Identity( + id=Identity.generate_id("ANY.RUN", "organization"), + name="ANY.RUN", + identity_class="organization", + description="Empowers SOC teams with a Sandbox for real-time malware analysis, Threat Intelligence Lookup, " + "and high-quality feeds to enhance detection and threat coverage.", + contact_information="techsupport@any.run", + ) + + self._helper.send_stix2_bundle( + self._helper.stix2_create_bundle([self._identity]), + ) + + def _process_message(self, data): + self._load_opencti_entity(data) + + self._anyrun.load_analysis_object(self._opencti_entity) + self._helper.log_info("Preparing for the analysis.") + + if self._opencti_entity.get( + "entity_type" + ) == "StixFile" and not self._opencti_entity.get("hashes"): + raise ValueError( + "StixFile entity must have at least one of the following hashes: SHA-256, SHA-1, MD5" + ) + + analysis_summary = self._anyrun.process_analysis()["data"] + + self._helper.log_info("Analysis successful") + task_uuid = analysis_summary.get("analysis").get("uuid") + + self._update_main_observable(analysis_summary, task_uuid) + self._attach_report(task_uuid) + + if self._anyrun.get_verdict( + task_uuid + ) != "No threats detected" and get_config_variable( + "ANYRUN_ENABLE_IOC", ["anyrun", "enable_ioc"], config, default=True + ): + self._add_malicious_iocs(task_uuid) + + def _load_opencti_entity(self, data) -> None: + """ + Loads OpenCTI entity object using message data + + :param data: Message data + """ + opencti_entity = self._helper.api.stix_cyber_observable.read( + id=data.get("entity_id"), withFiles=True + ) + + if opencti_entity is None: + raise ValueError( + "Observable not found (or the connector does not has access to this observable, " + "check the group of the connector user)" + ) + + self._opencti_entity = opencti_entity + + def _update_main_observable(self, analysis_summary: dict, task_uuid: str) -> None: + """ + Updates main observable using ANY.RUN Sandbox analysis results + + :param analysis_summary: ANY.RUN Sandbox JSON summary + :param task_uuid: ANY.RUN Sandbox analysis uuid + """ + labels = [tag.get("tag") for tag in analysis_summary["analysis"]["tags"]] + + if self._opencti_entity.get("entity_type") == "Url": + observable = stix2.URL( + value=self._opencti_entity.get("value"), + custom_properties={ + "x_opencti_labels": labels, + "x_opencti_score": self._get_score( + analysis_summary["analysis"]["scores"]["verdict"]["score"] + ), + "x_opencti_description": "Detected by ANY.RUN Sandbox", + "x_opencti_created_by_ref": self._identity.get("id"), + "x_opencti_external_references": self._get_external_reference( + task_uuid + ), + }, + ) + else: + observable = stix2.File( + hashes={ + "MD5": analysis_summary["analysis"]["content"]["mainObject"][ + "hashes" + ]["md5"], + "SHA-256": analysis_summary["analysis"]["content"]["mainObject"][ + "hashes" + ]["sha256"], + "SHA-1": analysis_summary["analysis"]["content"]["mainObject"][ + "hashes" + ]["sha1"], + }, + custom_properties={ + "x_opencti_labels": labels, + "x_opencti_score": self._get_score( + analysis_summary["analysis"]["scores"]["verdict"]["score"] + ), + "x_opencti_description": "Detected by ANY.RUN Sandbox", + "x_opencti_created_by_ref": self._identity.get("id"), + "x_opencti_external_references": self._get_external_reference( + task_uuid + ), + }, + ) + + self._helper.send_stix2_bundle( + self._helper.stix2_create_bundle([observable]), update=True + ) + + def _get_score(self, anyrun_score: int) -> int: + """ + Adds score to the OpenCTI entity + + :param anyrun_score: ANY.RUN task score + """ + if not (opencti_score := self._opencti_entity.get("x_opencti_score", 0)): + return anyrun_score + + if anyrun_score > opencti_score: + return anyrun_score + + return opencti_score + + def _add_malicious_iocs(self, task_uuid: str) -> None: + """ + Process ANY.RUN task indicators. If indicator's threat level is 'No threads detected' crates related observable + else creates a new stix indicator + + :param task_uuid: ANY.RUN task uuid + """ + if iocs := self._anyrun.get_iocs(task_uuid): + objects = list() + + for ioc in iocs: + if ioc.get("reputation") == 0: + observable_type = ANYRUN_INDICATOR_TO_MAIN_OBSERVABLE.get( + ioc.get("type") + ) + observable_value = ioc.get("ioc") + + if observable_type == "File": + observable = stix2.File( + hashes={"SHA-256": observable_value}, + custom_properties={ + "x_opencti_description": "Detected by ANY.RUN Sandbox", + "x_opencti_created_by_ref": self._identity.get("id"), + "x_opencti_external_references": self._get_external_reference( + task_uuid + ), + }, + ) + elif observable_type == "Domain-Name": + observable = stix2.DomainName( + value=observable_value, + custom_properties={ + "x_opencti_description": "Detected by ANY.RUN Sandbox", + "x_opencti_created_by_ref": self._identity.get("id"), + "x_opencti_external_references": self._get_external_reference( + task_uuid + ), + }, + ) + elif observable_type == "Url": + observable = stix2.URL( + value=observable_value, + custom_properties={ + "x_opencti_description": "Detected by ANY.RUN Sandbox", + "x_opencti_created_by_ref": self._identity.get("id"), + "x_opencti_external_references": self._get_external_reference( + task_uuid + ), + }, + ) + elif observable_type == "IPv4-Addr": + observable = stix2.IPv4Address( + value=observable_value, + custom_properties={ + "x_opencti_description": "Detected by ANY.RUN Sandbox", + "x_opencti_created_by_ref": self._identity.get("id"), + "x_opencti_external_references": self._get_external_reference( + task_uuid + ), + }, + ) + + if observable.id == self._opencti_entity.get("standard_id"): + continue + + relationship = stix2.Relationship( + id=StixCoreRelationship.generate_id( + "related-to", + observable.id, + self._opencti_entity.get("standard_id"), + ), + confidence=100, + description="Detected by ANY.RUN Sandbox", + relationship_type="related-to", + created_by_ref=self._identity.get("id"), + source_ref=observable.id, + target_ref=self._opencti_entity.get("standard_id"), + custom_properties={ + "x_opencti_external_references": self._get_external_reference( + task_uuid + ) + }, + ) + + objects.append(observable) + objects.append(relationship) + + elif ioc.get("reputation") in (1, 2): + pattern_template = ANYRUN_INDICATOR_PATTERNS.get(ioc.get("type")) + if not pattern_template: + continue + pattern = pattern_template.format(value=ioc.get("ioc")) + + indicator = stix2.Indicator( + id=Indicator.generate_id(pattern), + created_by_ref=self._identity.get("id"), + name=ioc.get("ioc"), + pattern_type="stix", + pattern=pattern, + custom_properties={ + "x_opencti_score": {1: 50, 2: 100}.get( + ioc.get("reputation") + ), + "x_opencti_created_by_ref": self._identity.get("id"), + "x_opencti_external_references": self._get_external_reference( + task_uuid + ), + "x_opencti_main_observable_type": ANYRUN_INDICATOR_TO_MAIN_OBSERVABLE.get( + ioc.get("type") + ), + }, + ) + + relationship = stix2.Relationship( + id=StixCoreRelationship.generate_id( + "based-on", + indicator.id, + self._opencti_entity.get("standard_id"), + ), + confidence=100, + description="Detected by ANY.RUN Sandbox", + relationship_type="based-on", + created_by_ref=self._identity.get("id"), + source_ref=indicator.id, + target_ref=self._opencti_entity.get("standard_id"), + custom_properties={ + "x_opencti_external_references": self._get_external_reference( + task_uuid + ) + }, + ) + + objects.append(indicator) + objects.append(relationship) + + self._helper.send_stix2_bundle(self._helper.stix2_create_bundle(objects)) + + def _attach_report(self, task_uuid: str) -> None: + """ + Attaches ANY.RUN task html report to the OpenCTI entity + + :param task_uuid: ANY.RUN task uuid + """ + self._helper.api.stix_cyber_observable.add_file( + id=self._opencti_entity.get("id"), + file_name="anyrun_sandbox_report.html", + data=self._anyrun.get_report(task_uuid), + mime_type="text/html", + ) + + @staticmethod + def _get_external_reference(task_uuid: str) -> list: + """ + Creates external reference and attaches it to the OpenCTI entity + + :param task_uuid: ANY.RUN task uuid + :return: External reference ID + """ + return [ + stix2.ExternalReference( + source_name=f"ANY.RUN analysis {task_uuid}", + url=f"https://app.any.run/tasks/{task_uuid}", + description="ANY.RUN related analysis URL", + ) + ] + + # Start the main loop + def mainloop(self): + self._helper.listen(self._process_message) + + +if __name__ == "__main__": + opencti_helper = OpenCTIConnectorHelper(config) + anyrun_connector = AnyRunSandbox(opencti_helper) + opencti = OpenCTI(opencti_helper, anyrun_connector) + + opencti.mainloop() diff --git a/internal-enrichment/anyrun-task/src/requirements.txt b/internal-enrichment/anyrun-task/src/requirements.txt index c55331d2020..e0c312981eb 100644 --- a/internal-enrichment/anyrun-task/src/requirements.txt +++ b/internal-enrichment/anyrun-task/src/requirements.txt @@ -1,3 +1,3 @@ -pycti==7.260309.0 -pydantic >=2.8.2, <3 -connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk +pycti==7.260515.0 +requests==2.33.0 +anyrun-sdk==1.14.12 \ No newline at end of file diff --git a/internal-enrichment/anyrun-task/static/ANYRUN_API_TOKEN.png b/internal-enrichment/anyrun-task/static/ANYRUN_API_TOKEN.png new file mode 100644 index 00000000000..7a7804a72c5 Binary files /dev/null and b/internal-enrichment/anyrun-task/static/ANYRUN_API_TOKEN.png differ diff --git a/internal-enrichment/attribution-tools/src/attributiontools.py b/internal-enrichment/attribution-tools/src/attributiontools.py index 16ac63292a3..15f2c1dbdd1 100644 --- a/internal-enrichment/attribution-tools/src/attributiontools.py +++ b/internal-enrichment/attribution-tools/src/attributiontools.py @@ -3,7 +3,7 @@ import re import threading import time -from datetime import datetime +from datetime import datetime, timezone from typing import Dict from urllib.parse import urljoin @@ -174,7 +174,8 @@ def parse_stix_id(label): bundle_objects.append(relationship) # Create a note from the prediction results - timestamp_str = f"{datetime.utcnow().isoformat(timespec='seconds')}Z" + # Format as ...Z (without offset) to keep the legacy format consumed elsewhere. + timestamp_str = datetime.now(tz=timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ") note_contents = ( f"Attribution-tools enrichment performed on {timestamp_str}." f"\n\nModel version: {self.attribution_model.db_version}" @@ -280,8 +281,8 @@ def load_saved_data_and_train_model(self) -> bool: def fetch_data_and_train_model(self): self.helper.log_info("Starting data fetch for model training...") # Announce upcoming training work - now = datetime.utcnow() - friendly_name = f"Model training @ {now.isoformat(timespec='seconds')}Z" + now = datetime.now(tz=timezone.utc) + friendly_name = f"Model training @ {now.strftime('%Y-%m-%dT%H:%M:%SZ')}" work_id = self.helper.api.work.initiate_work( self.helper.connect_id, friendly_name, @@ -300,8 +301,10 @@ def fetch_data_and_train_model(self): else self.attribution_model.db_version ) self.train_model(training_data, db_version) - finished_time = datetime.utcnow() - timestamp_str = f"{finished_time.isoformat(timespec='seconds')}Z" + finished_time = datetime.now(tz=timezone.utc) + # Use a Z-suffixed UTC timestamp (no offset) so dataset filenames remain + # parsable by ``get_dataset_files()`` which expects ``%Y-%m-%dT%H:%M:%SZ``. + timestamp_str = finished_time.strftime("%Y-%m-%dT%H:%M:%SZ") # Save most recent training data training_data_object = { @@ -324,18 +327,33 @@ def fetch_data_and_train_model(self): self.helper.api.work.to_processed(work_id, message) self.helper.log_info("Model training successfully finished.") + @staticmethod + def _utc_now_naive() -> datetime: + """Return the current UTC time as a naive ``datetime``. + + ``cron_converter`` works with naive datetimes that it interprets in + the local timezone of the values it is fed. The cron expression + consumed by this loop comes from the ``..._CRON_UTC`` config key, so + we feed it a naive value that already represents UTC instead of the + host's local time. + """ + return datetime.now(tz=timezone.utc).replace(tzinfo=None) + def scheduled_model_training_loop(self): - # Create a retraining schedule based on provided cron expression - schedule = self.cron.schedule(datetime.utcnow()) + # Create a retraining schedule based on provided cron expression. The + # expression is configured as UTC (``..._CRON_UTC``), so we feed + # ``cron_converter`` naive datetimes that already represent UTC. + schedule = self.cron.schedule(self._utc_now_naive()) while True: # Find next time matching schedule and wait next_datetime = schedule.next() - time_difference = next_datetime - datetime.utcnow() + time_difference = next_datetime - self._utc_now_naive() while time_difference.total_seconds() < 0: next_datetime = schedule.next() - time_difference = next_datetime - datetime.utcnow() + time_difference = next_datetime - self._utc_now_naive() self.helper.log_info( - f"Next model training will happen in {time_difference} at {next_datetime.isoformat()}Z" + "Next model training will happen in " + f"{time_difference} at {next_datetime.isoformat()}Z" ) time.sleep(time_difference.total_seconds()) diff --git a/internal-enrichment/attribution-tools/src/requirements.txt b/internal-enrichment/attribution-tools/src/requirements.txt index bf024116b16..39ab30620a8 100644 --- a/internal-enrichment/attribution-tools/src/requirements.txt +++ b/internal-enrichment/attribution-tools/src/requirements.txt @@ -1,4 +1,4 @@ -pycti==7.260309.0 +pycti==7.260515.0 nltk==3.9.3 cron-converter==1.3.1 https://github.com/WithSecureLabs/opencti-attribution-tools/releases/download/0.3.2/opencti_attribution_tools-0.3.2-py3-none-any.whl \ No newline at end of file diff --git a/internal-enrichment/cape-sandbox/src/requirements.txt b/internal-enrichment/cape-sandbox/src/requirements.txt index 5585fa1f283..f320b8e7e82 100644 --- a/internal-enrichment/cape-sandbox/src/requirements.txt +++ b/internal-enrichment/cape-sandbox/src/requirements.txt @@ -1,2 +1,2 @@ -pycti==7.260309.0 +pycti==7.260515.0 pyzipper==0.3.6 diff --git a/internal-enrichment/censys-enrichment/README.md b/internal-enrichment/censys-enrichment/README.md index ead135221be..a603189979c 100644 --- a/internal-enrichment/censys-enrichment/README.md +++ b/internal-enrichment/censys-enrichment/README.md @@ -131,6 +131,34 @@ The connector enriches IP addresses, domains, and certificates with Censys inter Select an IPv4-Addr, IPv6-Addr, Domain-Name, or X509-Certificate observable, then click the enrichment button and choose Censys Enrichment. ## Behavior + The connector enriches the following observable types: + + ### IPv4/IPv6 Addresses + - Retrieves host information including geolocation, ASN, and services + - Creates location entities (City, Country, Region, Administrative Area) + - Links autonomous systems and organizations + - Extracts DNS names associated with the IP + - Creates software entities for detected services + - Includes service banners as notes + + ### Domain Names + - Searches for hosts with the domain in their DNS records + - Creates IP address observables for discovered hosts + - **Discovers X.509 certificates** that reference the domain in their Subject Alternative Names (SANs) or Common Name (CN) + - Creates certificate entities with full metadata (issuer, validity, extensions) + - Links certificates to the domain for infrastructure mapping + + This comprehensive domain enrichment is particularly useful for: + - Certificate transparency monitoring + - Threat actor infrastructure discovery + - Identifying shared hosting or certificate patterns + - Detecting potential phishing domains using similar certificates + + ### X.509 Certificates + - Enriches certificates by their hash values (MD5, SHA-1, SHA-256) + - Extracts detailed certificate metadata including extensions and key information + + **Note**: Certificate discovery for domains adds an additional API call per domain enrichment. Be mindful of Censys API rate limits. The connector queries the Censys Search API and creates related entities based on the data returned. diff --git a/internal-enrichment/censys-enrichment/requirements.txt b/internal-enrichment/censys-enrichment/requirements.txt index 01e08c09d25..396d58a3a7f 100644 --- a/internal-enrichment/censys-enrichment/requirements.txt +++ b/internal-enrichment/censys-enrichment/requirements.txt @@ -1,5 +1,5 @@ -censys-platform~=0.12.0 +censys-platform~=0.13.6 pydantic~=2.12.0 pydantic-settings~=2.11.0 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk -pycti==7.260309.0 +pycti==7.260515.0 diff --git a/internal-enrichment/censys-enrichment/src/censys_enrichment/client.py b/internal-enrichment/censys-enrichment/src/censys_enrichment/client.py index 9afe15ce9fe..f061e826947 100644 --- a/internal-enrichment/censys-enrichment/src/censys_enrichment/client.py +++ b/internal-enrichment/censys-enrichment/src/censys_enrichment/client.py @@ -95,3 +95,26 @@ def fetch_hosts(self, hostname: str) -> Generator[Host, None, None]: for hit in res.result.result.hits: if hit.host_v1: yield hit.host_v1.resource + + def fetch_certs_by_domain(self, domain: str) -> Generator[Certificate, None, None]: + """Fetch certificates that reference a domain in their names + + Args: + domain (str): The domain name to search for. + + Yields: + Generator[Certificate, None, None]: Yields Certificate objects matching the domain. + """ + with SDK( + organization_id=self.organisation_id, + personal_access_token=self.token, + ) as sdk: + query = f"cert.names = '{domain}'" + search_query = SearchQueryInputBody(query=query) + res: V3GlobaldataSearchQueryResponse = sdk.global_data.search( + search_query_input_body=search_query + ) + if res.result.result: + for hit in res.result.result.hits: + if hit.certificate_v1: + yield hit.certificate_v1.resource diff --git a/internal-enrichment/censys-enrichment/src/censys_enrichment/connector.py b/internal-enrichment/censys-enrichment/src/censys_enrichment/connector.py index 2785cdc43b0..5ce209c56ad 100644 --- a/internal-enrichment/censys-enrichment/src/censys_enrichment/connector.py +++ b/internal-enrichment/censys-enrichment/src/censys_enrichment/connector.py @@ -75,10 +75,23 @@ def _generate_octi_objects( certs=list(self.client.fetch_certs(hashes=stix_entity["hashes"])), ) case "domain-name": - return self.converter.generate_octi_objects_from_hosts( - stix_entity=stix_entity, - hosts=list(self.client.fetch_hosts(stix_entity["value"])), - ) + + def _generate_domain_objects(): + # yield objects from associated hosts + yield from self.converter.generate_octi_objects_from_hosts( + stix_entity=stix_entity, + hosts=list(self.client.fetch_hosts(stix_entity["value"])), + ) + # yield certificates associated with the domain + yield from self.converter.generate_octi_objects_from_domain_certs( + stix_entity=stix_entity, + certs=list( + self.client.fetch_certs_by_domain(stix_entity["value"]) + ), + ) + + return _generate_domain_objects() + case _: raise EntityTypeNotSupportedError( f"Observable type {stix_entity['type']} not supported" diff --git a/internal-enrichment/censys-enrichment/src/censys_enrichment/converter.py b/internal-enrichment/censys-enrichment/src/censys_enrichment/converter.py index dbac83d7de1..421c09c933d 100644 --- a/internal-enrichment/censys-enrichment/src/censys_enrichment/converter.py +++ b/internal-enrichment/censys-enrichment/src/censys_enrichment/converter.py @@ -12,7 +12,6 @@ from connectors_sdk.models import ( AdministrativeArea, AutonomousSystem, - BaseIdentifiedEntity, BaseObject, City, Country, @@ -22,6 +21,7 @@ Note, Organization, OrganizationAuthor, + Reference, Region, Relationship, Software, @@ -29,28 +29,6 @@ X509Certificate, ) from connectors_sdk.models.enums import HashAlgorithm, RelationshipType, TLPLevel -from pydantic import Field - - -class EmbeddedIdentifiedStixObject(BaseIdentifiedEntity): - """Embedded Identified STIX Object representation. - - This class encapsulates a STIX object with an id as a dictionary and provides - access to the object without copying or modifying the original data. - - Use when you only need to read or forward the STIX object, not alter it. - """ - - stix_object: dict[str, Any] = Field() - - @property - def id(self) -> str: - """Return the STIX object's ID.""" - return self.stix_object["id"] - - def to_stix2_object(self) -> dict[str, Any]: - """Return the STIX2 object representation.""" - return self.stix_object class Converter: @@ -60,7 +38,7 @@ def __init__(self) -> None: self._common_props = {"author": self.author, "markings": [self.marking]} def _generate_city( - self, observable: EmbeddedIdentifiedStixObject, name: str | None + self, observable: Reference, name: str | None ) -> Generator[BaseObject, None, None]: if not name: return @@ -80,7 +58,7 @@ def _generate_city( ] def _generate_country( - self, observable: EmbeddedIdentifiedStixObject, name: str | None + self, observable: Reference, name: str | None ) -> Generator[BaseObject, None, Country | None]: if not name: return None @@ -101,7 +79,7 @@ def _generate_country( return country def _generate_region( - self, observable: EmbeddedIdentifiedStixObject, name: str | None + self, observable: Reference, name: str | None ) -> Generator[BaseObject, None, None]: if not name: return @@ -122,7 +100,7 @@ def _generate_region( def _generate_administrative_area( self, - observable: EmbeddedIdentifiedStixObject, + observable: Reference, name: str | None, coordinates: Coordinates | None, ) -> Generator[BaseObject, None, None]: @@ -154,7 +132,7 @@ def _generate_administrative_area( ] def _generate_hostnames( - self, observable: EmbeddedIdentifiedStixObject, dns: HostDNS | None + self, observable: Reference, dns: HostDNS | None ) -> Generator[BaseObject, None, None]: if not dns: return @@ -176,7 +154,7 @@ def _generate_hostnames( def _generate_organization( self, - observable: EmbeddedIdentifiedStixObject, + observable: Reference, name: str | None, ) -> Generator[BaseObject, None, Organization | None]: if not name: @@ -199,7 +177,7 @@ def _generate_organization( def _generate_autonomous_system( self, - observable: EmbeddedIdentifiedStixObject, + observable: Reference, number: int | None, name: str | None, description: str | None, @@ -226,7 +204,7 @@ def _generate_autonomous_system( def _generate_software( self, - observable: EmbeddedIdentifiedStixObject, + observable: Reference, name: str | None, vendor: str | None, cpe: str | None, @@ -317,7 +295,7 @@ def _generate_certificate( def _generate_note( self, - observable: EmbeddedIdentifiedStixObject, + observable: Reference, content: str | None, publication_date: str | None, port: int | None, @@ -335,7 +313,7 @@ def _generate_note( ) def _generate_services( - self, observable: EmbeddedIdentifiedStixObject, services: list[Service] | None + self, observable: Reference, services: list[Service] | None ) -> Generator[BaseObject, None, None]: for service in services or []: for software in service.software or []: @@ -363,7 +341,7 @@ def _generate_services( ) def _generate_ip( - self, observable: EmbeddedIdentifiedStixObject, ip: str + self, observable: Reference, ip: str ) -> Generator[BaseObject, None, None | IPV4Address | IPV6Address]: ip_version = ipaddress.ip_network(ip, strict=False).version if ip_version == 4: @@ -384,7 +362,7 @@ def _generate_ip( def generate_octi_objects( self, stix_entity: dict[str, Any], data: Host ) -> Generator[BaseObject, None, None]: - observable = EmbeddedIdentifiedStixObject(stix_object=stix_entity) + observable = Reference(id=stix_entity.get("id")) yield from [ self.author, @@ -461,9 +439,38 @@ def generate_octi_objects_from_hosts( ) -> Generator[BaseObject, None, None]: for host in hosts: ip_stix = yield from self._generate_ip( - observable=EmbeddedIdentifiedStixObject(stix_object=stix_entity), + observable=Reference(id=stix_entity.get("id")), ip=host.ip, ) yield from self.generate_octi_objects( stix_entity=ip_stix.to_stix2_object(), data=host ) + + def generate_octi_objects_from_domain_certs( + self, stix_entity: dict[str, Any], certs: list[Certificate] + ) -> Generator[BaseObject, None, None]: + """Generate OpenCTI objects from certificates associated with a domain + + Args: + stix_entity: The domain STIX entity + certs: List of Certificate objects from Censys + + Yields: + BaseObject: STIX objects representing certificates and their relationships + """ + observable = Reference(id=stix_entity.get("id")) + + yield from [ + self.author, + self.marking, + ] + + for cert in certs: + certificate = yield from self._generate_certificate(cert=cert) + if certificate: + yield Relationship( + source=certificate, + target=observable, + type=RelationshipType.RELATED_TO, + **self._common_props, + ) diff --git a/internal-enrichment/censys-enrichment/tests/censys_enrichment/test_converter.py b/internal-enrichment/censys-enrichment/tests/censys_enrichment/test_converter.py index 6ae20ff6acc..0fef629ec49 100644 --- a/internal-enrichment/censys-enrichment/tests/censys_enrichment/test_converter.py +++ b/internal-enrichment/censys-enrichment/tests/censys_enrichment/test_converter.py @@ -171,7 +171,7 @@ def test_converter_ipv4(host_ipv4: Host) -> None: entity = stix_objects[14] assert entity.authority_key_identifier == "748580c066c7df37decfbd2937aa031dbeedcd17" - assert entity.basic_constraints == '{"is_ca":null,"max_path_len":null}' + assert entity.basic_constraints == "{}" assert ( entity.certificate_policies == "[CertificatePolicy(cps=['http://cps.digicert.com/example-cps'], id='2.23.140.1.2.2', user_notice=Unset())]" @@ -189,10 +189,7 @@ def test_converter_ipv4(host_ipv4: Host) -> None: entity.issuer == "C=US, O=DigiCert Inc, CN=DigiCert Global G2 TLS RSA SHA256 2020 CA1" ) - assert ( - entity.key_usage - == '{"certificate_sign":null,"content_commitment":null,"crl_sign":null,"data_encipherment":null,"decipher_only":null,"digital_signature":null,"encipher_only":null,"key_agreement":null,"key_encipherment":null,"value":null}' - ) + assert entity.key_usage == "{}" assert entity.object_marking_refs == [ "marking-definition--613f2e26-407d-48c7-9eca-b8e91df99dc9" ] @@ -224,7 +221,7 @@ def test_converter_ipv4(host_ipv4: Host) -> None: assert entity.authors == ["Censys Enrichment Connector"] assert entity.content == "HTTP/1.1 301 Moved Permanently" assert entity.created_by_ref == "identity--6f9f67f6-7eb2-5397-a02f-d8130aadb954" - assert entity.id == "note--ec194bf2-4ee0-5338-857f-4c3f727b8ebf" + assert entity.id == "note--57d22a6d-39ea-591e-b86e-a40d31540c14" assert entity.object_marking_refs == [ "marking-definition--613f2e26-407d-48c7-9eca-b8e91df99dc9" ] diff --git a/internal-enrichment/censys-enrichment/tests/test-requirements.txt b/internal-enrichment/censys-enrichment/tests/test-requirements.txt index a7c5df2cb74..ec7e82cef8d 100644 --- a/internal-enrichment/censys-enrichment/tests/test-requirements.txt +++ b/internal-enrichment/censys-enrichment/tests/test-requirements.txt @@ -1,5 +1,5 @@ # Main dependencies needs to be installed -r ../requirements.txt -pytest==8.4.2 +pytest==9.0.3 pytest-mock==3.15.1 factory-boy==3.3.3 diff --git a/internal-enrichment/criminal-ip/.dockerignore b/internal-enrichment/criminal-ip/.dockerignore new file mode 100644 index 00000000000..c5d360e969a --- /dev/null +++ b/internal-enrichment/criminal-ip/.dockerignore @@ -0,0 +1,9 @@ +__metadata__ +**/__pycache__ +**/__docs__ +**/.venv +**/venv +**/logs +**/config.yml +**/*.egg-info +**/*.gql diff --git a/internal-enrichment/criminal-ip/.gitignore b/internal-enrichment/criminal-ip/.gitignore new file mode 100644 index 00000000000..8e1e1e93675 --- /dev/null +++ b/internal-enrichment/criminal-ip/.gitignore @@ -0,0 +1,14 @@ +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +build/ +dist/ +eggs/ +*.egg-info/ +*.egg +.env +config.yml +venv/ +.venv/ diff --git a/internal-enrichment/criminal-ip/Dockerfile b/internal-enrichment/criminal-ip/Dockerfile new file mode 100644 index 00000000000..3ab897f3ce2 --- /dev/null +++ b/internal-enrichment/criminal-ip/Dockerfile @@ -0,0 +1,16 @@ +FROM python:3.12-alpine +ENV CONNECTOR_TYPE=INTERNAL_ENRICHMENT + +# Copy the connector +COPY src /opt/opencti-connector-criminal-ip + +# Install Python modules +# hadolint ignore=DL3003 +RUN apk --no-cache add git build-base libmagic libffi-dev && \ + cd /opt/opencti-connector-criminal-ip && \ + pip3 install --no-cache-dir -r requirements.txt && \ + apk del git build-base + +# Expose and entrypoint +WORKDIR /opt/opencti-connector-criminal-ip +ENTRYPOINT ["python3", "main.py"] diff --git a/internal-enrichment/criminal-ip/README.md b/internal-enrichment/criminal-ip/README.md new file mode 100644 index 00000000000..14092c36787 --- /dev/null +++ b/internal-enrichment/criminal-ip/README.md @@ -0,0 +1,67 @@ +# OpenCTI Criminal IP Connector + +The Criminal IP connector enriches **IPv4 addresses** and **domain names** with threat intelligence from [Criminal IP](https://www.criminalip.io). + +## Enrichment Details + +### IPv4 Address +- Reputation indicator with inbound/outbound risk scores +- Autonomous System (AS) information +- Geolocation (country, city, region) +- Labels based on issue flags (VPN, HOSTING, CLOUD, etc.) +- Vulnerability (CVE) associations + +### Domain Name +- Domain scan with phishing probability analysis +- Related IP addresses (resolves-to relationships) +- Server location countries +- Malicious domain indicator (when phishing/suspicious signals detected) + +## Configuration + +| Parameter | Docker envvar | config.yml | Default | Required | +|--------------------------|------------------------|-----------------------|-----------------------|----------| +| OpenCTI URL | `OPENCTI_URL` | `opencti.url` | | Yes | +| OpenCTI Token | `OPENCTI_TOKEN` | `opencti.token` | | Yes | +| Connector ID | `CONNECTOR_ID` | `connector.id` | | Yes | +| Connector Name | `CONNECTOR_NAME` | `connector.name` | `Criminal IP` | No | +| Connector Scope | `CONNECTOR_SCOPE` | `connector.scope` | `IPv4-Addr,Domain-Name` | No | +| Connector Auto | `CONNECTOR_AUTO` | `connector.auto` | `false` | No | +| Connector Log Level | `CONNECTOR_LOG_LEVEL` | `connector.log_level` | `error` | No | +| Criminal IP API Token | `CRIMINAL_IP_TOKEN` | `criminal_ip.token` | | Yes | +| Max TLP | `CRIMINAL_IP_MAX_TLP` | `criminal_ip.max_tlp` | `TLP:AMBER` | No | + +## Installation + +### Docker (Recommended) + +Build the Docker image: + +```bash +docker build -t opencti/connector-criminal-ip:latest . +``` + +### Docker Compose + +```yaml +services: + connector-criminal-ip: + image: opencti/connector-criminal-ip:latest + environment: + - OPENCTI_URL=http://opencti:8080 + - OPENCTI_TOKEN=ChangeMe + - CONNECTOR_ID=ChangeMe + - CRIMINAL_IP_TOKEN=ChangeMe + restart: always +``` + +Refer to `docker-compose.yml` for a full example with all optional parameters. + +## API Endpoints Used + +- `GET /v1/asset/ip/report` - IP address report +- `GET /v1/feature/ip/malicious-info` - IP malicious information +- `GET /v1/domain/reports` - Check existing domain scans +- `POST /v1/domain/scan` - Trigger new domain scan +- `GET /v1/domain/status/{scan_id}` - Poll scan progress +- `GET /v2/domain/report/{scan_id}` - Fetch domain scan results \ No newline at end of file diff --git a/internal-enrichment/criminal-ip/__metadata__/CONNECTOR_CONFIG_DOC.md b/internal-enrichment/criminal-ip/__metadata__/CONNECTOR_CONFIG_DOC.md new file mode 100644 index 00000000000..3910442eabe --- /dev/null +++ b/internal-enrichment/criminal-ip/__metadata__/CONNECTOR_CONFIG_DOC.md @@ -0,0 +1,17 @@ +# Connector Configurations + +Below is an exhaustive enumeration of all configurable parameters available, each accompanied by detailed explanations of their purposes, default behaviors, and usage guidelines to help you understand and utilize them effectively. + +### Type: `object` + +| Property | Type | Required | Possible values | Default | Description | +| -------- | ---- | -------- | --------------- | ------- | ----------- | +| OPENCTI_URL | `string` | ✅ | Format: [`uri`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | The base URL of the OpenCTI instance. | +| OPENCTI_TOKEN | `string` | ✅ | string | | The API token to connect to OpenCTI. | +| CRIMINAL_IP_TOKEN | `string` | ✅ | Format: [`password`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | Criminal IP API key. | +| CONNECTOR_NAME | `string` | | string | `"Criminal IP"` | The name of the connector | +| CONNECTOR_SCOPE | `array` | | string | `["IPv4-Addr", "Domain-Name"]` | The scope of the connector. | +| CONNECTOR_LOG_LEVEL | `string` | | `debug` `info` `warn` `warning` `error` | `"error"` | The minimum level of logs to display. | +| CONNECTOR_TYPE | `const` | | `INTERNAL_ENRICHMENT` | `"INTERNAL_ENRICHMENT"` | | +| CONNECTOR_AUTO | `boolean` | | boolean | `false` | Whether the connector should run automatically when an entity is created or updated. | +| CRIMINAL_IP_MAX_TLP | `string` | | `TLP:CLEAR` `TLP:WHITE` `TLP:GREEN` `TLP:AMBER` `TLP:AMBER+STRICT` `TLP:RED` | `"TLP:AMBER"` | Max TLP level of entities to enrich. | diff --git a/internal-enrichment/criminal-ip/__metadata__/connector_config_schema.json b/internal-enrichment/criminal-ip/__metadata__/connector_config_schema.json new file mode 100644 index 00000000000..1880f284322 --- /dev/null +++ b/internal-enrichment/criminal-ip/__metadata__/connector_config_schema.json @@ -0,0 +1,81 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://www.filigran.io/connectors/criminal-ip_config.schema.json", + "type": "object", + "properties": { + "OPENCTI_URL": { + "description": "The base URL of the OpenCTI instance.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "OPENCTI_TOKEN": { + "description": "The API token to connect to OpenCTI.", + "type": "string" + }, + "CONNECTOR_NAME": { + "default": "Criminal IP", + "description": "The name of the connector", + "type": "string" + }, + "CONNECTOR_SCOPE": { + "default": [ + "IPv4-Addr", + "Domain-Name" + ], + "description": "The scope of the connector.", + "items": { + "type": "string" + }, + "type": "array" + }, + "CONNECTOR_LOG_LEVEL": { + "default": "error", + "description": "The minimum level of logs to display.", + "enum": [ + "debug", + "info", + "warn", + "warning", + "error" + ], + "type": "string" + }, + "CONNECTOR_TYPE": { + "const": "INTERNAL_ENRICHMENT", + "default": "INTERNAL_ENRICHMENT", + "type": "string" + }, + "CONNECTOR_AUTO": { + "default": false, + "description": "Whether the connector should run automatically when an entity is created or updated.", + "type": "boolean" + }, + "CRIMINAL_IP_TOKEN": { + "description": "Criminal IP API key.", + "format": "password", + "type": "string", + "writeOnly": true + }, + "CRIMINAL_IP_MAX_TLP": { + "default": "TLP:AMBER", + "description": "Max TLP level of entities to enrich.", + "enum": [ + "TLP:CLEAR", + "TLP:WHITE", + "TLP:GREEN", + "TLP:AMBER", + "TLP:AMBER+STRICT", + "TLP:RED" + ], + "type": "string" + } + }, + "required": [ + "OPENCTI_URL", + "OPENCTI_TOKEN", + "CRIMINAL_IP_TOKEN" + ], + "additionalProperties": true +} \ No newline at end of file diff --git a/internal-enrichment/criminal-ip/__metadata__/connector_manifest.json b/internal-enrichment/criminal-ip/__metadata__/connector_manifest.json new file mode 100644 index 00000000000..4a8e483bc02 --- /dev/null +++ b/internal-enrichment/criminal-ip/__metadata__/connector_manifest.json @@ -0,0 +1,19 @@ +{ + "title": "Criminal IP", + "slug": "criminal-ip", + "description": "Criminal IP is a cyber threat intelligence search engine that enriches IPv4 addresses with reputation scores, geolocation, autonomous system data, and vulnerability information. It also enriches domain names with phishing probability, resolved IPs, and associated server locations.", + "short_description": "Enriches IPv4 addresses and domain names with Criminal IP threat intelligence.", + "logo": "internal-enrichment/criminal-ip/__metadata__/logo.png", + "use_cases": ["Enrichment & Analysis"], + "verified": true, + "last_verified_date": "2026-04-24", + "playbook_supported": true, + "max_confidence_level": 95, + "support_version": ">=6.8.13", + "subscription_link": "https://www.criminalip.io", + "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/internal-enrichment/criminal-ip", + "manager_supported": true, + "container_version": "rolling", + "container_image": "opencti/connector-criminal-ip", + "container_type": "INTERNAL_ENRICHMENT" +} diff --git a/internal-enrichment/criminal-ip/__metadata__/logo.png b/internal-enrichment/criminal-ip/__metadata__/logo.png new file mode 100644 index 00000000000..5518d2153fd Binary files /dev/null and b/internal-enrichment/criminal-ip/__metadata__/logo.png differ diff --git a/internal-enrichment/criminal-ip/config.yml.sample b/internal-enrichment/criminal-ip/config.yml.sample new file mode 100644 index 00000000000..c71d336e4b4 --- /dev/null +++ b/internal-enrichment/criminal-ip/config.yml.sample @@ -0,0 +1,14 @@ +opencti: + url: 'http://localhost' + token: 'ChangeMe' + +connector: + id: 'ChangeMe' + #name: 'Criminal IP' # Optional (default: 'Criminal IP') + #scope: 'IPv4-Addr,Domain-Name' # Optional (default: 'IPv4-Addr,Domain-Name') + #auto: false # Optional (default: false) + #log_level: 'error' # Optional (default: 'error') + +criminal_ip: + token: 'ChangeMe' + #max_tlp: 'TLP:AMBER' # Optional (default: 'TLP:AMBER') \ No newline at end of file diff --git a/internal-enrichment/criminal-ip/docker-compose.yml b/internal-enrichment/criminal-ip/docker-compose.yml new file mode 100644 index 00000000000..ed4141f6848 --- /dev/null +++ b/internal-enrichment/criminal-ip/docker-compose.yml @@ -0,0 +1,15 @@ +version: '3' +services: + connector-criminal-ip: + image: opencti/connector-criminal-ip:latest + environment: + - OPENCTI_URL=http://localhost + - OPENCTI_TOKEN=ChangeMe + - CONNECTOR_ID=ChangeMe + #- CONNECTOR_NAME=Criminal IP # Optional (default: 'Criminal IP') + #- CONNECTOR_SCOPE=IPv4-Addr,Domain-Name # Optional (default: 'IPv4-Addr,Domain-Name') + #- CONNECTOR_AUTO=false # Optional (default: false) + #- CONNECTOR_LOG_LEVEL=error # Optional (default: 'error') + - CRIMINAL_IP_TOKEN=ChangeMe + #- CRIMINAL_IP_MAX_TLP=TLP:AMBER # Optional (default: 'TLP:AMBER') + restart: always \ No newline at end of file diff --git a/internal-enrichment/criminal-ip/src/connector/__init__.py b/internal-enrichment/criminal-ip/src/connector/__init__.py new file mode 100644 index 00000000000..b9de1761846 --- /dev/null +++ b/internal-enrichment/criminal-ip/src/connector/__init__.py @@ -0,0 +1,7 @@ +from connector.connector import CriminalIPConnector +from connector.settings import ConnectorSettings + +__all__ = [ + "CriminalIPConnector", + "ConnectorSettings", +] diff --git a/internal-enrichment/criminal-ip/src/connector/connector.py b/internal-enrichment/criminal-ip/src/connector/connector.py new file mode 100644 index 00000000000..96202f23acb --- /dev/null +++ b/internal-enrichment/criminal-ip/src/connector/connector.py @@ -0,0 +1,164 @@ +from connector.converter_to_stix import ConverterToStix +from connector.settings import ConnectorSettings +from connector.use_cases.enrich_domain import DomainEnricher +from connector.use_cases.enrich_ipv4 import Ipv4Enricher +from criminalip_client import CriminalIpClient +from pycti import OpenCTIConnectorHelper + + +class CriminalIPConnector: + def __init__(self, config: ConnectorSettings, helper: OpenCTIConnectorHelper): + """ + Initialize `CriminalIPConnector` with its configuration. + + Args: + config (ConnectorSettings): Configuration of the connector + helper (OpenCTIConnectorHelper): Helper to manage connection and requests to OpenCTI + """ + self.config = config + self.helper = helper + + self.token = self.config.criminal_ip.token.get_secret_value() + self.max_tlp = self.config.criminal_ip.max_tlp + self.client = CriminalIpClient(helper=self.helper, token=self.token) + + self.domain_enricher = DomainEnricher( + connector_logger=self.helper.connector_logger, + client=self.client, + converter_to_stix=ConverterToStix(self.helper), + ) + self.ipv4_enricher = Ipv4Enricher( + connector_logger=self.helper.connector_logger, + client=self.client, + converter_to_stix=ConverterToStix(self.helper), + ) + + def _extract_and_check_markings(self, entity: dict): + """ + Extract TLP, and we check if the variable "max_tlp" is less than + or equal to the markings access of the entity from OpenCTI + If this is true, we can send the data to connector for enrichment. + :param entity: Dict of observable from OpenCTI + """ + tlp = "TLP:CLEAR" + for marking_definition in entity.get("objectMarking", []): + if marking_definition["definition_type"] == "TLP": + tlp = marking_definition["definition"] + + is_valid = self.helper.check_max_tlp(tlp, self.max_tlp) + + if not is_valid: + raise ValueError( + "[CONNECTOR] Do not send any data, TLP of the observable is greater than MAX TLP," + "the connector does not has access to this observable, please check the group of the connector user" + ) + + def _send_bundle(self, stix_objects: list) -> str: + """ + Send the STIX bundle to the OpenCTI platform + """ + stix_objects_bundle = self.helper.stix2_create_bundle(stix_objects) + bundles_sent = self.helper.send_stix2_bundle( + bundle=stix_objects_bundle, cleanup_inconsistent_bundle=True + ) + return bundles_sent + + def entity_in_scope(self, data) -> bool: + """ + Security to limit playbook triggers to something other than the initial scope + :param data: Dictionary of data + :return: boolean + """ + scopes = self.helper.connect_scope.lower().replace(" ", "").split(",") + entity_split = data["entity_id"].split("--") + entity_type = entity_split[0].lower() + + if entity_type in scopes: + return True + else: + return False + + def process_message(self, data: dict) -> str: + """ + Get the observable created/modified in OpenCTI and check which type to send for process + The data passed in the data parameter is a dictionary with the following structure as shown in + https://docs.opencti.io/latest/development/connectors/#additional-implementations + :param data: dict of data to process + :return: string + """ + try: + opencti_entity = data["enrichment_entity"] + self._extract_and_check_markings(opencti_entity) + + stix_objects = data["stix_objects"] + observable = data["stix_entity"] + + obs_value = observable["value"] + obs_type = observable["type"] + + if self.entity_in_scope(data): + self.helper.connector_logger.info( + "[CONNECTOR] Processing entity", + {"type": obs_type, "value": obs_value}, + ) + + match obs_type: + case "ipv4-addr": + enrichment_objects = self.ipv4_enricher.process_ipv4_enrichment( + observable + ) + case "domain-name": + enrichment_objects = self.domain_enricher.process_domain_scan( + observable + ) + case _: + raise ValueError(f"[CONNECTOR] Unsupported type: {obs_type}") + + if len(enrichment_objects) <= 1: # only author, no real data + # Return the original bundle unchanged for playbook + self._send_bundle(stix_objects) + self.helper.connector_logger.info( + "[CONNECTOR] No enrichment data found", {"obs_value": obs_value} + ) + return f"No enrichment data found for: {obs_value}" + + # Merge with existing stix objects and send + all_objects = stix_objects + enrichment_objects + bundles_sent = self._send_bundle(all_objects) + + self.helper.connector_logger.info( + "[CONNECTOR] Enrichment complete", + {"bundles_sent": len(bundles_sent), "value": obs_value}, + ) + self.helper.connector_logger.info( + "Sent bundle(s) for import", {"len_bundle": len(bundles_sent)} + ) + return f"Sent {len(bundles_sent)} bundle(s) for import" + + else: + if not data.get("event_type"): + # If it is not in scope AND entity bundle passed through playbook, + # we should return the original bundle unchanged + self._send_bundle(stix_objects) + else: + raise ValueError( + f"Failed to process observable, {opencti_entity['entity_type']} is not a supported entity type." + ) + + except Exception as err: + # Send back original objects for playbook compatibility + self._send_bundle(data["stix_objects"]) + # Handling other unexpected exceptions + self.helper.connector_logger.error( + "[CONNECTOR] Unexpected Error occurred", {"error_message": str(err)} + ) + return f"Unexpected Error occurred: {str(err)}" + + def run(self) -> None: + """ + Run the main process in self.helper.listen() method + The method continuously monitors a message queue associated with a specific connector + The connector have to listen a specific queue to get and then enrich the information. + The helper provide an easy way to listen to the events. + """ + self.helper.listen(message_callback=self.process_message) diff --git a/internal-enrichment/criminal-ip/src/connector/converter_to_stix.py b/internal-enrichment/criminal-ip/src/connector/converter_to_stix.py new file mode 100644 index 00000000000..09459623362 --- /dev/null +++ b/internal-enrichment/criminal-ip/src/connector/converter_to_stix.py @@ -0,0 +1,139 @@ +from typing import Optional + +from connectors_sdk.models import ( + AutonomousSystem, + City, + Country, + Indicator, + IPV4Address, + OrganizationAuthor, + Reference, + Region, + Relationship, + TLPMarking, + Vulnerability, +) +from pycti import OpenCTIConnectorHelper + + +class ConverterToStix: + """ + Provides methods for converting various types of input data into + STIX 2.1 objects with connectors_sdk models. + """ + + def __init__(self, helper: OpenCTIConnectorHelper) -> None: + """ + Initialize the converter with necessary configuration. + + Args: + helper (OpenCTIConnectorHelper): The helper of the connector. Used for logs. + """ + self.helper = helper + self.author = self.create_author() + self.tlp_clear = self.create_tlp_marking("clear") + self.tlp_amber = self.create_tlp_marking("amber") + + def create_tlp_marking(self, level: str) -> TLPMarking: + """ + Create TLPMarking object + """ + tlp_marking = TLPMarking(level=level) + return tlp_marking + + def create_author(self) -> OrganizationAuthor: + """ + Create Author + """ + author = OrganizationAuthor( + name="Criminal IP", description="Criminal IP Cyber Threat Intelligence" + ) + return author + + def create_autonomous_system(self, number: str, name: str) -> AutonomousSystem: + """ + Create an AutonomousSystem object + """ + return AutonomousSystem( + number=number, name=name, author=self.author, markings=[self.tlp_clear] + ) + + def create_city(self, name: str, latitude: float, longitude: float) -> City: + """Create a City object""" + return City( + name=name, + latitude=latitude, + longitude=longitude, + markings=[self.tlp_clear], + ) + + def create_country(self, name: str) -> Country: + """ + Create a Country object + """ + return Country(name=name, author=self.author, markings=[self.tlp_clear]) + + def create_indicator( + self, + name: str, + pattern: str, + pattern_type: str, + description: str, + labels: list[str], + ) -> Indicator: + """Creates an Indicator object""" + return Indicator( + name=name, + pattern=pattern, + pattern_type=pattern_type, + description=description, + labels=labels, + author=self.author, + markings=[self.tlp_amber], + ) + + def create_ipv4(self, ip: str) -> IPV4Address: + """ + Create an IPv4 object + """ + return IPV4Address(value=ip, author=self.author, markings=[self.tlp_amber]) + + def create_reference(self, obs_id: str) -> Reference: + """ + Create a simple Reference object + """ + return Reference(id=obs_id) + + def create_region(self, name: str) -> Country: + """ + Create a Region object + """ + return Region(name=name, author=self.author, markings=[self.tlp_clear]) + + def create_relationship( + self, + relationship_type: str, + source_obj, + target_obj, + description: Optional[str] = None, + ) -> Relationship: + """ + Creates Relationship object + """ + return Relationship( + type=relationship_type, + source=source_obj, + target=target_obj, + author=self.author, + description=description, + markings=[self.tlp_amber], + ) + + def create_vulnerability(self, name: str, description: str) -> Vulnerability: + """Creates a Vulnerability object""" + return Vulnerability( + name=name, + description=description, + author=self.author, + markings=[self.tlp_amber], + ) diff --git a/internal-enrichment/criminal-ip/src/connector/settings.py b/internal-enrichment/criminal-ip/src/connector/settings.py new file mode 100644 index 00000000000..50690c23f07 --- /dev/null +++ b/internal-enrichment/criminal-ip/src/connector/settings.py @@ -0,0 +1,45 @@ +from typing import Literal + +from connectors_sdk import ( + BaseConfigModel, + BaseConnectorSettings, + BaseInternalEnrichmentConnectorConfig, + ListFromString, +) +from pydantic import Field, SecretStr + + +class CriminalIPConfig(BaseConfigModel): + token: SecretStr = Field( + description="Criminal IP API key.", + ) + max_tlp: Literal[ + "TLP:CLEAR", + "TLP:WHITE", + "TLP:GREEN", + "TLP:AMBER", + "TLP:AMBER+STRICT", + "TLP:RED", + ] = Field( + description="Max TLP level of entities to enrich.", + default="TLP:AMBER", + ) + + +class InternalEnrichmentConnectorConfig(BaseInternalEnrichmentConnectorConfig): + name: str = Field( + description="The name of the connector", + default="Criminal IP", + ) + scope: ListFromString = Field( + description="The scope of the connector.", + default=["IPv4-Addr", "Domain-Name"], + ) + + +class ConnectorSettings(BaseConnectorSettings): + + connector: InternalEnrichmentConnectorConfig = Field( + default_factory=InternalEnrichmentConnectorConfig + ) + criminal_ip: CriminalIPConfig = Field(default_factory=CriminalIPConfig) diff --git a/internal-enrichment/criminal-ip/src/connector/use_cases/__init__.py b/internal-enrichment/criminal-ip/src/connector/use_cases/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/internal-enrichment/criminal-ip/src/connector/use_cases/common.py b/internal-enrichment/criminal-ip/src/connector/use_cases/common.py new file mode 100644 index 00000000000..4b8c43ebe7e --- /dev/null +++ b/internal-enrichment/criminal-ip/src/connector/use_cases/common.py @@ -0,0 +1,26 @@ +from connector.converter_to_stix import ConverterToStix + + +class BaseUseCases: + def __init__( + self, + converter_to_stix: ConverterToStix, + ): + self.converter_to_stix = converter_to_stix + + def generate_author_and_tlp_markings(self): + """ + Create author and TLP + """ + common_objects = [] + # Author + author = self.converter_to_stix.create_author() + common_objects.append(author.to_stix2_object()) + + # TLPMarkings + tlp_clear = self.converter_to_stix.create_tlp_marking("clear") + common_objects.append(tlp_clear.to_stix2_object()) + tlp_amber = self.converter_to_stix.create_tlp_marking("amber") + common_objects.append(tlp_amber.to_stix2_object()) + + return common_objects diff --git a/internal-enrichment/criminal-ip/src/connector/use_cases/enrich_domain.py b/internal-enrichment/criminal-ip/src/connector/use_cases/enrich_domain.py new file mode 100644 index 00000000000..9a62ccbaa96 --- /dev/null +++ b/internal-enrichment/criminal-ip/src/connector/use_cases/enrich_domain.py @@ -0,0 +1,196 @@ +import logging +import time +from datetime import datetime, timedelta, timezone +from typing import Any, Dict, List + +from connector.converter_to_stix import ConverterToStix +from connector.use_cases.common import BaseUseCases +from criminalip_client import CriminalIpClient + + +class DomainEnricher(BaseUseCases): + def __init__( + self, + connector_logger: logging.Logger, + client: CriminalIpClient, + converter_to_stix: ConverterToStix, + ): + BaseUseCases.__init__(self, converter_to_stix) + self.connector_logger = connector_logger + self.client = client + self.converter_to_stix = converter_to_stix + + def process_domain_scan(self, observable: dict) -> list: + """ + Retrieve scan id linked to domain to process to the enrichment + """ + scan_id = None + domain_value = observable["value"] + + reports_data = self.client.get_data( + "/v1/domain/reports", {"query": domain_value, "offset": 0} + ) + if reports_data: + data = reports_data.get("data") + if data: + reports_list = data.get("reports", []) + if reports_list: + report_time_str = reports_list[0].get("reg_dtime") + report_time = datetime.strptime( + report_time_str, "%Y-%m-%d %H:%M:%S" + ).replace(tzinfo=timezone.utc) + one_week_ago = datetime.now(timezone.utc) - timedelta(days=7) + + if report_time >= one_week_ago: + scan_id = reports_list[0].get("scan_id") + + if scan_id is None: + scan_response = self.client.post_data( + "/v1/domain/scan", {"query": domain_value} + ) + # Prevent "We are still scanning for your previous request. Please wait." + if scan_response and scan_response["status"] == 400: + for _ in range(3): + scan_response = self.client.post_data( + "/v1/domain/scan", {"query": domain_value} + ) + if scan_response["status"] == 200: + break + time.sleep(5) + + if scan_response and scan_response.get("data"): + scan_id = scan_response["data"].get("scan_id") + + # Poll until scan completes + max_attempts = 10 + for _ in range(max_attempts): + status_data = self.client.get_data(f"/v1/domain/status/{scan_id}") + if status_data and status_data.get("data"): + if status_data["data"].get("scan_percentage", 0) >= 100: + break + time.sleep(3) + + if not scan_id: + return [] + + domain_data = self.client.get_data(f"/v2/domain/report/{scan_id}") + if domain_data and domain_data.get("data"): + return self.process_domain_enrichment(observable, domain_data["data"]) + + return [] + + def process_domain_enrichment( + self, observable: dict, domain_data: Dict[str, Any] + ) -> List[Any]: + objects = [] + domain_name = observable["value"] + obs_id = observable["id"] + + self.connector_logger.info( + "[ENRICH DOMAIN] Starting enrichment...", + {"observable_id": obs_id}, + ) + + # Create and add author, TLP clear and TLP amber to octi_objects + objects.extend(self.generate_author_and_tlp_markings()) + + # Create dummy reference object with domain id for relationships + domain_stix = self.converter_to_stix.create_reference(obs_id=observable["id"]) + + # If phishing prob, create Indicator and relationship + + summary = domain_data.get("summary", {}) + phishing_prob = summary.get("url_phishing_prob", 0) + + if ( + phishing_prob > 20 + or summary.get("phishing_record", 0) > 0 + or summary.get("suspicious_file", 0) > 0 + ): + self.connector_logger.info( + "[ENRICH DOMAIN] Process enrichment from phishing prob data...", + {"observable_id": obs_id}, + ) + + # Create Indicator + labels = ["malicious-domain"] + description_parts = ["Criminal IP URL Scan Report Findings:"] + + labels.append(f"phishing-record-{summary.get('phishing_record')}") + description_parts.append("- Phishing record found.") + labels.append(f"suspicious_file-{summary.get('suspicious_file')}") + description_parts.append("- Suspicious file detected on the page.") + labels.append(f"credential-input-field-{summary.get('cred_input')}") + description_parts.append("- Page contains credential input fields.") + labels.append( + f"favicon-domain-mismatch-{summary.get('diff_domain_favicon')}" + ) + description_parts.append("- Favicon domain does not match the page domain.") + description_parts.append(f"- x_criminalip_phishing_prob: {phishing_prob}") + + indicator_pattern = f"[domain-name:value = '{domain_name}']" + indicator = self.converter_to_stix.create_indicator( + name=f"Malicious domain: {domain_name}", + pattern_type="stix", + pattern=indicator_pattern, + labels=list(set(labels)), + description="\n".join(description_parts), + ) + objects.append(indicator.to_stix2_object()) + + # Relationship Indicator -> Observable (based-on) + objects.append( + self.converter_to_stix.create_relationship( + relationship_type="based-on", + source_obj=indicator, + target_obj=domain_stix, + ).to_stix2_object() + ) + + # Related IPs + self.connector_logger.info( + "[ENRICH DOMAIN] Process enrichment from connected IP data...", + {"observable_id": obs_id}, + ) + related_ips = domain_data.get("connected_ip", []) + for ip_info in related_ips: + ip_value = ip_info.get("ip") + if ip_value: + ip_stix = self.converter_to_stix.create_ipv4(ip=ip_value) + objects.append(ip_stix.to_stix2_object()) + objects.append( + self.converter_to_stix.create_relationship( + relationship_type="resolves-to", + source_obj=domain_stix, + target_obj=ip_stix, + ).to_stix2_object() + ) + + # Countries + + self.connector_logger.info( + "[ENRICH DOMAIN] Process enrichment from countries data...", + {"observable_id": obs_id}, + ) + + countries_data = summary.get("list_of_countries", []) + + # Prevent None values + countries = list(filter(lambda x: x is not None, countries_data)) + + for country_code in countries: + loc_stix = self.converter_to_stix.create_country(name=country_code.upper()) + objects.append(loc_stix.to_stix2_object()) + objects.append( + self.converter_to_stix.create_relationship( + relationship_type="related-to", + source_obj=domain_stix, + target_obj=loc_stix, + description=( + f"Domain {domain_name} associated with" + f" servers in {country_code.upper()}." + ), + ).to_stix2_object() + ) + + return objects diff --git a/internal-enrichment/criminal-ip/src/connector/use_cases/enrich_ipv4.py b/internal-enrichment/criminal-ip/src/connector/use_cases/enrich_ipv4.py new file mode 100644 index 00000000000..51d91df5b98 --- /dev/null +++ b/internal-enrichment/criminal-ip/src/connector/use_cases/enrich_ipv4.py @@ -0,0 +1,183 @@ +import logging + +from connector.converter_to_stix import ConverterToStix +from connector.use_cases.common import BaseUseCases +from criminalip_client import CriminalIpClient + + +class Ipv4Enricher(BaseUseCases): + def __init__( + self, + connector_logger: logging.Logger, + client: CriminalIpClient, + converter_to_stix: ConverterToStix, + ): + BaseUseCases.__init__(self, converter_to_stix) + self.connector_logger = connector_logger + self.client = client + self.converter_to_stix = converter_to_stix + + def process_ipv4_enrichment(self, observable: dict) -> list: + """ + Collect intelligence from the source for an IPV4 type + """ + objects = [] + obs_value = observable["value"] + ip_data = self.client.get_data("/v1/asset/ip/report", {"ip": obs_value}) + + if ip_data: + ip_value = ip_data.get("ip") + if not ip_value: + return [] + + obs_id = observable["id"] + + self.connector_logger.info( + "[ENRICH IPV4] Starting enrichment...", + {"observable_id": obs_id}, + ) + + # Create and add author, TLP clear and TLP amber to octi_objects + objects.extend(self.generate_author_and_tlp_markings()) + + # Create dummy reference object with ipv4 id for relationships + ipv4_stix = self.converter_to_stix.create_reference(obs_id=obs_id) + + # Build labels from issues + categories + malicious info + + self.connector_logger.info( + "[ENRICH IPV4] Process enrichment from malicious info data...", + {"observable_id": obs_id}, + ) + + labels = [] + + issues = ip_data.get("issues", {}) + for key, value in issues.items(): + if isinstance(value, bool) and value: + labels.append(key.replace("is_", "").upper()) + + ip_category = ip_data.get("ip_category", {}).get("data", []) + for category in ip_category: + if category.get("type"): + labels.append(category.get("type").upper()) + + malicious_info_data = self.client.get_data( + "/v1/feature/ip/malicious-info", {"ip": obs_value} + ) + if malicious_info_data: + if malicious_info_data.get("is_malicious"): + labels.append("Malicious") + if malicious_info_data.get("is_anonymous_vpn"): + labels.append("Anonymous VPN") + if malicious_info_data.get("can_remote_access"): + labels.append("Remote Access") + if malicious_info_data.get("is_vpn"): + labels.append("VPN") + + # Create Indicator + score_data = ip_data.get("score", {}) + inbound_score_str = score_data.get("inbound") + outbound_score_str = score_data.get("outbound") + indicator_pattern = f"[ipv4-addr:value = '{ip_value}']" + + indicator = self.converter_to_stix.create_indicator( + name=f"Criminal IP Reputation for {ip_value}", + pattern_type="stix", + pattern=indicator_pattern, + labels=list(set(labels)), + description=( + f"- x_criminalip_inbound_score: {inbound_score_str}\n" + f"- x_criminalip_outbound_score: {outbound_score_str}" + ), + ) + objects.append(indicator.to_stix2_object()) + + # Relationship Indicator -> Observable (based-on) + objects.append( + self.converter_to_stix.create_relationship( + relationship_type="based-on", + source_obj=indicator, + target_obj=ipv4_stix, + ).to_stix2_object() + ) + + # Whois -> AS + Location + + self.connector_logger.info( + "[ENRICH IPV4] Process enrichment from whois data...", + {"observable_id": obs_id}, + ) + + autonomous_system = None + loc_stix = None + whois_data = ip_data.get("whois", {}).get("data") + if whois_data: + whois_entry = whois_data[0] + as_number = whois_entry.get("as_no") + if as_number: + autonomous_system = self.converter_to_stix.create_autonomous_system( + number=as_number, name=whois_entry.get("as_name") + ) + objects.append(autonomous_system.to_stix2_object()) + + country = whois_entry.get("org_country_code") + region = whois_entry.get("region") + city = whois_entry.get("city") + if city: + loc_stix = self.converter_to_stix.create_city( + name=city, + latitude=whois_entry.get("latitude"), + longitude=whois_entry.get("longitude"), + ) + objects.append(loc_stix.to_stix2_object()) + elif region: + loc_stix = self.converter_to_stix.create_region(name=region) + objects.append(loc_stix.to_stix2_object()) + elif country: + loc_stix = self.converter_to_stix.create_country(name=country) + objects.append(loc_stix.to_stix2_object()) + + # Relationships + if autonomous_system: + objects.append( + self.converter_to_stix.create_relationship( + relationship_type="belongs-to", + source_obj=ipv4_stix, + target_obj=autonomous_system, + ).to_stix2_object() + ) + if loc_stix: + objects.append( + self.converter_to_stix.create_relationship( + relationship_type="located-at", + source_obj=ipv4_stix, + target_obj=loc_stix, + ).to_stix2_object() + ) + + # Create Vulnerabilities + + self.connector_logger.info( + "[ENRICH IPV4] Process enrichment from vulnerability data...", + {"observable_id": obs_id}, + ) + + vulnerabilities = ip_data.get("vulnerability", {}).get("data", []) + for vuln in vulnerabilities: + cve_id = vuln.get("cve_id") + if cve_id: + vuln_stix = self.converter_to_stix.create_vulnerability( + name=cve_id, + description=vuln.get("cve_description"), + ) + objects.append(vuln_stix.to_stix2_object()) + objects.append( + self.converter_to_stix.create_relationship( + relationship_type="indicates", + source_obj=indicator, + target_obj=vuln_stix, + ).to_stix2_object() + ) + + return objects diff --git a/internal-enrichment/criminal-ip/src/criminalip_client/__init__.py b/internal-enrichment/criminal-ip/src/criminalip_client/__init__.py new file mode 100644 index 00000000000..30ab69845d4 --- /dev/null +++ b/internal-enrichment/criminal-ip/src/criminalip_client/__init__.py @@ -0,0 +1,5 @@ +from criminalip_client.api_client import CriminalIpClient + +__all__ = [ + "CriminalIpClient", +] diff --git a/internal-enrichment/criminal-ip/src/criminalip_client/api_client.py b/internal-enrichment/criminal-ip/src/criminalip_client/api_client.py new file mode 100644 index 00000000000..85067ac140e --- /dev/null +++ b/internal-enrichment/criminal-ip/src/criminalip_client/api_client.py @@ -0,0 +1,133 @@ +from typing import Any, Dict + +import requests +from pycti import OpenCTIConnectorHelper +from pydantic import HttpUrl + + +class CriminalIpClient: + def __init__( + self, + helper: OpenCTIConnectorHelper, + token: str, + ): + """ + Initialize the client with necessary configuration. + For log purpose, the connector's helper CAN be injected. + Other arguments CAN be added (e.g. `api_key`) if necessary. + + Args: + helper (OpenCTIConnectorHelper): The helper of the connector. Used for logs. + token (str): The API token to authenticate the connector to the external API. + """ + self.helper = helper + + self.base_url = "https://api.criminalip.io" + # Define headers in session and update when needed + self.headers = {"x-api-key": token} + self.session = requests.Session() + self.session.headers.update(self.headers) + + def _request_data( + self, type_request: str, api_url: HttpUrl, params: Dict + ) -> requests.Response: + """ + Internal method to handle API requests + :return: Response in JSON format + """ + try: + if type_request == "GET": + response = self.session.get(api_url, params=params, timeout=20) + log_msg = "[CLIENT API] HTTP GET Request to endpoint" + if type_request == "POST": + response = self.session.post(api_url, data=params, timeout=20) + log_msg = "[CLIENT API] HTTP POST Request to endpoint" + + self.helper.connector_logger.info(log_msg, {"url_path": api_url}) + + response.raise_for_status() + + # Manage custom error from API + response_json = response.json() + status_reponse = response_json.get("status") + match status_reponse: + case "400": + self.helper.connector_logger.error( + "[CLIENT API] Invalid URL.", response_json + ) + raise + case "403": + self.helper.connector_logger.error( + "[CLIENT API] Free Membership users can view a total of 100 data queries.", + response_json, + ) + raise + case "412": + self.helper.connector_logger.error( + "[CLIENT API] Missing parameter.", response_json + ) + raise + case "420": + self.helper.connector_logger.error( + "[CLIENT API] Invalid parameter.", response_json + ) + raise + case "500": + self.helper.connector_logger.error( + "[CLIENT API] An error occured on the server.", + response_json, + ) + raise + return response + + except requests.exceptions.HTTPError as err: + if response.status_code == 401: + msg = "[CLIENT API] Permissions Error, Criminal IP returned a 401, please check your API key" + elif response.status_code == 404: + msg = ( + "[CLIENT API] File not found on Criminal IP, no enrichment possible" + ) + else: + msg = "[CLIENT API] Http error" + self.helper.connector_logger.error(msg, {"error": err}) + raise + except requests.exceptions.ConnectionError as err: + self.helper.connector_logger.error( + "[CLIENT API] Error connecting", {"error": err} + ) + raise + except requests.exceptions.Timeout as err: + self.helper.connector_logger.error( + "[CLIENT API] Timeout error", {"error": err} + ) + raise + except requests.exceptions.RequestException as err: + self.helper.connector_logger.error( + "[CLIENT API] Something else happened", {"error": err} + ) + raise + except Exception as err: + self.helper.connector_logger.error( + "[CLIENT API] Unknown error", {"error": err} + ) + raise + + def get_data(self, endpoint: str, params: Dict[str, Any] = None) -> dict: + """ + Retrieve data for current observable + """ + url = HttpUrl(f"{self.base_url}{endpoint}") + response = self._request_data( + type_request="GET", api_url=url, params=params or {} + ) + return response.json() + + def post_data(self, endpoint: str, params: Dict[str, Any] = None) -> dict: + """ + Send data for current observable + """ + url = HttpUrl(f"{self.base_url}{endpoint}") + response = self._request_data( + type_request="POST", api_url=url, params=params or {} + ) + return response.json() diff --git a/internal-enrichment/anyrun-task/src/main.py b/internal-enrichment/criminal-ip/src/main.py similarity index 78% rename from internal-enrichment/anyrun-task/src/main.py rename to internal-enrichment/criminal-ip/src/main.py index 81c71196d20..643e7bb2a57 100644 --- a/internal-enrichment/anyrun-task/src/main.py +++ b/internal-enrichment/criminal-ip/src/main.py @@ -1,6 +1,6 @@ import traceback -from anyrun_task import AnyRunTask, ConnectorSettings +from connector import ConnectorSettings, CriminalIPConnector from pycti import OpenCTIConnectorHelper if __name__ == "__main__": @@ -16,10 +16,10 @@ try: settings = ConnectorSettings() helper = OpenCTIConnectorHelper( - config=settings.to_helper_config(), playbook_compatible=False + config=settings.to_helper_config(), + playbook_compatible=True, ) - - connector = AnyRunTask(config=settings, helper=helper) + connector = CriminalIPConnector(config=settings, helper=helper) connector.run() except Exception: traceback.print_exc() diff --git a/internal-enrichment/criminal-ip/src/requirements.txt b/internal-enrichment/criminal-ip/src/requirements.txt new file mode 100644 index 00000000000..570c85aa58b --- /dev/null +++ b/internal-enrichment/criminal-ip/src/requirements.txt @@ -0,0 +1,4 @@ +pycti==7.260515.0 +pydantic>=2.8.2,<3 +requests~=2.33.0 +connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk diff --git a/internal-enrichment/criminal-ip/tests/conftest.py b/internal-enrichment/criminal-ip/tests/conftest.py new file mode 100644 index 00000000000..5ee8fc0e226 --- /dev/null +++ b/internal-enrichment/criminal-ip/tests/conftest.py @@ -0,0 +1,4 @@ +import os +import sys + +sys.path.append(os.path.join(os.path.dirname(__file__), "..", "src")) diff --git a/internal-enrichment/criminal-ip/tests/test-requirements.txt b/internal-enrichment/criminal-ip/tests/test-requirements.txt new file mode 100644 index 00000000000..d405632324b --- /dev/null +++ b/internal-enrichment/criminal-ip/tests/test-requirements.txt @@ -0,0 +1,2 @@ +-r ../src/requirements.txt +pytest==9.0.3 diff --git a/internal-enrichment/criminal-ip/tests/tests_connector/__init__.py b/internal-enrichment/criminal-ip/tests/tests_connector/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/internal-enrichment/criminal-ip/tests/tests_connector/test_connector.py b/internal-enrichment/criminal-ip/tests/tests_connector/test_connector.py new file mode 100644 index 00000000000..dafd7d30ac1 --- /dev/null +++ b/internal-enrichment/criminal-ip/tests/tests_connector/test_connector.py @@ -0,0 +1,168 @@ +from typing import Any +from unittest.mock import MagicMock + +import pytest +from connector import ConnectorSettings, CriminalIPConnector + +IPV4_STIX_ID = "ipv4-addr--a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d" +DOMAIN_STIX_ID = "domain-name--b2c3d4e5-f6a7-4b8c-9d0e-1f2a3b4c5d6e" +EMAIL_STIX_ID = "email-addr--c3d4e5f6-a7b8-4c9d-0e1f-2a3b4c5d6e7f" + + +def _make_settings(overrides: dict = None): + """Helper to create a FakeConnectorSettings instance.""" + settings_dict = { + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + "connector": { + "id": "connector-id", + "name": "Criminal IP", + "scope": "IPv4-Addr, Domain-Name", + "log_level": "error", + "auto": True, + }, + "criminal_ip": { + "token": "my-secret-api-key", + "max_tlp": "TLP:AMBER", + }, + } + if overrides: + for key, value in overrides.items(): + if key in settings_dict: + settings_dict[key].update(value) + else: + settings_dict[key] = value + + class FakeConnectorSettings(ConnectorSettings): + @classmethod + def _load_config_dict(cls, _, handler) -> dict[str, Any]: + return handler(settings_dict) + + return FakeConnectorSettings() + + +class TestCriminalIPConnector: + """Tests for the CriminalIPConnector class.""" + + def setup_method(self): + self.settings = _make_settings() + self.helper = MagicMock() + self.helper.connect_scope = "IPv4-Addr, Domain-Name" + self.helper.connector_logger = MagicMock() + self.helper.check_max_tlp.return_value = True + + def test_connector_initialization(self): + """Test connector initializes with correct attributes.""" + connector = CriminalIPConnector(config=self.settings, helper=self.helper) + assert connector.token == "my-secret-api-key" + assert connector.max_tlp == "TLP:AMBER" + assert connector.client is not None + + def test_entity_in_scope_ipv4(self): + """Test that ipv4-addr entities are in scope.""" + connector = CriminalIPConnector(config=self.settings, helper=self.helper) + data = {"entity_id": IPV4_STIX_ID} + assert connector.entity_in_scope(data) is True + + def test_entity_in_scope_domain(self): + """Test that domain-name entities are in scope.""" + connector = CriminalIPConnector(config=self.settings, helper=self.helper) + data = {"entity_id": DOMAIN_STIX_ID} + assert connector.entity_in_scope(data) is True + + def test_entity_not_in_scope(self): + """Test that unsupported entity types are out of scope.""" + connector = CriminalIPConnector(config=self.settings, helper=self.helper) + data = {"entity_id": EMAIL_STIX_ID} + assert connector.entity_in_scope(data) is False + + def test_extract_and_check_markings_valid(self): + """Test that valid TLP markings pass validation.""" + connector = CriminalIPConnector(config=self.settings, helper=self.helper) + entity = { + "objectMarking": [{"definition_type": "TLP", "definition": "TLP:GREEN"}] + } + # Should not raise + connector._extract_and_check_markings(entity) + self.helper.check_max_tlp.assert_called_once_with("TLP:GREEN", "TLP:AMBER") + + def test_extract_and_check_markings_no_markings(self): + """Test default TLP:CLEAR when no markings present.""" + connector = CriminalIPConnector(config=self.settings, helper=self.helper) + entity = {"objectMarking": []} + connector._extract_and_check_markings(entity) + self.helper.check_max_tlp.assert_called_once_with("TLP:CLEAR", "TLP:AMBER") + + def test_extract_and_check_markings_exceeds_max_tlp(self): + """Test raises ValueError when TLP exceeds max.""" + self.helper.check_max_tlp.return_value = False + connector = CriminalIPConnector(config=self.settings, helper=self.helper) + entity = { + "objectMarking": [{"definition_type": "TLP", "definition": "TLP:RED"}] + } + with pytest.raises(ValueError, match="Do not send any data"): + connector._extract_and_check_markings(entity) + + def test_process_message_unsupported_type(self): + """Test process_message handles unsupported observable type gracefully.""" + connector = CriminalIPConnector(config=self.settings, helper=self.helper) + self.helper.stix2_create_bundle.return_value = "{}" + self.helper.send_stix2_bundle.return_value = ["bundle-1"] + + data = { + "entity_id": IPV4_STIX_ID, + "enrichment_entity": {"entity_type": "IPv4-Addr", "objectMarking": []}, + "stix_objects": [{"type": "ipv4-addr", "id": IPV4_STIX_ID}], + "stix_entity": { + "id": IPV4_STIX_ID, + "value": "1.2.3.4", + "type": "unknown-type", + }, + } + # Should handle gracefully (sends back original bundle) + connector.process_message(data) + self.helper.send_stix2_bundle.assert_called() + + def test_process_message_out_of_scope_with_event_type(self): + """Test that out-of-scope entity with event_type raises ValueError.""" + self.helper.connect_scope = "IPv4-Addr" + connector = CriminalIPConnector(config=self.settings, helper=self.helper) + self.helper.stix2_create_bundle.return_value = "{}" + self.helper.send_stix2_bundle.return_value = ["bundle-1"] + + data = { + "entity_id": EMAIL_STIX_ID, + "enrichment_entity": {"entity_type": "Email-Addr", "objectMarking": []}, + "stix_objects": [{"type": "email-addr", "id": EMAIL_STIX_ID}], + "stix_entity": { + "id": EMAIL_STIX_ID, + "value": "test@test.com", + "type": "email-addr", + }, + "event_type": "create", + } + # Out of scope with event_type -> sends back original bundle on error + connector.process_message(data) + self.helper.send_stix2_bundle.assert_called() + + def test_process_message_out_of_scope_no_event_type(self): + """Test that out-of-scope entity without event_type sends original bundle.""" + self.helper.connect_scope = "IPv4-Addr" + connector = CriminalIPConnector(config=self.settings, helper=self.helper) + self.helper.stix2_create_bundle.return_value = "{}" + self.helper.send_stix2_bundle.return_value = ["bundle-1"] + + data = { + "entity_id": EMAIL_STIX_ID, + "enrichment_entity": {"entity_type": "Email-Addr", "objectMarking": []}, + "stix_objects": [{"type": "email-addr", "id": EMAIL_STIX_ID}], + "stix_entity": { + "id": EMAIL_STIX_ID, + "value": "test@test.com", + "type": "email-addr", + }, + } + connector.process_message(data) + self.helper.send_stix2_bundle.assert_called() diff --git a/internal-enrichment/criminal-ip/tests/tests_connector/test_converter_to_stix.py b/internal-enrichment/criminal-ip/tests/tests_connector/test_converter_to_stix.py new file mode 100644 index 00000000000..73b8d005194 --- /dev/null +++ b/internal-enrichment/criminal-ip/tests/tests_connector/test_converter_to_stix.py @@ -0,0 +1,104 @@ +from unittest.mock import MagicMock + +from connector.converter_to_stix import ConverterToStix + +IPV4_STIX_ID = "ipv4-addr--a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d" + + +class TestConverterToStix: + """Tests for ConverterToStix methods.""" + + def setup_method(self): + self.helper = MagicMock() + self.converter = ConverterToStix(helper=self.helper) + + def test_create_author(self): + author = self.converter.create_author() + stix_obj = author.to_stix2_object() + assert stix_obj["type"] == "identity" + assert stix_obj["name"] == "Criminal IP" + + def test_create_tlp_marking_clear(self): + tlp = self.converter.create_tlp_marking("clear") + stix_obj = tlp.to_stix2_object() + assert stix_obj["type"] == "marking-definition" + + def test_create_tlp_marking_amber(self): + tlp = self.converter.create_tlp_marking("amber") + stix_obj = tlp.to_stix2_object() + assert stix_obj["type"] == "marking-definition" + assert stix_obj["name"] == "TLP:AMBER" + + def test_create_autonomous_system(self): + asn = self.converter.create_autonomous_system(number="15169", name="GOOGLE") + stix_obj = asn.to_stix2_object() + assert stix_obj["type"] == "autonomous-system" + assert stix_obj["number"] == 15169 + assert stix_obj["name"] == "GOOGLE" + + def test_create_city(self): + city = self.converter.create_city( + name="Paris", latitude=48.8566, longitude=2.3522 + ) + stix_obj = city.to_stix2_object() + assert stix_obj["type"] == "location" + assert stix_obj["name"] == "Paris" + assert stix_obj["latitude"] == 48.8566 + assert stix_obj["longitude"] == 2.3522 + + def test_create_country(self): + country = self.converter.create_country(name="FR") + stix_obj = country.to_stix2_object() + assert stix_obj["type"] == "location" + assert stix_obj["name"] == "FR" + + def test_create_indicator(self): + indicator = self.converter.create_indicator( + name="Test Indicator", + pattern="[ipv4-addr:value = '1.2.3.4']", + pattern_type="stix", + description="Test description", + labels=["malicious"], + ) + stix_obj = indicator.to_stix2_object() + assert stix_obj["type"] == "indicator" + assert stix_obj["name"] == "Test Indicator" + assert stix_obj["pattern"] == "[ipv4-addr:value = '1.2.3.4']" + assert stix_obj["pattern_type"] == "stix" + assert "malicious" in stix_obj["labels"] + + def test_create_ipv4(self): + ipv4 = self.converter.create_ipv4(ip="192.168.1.1") + stix_obj = ipv4.to_stix2_object() + assert stix_obj["type"] == "ipv4-addr" + assert stix_obj["value"] == "192.168.1.1" + + def test_create_reference(self): + ref = self.converter.create_reference(obs_id=IPV4_STIX_ID) + assert ref.id == IPV4_STIX_ID + + def test_create_relationship(self): + ipv4 = self.converter.create_ipv4(ip="1.2.3.4") + asn = self.converter.create_autonomous_system(number="15169", name="GOOGLE") + rel = self.converter.create_relationship( + relationship_type="belongs-to", + source_obj=ipv4, + target_obj=asn, + ) + stix_obj = rel.to_stix2_object() + assert stix_obj["type"] == "relationship" + assert stix_obj["relationship_type"] == "belongs-to" + + def test_create_vulnerability(self): + vuln = self.converter.create_vulnerability( + name="CVE-2021-44228", description="Log4Shell vulnerability" + ) + stix_obj = vuln.to_stix2_object() + assert stix_obj["type"] == "vulnerability" + assert stix_obj["name"] == "CVE-2021-44228" + + def test_create_region(self): + region = self.converter.create_region(name="Europe") + stix_obj = region.to_stix2_object() + assert stix_obj["type"] == "location" + assert stix_obj["name"] == "Europe" diff --git a/internal-enrichment/criminal-ip/tests/tests_connector/test_enrich_ipv4.py b/internal-enrichment/criminal-ip/tests/tests_connector/test_enrich_ipv4.py new file mode 100644 index 00000000000..5f5bab09f72 --- /dev/null +++ b/internal-enrichment/criminal-ip/tests/tests_connector/test_enrich_ipv4.py @@ -0,0 +1,168 @@ +from unittest.mock import MagicMock + +from connector.converter_to_stix import ConverterToStix +from connector.use_cases.enrich_ipv4 import Ipv4Enricher + +IPV4_STIX_ID = "ipv4-addr--a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d" + + +class TestIpv4Enricher: + """Tests for IPv4 enrichment use case.""" + + def setup_method(self): + self.helper = MagicMock() + self.client = MagicMock() + self.converter = ConverterToStix(helper=self.helper) + self.enricher = Ipv4Enricher( + connector_logger=self.helper.connector_logger, + client=self.client, + converter_to_stix=self.converter, + ) + + def test_process_ipv4_enrichment_no_data(self): + """Should return empty list when API returns no data.""" + self.client.get_data.return_value = None + observable = {"id": IPV4_STIX_ID, "value": "1.2.3.4", "type": "ipv4-addr"} + result = self.enricher.process_ipv4_enrichment(observable) + assert result == [] + + def test_process_ipv4_enrichment_no_ip_in_response(self): + """Should return empty list when response has no ip field.""" + self.client.get_data.return_value = {"status": 200} + observable = {"id": IPV4_STIX_ID, "value": "1.2.3.4", "type": "ipv4-addr"} + result = self.enricher.process_ipv4_enrichment(observable) + assert result == [] + + def test_process_ipv4_enrichment_basic(self): + """Should produce STIX objects for a basic enrichment response.""" + ip_data = { + "ip": "1.2.3.4", + "issues": {"is_tor": True, "is_proxy": False}, + "ip_category": {"data": [{"type": "scanner"}]}, + "score": {"inbound": "Critical", "outbound": "Moderate"}, + "whois": {"data": []}, + "vulnerability": {"data": []}, + } + self.client.get_data.side_effect = [ + ip_data, # /v1/asset/ip/report + { + "is_malicious": True, + "is_anonymous_vpn": False, + "can_remote_access": False, + "is_vpn": False, + }, # malicious-info + ] + + observable = {"id": IPV4_STIX_ID, "value": "1.2.3.4", "type": "ipv4-addr"} + result = self.enricher.process_ipv4_enrichment(observable) + + # Should contain at least: author, tlp_clear, tlp_amber, indicator, relationship + assert len(result) >= 5 + types = [obj["type"] for obj in result] + assert "indicator" in types + assert "relationship" in types + + def test_process_ipv4_enrichment_with_whois_and_vulnerabilities(self): + """Should produce AS, location, and vulnerability STIX objects.""" + ip_data = { + "ip": "8.8.8.8", + "issues": {}, + "ip_category": {"data": []}, + "score": {"inbound": "Safe", "outbound": "Safe"}, + "whois": { + "data": [ + { + "as_no": "15169", + "as_name": "GOOGLE", + "org_country_code": "US", + "region": None, + "city": "Mountain View", + "latitude": 37.386, + "longitude": -122.0838, + } + ] + }, + "vulnerability": { + "data": [ + { + "cve_id": "CVE-2021-44228", + "cve_description": "Log4Shell", + } + ] + }, + } + self.client.get_data.side_effect = [ + ip_data, # /v1/asset/ip/report + None, # malicious-info returns None + ] + + observable = {"id": IPV4_STIX_ID, "value": "8.8.8.8", "type": "ipv4-addr"} + result = self.enricher.process_ipv4_enrichment(observable) + + types = [obj["type"] for obj in result] + assert "autonomous-system" in types + assert "location" in types + assert "vulnerability" in types + # Should have relationships for belongs-to, located-at, indicates + relationships = [obj for obj in result if obj["type"] == "relationship"] + rel_types = [r["relationship_type"] for r in relationships] + assert "belongs-to" in rel_types + assert "located-at" in rel_types + assert "indicates" in rel_types + + def test_process_ipv4_enrichment_labels_from_issues(self): + """Should build labels from issues flags.""" + ip_data = { + "ip": "10.0.0.1", + "issues": {"is_tor": True, "is_vpn": True, "is_proxy": False}, + "ip_category": {"data": []}, + "score": {"inbound": "Low", "outbound": "Low"}, + "whois": {"data": []}, + "vulnerability": {"data": []}, + } + self.client.get_data.side_effect = [ + ip_data, + None, + ] + + observable = {"id": IPV4_STIX_ID, "value": "10.0.0.1", "type": "ipv4-addr"} + result = self.enricher.process_ipv4_enrichment(observable) + + # Find the indicator and check labels + indicators = [obj for obj in result if obj["type"] == "indicator"] + assert len(indicators) == 1 + labels = indicators[0]["labels"] + assert "TOR" in labels + assert "VPN" in labels + assert "PROXY" not in labels + + def test_process_ipv4_enrichment_whois_region_fallback(self): + """Should fallback to region when city is not available.""" + ip_data = { + "ip": "10.0.0.2", + "issues": {}, + "ip_category": {"data": []}, + "score": {"inbound": "Low", "outbound": "Low"}, + "whois": { + "data": [ + { + "as_no": None, + "as_name": None, + "org_country_code": "DE", + "region": "Europe", + "city": None, + "latitude": None, + "longitude": None, + } + ] + }, + "vulnerability": {"data": []}, + } + self.client.get_data.side_effect = [ip_data, None] + + observable = {"id": IPV4_STIX_ID, "value": "10.0.0.2", "type": "ipv4-addr"} + result = self.enricher.process_ipv4_enrichment(observable) + + locations = [obj for obj in result if obj["type"] == "location"] + assert len(locations) == 1 + assert locations[0]["name"] == "Europe" diff --git a/internal-enrichment/criminal-ip/tests/tests_connector/test_settings.py b/internal-enrichment/criminal-ip/tests/tests_connector/test_settings.py new file mode 100644 index 00000000000..c637039e8bb --- /dev/null +++ b/internal-enrichment/criminal-ip/tests/tests_connector/test_settings.py @@ -0,0 +1,190 @@ +from typing import Any + +import pytest +from connector import ConnectorSettings +from connectors_sdk import BaseConfigModel, ConfigValidationError + + +@pytest.mark.parametrize( + "settings_dict", + [ + pytest.param( + { + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + "connector": { + "id": "connector-id", + "name": "Criminal IP", + "scope": "IPv4-Addr, Domain-Name", + "log_level": "error", + "auto": True, + }, + "criminal_ip": { + "token": "my-secret-api-key", + "max_tlp": "TLP:AMBER", + }, + }, + id="full_valid_settings_dict", + ), + pytest.param( + { + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + "connector": {"id": "connector-id"}, + "criminal_ip": {"token": "my-secret-api-key"}, + }, + id="minimal_valid_settings_dict", + ), + pytest.param( + { + "opencti": { + "url": "https://opencti.example.com", + "token": "test-token", + }, + "connector": { + "id": "some-id", + }, + "criminal_ip": { + "token": "my-secret-api-key", + "max_tlp": "TLP:RED", + }, + }, + id="valid_settings_with_max_tlp_red", + ), + pytest.param( + { + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + "connector": { + "id": "connector-id", + "name": "Criminal IP", + "scope": "IPv4-Addr", + }, + "criminal_ip": { + "token": "my-secret-api-key", + "max_tlp": "TLP:CLEAR", + }, + }, + id="valid_settings_single_scope", + ), + ], +) +def test_settings_should_accept_valid_input(settings_dict): + class FakeConnectorSettings(ConnectorSettings): + @classmethod + def _load_config_dict(cls, _, handler) -> dict[str, Any]: + return handler(settings_dict) + + settings = FakeConnectorSettings() + assert isinstance(settings.opencti, BaseConfigModel) is True + assert isinstance(settings.connector, BaseConfigModel) is True + assert isinstance(settings.criminal_ip, BaseConfigModel) is True + + +def test_settings_defaults(): + """Test that default values are properly set.""" + settings_dict = { + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + "connector": {"id": "connector-id"}, + "criminal_ip": {"token": "my-secret-api-key"}, + } + + class FakeConnectorSettings(ConnectorSettings): + @classmethod + def _load_config_dict(cls, _, handler) -> dict[str, Any]: + return handler(settings_dict) + + settings = FakeConnectorSettings() + assert settings.connector.name == "Criminal IP" + assert settings.connector.scope == ["IPv4-Addr", "Domain-Name"] + assert settings.criminal_ip.max_tlp == "TLP:AMBER" + + +def test_settings_token_is_secret(): + """Test that the token is stored as a SecretStr.""" + settings_dict = { + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + "connector": {"id": "connector-id"}, + "criminal_ip": {"token": "super-secret-key"}, + } + + class FakeConnectorSettings(ConnectorSettings): + @classmethod + def _load_config_dict(cls, _, handler) -> dict[str, Any]: + return handler(settings_dict) + + settings = FakeConnectorSettings() + assert settings.criminal_ip.token.get_secret_value() == "super-secret-key" + # Ensure the token is not exposed in string representation + assert "super-secret-key" not in str(settings.criminal_ip.token) + + +@pytest.mark.parametrize( + "settings_dict, field_name", + [ + pytest.param( + {}, + "settings", + id="empty_settings_dict", + ), + pytest.param( + { + "opencti": {"url": "http://localhost:PORT", "token": "test-token"}, + "connector": {}, + "criminal_ip": {"token": "my-secret-api-key"}, + }, + "opencti.url", + id="invalid_opencti_url", + ), + pytest.param( + { + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + "connector": {}, + "criminal_ip": { + "max_tlp": "TLP:AMBER", + }, + }, + "criminal_ip.token", + id="missing_criminal_ip_token", + ), + pytest.param( + { + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + "connector": {}, + "criminal_ip": { + "token": "my-secret-api-key", + "max_tlp": "INVALID_TLP", + }, + }, + "criminal_ip.max_tlp", + id="invalid_max_tlp_value", + ), + ], +) +def test_settings_should_raise_when_invalid_input(settings_dict, field_name): + class FakeConnectorSettings(ConnectorSettings): + @classmethod + def _load_config_dict(cls, _, handler) -> dict[str, Any]: + return handler(settings_dict) + + with pytest.raises(ConfigValidationError) as err: + FakeConnectorSettings() + assert "Error validating configuration" in str(err) diff --git a/internal-enrichment/crowdsec/src/requirements.txt b/internal-enrichment/crowdsec/src/requirements.txt index 316896c920e..5352b7534bb 100644 --- a/internal-enrichment/crowdsec/src/requirements.txt +++ b/internal-enrichment/crowdsec/src/requirements.txt @@ -1,2 +1,2 @@ -pycti==7.260309.0 +pycti==7.260515.0 pycountry diff --git a/internal-enrichment/dnstwist/requirements.txt b/internal-enrichment/dnstwist/requirements.txt index c9f34b48c30..5c3533359c7 100644 --- a/internal-enrichment/dnstwist/requirements.txt +++ b/internal-enrichment/dnstwist/requirements.txt @@ -1,4 +1,4 @@ -pycti==7.260309.0 +pycti==7.260515.0 dnstwist==20250130 dnspython whois diff --git a/internal-enrichment/dnstwist/tests/test-requirements.txt b/internal-enrichment/dnstwist/tests/test-requirements.txt index 24b529c78d0..e2c1b76505f 100644 --- a/internal-enrichment/dnstwist/tests/test-requirements.txt +++ b/internal-enrichment/dnstwist/tests/test-requirements.txt @@ -1,2 +1,2 @@ -r ../requirements.txt -pytest==8.4.2 +pytest==9.0.3 diff --git a/internal-enrichment/domaintools/src/requirements.txt b/internal-enrichment/domaintools/src/requirements.txt index e3d15754ca5..18c8ea0d62f 100644 --- a/internal-enrichment/domaintools/src/requirements.txt +++ b/internal-enrichment/domaintools/src/requirements.txt @@ -1,5 +1,5 @@ -pycti==7.260309.0 +pycti==7.260515.0 domaintools-api==2.7.0 validators~=0.35.0 pydantic >=2.8.2, <3 -connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@7.260227.0#subdirectory=connectors-sdk +connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk diff --git a/internal-enrichment/domaintools/tests/test-requirements.txt b/internal-enrichment/domaintools/tests/test-requirements.txt index bdef682113c..d405632324b 100644 --- a/internal-enrichment/domaintools/tests/test-requirements.txt +++ b/internal-enrichment/domaintools/tests/test-requirements.txt @@ -1,2 +1,2 @@ -r ../src/requirements.txt -pytest==8.4.2 +pytest==9.0.3 diff --git a/internal-enrichment/eset-enrichment/__metadata__/connector_manifest.json b/internal-enrichment/eset-enrichment/__metadata__/connector_manifest.json index acf32c1dfda..56aa3d666bf 100644 --- a/internal-enrichment/eset-enrichment/__metadata__/connector_manifest.json +++ b/internal-enrichment/eset-enrichment/__metadata__/connector_manifest.json @@ -1,8 +1,8 @@ { - "title": "ESET ETI Report", + "title": "ESET Threat Intelligence Reports", "slug": "eset", - "description": "The OpenCTI ESET ETI Report Enrichment Connector can be used to import knowledge from the ESET ETI Report API.", - "short_description": "The OpenCTI ESET ETI Report Enrichment Connector can be used to import knowledge from the ESET ETI Report API.", + "description": "The ESET Threat Intelligence Reports Connector enhances OpenCTI by automatically enriching ESET Threat Intelligence (ETI) report objects with high-value, analyst-ready data. Designed for teams that rely on ESET's advanced threat research, the connector seamlessly retrieves detailed PDF intelligence reports directly from the ESET portal and attaches them to corresponding ESET report entities inside OpenCTI.\n\nESET Threat Intelligence delivers deep insights into APT activity, eCrime and infostealer activity, malware behavior, and threat actor profiles, enabling security teams to understand adversary tactics and improve detection and response. The connector identifies ESET report objects containing external references to ETI and enriches them by downloading the associated PDF reports, ensuring analysts have direct access to the full intelligence package without leaving the OpenCTI interface.\n\nThis integration streamlines analysts' workflows by centralizing ESET content within OpenCTI, reducing portal switching, and improving data continuity across investigations. Once deployed, the connector runs reliably in background enrichment workflows, supporting automated, playbook-driven, or manual enrichment modes depending on operational needs.", + "short_description": "Enriches OpenCTI by automatically downloading and attaching detailed ESET threat reports to ESET report objects, giving analysts direct insight into APT groups, eCrime, infostealer activity, and malware intelligence.", "logo": "internal-enrichment/eset-enrichment/__metadata__/logo.png", "use_cases": [ "Enrichment & Analysis" diff --git a/internal-enrichment/eset-enrichment/__metadata__/logo.png b/internal-enrichment/eset-enrichment/__metadata__/logo.png index 13174f822f2..385a26cc6ee 100644 Binary files a/internal-enrichment/eset-enrichment/__metadata__/logo.png and b/internal-enrichment/eset-enrichment/__metadata__/logo.png differ diff --git a/internal-enrichment/eset-enrichment/src/eset/connector.py b/internal-enrichment/eset-enrichment/src/eset/connector.py index bdd917ef561..ae2fcded299 100644 --- a/internal-enrichment/eset-enrichment/src/eset/connector.py +++ b/internal-enrichment/eset-enrichment/src/eset/connector.py @@ -1,13 +1,48 @@ import base64 import re import urllib.parse +from typing import Dict, List, Mapping, Optional from urllib.parse import urlparse import requests -from pycti import OpenCTIConnectorHelper, get_config_variable +import stix2 +from pycti import MarkingDefinition, OpenCTIConnectorHelper, get_config_variable from .config_variables import ConfigConnector +ALLOWED_TLPS = { + "tlp:clear", + "tlp:white", + "tlp:green", + "tlp:amber", + "tlp:amber+strict", + "tlp:red", +} + + +def create_tlp_marking(tlp_value: str) -> stix2.MarkingDefinition: + tlp_value_lower = tlp_value.lower() + + if tlp_value_lower == "tlp:clear" or tlp_value_lower == "tlp:white": + return stix2.TLP_WHITE + if tlp_value_lower == "tlp:green": + return stix2.TLP_GREEN + if tlp_value_lower == "tlp:amber": + return stix2.TLP_AMBER + if tlp_value_lower == "tlp:amber+strict": + return stix2.MarkingDefinition( + id=MarkingDefinition.generate_id("TLP", "TLP:AMBER+STRICT"), + definition_type="statement", + definition={"statement": "custom"}, + allow_custom=True, + x_opencti_definition_type="TLP", + x_opencti_definition="TLP:AMBER+STRICT", + ) + if tlp_value_lower == "tlp:red": + return stix2.TLP_RED + + raise ValueError(f"unknown TLP value {tlp_value}") + class EsetConnector: def __init__(self): @@ -100,9 +135,18 @@ def _get_eti_api_url(self, objects: list) -> None | str: return None + def _get_tlp_from_labels(self, labels: List[Dict]) -> Optional[str]: + """Returns valid TLP value from object labels.""" + if labels: + for label in labels: + if label["value"].lower() in ALLOWED_TLPS: + return label["value"] + + return None + def enrich_report( self, report_object: dict, api_url: str, report_name: str - ) -> None: + ) -> Dict: """Download report from ESET portal and updates report STIX object.""" with requests.get( api_url, @@ -113,17 +157,16 @@ def enrich_report( response.raise_for_status() content = response.content + file = { + "name": report_name, + "data": base64.b64encode(content).decode("utf-8"), + "mime_type": "application/octet-pdf", + } files = report_object.get("x_opencti_files", []) - - files.append( - { - "name": report_name, - "data": base64.b64encode(content).decode("utf-8"), - "mime_type": "application/octet-pdf", - } - ) + files.append(file) report_object["x_opencti_files"] = files + return file # noinspection PyMethodMayBeStatic def has_attachment(self, import_files: list, attachment_name: str) -> bool: @@ -180,7 +223,40 @@ def process_message(self, data: dict) -> str: {"entity_id": entity_id, "name": report_name, "url": url}, ) - self.enrich_report(stix_object, url, report_name) + file = self.enrich_report(stix_object, url, report_name) + + # Add TLP marking for file data. If the report has non-default TLP, use it. + # Otherwise, assign TLP specified as label. + tlp_marking: Optional[Mapping] = None + + if enrichment_entity["objectMarking"]: + for marking_definition in enrichment_entity["objectMarking"]: + if marking_definition["definition_type"] == "TLP": + tlp_marking = marking_definition + + tlp_value_label: Optional[str] = self._get_tlp_from_labels( + enrichment_entity.get("objectLabel") + ) + + if (not tlp_value_label and tlp_marking) or ( + tlp_marking + and ( + tlp_marking["definition"].lower() != "tlp:clear" + and tlp_marking["definition"].lower() != "tlp:white" + ) + ): + file["object_marking_refs"] = tlp_marking["standard_id"] + elif tlp_value_label: + tlp_marking = create_tlp_marking(tlp_value_label) + + self.helper.log_debug( + "Adding TLP marking found as label", + {"entity_id": entity_id, "tlp": tlp_value_label}, + ) + + stix_objects.append(tlp_marking) + file["object_marking_refs"] = tlp_marking["id"] + stix_objects_bundle = self.helper.stix2_create_bundle(stix_objects) self.helper.log_debug( diff --git a/internal-enrichment/eset-enrichment/src/requirements.txt b/internal-enrichment/eset-enrichment/src/requirements.txt index db7d8445f4c..5804ceb7cff 100644 --- a/internal-enrichment/eset-enrichment/src/requirements.txt +++ b/internal-enrichment/eset-enrichment/src/requirements.txt @@ -1,2 +1,2 @@ -pycti==7.260309.0 +pycti==7.260515.0 validators==0.33.0 \ No newline at end of file diff --git a/internal-enrichment/eset-enrichment/tests/test_eset_connector.py b/internal-enrichment/eset-enrichment/tests/test_eset_connector.py index 033b2d8ce59..d4530e1a25d 100644 --- a/internal-enrichment/eset-enrichment/tests/test_eset_connector.py +++ b/internal-enrichment/eset-enrichment/tests/test_eset_connector.py @@ -1,3 +1,4 @@ +import contextlib import json import urllib.parse from unittest import mock @@ -12,6 +13,15 @@ def find_call(calls, call_args: tuple): return call +@contextlib.contextmanager +def patch_download(content): + with mock.patch("requests.get") as mock_get: + mock_response = mock.MagicMock(content=content, raise_for_status=mock.Mock()) + mock_response.__enter__.return_value = mock_response + mock_get.return_value = mock_response + yield mock_get + + @pytest.mark.usefixtures("setup_config") class TestEsetConnector(object): connector: EsetConnector @@ -98,13 +108,7 @@ def test_enrich_entity(self, api_host, enrichment_data, report_payload): self.connector.helper.send_stix2_bundle.reset_mock() with mock.patch.object(self.connector, "host", api_host): - with mock.patch("requests.get") as mock_get: - mock_response = mock.MagicMock( - content=report_payload, raise_for_status=mock.Mock() - ) - mock_response.__enter__.return_value = mock_response - mock_get.return_value = mock_response - + with patch_download(report_payload) as mock_get: self.connector.process_message(enrichment_data) mock_get.assert_called_once() @@ -126,6 +130,109 @@ def test_enrich_entity(self, api_host, enrichment_data, report_payload): "name": "AS-2024-0005 Report.pdf", "data": "VEhJUyBJUyBNT0NLIFJFUE9SVA==", "mime_type": "application/octet-pdf", + "object_marking_refs": "marking-definition--826578e1-40ad-459f-bc73-ede076f81f37", + } + ] + break + else: + assert False, "Report not found in sent bundle" + self.connector.helper.send_stix2_bundle.reset_mock() + + @pytest.mark.parametrize("api_host", ["https://eti.eset.com/"]) + @pytest.mark.usefixtures("enrichment_data") + @pytest.mark.usefixtures("report_payload") + def test_enrich_entity_with_default_tlp( + self, api_host, enrichment_data, report_payload + ): + self.connector.helper.send_stix2_bundle.reset_mock() + + enrichment_data["enrichment_entity"]["objectMarking"] = [ + { + "id": "aa707c73-6fe6-487e-9e99-99d30ecd6614", + "standard_id": "marking-definition--613f2e26-407d-48c7-9eca-b8e91df99dc9", + "entity_type": "Marking-Definition", + "definition_type": "TLP", + "definition": "TLP:CLEAR", + "created": "2026-03-12T11:39:41.424Z", + "modified": "2026-03-12T11:54:57.183Z", + "x_opencti_order": 1, + "x_opencti_color": "#ffffff", + "createdById": None, + } + ] + + with mock.patch.object(self.connector, "host", api_host): + with patch_download(report_payload): + self.connector.process_message(enrichment_data) + + for o in json.loads( + self.connector.helper.send_stix2_bundle.call_args.args[0] + )["objects"]: + if o["type"] == "report": + assert o["x_opencti_files"] == [ + { + "name": "AS-2024-0005 Report.pdf", + "data": "VEhJUyBJUyBNT0NLIFJFUE9SVA==", + "mime_type": "application/octet-pdf", + "object_marking_refs": "marking-definition--826578e1-40ad-459f-bc73-ede076f81f37", + } + ] + break + else: + assert False, "Report not found in sent bundle" + self.connector.helper.send_stix2_bundle.reset_mock() + + @pytest.mark.parametrize("api_host", ["https://eti.eset.com/"]) + @pytest.mark.usefixtures("enrichment_data") + @pytest.mark.usefixtures("report_payload") + def test_enrich_entity_with_default_tlp_and_missing_label_tlp( + self, api_host, enrichment_data, report_payload + ): + self.connector.helper.send_stix2_bundle.reset_mock() + + enrichment_data["enrichment_entity"]["objectMarking"] = [ + { + "id": "aa707c73-6fe6-487e-9e99-99d30ecd6614", + "standard_id": "marking-definition--613f2e26-407d-48c7-9eca-b8e91df99dc9", + "entity_type": "Marking-Definition", + "definition_type": "TLP", + "definition": "TLP:CLEAR", + "created": "2026-03-12T11:39:41.424Z", + "modified": "2026-03-12T11:54:57.183Z", + "x_opencti_order": 1, + "x_opencti_color": "#ffffff", + "createdById": None, + } + ] + enrichment_data["enrichment_entity"]["objectLabel"] = [ + { + "id": "e2528867-8a15-423e-909c-744eb1007c61", + "value": "activity summary", + "color": "#95b717", + "createdById": None, + }, + { + "id": "4aa66244-3479-4821-8ed7-38d5aa7b65c5", + "value": "eset", + "color": "#dda52f", + "createdById": None, + }, + ] + + with mock.patch.object(self.connector, "host", api_host): + with patch_download(report_payload): + self.connector.process_message(enrichment_data) + + for o in json.loads( + self.connector.helper.send_stix2_bundle.call_args.args[0] + )["objects"]: + if o["type"] == "report": + assert o["x_opencti_files"] == [ + { + "name": "AS-2024-0005 Report.pdf", + "data": "VEhJUyBJUyBNT0NLIFJFUE9SVA==", + "mime_type": "application/octet-pdf", + "object_marking_refs": "marking-definition--613f2e26-407d-48c7-9eca-b8e91df99dc9", } ] break diff --git a/internal-enrichment/first-epss/README.md b/internal-enrichment/first-epss/README.md index 5697a065088..982fa58a1f9 100644 --- a/internal-enrichment/first-epss/README.md +++ b/internal-enrichment/first-epss/README.md @@ -39,7 +39,7 @@ This connector integrates the FIRST EPSS API with OpenCTI to: ### Requirements -- OpenCTI Platform >= 7.260309.0 +- OpenCTI Platform >= 7.260515.0 ## Configuration variables diff --git a/internal-enrichment/first-epss/src/requirements.txt b/internal-enrichment/first-epss/src/requirements.txt index fc29d914329..f1f775ba388 100644 --- a/internal-enrichment/first-epss/src/requirements.txt +++ b/internal-enrichment/first-epss/src/requirements.txt @@ -1,3 +1,3 @@ -pycti==7.260309.0 +pycti==7.260515.0 pydantic >=2.8.2, <3 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk \ No newline at end of file diff --git a/internal-enrichment/first-epss/tests/test-requirements.txt b/internal-enrichment/first-epss/tests/test-requirements.txt index bdef682113c..d405632324b 100644 --- a/internal-enrichment/first-epss/tests/test-requirements.txt +++ b/internal-enrichment/first-epss/tests/test-requirements.txt @@ -1,2 +1,2 @@ -r ../src/requirements.txt -pytest==8.4.2 +pytest==9.0.3 diff --git a/internal-enrichment/glimps-malware/src/requirements.txt b/internal-enrichment/glimps-malware/src/requirements.txt index 5bf2d65945c..e213ac4d672 100644 --- a/internal-enrichment/glimps-malware/src/requirements.txt +++ b/internal-enrichment/glimps-malware/src/requirements.txt @@ -1,2 +1,2 @@ gdetect==0.9.0 -pycti==7.260309.0 +pycti==7.260515.0 diff --git a/internal-enrichment/google-dns/.build.env b/internal-enrichment/google-dns/.build.env new file mode 100644 index 00000000000..90e99f7106a --- /dev/null +++ b/internal-enrichment/google-dns/.build.env @@ -0,0 +1,2 @@ +CONNECTOR_CMD="-m src" +CONNECTOR_WORKDIR="/opt/connector" diff --git a/internal-enrichment/google-dns/src/requirements.txt b/internal-enrichment/google-dns/src/requirements.txt index a4a3e2250d2..95230289682 100644 --- a/internal-enrichment/google-dns/src/requirements.txt +++ b/internal-enrichment/google-dns/src/requirements.txt @@ -1,4 +1,4 @@ -pycti==7.260309.0 +pycti==7.260515.0 responses==0.25.8 pydantic>=2.10, <3 pydantic-settings==2.10.1 diff --git a/internal-enrichment/google-safebrowsing/requirements.txt b/internal-enrichment/google-safebrowsing/requirements.txt index e9684a32073..f5b8181a0c7 100644 --- a/internal-enrichment/google-safebrowsing/requirements.txt +++ b/internal-enrichment/google-safebrowsing/requirements.txt @@ -1 +1 @@ -pycti==7.260309.0 \ No newline at end of file +pycti==7.260515.0 \ No newline at end of file diff --git a/internal-enrichment/greynoise-vuln/README.md b/internal-enrichment/greynoise-vuln/README.md index b681d2052f8..4e957f9e035 100644 --- a/internal-enrichment/greynoise-vuln/README.md +++ b/internal-enrichment/greynoise-vuln/README.md @@ -46,7 +46,7 @@ This internal enrichment connector queries the GreyNoise API for CVE (Vulnerabil ### Requirements - OpenCTI Platform >= 6.0.0 -- GreyNoise API key with Vulnerability Prioritization License +- GreyNoise API key. Full details require a key with Vulnerability Prioritization License, but any key will provide basic information. - Network access to GreyNoise API --- @@ -98,7 +98,7 @@ services: - OPENCTI_URL=http://localhost - OPENCTI_TOKEN=ChangeMe - CONNECTOR_ID=ChangeMe - - CONNECTOR_NAME=GreyNoise Vulnerability + - CONNECTOR_NAME=GreyNoise Vulnerability Enrichment - CONNECTOR_SCOPE=vulnerability - CONNECTOR_AUTO=true - CONNECTOR_LOG_LEVEL=error diff --git a/internal-enrichment/greynoise-vuln/docker-compose.yml b/internal-enrichment/greynoise-vuln/docker-compose.yml index 3012ecf75eb..3dce3b0dc47 100644 --- a/internal-enrichment/greynoise-vuln/docker-compose.yml +++ b/internal-enrichment/greynoise-vuln/docker-compose.yml @@ -6,7 +6,7 @@ services: - OPENCTI_URL=http://localhost - OPENCTI_TOKEN=ChangeMe - CONNECTOR_ID=ChangeMe - - CONNECTOR_NAME=GreyNoise + - CONNECTOR_NAME="GreyNoise Vulnerability Enrichment" - CONNECTOR_SCOPE=vulnerability - CONNECTOR_AUTO=true - CONNECTOR_LOG_LEVEL=error diff --git a/internal-enrichment/greynoise-vuln/src/config.yml.sample b/internal-enrichment/greynoise-vuln/src/config.yml.sample index f01ef41033e..a629f3718ae 100644 --- a/internal-enrichment/greynoise-vuln/src/config.yml.sample +++ b/internal-enrichment/greynoise-vuln/src/config.yml.sample @@ -5,10 +5,10 @@ opencti: connector: type: 'INTERNAL_ENRICHMENT' id: 'ChangeMe' - name: 'GreyNoise Vulnerability' + name: 'GreyNoise Vulnerability Enrichment' scope: 'vulnerability' auto: true # Enable/disable auto-enrichment of observables - log_level: 'info' + log_level: 'error' greynoise-vuln: key: 'ChangeMe' diff --git a/internal-enrichment/greynoise-vuln/src/main.py b/internal-enrichment/greynoise-vuln/src/main.py index 731872e6b42..e5a22a51e8c 100644 --- a/internal-enrichment/greynoise-vuln/src/main.py +++ b/internal-enrichment/greynoise-vuln/src/main.py @@ -1,4 +1,3 @@ -import json import os import traceback from datetime import datetime @@ -6,7 +5,7 @@ import stix2 import yaml -from greynoise import GreyNoise +from greynoise.api import APIConfig, GreyNoise from pycti import ( Identity, OpenCTIConnectorHelper, @@ -42,81 +41,11 @@ def __init__(self): # Define variables self.tlp = None self.stix_objects = [] - self.integration_name = "opencti-vuln-enricher-v1.0" - - self.check_api_key(force_recheck=True) - - def check_api_key(self, force_recheck=False): - # Validate GreyNoise API Key - self.helper.log_debug("Validating GreyNoise API Key...") - try: - today = datetime.today().strftime("%Y-%m-%d") - - if os.path.exists("KEY_INFO"): - with open("KEY_INFO") as text_file: - key_info = text_file.read() - key_state = json.loads(key_info) - else: - empty_key_state = {"offering": "", "expiration": "", "last_checked": ""} - with open("KEY_INFO", "w") as text_file: - empty_key_state = json.dumps(empty_key_state) - print(f"{empty_key_state}", file=text_file) - key_state = json.loads(empty_key_state) - - if key_state.get("last_checked") != today or force_recheck: - session = GreyNoise( - api_key=self.greynoise_key, integration_name=self.integration_name - ) - key_check = session.test_connection() - - key_state = { - "offering": key_check.get("offering"), - "expiration": key_check.get("expiration"), - "last_checked": today, - } - - if "offering" in key_check: - self.helper.log_info( - "GreyNoise API Key Status: " - + str(key_check.get("offering", "")) - + "/" - + str(key_check.get("expiration", "")) - ) - if key_check.get("offering") == "community_trial": - key_state["valid"] = True - self.helper.log_info("GreyNoise API key is valid!") - elif key_check.get("offering") == "community": - key_state["valid"] = False - self.helper.log_info( - "GreyNoise API key NOT valid! Update to use connector!" - ) - elif ( - key_check.get("offering") != "community" - and key_check.get("expiration") > today - ): - key_state["valid"] = True - self.helper.log_info("GreyNoise API key is valid!") - elif ( - key_check.get("offering") != "community" - and key_check.get("expiration") < today - ): - key_state["valid"] = False - - with open("KEY_INFO", "w") as text_file: - key_state = json.dumps(key_state) - print(f"{key_state}", file=text_file) - key_state = json.loads(key_state) - - return key_state.get("valid", False) - - except Exception as e: - self.helper.log_error( - "[API] GreyNoise API key is not valid or not supported for this integration. API " - "Response: " + str(e) - ) - raise Exception( - "[API] GreyNoise API key is not valid or not supported for this integration. API Response: " - + str(e) + self.integration_name = "opencti-vuln-enricher-v2.0" + + if self.greynoise_key is None: + raise ValueError( + "GREYNOISE_KEY is not set in the config.yml file or the environment variable is not set" ) def _extract_and_check_markings(self, opencti_entity: dict) -> bool: @@ -442,14 +371,6 @@ def _process_message(self, data: Dict) -> str: entity_splited = data["entity_id"].split("--") entity_type = entity_splited[0].lower() - if not self.check_api_key(): - self.helper.log_error( - "GreyNoise API Key is NOT valid. Update to Enterprise API key to use this connector." - ) - raise ValueError( - "GreyNoise API Key is NOT valid. Update to Enterprise API key to use this connector." - ) - if entity_type in scopes: # OpenCTI entity information retrieval stix_entity = data["stix_entity"] @@ -472,9 +393,10 @@ def _process_message(self, data: Dict) -> str: self.helper.connector_logger.info( f"Get CVE context for: {opencti_entity_value}" ) - session = GreyNoise( + api_config = APIConfig( api_key=self.greynoise_key, integration_name=self.integration_name ) + session = GreyNoise(api_config) json_data = session.cve(opencti_entity_value) diff --git a/internal-enrichment/greynoise-vuln/src/requirements.txt b/internal-enrichment/greynoise-vuln/src/requirements.txt index 7357575b2e7..051ee082842 100644 --- a/internal-enrichment/greynoise-vuln/src/requirements.txt +++ b/internal-enrichment/greynoise-vuln/src/requirements.txt @@ -1,3 +1,3 @@ -pycti==7.260309.0 +pycti==7.260515.0 pycountry==24.6.1 -greynoise==2.3.0 \ No newline at end of file +greynoise==3.0.1 \ No newline at end of file diff --git a/internal-enrichment/greynoise/README.md b/internal-enrichment/greynoise/README.md index 6a9ef453e49..320ec73ac4b 100644 --- a/internal-enrichment/greynoise/README.md +++ b/internal-enrichment/greynoise/README.md @@ -50,7 +50,7 @@ This internal enrichment connector queries the GreyNoise API for IPv4 addresses ### Requirements - OpenCTI Platform >= 6.0.0 -- GreyNoise API key (Enterprise or Community Trial) +- GreyNoise API key **Uses with Free Tier keys will be rate limited** - Network access to GreyNoise API --- @@ -83,6 +83,7 @@ This internal enrichment connector queries the GreyNoise API for IPv4 addresses | `greynoise_name` | `GREYNOISE_NAME` | No | The GreyNoise organization name | | `greynoise_description` | `GREYNOISE_DESCRIPTION` | No | The GreyNoise organization description | | `greynoise_sighting_not_seen` | `GREYNOISE_SIGHTING_NOT_SEEN` | No | Create sighting with count=0 when IP not seen | +| `greynoise_no_sightings` | `GREYNOISE_NO_SIGHTINGS` | No | Skip any sighting creations | | `greynoise_indicator_score_malicious` | `GREYNOISE_INDICATOR_SCORE_MALICIOUS` | No | Score for malicious classification (default: 75) | | `greynoise_indicator_score_suspicious` | `GREYNOISE_INDICATOR_SCORE_SUSPICIOUS` | No | Score for suspicious classification (default: 50) | | `greynoise_indicator_score_benign` | `GREYNOISE_INDICATOR_SCORE_BENIGN` | No | Score for benign classification (default: 20) | @@ -113,6 +114,7 @@ services: - GREYNOISE_KEY=ChangeMe - GREYNOISE_MAX_TLP=TLP:AMBER - GREYNOISE_SIGHTING_NOT_SEEN=false + - GREYNOISE_NO_SIGHTINGS=false restart: always ``` @@ -137,6 +139,7 @@ Trigger enrichment: - Automatically if `CONNECTOR_AUTO=true` - Via playbooks +**NOTE: Uses with Free Tier GreyNoise accounts should not use the CONNECTOR_AUTO=true value as the daily rate limits do not work well with this setting. Uses this enrichment manually to control which indicators are enriched with the connector** --- ## Behavior @@ -176,7 +179,7 @@ flowchart LR | `actor` | Threat Actor | `related-to` | | `tags` (worm category) | Malware | `related-to` | | `vpn_service` | Tool | `related-to` | -| `bot`, `tor`, `vpn` | Labels | Direct attribute | +| `tor`, `vpn` | Labels | Direct attribute | ### Classification Scoring @@ -213,7 +216,8 @@ Enable debug logging by setting `CONNECTOR_LOG_LEVEL=debug` to see detailed conn - STIX bundle generation details Common issues: -- **Invalid API Key**: Ensure you have an Enterprise or Community Trial API key +- **Invalid API Key**: Ensure you have an valid API key +- **Rate Limit Error**: Ensure the connector is set to manual enrichment and only enrich within the weekly limits allowed for Free Tier users - **TLP Restrictions**: Check that observable TLP does not exceed `GREYNOISE_MAX_TLP` --- diff --git a/internal-enrichment/greynoise/docker-compose.yml b/internal-enrichment/greynoise/docker-compose.yml index 3fdcbd115f8..2338cf6c8d8 100644 --- a/internal-enrichment/greynoise/docker-compose.yml +++ b/internal-enrichment/greynoise/docker-compose.yml @@ -6,11 +6,12 @@ services: - OPENCTI_URL=http://localhost - OPENCTI_TOKEN=ChangeMe - CONNECTOR_ID=ChangeMe - - CONNECTOR_NAME=GreyNoise + - CONNECTOR_NAME=GreyNoise IP Enrichment - CONNECTOR_SCOPE=IPv4-Addr - CONNECTOR_AUTO=true - CONNECTOR_LOG_LEVEL=error - GREYNOISE_KEY=ChangeMe - GREYNOISE_MAX_TLP=TLP:AMBER - GREYNOISE_SIGHTING_NOT_SEEN=false + - GREYNOISE_NO_SIGHTINGS=false restart: always diff --git a/internal-enrichment/greynoise/src/config.yml.sample b/internal-enrichment/greynoise/src/config.yml.sample index 1c6b4dd92c2..5ea033b24e6 100644 --- a/internal-enrichment/greynoise/src/config.yml.sample +++ b/internal-enrichment/greynoise/src/config.yml.sample @@ -5,7 +5,7 @@ opencti: connector: type: 'INTERNAL_ENRICHMENT' id: 'ChangeMe' - name: 'GreyNoise' + name: 'GreyNoise IP Enrichment' scope: 'IPv4-Addr' auto: true # Enable/disable auto-enrichment of observables log_level: 'error' @@ -13,4 +13,5 @@ connector: greynoise: key: 'ChangeMe' max_tlp: 'TLP:AMBER' - sighting_not_seen: false \ No newline at end of file + sighting_not_seen: false + no_sightings: false \ No newline at end of file diff --git a/internal-enrichment/greynoise/src/main.py b/internal-enrichment/greynoise/src/main.py index 12587a5241e..f730215ce71 100644 --- a/internal-enrichment/greynoise/src/main.py +++ b/internal-enrichment/greynoise/src/main.py @@ -1,4 +1,3 @@ -import json import os from datetime import datetime, timedelta from typing import Dict @@ -7,7 +6,8 @@ import stix2 import yaml from dateutil.parser import parse -from greynoise import GreyNoise +from greynoise.api import APIConfig, GreyNoise +from greynoise.exceptions import RequestFailure from pycti import ( Identity, Indicator, @@ -22,6 +22,8 @@ get_config_variable, ) +INTEGRATION_NAME = "opencti-enricher-v4.0" + class GreyNoiseConnector: def __init__(self): @@ -42,11 +44,17 @@ def __init__(self): self.sighting_not_seen = get_config_variable( "GREYNOISE_SIGHTING_NOT_SEEN", ["greynoise", "sighting_not_seen"], config ) + self.no_sightings = get_config_variable( + "GREYNOISE_NO_SIGHTINGS", + ["greynoise", "no_sightings"], + config, + default=False, + ) self.greynoise_ent_name = get_config_variable( "GREYNOISE_NAME", ["greynoise", "name"], config, - default="GreyNoise Internet Scanner", + default="GreyNoise Intelligence", ) self.greynoise_ent_desc = get_config_variable( "GREYNOISE_DESCRIPTION", @@ -81,85 +89,10 @@ def __init__(self): self.tlp = None self.stix_objects = [] - self.check_api_key(force_recheck=True) - - def check_api_key(self, force_recheck=False): - # Validate GreyNoise API Key - self.helper.log_debug("Validating GreyNoise API Key...") - try: - today = datetime.today().strftime("%Y-%m-%d") - - if os.path.exists("KEY_INFO"): - with open("KEY_INFO") as text_file: - key_info = text_file.read() - key_state = json.loads(key_info) - else: - empty_key_state = {"offering": "", "expiration": "", "last_checked": ""} - with open("KEY_INFO", "w") as text_file: - empty_key_state = json.dumps(empty_key_state) - print(f"{empty_key_state}", file=text_file) - key_state = json.loads(empty_key_state) - - if key_state.get("last_checked") != today or force_recheck: - session = GreyNoise( - api_key=self.greynoise_key, integration_name="opencti-enricher-v3.1" - ) - key_check = session.test_connection() - - key_state = { - "offering": key_check.get("offering"), - "expiration": key_check.get("expiration"), - "last_checked": today, - } - - if "offering" in key_check: - self.helper.log_info( - "GreyNoise API Key Status: " - + str(key_check.get("offering", "")) - + "/" - + str(key_check.get("expiration", "")) - ) - if key_check.get("offering") == "community_trial": - key_state["valid"] = True - self.helper.log_info("GreyNoise API key is valid!") - elif key_check.get("offering") == "community": - key_state["valid"] = False - self.helper.log_info( - "GreyNoise API key NOT valid! Update to use connector!" - ) - elif ( - key_check.get("offering") != "community" - and key_check.get("expiration") > today - ): - key_state["valid"] = True - self.helper.log_info("GreyNoise API key is valid!") - elif ( - key_check.get("offering") != "community" - and key_check.get("expiration") < today - ): - key_state["valid"] = False - - with open("KEY_INFO", "w") as text_file: - key_state = json.dumps(key_state) - print(f"{key_state}", file=text_file) - key_state = json.loads(key_state) - - return key_state.get("valid", False) - - except Exception as e: - self.helper.log_error( - "[API] GreyNoise API key is not valid or not supported for this integration. API " - "Response: " + str(e) - ) - raise Exception( - "[API] GreyNoise API key is not valid or not supported for this integration. API Response: " - + str(e) - ) - def _get_indicator_score(self, classification): if classification == "malicious": self.indicator_score = self.indicator_score_malicious - elif classification == "suspicious": + elif classification == "suspicious" or classification == "2": self.indicator_score = self.indicator_score_suspicious else: self.indicator_score = self.indicator_score_benign @@ -225,7 +158,7 @@ def _create_custom_label(self, name_label: str, color_label: str): """ new_custom_label = self.helper.api.label.read_or_create_unchecked( - value=name_label, color=color_label + value=name_label, color=color_label, createdBy=self.greynoise_identity["id"] ) if new_custom_label is None: self.helper.connector_logger.error( @@ -236,11 +169,7 @@ def _create_custom_label(self, name_label: str, color_label: str): else: self.all_labels.append(new_custom_label["value"]) - @staticmethod - def _get_match(data, key, value): - return next((x for x in data if x[key] == value), None) - - def _process_labels(self, data: dict, data_tags: dict) -> tuple: + def _process_labels(self, data: dict) -> tuple: """ This method allows you to start the process of creating labels and recovering associated malware. @@ -251,93 +180,97 @@ def _process_labels(self, data: dict, data_tags: dict) -> tuple: self.all_labels = [] all_malwares = [] - entity_tags = data["tags"] + entity_tags = data["internet_scanner_intelligence"].get("tags", []) - if data["classification"] == "benign": + if data["internet_scanner_intelligence"]["classification"] == "benign": # Create label GreyNoise "benign" self._create_custom_label("gn-classification: benign", "#06c93a") # Include additional label "benign-actor" - self._create_custom_label(f"gn-benign-actor: {data['actor']} ", "#06c93a") - - elif data["classification"] == "unknown": + self._create_custom_label( + f"gn-benign-actor: {data['internet_scanner_intelligence']['actor']} ", + "#06c93a", + ) + elif data["internet_scanner_intelligence"]["classification"] == "unknown": # Create label GreyNoise "unknown" self._create_custom_label("gn-classification: unknown", "#a6a09f") - - elif data["classification"] == "malicious": + elif data["internet_scanner_intelligence"]["classification"] == "malicious": # Create label GreyNoise "malicious" self._create_custom_label("gn-classification: malicious", "#ff8178") - - elif data["classification"] == "suspicious": + elif data["internet_scanner_intelligence"]["classification"] == "suspicious": # Create label GreyNoise "suspicious" self._create_custom_label("gn-classification: suspicious", "#e3d922") - if data["bot"] is True: + if data["business_service_intelligence"]["trust_level"] == "1": + # Create label GreyNoise "trust level 1" + self._create_custom_label("gn-trust-level: reasonably ignore", "#90D5FF") + # Include additional label "provider" + self._create_custom_label( + f"gn-provider: {data['business_service_intelligence']['name']} ", + "#90D5FF", + ) + elif data["business_service_intelligence"]["trust_level"] == "2": + # Create label GreyNoise "trust level 1" + self._create_custom_label("gn-trust-level: commonly seen", "#57B9FF") + # Include additional label "provider" + self._create_custom_label( + f"gn-provider: {data['business_service_intelligence']['name']} ", + "#57B9FF", + ) + + if data["internet_scanner_intelligence"]["bot"] is True: # Create label for "Known Bot Activity" self._create_custom_label("Known BOT Activity", "#7e4ec2") - if data["metadata"]["tor"] is True: + if data["internet_scanner_intelligence"]["tor"] is True: # Create label for "Known Tor Exit Node" self._create_custom_label("Known TOR Exit Node", "#7e4ec2") - if data["vpn"] is True: + if data["internet_scanner_intelligence"]["vpn"] is True: # Create label for "Known VPN" self._create_custom_label("Known VPN", "#7e4ec2") # Create all Labels in entity_tags for tag in entity_tags: - tag_details_matching = self._get_match(data_tags["metadata"], "name", tag) - if tag_details_matching is not None: - tag_details = tag_details_matching - else: - self.all_labels.append(tag) - continue - # Create red label when malicious intent and type not category worm and activity - if tag_details["intention"] == "malicious" and tag_details[ - "category" - ] not in ["worm"]: - self._create_custom_label(f"{tag}", "#ff8178") + if tag["intention"] == "malicious" and tag["category"] not in ["worm"]: + self._create_custom_label(f"{tag['name']}", "#ff8178") # If category is worm, prepare malware object - elif tag_details["category"] == "worm": + elif tag["category"] == "worm": malware_worm = { "name": f"{tag}", - "description": f"{tag_details['description']}", + "description": f"{tag['description']}", "type": "worm", } all_malwares.append(malware_worm) - self.all_labels.append(tag) + self.all_labels.append(tag["name"]) - elif tag_details["intention"] == "benign": + elif tag["intention"] == "benign": # Create green label for benign tags - self._create_custom_label(f"{tag_details['name']}", "#06c93a") - elif tag_details["intention"] == "suspicious": + self._create_custom_label(f"{tag['name']}", "#06c93a") + elif tag["intention"] == "suspicious": # Create yellow label for suspicious tags - self._create_custom_label(f"{tag_details['name']}", "#e3d922") + self._create_custom_label(f"{tag['name']}", "#e3d922") else: # Create white label otherwise - self._create_custom_label(f"{tag}", "#ffffff") + self._create_custom_label(f"{tag['name']}", "#ffffff") return self.all_labels, all_malwares - def _generate_stix_external_reference( - self, data: dict, sighting_not_seen: bool = False - ) -> list: + def _generate_stix_external_reference(self, data: dict) -> list: """ This method allows you to create an external reference in Stix2 format. :param data: A parameter that contains all the data about the IPv4 that was searched for in GreyNoise. - :param sighting_not_seen: This parameter is a boolean that corresponds to the configuration of - sighting_not_seen, which aims to know if the user wants to create a sighting at 0. :return: list -> ExternalReference (Stix2 format) """ - - description = ( - "This IP has not yet been identified by GreyNoise, meaning it has not been seen mass scanning " - "the internet nor does it belong to a business service that we monitor." - if sighting_not_seen is True - else f'[{data["metadata"]["country_code"]}] - {data["metadata"]["city"]}' - ) + description = "" + if data["internet_scanner_intelligence"]["found"] is True: + description = "This reference will direct to the GreyNoise Visualizer IP details page for an IP that has been seen mass scanning the internet." + elif data["business_service_intelligence"]["found"] is True: + description = "This reference will direct to the GreyNoise Visualizer IP details page for an IP that is part of a common business service." + else: + description = "This reference will direct to the GreyNoise Visualizer IP details page for an IP that has not yet been identified by GreyNoise, meaning it has not been seen mass scanning the internet nor does it belong to a business service that we monitor." # Generate ExternalReference external_reference = stix2.ExternalReference( @@ -372,22 +305,25 @@ def _generate_other_stix_identity_with_relationship(self, data: dict): :param data: A parameter that contains all the data about the IPv4 that was searched for in GreyNoise. """ - organization = data["metadata"]["organization"] - - # Generate other Identity - stix_organization = stix2.Identity( - id=Identity.generate_id(organization, "organization"), - name=organization, - identity_class="organization", - created_by_ref=self.greynoise_identity["id"], + organization = data["internet_scanner_intelligence"]["metadata"].get( + "organization", "" ) - self.stix_objects.append(stix_organization) - # Generate Relationship : Observable -> "related-to" -> Organization - observable_to_organization = self._generate_stix_relationship( - self.stix_entity["id"], "related-to", stix_organization.id - ) - self.stix_objects.append(observable_to_organization) + if organization != "": + # Generate other Identity + stix_organization = stix2.Identity( + id=Identity.generate_id(organization, "organization"), + name=organization, + identity_class="organization", + created_by_ref=self.greynoise_identity["id"], + ) + self.stix_objects.append(stix_organization) + + # Generate Relationship : Observable -> "related-to" -> Organization + observable_to_organization = self._generate_stix_relationship( + self.stix_entity["id"], "related-to", stix_organization.id + ) + self.stix_objects.append(observable_to_organization) def _generate_stix_asn_with_relationship(self, data: dict): """ @@ -399,24 +335,59 @@ def _generate_stix_asn_with_relationship(self, data: dict): """ # Generate Asn - entity_asn = data["metadata"]["asn"] - asn_number = int(data["metadata"]["asn"].replace("AS", "")) - stix_asn = stix2.AutonomousSystem( - type="autonomous-system", - number=asn_number, - name=entity_asn, - custom_properties={ - "created_by_ref": self.greynoise_identity["id"], - "x_opencti_score": self.indicator_score, - }, - ) - self.stix_objects.append(stix_asn) + entity_asn = data["internet_scanner_intelligence"]["metadata"].get("asn", "") + if entity_asn != "": + asn_number = int( + data["internet_scanner_intelligence"]["metadata"]["asn"].replace( + "AS", "" + ) + ) + stix_asn = stix2.AutonomousSystem( + type="autonomous-system", + number=asn_number, + name=entity_asn, + custom_properties={ + "created_by_ref": self.greynoise_identity["id"], + "x_opencti_score": self.indicator_score, + }, + ) + self.stix_objects.append(stix_asn) + + # Generate Relationship : observable -> "belongs-to" -> Asn + observable_to_asn = self._generate_stix_relationship( + self.stix_entity["id"], "belongs-to", stix_asn.id + ) + self.stix_objects.append(observable_to_asn) + + def _generate_stix_domain_with_relationship(self, data: dict): + """ + This method creates and adds a bundle to "self.stix_objects" the IPv4 associated "Domain" + provided by GreyNoise in Stix2 format, + + - Relationship : observable -> "related-to" -> Domain. + :param data: A parameter that contains all the data about the IPv4 that was searched for in GreyNoise. + """ - # Generate Relationship : observable -> "belongs-to" -> Asn - observable_to_asn = self._generate_stix_relationship( - self.stix_entity["id"], "belongs-to", stix_asn.id + # Generate Asn + entity_domain = data["internet_scanner_intelligence"]["metadata"].get( + "rdns", "" ) - self.stix_objects.append(observable_to_asn) + if entity_domain != "": + stix_domain = stix2.DomainName( + type="domain-name", + value=entity_domain, + custom_properties={ + "created_by_ref": self.greynoise_identity["id"], + "x_opencti_score": self.indicator_score, + }, + ) + self.stix_objects.append(stix_domain) + + # Generate Relationship : observable -> "resolves-to" -> Domain + domain_to_observable = self._generate_stix_relationship( + stix_domain.id, "resolves-to", self.stix_entity["id"] + ) + self.stix_objects.append(domain_to_observable) def _generate_stix_location_with_relationship(self, data: dict): """ @@ -427,43 +398,57 @@ def _generate_stix_location_with_relationship(self, data: dict): :param data: A parameter that contains all the data about the IPv4 that was searched for in GreyNoise. """ - country = pycountry.countries.get(alpha_2=data["metadata"]["country_code"]) - country_name = ( - country.official_name if hasattr(country, "official_name") else country.name - ) - - # Generate City Location - stix_city_location = stix2.Location( - id=Location.generate_id(data["metadata"]["city"], "City"), - name=data["metadata"]["city"], - country=country_name, - custom_properties={"x_opencti_location_type": "City"}, - ) - self.stix_objects.append(stix_city_location) + if data["internet_scanner_intelligence"]["found"] is True: + country = pycountry.countries.get( + alpha_2=data["internet_scanner_intelligence"]["metadata"][ + "source_country_code" + ] + ) + country_name = ( + country.official_name + if hasattr(country, "official_name") + else country.name + ) - # Generate Relationship : observable -> "located-at" -> city - observable_to_city = self._generate_stix_relationship( - self.stix_entity["id"], "located-at", stix_city_location.id - ) - self.stix_objects.append(observable_to_city) + # Generate City Location + stix_city_location = stix2.Location( + id=Location.generate_id( + data["internet_scanner_intelligence"]["metadata"]["source_city"], + "City", + ), + name=data["internet_scanner_intelligence"]["metadata"]["source_city"], + country=country_name, + custom_properties={"x_opencti_location_type": "City"}, + ) + self.stix_objects.append(stix_city_location) - # Generate Country Location - stix_country_location = stix2.Location( - id=Location.generate_id(country.name, "Country"), - name=country_name, - country=country_name, - custom_properties={ - "x_opencti_location_type": "Country", - "x_opencti_aliases": [data["metadata"]["country_code"]], - }, - ) - self.stix_objects.append(stix_country_location) + # Generate Relationship : observable -> "located-at" -> city + observable_to_city = self._generate_stix_relationship( + self.stix_entity["id"], "located-at", stix_city_location.id + ) + self.stix_objects.append(observable_to_city) + + # Generate Country Location + stix_country_location = stix2.Location( + id=Location.generate_id(country.name, "Country"), + name=country_name, + country=country_name, + custom_properties={ + "x_opencti_location_type": "Country", + "x_opencti_aliases": [ + data["internet_scanner_intelligence"]["metadata"][ + "source_country_code" + ] + ], + }, + ) + self.stix_objects.append(stix_country_location) - # Generate Relationship : city -> "located-at" -> country - city_to_country = self._generate_stix_relationship( - stix_city_location.id, "located-at", stix_country_location.id - ) - self.stix_objects.append(city_to_country) + # Generate Relationship : city -> "located-at" -> country + city_to_country = self._generate_stix_relationship( + stix_city_location.id, "located-at", stix_country_location.id + ) + self.stix_objects.append(city_to_country) def _generate_stix_vulnerability_with_relationship(self, data: dict): """ @@ -474,8 +459,11 @@ def _generate_stix_vulnerability_with_relationship(self, data: dict): :param data: A parameter that contains all the data about the IPv4 that was searched for in GreyNoise. """ - if "cve" in data: - entity_vulns = data["cve"] + if ( + "cves" in data["internet_scanner_intelligence"] + and data["internet_scanner_intelligence"].get("cves", []) is not [] + ): + entity_vulns = data["internet_scanner_intelligence"]["cves"] for vuln in entity_vulns: # Generate Vulnerability stix_vulnerability = stix2.Vulnerability( @@ -505,14 +493,20 @@ def _generate_stix_tool_with_relationship(self, data: dict): :param data: A parameter that contains all the data about the IPv4 that was searched for in GreyNoise. """ - if data["vpn"] is True: + if data["internet_scanner_intelligence"]["vpn"] is True: # Generate Tool stix_tool = stix2.Tool( - id=Tool.generate_id(f"VPN: {data['vpn_service']}"), - name=f"VPN: {data['vpn_service']}", + id=Tool.generate_id( + f"VPN: {data['internet_scanner_intelligence']['vpn_service']}" + ), + name=f"VPN: {data['internet_scanner_intelligence']['vpn_service']}", labels=["tool"], created_by_ref=self.greynoise_identity["id"], - custom_properties={"x_opencti_aliases": data["vpn_service"]}, + custom_properties={ + "x_opencti_aliases": data["internet_scanner_intelligence"][ + "vpn_service" + ] + }, allow_custom=True, ) self.stix_objects.append(stix_tool) @@ -646,14 +640,17 @@ def _generate_stix_threat_actor_with_relationship(self, data: dict): # Create threat actor for non-benign when known if ( - data["actor"] - and data["actor"] != "unknown" - and data["classification"] != "benign" + data["internet_scanner_intelligence"]["actor"] + and data["internet_scanner_intelligence"]["actor"] != "unknown" + and data["internet_scanner_intelligence"]["actor"] != "" + and data["internet_scanner_intelligence"]["classification"] != "benign" ): # Generate Threat Actor stix_threat_actor = stix2.ThreatActor( - id=ThreatActorGroup.generate_id(data["actor"]), - name=data["actor"], + id=ThreatActorGroup.generate_id( + data["internet_scanner_intelligence"]["actor"] + ), + name=data["internet_scanner_intelligence"]["actor"], created_by_ref=self.greynoise_identity["id"], ) self.stix_objects.append(stix_threat_actor) @@ -683,6 +680,15 @@ def _generate_stix_indicator_with_relationship( :return: dict """ + if self.sighting_not_seen is True: + self.indicator_score = 0 + + description = ( + "Internet Scanning IP detected by GreyNoise with classification `" + + data["internet_scanner_intelligence"]["classification"] + + "`." + ) + # Generate Indicator stix_indicator = stix2.Indicator( id=Indicator.generate_id(data["ip"]), @@ -691,6 +697,7 @@ def _generate_stix_indicator_with_relationship( pattern=f"[ipv4-addr:value = '{data['ip']}']", created_by_ref=self.greynoise_identity["id"], external_references=external_reference, + description=description, custom_properties={ "pattern_type": "stix", "x_opencti_score": self.indicator_score, @@ -709,7 +716,7 @@ def _generate_stix_indicator_with_relationship( return stix_indicator def _generate_stix_observable( - self, detection: bool, external_reference: list, labels: list = None + self, data: dict, detection: bool, external_reference: list, labels: list = None ): """ This method creates and adds a bundle to "self.stix_objects" the IPv4 associated "Observable" @@ -720,6 +727,12 @@ def _generate_stix_observable( :param labels: This parameter contains a list of all labels associated with the IPv4. """ + description = ( + "Internet Scanning IP detected by GreyNoise with classification `" + + data["internet_scanner_intelligence"]["classification"] + + "`." + ) + # Generate Observable stix_observable = stix2.IPv4Address( id=self.stix_entity["id"], @@ -730,13 +743,12 @@ def _generate_stix_observable( "x_opencti_score": self.indicator_score, "x_opencti_labels": labels if detection is True else [], "x_opencti_created_by_ref": self.greynoise_identity["id"], + "x_opencti_description": description, }, ) self.stix_objects.append(stix_observable) - def _generate_stix_bundle( - self, data: dict, data_tags: dict, stix_entity: dict - ) -> str: + def _generate_stix_bundle(self, data: dict, stix_entity: dict) -> str: """ This method create a bundle in Stix2 format. @@ -749,7 +761,11 @@ def _generate_stix_bundle( self.stix_entity = stix_entity self._generate_greynoise_stix_identity() - if data["seen"] is False and self.sighting_not_seen is True: + if ( + data["internet_scanner_intelligence"]["found"] is False + and data["business_service_intelligence"]["found"] is False + and self.sighting_not_seen is True + ): """ If the IP has not been identified by GreyNoise, but the user still wants to create a sighting at count=0, they can do so by setting the sighting_not_seen variable to "true", in this case we create an external @@ -764,13 +780,16 @@ def _generate_stix_bundle( }, ) - external_reference = self._generate_stix_external_reference(data, True) + external_reference = self._generate_stix_external_reference(data) stix_indicator = self._generate_stix_indicator_with_relationship( data, False, external_reference ) + self.all_labels = [] + self._create_custom_label("greynoise: not observed", "#ffffff") - self._generate_stix_observable(False, external_reference) - self._generate_stix_sighting(external_reference, stix_indicator, True) + self._generate_stix_observable(True, external_reference, self.all_labels) + if not self.no_sightings: + self._generate_stix_sighting(external_reference, stix_indicator, True) else: self.helper.connector_logger.info( @@ -778,24 +797,39 @@ def _generate_stix_bundle( {"IPv4": stix_entity["value"]}, ) - if "first_seen" in data and data["first_seen"]: - self.first_seen = parse(data["first_seen"]).strftime( - "%Y-%m-%dT%H:%M:%SZ" + if data["internet_scanner_intelligence"]["found"] is True: + self.last_seen = parse( + data["internet_scanner_intelligence"]["last_seen_timestamp"] + ).strftime("%Y-%m-%dT%H:%M:%SZ") + self._get_indicator_score( + data["internet_scanner_intelligence"].get( + "classification", "unknown" + ) ) - self.last_seen = parse(data["last_seen"]).strftime("%Y-%m-%dT%H:%M:%SZ") else: - self.first_seen = parse(data["last_seen"]).strftime( - "%Y-%m-%dT%H:%M:%SZ" + self.last_seen = parse( + data["business_service_intelligence"]["last_updated"] + ).strftime("%Y-%m-%dT%H:%M:%SZ") + self._get_indicator_score( + data["business_service_intelligence"].get("trust_level", "2") ) - self.last_seen = datetime.strptime( - data["last_seen"], "%Y-%m-%d" + + if ( + "first_seen" in data["internet_scanner_intelligence"] + and data["internet_scanner_intelligence"]["first_seen"] != "" + ): + self.first_seen = parse( + data["internet_scanner_intelligence"]["first_seen"] + ).strftime("%Y-%m-%dT%H:%M:%SZ") + else: + self.first_seen = self.last_seen + self.last_seen = datetime.fromisoformat( + self.last_seen.replace("Z", "+00:00") ) + timedelta(hours=23) self.last_seen = self.last_seen.strftime("%Y-%m-%dT%H:%M:%SZ") - self._get_indicator_score(data.get("classification", "unknown")) - # Generate Stix Object for bundle - labels, malwares = self._process_labels(data, data_tags) + labels, malwares = self._process_labels(data) external_reference = self._generate_stix_external_reference(data) stix_indicator = self._generate_stix_indicator_with_relationship( data, True, external_reference, labels @@ -803,13 +837,15 @@ def _generate_stix_bundle( self._generate_other_stix_identity_with_relationship(data) self._generate_stix_asn_with_relationship(data) + self._generate_stix_domain_with_relationship(data) self._generate_stix_location_with_relationship(data) # City + Country self._generate_stix_vulnerability_with_relationship(data) self._generate_stix_tool_with_relationship(data) self._generate_stix_malware_with_relationship(malwares) self._generate_stix_threat_actor_with_relationship(data) - self._generate_stix_observable(True, external_reference, labels) - self._generate_stix_sighting(external_reference, stix_indicator, False) + self._generate_stix_observable(data, True, external_reference, labels) + if not self.no_sightings: + self._generate_stix_sighting(external_reference, stix_indicator, False) uniq_bundles_objects = list( {obj["id"]: obj for obj in self.stix_objects}.values() @@ -832,14 +868,6 @@ def _process_message(self, data: Dict) -> str: entity_splited = data["entity_id"].split("--") entity_type = entity_splited[0].lower() - if not self.check_api_key(): - self.helper.log_error( - "GreyNoise API Key is NOT valid. Update to Enterprise API key to use this connector." - ) - raise ValueError( - "GreyNoise API Key is NOT valid. Update to Enterprise API key to use this connector." - ) - if entity_type in scopes: # OpenCTI entity information retrieval stix_entity = data["stix_entity"] @@ -857,32 +885,27 @@ def _process_message(self, data: Dict) -> str: opencti_entity_value = stix_entity["value"] try: - # Get "IP Context" GreyNoise API Response - # https://docs.greynoise.io/reference/noisecontextip-1 - session = GreyNoise( - api_key=self.greynoise_key, integration_name="opencti-enricher-v3.1" + # Get "IP Lookup" GreyNoise API Response + # https://docs.greynoise.io/reference/v3ip#/ + api_config = APIConfig( + api_key=self.greynoise_key, integration_name=INTEGRATION_NAME ) + session = GreyNoise(api_config) json_data = session.ip(opencti_entity_value) if ( - "seen" in json_data - and json_data["seen"] is False + "found" in json_data["internet_scanner_intelligence"] + and json_data["internet_scanner_intelligence"]["found"] is False + and json_data["business_service_intelligence"]["found"] is False and self.sighting_not_seen is False ): raise ValueError( "[API] This IP has not yet been identified by GreyNoise" ) - # Get "Tag Metadata" Greynoise API Response - # https://docs.greynoise.io/reference/metadata-3 - - json_data_tags = session.metadata() - # Generate a stix bundle - stix_bundle = self._generate_stix_bundle( - json_data, json_data_tags, stix_entity - ) + stix_bundle = self._generate_stix_bundle(json_data, stix_entity) # Send stix2 bundle bundles_sent = self.helper.send_stix2_bundle(stix_bundle) @@ -892,10 +915,29 @@ def _process_message(self, data: Dict) -> str: + " stix bundle(s) for worker import" ) + except RequestFailure as e: + error_msg = str(e) + # Check if this is a rate limit (429) error + if "429" in error_msg or "too many" in error_msg.lower(): + self.helper.connector_logger.warning( + "[RATE LIMIT] GreyNoise API rate limit exceeded, will retry later", + {"ip": opencti_entity_value, "error": error_msg}, + ) + # Return a message instead of raising - allows retry + return ( + "[RATE LIMIT] API rate limit exceeded, message will be retried" + ) + else: + # For other API request failures, raise as before + raise ValueError( + "[ERROR] GreyNoise API Request Failed:", + {"Exception": error_msg}, + ) + except Exception as e: # Handling other unexpected exceptions raise ValueError( - "[ERROR] Unexpected Error occurred :", {"Exception": str(e)} + "[ERROR] Unexpected Error occurred:", {"Exception": str(e)} ) else: return self.helper.connector_logger.info( diff --git a/internal-enrichment/greynoise/src/requirements.txt b/internal-enrichment/greynoise/src/requirements.txt index 7357575b2e7..051ee082842 100644 --- a/internal-enrichment/greynoise/src/requirements.txt +++ b/internal-enrichment/greynoise/src/requirements.txt @@ -1,3 +1,3 @@ -pycti==7.260309.0 +pycti==7.260515.0 pycountry==24.6.1 -greynoise==2.3.0 \ No newline at end of file +greynoise==3.0.1 \ No newline at end of file diff --git a/internal-enrichment/hatching-triage-sandbox/src/requirements.txt b/internal-enrichment/hatching-triage-sandbox/src/requirements.txt index 7962c229a67..787e6978f1a 100644 --- a/internal-enrichment/hatching-triage-sandbox/src/requirements.txt +++ b/internal-enrichment/hatching-triage-sandbox/src/requirements.txt @@ -1,2 +1,2 @@ -pycti==7.260309.0 +pycti==7.260515.0 git+https://github.com/hatching/triage.git#subdirectory=python diff --git a/internal-enrichment/hostio/README.md b/internal-enrichment/hostio/README.md index ed1c2fc1b37..0b0aa918ea3 100644 --- a/internal-enrichment/hostio/README.md +++ b/internal-enrichment/hostio/README.md @@ -45,7 +45,7 @@ This internal enrichment connector enriches IP addresses and domain names using ### Requirements -- OpenCTI Platform >= 7.260309.0 +- OpenCTI Platform >= 7.260515.0 - Host.io/IPinfo API token - Network access to Host.io and IPinfo APIs diff --git a/internal-enrichment/hostio/src/requirements.txt b/internal-enrichment/hostio/src/requirements.txt index 05cb53ce1b3..bc097fead76 100644 --- a/internal-enrichment/hostio/src/requirements.txt +++ b/internal-enrichment/hostio/src/requirements.txt @@ -1,4 +1,4 @@ -pycti==7.260309.0 +pycti==7.260515.0 countryinfo validators ipinfo diff --git a/internal-enrichment/hybrid-analysis-sandbox/src/requirements.txt b/internal-enrichment/hybrid-analysis-sandbox/src/requirements.txt index e1e0bd9718c..e3a19393203 100644 --- a/internal-enrichment/hybrid-analysis-sandbox/src/requirements.txt +++ b/internal-enrichment/hybrid-analysis-sandbox/src/requirements.txt @@ -1 +1 @@ -pycti==7.260309.0 +pycti==7.260515.0 diff --git a/internal-enrichment/hygiene/src/requirements.txt b/internal-enrichment/hygiene/src/requirements.txt index 3d118256a25..26b87fea955 100644 --- a/internal-enrichment/hygiene/src/requirements.txt +++ b/internal-enrichment/hygiene/src/requirements.txt @@ -1,5 +1,5 @@ tldextract==5.3.0 -pycti==7.260309.0 +pycti==7.260515.0 pydantic>=2.10, <3 pydantic-settings==2.10.1 git+http://github.com/MISP/PyMISPWarningLists.git@main#egg=pymispwarninglists diff --git a/internal-enrichment/hygiene/tests/test-requirements.txt b/internal-enrichment/hygiene/tests/test-requirements.txt index 5515967f9ea..e7c05dec5d1 100644 --- a/internal-enrichment/hygiene/tests/test-requirements.txt +++ b/internal-enrichment/hygiene/tests/test-requirements.txt @@ -1,3 +1,3 @@ -r ../src/requirements.txt -pytest==8.3.5 +pytest==9.0.3 pytest-mock==3.14.0 \ No newline at end of file diff --git a/internal-enrichment/import-external-reference/.build.env b/internal-enrichment/import-external-reference/.build.env new file mode 100644 index 00000000000..4e5adef2be7 --- /dev/null +++ b/internal-enrichment/import-external-reference/.build.env @@ -0,0 +1,4 @@ +EXTRA_PACKAGES="pango cairo gdk-pixbuf2 libffi nss atk at-spi2-atk cups-libs libdrm libxkbcommon libXcomposite libXdamage libXrandr libgbm alsa-lib gtk3 file-libs" +CONNECTOR_CMD="import-external-reference.py" +POST_INSTALL="playwright install chromium --only-shell" + diff --git a/internal-enrichment/import-external-reference/src/requirements.txt b/internal-enrichment/import-external-reference/src/requirements.txt index 98763e561d1..3897ae51ebf 100644 --- a/internal-enrichment/import-external-reference/src/requirements.txt +++ b/internal-enrichment/import-external-reference/src/requirements.txt @@ -1,4 +1,4 @@ -pycti==7.260309.0 +pycti==7.260515.0 weasyprint==66.0 html2text==2025.4.15 pdfminer.six==20251107 diff --git a/internal-enrichment/intezer-sandbox/src/requirements.txt b/internal-enrichment/intezer-sandbox/src/requirements.txt index e1e0bd9718c..e3a19393203 100644 --- a/internal-enrichment/intezer-sandbox/src/requirements.txt +++ b/internal-enrichment/intezer-sandbox/src/requirements.txt @@ -1 +1 @@ -pycti==7.260309.0 +pycti==7.260515.0 diff --git a/internal-enrichment/ipinfo/.build.env b/internal-enrichment/ipinfo/.build.env new file mode 100644 index 00000000000..56e5bc4f685 --- /dev/null +++ b/internal-enrichment/ipinfo/.build.env @@ -0,0 +1,3 @@ +CONNECTOR_CMD="-m src" +CONNECTOR_WORKDIR="/opt/connector" + diff --git a/internal-enrichment/ipinfo/src/requirements.txt b/internal-enrichment/ipinfo/src/requirements.txt index 9ffe898d8bd..d804ee7de93 100644 --- a/internal-enrichment/ipinfo/src/requirements.txt +++ b/internal-enrichment/ipinfo/src/requirements.txt @@ -1,4 +1,4 @@ -pycti==7.260309.0 +pycti==7.260515.0 pycountry==24.6.1 pydantic>=2.10, <3 pydantic-settings==2.10.1 diff --git a/internal-enrichment/ipqs/src/requirements.txt b/internal-enrichment/ipqs/src/requirements.txt index e1e0bd9718c..e3a19393203 100644 --- a/internal-enrichment/ipqs/src/requirements.txt +++ b/internal-enrichment/ipqs/src/requirements.txt @@ -1 +1 @@ -pycti==7.260309.0 +pycti==7.260515.0 diff --git a/internal-enrichment/ismalicious/src/requirements.txt b/internal-enrichment/ismalicious/src/requirements.txt index fd65519608e..03869500438 100644 --- a/internal-enrichment/ismalicious/src/requirements.txt +++ b/internal-enrichment/ismalicious/src/requirements.txt @@ -1,5 +1,5 @@ -pycti==7.260309.0 +pycti==7.260515.0 stix2>=3.0.0 pydantic>=2.0.0 PyYAML>=6.0 -requests>=2.31.0 +requests>=2.31.0,<=2.33.0 diff --git a/internal-enrichment/ivre/src/requirements.txt b/internal-enrichment/ivre/src/requirements.txt index 989919f6d47..92234b69033 100644 --- a/internal-enrichment/ivre/src/requirements.txt +++ b/internal-enrichment/ivre/src/requirements.txt @@ -1,3 +1,3 @@ git+https://github.com/ivre/ivre -pycti==7.260309.0 +pycti==7.260515.0 PyYAML diff --git a/internal-enrichment/joe-sandbox/src/requirements.txt b/internal-enrichment/joe-sandbox/src/requirements.txt index c329597035a..0b74202b311 100644 --- a/internal-enrichment/joe-sandbox/src/requirements.txt +++ b/internal-enrichment/joe-sandbox/src/requirements.txt @@ -1,2 +1,2 @@ -pycti==7.260309.0 +pycti==7.260515.0 jbxapi==3.24.0 diff --git a/internal-enrichment/kaspersky-enrichment/README.md b/internal-enrichment/kaspersky-enrichment/README.md index 7b6f50e8813..95b3c5762ee 100644 --- a/internal-enrichment/kaspersky-enrichment/README.md +++ b/internal-enrichment/kaspersky-enrichment/README.md @@ -44,7 +44,7 @@ Key features: ### Requirements -- OpenCTI Platform >= 7.260309.0 +- OpenCTI Platform >= 7.260515.0 - Kaspersky TIP API key - Network access to Kaspersky TIP API diff --git a/internal-enrichment/kaspersky-enrichment/src/requirements.txt b/internal-enrichment/kaspersky-enrichment/src/requirements.txt index 87579b456f4..36375a213cb 100644 --- a/internal-enrichment/kaspersky-enrichment/src/requirements.txt +++ b/internal-enrichment/kaspersky-enrichment/src/requirements.txt @@ -1,6 +1,6 @@ -pycti==7.260309.0 +pycti==7.260515.0 pydantic~= 2.11.3 pydantic-settings==2.11.0 -requests~=2.32.3 +requests~=2.33.0 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk validators diff --git a/internal-enrichment/kaspersky-enrichment/tests/test-requirements.txt b/internal-enrichment/kaspersky-enrichment/tests/test-requirements.txt index bdef682113c..d405632324b 100644 --- a/internal-enrichment/kaspersky-enrichment/tests/test-requirements.txt +++ b/internal-enrichment/kaspersky-enrichment/tests/test-requirements.txt @@ -1,2 +1,2 @@ -r ../src/requirements.txt -pytest==8.4.2 +pytest==9.0.3 diff --git a/internal-enrichment/lastinfosec/src/requirements.txt b/internal-enrichment/lastinfosec/src/requirements.txt index e1e0bd9718c..e3a19393203 100644 --- a/internal-enrichment/lastinfosec/src/requirements.txt +++ b/internal-enrichment/lastinfosec/src/requirements.txt @@ -1 +1 @@ -pycti==7.260309.0 +pycti==7.260515.0 diff --git a/internal-enrichment/malbeacon/src/requirements.txt b/internal-enrichment/malbeacon/src/requirements.txt index 48ab9496740..fcab4687cd8 100644 --- a/internal-enrichment/malbeacon/src/requirements.txt +++ b/internal-enrichment/malbeacon/src/requirements.txt @@ -1,4 +1,4 @@ -pycti==7.260309.0 +pycti==7.260515.0 pydantic>=2.8.2,<3.0.0 -urllib3==2.6.3 +urllib3==2.7.0 validators==0.35.0 diff --git a/internal-enrichment/onyphe/README.md b/internal-enrichment/onyphe/README.md index 695cf560feb..45e42fddb20 100644 --- a/internal-enrichment/onyphe/README.md +++ b/internal-enrichment/onyphe/README.md @@ -15,6 +15,7 @@ - [ONYPHE Configuration](#onyphe-configuration) - [Deployment](#deployment) - [Docker Deployment](#docker-deployment) + - [Multiple Instances](#multiple-instances) - [Manual Deployment](#manual-deployment) - [Usage](#usage) - [Behavior](#behavior) @@ -23,6 +24,13 @@ - [Indicator Enrichment](#indicator-enrichment) - [Generated STIX Objects](#generated-stix-objects) - [Warnings](#warnings) + - [Import Full Data](#import-full-data) + - [Pivot Threshold](#pivot-threshold) + - [Indicator Max Results](#indicator-max-results) + - [Enrichment Types](#enrichment-types) + - [Text Fingerprints](#text-fingerprints) + - [Note Behaviour](#note-behaviour) + - [Auto Enrichment](#auto-enrichment) - [Debugging](#debugging) - [Additional Information](#additional-information) @@ -32,12 +40,12 @@ [ONYPHE](https://www.onyphe.io/) is a cyber defense search engine that collects open-source and cyber threat intelligence data by crawling the Internet. This connector enriches observables and indicators with comprehensive network intelligence. -Key features: -- IP address enrichment with organization, geolocation, ASN, and related infrastructure -- Domain and hostname enrichment -- X509 certificate analysis -- Text analytical pivots -- Indicator pattern search with detailed notes +The connector supports multiple [ONYPHE data categories](https://search.onyphe.io/docs/data-models/) through a single codebase. Each deployed instance is configured for a specific category, enabling distinct use cases on the same OpenCTI platform: + +| Category | Use case | Key output | +|----------|----------|------------| +| `ctiscan` (default) | Threat intelligence enrichment | IP, hostname, certificate, fingerprint observables | +| `riskscan` | Attack surface management | IP, hostname, vulnerabilities (CVEs), risk labels | --- @@ -64,9 +72,9 @@ Key features: | Parameter | Docker envvar | Mandatory | Description | |-----------|---------------|-----------|-------------| -| `connector_id` | `CONNECTOR_ID` | Yes | A valid arbitrary `UUIDv4` unique for this connector | -| `connector_name` | `CONNECTOR_NAME` | Yes | The name of the connector instance | -| `connector_scope` | `CONNECTOR_SCOPE` | Yes | Supported: `IPv4-Addr,IPv6-Addr,x509-certificate,Hostname,Text,Indicator` | +| `connector_id` | `CONNECTOR_ID` | Yes | A valid arbitrary `UUIDv4` — must be unique per instance | +| `connector_name` | `CONNECTOR_NAME` | Yes | Display name in OpenCTI — use distinct names per instance | +| `connector_scope` | `CONNECTOR_SCOPE` | Yes | See per-category scope below | | `connector_auto` | `CONNECTOR_AUTO` | Yes | Enable/disable auto-enrichment | | `connector_confidence_level` | `CONNECTOR_CONFIDENCE_LEVEL` | Yes | Default confidence level (0-100) | | `connector_log_level` | `CONNECTOR_LOG_LEVEL` | Yes | Log level (`debug`, `info`, `warn`, `error`) | @@ -76,14 +84,26 @@ Key features: | Parameter | Docker envvar | Mandatory | Description | |-----------|---------------|-----------|-------------| | `onyphe_api_key` | `ONYPHE_API_KEY` | Yes | ONYPHE API key | -| `onyphe_base_url` | `ONYPHE_BASE_URL` | No | API base URL | -| `onyphe_max_tlp` | `ONYPHE_MAX_TLP` | No | Maximum TLP for enrichment | -| `onyphe_time_since` | `ONYPHE_TIME_SINCE` | No | Time window for data retrieval | -| `onyphe_default_score` | `ONYPHE_DEFAULT_SCORE` | No | Default score for created indicators | -| `onyphe_import_search_results` | `ONYPHE_IMPORT_SEARCH_RESULTS` | No | Import search results | -| `onyphe_create_note` | `ONYPHE_CREATE_NOTE` | No | Create notes for enrichment | -| `onyphe_import_full_data` | `ONYPHE_IMPORT_FULL_DATA` | No | Import full data (see warnings) | -| `onyphe_pivot_threshold` | `ONYPHE_PIVOT_THRESHOLD` | No | Threshold for pivot operations | +| `onyphe_category` | `ONYPHE_CATEGORY` | No | Data category: `ctiscan` (default) or `riskscan` | +| `onyphe_base_url` | `ONYPHE_BASE_URL` | No | API base URL (default: `https://www.onyphe.io/api/v2/`) | +| `onyphe_max_tlp` | `ONYPHE_MAX_TLP` | No | Maximum TLP for enrichment (default: `TLP:AMBER`) | +| `onyphe_time_since` | `ONYPHE_TIME_SINCE` | No | Time window for data retrieval (default: `1w`) | +| `onyphe_default_score` | `ONYPHE_DEFAULT_SCORE` | No | Default score for created observables (default: `50`) | +| `onyphe_import_search_results` | `ONYPHE_IMPORT_SEARCH_RESULTS` | No | Import results as observables for indicator enrichment (default: `true`) | +| `onyphe_create_note` | `ONYPHE_CREATE_NOTE` | No | Attach enrichment summary as a Note on observables (default: `false`) | +| `onyphe_import_full_data` | `ONYPHE_IMPORT_FULL_DATA` | No | Import full raw response text — can produce large data (default: `false`) | +| `onyphe_pivot_threshold` | `ONYPHE_PIVOT_THRESHOLD` | No | Skip observable enrichment if result count exceeds this (default: `10`) | +| `onyphe_indicator_max_results` | `ONYPHE_INDICATOR_MAX_RESULTS` | No | Maximum results to fetch when enriching an indicator. If the first page reveals more total results than this, the query is considered too imprecise and no results are imported (default: `1000`) | +| `onyphe_pattern_type` | `ONYPHE_PATTERN_TYPE` | No | Vocabulary entry for ONYPHE indicator pattern type (default: `onyphe`) | +| `onyphe_enrichment_types` | `ONYPHE_ENRICHMENT_TYPES` | No | Comma-separated list of OpenCTI object types to create during enrichment. Leave empty to create all types (default). See [Enrichment Types](#enrichment-types) for valid values. | +| `onyphe_text_fingerprints` | `ONYPHE_TEXT_FINGERPRINTS` | No | Comma-separated list of fingerprint pivot labels controlling which ONYPHE hash fields are created as Text observables. Leave empty to use the default sha256-preferred set. See [Text Fingerprints](#text-fingerprints) for valid values. | + +#### Connector scope by category + +| Category | `CONNECTOR_SCOPE` | +|----------|-------------------| +| `ctiscan` | `IPv4-Addr,IPv6-Addr,Domain-Name,Hostname,x509-Certificate,Text,Indicator` | +| `riskscan` | `IPv4-Addr,IPv6-Addr,Domain-Name,Hostname,x509-Certificate,Indicator` | --- @@ -91,9 +111,9 @@ Key features: ### Docker Deployment -Build a Docker Image using the provided `Dockerfile`. +Build a Docker image using the provided `Dockerfile`. -Example `docker-compose.yml`: +**Single instance (ctiscan, default behaviour):** ```yaml version: '3' @@ -105,7 +125,7 @@ services: - OPENCTI_TOKEN=ChangeMe - CONNECTOR_ID=ChangeMe - CONNECTOR_NAME=ONYPHE - - CONNECTOR_SCOPE=IPv4-Addr,IPv6-Addr,x509-certificate,Hostname,Text,Indicator + - CONNECTOR_SCOPE=IPv4-Addr,IPv6-Addr,Domain-Name,Hostname,x509-Certificate,Text,Indicator - CONNECTOR_AUTO=false - CONNECTOR_CONFIDENCE_LEVEL=50 - CONNECTOR_LOG_LEVEL=error @@ -116,23 +136,87 @@ services: - ONYPHE_CREATE_NOTE=true - ONYPHE_IMPORT_FULL_DATA=false - ONYPHE_PIVOT_THRESHOLD=100 + - ONYPHE_INDICATOR_MAX_RESULTS=1000 + restart: always +``` + +### Multiple Instances + +Running multiple instances of the same Docker image with different `ONYPHE_CATEGORY` values lets you serve distinct use cases on the same OpenCTI platform. Each instance must have a unique `CONNECTOR_ID` and a distinct `CONNECTOR_NAME` so OpenCTI registers them separately. + +**Example: CTI enrichment and ASM side by side:** + +```yaml +version: '3' +services: + + # Threat intelligence enrichment — uses ONYPHE ctiscan category + connector-onyphe-cti: + image: opencti/connector-onyphe:latest + environment: + - OPENCTI_URL=http://localhost + - OPENCTI_TOKEN=ChangeMe + - CONNECTOR_ID=00000000-0000-0000-0000-000000000001 # unique UUIDv4 + - CONNECTOR_NAME=ONYPHE CTI + - CONNECTOR_SCOPE=IPv4-Addr,IPv6-Addr,Domain-Name,Hostname,x509-Certificate,Text,Indicator + - CONNECTOR_AUTO=false + - CONNECTOR_CONFIDENCE_LEVEL=50 + - CONNECTOR_LOG_LEVEL=error + - ONYPHE_API_KEY=ChangeMe + - ONYPHE_CATEGORY=ctiscan + - ONYPHE_MAX_TLP=TLP:AMBER + - ONYPHE_DEFAULT_SCORE=50 + - ONYPHE_IMPORT_SEARCH_RESULTS=true + - ONYPHE_PIVOT_THRESHOLD=100 + - ONYPHE_INDICATOR_MAX_RESULTS=1000 + restart: always + + # Attack surface management — uses ONYPHE riskscan category + connector-onyphe-asm: + image: opencti/connector-onyphe:latest + environment: + - OPENCTI_URL=http://localhost + - OPENCTI_TOKEN=ChangeMe + - CONNECTOR_ID=00000000-0000-0000-0000-000000000002 # unique UUIDv4 + - CONNECTOR_NAME=ONYPHE ASM + - CONNECTOR_SCOPE=IPv4-Addr,IPv6-Addr,Domain-Name,Hostname,x509-Certificate,Indicator + - CONNECTOR_AUTO=false + - CONNECTOR_CONFIDENCE_LEVEL=50 + - CONNECTOR_LOG_LEVEL=error + - ONYPHE_API_KEY=ChangeMe + - ONYPHE_CATEGORY=riskscan + - ONYPHE_MAX_TLP=TLP:AMBER + - ONYPHE_DEFAULT_SCORE=50 + - ONYPHE_IMPORT_SEARCH_RESULTS=true + - ONYPHE_PIVOT_THRESHOLD=100 + - ONYPHE_INDICATOR_MAX_RESULTS=1000 restart: always ``` +Each instance appears as a separate connector in the OpenCTI UI and can be given independent trigger filters, auto-enrichment settings, and confidence levels. + +#### Indicator patterns and category selection + +Indicators use `pattern_type: onyphe` and carry an OQL query as their pattern. The connector prepends `category:` automatically if no `category:` clause is already present in the pattern. This means: + +- An indicator with pattern `ip.dest:1.2.3.4` processed by the CTI instance becomes `category:ctiscan ip.dest:1.2.3.4` +- The same indicator processed by the ASM instance becomes `category:riskscan ip:1.2.3.4` +- An indicator that already includes `category:riskscan ip:1.2.3.4` is passed through unchanged by either instance + ### Manual Deployment 1. Clone the repository 2. Copy `config.yml.sample` to `config.yml` and configure 3. Install dependencies: `pip install -r requirements.txt` -4. Run the connector +4. Run: `python src/main.py` --- ## Usage The connector enriches: -1. **Observables**: IP addresses, certificates, hostnames, text -2. **Indicators**: With ONYPHE pattern_type +1. **Observables**: IP addresses, domains, hostnames, certificates, text (fingerprints) +2. **Indicators**: OQL patterns with `pattern_type: onyphe` Trigger enrichment: - Manually via the OpenCTI UI @@ -149,45 +233,77 @@ Trigger enrichment: flowchart LR A[Observable/Indicator] --> B[ONYPHE Connector] B --> C{ONYPHE API} - C --> D[Summary Data] + C --> D[Results] D --> E[IP Addresses] D --> F[Organizations] D --> G[Domains/Hostnames] - D --> H[ASN/Location] + D --> H[ASN] D --> I[Certificates] - E --> J[OpenCTI] - F --> J - G --> J - H --> J - I --> J + D --> J[Vulnerabilities] + E --> K[OpenCTI] + F --> K + G --> K + H --> K + I --> K + J --> K ``` ### Observable Enrichment -For observables (IPv4, IPv6, hostname, certificate, text): - -| STIX Object | Description | -|-------------|-------------| -| IPv4-Addr/IPv6-Addr | Related IP addresses | -| Organization | Related organizations | -| Domain-Name | Associated domains | -| Hostname | Associated hostnames | -| Autonomous-System | ASN information | -| X509-Certificate | SSL certificates | -| Text | Analytical pivots | -| Location | Geographic data | -| External Reference | ONYPHE links | -| Labels | Classification tags | -| Description | Enriched description | +The connector supports the following observable types as enrichment inputs. The STIX objects generated depend on the configured category. + +#### Supported input types + +| Observable type | ctiscan OQL field(s) | riskscan OQL field(s) | +|-----------------|----------------------|-----------------------| +| IPv4-Addr | `ip.dest:{value}` | `ip:{value}` | +| IPv6-Addr | `ip.dest:{value}` | `ip:{value}` | +| Domain-Name | `?dns.domain:{v} ?cert.domain:{v} ?extract.domain:{v}` | `domain:{value}` | +| Hostname | `?dns.hostname:{v} ?cert.hostname:{v}` | `hostname:{value}` | +| X509-Certificate | `cert.fingerprint.:{hash}` | `fingerprint.:{hash}` | +| Text | analytical pivot field (label-driven) | not supported | +| Indicator | OQL pattern (passed through) | OQL pattern (passed through) | + +#### Generated STIX objects by category + +| STIX object | ctiscan | riskscan | +|-------------|:-------:|:--------:| +| IPv4-Addr / IPv6-Addr | Yes | Yes | +| Domain-Name | Yes | Yes | +| Hostname | Yes | Yes | +| Autonomous-System | Yes | Yes | +| Organization (Identity) | Yes | Yes | +| X509-Certificate | Yes | Yes | +| Vulnerability | — | Yes | +| Text (fingerprint pivots) | Yes (configurable via `ONYPHE_TEXT_FINGERPRINTS`) | — | +| Note (indicator summary) | Yes | Yes | +| Note (observable enrichment, optional) | Yes | Yes | +| Labels | Yes | Yes | +| External Reference | Yes | Yes | + +Vulnerabilities generated by the riskscan category are linked to the enriched observable with a `has` relationship and carry an external reference to the CVE record. ### Indicator Enrichment -For indicators with `pattern_type: onyphe`: +Indicators with `pattern_type: onyphe` are executed as OQL queries against the configured category. The connector returns: + +- A **Note** containing a summary table of top values across key fields (IPs, organisations, countries, ports, protocols, CVEs, risk tags, etc.) +- Optionally, the full set of matching observables (when `ONYPHE_IMPORT_SEARCH_RESULTS=true`) -| Content | Description | -|---------|-------------| -| Note | Summary with key data points | -| Description | Enriched indicator description | +The summary fields vary by category: + +| ctiscan summary fields | riskscan summary fields | +|------------------------|-------------------------| +| IP addresses | IP addresses | +| Organizations | Organizations | +| ASNs | Countries | +| Countries | Hostnames | +| Cert hostnames | Ports | +| Cert domains | Protocols | +| DNS hostnames | CVEs | +| TCP ports | Risk tags | +| Protocols | | +| Technologies | | --- @@ -195,48 +311,109 @@ For indicators with `pattern_type: onyphe`: ### Import Full Data -Setting `ONYPHE_IMPORT_FULL_DATA=true` will import ALL associated data, which can result in: -- Very large numbers of observables -- High API usage -- Potential performance issues - -Recommendation: Start with `false` and enable selectively. +Setting `ONYPHE_IMPORT_FULL_DATA=true` imports the complete raw application response text into the enrichment description. This can produce very large objects. Start with `false`. ### Pivot Threshold -The `ONYPHE_PIVOT_THRESHOLD` setting limits how many pivots are followed. High values can lead to extensive data imports. +`ONYPHE_PIVOT_THRESHOLD` sets the maximum number of results before observable enrichment is skipped entirely. This guards against runaway imports when the connector is running in automatic mode — a common IP or domain appearing in many results could otherwise trigger an exponential growth in observables. The default is `10` — raise it deliberately for known high-cardinality targets. -### Auto Enrichment +### Indicator Max Results + +`ONYPHE_INDICATOR_MAX_RESULTS` is a sanity check for indicator enrichment. When a user submits an OQL indicator for enrichment, the connector fetches the first page of results and checks the total count. If the total exceeds this limit, the query is assumed to be too imprecise (e.g. a typo or an overly broad pattern) and no results are imported. Otherwise, all matching results are paginated and processed. The default is `1000`. This parameter is intentionally separate from `ONYPHE_PIVOT_THRESHOLD` — indicator enrichment is always a deliberate human action, so a much higher ceiling is appropriate. + +### Enrichment Types + +`ONYPHE_ENRICHMENT_TYPES` controls which OpenCTI object types the connector is allowed to create when enriching an observable. By default the parameter is empty, meaning all supported types are created. Set it to a comma-separated list to restrict output to only the types you need. -Setting `CONNECTOR_AUTO=true` with broad scopes can trigger excessive API calls. Consider using Trigger Filters: +Valid values: + +| Value | Generator | ctiscan | riskscan | +|-------|-----------|:-------:|:--------:| +| `Domain-Name` | `_generate_stix_domain` | Yes | Yes | +| `Hostname` | `_generate_stix_hostname` | Yes | Yes | +| `IPv4-Address` / `IPv6-Address` | `_generate_stix_ip` | Yes | Yes | +| `Autonomous-System` | `_generate_stix_asn` | Yes | Yes | +| `X509-Certificate` | `_generate_stix_x509` | Yes | Yes | +| `Text` | `_generate_stix_text` | Yes | — | +| `Vulnerability` | `_generate_stix_vulnerability` | — | Yes | + +**Notes:** +- The `Organization` identity and the upsert of the source observable are always created regardless of this setting. +- The `Hostname`↔`Domain-Name` relationship is created only when **both** `Hostname` and `Domain-Name` are in the list. +- Type matching is case-insensitive (`domain-name`, `Domain-Name`, and `DOMAIN-NAME` are all accepted). + +**Example** — riskscan instance that only creates vulnerabilities and IP addresses: + +```yaml +- ONYPHE_CATEGORY=riskscan +- ONYPHE_ENRICHMENT_TYPES=IPv4-Address,IPv6-Address,Vulnerability +``` + +### Text Fingerprints + +`ONYPHE_TEXT_FINGERPRINTS` controls which ONYPHE hash fields are extracted from enrichment results and stored as Text observables in OpenCTI. Each field is identified by a short label (the second column in the table below). + +By default, when the parameter is empty, the connector uses the **sha256-preferred set**: one pivot per fingerprint family, choosing sha256 where the data model supports it and falling back to md5 otherwise. This avoids duplicate Text objects for the same content under different hash algorithms. + +To use a different selection, set the parameter to a comma-separated list of labels. + +#### All available pivot labels + +| Label | ONYPHE field | Notes | In default set | +|-------|-------------|-------|:--------------:| +| `hhhash-sha256` | `hhhash.fingerprint.sha256` | HTTP header hash | Yes | +| `hhhash-md5` | `hhhash.fingerprint.md5` | HTTP header hash | | +| `ja4t-md5` | `ja4t.fingerprint.md5` | TCP fingerprint (JA4T) — no sha256 in data model | Yes | +| `ja3s-md5` | `ja3s.fingerprint.md5` | TLS server fingerprint (JA3S) — no sha256 in data model | Yes | +| `ja4s-md5` | `ja4s.fingerprint.md5` | TLS server fingerprint (JA4S) — no sha256 in data model | Yes | +| `hassh-md5` | `hassh.fingerprint.md5` | SSH client fingerprint (HASSH) — no sha256 in data model | Yes | +| `favicon-sha256` | `favicon.data.sha256` | Favicon hash | Yes | +| `favicon-md5` | `favicon.data.md5` | Favicon hash | | +| `favicon-mmh3` | `favicon.data.mmh3` | Favicon hash (Shodan-compatible) | | +| `tcp-fingerprint-md5` | `tcp.fingerprint.md5` | Raw TCP fingerprint — no sha256 in data model | Yes | +| `app-data-sha256` | `app.data.sha256` | Application-layer payload hash | Yes | +| `app-data-md5` | `app.data.md5` | Application-layer payload hash | | +| `app-data-mmh3` | `app.data.mmh3` | Application-layer payload hash | | +| `http-header-data-sha256` | `http.header.data.sha256` | HTTP header block hash | Yes | +| `http-header-data-md5` | `http.header.data.md5` | HTTP header block hash | | +| `http-header-data-mmh3` | `http.header.data.mmh3` | HTTP header block hash | | +| `http-body-data-sha256` | `http.body.data.sha256` | HTTP body hash | Yes | +| `http-body-data-md5` | `http.body.data.md5` | HTTP body hash | | +| `http-body-data-mmh3` | `http.body.data.mmh3` | HTTP body hash | | +| `ssh-fingerprint-sha256` | `ssh.fingerprint.sha256` | SSH host-key fingerprint | Yes | +| `ssh-fingerprint-md5` | `ssh.fingerprint.md5` | SSH host-key fingerprint | | + +**Example** — only favicon and SSH fingerprints, using all available hash variants: + +```yaml +- ONYPHE_TEXT_FINGERPRINTS=favicon-sha256,favicon-md5,favicon-mmh3,ssh-fingerprint-sha256,ssh-fingerprint-md5 +``` + +### Note Behaviour + +The connector creates STIX Note objects in two distinct contexts, with different default behaviours: + +**Indicator enrichment** — a Note containing the OQL query summary is always created and attached to the Indicator. The Note ID is derived from the Indicator's STIX ID and the note title, so re-enriching the same Indicator always produces the same ID. OpenCTI will upsert the Note, replacing the content with the latest results. + +**Observable enrichment** — a Note is only created when `ONYPHE_CREATE_NOTE=true`. A new note is created if the Observable description changes. + +### Auto Enrichment -1. Navigate to: Data -> Ingestion -> Connectors -> ONYPHE -2. Add Trigger Filters to limit which entities trigger enrichment +Setting `CONNECTOR_AUTO=true` with broad scopes can trigger large numbers of API calls. Use Trigger Filters in the OpenCTI UI to limit which entities are processed automatically: -### Generated STIX Objects +1. Navigate to: Data → Ingestion → Connectors → (connector name) +2. Add Trigger Filters to restrict which entities trigger enrichment -| Object Type | Description | -|-------------|-------------| -| IPv4-Addr/IPv6-Addr | Related IP addresses | -| Organization | Related organizations | -| Domain-Name | Associated domains | -| Hostname | Associated hostnames | -| Autonomous-System | ASN information | -| X509-Certificate | SSL certificates | -| Text | Analytical pivots | -| Location | Geographic data | -| Note | Summary for indicators | -| Labels | Classification tags | -| External Reference | ONYPHE links | +When running multiple instances, set `CONNECTOR_AUTO` independently per instance and apply appropriate filters to each. --- ## Debugging -Enable debug logging by setting `CONNECTOR_LOG_LEVEL=debug` to see: -- API request/response details -- Entity creation progress -- Pivot operations +Set `CONNECTOR_LOG_LEVEL=debug` to log: +- API request details and OQL queries +- Per-observable processing steps +- STIX object creation --- @@ -244,10 +421,13 @@ Enable debug logging by setting `CONNECTOR_LOG_LEVEL=debug` to see: - [ONYPHE](https://www.onyphe.io/) - [ONYPHE API Documentation](https://www.onyphe.io/documentation/api) +- [ONYPHE ctiscan data model](https://search.onyphe.io/docs/data-models/ctiscan) +- [ONYPHE riskscan tags](https://search.onyphe.io/docs/tags/riskscan) +- [ONYPHE vulnscan tags](https://search.onyphe.io/docs/tags/vulnscan) ### API Considerations -ONYPHE API has rate limits. Consider: -- Using manual enrichment for high-value targets -- Setting appropriate `ONYPHE_PIVOT_THRESHOLD` -- Monitoring API usage +ONYPHE API has rate limits. The connector handles HTTP 429 responses with exponential back-off. To reduce API load: +- Use manual enrichment for high-value targets +- Set `ONYPHE_PIVOT_THRESHOLD` appropriately +- Avoid `CONNECTOR_AUTO=true` on broad scopes diff --git a/internal-enrichment/onyphe/__metadata__/connector_manifest.json b/internal-enrichment/onyphe/__metadata__/connector_manifest.json index 1a46f7ab532..bd2b6b788cf 100644 --- a/internal-enrichment/onyphe/__metadata__/connector_manifest.json +++ b/internal-enrichment/onyphe/__metadata__/connector_manifest.json @@ -1,11 +1,13 @@ { "title": "ONYPHE", "slug": "onyphe", - "description": "The ONYPHE enrichment connector is designed to leverage the Ctiscan category of data to enrich observables, providing detailed Internet scan data\n and mapping for open ports, protocols, banners and relationships — including ASNs, organizations, certificates,\n DNS domains, technologies, ports, countries and analytical pivots such as Ja4s.\n In addition the Indicators can be enriched using the 'onyphe' pattern to run threat-hunting queries within the OpenCTI platform and import matching observables.", - "short_description": "ONYPHE connector enriches observables and indicators with Internet intelligence and mapping data.", + "description": "The ONYPHE enrichment connector supports two complementary use cases via separate data categories.\n\nFor threat intelligence (ctiscan), it enriches observables with detailed Internet scan data and mapping for open ports, protocols, banners and relationships — including ASNs, organizations, certificates, DNS domains, technologies, ports, countries and analytical pivots such as JA4S and HHHash.\n\nFor attack surface management (riskscan), it enriches IP addresses, hostnames and domains with exposure data: open services, risk tags (e.g. risk::opendatabase), CVE vulnerabilities and associated infrastructure.\n\nIn addition, Indicators can be enriched using the 'onyphe' pattern to run threat-hunting queries within the OpenCTI platform and import matching observables.\n\nMultiple instances of the connector can run side by side — one per category — each with independent scope, confidence and auto-enrichment settings.", + "short_description": "ONYPHE connector enriches observables and indicators with Internet intelligence for threat intelligence (ctiscan) and attack surface management (riskscan).", "logo": "internal-enrichment/onyphe/__metadata__/logo.png", "use_cases": [ - "Commercial Internet scan data & mapping" + "Commercial Internet scan data & mapping", + "Attack Surface Management", + "Threat Hunting" ], "verified": false, "last_verified_date": null, diff --git a/internal-enrichment/onyphe/docker-compose.yml b/internal-enrichment/onyphe/docker-compose.yml index de964c54f37..982d9b1f2f3 100644 --- a/internal-enrichment/onyphe/docker-compose.yml +++ b/internal-enrichment/onyphe/docker-compose.yml @@ -20,4 +20,18 @@ services: - ONYPHE_CREATE_NOTE=false - ONYPHE_IMPORT_FULL_DATA=false - ONYPHE_PIVOT_THRESHOLD=10 + # Comma-separated list of OpenCTI types to create during enrichment. + # Leave empty (default) to create all types. + # Valid values: Domain-Name,Hostname,IPv4-Address,IPv6-Address, + # Autonomous-System,X509-Certificate,Text,Vulnerability + #- ONYPHE_ENRICHMENT_TYPES= + # Comma-separated list of fingerprint pivot labels to use when creating + # Text observables. Leave empty to use the default sha256-preferred set. + # Valid values: hhhash-sha256,hhhash-md5,ja4t-md5,ja3s-md5,ja4s-md5, + # hassh-md5,favicon-sha256,favicon-md5,favicon-mmh3,tcp-fingerprint-md5, + # app-data-sha256,app-data-md5,app-data-mmh3, + # http-header-data-sha256,http-header-data-md5,http-header-data-mmh3, + # http-body-data-sha256,http-body-data-md5,http-body-data-mmh3, + # ssh-fingerprint-sha256,ssh-fingerprint-md5 + #- ONYPHE_TEXT_FINGERPRINTS= restart: always diff --git a/internal-enrichment/onyphe/src/config.yml.sample b/internal-enrichment/onyphe/src/config.yml.sample index feb72639624..a709b1695ee 100644 --- a/internal-enrichment/onyphe/src/config.yml.sample +++ b/internal-enrichment/onyphe/src/config.yml.sample @@ -1,9 +1,9 @@ opencti: - url: 'http://localhost' + url: 'http://localhost' token: 'ChangeMe' connector: - type: 'INTERNAL_ENRICHMENT' + type: 'INTERNAL_ENRICHMENT' id: 'ChangeMe' name: 'ONYPHE' scope: 'ipv4-addr,ipv6-addr,indicator,hostname,x509-certificate,text' diff --git a/internal-enrichment/onyphe/src/internal_enrichment_connector/config_loader.py b/internal-enrichment/onyphe/src/internal_enrichment_connector/config_loader.py index 1f348ee4cb0..e084d62bf8e 100644 --- a/internal-enrichment/onyphe/src/internal_enrichment_connector/config_loader.py +++ b/internal-enrichment/onyphe/src/internal_enrichment_connector/config_loader.py @@ -115,3 +115,54 @@ def _initialize_configurations(self) -> None: default=10, isNumber=True, ) + + self.category = get_config_variable( + "ONYPHE_CATEGORY", + ["onyphe", "category"], + self.load, + default="ctiscan", + ) + + self.indicator_max_results = get_config_variable( + "ONYPHE_INDICATOR_MAX_RESULTS", + ["onyphe", "indicator_max_results"], + self.load, + default=1000, + isNumber=True, + ) + + # CSV list of analytical pivot labels controlling which ONYPHE fingerprint + # fields are turned into Text observables during enrichment. + # An empty value means "use the default set" (sha256-preferred per family + # — see DEFAULT_PIVOT_LABELS in onyphe_references.py). + # Valid labels are the short names in ANALYTICAL_PIVOTS, e.g.: + # hhhash-sha256, favicon-sha256, ssh-fingerprint-sha256, app-data-sha256 … + text_fingerprints_raw = get_config_variable( + "ONYPHE_TEXT_FINGERPRINTS", + ["onyphe", "text_fingerprints"], + self.load, + default="", + ) + if text_fingerprints_raw: + self.text_fingerprints = [ + t.strip() for t in text_fingerprints_raw.split(",") if t.strip() + ] + else: + self.text_fingerprints = [] + + # CSV list of OpenCTI observable types (and "Vulnerability") to create + # during enrichment. An empty value means "all types" (default behaviour). + # Valid values: Domain-Name, Hostname, IPv4-Address, IPv6-Address, + # Autonomous-System, X509-Certificate, Text, Vulnerability + enrichment_types_raw = get_config_variable( + "ONYPHE_ENRICHMENT_TYPES", + ["onyphe", "enrichment_types"], + self.load, + default="", + ) + if enrichment_types_raw: + self.enrichment_types = [ + t.strip() for t in enrichment_types_raw.split(",") if t.strip() + ] + else: + self.enrichment_types = [] diff --git a/internal-enrichment/onyphe/src/onyphe_api.py b/internal-enrichment/onyphe/src/onyphe_api.py index 2b8d1299c1c..b3039a3539d 100644 --- a/internal-enrichment/onyphe/src/onyphe_api.py +++ b/internal-enrichment/onyphe/src/onyphe_api.py @@ -1,4 +1,6 @@ #!/usr/bin/env python3 +import time + import requests from requests.compat import urljoin @@ -11,13 +13,14 @@ class Onyphe: :type key: str """ - def __init__(self, key: str, base_url: str): + def __init__(self, key: str, base_url: str, max_retries: int = 3): """Intializes the API object :param key: The Onyphe API key :type key: str """ self.api_key = key self.base_url = base_url + self.max_retries = max_retries self._session = requests.Session() def _request(self, path: str, query_params=None): @@ -33,13 +36,24 @@ def _request(self, path: str, query_params=None): query_params["apikey"] = self.api_key url = urljoin(self.base_url, path) - try: - response = self._session.get(url=url, data=query_params) - except Exception as exc: - raise APIGeneralError(f"Couldn't connect to ONYPHE API : {url}") from exc + for attempt in range(self.max_retries + 1): + try: + response = self._session.get(url=url, params=query_params) + except Exception as exc: + raise APIGeneralError( + f"Couldn't connect to ONYPHE API : {url}" + ) from exc + + if response.status_code != 429: + break + + if attempt == self.max_retries: + raise APIRateLimiting(response.text) + + retry_after = response.headers.get("Retry-After") + wait = int(retry_after) if retry_after else 2 ** (attempt + 1) + time.sleep(wait) - if response.status_code == 429: - raise APIRateLimiting(response.text) try: response_data = response.json() except Exception as exc: @@ -52,33 +66,43 @@ def _request(self, path: str, query_params=None): return response_data - def summary(self, data: str, datatype: str): - """Return a summary of all information we have for the given IPv{4,6} address.""" - if datatype == "domain": - url_path = f"summary/domain/{data}" - elif datatype == "fqdn": - url_path = f"summary/hostname/{data}" - else: - url_path = f"summary/ip/{data}" - return self._request(path=url_path) - - def search_oql(self, oql: str): - """Return data from specified category using Search API and the provided data as the OQL filter.""" + def search_oql(self, oql: str, size: int = None, page: int = None): + """Return a single page of results from the Search API for the provided OQL query.""" url_path = f"search/?q={oql}" - return self._request(path=url_path) + query_params = {} + if size is not None: + query_params["size"] = size + if page is not None: + query_params["page"] = page + return self._request( + path=url_path, query_params=query_params if query_params else None + ) + + def search_oql_paginated(self, oql: str, limit: int): + """Fetch up to limit results, paginating in batches of 100 (API max page size). + The API caps at 100 pages (10,000 results maximum). + Returns a dict with 'total' (from the API) and 'results' (accumulated list). + """ + PAGE_SIZE = 100 + MAX_PAGES = 100 + + first_response = self.search_oql(oql, size=min(PAGE_SIZE, limit), page=1) + total = first_response.get("total", 0) + results = first_response.get("results", []) + + page = 2 + while len(results) < min(limit, total) and page <= MAX_PAGES: + remaining = min(limit, total) - len(results) + page_response = self.search_oql( + oql, size=min(PAGE_SIZE, remaining), page=page + ) + page_results = page_response.get("results", []) + if not page_results: + break + results.extend(page_results) + page += 1 - def count(self, oql: str): - """Return number of results using Search API and the provided data as the OQL filter.""" - url_path = f"search/?q={oql}" - queryargs = { - "page": 1, - "size": 1, - } - results = self._request(path=url_path, query_params=queryargs) - if "total" in results: - return results["total"] - else: - raise OtherError("Error: Can't parse total from API results") + return {"total": total, "results": results} class APIError(Exception): diff --git a/internal-enrichment/onyphe/src/onyphe_import.py b/internal-enrichment/onyphe/src/onyphe_import.py index 0d2fbb958f2..fe3c3aa6e34 100644 --- a/internal-enrichment/onyphe/src/onyphe_import.py +++ b/internal-enrichment/onyphe/src/onyphe_import.py @@ -6,12 +6,12 @@ from onyphe_api import APIError, Onyphe from onyphe_references import ( ANALYTICAL_PIVOTS, + CATEGORY_PROFILES, + DEFAULT_PIVOT_LABELS, + GENERATOR_TYPE_MAP, HASH_KEY_MAP, PIVOT_MAP, REVERSE_PIVOT_MAP, - SUMMARY_TITLES, - SUMMARYS, - TYPE_HANDLERS, ) from pycti import ( STIX_EXT_OCTI_SCO, @@ -21,33 +21,16 @@ Note, OpenCTIConnectorHelper, StixCoreRelationship, + Vulnerability, ) class ONYPHEConnector: - # def __init__(self): - - def _safe_get(self, d, key, empty=(None, "", {}, [])): - value = d.get(key) - return value if value not in empty else None - - def _get_nested_values(self, data, path): - keys = path.split(".") - current = data - for key in keys: - if isinstance(current, dict) and key in current: - current = current[key] - else: - return None - - return current - def __init__(self, config: ConfigConnector, helper: OpenCTIConnectorHelper): """ Initialize the Connector with necessary configurations """ - # Load configuration file and connection helper self.config = config self.helper = helper @@ -59,7 +42,34 @@ def __init__(self, config: ConfigConnector, helper: OpenCTIConnectorHelper): self._pattern_type_create(self.config.pattern_type) self.onyphe_client = Onyphe(config.api_key, config.base_url) - self.onyphe_category = "ctiscan" + self.onyphe_category = self.config.category + + profile = CATEGORY_PROFILES.get(self.onyphe_category) + if profile is None: + raise ValueError( + f"Unsupported ONYPHE category: {self.onyphe_category!r}. " + f"Supported categories: {list(CATEGORY_PROFILES)}" + ) + self.profile = profile + + if config.enrichment_types: + self.helper.log_info( + f"Enrichment type filter active: {config.enrichment_types}" + ) + self.profile = self._apply_enrichment_type_filter( + profile, config.enrichment_types + ) + + selected_labels = ( + config.text_fingerprints + if config.text_fingerprints + else DEFAULT_PIVOT_LABELS + ) + label_set = set(selected_labels) + self.active_pivots = [(f, l) for f, l in ANALYTICAL_PIVOTS if l in label_set] + self.helper.log_info( + f"Active fingerprint pivots: {[l for _, l in self.active_pivots]}" + ) # ONYPHE Identity self.onyphe_identity = self.helper.api.identity.create( @@ -68,10 +78,58 @@ def __init__(self, config: ConfigConnector, helper: OpenCTIConnectorHelper): description=f"Connector Enrichment {self.helper.get_name()}", ) + @staticmethod + def _apply_enrichment_type_filter(profile, enabled_types): + """Return a copy of *profile* with stix_generators filtered to only + include generators that produce one of the *enabled_types*. + + Infrastructure generators (_generate_stix_identity, _upsert_stix_observable) + are always kept. The hostname<->domain relationship generator is kept only + when both Hostname and Domain-Name are enabled. + """ + from dataclasses import replace as dc_replace + + enabled_lower = {t.lower() for t in enabled_types} + + _ALWAYS_INCLUDE = {"_generate_stix_identity", "_upsert_stix_observable"} + _REL_GENERATOR = "_generate_stix_hostname_domain_relationships" + include_rel = "hostname" in enabled_lower and "domain-name" in enabled_lower + + filtered_generators = {} + for obs_type, gen_list in profile.stix_generators.items(): + new_list = [] + for gen_name in gen_list: + if gen_name in _ALWAYS_INCLUDE: + new_list.append(gen_name) + elif gen_name == _REL_GENERATOR: + if include_rel: + new_list.append(gen_name) + else: + produced = GENERATOR_TYPE_MAP.get(gen_name, []) + if any(t.lower() in enabled_lower for t in produced): + new_list.append(gen_name) + filtered_generators[obs_type] = new_list + + return dc_replace(profile, stix_generators=filtered_generators) + + def _safe_get(self, d, key, empty=(None, "", {}, [])): + value = d.get(key) + return value if value not in empty else None + + def _get_nested_values(self, data, path): + keys = path.split(".") + current = data + for key in keys: + if isinstance(current, dict) and key in current: + current = current[key] + else: + return None + + return current + def _pattern_type_create(self, pattern_type="onyphe"): VOCAB_KEY = "pattern_type_ov" try: - self.vocabulary_list = [] existing_vocabulary = self.helper.api.vocabulary.list( **{ "filters": { @@ -108,26 +166,49 @@ def _pattern_type_create(self, pattern_type="onyphe"): f"Error occurred checking pattern_type taxonomies: {str(e)}" ) + def _get_cert_dict(self, ojson): + """Return the dict containing cert fields for the current category model. + + For ctiscan the cert data lives under ojson["cert"]. + For riskscan/datascan the cert fields are at the document top level, so + we return ojson directly — but only when a fingerprint is present so we + don't mistake non-TLS records for cert records. + """ + cert_root = self.profile.field_map.get("cert_root") + if cert_root: + return self._get_nested_values(ojson, cert_root) + # Flat model: cert fields are at the top level. Only treat the document + # as a cert record when at least one fingerprint hash is present. + if self._get_nested_values( + ojson, "fingerprint.sha256" + ) or self._get_nested_values(ojson, "fingerprint.md5"): + return ojson + return None + def _get_x509_from_onyphe(self, cert): self.helper.log_debug(f"Get x509 from ONYPHE : {cert}") - if "validity" in cert: - # time data '2025-03-31T08:56:25Z' - issued: datetime = datetime.strptime( - cert["validity"]["notbefore"], "%Y-%m-%dT%H:%M:%SZ" - ) - expires: datetime = datetime.strptime( - cert["validity"]["notafter"], "%Y-%m-%dT%H:%M:%SZ" - ) - validity_not_before = issued.isoformat().split(".")[0] + "Z" - validity_not_after = expires.isoformat().split(".")[0] + "Z" + validity_not_before = None + validity_not_after = None + if "validity" in cert and isinstance(cert["validity"], dict): + try: + issued: datetime = datetime.strptime( + cert["validity"]["notbefore"], "%Y-%m-%dT%H:%M:%SZ" + ) + expires: datetime = datetime.strptime( + cert["validity"]["notafter"], "%Y-%m-%dT%H:%M:%SZ" + ) + validity_not_before = issued.isoformat().split(".")[0] + "Z" + validity_not_after = expires.isoformat().split(".")[0] + "Z" + except (KeyError, ValueError): + pass hashes = None - if isinstance(cert["fingerprint"], dict): + fingerprint = cert.get("fingerprint") + if isinstance(fingerprint, dict): hash_map_2stix = {v: k for k, v in HASH_KEY_MAP.items()} - # Build the new dictionary hashes = { hash_map_2stix[key]: value - for key, value in cert["fingerprint"].items() + for key, value in fingerprint.items() if key in hash_map_2stix } @@ -143,8 +224,12 @@ def _get_x509_from_onyphe(self, cert): if isinstance(certsubject, dict): subject = ", ".join((f"{k}={v}" for k, v in certsubject.items())) - if "serial" in cert and "hex" in cert["serial"]: - serial_number = str(cert["serial"]["hex"]) + # ctiscan stores serial as {"hex": "..."}, flat models store it as a string. + serial_data = cert.get("serial") + if isinstance(serial_data, dict): + serial_number = str(serial_data["hex"]) if serial_data.get("hex") else None + elif isinstance(serial_data, str) and serial_data: + serial_number = serial_data else: serial_number = None @@ -152,12 +237,6 @@ def _get_x509_from_onyphe(self, cert): "x509-certificate", x509_hashes=hashes ) - # TODO# not yet implemented in ctiscan - # signature_algorithm = cert["cert"]["sig_alg"] - # subject_public_key_algorithm = cert["cert"]["pubkey"]["type"] - # version = str(cert["cert"]["version"]) - - # Generate X509 certificate stix_x509 = stix2.X509Certificate( type="x509-certificate", issuer=issuer, @@ -165,10 +244,7 @@ def _get_x509_from_onyphe(self, cert): validity_not_after=validity_not_after, subject=subject, serial_number=serial_number, - # signature_algorithm=signature_algorithm, - # subject_public_key_algorithm=subject_public_key_algorithm, hashes=hashes, - # version=version, custom_properties={ "x_opencti_created_by_ref": self.onyphe_identity["standard_id"], "x_opencti_external_references": [external_ref], @@ -203,39 +279,41 @@ def _generate_stix_relationship( created_by_ref=self.onyphe_identity["standard_id"], ) - def _generate_description(self, response): - # Generate Services Desc Block - self.helper.log_debug(f"Generate description (preview) : {str(response)[:500]}") - # parse json documents + def _generate_description_ctiscan(self, response): + """Build an enrichment description from ctiscan (layered model) results.""" + self.helper.log_debug( + f"Generate ctiscan description (preview) : {str(response)[:500]}" + ) count = str(len(response)) - services_desc = "Services:\n" + service_parts = ["Services:\n"] for ojson in response: raw_text = self._get_nested_values(ojson, "app.data.text") if raw_text: if not isinstance(raw_text, str): - continue # Skip if somehow not a string + continue if self.config.import_full_data: service_data = raw_text.strip() else: service_data = (raw_text.strip())[0:2048] - if ojson["app"]["tls"]: + if ojson["app"]["tls"] == "true": protocol_string = f"{str(ojson['app']['transport'])}/{str(ojson['app']['protocol'])}/tls" else: protocol_string = f"{str(ojson['app']['transport'])}/{str(ojson['app']['protocol'])}" if isinstance(ojson["scanner"], dict): - services_desc = ( - services_desc - + f"\n**{str(ojson['ip']['dest'])}:{str(ojson[str(ojson['app']['transport'])]['dest'])} " - + f"{protocol_string} seen from {str(ojson['scanner']['country'])} at {str(ojson['@timestamp'])} :**\n" - + f"```\n{service_data}\n```" + service_parts.append( + f"\n**{str(ojson['ip']['dest'])}:{str(ojson[str(ojson['app']['transport'])]['dest'])} " + f"{protocol_string} seen from {str(ojson['scanner']['country'])} at {str(ojson['@timestamp'])} :**\n" + f"```\n{service_data}\n```" ) - services_desc = services_desc + "\n------------------" + service_parts.append("\n------------------") else: - continue # Skip invalid or incomplete entries + continue + + services_desc = "".join(service_parts) if response: if isinstance(response, list): @@ -264,6 +342,74 @@ def _generate_description(self, response): return global_description + def _generate_description_riskscan(self, response): + """Build an enrichment description from riskscan (flat datascan model) results.""" + self.helper.log_debug( + f"Generate riskscan description (preview) : {str(response)[:500]}" + ) + count = str(len(response)) + + if not response: + return "No results" + + first = response[0] if isinstance(response, list) else response + if isinstance(first, dict): + asn = first.get("asn", "N/A") + org = first.get("organization", "N/A") + country = first.get("country", "N/A") + else: + asn = org = country = "N/A" + + service_parts = ["Risks identified:\n"] + for ojson in response: + if not isinstance(ojson, dict): + continue + + ip = ojson.get("ip", "N/A") + port = ojson.get("port", "N/A") + protocol = ojson.get("protocol", "N/A") + transport = ojson.get("transport", "tcp") + tls = ojson.get("tls", False) + timestamp = ojson.get("@timestamp", "N/A") + tags = ojson.get("tag", []) + cves = ojson.get("cve", []) + + if isinstance(tags, list): + risk_tags = [t for t in tags if t.startswith("risk::")] + else: + risk_tags = [] + + if isinstance(cves, str): + cves = [cves] + elif not isinstance(cves, list): + cves = [] + + # The API serialises boolean fields as strings; guard against + # "false" being truthy in Python. + tls_suffix = "/tls" if tls in (True, "true") else "" + service_parts.append( + f"\n**{ip}:{port} {transport}/{protocol}{tls_suffix} at {timestamp}:**\n" + f"- Risks: {', '.join(risk_tags) if risk_tags else 'none'}\n" + f"- CVEs: {', '.join(cves) if cves else 'none'}\n" + ) + service_parts.append("------------------") + + services_desc = "".join(service_parts) + + return f""" +**GeoIP Country:** {country} +\n**Organization:** {org} | **ASN:** {asn} +\n**Count of risk entries:** {count} + +-------------------------- +{services_desc} +""" + + def _generate_description(self, response): + if self.onyphe_category == "riskscan": + return self._generate_description_riskscan(response) + return self._generate_description_ctiscan(response) + def _generate_labels(self, response): self.helper.log_debug(f"Generate labels for : {self.stix_entity.get('id')}") labels = set() @@ -272,9 +418,7 @@ def _generate_labels(self, response): for tag in ojson["tag"]: labels.add(tag) - # Create Labels try: - # Don't add labels to indicator. Maybe make this a configuration option? if self.stix_entity["type"] != "indicator": for tag in labels: self.helper.log_debug(f"Adding {tag} to : {self.stix_entity} ") @@ -286,17 +430,17 @@ def _generate_labels(self, response): return list(labels) def _generate_stix_external_reference( - self, type, value=None, x509_hashes=None, label_pivots=[] + self, type, value=None, x509_hashes=None, label_pivots=None ): self.helper.log_debug(f"Generating external reference for: {type}") - # Handle the type - if type not in TYPE_HANDLERS: + type_handlers = self.profile.type_handlers + + if type not in type_handlers: return self.helper.log_debug(f"Unsupported observable type: {type}") - url_func, desc_template, id_func = TYPE_HANDLERS[type] + url_func, desc_template, id_func = type_handlers[type] - # Generate URL, description, and external_id if type == "x509-certificate": if not x509_hashes or not isinstance(x509_hashes, dict): return self.helper.log_error( @@ -367,8 +511,11 @@ def _process_observable( ) self.stix_objects.append(observable) - # always put IP address on left of relationship - if observable["type"] in ["ipv4-addr", "ipv6-addr"]: + if relationship_type == "resolves-to": + # resolves-to: hostname/domain-name --resolves-to--> ip + source_id = observable["id"] + target_id = self.stix_entity["id"] + elif observable["type"] in ["ipv4-addr", "ipv6-addr"]: source_id = observable["id"] target_id = self.stix_entity["id"] else: @@ -388,11 +535,12 @@ def _generate_stix_identity(self, response): f"Generate organization identities for : {self.stix_entity.get('id')}" ) + org_field = self.profile.field_map["ip_org"] org_dict = {} for ojson in response: - org = self._get_nested_values(ojson, "ip.organization") + org = self._get_nested_values(ojson, org_field) if org: - org_dict[org] = None # Value doesn't matter + org_dict[org] = None def identity_processor(org_name, _): return stix2.Identity( @@ -416,14 +564,15 @@ def _generate_stix_domain(self, response): ) domains = set() + domain_fields = self.profile.field_map["dns_domain"] for ojson in response: - for section in ("dns", "cert"): - if ( - isinstance(ojson, dict) - and section in ojson - and isinstance(ojson[section], dict) - ): - domains.update(map(str, ojson[section].get("domain", []))) + for field_path in domain_fields: + values = self._get_nested_values(ojson, field_path) + if values: + if isinstance(values, list): + domains.update(str(v) for v in values if v) + else: + domains.add(str(values)) values_dict = {domain: {} for domain in domains} self._process_observable(values_dict, "domain-name", stix2.DomainName) @@ -432,46 +581,118 @@ def _generate_stix_ip(self, response): self.helper.log_debug(f"Generate IP observables: {self.stix_entity.get('id')}") ips = {} - # Extract IPs and their versions + ip_dest_field = self.profile.field_map["ip_dest"] + ip_version_field = self.profile.field_map["ip_version"] + for ojson in response: - if ( - isinstance(ojson, dict) - and "ip" in ojson - and isinstance(ojson["ip"], dict) - ): - ip_value = ojson["ip"].get("dest") - ip_version = ojson["ip"].get("version") - if ip_value and ip_version in (4, 6): - ips[str(ip_value)] = ip_version - - # Process each IP observable with _process_observable + ip_value = self._get_nested_values(ojson, ip_dest_field) + if ip_value: + raw_version = ( + self._get_nested_values(ojson, ip_version_field) + if ip_version_field + else None + ) + if isinstance(raw_version, bool): + # riskscan: ipv6 boolean field + ip_version = 6 if raw_version else 4 + elif raw_version in (4, 6): + # ctiscan: integer version field + ip_version = raw_version + else: + # fallback: infer from address string + ip_version = 6 if ":" in str(ip_value) else 4 + ips[str(ip_value)] = ip_version + for ip, version in ips.items(): self.helper.log_debug(f"Generate IP v{version} observable: {ip}") - observable_class = stix2.IPv4Address if version == 4 else stix2.IPv6Address observable_type = "ipv4-addr" if version == 4 else "ipv6-addr" - - values_dict = {ip: {}} - - self._process_observable(values_dict, observable_type, observable_class) + self._process_observable({ip: {}}, observable_type, observable_class) def _generate_stix_hostname(self, response): self.helper.log_debug( f"Generate hostname observables: {self.stix_entity.get('id')}" ) - hostnames = set() - + hostname_fields = self.profile.field_map["dns_hostname"] + hostname_rel_map = self.profile.field_map.get("dns_hostname_rel", {}) + + # Group hostnames by relationship type so DNS-sourced ones get resolves-to + # and cert/mixed-source ones get related-to. + # resolves-to is only valid from an IP observable; fall back to related-to + # when the enriched entity is an indicator. + is_indicator = self.stix_entity["type"] == "indicator" + rel_groups: Dict[str, set] = {} for ojson in response: - for section in ("dns", "cert"): - if ( - isinstance(ojson, dict) - and section in ojson - and isinstance(ojson[section], dict) - ): - hostnames.update(map(str, ojson[section].get("hostname", []))) + for field_path in hostname_fields: + values = self._get_nested_values(ojson, field_path) + if values: + rel_type = hostname_rel_map.get(field_path, "related-to") + if is_indicator and rel_type == "resolves-to": + rel_type = "related-to" + if rel_type not in rel_groups: + rel_groups[rel_type] = set() + if isinstance(values, list): + rel_groups[rel_type].update(str(v) for v in values if v) + else: + rel_groups[rel_type].add(str(values)) + + for rel_type, hostnames in rel_groups.items(): + values_dict = {h: {} for h in hostnames} + self._process_observable( + values_dict, + "hostname", + CustomObservableHostname, + relationship_type=rel_type, + ) + + def _generate_stix_hostname_domain_relationships(self, response): + """Create hostname -related-to-> domain-name relationships. + + ONYPHE pre-extracts domain names (handling public suffix lists), so for + every hostname in the results there will be a corresponding domain entry. + We match by suffix: if a hostname ends with '.' it is related to + that domain. No FQDN parsing is done here. + """ + self.helper.log_debug( + f"Generate hostname->domain relationships: {self.stix_entity.get('id')}" + ) + hostname_fields = self.profile.field_map["dns_hostname"] + domain_fields = self.profile.field_map["dns_domain"] + + all_hostnames: set = set() + all_domains: set = set() - values_dict = {hostname: {} for hostname in hostnames} - self._process_observable(values_dict, "hostname", CustomObservableHostname) + for ojson in response: + for field_path in hostname_fields: + values = self._get_nested_values(ojson, field_path) + if values: + if isinstance(values, list): + all_hostnames.update(str(v) for v in values if v) + else: + all_hostnames.add(str(values)) + for field_path in domain_fields: + values = self._get_nested_values(ojson, field_path) + if values: + if isinstance(values, list): + all_domains.update(str(v) for v in values if v) + else: + all_domains.add(str(values)) + + if not all_hostnames or not all_domains: + return + + for hostname in all_hostnames: + for domain in all_domains: + if hostname.endswith("." + domain) or hostname == domain: + hostname_obj = CustomObservableHostname(value=hostname) + domain_obj = stix2.DomainName(value=domain) + rel = self._generate_stix_relationship( + hostname_obj["id"], "related-to", domain_obj["id"] + ) + self.stix_objects.append(rel) + self.helper.log_debug( + f"New relationship appended for {hostname} - related-to - {domain}" + ) def _generate_stix_text(self, response): self.helper.log_debug( @@ -480,7 +701,7 @@ def _generate_stix_text(self, response): text_dict = {} for ojson in response: - for pivot, type in ANALYTICAL_PIVOTS: + for pivot, type in self.active_pivots: value = self._get_nested_values(ojson, pivot) if value: text_dict[value] = type @@ -512,11 +733,14 @@ def _generate_stix_asn(self, response): self.helper.log_debug( f"Generate asn observables for : {self.stix_entity.get('id')}" ) + asn_field = self.profile.field_map["ip_asn"] + org_field = self.profile.field_map["ip_org"] + asn_dict = {} for ojson in response: - asn = self._get_nested_values(ojson, "ip.asn") + asn = self._get_nested_values(ojson, asn_field) if asn: - asn_dict[str(asn)] = self._get_nested_values(ojson, "ip.organization") + asn_dict[str(asn)] = self._get_nested_values(ojson, org_field) def asn_processor(asn_value, org_name): number = int(asn_value.replace("AS", "")) @@ -531,7 +755,6 @@ def asn_processor(asn_value, org_name): ) for asn_value, org in asn_dict.items(): - # Determine relationship type: belongs-to or related-to rel_type = ( "belongs-to" if self.stix_entity["type"] in ["ipv4-addr", "ipv6-addr"] @@ -549,12 +772,17 @@ def _generate_stix_x509(self, response): self.helper.log_debug( f"Generate x509 observables for : {self.stix_entity.get('id')}" ) + cert_sha256_field = self.profile.field_map.get("cert_sha256") + if not cert_sha256_field: + return + cert_dict = {} for ojson in response: - if isinstance(ojson.get("cert"), dict): - sha256 = self._get_nested_values(ojson, "cert.fingerprint.sha256") - if sha256: - cert_dict[str(sha256)] = ojson["cert"] + sha256 = self._get_nested_values(ojson, cert_sha256_field) + if sha256: + cert_data = self._get_cert_dict(ojson) + if cert_data: + cert_dict[str(sha256)] = cert_data def x509_processor(_, cert_data): return self._get_x509_from_onyphe(cert_data) @@ -567,6 +795,202 @@ def x509_processor(_, cert_data): processor_func=x509_processor, ) + def _build_frequency_summary_note(self, results): + """Build the classic top-N frequency table note (ctiscan style).""" + summarys = {summary: {} for summary, _ in self.profile.summarys} + for result in results: + for summary, _ in self.profile.summarys: + values = self._get_nested_values(result, summary) + if isinstance(values, list): + for val in values: + if val is not None: + summarys[summary][val] = summarys[summary].get(val, 0) + 1 + elif values is not None: + summarys[summary][values] = summarys[summary].get(values, 0) + 1 + + top = {} + for summary, limit in self.profile.summarys: + sorted_items = sorted( + summarys[summary].items(), key=lambda item: item[1], reverse=True + )[:limit] + top[summary] = dict(sorted_items) + + note_title = f"ONYPHE {self.onyphe_category.title()} Summary Information" + note_content = "### Global\n" + note_content += "| Value | Count |\n|------|-------|\n" + note_content += "| Total Results |" + str(len(results)) + " |\n" + for summary, _ in self.profile.summarys: + note_content += "### " + self.profile.summary_titles[summary] + "\n\n" + note_content += "| Value | Count |\n|------|-------|\n" + for value, count in top[summary].items(): + note_content += "| " + str(value) + " |" + str(count) + " |\n" + note_content += "\n" + return note_title, note_content + + def _build_findings_table_note(self, results): + """Build a structured findings table note (riskscan style). + + Columns: Risk/CVE | IP:Port | Service | Hostname | Organization + One row per (finding, ip, port) combination; risk:: tags and CVEs + are treated as findings. Only tags prefixed with 'risk::' are included. + """ + fm = self.profile.field_map + ip_dest_field = fm["ip_dest"] + cve_field = fm.get("cve") + hostname_fields = fm["dns_hostname"] + + rows = [] + for ojson in results: + ip = self._get_nested_values(ojson, ip_dest_field) or "" + port = self._get_nested_values(ojson, "port") or "" + transport = self._get_nested_values(ojson, "transport") or "" + protocol = self._get_nested_values(ojson, "protocol") or "" + tls_raw = self._get_nested_values(ojson, "tls") + tls_str = "/tls" if tls_raw in (True, "true") else "" + service = ( + f"{transport}/{protocol}{tls_str}" if (transport or protocol) else "" + ) + + hostnames = [] + for field_path in hostname_fields: + values = self._get_nested_values(ojson, field_path) + if values: + if isinstance(values, list): + hostnames.extend(str(v) for v in values if v) + else: + hostnames.append(str(values)) + hostname_str = ", ".join(hostnames) if hostnames else "" + + ip_port = f"{ip}:{port}" if port else str(ip) + + findings = [] + tags = self._get_nested_values(ojson, "tag") or [] + if isinstance(tags, str): + tags = [tags] + findings.extend( + t for t in tags if isinstance(t, str) and t.startswith("risk::") + ) + if cve_field: + cves = self._get_nested_values(ojson, cve_field) or [] + if isinstance(cves, str): + cves = [cves] + findings.extend(str(c) for c in cves if c) + + for finding in findings: + rows.append((finding, ip_port, service, hostname_str)) + + # Deduplicate while preserving order + seen = set() + unique_rows = [] + for row in rows: + if row not in seen: + seen.add(row) + unique_rows.append(row) + + note_title = f"ONYPHE {self.onyphe_category.title()} Findings" + note_content = f"| Total Findings | {len(unique_rows)} |\n|------|-------|\n\n" + note_content += "| Risk / CVE | IP:Port | Service | Hostname |\n" + note_content += "|------------|---------|---------|----------|\n" + for finding, ip_port, service, hostname in unique_rows: + note_content += f"| {finding} | {ip_port} | {service} | {hostname} |\n" + return note_title, note_content + + def _generate_stix_vulnerability(self, response): + self.helper.log_debug( + f"Generate vulnerability objects for : {self.stix_entity.get('id')}" + ) + cve_field = self.profile.field_map.get("cve") + if not cve_field: + return + + is_indicator = self.stix_entity["type"] == "indicator" + ip_dest_field = self.profile.field_map.get("ip_dest") + ip_version_field = self.profile.field_map.get("ip_version") + + # Map CVE -> set of IPs (for indicator path) or collect unique CVEs (observable path) + cve_ips: Dict[str, set] = {} + for ojson in response: + values = self._get_nested_values(ojson, cve_field) + if not values: + continue + cve_ids = ( + [str(v) for v in values if v] + if isinstance(values, list) + else [str(values)] + ) + + ip = None + if is_indicator and ip_dest_field: + ip = self._get_nested_values(ojson, ip_dest_field) + if ip: + raw_version = ( + self._get_nested_values(ojson, ip_version_field) + if ip_version_field + else None + ) + if isinstance(raw_version, bool): + ip_version = 6 if raw_version else 4 + elif raw_version in (4, 6): + ip_version = raw_version + else: + ip_version = 6 if ":" in str(ip) else 4 + ip = (str(ip), ip_version) + + for cve_id in cve_ids: + if cve_id not in cve_ips: + cve_ips[cve_id] = set() + if ip: + cve_ips[cve_id].add(ip) + + for cve_id, ips in cve_ips.items(): + self.helper.log_debug(f"Creating vulnerability object for: {cve_id}") + stix_vuln = stix2.Vulnerability( + id=Vulnerability.generate_id(cve_id), + name=cve_id, + created_by_ref=self.onyphe_identity["standard_id"], + external_references=[ + stix2.ExternalReference( + source_name="cve", + external_id=cve_id, + url=f"https://www.cve.org/CVERecord?id={cve_id}", + ) + ], + ) + self.stix_objects.append(stix_vuln) + + if is_indicator: + # indicator indicates vulnerability + rel = self._generate_stix_relationship( + self.stix_entity["id"], "indicates", stix_vuln["id"] + ) + self.stix_objects.append(rel) + self.helper.log_debug( + f"New relationship appended for {self.stix_entity['id']} - indicates - {stix_vuln['id']}" + ) + # ipv4-addr/ipv6-addr related-to vulnerability (one per source IP) + for ip_value, ip_version in ips: + ip_class = ( + stix2.IPv4Address if ip_version == 4 else stix2.IPv6Address + ) + ip_obj = ip_class(value=ip_value) + self.stix_objects.append(ip_obj) + rel = self._generate_stix_relationship( + ip_obj["id"], "related-to", stix_vuln["id"] + ) + self.stix_objects.append(rel) + self.helper.log_debug( + f"New relationship appended for {ip_obj['id']} ({ip_value}) - related-to - {stix_vuln['id']}" + ) + else: + # observable related-to vulnerability + rel = self._generate_stix_relationship( + self.stix_entity["id"], "related-to", stix_vuln["id"] + ) + self.stix_objects.append(rel) + self.helper.log_debug( + f"New relationship appended for {self.stix_entity['id']} - related-to - {stix_vuln['id']}" + ) + def _upsert_stix_observable(self, description, labels): self.helper.log_debug(f"Upsert observables for: {self.stix_entity.get('id')}") @@ -608,17 +1032,16 @@ def _upsert_stix_observable(self, description, labels): "x_opencti_created_by_ref": self.onyphe_identity["standard_id"], } - # Map of type to STIX class type_class_map = { "ipv4-addr": stix2.IPv4Address, "ipv6-addr": stix2.IPv6Address, + "domain-name": stix2.DomainName, "hostname": CustomObservableHostname, "text": CustomObservableText, } stix_observable = None - # Handle X.509 if entity_type == "x509-certificate": x509_args = { "issuer": self._safe_get(self.stix_entity, "issuer"), @@ -647,14 +1070,13 @@ def _upsert_stix_observable(self, description, labels): custom_properties=custom_properties, ) - # If we managed to create something, append it if stix_observable: self.stix_objects.append(stix_observable) if self.config.create_note: - now = datetime.now().strftime("%Y-%m-%dT%H:%M:%SZ") + note_id = Note.generate_id(None, description) note = stix2.Note( - id=Note.generate_id(now, description), + id=note_id, type="note", abstract="ONYPHE Results", content=description, @@ -679,96 +1101,96 @@ def _generate_stix_bundle( self.stix_objects = stix_objects self.stix_entity = stix_entity - # Generate Stix Object for bundle description = self._generate_description(data) labels = self._generate_labels(data) - self._generate_stix_identity(data) - self._generate_stix_domain(data) - self._generate_stix_asn(data) - if stix_entity["type"] in ["ipv4-addr", "ipv6-addr"]: - self._generate_stix_hostname(data) - self._generate_stix_x509(data) - self._generate_stix_text(data) - self._upsert_stix_observable(description, labels) - elif stix_entity["type"] == "hostname": - self._generate_stix_ip(data) - self._generate_stix_text(data) - self._upsert_stix_observable(description, labels) - elif stix_entity["type"] == "x509-certificate": - self._generate_stix_hostname(data) - self._generate_stix_ip(data) - self._generate_stix_text(data) - self._upsert_stix_observable(description, labels) - elif stix_entity["type"] == "text": - self._generate_stix_hostname(data) - self._generate_stix_ip(data) - self._generate_stix_x509(data) - self._upsert_stix_observable(description, labels) - elif stix_entity["type"] == "indicator": - self._generate_stix_ip(data) - self._generate_stix_hostname(data) - self._generate_stix_x509(data) + generators = self.profile.stix_generators.get(stix_entity["type"], []) + for gen_name in generators: + if gen_name == "_upsert_stix_observable": + self._upsert_stix_observable(description, labels) + else: + getattr(self, gen_name)(data) + if only_objects: + return self.stix_objects uniq_bundles_objects = list( {obj["id"]: obj for obj in self.stix_objects}.values() ) - if only_objects: - return uniq_bundles_objects return self.helper.stix2_create_bundle(uniq_bundles_objects) + def _build_cert_fingerprint_filter(self, stix_entity): + """Build an OQL filter clause for an x509-certificate entity. + + Returns the filter string, or raises ValueError if the entity has no + usable hashes or the profile has no cert fingerprint field mapping. + """ + if "hashes" not in stix_entity: + raise ValueError(f"x509-certificate doesn't contain hashes: {stix_entity}") + hashes = stix_entity["hashes"] + if not isinstance(hashes, dict): + raise ValueError( + f"x509-certificate doesn't contain a dictionary of hashes: {hashes}" + ) + + cert_sha256_field = self.profile.field_map.get("cert_sha256") + if not cert_sha256_field: + raise ValueError( + f"x509-certificate not supported for category {self.onyphe_category!r}" + ) + + hash_type = next(iter(hashes)) + hash_filter = HASH_KEY_MAP[hash_type] + hash_value = hashes[hash_type] + + # cert_sha256_field is e.g. "cert.fingerprint.sha256" (ctiscan) or + # "fingerprint.sha256" (riskscan). Strip the trailing ".sha256" to get + # the fingerprint prefix, then append the actual hash algorithm name. + fingerprint_prefix = cert_sha256_field.rsplit(".", 1)[0] + return f"{fingerprint_prefix}.{hash_filter}:{hash_value} " + def _process_message(self, data: Dict): - # OpenCTI entity information retrieval stix_objects = data["stix_objects"] stix_entity = data["stix_entity"] opencti_entity = data["enrichment_entity"] - """ - Extract TLP and we check if the variable "max_tlp" is less than - or equal to the markings access of the entity. - If this is true, we can send the data to connector for enrichment. - """ + try: + return self._process_message_inner( + stix_objects, stix_entity, opencti_entity + ) + except Exception: + bundle = self.helper.stix2_create_bundle(stix_objects) + self.helper.send_stix2_bundle(bundle) + raise + + def _process_message_inner(self, stix_objects, stix_entity, opencti_entity): self._extract_and_check_markings(opencti_entity) entity_value = self._safe_get(stix_entity, "value") is_observable = False ctifilter = "" - # Extract Value from opencti entity data - if stix_entity["type"] == "ipv4-addr": - ctifilter += f"ip.dest:{entity_value}" - is_observable = True - elif stix_entity["type"] == "hostname": - ctifilter += ( - f"( ?dns.hostname:{entity_value} ?cert.hostname:{entity_value}) " - ) - is_observable = True - elif stix_entity["type"] == "x509-certificate": - if "hashes" in stix_entity: - hashes = stix_entity["hashes"] - else: - return self.helper.log_error( - f"x509-certificate doesn't contain hashes: {stix_entity}" - ) + entity_type = stix_entity["type"] - if isinstance(hashes, dict): - hash_type = next(iter(hashes)) - hash_filter = HASH_KEY_MAP[hash_type] - hash_value = hashes[hash_type] - else: - return self.helper.log_error( - f"x509-certificate doesn't contain a dictionary of hashes: {hashes}" - ) + if entity_type == "x509-certificate": + try: + ctifilter += self._build_cert_fingerprint_filter(stix_entity) + is_observable = True + except ValueError as e: + self.helper.log_error(str(e)) + bundle = self.helper.stix2_create_bundle(stix_objects) + self.helper.send_stix2_bundle(bundle) + return str(e) - ctifilter += f"cert.fingerprint.{hash_filter}:{hash_value} " - is_observable = True - elif stix_entity["type"] == "text": + elif entity_type == "text": + if "text" not in self.profile.stix_generators: + raise ValueError( + f"text observable not supported for category {self.onyphe_category!r}" + ) labels = stix_entity.get("x_opencti_labels", []) self.helper.log_debug(f"Labels found on entity: {labels}") self.helper.log_debug(f"Pivot map values: {list(PIVOT_MAP.values())}") - # Text observable requires a label specifying the analytical pivot type, for example "ja3s-md5" onyphe_field = next( ( field @@ -782,38 +1204,48 @@ def _process_message(self, data: Dict): ) if onyphe_field is None: self.helper.log_debug("No matching pivot label found.") + bundle = self.helper.stix2_create_bundle(stix_objects) + self.helper.send_stix2_bundle(bundle) return "No matching pivot label found." ctifilter += f"{onyphe_field}:{entity_value}" is_observable = True + elif entity_type in self.profile.oql_filters: + oql_filter_fn = self.profile.oql_filters[entity_type] + if oql_filter_fn: + ctifilter += oql_filter_fn(entity_value) + is_observable = True + if is_observable: try: self.helper.log_info( f"Processing {stix_entity['type']} observable: {entity_value}" ) - # Get ONYPHE ctiscan API Response oql = f"category:{self.onyphe_category} {ctifilter} -since:{self.config.time_since}" - count = self.onyphe_client.count(oql) - if count > self.config.pivot_threshold: + response = self.onyphe_client.search_oql_paginated( + oql, limit=self.config.pivot_threshold + ) + if response.get("total", 0) > self.config.pivot_threshold: + bundle = self.helper.stix2_create_bundle(stix_objects) + self.helper.send_stix2_bundle(bundle) return "Sent 0 bundles for import. Results over pivot threshold." - response = self.onyphe_client.search_oql(oql) - - # Generate a stix bundle bundle = self._generate_stix_bundle( response["results"], stix_objects, stix_entity ) - # send stix2 bundle bundles_sent = self.helper.send_stix2_bundle(bundle) return "Sent " + str(len(bundles_sent)) + " STIX bundle(s) for import" except APIError as e: - # Handling specific errors for ONYPHE API raise ValueError(f"ONYPHE API Error : {str(e)}") except Exception as e: - return self.helper.log_error(f"Unexpected Error occurred: {str(e)}") + self.helper.log_error(f"Unexpected Error occurred: {str(e)}") + bundle = self.helper.stix2_create_bundle(stix_objects) + self.helper.send_stix2_bundle(bundle) + return f"Unexpected Error occurred: {str(e)}" + elif ( stix_entity["type"] == "indicator" and stix_entity["pattern_type"] == self.config.pattern_type @@ -823,20 +1255,14 @@ def _process_message(self, data: Dict): else: score = self.helper.get_attribute_in_extension("score", stix_entity) - threats = [] - # Resolve indicates relationships = self.helper.api.stix_core_relationship.list( relationship_type="indicates", fromId=opencti_entity["id"] ) - for relationship in relationships: - indicates_stix_entity = ( - self.helper.api.stix2.get_stix_bundle_or_object_from_entity_id( - entity_type=relationship["to"]["entity_type"], - entity_id=relationship["to"]["id"], - only_entity=True, - ) - ) - threats.append(indicates_stix_entity) + threats = [ + rel["to"]["standard_id"] + for rel in relationships + if rel.get("to") and rel["to"].get("standard_id") + ] ctifilter = stix_entity["pattern"] @@ -847,67 +1273,69 @@ def _process_message(self, data: Dict): if "category:" not in ctifilter: ctifilter = f"category:{self.onyphe_category} " + ctifilter - # TODO : Check to see if user has passed time functions + OQL_TIME_FILTERS = ( + "-since:", + "-weekago:", + "-dayago:", + "-monthago:", + ) + user_has_time_filter = any(tf in ctifilter for tf in OQL_TIME_FILTERS) + oql_parts = [ctifilter.strip()] + if not user_has_time_filter: + oql_parts.append(f"-since:{self.config.time_since}") + if self.config.import_search_results: - # Get full ONYPHE API Response - oql = f"{ctifilter} -since:{self.config.time_since}" + oql = " ".join(oql_parts) else: - # Get summary fields only - summary_keys_csv = ",".join(summary for summary, _ in SUMMARYS) - oql = f"{ctifilter} -since:{self.config.time_since} -fields:{summary_keys_csv}" + summary_keys_csv = ",".join( + summary for summary, _ in self.profile.summarys + ) + oql_parts.append(f"-fields:{summary_keys_csv}") + oql = " ".join(oql_parts) self.helper.log_debug(f"Trying ONYPHE query for : {oql}") - response = self.onyphe_client.search_oql(oql) + first_page = self.onyphe_client.search_oql(oql) + total_available = first_page.get("total", 0) + if total_available > self.config.indicator_max_results: + self.helper.log_info( + f"Indicator query matched {total_available} results, " + f"exceeding indicator_max_results ({self.config.indicator_max_results}). " + "Query may be too imprecise — no results imported." + ) + bundle = self.helper.stix2_create_bundle(stix_objects) + self.helper.send_stix2_bundle(bundle) + return ( + f"Sent 0 bundles for import. Indicator query returned " + f"{total_available} results, over the {self.config.indicator_max_results} limit." + ) + all_results = first_page.get("results", []) + page = 2 + while ( + len(all_results) < total_available + and len(all_results) < self.config.indicator_max_results + ): + page_response = self.onyphe_client.search_oql(oql, page=page) + page_results = page_response.get("results", []) + if not page_results: + break + all_results.extend(page_results) + page += 1 + response = {"total": total_available, "results": all_results} self.helper.log_debug(f"Got json response: {response}") results = response["results"] number_processed = response["total"] - # Build summary note self.helper.log_debug("Building summary") - # Initialize summary counts as a dictionary of dictionaries - summarys = {summary: {} for summary, _ in SUMMARYS} - - for result in results: - for summary, _ in SUMMARYS: - values = self._get_nested_values(result, summary) - - # Handle both single value and list (for wildcards) - if isinstance(values, list): - for val in values: - if val is not None: - summarys[summary][val] = ( - summarys[summary].get(val, 0) + 1 - ) - elif values is not None: - summarys[summary][values] = ( - summarys[summary].get(values, 0) + 1 - ) - - # Extract top N for each summary - top = {} - for summary, limit in SUMMARYS: - sorted_items = sorted( - summarys[summary].items(), - key=lambda item: item[1], - reverse=True, - )[:limit] - top[summary] = dict(sorted_items) - - note_title = "ONYPHE Ctiscan Summary Information" - note_content = "### Global\n" - note_content += "| Value | Count |\n|------|-------|\n" - note_content += "| Total Results |" + str(len(results)) + " |\n" - for summary, limit in SUMMARYS: - note_content += "### " + SUMMARY_TITLES[summary] + "\n\n" - note_content += "| Value | Count |\n|------|-------|\n" - for value, count in top[summary].items(): - note_content += "| " + str(value) + " |" + str(count) + " |\n" - note_content += "\n" - - created = datetime.now().strftime("%Y-%m-%dT%H:%M:%SZ") + if self.profile.summary_style == "findings_table": + note_title, note_content = self._build_findings_table_note(results) + else: + note_title, note_content = self._build_frequency_summary_note( + results + ) + note = stix2.Note( - id=Note.generate_id(created, note_content), + id=Note.generate_id(stix_entity["id"], note_title), abstract=note_title, content=note_content, created_by_ref=self.onyphe_identity["standard_id"], @@ -916,30 +1344,27 @@ def _process_message(self, data: Dict): self.helper.log_debug(f"Summary created as note : {note}") bundle_objects.append(note) - # Import search results as observables if self.config.import_search_results: self.helper.log_debug("Importing search results as observables") - # Generate a stix bundle bundle = self._generate_stix_bundle( results, stix_objects, stix_entity, score, True ) - # create relationships to threats for observables for bundle_object in bundle: target_id = bundle_object["id"] if bundle_object["type"] not in ["indicator", "relationship"]: - for threat in threats: - if target_id != threat["id"]: + for threat_id in threats: + if target_id != threat_id: rel = self._generate_stix_relationship( - target_id, "related-to", threat["id"] + target_id, "related-to", threat_id ) bundle_objects.append(rel) self.helper.log_debug( - f"New relationship appended for {target_id} - related-to - {threat['id']}" + f"New relationship appended for {target_id} - related-to - {threat_id}" ) bundle_objects = bundle_objects + bundle - # send stix2 bundle + uniq_bundles_objects = list( - {obj["id"]: obj for obj in bundle_objects}.values() + {obj["id"]: obj for obj in stix_objects + bundle_objects}.values() ) bundle = self.helper.stix2_create_bundle(uniq_bundles_objects) bundles_sent = self.helper.send_stix2_bundle(bundle) @@ -952,10 +1377,12 @@ def _process_message(self, data: Dict): ) return "Sent " + str(len(bundles_sent)) + " STIX bundle(s) for import" except APIError as e: - # Handling specific errors for ONYPHE API raise ValueError(f"ONYPHE API Error : {str(e)}") except Exception as e: - return self.helper.log_error(f"Unexpected Error occurred: {str(e)}") + self.helper.log_error(f"Unexpected Error occurred: {str(e)}") + bundle = self.helper.stix2_create_bundle(stix_objects) + self.helper.send_stix2_bundle(bundle) + return f"Unexpected Error occurred: {str(e)}" else: if stix_entity["type"] == "indicator": raise ValueError( @@ -964,6 +1391,5 @@ def _process_message(self, data: Dict): else: raise ValueError("Unsupported type: " + stix_entity["type"]) - # Start the main loop def run(self) -> None: self.helper.listen(message_callback=self._process_message) diff --git a/internal-enrichment/onyphe/src/onyphe_references.py b/internal-enrichment/onyphe/src/onyphe_references.py index d8acce3c5ef..694bd2ff73d 100644 --- a/internal-enrichment/onyphe/src/onyphe_references.py +++ b/internal-enrichment/onyphe/src/onyphe_references.py @@ -1,28 +1,8 @@ -SUMMARYS = [ - ("ip.dest", 20), - ("ip.organization", 20), - ("ip.asn", 20), - ("ip.country", 20), - ("cert.hostname", 20), - ("cert.domain", 20), - ("dns.hostname", 20), - ("tcp.dest", 20), - ("app.protocol", 20), - ("component.text", 20), -] +from dataclasses import dataclass +from dataclasses import field as dc_field +from typing import Callable, Dict, List, Optional, Tuple -SUMMARY_TITLES = { - "ip.dest": "Top 20 IP addresses identified", - "ip.organization": "Top 20 Organizations", - "ip.asn": "Top 20 Autonomous Systems", - "ip.country": "Top 20 Countries", - "cert.hostname": "Top 20 TLS Cert Hostnames", - "cert.domain": "Top 20 TLS Cert Domains", - "dns.hostname": "Top 20 DNS Hostnames", - "tcp.dest": "Top 20 TCP Ports", - "app.protocol": "Top 20 Protocols", - "component.text": "Top 20 Technologies", -} +# ─── Shared ─────────────────────────────────────────────────────────────────── HASH_KEY_MAP = { "MD5": "md5", @@ -32,23 +12,104 @@ } ANALYTICAL_PIVOTS = [ + # HTTP header hash (HHHash) ("hhhash.fingerprint.sha256", "hhhash-sha256"), ("hhhash.fingerprint.md5", "hhhash-md5"), - ("ja4t.fingerprint.sha256", "ja4t-sha256"), + # JA4T TCP fingerprint — only md5 exists in the data model ("ja4t.fingerprint.md5", "ja4t-md5"), + # JA3S / JA4S TLS fingerprints — only md5 exists in the data model ("ja3s.fingerprint.md5", "ja3s-md5"), ("ja4s.fingerprint.md5", "ja4s-md5"), + # HASSH SSH client fingerprint — only md5 exists in the data model ("hassh.fingerprint.md5", "hassh-md5"), - ("favicon.data.md5", "favicon-md5"), + # Favicon ("favicon.data.sha256", "favicon-sha256"), + ("favicon.data.md5", "favicon-md5"), ("favicon.data.mmh3", "favicon-mmh3"), + # TCP fingerprint — only md5 exists in the data model + ("tcp.fingerprint.md5", "tcp-fingerprint-md5"), + # Raw application-layer payload hash + ("app.data.sha256", "app-data-sha256"), + ("app.data.md5", "app-data-md5"), + ("app.data.mmh3", "app-data-mmh3"), + # HTTP header block hash + ("http.header.data.sha256", "http-header-data-sha256"), + ("http.header.data.md5", "http-header-data-md5"), + ("http.header.data.mmh3", "http-header-data-mmh3"), + # HTTP body hash + ("http.body.data.sha256", "http-body-data-sha256"), + ("http.body.data.md5", "http-body-data-md5"), + ("http.body.data.mmh3", "http-body-data-mmh3"), + # SSH host-key fingerprint + ("ssh.fingerprint.sha256", "ssh-fingerprint-sha256"), + ("ssh.fingerprint.md5", "ssh-fingerprint-md5"), +] + +# Default active pivot labels: prefer sha256; fall back to md5 for pivot families +# where sha256 is absent from the ctiscan data model. +DEFAULT_PIVOT_LABELS: List[str] = [ + "hhhash-sha256", + "ja4t-md5", # no sha256 in data model + "ja3s-md5", # no sha256 in data model + "ja4s-md5", # no sha256 in data model + "hassh-md5", # no sha256 in data model + "favicon-sha256", + "tcp-fingerprint-md5", # no sha256 in data model + "app-data-sha256", + "http-header-data-sha256", + "http-body-data-sha256", + "ssh-fingerprint-sha256", ] PIVOT_MAP = dict(ANALYTICAL_PIVOTS) REVERSE_PIVOT_MAP = {v: k for k, v in PIVOT_MAP.items()} -TYPE_HANDLERS = { +# Maps each generator function name to the OpenCTI observable type(s) it produces. +# Generators absent from this map are infrastructure (always run regardless of filter): +# _generate_stix_identity, _upsert_stix_observable +# The relationships generator is handled separately: it runs only when both +# Hostname and Domain-Name are in the enabled types. +GENERATOR_TYPE_MAP: Dict[str, List[str]] = { + "_generate_stix_domain": ["Domain-Name"], + "_generate_stix_ip": ["IPv4-Address", "IPv6-Address"], + "_generate_stix_hostname": ["Hostname"], + "_generate_stix_text": ["Text"], + "_generate_stix_asn": ["Autonomous-System"], + "_generate_stix_x509": ["X509-Certificate"], + "_generate_stix_vulnerability": ["Vulnerability"], +} + + +# ─── Ctiscan ────────────────────────────────────────────────────────────────── + +_CTISCAN_SUMMARYS: List[Tuple[str, int]] = [ + ("ip.dest", 20), + ("ip.organization", 20), + ("ip.asn", 20), + ("ip.country", 20), + ("cert.hostname", 20), + ("cert.domain", 20), + ("dns.hostname", 20), + ("tcp.dest", 20), + ("app.protocol", 20), + ("component.text", 20), +] + +_CTISCAN_SUMMARY_TITLES: Dict[str, str] = { + "ip.dest": "Top 20 IP addresses identified", + "ip.organization": "Top 20 Organizations", + "ip.asn": "Top 20 Autonomous Systems", + "ip.country": "Top 20 Countries", + "cert.hostname": "Top 20 TLS Cert Hostnames", + "cert.domain": "Top 20 TLS Cert Domains", + "dns.hostname": "Top 20 DNS Hostnames", + "tcp.dest": "Top 20 TCP Ports", + "app.protocol": "Top 20 Protocols", + "component.text": "Top 20 Technologies", +} + +_CTISCAN_TYPE_HANDLERS: Dict = { "ipv4-addr": ( lambda v: f"https://search.onyphe.io/search?q=category%3Actiscan+ip.dest%3A{v}", "ONYPHE search for IP address {value}", @@ -107,3 +168,304 @@ lambda v: str(v), ), } + +# Paths in the ctiscan (layered) data model. +# List values mean "check each path and merge all results". +# cert_root: path to the sub-dict containing all cert fields. +# cert_sha256: path to the cert SHA-256 fingerprint used as a dedup key. +# ip_version: integer field returning 4 or 6. +_CTISCAN_FIELD_MAP: Dict[str, Optional[object]] = { + "ip_dest": "ip.dest", + "ip_version": "ip.version", # integer: 4 or 6 + "ip_asn": "ip.asn", + "ip_org": "ip.organization", + "dns_domain": ["dns.domain", "cert.domain"], + "dns_hostname": ["dns.hostname", "cert.hostname"], + # Per-field relationship type for hostnames. + # dns.hostname comes from the DNS layer → resolves-to is accurate. + # cert.hostname comes from certificate SANs → related-to is more honest. + "dns_hostname_rel": {"dns.hostname": "resolves-to", "cert.hostname": "related-to"}, + "cert_root": "cert", # cert data lives under ojson["cert"] + "cert_sha256": "cert.fingerprint.sha256", + "cve": "component.cve", +} + +_CTISCAN_OQL_FILTERS: Dict[str, Optional[Callable]] = { + "ipv4-addr": lambda v: f"ip.dest:{v}", + "ipv6-addr": lambda v: f"ip.dest:{v}", + "hostname": lambda v: f"( ?dns.hostname:{v} ?cert.hostname:{v})", + "domain-name": lambda v: f"( ?dns.domain:{v} ?cert.domain:{v} ?extract.domain:{v})", + # x509-certificate and text are handled with special logic in _process_message +} + +_CTISCAN_STIX_GENERATORS: Dict[str, List[str]] = { + "ipv4-addr": [ + "_generate_stix_identity", + "_generate_stix_domain", + "_generate_stix_asn", + "_generate_stix_hostname", + "_generate_stix_hostname_domain_relationships", + "_generate_stix_x509", + "_generate_stix_text", + "_upsert_stix_observable", + ], + "ipv6-addr": [ + "_generate_stix_identity", + "_generate_stix_domain", + "_generate_stix_asn", + "_generate_stix_hostname", + "_generate_stix_hostname_domain_relationships", + "_generate_stix_x509", + "_generate_stix_text", + "_upsert_stix_observable", + ], + "hostname": [ + "_generate_stix_identity", + "_generate_stix_domain", + "_generate_stix_asn", + "_generate_stix_ip", + "_generate_stix_text", + "_upsert_stix_observable", + ], + "domain-name": [ + "_generate_stix_identity", + "_generate_stix_asn", + "_generate_stix_hostname", + "_generate_stix_hostname_domain_relationships", + "_generate_stix_ip", + "_generate_stix_x509", + "_generate_stix_text", + "_upsert_stix_observable", + ], + "x509-certificate": [ + "_generate_stix_identity", + "_generate_stix_domain", + "_generate_stix_asn", + "_generate_stix_hostname", + "_generate_stix_hostname_domain_relationships", + "_generate_stix_ip", + "_generate_stix_text", + "_upsert_stix_observable", + ], + "text": [ + "_generate_stix_identity", + "_generate_stix_domain", + "_generate_stix_asn", + "_generate_stix_hostname", + "_generate_stix_hostname_domain_relationships", + "_generate_stix_ip", + "_generate_stix_x509", + "_upsert_stix_observable", + ], + "indicator": [ + "_generate_stix_identity", + "_generate_stix_domain", + "_generate_stix_asn", + "_generate_stix_ip", + "_generate_stix_hostname", + "_generate_stix_hostname_domain_relationships", + "_generate_stix_x509", + ], +} + + +# ─── Riskscan ───────────────────────────────────────────────────────────────── +# Riskscan uses the old flat datascan data model, not the ctiscan layered model. +# Key structural differences: +# - ip_version: boolean field "ipv6" (True = IPv6) instead of integer "ip.version" +# - hostname: single merged list containing reverse DNS, forward DNS, and +# FQDNs from cert subject.commonname / subject.altname — no separate split +# - cert data: at the top level of the document (not nested under "cert") +# - cert field names: "commonname"/"altname" vs "cn"/"an"; "serial" is a +# plain string vs {"hex": "..."} +# - fingerprint.md5/sha1/sha256 at top level (not under "cert") +# - cve: flat "cve" field vs "component.cve" + +# For riskscan the summary style is "findings_table", not frequency counts. +# This list is used only to build the -fields: OQL parameter so the API returns +# exactly the fields needed to render the findings table. +_RISKSCAN_SUMMARYS: List[Tuple[str, int]] = [ + ("tag", 0), # risk tags, e.g. risk::opendatabase + ("cve", 0), + ("ip", 0), + ("port", 0), + ("transport", 0), + ("protocol", 0), + ("tls", 0), + ("hostname", 0), + ("organization", 0), +] + + +_RISKSCAN_TYPE_HANDLERS: Dict = { + "ipv4-addr": ( + lambda v: f"https://search.onyphe.io/search?q=category%3Ariskscan+ip%3A{v}", + "ONYPHE riskscan search for IP address {value}", + lambda v: v, + ), + "ipv6-addr": ( + lambda v: f"https://search.onyphe.io/search?q=category%3Ariskscan+ip%3A{v}", + "ONYPHE riskscan search for IP address {value}", + lambda v: v, + ), + "hostname": ( + lambda v: f"https://search.onyphe.io/search?q=category%3Ariskscan+hostname%3A{v}", + "ONYPHE riskscan search for hostname {value}", + lambda v: v, + ), + "domain-name": ( + lambda v: f"https://search.onyphe.io/search?q=category%3Ariskscan+domain%3A{v}", + "ONYPHE riskscan search for domain {value}", + lambda v: v, + ), + "x509-certificate": ( + lambda h: ( + ( + f"https://search.onyphe.io/search?q=category%3Ariskscan+" + f"fingerprint.{HASH_KEY_MAP[next(iter(h.keys())).upper()]}%3A{next(iter(h.values()))}" + ) + if isinstance(h, dict) and h + else None + ), + "ONYPHE riskscan search for certificate fingerprint ({algo})", + lambda h: next(iter(h.values())) if isinstance(h, dict) and h else None, + ), + "organization": ( + lambda v: f'https://search.onyphe.io/search?q=category%3Ariskscan+organization%3A"{v}"', + "ONYPHE riskscan search for organization {value}", + lambda v: v, + ), + "asn": ( + lambda v: f"https://search.onyphe.io/search?q=category%3Ariskscan+asn%3A{v}", + "ONYPHE riskscan search for ASN {value}", + lambda v: str(v), + ), +} + +# Paths in the riskscan (flat datascan) data model. +# cert_root: None means cert fields live at the document top level (not nested). +# cert_sha256: path to the cert SHA-256 fingerprint used as a dedup key. +# ip_version: "ipv6" is a boolean (True = IPv6, False/absent = IPv4). +# dns_hostname: "hostname" alone — this field already merges reverse DNS, +# forward DNS, and cert FQDNs; no need to query "reverse" separately. +_RISKSCAN_FIELD_MAP: Dict[str, Optional[object]] = { + "ip_dest": "ip", + "ip_version": "ipv6", # boolean: True = IPv6, False/absent = IPv4 + "ip_asn": "asn", + "ip_org": "organization", + "dns_domain": ["domain"], + "dns_hostname": ["hostname"], + "cert_root": None, # cert fields are at the document top level + "cert_sha256": "fingerprint.sha256", + "cve": "cve", +} + +_RISKSCAN_OQL_FILTERS: Dict[str, Optional[Callable]] = { + "ipv4-addr": lambda v: f"ip:{v}", + "ipv6-addr": lambda v: f"ip:{v}", + "hostname": lambda v: f"hostname:{v}", + "domain-name": lambda v: f"domain:{v}", + # x509-certificate is handled with special logic in _process_message +} + +_RISKSCAN_STIX_GENERATORS: Dict[str, List[str]] = { + "ipv4-addr": [ + "_generate_stix_identity", + "_generate_stix_domain", + "_generate_stix_asn", + "_generate_stix_hostname", + "_generate_stix_hostname_domain_relationships", + "_generate_stix_x509", + "_generate_stix_vulnerability", + "_upsert_stix_observable", + ], + "ipv6-addr": [ + "_generate_stix_identity", + "_generate_stix_domain", + "_generate_stix_asn", + "_generate_stix_hostname", + "_generate_stix_hostname_domain_relationships", + "_generate_stix_x509", + "_generate_stix_vulnerability", + "_upsert_stix_observable", + ], + "hostname": [ + "_generate_stix_identity", + "_generate_stix_domain", + "_generate_stix_asn", + "_generate_stix_ip", + "_generate_stix_x509", + "_generate_stix_vulnerability", + "_upsert_stix_observable", + ], + "domain-name": [ + "_generate_stix_identity", + "_generate_stix_asn", + "_generate_stix_hostname", + "_generate_stix_hostname_domain_relationships", + "_generate_stix_ip", + "_generate_stix_x509", + "_generate_stix_vulnerability", + "_upsert_stix_observable", + ], + "x509-certificate": [ + "_generate_stix_identity", + "_generate_stix_domain", + "_generate_stix_asn", + "_generate_stix_hostname", + "_generate_stix_hostname_domain_relationships", + "_generate_stix_ip", + "_generate_stix_vulnerability", + "_upsert_stix_observable", + ], + "indicator": [ + "_generate_stix_identity", + "_generate_stix_domain", + "_generate_stix_asn", + "_generate_stix_ip", + "_generate_stix_hostname", + "_generate_stix_hostname_domain_relationships", + "_generate_stix_x509", + "_generate_stix_vulnerability", + ], +} + + +# ─── Profile registry ───────────────────────────────────────────────────────── + + +@dataclass +class CategoryProfile: + category: str + summarys: List[Tuple[str, int]] + summary_titles: Dict[str, str] + type_handlers: Dict + field_map: Dict[str, Optional[object]] + oql_filters: Dict[str, Optional[Callable]] + stix_generators: Dict[str, List[str]] + summary_style: str = dc_field(default="frequency") + # "frequency": top-N value counts per field (ctiscan default) + # "findings_table": structured | Risk/CVE | IP:Port | Service | Hostname | Org | table + + +CATEGORY_PROFILES: Dict[str, CategoryProfile] = { + "ctiscan": CategoryProfile( + category="ctiscan", + summarys=_CTISCAN_SUMMARYS, + summary_titles=_CTISCAN_SUMMARY_TITLES, + type_handlers=_CTISCAN_TYPE_HANDLERS, + field_map=_CTISCAN_FIELD_MAP, + oql_filters=_CTISCAN_OQL_FILTERS, + stix_generators=_CTISCAN_STIX_GENERATORS, + ), + "riskscan": CategoryProfile( + category="riskscan", + summarys=_RISKSCAN_SUMMARYS, + summary_titles={}, + type_handlers=_RISKSCAN_TYPE_HANDLERS, + field_map=_RISKSCAN_FIELD_MAP, + oql_filters=_RISKSCAN_OQL_FILTERS, + stix_generators=_RISKSCAN_STIX_GENERATORS, + summary_style="findings_table", + ), +} diff --git a/internal-enrichment/onyphe/src/requirements.txt b/internal-enrichment/onyphe/src/requirements.txt index 967e4ce2077..cccf403e871 100644 --- a/internal-enrichment/onyphe/src/requirements.txt +++ b/internal-enrichment/onyphe/src/requirements.txt @@ -1,3 +1,3 @@ -requests -pycti==7.260309.0 +requests<=2.33.0 +pycti==7.260515.0 stix2 diff --git a/internal-enrichment/orange-cyberdefense-enrichment-v3/README.md b/internal-enrichment/orange-cyberdefense-enrichment-v3/README.md index 5e15e8376d6..43057490a2b 100644 --- a/internal-enrichment/orange-cyberdefense-enrichment-v3/README.md +++ b/internal-enrichment/orange-cyberdefense-enrichment-v3/README.md @@ -153,13 +153,13 @@ Therefore, what can be seen as multiple positive sightings for a single indicato ## Screenshots -### Indicators in OpenCTI +### Indicators ![image](./media/Indicator_1.png) ![image](./media/Indicator_2.png) ![image](./media/Indicator_3.png) -### Malwares in OpenCTI +### Malwares ![image](./media/Malware.png) -### Intrusion Sets in OpenCTI +### Intrusion Sets ![image](./media/Intrusion_set.png) \ No newline at end of file diff --git a/internal-enrichment/orange-cyberdefense-enrichment-v3/media/Indicator_1.png b/internal-enrichment/orange-cyberdefense-enrichment-v3/media/Indicator_1.png index 0521fcd18b4..f5710a7cff0 100644 Binary files a/internal-enrichment/orange-cyberdefense-enrichment-v3/media/Indicator_1.png and b/internal-enrichment/orange-cyberdefense-enrichment-v3/media/Indicator_1.png differ diff --git a/internal-enrichment/orange-cyberdefense-enrichment-v3/media/Indicator_2.png b/internal-enrichment/orange-cyberdefense-enrichment-v3/media/Indicator_2.png index b5830533845..a3d43be1c8c 100644 Binary files a/internal-enrichment/orange-cyberdefense-enrichment-v3/media/Indicator_2.png and b/internal-enrichment/orange-cyberdefense-enrichment-v3/media/Indicator_2.png differ diff --git a/internal-enrichment/orange-cyberdefense-enrichment-v3/media/Indicator_3.png b/internal-enrichment/orange-cyberdefense-enrichment-v3/media/Indicator_3.png index 1dabf96a0e4..2b9ba0cd168 100644 Binary files a/internal-enrichment/orange-cyberdefense-enrichment-v3/media/Indicator_3.png and b/internal-enrichment/orange-cyberdefense-enrichment-v3/media/Indicator_3.png differ diff --git a/internal-enrichment/orange-cyberdefense-enrichment-v3/media/Intrusion_set.png b/internal-enrichment/orange-cyberdefense-enrichment-v3/media/Intrusion_set.png index 3466a00ea8b..c8daa49945b 100644 Binary files a/internal-enrichment/orange-cyberdefense-enrichment-v3/media/Intrusion_set.png and b/internal-enrichment/orange-cyberdefense-enrichment-v3/media/Intrusion_set.png differ diff --git a/internal-enrichment/orange-cyberdefense-enrichment-v3/media/Malware.png b/internal-enrichment/orange-cyberdefense-enrichment-v3/media/Malware.png index 19a539171a0..68a94cd9371 100644 Binary files a/internal-enrichment/orange-cyberdefense-enrichment-v3/media/Malware.png and b/internal-enrichment/orange-cyberdefense-enrichment-v3/media/Malware.png differ diff --git a/internal-enrichment/orange-cyberdefense-enrichment-v3/src/main.py b/internal-enrichment/orange-cyberdefense-enrichment-v3/src/main.py index f20668090a3..58205fd5c36 100644 --- a/internal-enrichment/orange-cyberdefense-enrichment-v3/src/main.py +++ b/internal-enrichment/orange-cyberdefense-enrichment-v3/src/main.py @@ -442,8 +442,8 @@ def _process_message(self, data: dict): if ( self.ocd_enrich_add_createdby and processed_object["type"] == "identity" - and processed_object["identity_class"] == "organization" - and processed_object["name"] == "Orange Cyberdefense" + and processed_object.get("identity_class", None) == "organization" + and processed_object.get("name", None) == "Orange Cyberdefense" ): self.identity = processed_object # pylint: disable=W0201 if processed_object is None: diff --git a/internal-enrichment/orange-cyberdefense-enrichment-v3/src/requirements.txt b/internal-enrichment/orange-cyberdefense-enrichment-v3/src/requirements.txt index 3e4af55f05b..593249f364c 100644 --- a/internal-enrichment/orange-cyberdefense-enrichment-v3/src/requirements.txt +++ b/internal-enrichment/orange-cyberdefense-enrichment-v3/src/requirements.txt @@ -1,2 +1,2 @@ -pycti==7.260309.0 -datalake-scripts==3.0.0rc7 +pycti==7.260515.0 +datalake-scripts==3.0.0 \ No newline at end of file diff --git a/internal-enrichment/orion-malware/src/requirements.txt b/internal-enrichment/orion-malware/src/requirements.txt index e9684a32073..f5b8181a0c7 100644 --- a/internal-enrichment/orion-malware/src/requirements.txt +++ b/internal-enrichment/orion-malware/src/requirements.txt @@ -1 +1 @@ -pycti==7.260309.0 \ No newline at end of file +pycti==7.260515.0 \ No newline at end of file diff --git a/internal-enrichment/proofpoint-et-intelligence/src/requirements.txt b/internal-enrichment/proofpoint-et-intelligence/src/requirements.txt index 0b4dcb05de3..cd288aa8f22 100644 --- a/internal-enrichment/proofpoint-et-intelligence/src/requirements.txt +++ b/internal-enrichment/proofpoint-et-intelligence/src/requirements.txt @@ -1,7 +1,7 @@ -pycti==7.260309.0 +pycti==7.260515.0 validators==0.35.0 pydantic>=2.10.6, <3 -requests~=2.32.3 +requests~=2.33.0 stix2~=3.0.1 PyYAML==6.0.3 aiohttp~=3.13.2 diff --git a/internal-enrichment/recordedfuture-enrichment/src/requirements.txt b/internal-enrichment/recordedfuture-enrichment/src/requirements.txt index 454a4013164..a6f160f5888 100644 --- a/internal-enrichment/recordedfuture-enrichment/src/requirements.txt +++ b/internal-enrichment/recordedfuture-enrichment/src/requirements.txt @@ -1,8 +1,8 @@ -pycti==7.260309.0 +pycti==7.260515.0 pydantic==2.11.9 pydantic-settings==2.10.1 regex==2024.11.6 -requests==2.32.5 +requests==2.33.0 stix2==3.0.1 stix2-patterns==2.0.0 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk \ No newline at end of file diff --git a/internal-enrichment/recordedfuture-enrichment/tests/test-requirements.txt b/internal-enrichment/recordedfuture-enrichment/tests/test-requirements.txt index 79a9a1c3383..324afff2b84 100644 --- a/internal-enrichment/recordedfuture-enrichment/tests/test-requirements.txt +++ b/internal-enrichment/recordedfuture-enrichment/tests/test-requirements.txt @@ -1,2 +1,2 @@ -r ../src/requirements.txt -pytest==8.4.1 \ No newline at end of file +pytest==9.0.3 \ No newline at end of file diff --git a/internal-enrichment/reversinglabs-malware-presence/requirements.txt b/internal-enrichment/reversinglabs-malware-presence/requirements.txt index 208c7b790e7..667d4680965 100644 --- a/internal-enrichment/reversinglabs-malware-presence/requirements.txt +++ b/internal-enrichment/reversinglabs-malware-presence/requirements.txt @@ -1,2 +1,2 @@ -pycti==7.260309.0 +pycti==7.260515.0 reversinglabs-sdk-py3==2.11.4 diff --git a/internal-enrichment/reversinglabs-malware-presence/src/main.py b/internal-enrichment/reversinglabs-malware-presence/src/main.py index 6545d06c79c..36dabd113ef 100644 --- a/internal-enrichment/reversinglabs-malware-presence/src/main.py +++ b/internal-enrichment/reversinglabs-malware-presence/src/main.py @@ -163,7 +163,6 @@ def _generate_stix_indicator( return stix_indicator_with_relationship def _generate_stix_note(self, data): - now = datetime.now().strftime("%Y-%m-%dT%H:%M:%SZ") hash = data["rl"]["malware_presence"]["query_hash"] status = data["rl"]["malware_presence"]["status"] scanner_count = data["rl"]["malware_presence"]["scanner_count"] @@ -183,7 +182,7 @@ def _generate_stix_note(self, data): # Create Note stix_note = stix2.Note( - id=Note.generate_id(now, content), + id=Note.generate_id(None, content), abstract=abstract, content=content, created_by_ref=self.reversinglabs_identity["standard_id"], diff --git a/internal-enrichment/reversinglabs-spectra-analyze/requirements.txt b/internal-enrichment/reversinglabs-spectra-analyze/requirements.txt index 1ffd8f24baa..7a4ab1fcefe 100644 --- a/internal-enrichment/reversinglabs-spectra-analyze/requirements.txt +++ b/internal-enrichment/reversinglabs-spectra-analyze/requirements.txt @@ -1,3 +1,3 @@ -pycti==7.260309.0 +pycti==7.260515.0 reversinglabs-sdk-py3==2.11.4 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk diff --git a/internal-enrichment/reversinglabs-spectra-analyze/src/main.py b/internal-enrichment/reversinglabs-spectra-analyze/src/main.py index 3ebe43d1ccb..d3a490d5391 100644 --- a/internal-enrichment/reversinglabs-spectra-analyze/src/main.py +++ b/internal-enrichment/reversinglabs-spectra-analyze/src/main.py @@ -63,7 +63,6 @@ def wrapper(self, *args, **kwargs): class ReversingLabsSpectraAnalyzeConnector: - def __init__(self, config: ConfigLoader, helper: OpenCTIConnectorHelper): self.helper = helper self.config = config @@ -673,7 +672,6 @@ def _ip_report(self): resp_json = response.json() - now = datetime.now().strftime("%Y-%m-%dT%H:%M:%SZ") tp_statistics = resp_json.get("third_party_reputations", {}).get( "statistics", {} ) @@ -685,24 +683,24 @@ def _ip_report(self): Third party statistics | Status | Amount | | ------------- | --------------- | - | MALICIOUS | {tp_statistics.get('malicious')} | - | CLEAN | {tp_statistics.get('clean')} | - | SUSPICIOUS | {tp_statistics.get('suspicious')} | - | UNDETECTED | {tp_statistics.get('undetected')} | - | TOTAL | {tp_statistics.get('total')} | + | MALICIOUS | {tp_statistics.get("malicious")} | + | CLEAN | {tp_statistics.get("clean")} | + | SUSPICIOUS | {tp_statistics.get("suspicious")} | + | UNDETECTED | {tp_statistics.get("undetected")} | + | TOTAL | {tp_statistics.get("total")} | Downloaded files statistics | Status | Amount | | ------------- | --------------- | - | MALICIOUS | {dl_files_statistics.get('malicious')} | - | GOODWARE | {dl_files_statistics.get('goodware')} | - | SUSPICIOUS | {dl_files_statistics.get('suspicious')} | - | UNKNOWN | {dl_files_statistics.get('unknown')} | - | TOTAL | {dl_files_statistics.get('total')} | + | MALICIOUS | {dl_files_statistics.get("malicious")} | + | GOODWARE | {dl_files_statistics.get("goodware")} | + | SUSPICIOUS | {dl_files_statistics.get("suspicious")} | + | UNKNOWN | {dl_files_statistics.get("unknown")} | + | TOTAL | {dl_files_statistics.get("total")} | """) note = stix2.Note( - id=Note.generate_id(now, content), + id=Note.generate_id(None, content), abstract=abstract, content=content, created_by_ref=self.reversinglabs_identity.id, @@ -863,10 +861,8 @@ def _domain_reports(self, domain_list): content = accumulated_content - now = datetime.now().strftime("%Y-%m-%dT%H:%M:%SZ") - note = stix2.Note( - id=Note.generate_id(now, content), + id=Note.generate_id(None, content), abstract=abstract, content=content, created_by_ref=self.reversinglabs_identity.id, @@ -1003,10 +999,9 @@ def _url_reports(self, url_list): ) content = accumulated_content - now = datetime.now().strftime("%Y-%m-%dT%H:%M:%SZ") note = stix2.Note( - id=Note.generate_id(now, content), + id=Note.generate_id(None, content), abstract=abstract, content=content, created_by_ref=self.reversinglabs_identity.id, @@ -1117,24 +1112,24 @@ def _domain_report(self): Third party statistics | Status | Amount | | ------------- | --------------- | - | MALICIOUS | {tp_statistics.get('malicious')} | - | CLEAN | {tp_statistics.get('clean')} | - | SUSPICIOUS | {tp_statistics.get('suspicious')} | - | UNDETECTED | {tp_statistics.get('undetected')} | - | TOTAL | {tp_statistics.get('total')} | + | MALICIOUS | {tp_statistics.get("malicious")} | + | CLEAN | {tp_statistics.get("clean")} | + | SUSPICIOUS | {tp_statistics.get("suspicious")} | + | UNDETECTED | {tp_statistics.get("undetected")} | + | TOTAL | {tp_statistics.get("total")} | Downloaded files statistics | Status | Amount | | ------------- | --------------- | - | MALICIOUS | {dl_files_statistics.get('malicious')} | - | GOODWARE | {dl_files_statistics.get('goodware')} | - | SUSPICIOUS | {dl_files_statistics.get('suspicious')} | - | UNKNOWN | {dl_files_statistics.get('unknown')} | - | TOTAL | {dl_files_statistics.get('total')} | + | MALICIOUS | {dl_files_statistics.get("malicious")} | + | GOODWARE | {dl_files_statistics.get("goodware")} | + | SUSPICIOUS | {dl_files_statistics.get("suspicious")} | + | UNKNOWN | {dl_files_statistics.get("unknown")} | + | TOTAL | {dl_files_statistics.get("total")} | """) note = stix2.Note( - id=Note.generate_id(now, content), + id=Note.generate_id(None, content), abstract=abstract, content=content, created_by_ref=self.reversinglabs_identity.id, @@ -1237,24 +1232,24 @@ def _url_report(self): Third party statistics | Status | Amount | | ------------- | --------------- | - | MALICIOUS | {tp_stats.get('malicious')} | - | CLEAN | {tp_stats.get('clean')} | - | SUSPICIOUS | {tp_stats.get('suspicious')} | - | UNDETECTED | {tp_stats.get('undetected')} | - | TOTAL | {tp_stats.get('total')} | + | MALICIOUS | {tp_stats.get("malicious")} | + | CLEAN | {tp_stats.get("clean")} | + | SUSPICIOUS | {tp_stats.get("suspicious")} | + | UNDETECTED | {tp_stats.get("undetected")} | + | TOTAL | {tp_stats.get("total")} | Analysis statistics | Status | Amount | | ------------- | --------------- | - | MALICIOUS | {analysis_stats.get('malicious')} | - | GOODWARE | {analysis_stats.get('goodware')} | - | SUSPICIOUS | {analysis_stats.get('suspicious')} | - | UNKNOWN | {analysis_stats.get('unknown')} | - | TOTAL | {analysis_stats.get('total')} | + | MALICIOUS | {analysis_stats.get("malicious")} | + | GOODWARE | {analysis_stats.get("goodware")} | + | SUSPICIOUS | {analysis_stats.get("suspicious")} | + | UNKNOWN | {analysis_stats.get("unknown")} | + | TOTAL | {analysis_stats.get("total")} | """) note = stix2.Note( - id=Note.generate_id(now, content), + id=Note.generate_id(None, content), abstract=abstract, content=content, created_by_ref=self.reversinglabs_identity.id, @@ -1283,7 +1278,6 @@ def _process_malicious(self, stix_objects, stix_entity, results): if (results["classification"] == "malicious") or ( results["classification"] == "suspicious" ): - self.helper.connector_logger.info( f"{self.helper.connect_name}: Create STIX objects for malicious sample results!" ) diff --git a/internal-enrichment/reversinglabs-spectra-intel-submission/requirements.txt b/internal-enrichment/reversinglabs-spectra-intel-submission/requirements.txt index 208c7b790e7..667d4680965 100644 --- a/internal-enrichment/reversinglabs-spectra-intel-submission/requirements.txt +++ b/internal-enrichment/reversinglabs-spectra-intel-submission/requirements.txt @@ -1,2 +1,2 @@ -pycti==7.260309.0 +pycti==7.260515.0 reversinglabs-sdk-py3==2.11.4 diff --git a/internal-enrichment/reversinglabs-spectra-intel-submission/src/main.py b/internal-enrichment/reversinglabs-spectra-intel-submission/src/main.py index 513c3d6c8bb..44182f53df8 100644 --- a/internal-enrichment/reversinglabs-spectra-intel-submission/src/main.py +++ b/internal-enrichment/reversinglabs-spectra-intel-submission/src/main.py @@ -33,7 +33,6 @@ class ReversingLabsSpectraIntelConnector(InternalEnrichmentConnector): - def __init__(self): super().__init__() self._get_config_variables() @@ -206,7 +205,6 @@ def _generate_stix_malware(self, results): stix_malware_with_relationship.append(observable_to_malware) def _generate_stix_note(self, results): - now = datetime.now().strftime("%Y-%m-%dT%H:%M:%SZ") classification = results["classification"] platform = results["platform"] configuration = results["configuration"] @@ -261,9 +259,10 @@ def _generate_stix_note(self, results): # Create Note stix_note = stix2.Note( - id=Note.generate_id(now, content), + id=Note.generate_id(analysis_time, content), abstract=abstract, content=content, + created=analysis_time, created_by_ref=self.reversinglabs_identity["standard_id"], object_refs=[self.stix_entity["id"]], object_marking_refs=[stix2.TLP_AMBER], @@ -480,7 +479,6 @@ def _upload_file_to_spectra_sandbox(self, file_uri, is_archive, sample_name): # Submit File for analysis if is_archive == False: - file = open(sample_name, "wb") file.write(file_content) file.close() diff --git a/internal-enrichment/riskiq-passive-total/src/requirements.txt b/internal-enrichment/riskiq-passive-total/src/requirements.txt index df8df26471c..b13dd498ca2 100644 --- a/internal-enrichment/riskiq-passive-total/src/requirements.txt +++ b/internal-enrichment/riskiq-passive-total/src/requirements.txt @@ -1,2 +1,2 @@ -pycti==7.260309.0 +pycti==7.260515.0 pydantic>=2.8.2,<3.0.0 \ No newline at end of file diff --git a/internal-enrichment/rst-ioc-lookup/src/requirements.txt b/internal-enrichment/rst-ioc-lookup/src/requirements.txt index 7732ca4a4a0..90c686d5313 100644 --- a/internal-enrichment/rst-ioc-lookup/src/requirements.txt +++ b/internal-enrichment/rst-ioc-lookup/src/requirements.txt @@ -1,3 +1,3 @@ -pycti==7.260309.0 +pycti==7.260515.0 python-dateutil==2.9.0.post0 pytz==2025.2 \ No newline at end of file diff --git a/internal-enrichment/rst-noise-control/src/requirements.txt b/internal-enrichment/rst-noise-control/src/requirements.txt index 88fef3276e5..987f0e5d834 100644 --- a/internal-enrichment/rst-noise-control/src/requirements.txt +++ b/internal-enrichment/rst-noise-control/src/requirements.txt @@ -1,3 +1,3 @@ -pycti==7.260309.0 +pycti==7.260515.0 python-dateutil==2.9.0.post0 pytz==2025.2 \ No newline at end of file diff --git a/internal-enrichment/rst-whois-api/src/requirements.txt b/internal-enrichment/rst-whois-api/src/requirements.txt index 7732ca4a4a0..90c686d5313 100644 --- a/internal-enrichment/rst-whois-api/src/requirements.txt +++ b/internal-enrichment/rst-whois-api/src/requirements.txt @@ -1,3 +1,3 @@ -pycti==7.260309.0 +pycti==7.260515.0 python-dateutil==2.9.0.post0 pytz==2025.2 \ No newline at end of file diff --git a/internal-enrichment/shadowtrackr/src/requirements.txt b/internal-enrichment/shadowtrackr/src/requirements.txt index 4c019ec2a62..7a142f5ebca 100644 --- a/internal-enrichment/shadowtrackr/src/requirements.txt +++ b/internal-enrichment/shadowtrackr/src/requirements.txt @@ -1,7 +1,7 @@ -pycti==7.260309.0 +pycti==7.260515.0 ipaddress~=1.0 pydantic~=2.11 validators~=0.35 -requests~=2.32 +requests>=2.32,<=2.33.0 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk \ No newline at end of file diff --git a/internal-enrichment/shodan-internetdb/src/requirements.txt b/internal-enrichment/shodan-internetdb/src/requirements.txt index 3f213457f7c..c33a762304a 100644 --- a/internal-enrichment/shodan-internetdb/src/requirements.txt +++ b/internal-enrichment/shodan-internetdb/src/requirements.txt @@ -1,3 +1,3 @@ -pycti==7.260309.0 +pycti==7.260515.0 pydantic>=2.8.2,<3.0.0 validators==0.35.0 \ No newline at end of file diff --git a/internal-enrichment/shodan-internetdb/tests/test-requirements.txt b/internal-enrichment/shodan-internetdb/tests/test-requirements.txt index e5a31c769a2..45441582a4b 100644 --- a/internal-enrichment/shodan-internetdb/tests/test-requirements.txt +++ b/internal-enrichment/shodan-internetdb/tests/test-requirements.txt @@ -1,4 +1,4 @@ # Main dependencies needs to be installed -r ../src/requirements.txt -pytest==8.3.5 +pytest==9.0.3 pytest-mock==3.14.0 \ No newline at end of file diff --git a/internal-enrichment/shodan/src/requirements.txt b/internal-enrichment/shodan/src/requirements.txt index 0ff140b4f49..4d36c0ba3b1 100644 --- a/internal-enrichment/shodan/src/requirements.txt +++ b/internal-enrichment/shodan/src/requirements.txt @@ -1,4 +1,4 @@ -pycti==7.260309.0 +pycti==7.260515.0 shodan==1.31.0 pydantic >=2.8.2, <3 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk diff --git a/internal-enrichment/shodan/tests/test-requirements.txt b/internal-enrichment/shodan/tests/test-requirements.txt index bdef682113c..d405632324b 100644 --- a/internal-enrichment/shodan/tests/test-requirements.txt +++ b/internal-enrichment/shodan/tests/test-requirements.txt @@ -1,2 +1,2 @@ -r ../src/requirements.txt -pytest==8.4.2 +pytest==9.0.3 diff --git a/internal-enrichment/silentpush-enrichment/src/requirements.txt b/internal-enrichment/silentpush-enrichment/src/requirements.txt index e4757bb4f0d..97509aa3f2c 100644 --- a/internal-enrichment/silentpush-enrichment/src/requirements.txt +++ b/internal-enrichment/silentpush-enrichment/src/requirements.txt @@ -1,6 +1,6 @@ -pycti==7.260309.0 +pycti==7.260515.0 pyyaml~=6.0.2 pydantic~= 2.11.3 -requests~=2.32.3 +requests~=2.33.0 validators==0.35.0 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk \ No newline at end of file diff --git a/internal-enrichment/silentpush-enrichment/tests/test-requirements.txt b/internal-enrichment/silentpush-enrichment/tests/test-requirements.txt index b46752671ca..386ed5a0a36 100644 --- a/internal-enrichment/silentpush-enrichment/tests/test-requirements.txt +++ b/internal-enrichment/silentpush-enrichment/tests/test-requirements.txt @@ -1,3 +1,3 @@ # Main dependencies needs to be installed -r ../src/requirements.txt -pytest==8.4.2 +pytest==9.0.3 diff --git a/internal-enrichment/sophoslabs-intelix/src/requirements.txt b/internal-enrichment/sophoslabs-intelix/src/requirements.txt index 2cfca7054d1..ceece81b5df 100644 --- a/internal-enrichment/sophoslabs-intelix/src/requirements.txt +++ b/internal-enrichment/sophoslabs-intelix/src/requirements.txt @@ -1,2 +1,2 @@ -pycti==7.260309.0 +pycti==7.260515.0 validators==0.35.0 diff --git a/internal-enrichment/tagger/.build.env b/internal-enrichment/tagger/.build.env new file mode 100644 index 00000000000..24460762ca5 --- /dev/null +++ b/internal-enrichment/tagger/.build.env @@ -0,0 +1,2 @@ +CONNECTOR_CMD="connector.py" + diff --git a/internal-enrichment/tagger/src/requirements.txt b/internal-enrichment/tagger/src/requirements.txt index 1ba17c25468..ba5024094e6 100644 --- a/internal-enrichment/tagger/src/requirements.txt +++ b/internal-enrichment/tagger/src/requirements.txt @@ -1,4 +1,4 @@ -pycti==7.260309.0 +pycti==7.260515.0 pydantic>=2.10, <3 pydantic-settings==2.10.1 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk diff --git a/internal-enrichment/team-cymru-scout-search/.env.sample b/internal-enrichment/team-cymru-scout-search/.env.sample index d2a49ebee1b..0804c481cb2 100644 --- a/internal-enrichment/team-cymru-scout-search/.env.sample +++ b/internal-enrichment/team-cymru-scout-search/.env.sample @@ -6,7 +6,7 @@ OPENCTI_TOKEN= CONNECTOR_ID=scout-search-connector CONNECTOR_TYPE=INTERNAL_ENRICHMENT CONNECTOR_NAME=Scout Search Connector -CONNECTOR_SCOPE=Text +CONNECTOR_SCOPE=Indicator CONNECTOR_LOG_LEVEL=error # Pure Signal Scout Configuration @@ -14,3 +14,5 @@ PURE_SIGNAL_SCOUT_API_URL=https://taxii.cymru.com/api/scout PURE_SIGNAL_SCOUT_API_TOKEN= PURE_SIGNAL_SCOUT_MAX_TLP=TLP:AMBER PURE_SIGNAL_SCOUT_SEARCH_INTERVAL=1 +PURE_SIGNAL_SCOUT_INDICATOR_PATTERN_TYPE=pure-signal-scout +PURE_SIGNAL_SCOUT_PATTERN_DESCRIPTION="Scout Search Query Pattern" \ No newline at end of file diff --git a/internal-enrichment/team-cymru-scout-search/Makefile b/internal-enrichment/team-cymru-scout-search/Makefile index 74d3a3e5ab9..781aae135f6 100644 --- a/internal-enrichment/team-cymru-scout-search/Makefile +++ b/internal-enrichment/team-cymru-scout-search/Makefile @@ -10,10 +10,10 @@ help: @echo " docker-down - Stop docker-compose" install: - pip install -r requirements.txt + pip install -r src/requirements.txt run: - python -m src.scout_search_connector.main + cd src && python main.py clean: find . -type d -name __pycache__ -exec rm -rf {} + diff --git a/internal-enrichment/team-cymru-scout-search/README.md b/internal-enrichment/team-cymru-scout-search/README.md index 5bc6bf35bab..e759ad3e061 100644 --- a/internal-enrichment/team-cymru-scout-search/README.md +++ b/internal-enrichment/team-cymru-scout-search/README.md @@ -6,29 +6,31 @@ ## Table of Contents -- [Introduction](#introduction) -- [Installation](#installation) - - [Requirements](#requirements) -- [Configuration](#configuration) - - [OpenCTI Configuration](#opencti-configuration) - - [Base Connector Configuration](#base-connector-configuration) - - [Scout API Configuration](#scout-api-configuration) -- [Deployment](#deployment) - - [Docker Deployment](#docker-deployment) - - [Manual Deployment](#manual-deployment) -- [Usage](#usage) -- [Behavior](#behavior) - - [Data Flow](#data-flow) - - [API Endpoints](#api-endpoints) - - [Generated STIX Objects](#generated-stix-objects) -- [Debugging](#debugging) -- [Additional Information](#additional-information) +- [OpenCTI Team Cymru Scout Search Connector](#opencti-team-cymru-scout-search-connector) + - [Table of Contents](#table-of-contents) + - [Introduction](#introduction) + - [Installation](#installation) + - [Requirements](#requirements) + - [Configuration](#configuration) + - [Deployment](#deployment) + - [Docker Deployment](#docker-deployment) + - [Manual Deployment](#manual-deployment) + - [Usage](#usage) + - [Behavior](#behavior) + - [Data Flow](#data-flow) + - [API Endpoints](#api-endpoints) + - [Processing Details](#processing-details) + - [Generated STIX Objects](#generated-stix-objects) + - [Debugging](#debugging) + - [Additional Information](#additional-information) + - [Early Access](#early-access) + - [Use Case](#use-case-playbook-based-scout-query-enrichment) --- ## Introduction -**Scout Search Connector** is a powerful cyber threat intelligence tool that uniquely provides real-time visibility of external threats at speeds others cannot match. This internal enrichment connector allows OpenCTI users to query the Team Cymru Scout API using Text observables for playbook-based queries. +**Scout Search Connector** is a powerful cyber threat intelligence tool that uniquely provides real-time visibility of external threats at speeds others cannot match. This internal enrichment connector allows OpenCTI users to query the Team Cymru Scout API using Indicator observables for playbook-based queries. This connector queries the Scout API endpoints in real-time and transforms the response into standardized STIX 2.1 bundles compatible with the OpenCTI platform. @@ -74,12 +76,14 @@ services: - OPENCTI_TOKEN=ChangeMe - CONNECTOR_ID=scout-search-connector - CONNECTOR_NAME=Scout Search Connector - - CONNECTOR_SCOPE=Text + - CONNECTOR_SCOPE=Indicator - CONNECTOR_LOG_LEVEL=error - PURE_SIGNAL_SCOUT_API_URL=https://taxii.cymru.com/api/scout - PURE_SIGNAL_SCOUT_API_TOKEN=ChangeMe - PURE_SIGNAL_SCOUT_MAX_TLP=TLP:AMBER - PURE_SIGNAL_SCOUT_SEARCH_INTERVAL=1 + - PURE_SIGNAL_SCOUT_INDICATOR_PATTERN_TYPE=pure-signal-scout + - PURE_SIGNAL_SCOUT_PATTERN_DESCRIPTION=Scout Search Query Pattern restart: always ``` @@ -87,7 +91,7 @@ services: 1. Clone the repository 2. Copy `.env.sample` to `.env` and configure -3. Install dependencies: `pip install -r requirements.txt` +3. Install dependencies: `pip install -r src/requirements.txt` 4. Run the connector --- @@ -95,11 +99,11 @@ services: ## Usage The connector performs searches by: -1. Receiving Text observable enrichment requests (typically from playbooks) +1. Receiving Indicator observable enrichment requests (typically from playbooks) 2. Querying the Scout API with the search query 3. Returning STIX 2.1 bundles with search results -This connector is designed for playbook integration where Text observables contain search queries. +This connector is designed for playbook integration where Indicator observables contain search queries. --- @@ -109,7 +113,7 @@ This connector is designed for playbook integration where Text observables conta ```mermaid flowchart LR - A[Text Observable] --> B[Scout Search Connector] + A[Indicator Observable] --> B[Scout Search Connector] B --> C{Scout API} C --> D[Search Results] D --> E[STIX 2.1 Bundle] @@ -120,7 +124,7 @@ flowchart LR | Observable Type | API Endpoint | Description | |-----------------|--------------|-------------| -| Text | `/search?query={query}&days={days}` | Text-based search | +| Indicator | `/search?query={query}&days={days}` | Indicator-based search | ### Processing Details @@ -153,6 +157,46 @@ Enable debug logging by setting `CONNECTOR_LOG_LEVEL=debug` to see: --- +### Use Case: Playbook-Based Scout Query Enrichment + +This connector is designed for playbook-based searches where Scout query patterns are used to enrich indicators with threat intelligence data. Below is a step-by-step guide to set up automated enrichment. + +#### Step 1: Verify Connector Installation + +1. Navigate to **Data > Ingestion > Monitoring** in OpenCTI. +2. Confirm the **Scout Search Connector** appears in the list and is running. + +#### Step 2: Create and Configure a Playbook + +1. Navigate to **Data > Processing > Automation**. +2. Click **Create Playbook**, enter a name and description, then confirm. +3. In the playbook editor, click the empty run step and select a trigger type: + - **Manual execution:** Select _"Available for manual enrollment / trigger"_. + - **Scheduled execution:** Select _"Query knowledge on a regular basis"_. +4. Add a **Pattern type** filter and set the value to `pure-signal-scout`. +5. Add the **"Enrich through connector"** component and select **Scout Search Connector**. +6. Add the **"Send for ingestion"** component to store enriched data. +7. Start the playbook via the three-dot menu and verify it shows _"Playbook is running"_. + +#### Step 3: Create an Indicator + +1. Navigate to **Observations > Indicators**. +2. Click **Create Indicator** and configure: + - **Pattern type:** `pure-signal-scout` + - **Pattern:** A Scout query (e.g., `ip = 45.169.110.205` or `asn = "131279, 20485, 134544" comms.tag2 = "astrill-vpn, anydesk, pikvm"`) + - **Main observable type:** Text + - **Marking:** TLP:GREEN (or appropriate level within the configured max TLP) +3. Click **Create** to save. + +#### Step 4: Run and Verify Enrichment + +1. Open the indicator detail page. +2. Click **"Enroll in playbook"** and start the playbook, or use **manual enrichment** via the three-dot menu > Enrichment. +3. Wait for the enrichment and ingestion processes to complete. +4. Verify the **Knowledge** tab shows enriched relationships (IP addresses, indicators, autonomous systems, locations, etc.). + +--- + ## Additional Information - [Team Cymru](https://www.team-cymru.com/) @@ -161,7 +205,3 @@ Enable debug logging by setting `CONNECTOR_LOG_LEVEL=debug` to see: ### Early Access This connector is currently in early access. Please report any issues or feedback to help improve the connector. - -### Use Case - -This connector is primarily designed for playbook-based searches where complex queries need to be executed against the Scout API. Create a Text observable with your search query and trigger enrichment. diff --git a/internal-enrichment/team-cymru-scout-search/VERSION b/internal-enrichment/team-cymru-scout-search/VERSION index 8a9ecc2ea99..7bcd0e3612d 100644 --- a/internal-enrichment/team-cymru-scout-search/VERSION +++ b/internal-enrichment/team-cymru-scout-search/VERSION @@ -1 +1 @@ -0.0.1 \ No newline at end of file +0.0.2 \ No newline at end of file diff --git a/internal-enrichment/team-cymru-scout-search/__metadata__/CONNECTOR_CONFIG_DOC.md b/internal-enrichment/team-cymru-scout-search/__metadata__/CONNECTOR_CONFIG_DOC.md index c9cc189538f..c869a0b5e41 100644 --- a/internal-enrichment/team-cymru-scout-search/__metadata__/CONNECTOR_CONFIG_DOC.md +++ b/internal-enrichment/team-cymru-scout-search/__metadata__/CONNECTOR_CONFIG_DOC.md @@ -10,10 +10,12 @@ Below is an exhaustive enumeration of all configurable parameters available, eac | OPENCTI_TOKEN | `string` | ✅ | string | | The API token to connect to OpenCTI. | | PURE_SIGNAL_SCOUT_API_TOKEN | `string` | ✅ | Format: [`password`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | Bearer token for the Scout API | | CONNECTOR_NAME | `string` | | string | `"TeamCymruScoutSearch"` | The name of the connector. | -| CONNECTOR_SCOPE | `array` | | string | `["Text"]` | The scope of the connector. | +| CONNECTOR_SCOPE | `array` | | string | `["Indicator"]` | The scope of the connector. | | CONNECTOR_LOG_LEVEL | `string` | | `debug` `info` `warn` `warning` `error` | `"error"` | The minimum level of logs to display. | | CONNECTOR_TYPE | `const` | | `INTERNAL_ENRICHMENT` | `"INTERNAL_ENRICHMENT"` | | | CONNECTOR_AUTO | `boolean` | | boolean | `false` | Whether the connector should run automatically when an entity is created or updated. | | PURE_SIGNAL_SCOUT_API_URL | `string` | | string | `"https://taxii.cymru.com/api/scout"` | Base URL of the Scout API | | PURE_SIGNAL_SCOUT_MAX_TLP | `string` | | string | `"TLP:AMBER"` | Max TLP level for enrichment (default: TLP:AMBER) | | PURE_SIGNAL_SCOUT_SEARCH_INTERVAL | `integer` | | integer | `1` | Search interval in days (default: 1) | +| PURE_SIGNAL_SCOUT_INDICATOR_PATTERN_TYPE | `string` | | string | `"pure-signal-scout"` | Pattern type for Scout indicators | +| PURE_SIGNAL_SCOUT_PATTERN_DESCRIPTION | `string` | | string | `"Scout Search Query Pattern"` | Description for the Scout pattern type | diff --git a/internal-enrichment/team-cymru-scout-search/__metadata__/connector_config_schema.json b/internal-enrichment/team-cymru-scout-search/__metadata__/connector_config_schema.json index ad482a45a42..6cac185b7a3 100644 --- a/internal-enrichment/team-cymru-scout-search/__metadata__/connector_config_schema.json +++ b/internal-enrichment/team-cymru-scout-search/__metadata__/connector_config_schema.json @@ -21,7 +21,7 @@ }, "CONNECTOR_SCOPE": { "default": [ - "Text" + "Indicator" ], "description": "The scope of the connector.", "items": { @@ -71,6 +71,16 @@ "default": 1, "description": "Search interval in days (default: 1)", "type": "integer" + }, + "PURE_SIGNAL_SCOUT_INDICATOR_PATTERN_TYPE": { + "default": "pure-signal-scout", + "description": "Pattern type for Scout indicators", + "type": "string" + }, + "PURE_SIGNAL_SCOUT_PATTERN_DESCRIPTION": { + "default": "Scout Search Query Pattern", + "description": "Description for the Scout pattern type", + "type": "string" } }, "required": [ diff --git a/internal-enrichment/team-cymru-scout-search/__metadata__/connector_manifest.json b/internal-enrichment/team-cymru-scout-search/__metadata__/connector_manifest.json index 647353c4c29..4da709a570d 100644 --- a/internal-enrichment/team-cymru-scout-search/__metadata__/connector_manifest.json +++ b/internal-enrichment/team-cymru-scout-search/__metadata__/connector_manifest.json @@ -1,8 +1,8 @@ { "title": "Team Cymru Scout Search", "slug": "team-cymru-scout-search", - "description": "Scout Search Connector provides real-time visibility of external threats using Team Cymru Scout API. This connector enriches Text observables via playbook queries to retrieve threat intelligence.", - "short_description": "Enriches Text observables using Team Cymru Scout Search API for playbook-based threat intelligence queries.", + "description": "Scout Search Connector provides real-time visibility of external threats using Team Cymru Scout API. This connector enriches Indicator observables via playbook queries to retrieve threat intelligence.", + "short_description": "Enriches Indicator observables using Team Cymru Scout Search API for playbook-based threat intelligence queries.", "logo": "internal-enrichment/team-cymru-scout-search/__metadata__/logo.png", "use_cases": [ "Enrichment & Analysis" diff --git a/internal-enrichment/team-cymru-scout-search/config.yml.sample b/internal-enrichment/team-cymru-scout-search/config.yml.sample index f59048df141..5a41b17591f 100755 --- a/internal-enrichment/team-cymru-scout-search/config.yml.sample +++ b/internal-enrichment/team-cymru-scout-search/config.yml.sample @@ -6,7 +6,7 @@ connector: type: 'INTERNAL_ENRICHMENT' id: 'scout-search-connector' name: 'Scout Search Connector' - scope: 'Text' + scope: 'Indicator' log_level: 'error' pure_signal_scout: diff --git a/internal-enrichment/team-cymru-scout-search/docker-compose.yml b/internal-enrichment/team-cymru-scout-search/docker-compose.yml index a49787be7a3..eb84c5920fd 100755 --- a/internal-enrichment/team-cymru-scout-search/docker-compose.yml +++ b/internal-enrichment/team-cymru-scout-search/docker-compose.yml @@ -7,10 +7,12 @@ services: - OPENCTI_TOKEN=${OPENCTI_TOKEN:-} - CONNECTOR_ID=${CONNECTOR_ID:-scout-search-connector} - CONNECTOR_NAME=${CONNECTOR_NAME:-Scout Search Connector} - - CONNECTOR_SCOPE=${CONNECTOR_SCOPE:-Text} + - CONNECTOR_SCOPE=${CONNECTOR_SCOPE:-Indicator} - CONNECTOR_LOG_LEVEL=${CONNECTOR_LOG_LEVEL:-error} - PURE_SIGNAL_SCOUT_API_URL=${PURE_SIGNAL_SCOUT_API_URL:-https://taxii.cymru.com/api/scout} - PURE_SIGNAL_SCOUT_API_TOKEN=${PURE_SIGNAL_SCOUT_API_TOKEN:-} - PURE_SIGNAL_SCOUT_MAX_TLP=${PURE_SIGNAL_SCOUT_MAX_TLP:-TLP:AMBER} - PURE_SIGNAL_SCOUT_SEARCH_INTERVAL=${PURE_SIGNAL_SCOUT_SEARCH_INTERVAL:-1} + - PURE_SIGNAL_SCOUT_INDICATOR_PATTERN_TYPE=${PURE_SIGNAL_SCOUT_INDICATOR_PATTERN_TYPE:-pure-signal-scout} + - PURE_SIGNAL_SCOUT_PATTERN_DESCRIPTION=${PURE_SIGNAL_SCOUT_PATTERN_DESCRIPTION:-Scout Search Query Pattern} restart: always diff --git a/internal-enrichment/team-cymru-scout-search/src/main.py b/internal-enrichment/team-cymru-scout-search/src/main.py index 53602067490..fa3a64c87be 100755 --- a/internal-enrichment/team-cymru-scout-search/src/main.py +++ b/internal-enrichment/team-cymru-scout-search/src/main.py @@ -2,23 +2,21 @@ from pycti import OpenCTIConnectorHelper from scout_search_connector import ConnectorSettings, ScoutSearchConnectorConnector +from scout_search_connector.setup_pattern_type import setup_vocabulary if __name__ == "__main__": - """ - Entry point of the script - - - traceback.print_exc(): This function prints the traceback of the exception to the standard error (stderr). - The traceback includes information about the point in the program where the exception occurred, - which is very useful for debugging purposes. - - exit(1): effective way to terminate a Python program when an error is encountered. - It signals to the operating system and any calling processes that the program did not complete successfully. - """ try: settings = ConnectorSettings() helper = OpenCTIConnectorHelper( config=settings.to_helper_config(), playbook_compatible=True ) + setup_vocabulary( + helper, + settings.pure_signal_scout.indicator_pattern_type, + settings.pure_signal_scout.pattern_description, + ) + connector = ScoutSearchConnectorConnector(config=settings, helper=helper) connector.run() except Exception: diff --git a/internal-enrichment/team-cymru-scout-search/src/requirements.txt b/internal-enrichment/team-cymru-scout-search/src/requirements.txt index 425ee55fe75..6615a3e40c3 100755 --- a/internal-enrichment/team-cymru-scout-search/src/requirements.txt +++ b/internal-enrichment/team-cymru-scout-search/src/requirements.txt @@ -1,6 +1,6 @@ -pycti==7.260309.0 +pycti==7.260515.0 stix2>=3.0.0 -requests>=2.28.0 +requests>=2.28.0,<=2.33.0 pyyaml>=6.0 python-dateutil>=2.8.0 pydantic >=2.8.2, <3 diff --git a/internal-enrichment/team-cymru-scout-search/src/scout_search_connector/__init__.py b/internal-enrichment/team-cymru-scout-search/src/scout_search_connector/__init__.py old mode 100755 new mode 100644 diff --git a/internal-enrichment/team-cymru-scout-search/src/scout_search_connector/client_api.py b/internal-enrichment/team-cymru-scout-search/src/scout_search_connector/client_api.py old mode 100755 new mode 100644 index 9c392d18777..a7b8c90d9f8 --- a/internal-enrichment/team-cymru-scout-search/src/scout_search_connector/client_api.py +++ b/internal-enrichment/team-cymru-scout-search/src/scout_search_connector/client_api.py @@ -105,30 +105,20 @@ def search_query(self, query: str) -> dict: days = self.config.search_interval return self._request_data(endpoint, params={"query": query, "days": days}) - def get_entity(self, observable_type: str, observable_value: str) -> dict: + def get_entity(self, pattern: str) -> dict: """ - Fetch the STIX bundle for the given observable. - Supports: Text + Fetch the STIX bundle for the given pattern. """ try: self.helper.connector_logger.info( - "[ScoutSearchConnector] Processing observable", - {"type": observable_type, "value": observable_value}, + "[ScoutSearchConnector] Processing pattern", + {"pattern": pattern}, ) - - if observable_type == "Text": - return self.search_query(observable_value) - - # No else needed here - self.helper.connector_logger.warning( - "[ScoutSearchConnector] Unsupported observable type", - {"observable_type": observable_type, "value": observable_value}, - ) - return {} + return self.search_query(pattern) except Exception as e: self.helper.connector_logger.error( "[ScoutSearchConnector] Error processing entity", - {"type": observable_type, "value": observable_value, "error": str(e)}, + {"pattern": pattern, "error": str(e)}, ) return {} diff --git a/internal-enrichment/team-cymru-scout-search/src/scout_search_connector/connector.py b/internal-enrichment/team-cymru-scout-search/src/scout_search_connector/connector.py index 15890af937b..306ef4c3d37 100644 --- a/internal-enrichment/team-cymru-scout-search/src/scout_search_connector/connector.py +++ b/internal-enrichment/team-cymru-scout-search/src/scout_search_connector/connector.py @@ -16,6 +16,7 @@ def __init__(self, config): self.api_key = config.pure_signal_scout.api_token.get_secret_value() self.max_tlp = config.pure_signal_scout.max_tlp self.search_interval = config.pure_signal_scout.search_interval + self.pattern_type = config.pure_signal_scout.indicator_pattern_type class ScoutSearchConnectorConnector: @@ -122,7 +123,10 @@ def process_stix_data(self, data: Dict, original_entity_id: str) -> list: "identity", "x509-certificate", ]: - # Create a relationship between the text and this object + # Skip self-referencing relationships + if obj.get("id") == original_entity_id: + continue + # Create a relationship between the Indicator and this object now = datetime.now(timezone.utc) relationship_id = StixCoreRelationship.generate_id( "related-to", original_entity_id, obj.get("id") @@ -188,8 +192,8 @@ def _process_relationship( if source_type == "network-traffic" or target_type == "network-traffic": return False - # Skip redundant domain-to-domain relationships - if source_type == target_type == "domain-name" and source_ref == target_ref: + # Skip self-referencing relationships + if source_ref == target_ref: return False # Skip irrelevant relationship types @@ -210,59 +214,65 @@ def _process_relationship( def send_bundle(self, stix_objects: list) -> str: stix_objects_bundle = self.helper.stix2_create_bundle(stix_objects) - bundles_sent = self.helper.send_stix2_bundle( - stix_objects_bundle, cleanup_inconsistent_bundle=True - ) - info_msg = f"Sending {len(bundles_sent)} stix bundle(s) for worker import" - return info_msg + bundles_sent = self.helper.send_stix2_bundle(stix_objects_bundle) + return f"Sending {len(bundles_sent)} stix bundle(s) for worker import" def process_message(self, data: Dict) -> str: """Process enrichment message from OpenCTI""" try: - opencti_entity = data["enrichment_entity"] + opencti_entity = data.get("enrichment_entity") self.extract_and_check_markings(opencti_entity) self.helper.connector_logger.info( "[ScoutSearchConnector] Enrichment message received", data ) entity_id = opencti_entity["standard_id"] - observable_type = opencti_entity["entity_type"] - observable_value = opencti_entity["value"] + entity_type = opencti_entity["entity_type"] + pattern = opencti_entity["pattern"] + pattern_type = opencti_entity["pattern_type"] self.helper.connector_logger.info( "[ScoutSearchConnector] Processing enrichment request", { "entity_id": entity_id, - "observable_type": observable_type, - "observable_value": observable_value, + "entity_type": entity_type, + "pattern": pattern, + "pattern_type": pattern_type, }, ) - # Check if observable type is in scope - if observable_type not in ["Text"]: + # Check if entity type is in scope + if entity_type != "Indicator": self.helper.connector_logger.warning( - "[ScoutSearchConnector] Observable type not in scope, returning original entity", - {"observable_type": observable_type}, + "[ScoutSearchConnector] Entity type not in scope", + {"entity_type": entity_type}, ) if not data.get("event_type"): - # If it is not in scope AND entity bundle passed through playbook, we should return the original bundle unchanged return self.send_bundle(data["stix_objects"]) - return "Observable type not in connector scope" + return "Entity type not in connector scope" - intelligence_data = self.client.get_entity( - observable_type, observable_value - ) + if pattern_type != self.client.config.pattern_type: + self.helper.connector_logger.warning( + "[ScoutSearchConnector] Unsupported pattern type", + { + "configured_pattern_type": self.client.config.pattern_type, + "received_pattern_type": pattern_type, + }, + ) + return "Unsupported pattern type" + + intelligence_data = self.client.get_entity(pattern) - if not intelligence_data: + if not intelligence_data or not intelligence_data.get("objects"): self.helper.connector_logger.info( "[ScoutSearchConnector] No intelligence data found", - {"observable_value": observable_value}, + {"pattern": pattern}, ) return "No intelligence data found" self.helper.connector_logger.info( "[ScoutSearchConnector] Processing STIX bundle", { - "observable_value": observable_value, + "pattern": pattern, "bundle_objects": len(intelligence_data.get("objects", [])), }, ) @@ -275,7 +285,7 @@ def process_message(self, data: Dict) -> str: if len(processed_data) < 2: # Just the author identity self.helper.connector_logger.info( "[ScoutSearchConnector] No processed data found", - {"observable_value": observable_value}, + {"pattern": pattern}, ) return "No Enrichment Data Found from API" @@ -283,7 +293,7 @@ def process_message(self, data: Dict) -> str: self.helper.connector_logger.info( "[ScoutSearchConnector] Data ingestion started", - {"observable_value": observable_value}, + {"pattern": pattern}, ) return "Data fetched successfully and ingestion process has started" diff --git a/internal-enrichment/team-cymru-scout-search/src/scout_search_connector/settings.py b/internal-enrichment/team-cymru-scout-search/src/scout_search_connector/settings.py index 20ae5a29f9a..2c5f1e91253 100644 --- a/internal-enrichment/team-cymru-scout-search/src/scout_search_connector/settings.py +++ b/internal-enrichment/team-cymru-scout-search/src/scout_search_connector/settings.py @@ -23,7 +23,7 @@ class InternalEnrichmentConnectorConfig(BaseInternalEnrichmentConnectorConfig): ) scope: ListFromString = Field( description="The scope of the connector.", - default=["Text"], + default=["Indicator"], ) @@ -44,6 +44,14 @@ class TeamCymruScoutSearchConfig(BaseConfigModel): search_interval: int = Field( description="Search interval in days (default: 1)", default=1 ) + indicator_pattern_type: str = Field( + description="Pattern type for Scout indicators", + default="pure-signal-scout", + ) + pattern_description: str = Field( + description="Description for the Scout pattern type", + default="Scout Search Query Pattern", + ) class ConnectorSettings(BaseConnectorSettings): diff --git a/internal-enrichment/team-cymru-scout-search/src/scout_search_connector/setup_pattern_type.py b/internal-enrichment/team-cymru-scout-search/src/scout_search_connector/setup_pattern_type.py new file mode 100644 index 00000000000..afb8f548d22 --- /dev/null +++ b/internal-enrichment/team-cymru-scout-search/src/scout_search_connector/setup_pattern_type.py @@ -0,0 +1,36 @@ +import sys + + +def setup_vocabulary(helper, pattern_type, pattern_description=None): + """ + Register a custom vocabulary pattern type in OpenCTI. + Uses the connector's existing OpenCTIConnectorHelper instance. + """ + if not pattern_type: + helper.connector_logger.warning( + "[ScoutSearchConnector] No pattern type configured, skipping vocabulary setup" + ) + return + + try: + helper.api.vocabulary.create( + category="pattern_type_ov", + name=pattern_type, + description=pattern_description, + ) + helper.connector_logger.info( + "[ScoutSearchConnector] Vocabulary added", + {"pattern_type": pattern_type}, + ) + except Exception as e: + if "already exists" in str(e).lower(): + helper.connector_logger.info( + "[ScoutSearchConnector] Vocabulary already exists", + {"pattern_type": pattern_type}, + ) + else: + sys.stderr.write(f"Failed to add vocabulary: {str(e)}\n") + helper.connector_logger.warning( + "[ScoutSearchConnector] Failed to add vocabulary, continuing", + {"error": str(e)}, + ) diff --git a/internal-enrichment/team-cymru-scout-search/src/scout_search_connector/utils.py b/internal-enrichment/team-cymru-scout-search/src/scout_search_connector/utils.py old mode 100755 new mode 100644 diff --git a/internal-enrichment/team-cymru-scout-search/tests/test-requirements.txt b/internal-enrichment/team-cymru-scout-search/tests/test-requirements.txt index bdef682113c..d405632324b 100644 --- a/internal-enrichment/team-cymru-scout-search/tests/test-requirements.txt +++ b/internal-enrichment/team-cymru-scout-search/tests/test-requirements.txt @@ -1,2 +1,2 @@ -r ../src/requirements.txt -pytest==8.4.2 +pytest==9.0.3 diff --git a/internal-enrichment/team-cymru-scout/src/requirements.txt b/internal-enrichment/team-cymru-scout/src/requirements.txt index 3b7c9a39f57..cfd654ae525 100644 --- a/internal-enrichment/team-cymru-scout/src/requirements.txt +++ b/internal-enrichment/team-cymru-scout/src/requirements.txt @@ -1,6 +1,6 @@ -pycti==7.260309.0 +pycti==7.260515.0 stix2>=3.0.0 -requests>=2.28.0 +requests>=2.28.0,<=2.33.0 pyyaml>=6.0 python-dateutil>=2.8.0 pydantic >=2.8.2, <3 diff --git a/internal-enrichment/team-cymru-scout/tests/test-requirements.txt b/internal-enrichment/team-cymru-scout/tests/test-requirements.txt index b46752671ca..386ed5a0a36 100644 --- a/internal-enrichment/team-cymru-scout/tests/test-requirements.txt +++ b/internal-enrichment/team-cymru-scout/tests/test-requirements.txt @@ -1,3 +1,3 @@ # Main dependencies needs to be installed -r ../src/requirements.txt -pytest==8.4.2 +pytest==9.0.3 diff --git a/internal-enrichment/unpac-me/src/requirements.txt b/internal-enrichment/unpac-me/src/requirements.txt index e1e0bd9718c..e3a19393203 100644 --- a/internal-enrichment/unpac-me/src/requirements.txt +++ b/internal-enrichment/unpac-me/src/requirements.txt @@ -1 +1 @@ -pycti==7.260309.0 +pycti==7.260515.0 diff --git a/internal-enrichment/urlscan-enrichment/src/requirements.txt b/internal-enrichment/urlscan-enrichment/src/requirements.txt index c55331d2020..28ced3192ed 100644 --- a/internal-enrichment/urlscan-enrichment/src/requirements.txt +++ b/internal-enrichment/urlscan-enrichment/src/requirements.txt @@ -1,3 +1,3 @@ -pycti==7.260309.0 +pycti==7.260515.0 pydantic >=2.8.2, <3 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk diff --git a/internal-enrichment/urlscan-enrichment/src/urlscan_enrichment_services/client.py b/internal-enrichment/urlscan-enrichment/src/urlscan_enrichment_services/client.py index 7d1b96ad577..2506cdde16e 100644 --- a/internal-enrichment/urlscan-enrichment/src/urlscan_enrichment_services/client.py +++ b/internal-enrichment/urlscan-enrichment/src/urlscan_enrichment_services/client.py @@ -17,12 +17,16 @@ def __init__( helper: OpenCTIConnectorHelper, api_key: str | None, default_scan_visibility: Literal["public", "unlisted", "private"], + import_screenshot: bool = True, ): self.helper = helper self.base_url = "https://urlscan.io/api/v1/" self.api_key = api_key self.default_visibility = default_scan_visibility + # Skip the "no screenshot returned" warning when screenshot ingestion + # is disabled, since the absence of a screenshot is then expected. + self.import_screenshot = import_screenshot self.constants = UrlscanConstants # Define headers in session and update when needed headers = {"API-Key": self.api_key, "Content-Type": "application/json"} @@ -154,7 +158,7 @@ def urlscan_result(self, uuid: str) -> dict: "response" ]["dataLength"] - if data_length == 0: + if data_length == 0 and self.import_screenshot: self.helper.connector_logger.warning( "[API-RESULT] The request has been submitted to URLScan, " "but the URL does not return any screenshot." @@ -173,7 +177,7 @@ def urlscan_result(self, uuid: str) -> dict: else: result = response.json() data_length = result["data"]["requests"][0]["response"]["dataLength"] - if data_length == 0: + if data_length == 0 and self.import_screenshot: self.helper.connector_logger.warning( "[API-RESULT] The request has been submitted to URLScan, " "but the URL does not return any screenshot." diff --git a/internal-enrichment/urlscan-enrichment/src/urlscan_enrichment_services/connector.py b/internal-enrichment/urlscan-enrichment/src/urlscan_enrichment_services/connector.py index 8da689bed59..7c409adf957 100644 --- a/internal-enrichment/urlscan-enrichment/src/urlscan_enrichment_services/connector.py +++ b/internal-enrichment/urlscan-enrichment/src/urlscan_enrichment_services/connector.py @@ -21,6 +21,7 @@ def __init__(self, config: ConnectorSettings, helper: OpenCTIConnectorHelper): self.helper, api_key=self.config.urlscan_enrichment.api_key.get_secret_value(), default_scan_visibility=self.config.urlscan_enrichment.visibility, + import_screenshot=self.config.urlscan_enrichment.import_screenshot, ) self.converter = UrlscanConverter( self.helper, diff --git a/internal-enrichment/urlscan-enrichment/tests/test-requirements.txt b/internal-enrichment/urlscan-enrichment/tests/test-requirements.txt index bdef682113c..d405632324b 100644 --- a/internal-enrichment/urlscan-enrichment/tests/test-requirements.txt +++ b/internal-enrichment/urlscan-enrichment/tests/test-requirements.txt @@ -1,2 +1,2 @@ -r ../src/requirements.txt -pytest==8.4.2 +pytest==9.0.3 diff --git a/internal-enrichment/virustotal-downloader/src/requirements.txt b/internal-enrichment/virustotal-downloader/src/requirements.txt index b69ff666b79..475f0cf1761 100644 --- a/internal-enrichment/virustotal-downloader/src/requirements.txt +++ b/internal-enrichment/virustotal-downloader/src/requirements.txt @@ -1,4 +1,4 @@ -pycti==7.260309.0 +pycti==7.260515.0 pydantic>=2.10, <3 pydantic-settings==2.10.1 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk \ No newline at end of file diff --git a/internal-enrichment/virustotal/__metadata__/CONNECTOR_CONFIG_DOC.md b/internal-enrichment/virustotal/__metadata__/CONNECTOR_CONFIG_DOC.md index 23ec7d4662d..1808aba642a 100644 --- a/internal-enrichment/virustotal/__metadata__/CONNECTOR_CONFIG_DOC.md +++ b/internal-enrichment/virustotal/__metadata__/CONNECTOR_CONFIG_DOC.md @@ -10,7 +10,7 @@ Below is an exhaustive enumeration of all configurable parameters available, eac | OPENCTI_TOKEN | `string` | ✅ | string | | The token of the user who represents the connector in the OpenCTI platform. | | VIRUSTOTAL_TOKEN | `string` | ✅ | Format: [`password`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | VirusTotal API token for authentication. | | CONNECTOR_NAME | `string` | | string | `"VirusTotal"` | Name of the connector. | -| CONNECTOR_SCOPE | `array` | | string | `["StixFile", "Artifact", "IPv4-Addr", "Domain-Name", "Url", "Hostname"]` | The scope or type of data the connector is importing, either a MIME type or Stix Object (for information only). | +| CONNECTOR_SCOPE | `array` | | string | `["StixFile", "Artifact", "IPv4-Addr", "Domain-Name", "Url", "Hostname", "Indicator"]` | The scope or type of data the connector is importing, either a MIME type or Stix Object (for information only). | | CONNECTOR_TYPE | `string` | | string | `"INTERNAL_ENRICHMENT"` | Should always be set to INTERNAL_ENRICHMENT for this connector. | | CONNECTOR_AUTO | `boolean` | | boolean | `false` | Enables or disables automatic enrichment of observables for OpenCTI. | | CONNECTOR_LOG_LEVEL | `string` | | `debug` `info` `warn` `warning` `error` | `"error"` | Determines the verbosity of the logs. | diff --git a/internal-enrichment/virustotal/__metadata__/connector_config_schema.json b/internal-enrichment/virustotal/__metadata__/connector_config_schema.json index e081bdb639b..4cc806f9074 100644 --- a/internal-enrichment/virustotal/__metadata__/connector_config_schema.json +++ b/internal-enrichment/virustotal/__metadata__/connector_config_schema.json @@ -26,7 +26,8 @@ "IPv4-Addr", "Domain-Name", "Url", - "Hostname" + "Hostname", + "Indicator" ], "description": "The scope or type of data the connector is importing, either a MIME type or Stix Object (for information only).", "items": { diff --git a/internal-enrichment/virustotal/src/.env.sample b/internal-enrichment/virustotal/src/.env.sample index d786a6d4cb8..4c1fbf909c9 100644 --- a/internal-enrichment/virustotal/src/.env.sample +++ b/internal-enrichment/virustotal/src/.env.sample @@ -3,7 +3,7 @@ OPENCTI_TOKEN=ChangeMe #CONNECTOR_ID=ChangeMe #CONNECTOR_NAME=VirusTotal -#CONNECTOR_SCOPE=StixFile,Artifact,IPv4-Addr,Domain-Name,Url,Hostname +#CONNECTOR_SCOPE=StixFile,Artifact,IPv4-Addr,Domain-Name,Url,Hostname,Indicator #CONNECTOR_AUTO=false #CONNECTOR_LOG_LEVEL=error #CONNECTOR_EXPOSE_METRICS=false diff --git a/internal-enrichment/virustotal/src/config.yml.sample b/internal-enrichment/virustotal/src/config.yml.sample index 244be49d500..c776681e95b 100644 --- a/internal-enrichment/virustotal/src/config.yml.sample +++ b/internal-enrichment/virustotal/src/config.yml.sample @@ -6,7 +6,7 @@ opencti: # type: 'INTERNAL_ENRICHMENT' # id: 'ChangeMe' # name: 'VirusTotal' -# scope: 'StixFile,Artifact,IPv4-Addr,Domain-Name,Url' +# scope: 'StixFile,Artifact,IPv4-Addr,Domain-Name,Url,Indicator' # auto: false # Enable/disable auto-enrichment of observables # log_level: 'error' # expose_metrics: false diff --git a/internal-enrichment/virustotal/src/requirements.txt b/internal-enrichment/virustotal/src/requirements.txt index d3f0cfb12d3..36388618b9c 100644 --- a/internal-enrichment/virustotal/src/requirements.txt +++ b/internal-enrichment/virustotal/src/requirements.txt @@ -1,4 +1,4 @@ -pycti==7.260309.0 +pycti==7.260515.0 pydantic>=2.11, <3 pydantic-settings==2.11.0 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk diff --git a/internal-enrichment/virustotal/src/virustotal/__init__.py b/internal-enrichment/virustotal/src/virustotal/__init__.py index 418cf441b81..37dc180eb4c 100644 --- a/internal-enrichment/virustotal/src/virustotal/__init__.py +++ b/internal-enrichment/virustotal/src/virustotal/__init__.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- """VirusTotal connector module.""" from .models.configs.config_loader import ConfigLoader diff --git a/internal-enrichment/virustotal/src/virustotal/builder.py b/internal-enrichment/virustotal/src/virustotal/builder.py index cae7e9358d0..8c8f034016e 100644 --- a/internal-enrichment/virustotal/src/virustotal/builder.py +++ b/internal-enrichment/virustotal/src/virustotal/builder.py @@ -1,14 +1,13 @@ -# -*- coding: utf-8 -*- """VirusTotal builder module.""" import datetime import json -from typing import Optional import plyara import plyara.utils import stix2 from pycti import ( + STIX_EXT_OCTI, STIX_EXT_OCTI_SCO, Indicator, Location, @@ -32,8 +31,9 @@ def __init__( stix_entity: dict, opencti_entity: dict, data: dict, - include_attributes_in_note: Optional[bool] = False, + include_attributes_in_note: bool = False, url_related_object_data: dict = {}, + is_indicator: bool = False, ) -> None: """Initialize Virustotal builder.""" self.helper = helper @@ -43,13 +43,20 @@ def __init__( self.opencti_entity = opencti_entity self.stix_entity = stix_entity self.attributes = data["attributes"] - self.score = self._compute_score(self.attributes["last_analysis_stats"]) + self.score = self._compute_score( + self.attributes["last_analysis_stats"], + self.attributes.get("gti_assessment"), + ) self.include_attributes_in_note = include_attributes_in_note self.url_related_object_data = url_related_object_data + self.is_indicator = is_indicator + + # Indicators use STIX_EXT_OCTI (SDO extension); observables use STIX_EXT_OCTI_SCO. + self._stix_ext = STIX_EXT_OCTI if is_indicator else STIX_EXT_OCTI_SCO - # Update score of observable. + # Update score of the entity. OpenCTIStix2.put_attribute_in_extension( - stix_entity, STIX_EXT_OCTI_SCO, "score", self.score + stix_entity, self._stix_ext, "score", self.score ) # Add the external reference. @@ -63,7 +70,7 @@ def __init__( else: self.external_reference = None - def _compute_score(self, stats: dict) -> int: + def _compute_score(self, stats: dict, gti_assessment: dict | None) -> int: """ Compute the score for the observable. @@ -79,6 +86,19 @@ def _compute_score(self, stats: dict) -> int: int Score, in percent, rounded. """ + # Retrieve score from GTI assessment if it exists + if ( + gti_assessment is not None + and (threat_score := gti_assessment.get("threat_score")) is not None + ): + self.helper.log_debug( + f"[VirusTotal] GTI assessment found with threat score {threat_score}, using it as score" + ) + if (vt_score := threat_score.get("value")) is not None: + return vt_score + + # Fallback to computing score from last_analysis_stats if GTI assessment + # is not available or doesn't contain a threat score try: vt_score = round( ( @@ -109,7 +129,7 @@ def _compute_score(self, stats: dict) -> int: def create_asn_belongs_to(self): """Create AutonomousSystem and Relationship between the observable.""" if self.attributes.get("asn", None): - self.helper.log_debug(f'[VirusTotal] creating asn {self.attributes["asn"]}') + self.helper.log_debug(f"[VirusTotal] creating asn {self.attributes['asn']}") as_stix = stix2.AutonomousSystem( number=self.attributes.get("asn"), name=self.attributes.get("as_owner", None), @@ -165,7 +185,7 @@ def _create_external_reference( } OpenCTIStix2.put_attribute_in_extension( self.stix_entity, - STIX_EXT_OCTI_SCO, + self._stix_ext, "external_references", external_reference, True, @@ -182,6 +202,8 @@ def create_indicator_based_on( Objects created are added in the bundle. + Skipped when already enriching an Indicator (is_indicator=True). + Parameters ---------- indicator_config : IndicatorConfig @@ -189,7 +211,13 @@ def create_indicator_based_on( pattern : str Stix pattern for the indicator. """ - now_time = datetime.datetime.utcnow() + if self.is_indicator: + self.helper.log_debug( + "[VirusTotal] skipping indicator creation: entity is already an Indicator" + ) + return + + now_time = datetime.datetime.now(datetime.timezone.utc) # Create an Indicator if positive hits >= ip_indicator_create_positives specified in config if ( @@ -282,7 +310,7 @@ def create_location_located_at(self): """Create a Location and link it to the observable.""" if self.attributes.get("country", None): self.helper.log_debug( - f'[VirusTotal] creating location with country {self.attributes["country"]}' + f"[VirusTotal] creating location with country {self.attributes['country']}" ) location_stix = stix2.Location( id=Location.generate_id(self.attributes["country"], "Country"), @@ -328,7 +356,9 @@ def create_note(self, abstract: str, content: str): self.helper.log_debug(f"[VirusTotal] creating note with abstract {abstract}") self.bundle.append( stix2.Note( - id=Note.generate_id(datetime.datetime.now().isoformat(), content), + id=Note.generate_id( + datetime.datetime.now(datetime.timezone.utc).isoformat(), content + ), abstract=abstract, content=content, created_by_ref=self.author, @@ -352,58 +382,33 @@ def create_notes(self): content += ( "|----------------|-----------|------------|----------|------------|\n" ) + last_analysis_stats = self.attributes.get("last_analysis_stats", []) + last_analysis_results = self.attributes["last_analysis_results"] content += ( - "| " - + str(len(self.attributes["last_analysis_results"].keys())) - + " |" - + str( - self.attributes.get("last_analysis_stats", []).get( - "malicious", "N/A" - ) - ) - + " | " - + str( - self.attributes.get("last_analysis_stats", []).get( - "suspicious", "N/A" - ) - ) - + " | " - + str( - self.attributes.get("last_analysis_stats", []).get( - "harmless", "N/A" - ) - ) - + " | " - + str( - self.attributes.get("last_analysis_stats", []).get( - "undetected", "N/A" - ) - ) - + " |\n\n" + f"| {len(last_analysis_results.keys())} |" + f" {last_analysis_stats.get('malicious', 'N/A')} |" + f" {last_analysis_stats.get('suspicious', 'N/A')} |" + f" {last_analysis_stats.get('harmless', 'N/A')} |" + f" {last_analysis_stats.get('undetected', 'N/A')} |\n\n" ) content += "### Last Analysis Results\n\n" content += "| Engine name | Method | Category | Result |\n" content += "|-------------|---------|---------|--------|\n" - for key in self.attributes["last_analysis_results"]: - result = self.attributes["last_analysis_results"][key] + for key in last_analysis_results: + result = last_analysis_results[key] content += ( - "| " - + result["engine_name"] - + " | " - + result["method"] - + " | " - + result["category"] - + " | " - + (result["result"] if result["result"] is not None else "N/A") - + " | \n" + f"| {result['engine_name']} | {result['method']} | {result['category']}" + f" | {(result['result'] if result['result'] is not None else 'N/A')} | \n" ) + content += ( self.create_notes_attributes_content() if self.include_attributes_in_note else "" ) self.create_note( - "VirusTotal Results", + f"VirusTotal Results ({self.opencti_entity['entity_type']}: " + f"{self.opencti_entity['observable_value']})", content, ) @@ -411,19 +416,19 @@ def create_notes(self): content = "| Vendor | Category |\n" content += "|--------|----------|\n" for key in self.attributes["categories"]: - content += ( - "| " + key + " | " + self.attributes["categories"][key] + " | \n" - ) + content += f"| {key} | {self.attributes['categories'][key]} | \n" content += ( self.create_notes_attributes_content() if self.include_attributes_in_note else "" ) - self.create_note("VirusTotal Categories", content) + self.create_note( + f"VirusTotal Categories ({self.opencti_entity['entity_type']}: " + f"{self.opencti_entity['observable_value']})", + content, + ) - def create_yara( - self, yara: dict, ruleset: dict, valid_from: Optional[float] = None - ): + def create_yara(self, yara: dict, ruleset: dict, valid_from: float | None = None): """ Create an indicator containing the YARA rule from VirusTotal and link it to the observable. @@ -440,7 +445,7 @@ def create_yara( valid_from_date = ( datetime.datetime.min if valid_from is None - else datetime.datetime.utcfromtimestamp(valid_from) + else datetime.datetime.fromtimestamp(valid_from, datetime.timezone.utc) ) ruleset_id = yara.get("id", "No ruleset id provided") self.helper.log_info(f"[VirusTotal] Retrieving ruleset {ruleset_id}") @@ -458,17 +463,22 @@ def create_yara( id=Indicator.generate_id(plyara.utils.rebuild_yara_rule(rule[0])), created_by_ref=self.author, name=yara.get("rule_name", "No rulename provided"), - description=f"""```\n{json.dumps( - { - "description": yara.get("description", "No description provided"), - "author": yara.get("author", "No author provided"), - "source": yara.get("source", "No source provided"), - "ruleset_id": ruleset_id, - "ruleset_name": yara.get( - "ruleset_name", "No ruleset name provided" - ), - }, indent=2 - )}\n```""", + description=f"""```\n{ + json.dumps( + { + "description": yara.get( + "description", "No description provided" + ), + "author": yara.get("author", "No author provided"), + "source": yara.get("source", "No source provided"), + "ruleset_id": ruleset_id, + "ruleset_name": yara.get( + "ruleset_name", "No ruleset name provided" + ), + }, + indent=2, + ) + }\n```""", confidence=self.helper.connect_confidence_level, pattern=plyara.utils.rebuild_yara_rule(rule[0]), pattern_type="yara", @@ -497,7 +507,7 @@ def create_yara( self.bundle += [indicator, relationship] @staticmethod - def _extract_link(link: str) -> Optional[str]: + def _extract_link(link: str) -> str | None: """ Extract the links for the external reference. @@ -545,7 +555,7 @@ def update_hashes(self): """Update the hashes (md5 and sha1) of the file.""" for algo in ("MD5", "SHA-1", "SHA-256"): self.helper.log_debug( - f'[VirusTotal] updating hash {algo}: {self.attributes[algo.lower().replace("-", "")]}' + f"[VirusTotal] updating hash {algo}: {self.attributes[algo.lower().replace('-', '')]}" ) self.stix_entity["hashes"][algo] = self.attributes[ algo.lower().replace("-", "") @@ -554,16 +564,23 @@ def update_hashes(self): def update_labels(self): """Update the labels of the file using the tags.""" self.helper.log_debug( - f'[VirusTotal] updating labels with {self.attributes["tags"]}' + f"[VirusTotal] updating labels with {self.attributes['tags']}" ) for tag in self.attributes["tags"]: - OpenCTIStix2.put_attribute_in_extension( - self.stix_entity, - STIX_EXT_OCTI_SCO, - "labels", - tag, - True, - ) + if self.is_indicator: + # Labels on Indicators are a standard STIX field, not an SCO extension. + if "labels" not in self.stix_entity: + self.stix_entity["labels"] = [] + if tag not in self.stix_entity["labels"]: + self.stix_entity["labels"].append(tag) + else: + OpenCTIStix2.put_attribute_in_extension( + self.stix_entity, + STIX_EXT_OCTI_SCO, + "labels", + tag, + True, + ) def update_names(self, main: bool = False): """ @@ -575,7 +592,7 @@ def update_names(self, main: bool = False): If True, update the main name. """ self.helper.log_debug( - f'[VirusTotal] updating names with {self.attributes["names"]}' + f"[VirusTotal] updating names with {self.attributes['names']}" ) names = self.attributes["names"] if len(names) > 0 and main: @@ -596,7 +613,7 @@ def update_names(self, main: bool = False): def update_size(self): """Update the size of the file.""" self.helper.log_debug( - f'[VirusTotal] updating size with {self.attributes["size"]}' + f"[VirusTotal] updating size with {self.attributes['size']}" ) self.stix_entity["size"] = self.attributes["size"] @@ -632,11 +649,12 @@ def create_notes_attributes_content(self): attributes_scope = attributes_scope.get(self.opencti_entity.get("entity_type")) if self.include_attributes_in_note and attributes_scope: for attribute, value in attributes_scope.items(): - attributes_content += ( - "| " + attribute + " | " + str(value or "N/A") + " | \n" - ) + attributes_content += f"| {attribute} | {str(value or 'N/A')} | \n" if attributes_content: - content = "## Attributes Info\n\n" + content = ( + f"## Attributes Info ({self.opencti_entity['entity_type']}: " + f"{self.opencti_entity['observable_value']}) \n\n" + ) content += "Any falsy value will be replaced by ‘N/A’\n" content += "| Attributes | |\n" content += "|--------|----------|\n" diff --git a/internal-enrichment/virustotal/src/virustotal/client.py b/internal-enrichment/virustotal/src/virustotal/client.py index 7d40d5e1257..9b2c29fc2f7 100644 --- a/internal-enrichment/virustotal/src/virustotal/client.py +++ b/internal-enrichment/virustotal/src/virustotal/client.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- """Virustotal client module.""" import base64 @@ -10,7 +9,7 @@ import requests from pycti import OpenCTIConnectorHelper from requests.adapters import HTTPAdapter -from requests.packages.urllib3.util.retry import Retry +from urllib3 import Retry class VirusTotalClient: @@ -27,6 +26,7 @@ def __init__( self.headers = { "x-apikey": token, "accept": "application/json", + "x-tool": f"OpenCTI VirusTotal Connector {self.helper.connector_id}", } def _query(self, url): @@ -78,6 +78,10 @@ def _query(self, url): except Exception as err: self.helper.log_error(f"[VirusTotal] Unknown error {err}") self.helper.metric.inc("client_error_count") + + if response is None: + return None + try: self.helper.log_debug(f"[VirusTotal] data retrieved: {response.json()}") return response.json() @@ -134,6 +138,10 @@ def _post(self, url, data=None, files=None, additional_headers=None): except Exception as err: self.helper.log_error(f"[VirusTotal] Unknown error {err}") self.helper.metric.inc("client_error_count") + + if response is None: + return None + try: self.helper.log_debug(f"[VirusTotal] data retrieved: {response.json()}") return response.json() @@ -248,6 +256,8 @@ def get_url_info(self, url): """ base64_url = f"{self.url}/urls/{VirusTotalClient.base64_encode_no_padding(url)}" results = self._query(base64_url) + if results is None: + return None if "error" in results: sha256_url = f"{self.url}/urls/{hashlib.sha256(url.encode()).hexdigest()}" results = self._query(sha256_url) @@ -346,6 +356,8 @@ def get_url_related_objects(self, url, relationship): """ base64_url = f"{self.url}/urls/{VirusTotalClient.base64_encode_no_padding(url)}/{relationship}" results = self._query(base64_url) + if results is None: + return None if "error" in results: sha256_url = f"{self.url}/urls/{hashlib.sha256(url.encode()).hexdigest()}/{relationship}" results = self._query(sha256_url) diff --git a/internal-enrichment/virustotal/src/virustotal/models/configs/config_loader.py b/internal-enrichment/virustotal/src/virustotal/models/configs/config_loader.py index 1165d23adb5..156861fa87e 100644 --- a/internal-enrichment/virustotal/src/virustotal/models/configs/config_loader.py +++ b/internal-enrichment/virustotal/src/virustotal/models/configs/config_loader.py @@ -32,7 +32,15 @@ class ConfigLoaderConnector(ConfigLoaderConnectorExtra): description="Name of the connector.", ) scope: ListFromString = Field( - default=["StixFile", "Artifact", "IPv4-Addr", "Domain-Name", "Url", "Hostname"], + default=[ + "StixFile", + "Artifact", + "IPv4-Addr", + "Domain-Name", + "Url", + "Hostname", + "Indicator", + ], description="The scope or type of data the connector is importing, either a MIME type or Stix Object (for information only).", ) diff --git a/internal-enrichment/virustotal/src/virustotal/processors/__init__.py b/internal-enrichment/virustotal/src/virustotal/processors/__init__.py new file mode 100644 index 00000000000..f7c87ad4148 --- /dev/null +++ b/internal-enrichment/virustotal/src/virustotal/processors/__init__.py @@ -0,0 +1,13 @@ +from virustotal.processors.entity import EntityProcessor +from virustotal.processors.file import FileProcessor +from virustotal.processors.hostname import HostnameProcessor +from virustotal.processors.ip_address import IPProcessor +from virustotal.processors.url import URLProcessor + +__all__ = [ + "EntityProcessor", + "FileProcessor", + "HostnameProcessor", + "URLProcessor", + "IPProcessor", +] diff --git a/internal-enrichment/virustotal/src/virustotal/processors/entity.py b/internal-enrichment/virustotal/src/virustotal/processors/entity.py new file mode 100644 index 00000000000..92e5ab9c98c --- /dev/null +++ b/internal-enrichment/virustotal/src/virustotal/processors/entity.py @@ -0,0 +1,95 @@ +from abc import ABC, abstractmethod +from typing import TYPE_CHECKING + +from virustotal.builder import VirusTotalBuilder + +if TYPE_CHECKING: + from virustotal import VirusTotalConnector + + +class EntityProcessor(ABC): + """Template-method base class for all VT enrichment processors. + + Subclasses implement ``_fetch_data`` (API call + any upload/retry + logic) and ``_enrich`` (builder method calls specific to their type). + Everything else — response validation, builder construction and bundle + dispatch — is handled here once. + """ + + def __init__( + self, + connector: "VirusTotalConnector", + stix_objects: list, + stix_entity: dict, + opencti_entity: dict, + is_indicator: bool = False, + ) -> None: + self.connector = connector + self.helper = connector.helper + self.client = connector.client + self.stix_objects = stix_objects + self.stix_entity = stix_entity + self.opencti_entity = opencti_entity + self.is_indicator = is_indicator + + # ------------------------------------------------------------------ + # Public API + # ------------------------------------------------------------------ + + def process(self) -> str | None: + """Run the full enrichment pipeline and return the send result. + + Returns ``None`` when there is nothing to enrich (e.g. an Artifact + that VT has never seen and has no uploaded file bytes available). + """ + json_data = self._fetch_data() + if json_data is None: + return None + self._check_response(json_data) + builder = self._make_builder(json_data) + self._enrich(builder, json_data) + return builder.send_bundle() + + # ------------------------------------------------------------------ + # Shared helpers + # ------------------------------------------------------------------ + + def _check_response(self, json_data: dict | None) -> None: + """Raise ``ValueError`` for empty or error responses.""" + if not json_data: + raise ValueError("[VirusTotal] Empty response received from the API.") + if "error" in json_data: + raise ValueError(json_data["error"]["message"]) + if "data" not in json_data or "attributes" not in json_data["data"]: + raise ValueError("An error has occurred.") + + def _make_builder(self, json_data: dict, **kwargs) -> VirusTotalBuilder: + """Construct a :class:`VirusTotalBuilder` with connector-level settings.""" + return VirusTotalBuilder( + self.helper, + self.connector.author, + self.connector.replace_with_lower_score, + self.stix_objects, + self.stix_entity, + self.opencti_entity, + json_data["data"], + include_attributes_in_note=self.connector.include_attributes_in_note, + is_indicator=self.is_indicator, + **kwargs, + ) + + # ------------------------------------------------------------------ + # Abstract interface + # ------------------------------------------------------------------ + + @abstractmethod + def _fetch_data(self) -> dict | None: + """Fetch the VirusTotal API response for this entity type. + + Implementations should also handle upload/retry logic (e.g. for + unseen artifacts or URLs) and return the *final* response dict. + """ + + @abstractmethod + def _enrich(self, builder: VirusTotalBuilder, json_data: dict) -> None: + """Call the appropriate builder methods for this entity type.""" diff --git a/internal-enrichment/virustotal/src/virustotal/processors/file.py b/internal-enrichment/virustotal/src/virustotal/processors/file.py new file mode 100644 index 00000000000..f5fc1872711 --- /dev/null +++ b/internal-enrichment/virustotal/src/virustotal/processors/file.py @@ -0,0 +1,184 @@ +from typing import TYPE_CHECKING + +from virustotal.processors.entity import EntityProcessor + +if TYPE_CHECKING: + from virustotal.builder import VirusTotalBuilder + + +class FileProcessor(EntityProcessor): + """Enriches StixFile, Artifact, and file-type Indicators.""" + + def _fetch_data(self) -> dict | None: + hash_value = self._resolve_hash() + json_data = self.client.get_file_info(hash_value) + + # Artifacts that VT has never seen can be uploaded for analysis. + # This is skipped for Indicators (no file bytes available) and StixFiles. + if ( + json_data + and "error" in json_data + and json_data["error"]["code"] == "NotFoundError" + and not self.is_indicator + and self.connector.file_upload_unseen_artifacts + and self.opencti_entity["entity_type"] == "Artifact" + ): + json_data = self._upload_artifact_and_recheck(hash_value) + + return json_data + + def _enrich(self, builder: "VirusTotalBuilder", json_data: dict) -> None: + attributes = json_data["data"]["attributes"] + + if not self.is_indicator: + # Observable-specific updates (mutate the SCO stix entity). + builder.update_hashes() + if self.opencti_entity["entity_type"] == "StixFile": + builder.update_size() + builder.update_names( + self.opencti_entity["entity_type"] == "StixFile" + and not self.opencti_entity.get("name") + ) + builder.create_indicator_based_on( + self.connector.file_indicator_config, + f"""[file:hashes.'SHA-256' = '{attributes["sha256"]}']""", + ) + + builder.update_labels() + + if self.connector.file_import_yara: + for yara in attributes.get("crowdsourced_yara_results", []): + ruleset = self.connector._retrieve_yara_ruleset( + yara.get("ruleset_id", "No ruleset id provided") + ) + builder.create_yara( + yara, + ruleset, + attributes.get("creation_date"), + ) + + if ( + self.connector.file_create_note_full_report + and "last_analysis_results" in attributes + ): + content = self._build_full_report_content(json_data["data"], builder) + builder.create_note("VirusTotal Report", content) + + # ------------------------------------------------------------------ + # Private helpers + # ------------------------------------------------------------------ + + def _resolve_hash(self) -> str: + """Return the best available hash for the VT file lookup. + + For indicators the hash comes from ``opencti_entity["observable_value"]`` + (already resolved by :meth:`~VirusTotalConnector._extract_observable_from_indicator`). + For observables it is read from the SCO ``hashes`` dict, preferring + SHA-256 over SHA-1 over MD5. + """ + if self.is_indicator: + return self.opencti_entity["observable_value"] + + hashes = self.stix_entity.get("hashes", {}) + for algo in ("SHA-256", "SHA-1", "MD5"): + if algo in hashes: + return hashes[algo] + + raise ValueError( + "Unable to enrich the observable: it has no SHA-256, SHA-1, or MD5 hash." + ) + + def _upload_artifact_and_recheck(self, hash_value: str) -> dict | None: + """Upload an unseen Artifact to VT and wait for analysis to complete. + + Returns ``None`` when the artifact has no associated file bytes, + signalling the caller to skip enrichment entirely (mirrors the + original ``return`` early-exit in ``_process_file``). + """ + import_files = self.opencti_entity.get("importFiles", []) + if not import_files: + return None + + file_meta = import_files[0] + if file_meta["size"] > 33_554_432: + msg = ( + "The file attempting to be uploaded is greater than VirusTotal's " + "32 MB limit." + ) + raise ValueError(msg) + + message = ( + f"The file {hash_value} was not found in VirusTotal repositories. " + "Beginning upload and analysis." + ) + self.helper.api.work.to_received(self.helper.work_id, message) + self.helper.log_debug(message) + + artifact_url = f"{self.helper.opencti_url}/storage/get/{file_meta['id']}" + try: + artifact = self.helper.api.fetch_opencti_file(artifact_url, binary=True) + except Exception as err: + raise ValueError( + "[VirusTotal] Error fetching artifact from OpenCTI." + ) from err + + try: + analysis_id = self.client.upload_artifact(file_meta["name"], artifact) + # Queuing the file info call triggers more immediate analysis. + self.client.get_file_info(hash_value) + except Exception as err: + raise ValueError( + "[VirusTotal] Error uploading artifact to VirusTotal." + ) from err + + try: + self.client.check_upload_status("artifact", hash_value, analysis_id) + except Exception as err: + raise ValueError( + "[VirusTotal] Error waiting for VirusTotal to analyse artifact." + ) from err + + return self.client.get_file_info(hash_value) + + @staticmethod + def _build_full_report_content(data: dict, builder: "VirusTotalBuilder") -> str: + """Build the markdown content for the full analysis report Note.""" + attrs = data["attributes"] + stats = attrs["last_analysis_stats"] + results = attrs["last_analysis_results"] + + rows = [ + ( + "| Total Analyses | Malicious | Suspicious | Undetected | Harmless" + " | Timeout | Confirmed timeout | Failure | Unsupported |" + ), + ( + "|----------------|-----------|------------|------------|---------" + "-|---------|-------------------|---------|-------------|" + ), + ( + f"| {len(results)} | {stats['malicious']} | {stats['suspicious']} |" + f" {stats['undetected']} | {stats['harmless']} | {stats['timeout']} |" + f" {stats['confirmed-timeout']} | {stats['failure']} |" + f" {stats['type-unsupported']} |" + ), + ] + + engine_rows = [ + "## Last Analysis Results\n", + "Any falsy value will be replaced by 'N/A'", + "| Engine name | Engine version | Method | Category | Result |", + "|-------------|----------------|--------|----------|--------|", + ] + for result in results.values(): + engine_rows.append( + f"| {result.get('engine_name') or 'N/A'}" + f" | {result.get('engine_version') or 'N/A'}" + f" | {result.get('method') or 'N/A'}" + f" | {result.get('category') or 'N/A'}" + f" | {result.get('result') or 'N/A'} |" + ) + + content = "\n".join(rows) + "\n\n" + "\n".join(engine_rows) + content += builder.create_notes_attributes_content() + return content diff --git a/internal-enrichment/virustotal/src/virustotal/processors/hostname.py b/internal-enrichment/virustotal/src/virustotal/processors/hostname.py new file mode 100644 index 00000000000..0899352cd23 --- /dev/null +++ b/internal-enrichment/virustotal/src/virustotal/processors/hostname.py @@ -0,0 +1,34 @@ +from typing import TYPE_CHECKING + +from virustotal.processors.entity import EntityProcessor + +if TYPE_CHECKING: + from virustotal.builder import VirusTotalBuilder + + +class HostnameProcessor(EntityProcessor): + """Enriches Domain-Name and Hostname observables and Indicators.""" + + def _fetch_data(self) -> dict: + return self.client.get_domain_info(self.opencti_entity["observable_value"]) + + def _enrich(self, builder: "VirusTotalBuilder", json_data: dict) -> None: + if self.connector.domain_add_relationships: + for ip in [ + r["value"] + for r in json_data["data"]["attributes"].get("last_dns_records", []) + if r["type"] == "A" + ]: + self.helper.log_debug( + f"[VirusTotal] adding ip {ip} to domain" + f" {self.opencti_entity['observable_value']}" + ) + builder.create_ip_resolves_to(ip) + + if not self.is_indicator: + builder.create_indicator_based_on( + self.connector.domain_indicator_config, + f"""[domain-name:value = '{self.opencti_entity["observable_value"]}']""", + ) + + builder.create_notes() diff --git a/internal-enrichment/virustotal/src/virustotal/processors/ip_address.py b/internal-enrichment/virustotal/src/virustotal/processors/ip_address.py new file mode 100644 index 00000000000..f23d794f34b --- /dev/null +++ b/internal-enrichment/virustotal/src/virustotal/processors/ip_address.py @@ -0,0 +1,26 @@ +from typing import TYPE_CHECKING + +from virustotal.processors.entity import EntityProcessor + +if TYPE_CHECKING: + from virustotal.builder import VirusTotalBuilder + + +class IPProcessor(EntityProcessor): + """Enriches IPv4-Addr observables and Indicators.""" + + def _fetch_data(self) -> dict: + return self.client.get_ip_info(self.opencti_entity["observable_value"]) + + def _enrich(self, builder: "VirusTotalBuilder", json_data: dict) -> None: + if self.connector.ip_add_relationships: + builder.create_asn_belongs_to() + builder.create_location_located_at() + + if not self.is_indicator: + builder.create_indicator_based_on( + self.connector.ip_indicator_config, + f"""[ipv4-addr:value = '{self.opencti_entity["observable_value"]}']""", + ) + + builder.create_notes() diff --git a/internal-enrichment/virustotal/src/virustotal/processors/url.py b/internal-enrichment/virustotal/src/virustotal/processors/url.py new file mode 100644 index 00000000000..f8f89db75f6 --- /dev/null +++ b/internal-enrichment/virustotal/src/virustotal/processors/url.py @@ -0,0 +1,72 @@ +from typing import TYPE_CHECKING + +from virustotal.processors.entity import EntityProcessor + +if TYPE_CHECKING: + from virustotal.builder import VirusTotalBuilder + + +class URLProcessor(EntityProcessor): + """Enriches Url observables and Indicators.""" + + def _fetch_data(self) -> dict: + url = self.opencti_entity["observable_value"] + json_data = self.client.get_url_info(url) + + if ( + json_data + and "error" in json_data + and json_data["error"]["code"] == "NotFoundError" + and self.connector.url_upload_unseen + ): + json_data = self._upload_url_and_recheck(url) + + return json_data + + def _make_builder(self, json_data: dict, **kwargs) -> "VirusTotalBuilder": + url = self.opencti_entity["observable_value"] + related = self.client.get_url_related_objects( + url=url, relationship="last_serving_ip_address" + ) + url_related_object_data = ( + related.get("data", {}) if isinstance(related, dict) else {} + ) + return super()._make_builder( + json_data, url_related_object_data=url_related_object_data, **kwargs + ) + + def _enrich(self, builder: "VirusTotalBuilder", json_data: dict) -> None: + if not self.is_indicator: + builder.create_indicator_based_on( + self.connector.url_indicator_config, + f"""[url:value = '{self.opencti_entity["observable_value"]}']""", + ) + + builder.create_notes() + + # ------------------------------------------------------------------ + # Private helpers + # ------------------------------------------------------------------ + + def _upload_url_and_recheck(self, url: str) -> dict: + """Submit an unseen URL to VT for analysis and wait for results.""" + message = ( + f"The URL {url} was not found in VirusTotal repositories. " + "Beginning upload and analysis." + ) + self.helper.api.work.to_received(self.helper.work_id, message) + self.helper.log_debug(message) + + try: + analysis_id = self.client.upload_url(url) + except Exception as err: + raise ValueError("[VirusTotal] Error uploading URL to VirusTotal.") from err + + try: + self.client.check_upload_status("URL", url, analysis_id) + except Exception as err: + raise ValueError( + "[VirusTotal] Error waiting for VirusTotal to analyse URL." + ) from err + + return self.client.get_url_info(url) diff --git a/internal-enrichment/virustotal/src/virustotal/virustotal.py b/internal-enrichment/virustotal/src/virustotal/virustotal.py index cfe410d9ef1..f23f88a29aa 100644 --- a/internal-enrichment/virustotal/src/virustotal/virustotal.py +++ b/internal-enrichment/virustotal/src/virustotal/virustotal.py @@ -1,17 +1,48 @@ -# -*- coding: utf-8 -*- -"""VirusTotal enrichment module.""" +"""VirusTotal enrichment connector.""" -from typing import Dict +from typing import TYPE_CHECKING, Dict import stix2 from pycti import Identity, OpenCTIConnectorHelper -from virustotal.builder import VirusTotalBuilder from virustotal.client import VirusTotalClient from virustotal.models.configs.config_loader import ConfigLoader +from virustotal.processors import ( + FileProcessor, + HostnameProcessor, + IPProcessor, + URLProcessor, +) + +if TYPE_CHECKING: + from virustotal.processors.entity import EntityProcessor + + +# Maps every supported entity type to its processor class. +_PROCESSOR_MAP: dict[str, "type[EntityProcessor]"] = { + "StixFile": FileProcessor, + "Artifact": FileProcessor, + "IPv4-Addr": IPProcessor, + "Domain-Name": HostnameProcessor, + "Hostname": HostnameProcessor, + "Url": URLProcessor, +} + +# Observable type strings as returned by x_opencti_observable_values.type +# (OpenCTI may send PascalCase or lowercase; we normalise to lowercase). +_OBSERVABLE_TYPE_MAP: dict[str, str] = { + "ipv4-addr": "IPv4-Addr", + "domain-name": "Domain-Name", + "hostname": "Hostname", + "url": "Url", + "stixfile": "StixFile", +} + +# Hash preference order for StixFile VT lookups. +_HASH_PRIORITY: dict[str, int] = {"SHA-256": 0, "SHA-1": 1, "MD5": 2} class VirusTotalConnector: - """VirusTotal connector.""" + """VirusTotal enrichment connector.""" _SOURCE_NAME = "VirusTotal" _API_URL = "https://www.virustotal.com/api/v3" @@ -72,365 +103,167 @@ def __init__(self, config: ConfigLoader, helper: OpenCTIConnectorHelper): self.config.virustotal.include_attributes_in_note ) - def resolve_default_value(self, stix_entity): - if "hashes" in stix_entity and "SHA-256" in stix_entity["hashes"]: - return stix_entity["hashes"]["SHA-256"] - if "hashes" in stix_entity and "SHA-1" in stix_entity["hashes"]: - return stix_entity["hashes"]["SHA-1"] - if "hashes" in stix_entity and "MD5" in stix_entity["hashes"]: - return stix_entity["hashes"]["MD5"] - raise ValueError( - "Unable to enrich the observable, the observable does not have an SHA256, SHA1, or MD5" - ) + # ------------------------------------------------------------------ + # YARA cache (shared across processor instances) + # ------------------------------------------------------------------ def _retrieve_yara_ruleset(self, ruleset_id: str) -> dict: - """ - Retrieve yara ruleset. - - If the yara is not in the cache, make an API call. - - Returns - ------- - dict - YARA ruleset object. - """ + """Return the YARA ruleset, fetching from the API if not cached.""" self.helper.log_debug(f"[VirusTotal] Retrieving ruleset {ruleset_id}") - if ruleset_id in self.yara_cache: - self.helper.log_debug(f"Retrieving YARA ruleset {ruleset_id} from cache.") - ruleset = self.yara_cache[ruleset_id] - else: + if ruleset_id not in self.yara_cache: self.helper.log_debug(f"Retrieving YARA ruleset {ruleset_id} from API.") - ruleset = self.client.get_yara_ruleset(ruleset_id) - self.yara_cache[ruleset_id] = ruleset - return ruleset - - def _process_file(self, stix_objects, stix_entity, opencti_entity): - json_data = self.client.get_file_info(self.resolve_default_value(stix_entity)) - assert json_data - if ( - "error" in json_data - and json_data["error"]["code"] == "NotFoundError" - and self.file_upload_unseen_artifacts - and opencti_entity["entity_type"] == "Artifact" - ): - message = f"The file {self.resolve_default_value(stix_entity)} was not found in VirusTotal repositories. Beginning upload and analysis" - self.helper.api.work.to_received(self.helper.work_id, message) - self.helper.log_debug(message) - if len(opencti_entity["importFiles"]) == 0: - return - - # File must be smaller than 32MB for VirusTotal upload - if opencti_entity["importFiles"][0]["size"] > 33554432: - raise ValueError( - "The file attempting to be uploaded is greater than VirusTotal's 32MB limit" - ) - artifact_url = f'{self.helper.opencti_url}/storage/get/{opencti_entity["importFiles"][0]["id"]}' - try: - artifact = self.helper.api.fetch_opencti_file(artifact_url, binary=True) - except Exception as err: - raise ValueError( - "[VirusTotal] Error fetching artifact from OpenCTI" - ) from err - try: - analysis_id = self.client.upload_artifact( - opencti_entity["importFiles"][0]["name"], artifact - ) - # Attempting to get the file info immediately queues the artifact for more immediate analysis - self.client.get_file_info(self.resolve_default_value(stix_entity)) - except Exception as err: - raise ValueError( - "[VirusTotal] Error uploading artifact to VirusTotal" - ) from err - try: - self.client.check_upload_status( - "artifact", self.resolve_default_value(stix_entity), analysis_id - ) - except Exception as err: - raise ValueError( - "[VirusTotal] Error waiting for VirusTotal to analyze artifact" - ) from err - json_data = self.client.get_file_info( - self.resolve_default_value(stix_entity) - ) - assert json_data - if "error" in json_data: - raise ValueError(json_data["error"]["message"]) - if "data" not in json_data or "attributes" not in json_data["data"]: - raise ValueError("An error has occurred.") - - builder = VirusTotalBuilder( - self.helper, - self.author, - self.replace_with_lower_score, - stix_objects, - stix_entity, - opencti_entity, - json_data["data"], - include_attributes_in_note=self.include_attributes_in_note, - ) - builder.update_hashes() - - # Set the size and names (main and additional) - if opencti_entity["entity_type"] == "StixFile": - builder.update_size() - - builder.update_names( - opencti_entity["entity_type"] == "StixFile" - and (opencti_entity["name"] is None or len(opencti_entity["name"]) == 0) - ) - - builder.create_indicator_based_on( - self.file_indicator_config, - f"""[file:hashes.'SHA-256' = '{json_data["data"]["attributes"]["sha256"]}']""", - ) + self.yara_cache[ruleset_id] = self.client.get_yara_ruleset(ruleset_id) + else: + self.helper.log_debug(f"Retrieving YARA ruleset {ruleset_id} from cache.") + return self.yara_cache[ruleset_id] - # Create labels from tags - builder.update_labels() + # ------------------------------------------------------------------ + # Indicator helpers + # ------------------------------------------------------------------ - # Add YARA rules (only if a rule is given). - for yara in json_data["data"]["attributes"].get( - "crowdsourced_yara_results", [] - ): - ruleset = self._retrieve_yara_ruleset( - yara.get("ruleset_id", "No ruleset id provided") - ) - builder.create_yara( - yara, - ruleset, - json_data["data"]["attributes"].get("creation_date", None), - ) + def _extract_observable_from_indicator( + self, opencti_entity: dict + ) -> list[tuple[str, str]]: + """Extract all supported observable (type, value) pairs from an Indicator. - # Create a Note with the full report - if self.file_create_note_full_report: - if ( - "data" in json_data - and "attributes" in json_data["data"] - and "last_analysis_results" in json_data["data"]["attributes"] - ): - data = json_data["data"] - content = "| Total Analyses | Malicious | Suspicious | Undetected | Harmless | Timeout | Confirmed timeout | Failure | Unsupported |\n" - content += "|----------------|-----------|------------|------------|----------|---------|-------------------|---------|-------------|\n" - content += ( - "| " - + str(len(data["attributes"]["last_analysis_results"].keys())) - + " |" - + str(data["attributes"]["last_analysis_stats"]["malicious"]) - + " | " - + str(data["attributes"]["last_analysis_stats"]["suspicious"]) - + " | " - + str(data["attributes"]["last_analysis_stats"]["undetected"]) - + " | " - + str(data["attributes"]["last_analysis_stats"]["harmless"]) - + " | " - + str(data["attributes"]["last_analysis_stats"]["timeout"]) - + " | " - + str( - data["attributes"]["last_analysis_stats"]["confirmed-timeout"] - ) - + " | " - + str(data["attributes"]["last_analysis_stats"]["failure"]) - + " | " - + str(data["attributes"]["last_analysis_stats"]["type-unsupported"]) - + " |\n\n" - ) - content += "## Last Analysis Results\n\n" - content += "Any falsy value will be replaced by ‘N/A’\n" - content += ( - "| Engine name | Engine version | Method | Category | Result |\n" - ) - content += ( - "|-------------|----------------|--------|----------|--------|\n" - ) - for key in data["attributes"]["last_analysis_results"]: - result = data["attributes"]["last_analysis_results"][key] - content += ( - "| " - + str(result.get("engine_name") or "N/A") - + " | " - + str(result.get("engine_version") or "N/A") - + " | " - + str(result.get("method") or "N/A") - + " | " - + str(result.get("category") or "N/A") - + " | " - + str(result.get("result") or "N/A") - + " | \n" - ) - content += ( - builder.create_notes_attributes_content() - if self.include_attributes_in_note - else "" - ) - builder.create_note("VirusTotal Report", content) - return builder.send_bundle() - - def _process_ip(self, stix_objects, stix_entity, opencti_entity): - json_data = self.client.get_ip_info(opencti_entity["observable_value"]) - assert json_data - if "error" in json_data: - raise ValueError(json_data["error"]["message"]) - if "data" not in json_data or "attributes" not in json_data["data"]: - raise ValueError("An error has occurred.") - - builder = VirusTotalBuilder( - self.helper, - self.author, - self.replace_with_lower_score, - stix_objects, - stix_entity, - opencti_entity, - json_data["data"], - include_attributes_in_note=self.include_attributes_in_note, - ) + An indicator's pattern can embed several observables — for example + ``[ipv4-addr:value = '1.2.3.4' AND domain-name:value = 'evil.com']`` + produces two entries in ``x_opencti_observable_values``. This method + returns **all** supported pairs so the caller can enrich each one. - if self.ip_add_relationships: - builder.create_asn_belongs_to() - builder.create_location_located_at() + Uses the ``x_opencti_observable_values`` extension attribute populated + by OpenCTI. For ``StixFile``, the best available hash is returned + (SHA-256 > SHA-1 > MD5) rather than the raw ``value`` field. - builder.create_indicator_based_on( - self.ip_indicator_config, - f"""[ipv4-addr:value = '{opencti_entity["observable_value"]}']""", - ) - builder.create_notes() - return builder.send_bundle() - - def _process_domain(self, stix_objects, stix_entity, opencti_entity): - json_data = self.client.get_domain_info(opencti_entity["observable_value"]) - assert json_data - if "error" in json_data: - raise ValueError(json_data["error"]["message"]) - if "data" not in json_data or "attributes" not in json_data["data"]: - raise ValueError("An error has occurred.") - - builder = VirusTotalBuilder( - self.helper, - self.author, - self.replace_with_lower_score, - stix_objects, - stix_entity, - opencti_entity, - json_data["data"], - include_attributes_in_note=self.include_attributes_in_note, + Returns + ------- + list[tuple[str, str]] + Ordered list of ``(entity_type, observable_value)`` pairs, + e.g. ``[("IPv4-Addr", "1.2.3.4"), ("Domain-Name", "evil.com")]``. + + Raises + ------ + ValueError + When no supported observable can be extracted from the indicator. + """ + observable_values = self.helper.get_attribute_in_extension( + "x_opencti_observable_values", opencti_entity ) + if not observable_values: + raise ValueError( + "[VirusTotal] Cannot enrich Indicator: no observable values found. " + "Ensure the indicator has a valid STIX pattern." + ) - if self.domain_add_relationships: - # Create IPv4 address observables for each A record - # and a Relationship between them and the observable. - for ip in [ - r["value"] - for r in json_data["data"]["attributes"]["last_dns_records"] - if r["type"] == "A" - ]: - self.helper.log_debug( - f'[VirusTotal] adding ip {ip} to domain {opencti_entity["observable_value"]}' - ) - builder.create_ip_resolves_to(ip) - - builder.create_indicator_based_on( - self.domain_indicator_config, - f"""[domain-name:value = '{opencti_entity["observable_value"]}']""", - ) - builder.create_notes() - return builder.send_bundle() - - def _process_url(self, stix_objects, stix_entity, opencti_entity): - json_data = self.client.get_url_info(opencti_entity["observable_value"]) - assert json_data - if ( - "error" in json_data - and json_data["error"]["code"] == "NotFoundError" - and self.url_upload_unseen - ): - message = f"The URL {opencti_entity['observable_value']} was not found in VirusTotal repositories. Beginning upload and analysis" - self.helper.api.work.to_received(self.helper.work_id, message) - self.helper.log_debug(message) - try: - analysis_id = self.client.upload_url(opencti_entity["observable_value"]) - except Exception as err: - raise ValueError( - "[VirusTotal] Error uploading URL to VirusTotal" - ) from err - try: - self.client.check_upload_status( - "URL", opencti_entity["observable_value"], analysis_id - ) - except Exception as err: - raise ValueError( - "[VirusTotal] Error waiting for VirusTotal to analyze URL" - ) from err - json_data = self.client.get_url_info(opencti_entity["observable_value"]) - assert json_data - if "error" in json_data: - raise ValueError(json_data["error"]["message"]) - if "data" not in json_data or "attributes" not in json_data["data"]: - raise ValueError("An error has occurred.") - get_url_related_object = self.client.get_url_related_objects( - url=opencti_entity["observable_value"], - relationship="last_serving_ip_address", - ) - url_related_object_data = ( - get_url_related_object.get("data", {}) - if isinstance(get_url_related_object, dict) - else {} - ) + results: list[tuple[str, str]] = [] + for obs in observable_values: + entity_type = _OBSERVABLE_TYPE_MAP.get(obs.get("type", "").lower()) + if not entity_type: + continue - builder = VirusTotalBuilder( - self.helper, - self.author, - self.replace_with_lower_score, - stix_objects, - stix_entity, - opencti_entity, - json_data["data"], - include_attributes_in_note=self.include_attributes_in_note, - url_related_object_data=url_related_object_data, - ) + value = ( + self._best_hash_from_obs(obs) + if entity_type == "StixFile" + else obs.get("value") + ) + if value: + results.append((entity_type, value)) - builder.create_indicator_based_on( - self.url_indicator_config, - f"""[url:value = '{opencti_entity["observable_value"]}']""", - ) - builder.create_notes() - return builder.send_bundle() + if not results: + raise ValueError( + f"[VirusTotal] Cannot enrich Indicator: none of the observable types " + f"{[o.get('type') for o in observable_values]} are supported. " + f"Supported types: {', '.join(_PROCESSOR_MAP)}." + ) - def _process_message(self, data: Dict): + return results + + @staticmethod + def _best_hash_from_obs(obs: dict) -> str: + """Return the highest-priority hash from an observable dict.""" + best_hash: str = "" + best_priority = 999 + for h in obs.get("hashes", []): + priority = _HASH_PRIORITY.get(h.get("algorithm", ""), 999) + if priority < best_priority: + best_priority = priority + best_hash = h.get("hash", "") + return best_hash or obs.get("value", "") + + # ------------------------------------------------------------------ + # Processor factory & message handler + # ------------------------------------------------------------------ + + def _get_processor( + self, + entity_type: str, + stix_objects: list, + stix_entity: dict, + opencti_entity: dict, + is_indicator: bool = False, + ) -> "EntityProcessor": + """Instantiate the correct processor for *entity_type*.""" + cls = _PROCESSOR_MAP.get(entity_type) + if cls is None: + raise ValueError(f"{entity_type} is not a supported entity type.") + return cls(self, stix_objects, stix_entity, opencti_entity, is_indicator) + + def _process_message(self, data: Dict) -> str: self.helper.metric.inc("run_count") self.helper.metric.state("running") + stix_objects = data["stix_objects"] stix_entity = data["stix_entity"] opencti_entity = data["enrichment_entity"] - # Extract TLP + # TLP gate tlp = "TLP:CLEAR" - for marking_definition in opencti_entity.get("objectMarking", []): - if marking_definition["definition_type"] == "TLP": - tlp = marking_definition["definition"] + for marking in opencti_entity.get("objectMarking", []): + if marking["definition_type"] == "TLP": + tlp = marking["definition"] if not OpenCTIConnectorHelper.check_max_tlp(tlp, self.max_tlp): raise ValueError( "Do not send any data, TLP of the observable is greater than MAX TLP" ) + entity_type = opencti_entity["entity_type"] + is_indicator = entity_type == "Indicator" + + if is_indicator: + observables = self._extract_observable_from_indicator(opencti_entity) + object_markings = opencti_entity.get("objectMarking", []) + self.helper.log_debug( + f"[VirusTotal] enriching indicator " + f"'{opencti_entity.get('name', '?')}' " + f"with {len(observables)} observable(s): " + f"{observables}" + ) + results = [] + for obs_type, observable_value in observables: + # Build a synthetic entity that looks like an observable so + # processors can access observable_value and entity_type uniformly. + synthetic_entity = { + "entity_type": obs_type, + "observable_value": observable_value, + "objectMarking": object_markings, + } + result = self._get_processor( + obs_type, stix_objects, stix_entity, synthetic_entity, True + ).process() + results.append(result) + return "; ".join(r for r in results if r is not None) + self.helper.log_debug( - "[VirusTotal] starting enrichment of observable: {" - + opencti_entity["observable_value"] - + "}" + f"[VirusTotal] enriching observable: " + f"{opencti_entity.get('observable_value', '?')}" ) - match opencti_entity["entity_type"]: - case "StixFile" | "Artifact": - return self._process_file(stix_objects, stix_entity, opencti_entity) - case "IPv4-Addr": - return self._process_ip(stix_objects, stix_entity, opencti_entity) - case "Domain-Name" | "Hostname": - return self._process_domain(stix_objects, stix_entity, opencti_entity) - case "Url": - return self._process_url(stix_objects, stix_entity, opencti_entity) - case _: - raise ValueError( - f'{opencti_entity["entity_type"]} is not a supported entity type.' - ) - - def start(self): - """Start the main loop.""" + + return self._get_processor( + entity_type, stix_objects, stix_entity, opencti_entity, False + ).process() + + def start(self) -> None: + """Start the main listener loop.""" self.helper.metric.state("idle") self.helper.listen(message_callback=self._process_message) diff --git a/internal-enrichment/virustotal/tests/tests_virustotal/test_builder.py b/internal-enrichment/virustotal/tests/tests_virustotal/test_builder.py index a9e991aa33b..400c7e05b0a 100644 --- a/internal-enrichment/virustotal/tests/tests_virustotal/test_builder.py +++ b/internal-enrichment/virustotal/tests/tests_virustotal/test_builder.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- """Virustotal builder unittest.""" import datetime @@ -8,8 +7,9 @@ from unittest.mock import MagicMock, PropertyMock import stix2 -from pycti import Identity +from pycti import STIX_EXT_OCTI, Identity from virustotal.builder import VirusTotalBuilder +from virustotal.models.configs.virustotal_configs import IndicatorConfig class VirusTotalBuilderTest(unittest.TestCase): @@ -18,7 +18,9 @@ def setup_class(cls): cls.helper = MagicMock() cls.confidence_level = PropertyMock(return_value=49) type(cls.helper).connect_confidence_level = cls.confidence_level - cls.helper.api.stix2.format_date.return_value = datetime.datetime.utcnow() + cls.helper.api.stix2.format_date.return_value = datetime.datetime.now( + datetime.timezone.utc + ) # Setup author cls.author = stix2.Identity( @@ -55,7 +57,58 @@ def test_compute_score(self): self.load_file("vt_test_file.json")["data"], ) attributes = self.load_file("vt_test_file.json")["data"]["attributes"] - self.assertEqual(builder._compute_score(attributes["last_analysis_stats"]), 72) + self.assertEqual( + builder._compute_score(attributes["last_analysis_stats"], {}), 72 + ) + + def test_compute_score_with_gti_assessment(self): + builder = VirusTotalBuilder( + self.helper, + self.author, + True, + [], + {"id": "fakeid"}, + {"id": "fakeid"}, + self.load_file("vt_test_file.json")["data"], + ) + attributes = self.load_file("vt_test_file.json")["data"]["attributes"] + gti_assessment = {"threat_score": {"value": 85}} + self.assertEqual( + builder._compute_score(attributes["last_analysis_stats"], gti_assessment), + 85, + ) + + def test_compute_score_gti_assessment_no_threat_score(self): + """GTI assessment present but missing threat_score falls back to stats.""" + builder = VirusTotalBuilder( + self.helper, + self.author, + True, + [], + {"id": "fakeid"}, + {"id": "fakeid"}, + self.load_file("vt_test_file.json")["data"], + ) + attributes = self.load_file("vt_test_file.json")["data"]["attributes"] + self.assertEqual( + builder._compute_score(attributes["last_analysis_stats"], {}), 72 + ) + + def test_compute_score_gti_assessment_none(self): + """gti_assessment=None falls back to stats-based computation.""" + builder = VirusTotalBuilder( + self.helper, + self.author, + True, + [], + {"id": "fakeid"}, + {"id": "fakeid"}, + self.load_file("vt_test_file.json")["data"], + ) + attributes = self.load_file("vt_test_file.json")["data"]["attributes"] + self.assertEqual( + builder._compute_score(attributes["last_analysis_stats"], None), 72 + ) def test_create_asn_belongs_to(self): observable = { @@ -143,6 +196,8 @@ def test_create_notes(self): observable = { "standard_id": "url--94a2e4e9-bb9a-544a-b379-44923d37ca82", "id": "94a2e4e9-bb9a-544a-b379-44923d37ca82", + "entity_type": "Url", + "observable_value": "http://soclosebutyetqq.com/69.exe", } stix_entity = {"id": "url--94a2e4e9-bb9a-544a-b379-44923d37ca82"} builder = VirusTotalBuilder( @@ -157,13 +212,19 @@ def test_create_notes(self): builder.create_notes() # Bundle should have 3 elements: the author, the asn and the relationship. self.assertEqual(len(builder.bundle), 4) - self.assertEqual(builder.bundle[2].abstract, "VirusTotal Results") + self.assertEqual( + builder.bundle[2].abstract, + "VirusTotal Results (Url: http://soclosebutyetqq.com/69.exe)", + ) self.assertTrue("Sangfor" in builder.bundle[2].content) self.assertEqual(builder.bundle[2].created_by_ref, self.author.id) self.assertTrue( "url--94a2e4e9-bb9a-544a-b379-44923d37ca82" in builder.bundle[2].object_refs ) - self.assertEqual(builder.bundle[3].abstract, "VirusTotal Categories") + self.assertEqual( + builder.bundle[3].abstract, + "VirusTotal Categories (Url: http://soclosebutyetqq.com/69.exe)", + ) self.assertTrue("Sophos" in builder.bundle[3].content) self.assertEqual(builder.bundle[2].created_by_ref, self.author.id) self.assertEqual(builder.bundle[3].created_by_ref, self.author.id) @@ -233,6 +294,74 @@ def test_extract_link(self): "https://www.virustotal.com/gui/url/7d83e9f686ff0122ded311f27aababf6922800a45a23a4dacc860b56ccada4cb", ) + def test_is_indicator_skips_create_indicator_based_on(self): + """When is_indicator=True, create_indicator_based_on must be a no-op.""" + + stix_entity = {"id": "indicator--aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"} + opencti_entity = { + "entity_type": "IPv4-Addr", + "observable_value": "1.2.3.4", + } + builder = VirusTotalBuilder( + self.helper, + self.author, + True, + [stix_entity], + stix_entity, + opencti_entity, + self.load_file("vt_test_ipv4.json")["data"], + is_indicator=True, + ) + initial_bundle_len = len(builder.bundle) + config = IndicatorConfig(threshold=1, valid_minutes=2880, detect=True) + builder.create_indicator_based_on(config, "[ipv4-addr:value = '1.2.3.4']") + # Bundle must not grow — no new indicator was created. + self.assertEqual(len(builder.bundle), initial_bundle_len) + + def test_is_indicator_sets_score_via_octi_extension(self): + """When is_indicator=True, the STIX_EXT_OCTI extension should carry the score.""" + + stix_entity = {"id": "indicator--aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"} + opencti_entity = { + "entity_type": "IPv4-Addr", + "observable_value": "1.2.3.4", + } + _ = VirusTotalBuilder( + self.helper, + self.author, + True, + [stix_entity], + stix_entity, + opencti_entity, + self.load_file("vt_test_ipv4.json")["data"], + is_indicator=True, + ) + ext_data = stix_entity.get("extensions", {}).get(STIX_EXT_OCTI, {}) + self.assertIn("score", ext_data) + + def test_update_labels_for_indicator(self): + """When is_indicator=True, update_labels should set labels directly on stix_entity.""" + stix_entity = {"id": "indicator--aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"} + opencti_entity = { + "entity_type": "StixFile", + "observable_value": "abc123", + } + builder = VirusTotalBuilder( + self.helper, + self.author, + True, + [stix_entity], + stix_entity, + opencti_entity, + self.load_file("vt_test_file.json")["data"], + is_indicator=True, + ) + builder.update_labels() + # Tags from vt_test_file should now be in stix_entity["labels"]. + self.assertIn("labels", stix_entity) + self.assertIsInstance(stix_entity["labels"], list) + self.assertTrue(len(stix_entity["labels"]) > 0) + @staticmethod def load_file(filename: str): """Utility function to load a json file to a dict.""" diff --git a/internal-enrichment/virustotal/tests/tests_virustotal/test_client.py b/internal-enrichment/virustotal/tests/tests_virustotal/test_client.py index bdbdffdee77..9dbab086384 100644 --- a/internal-enrichment/virustotal/tests/tests_virustotal/test_client.py +++ b/internal-enrichment/virustotal/tests/tests_virustotal/test_client.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- """Virustotal client unittest.""" import unittest @@ -12,3 +11,12 @@ def test_base64_encode_no_padding(self): VirusTotalClient.base64_encode_no_padding("http://myetherevvalliet.com/"), "aHR0cDovL215ZXRoZXJldnZhbGxpZXQuY29tLw", ) + + def test_x_tool_header_set(self): + from unittest.mock import MagicMock + + helper = MagicMock() + helper.connector_id = "test-connector-uuid" + client = VirusTotalClient(helper, "https://www.virustotal.com", "fake-api-key") + self.assertIn("x-tool", client.headers) + self.assertIn("test-connector-uuid", client.headers["x-tool"]) diff --git a/internal-enrichment/virustotal/tests/tests_virustotal/test_virustotal.py b/internal-enrichment/virustotal/tests/tests_virustotal/test_virustotal.py new file mode 100644 index 00000000000..7acc77b2bc2 --- /dev/null +++ b/internal-enrichment/virustotal/tests/tests_virustotal/test_virustotal.py @@ -0,0 +1,187 @@ +"""VirusTotal connector unit tests.""" + +import unittest +from unittest.mock import MagicMock, PropertyMock + +import stix2 +from pycti import Identity +from virustotal.virustotal import VirusTotalConnector + + +def _make_connector() -> VirusTotalConnector: + """Build a VirusTotalConnector with all external dependencies mocked.""" + config = MagicMock() + config.virustotal.max_tlp = "TLP:AMBER" + config.virustotal.replace_with_lower_score = True + config.virustotal.file_create_note_full_report = True + config.virustotal.file_import_yara = True + config.virustotal.file_upload_unseen_artifacts = False + config.virustotal.ip_add_relationships = False + config.virustotal.domain_add_relationships = False + config.virustotal.url_upload_unseen = False + config.virustotal.include_attributes_in_note = False + config.virustotal.token.get_secret_value.return_value = "fake-token" + config.virustotal.model_extra.get.return_value = MagicMock( + threshold=10, valid_minutes=2880, detect=True + ) + + helper = MagicMock() + confidence_level = PropertyMock(return_value=50) + type(helper).connect_confidence_level = confidence_level + helper.connect_confidence_level = 50 + helper.opencti_url = "http://localhost" + + connector = VirusTotalConnector.__new__(VirusTotalConnector) + connector.config = config + connector.helper = helper + connector.max_tlp = config.virustotal.max_tlp + connector.replace_with_lower_score = config.virustotal.replace_with_lower_score + connector.file_create_note_full_report = ( + config.virustotal.file_create_note_full_report + ) + connector.file_import_yara = config.virustotal.file_import_yara + connector.file_upload_unseen_artifacts = ( + config.virustotal.file_upload_unseen_artifacts + ) + connector.ip_add_relationships = config.virustotal.ip_add_relationships + connector.domain_add_relationships = config.virustotal.domain_add_relationships + connector.url_upload_unseen = config.virustotal.url_upload_unseen + connector.include_attributes_in_note = config.virustotal.include_attributes_in_note + connector.file_indicator_config = MagicMock( + threshold=10, valid_minutes=2880, detect=True + ) + connector.ip_indicator_config = MagicMock( + threshold=10, valid_minutes=2880, detect=True + ) + connector.domain_indicator_config = MagicMock( + threshold=10, valid_minutes=2880, detect=True + ) + connector.url_indicator_config = MagicMock( + threshold=10, valid_minutes=2880, detect=True + ) + connector.yara_cache = {} + connector.author = stix2.Identity( + id=Identity.generate_id("VirusTotal", "organization"), + name="VirusTotal", + identity_class="organization", + ) + connector.client = MagicMock() + return connector + + +class TestExtractObservableFromIndicator(unittest.TestCase): + """Tests for _extract_observable_from_indicator.""" + + def setUp(self): + self.connector = _make_connector() + + def _indicator_entity(self, observable_values): + """Build a minimal indicator opencti_entity with x_opencti_observable_values.""" + entity = { + "entity_type": "Indicator", + "name": "test-indicator", + "objectMarking": [], + } + # Simulate what helper.get_attribute_in_extension returns. + self.connector.helper.get_attribute_in_extension.return_value = ( + observable_values + ) + return entity + + def test_extracts_ipv4(self): + entity = self._indicator_entity([{"type": "IPv4-Addr", "value": "1.2.3.4"}]) + results = self.connector._extract_observable_from_indicator(entity) + self.assertEqual(results, [("IPv4-Addr", "1.2.3.4")]) + + def test_extracts_domain(self): + entity = self._indicator_entity( + [{"type": "Domain-Name", "value": "evil.example.com"}] + ) + results = self.connector._extract_observable_from_indicator(entity) + self.assertEqual(results, [("Domain-Name", "evil.example.com")]) + + def test_extracts_hostname(self): + entity = self._indicator_entity( + [{"type": "Hostname", "value": "mail.evil.example.com"}] + ) + results = self.connector._extract_observable_from_indicator(entity) + self.assertEqual(results, [("Hostname", "mail.evil.example.com")]) + + def test_extracts_url(self): + entity = self._indicator_entity( + [{"type": "Url", "value": "https://evil.example.com/payload"}] + ) + results = self.connector._extract_observable_from_indicator(entity) + self.assertEqual(results, [("Url", "https://evil.example.com/payload")]) + + def test_extracts_stixfile(self): + sha256 = "a" * 64 + entity = self._indicator_entity([{"type": "StixFile", "value": sha256}]) + results = self.connector._extract_observable_from_indicator(entity) + self.assertEqual(results, [("StixFile", sha256)]) + + def test_extracts_stixfile_prefers_sha256_from_hashes(self): + """For StixFile, SHA-256 from hashes list should be preferred over value.""" + sha256 = "b" * 64 + md5 = "c" * 32 + entity = self._indicator_entity( + [ + { + "type": "StixFile", + "value": md5, + "hashes": [ + {"algorithm": "MD5", "hash": md5}, + {"algorithm": "SHA-256", "hash": sha256}, + ], + } + ] + ) + results = self.connector._extract_observable_from_indicator(entity) + self.assertEqual(results, [("StixFile", sha256)]) + + def test_extracts_stixfile_falls_back_to_value_when_no_hashes(self): + """For StixFile, falls back to value when hashes list is empty.""" + sha256 = "d" * 64 + entity = self._indicator_entity( + [{"type": "StixFile", "value": sha256, "hashes": []}] + ) + results = self.connector._extract_observable_from_indicator(entity) + self.assertEqual(results, [("StixFile", sha256)]) + + def test_extracts_all_supported_from_compound_indicator(self): + """Compound indicators yield one (entity_type, value) pair per observable.""" + entity = self._indicator_entity( + [ + {"type": "IPv4-Addr", "value": "1.2.3.4"}, + {"type": "Domain-Name", "value": "evil.example.com"}, + ] + ) + results = self.connector._extract_observable_from_indicator(entity) + self.assertEqual( + results, + [("IPv4-Addr", "1.2.3.4"), ("Domain-Name", "evil.example.com")], + ) + + def test_raises_when_no_observable_values(self): + self.connector.helper.get_attribute_in_extension.return_value = None + entity = {"entity_type": "Indicator", "name": "x", "objectMarking": []} + with self.assertRaises(ValueError) as ctx: + self.connector._extract_observable_from_indicator(entity) + self.assertIn("no observable values found", str(ctx.exception)) + + def test_raises_when_unsupported_type(self): + entity = self._indicator_entity([{"type": "IPv6-Addr", "value": "::1"}]) + with self.assertRaises(ValueError) as ctx: + self.connector._extract_observable_from_indicator(entity) + self.assertIn("are supported", str(ctx.exception)) + + def test_skips_unsupported_type_and_returns_supported(self): + """Unsupported types are silently skipped; supported ones are still returned.""" + entity = self._indicator_entity( + [ + {"type": "IPv6-Addr", "value": "::1"}, + {"type": "IPv4-Addr", "value": "1.2.3.4"}, + ] + ) + results = self.connector._extract_observable_from_indicator(entity) + self.assertEqual(results, [("IPv4-Addr", "1.2.3.4")]) diff --git a/internal-enrichment/vmray-analyzer/src/requirements.txt b/internal-enrichment/vmray-analyzer/src/requirements.txt index 047a51830db..8c2a5b0ba9d 100644 --- a/internal-enrichment/vmray-analyzer/src/requirements.txt +++ b/internal-enrichment/vmray-analyzer/src/requirements.txt @@ -1,2 +1,2 @@ -pycti==7.260309.0 +pycti==7.260515.0 vmray-rest-api==6.0.0 diff --git a/internal-enrichment/yara/.env.sample b/internal-enrichment/yara/.env.sample new file mode 100644 index 00000000000..88e4fce6d13 --- /dev/null +++ b/internal-enrichment/yara/.env.sample @@ -0,0 +1,26 @@ +# Generic parameters (connection with OpenCTI) + +# Required +OPENCTI_URL=http://localhost +# Required +OPENCTI_TOKEN=CHANGEME + + +# Common parameters for connectors of type INTERNAL_ENRICHMENT + +# Optional (default: generated UUIDv4) +CONNECTOR_ID=840210d2-cb25-4841-81c2-850b431918ee +# Optional (default: 'YARA') +CONNECTOR_NAME=YARA +# Optional (default: 'Artifact') +CONNECTOR_SCOPE=Artifact +# Optional (default: 'error') +CONNECTOR_LOG_LEVEL=error +# Optional (default: false) +CONNECTOR_AUTO=false + + +# Connector-specific parameters + +# Optional (default: None) - Default TLP marking for relationships when entities have none +#YARA_TLP_LEVEL=clear diff --git a/internal-enrichment/yara/Dockerfile b/internal-enrichment/yara/Dockerfile index 1c8df9e3140..8b49b0cd622 100644 --- a/internal-enrichment/yara/Dockerfile +++ b/internal-enrichment/yara/Dockerfile @@ -1,18 +1,16 @@ FROM python:3.12-alpine -ENV CONNECTOR_TYPE=INTERNAL_ENRICHMENT # Copy the connector COPY src /opt/opencti-yara +WORKDIR /opt/opencti-yara # Install Python modules # hadolint ignore=DL3003 RUN apk update && apk upgrade && \ apk --no-cache add gcc git build-base libmagic libffi-dev yara -RUN pip3 install --no-cache-dir -r /opt/opencti-yara/requirements.txt && \ +RUN cd /opt/opencti-yara && \ + pip3 install --no-cache-dir -r requirements.txt && \ apk del git build-base -# Expose and entrypoint -COPY entrypoint.sh / -RUN chmod +x /entrypoint.sh -ENTRYPOINT ["/entrypoint.sh"] +CMD ["python", "main.py"] diff --git a/internal-enrichment/yara/README.md b/internal-enrichment/yara/README.md index f59f4dee055..61faf21cf2f 100644 --- a/internal-enrichment/yara/README.md +++ b/internal-enrichment/yara/README.md @@ -1,8 +1,8 @@ # OpenCTI YARA Connector -| Status | Date | Comment | -|--------|------|---------| -| Community | - | - | +| Status | Date | Comment | +|----------|------------|---------| +| Verified | 2026-04-09 | - | ## Table of Contents @@ -37,7 +37,7 @@ When a YARA rule matches an artifact, the connector creates a relationship betwe ### Requirements -- OpenCTI Platform >= 7.260309.0 +- OpenCTI Platform >= 7.260515.0 - YARA rules imported as Indicators in OpenCTI --- @@ -59,7 +59,6 @@ When a YARA rule matches an artifact, the connector creates a relationship betwe | `connector_name` | `CONNECTOR_NAME` | Yes | Set to "YARA" | | `connector_scope` | `CONNECTOR_SCOPE` | Yes | Must be `Artifact` | | `connector_auto` | `CONNECTOR_AUTO` | Yes | Enable/disable auto-enrichment | -| `connector_confidence_level` | `CONNECTOR_CONFIDENCE_LEVEL` | Yes | Default confidence level (0-100) | | `connector_log_level` | `CONNECTOR_LOG_LEVEL` | Yes | Log level (`debug`, `info`, `warn`, `error`) | --- @@ -84,7 +83,6 @@ services: - CONNECTOR_NAME=YARA - CONNECTOR_SCOPE=Artifact - CONNECTOR_AUTO=true - - CONNECTOR_CONFIDENCE_LEVEL=100 - CONNECTOR_LOG_LEVEL=error restart: always ``` diff --git a/internal-enrichment/yara/__metadata__/CONNECTOR_CONFIG_DOC.md b/internal-enrichment/yara/__metadata__/CONNECTOR_CONFIG_DOC.md new file mode 100644 index 00000000000..d0d59d5ed08 --- /dev/null +++ b/internal-enrichment/yara/__metadata__/CONNECTOR_CONFIG_DOC.md @@ -0,0 +1,16 @@ +# Connector Configurations + +Below is an exhaustive enumeration of all configurable parameters available, each accompanied by detailed explanations of their purposes, default behaviors, and usage guidelines to help you understand and utilize them effectively. + +### Type: `object` + +| Property | Type | Required | Possible values | Default | Description | +| -------- | ---- | -------- | --------------- | ------- | ----------- | +| OPENCTI_URL | `string` | ✅ | Format: [`uri`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | The base URL of the OpenCTI instance. | +| OPENCTI_TOKEN | `string` | ✅ | string | | The API token to connect to OpenCTI. | +| CONNECTOR_NAME | `string` | | string | `"YARA"` | The name of the connector. | +| CONNECTOR_SCOPE | `array` | | string | `["Artifact"]` | The scope of the connector. | +| CONNECTOR_LOG_LEVEL | `string` | | `debug` `info` `warn` `warning` `error` | `"error"` | The minimum level of logs to display. | +| CONNECTOR_TYPE | `const` | | `INTERNAL_ENRICHMENT` | `"INTERNAL_ENRICHMENT"` | | +| CONNECTOR_AUTO | `boolean` | | boolean | `false` | Whether the connector should run automatically when an entity is created or updated. | +| YARA_TLP_LEVEL | `string` | | `clear` `white` `green` `amber` `amber+strict` `red` | `"clear"` | Default TLP marking to apply to created relationships when neither the artifact nor the indicator have markings. | diff --git a/internal-enrichment/yara/__metadata__/connector_config_schema.json b/internal-enrichment/yara/__metadata__/connector_config_schema.json new file mode 100644 index 00000000000..0ebc145ee2a --- /dev/null +++ b/internal-enrichment/yara/__metadata__/connector_config_schema.json @@ -0,0 +1,73 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://www.filigran.io/connectors/yara_config.schema.json", + "type": "object", + "properties": { + "OPENCTI_URL": { + "description": "The base URL of the OpenCTI instance.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "OPENCTI_TOKEN": { + "description": "The API token to connect to OpenCTI.", + "type": "string" + }, + "CONNECTOR_NAME": { + "default": "YARA", + "description": "The name of the connector.", + "type": "string" + }, + "CONNECTOR_SCOPE": { + "default": [ + "Artifact" + ], + "description": "The scope of the connector.", + "items": { + "type": "string" + }, + "type": "array" + }, + "CONNECTOR_LOG_LEVEL": { + "default": "error", + "description": "The minimum level of logs to display.", + "enum": [ + "debug", + "info", + "warn", + "warning", + "error" + ], + "type": "string" + }, + "CONNECTOR_TYPE": { + "const": "INTERNAL_ENRICHMENT", + "default": "INTERNAL_ENRICHMENT", + "type": "string" + }, + "CONNECTOR_AUTO": { + "default": false, + "description": "Whether the connector should run automatically when an entity is created or updated.", + "type": "boolean" + }, + "YARA_TLP_LEVEL": { + "description": "Default TLP marking to apply to created relationships when neither the artifact nor the indicator have markings.", + "enum": [ + "clear", + "white", + "green", + "amber", + "amber+strict", + "red" + ], + "type": "string", + "default": "clear" + } + }, + "required": [ + "OPENCTI_URL", + "OPENCTI_TOKEN" + ], + "additionalProperties": true +} \ No newline at end of file diff --git a/internal-enrichment/yara/__metadata__/connector_manifest.json b/internal-enrichment/yara/__metadata__/connector_manifest.json index b9e819fd58f..e48b32ef1ba 100644 --- a/internal-enrichment/yara/__metadata__/connector_manifest.json +++ b/internal-enrichment/yara/__metadata__/connector_manifest.json @@ -7,14 +7,14 @@ "use_cases": [ "Malware Analysis" ], - "verified": false, - "last_verified_date": null, + "verified": true, + "last_verified_date": "2026-04-09", "playbook_supported": false, "max_confidence_level": 50, "support_version": ">= 5.7.2", "subscription_link": "", "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/internal-enrichment/yara", - "manager_supported": false, + "manager_supported": true, "container_version": "rolling", "container_image": "opencti/connector-yara", "container_type": "INTERNAL_ENRICHMENT" diff --git a/internal-enrichment/yara/src/config.yml.sample b/internal-enrichment/yara/config.yml.sample similarity index 57% rename from internal-enrichment/yara/src/config.yml.sample rename to internal-enrichment/yara/config.yml.sample index 72f13f297b7..b156ca67c32 100644 --- a/internal-enrichment/yara/src/config.yml.sample +++ b/internal-enrichment/yara/config.yml.sample @@ -3,10 +3,11 @@ opencti: token: 'ChangeMe' connector: - type: 'INTERNAL_ENRICHMENT' - id: 'ChangeMe' + id: '840210d2-cb25-4841-81c2-850b431918ee' name: 'YARA' scope: 'Artifact' # MIME type or SCO auto: true # Enable/disable auto-enrichment of observables - confidence_level: 100 # From 0 (Unknown) to 100 (Fully trusted) - log_level: 'info' \ No newline at end of file + log_level: 'info' + +yara: + tlp_level: 'clear' diff --git a/internal-enrichment/yara/docker-compose.yml b/internal-enrichment/yara/docker-compose.yml index 1c0c96cef3c..4783432b266 100644 --- a/internal-enrichment/yara/docker-compose.yml +++ b/internal-enrichment/yara/docker-compose.yml @@ -5,10 +5,10 @@ services: environment: - OPENCTI_URL=http://localhost - OPENCTI_TOKEN=ChangeMe - - CONNECTOR_ID=ChangeMe + - CONNECTOR_ID=840210d2-cb25-4841-81c2-850b431918ee - CONNECTOR_NAME=YARA - CONNECTOR_SCOPE=Artifact # MIME type or Stix Object - CONNECTOR_AUTO=true - - CONNECTOR_CONFIDENCE_LEVEL=100 # From 0 (Unknown) to 100 (Fully trusted) - CONNECTOR_LOG_LEVEL=error + #- YARA_TLP_LEVEL=clear restart: always diff --git a/internal-enrichment/yara/entrypoint.sh b/internal-enrichment/yara/entrypoint.sh deleted file mode 100644 index 11fc3998614..00000000000 --- a/internal-enrichment/yara/entrypoint.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh - -# Go to the right directory -cd /opt/opencti-yara - -# Launch the connector -python3 main.py diff --git a/internal-enrichment/yara/src/connector/__init__.py b/internal-enrichment/yara/src/connector/__init__.py new file mode 100644 index 00000000000..030fc990845 --- /dev/null +++ b/internal-enrichment/yara/src/connector/__init__.py @@ -0,0 +1,7 @@ +from connector.connector import YaraConnector +from connector.settings import ConnectorSettings + +__all__ = [ + "YaraConnector", + "ConnectorSettings", +] diff --git a/internal-enrichment/yara/src/connector/connector.py b/internal-enrichment/yara/src/connector/connector.py new file mode 100644 index 00000000000..0d67a15d0e8 --- /dev/null +++ b/internal-enrichment/yara/src/connector/connector.py @@ -0,0 +1,229 @@ +import stix2 +import yara +from connector.settings import ConnectorSettings +from pycti import ( + Identity, + MarkingDefinition, + OpenCTIConnectorHelper, + StixCoreRelationship, +) +from stix2 import Relationship + + +class YaraConnector: + def __init__(self, config: ConnectorSettings, helper: OpenCTIConnectorHelper): + self.config = config + self.helper = helper + self.octi_api_url = str(self.config.opencti.url).rstrip("/") + self.tlp_level = self.config.yara.tlp_level + self.author = stix2.Identity( + id=Identity.generate_id("YARA", "organization"), + name="YARA", + identity_class="organization", + description="YARA connector for OpenCTI", + ) + + def _get_artifact_contents(self, artifact) -> list[bytes]: + """ + Retrieves the content associated with the artefact from OpenCTI, extracts the files and downloads their + contents in binary format for further processing. + + :param artifact: Dictionary containing all the information in the OpenCTI artefact, potentially with an + 'importFiles' key and a list of files to be retrieved. + :return: List of the binary contents of the files associated with the artefact, returns an empty list `[]` + if no files are associated. + """ + self.helper.connector_logger.debug( + "Getting Artifact contents (bytes) from OpenCTI" + ) + + artifact_files_contents = artifact.get("importFiles", []) + + files_contents = [] + if artifact_files_contents: + for artifact_file_content in artifact_files_contents: + file_name = artifact_file_content.get("name") + file_id = artifact_file_content.get("id") + file_url = self.octi_api_url + "/storage/get/" + file_id + file_content = self.helper.api.fetch_opencti_file(file_url, binary=True) + files_contents.append(file_content) + self.helper.connector_logger.debug( + f"Associated file found in Artifact with file_name :{file_name}" + ) + else: + self.helper.connector_logger.debug("No associated files found in Artifact") + return files_contents + + def _get_yara_indicators(self) -> list: + self.helper.connector_logger.debug("Getting all YARA Indicators in OpenCTI") + + data = {"pagination": {"hasNextPage": True, "endCursor": None}} + all_entities = [] + customAttributes = """ + id + name + standard_id + pattern + pattern_type + valid_from + objectMarking { + standard_id + } + """ + while data["pagination"]["hasNextPage"]: + after = data["pagination"]["endCursor"] + data = self.helper.api.indicator.list( + first=1000, + after=after, + filters={ + "mode": "and", + "filters": [{"key": "pattern_type", "values": ["yara"]}], + "filterGroups": [], + }, + orderBy="created_at", + orderMode="asc", + withPagination=True, + customAttributes=customAttributes, + ) + all_entities += data["entities"] + return all_entities + + def _collect_marking_refs(self, artifact, indicator): + """Collect unique marking definition refs from both entities, falling back to default marking.""" + marking_refs = set() + for marking in artifact.get("objectMarking", []): + std_id = marking.get("standard_id") + if std_id: + marking_refs.add(std_id) + for marking in indicator.get("objectMarking", []): + std_id = marking.get("standard_id") + if std_id: + marking_refs.add(std_id) + if not marking_refs and self.tlp_level: + tlp_value = "TLP:" + self.tlp_level.upper() + marking_refs.add(MarkingDefinition.generate_id("TLP", tlp_value)) + return list(marking_refs) if marking_refs else None + + def _scan_artifact(self, artifact, yara_indicators) -> tuple[list, list[str]]: + self.helper.connector_logger.debug("Scanning Artifact contents with YARA") + + artifact_contents = self._get_artifact_contents(artifact) + + bundle_objects = [] + matched_indicators = {} + errors = [] + for artifact_content in artifact_contents: + for indicator in yara_indicators: + try: + rule_content = indicator["pattern"] + rule = yara.compile(source=rule_content) + except yara.SyntaxError as e: + msg = f"YARA syntax error in rule '{indicator['name']}': {e}" + self.helper.connector_logger.error(msg) + errors.append(msg) + continue + + results = rule.match(data=artifact_content, timeout=60) + if results: + marking_refs = self._collect_marking_refs(artifact, indicator) + relationship = Relationship( + id=StixCoreRelationship.generate_id( + "related-to", + artifact["standard_id"], + indicator["standard_id"], + ), + relationship_type="related-to", + created_by_ref=self.author["id"], + source_ref=artifact["standard_id"], + target_ref=indicator["standard_id"], + description="YARA rule matched for this Artifact", + ) + if marking_refs: + relationship = relationship.new_version( + object_marking_refs=marking_refs + ) + bundle_objects.append(relationship) + # Include matched indicator in bundle so cleanup_inconsistent_bundle + # does not remove the relationship referencing it + if indicator["standard_id"] not in matched_indicators: + matched_indicators[indicator["standard_id"]] = stix2.Indicator( + id=indicator["standard_id"], + name=indicator["name"], + pattern=indicator["pattern"], + pattern_type=indicator["pattern_type"], + valid_from=indicator["valid_from"], + ) + self.helper.connector_logger.debug( + f"Created Relationship from Artifact to YARA Indicator {indicator['name']}" + ) + + return bundle_objects + list(matched_indicators.values()), errors + + def _process_message(self, data: dict) -> str: + entity_id = data["entity_id"] + stix_objects = data.get("stix_objects", []) + + # Preserve original file name to avoid artifact.bin fallback in pycti + # Artifact naming relies on the presence of `x_opencti_additional_names` + # but this field is not provided in the enrichment message from OpenCTI. + if data.get("entity_type") == "Artifact": + stix_entity = data.get("stix_entity", {}) + x_opencti_files = stix_entity.get("x_opencti_files", []) + if x_opencti_files: + file_name = x_opencti_files[0].get("name") + if file_name: + for obj in stix_objects: + if isinstance(obj, dict) and obj.get("id") == entity_id: + self.helper.connector_logger.info( + f"Setting x_opencti_additional_names for Artifact {entity_id} to preserve original file name: {file_name}" + ) + obj.setdefault("x_opencti_additional_names", [file_name]) + break + + # Check scope — forward original bundle if entity type is out of scope + entity_type = data.get("entity_type") + if entity_type not in self.config.connector.scope: + self.helper.connector_logger.info( + "Entity type not in connector scope, forwarding original bundle", + {"entity_id": entity_id, "entity_type": entity_type}, + ) + bundle = self.helper.stix2_create_bundle(stix_objects) + self.helper.send_stix2_bundle(bundle, cleanup_inconsistent_bundle=True) + return "Entity type not in scope" + + self.helper.connector_logger.info(f"Enriching {entity_id}") + artifact = data["enrichment_entity"] + self.helper.connector_logger.info(f"Artifact to enrich: {artifact}") + + yara_indicators = self._get_yara_indicators() + if not yara_indicators: + self.helper.connector_logger.debug("No YARA Indicators to match") + bundle = self.helper.stix2_create_bundle(stix_objects) + self.helper.send_stix2_bundle(bundle, cleanup_inconsistent_bundle=True) + return "No YARA Indicators to match" + + rule_count = len(yara_indicators) + self.helper.connector_logger.debug( + f"Scanning an Artifact with {rule_count} rules" + ) + new_objects, errors = self._scan_artifact(artifact, yara_indicators) + + if new_objects: + all_objects = stix_objects + [self.author] + new_objects + else: + all_objects = stix_objects + self.helper.connector_logger.debug( + f"Sending {len(all_objects)} new relationships to OpenCTI" + ) + bundle = self.helper.stix2_create_bundle(all_objects) + self.helper.send_stix2_bundle(bundle, cleanup_inconsistent_bundle=True) + + if errors: + return f"Completed with {len(errors)} YARA error(s): {'; '.join(errors)}" + + return "Done" + + # Start the main loop + def start(self) -> None: + self.helper.connector_logger.info("YARA connector started") + self.helper.listen(message_callback=self._process_message) diff --git a/internal-enrichment/yara/src/connector/settings.py b/internal-enrichment/yara/src/connector/settings.py new file mode 100644 index 00000000000..efc7d3803c5 --- /dev/null +++ b/internal-enrichment/yara/src/connector/settings.py @@ -0,0 +1,50 @@ +from connectors_sdk import ( + BaseConfigModel, + BaseConnectorSettings, + BaseInternalEnrichmentConnectorConfig, + ListFromString, +) +from connectors_sdk.models.enums import TLPLevel +from pydantic import Field + + +class InternalEnrichmentConnectorConfig(BaseInternalEnrichmentConnectorConfig): + """ + Override the `BaseInternalEnrichmentConnectorConfig` to add parameters and/or defaults + to the configuration for connectors of type `INTERNAL_ENRICHMENT`. + """ + + id: str = Field( + description="A UUID v4 to identify the connector in OpenCTI.", + default="840210d2-cb25-4841-81c2-850b431918ee", + ) + name: str = Field( + description="The name of the connector.", + default="YARA", + ) + scope: ListFromString = Field( + description="The scope of the connector.", + default=["Artifact"], + ) + + +class YaraConfig(BaseConfigModel): + """ + Define parameters and/or defaults for the configuration specific to the `YaraConnector`. + """ + + tlp_level: TLPLevel | None = Field( + description="Default TLP marking to apply to created relationships when neither the artifact nor the indicator have markings.", + default=TLPLevel.CLEAR, + ) + + +class ConnectorSettings(BaseConnectorSettings): + """ + Override `BaseConnectorSettings` to include `InternalEnrichmentConnectorConfig`. + """ + + connector: InternalEnrichmentConnectorConfig = Field( + default_factory=InternalEnrichmentConnectorConfig + ) + yara: YaraConfig = Field(default_factory=YaraConfig) diff --git a/internal-enrichment/yara/src/main.py b/internal-enrichment/yara/src/main.py index 0539780a41e..050c0952cd5 100644 --- a/internal-enrichment/yara/src/main.py +++ b/internal-enrichment/yara/src/main.py @@ -1,159 +1,26 @@ -import os -import sys -import time - -import yaml -import yara -from pycti import ( - OpenCTIApiClient, - OpenCTIConnectorHelper, - StixCoreRelationship, - get_config_variable, -) -from stix2 import TLP_WHITE, Bundle, Relationship - - -class YaraConnector: - def __init__(self): - config_file_path = os.path.dirname(os.path.abspath(__file__)) + "/config.yml" - config = ( - yaml.load(open(config_file_path), Loader=yaml.FullLoader) - if os.path.isfile(config_file_path) - else {} - ) - self.helper = OpenCTIConnectorHelper(config) - self.client = OpenCTIApiClient( - url=self.helper.get_opencti_url(), token=self.helper.get_opencti_token() - ) - self.octi_api_url = get_config_variable( - "OPENCTI_URL", ["opencti", "url"], config - ) - - def _get_artifact_contents(self, artifact) -> list[bytes]: - """ - Retrieves the content associated with the artefact from OpenCTI, extracts the files and downloads their - contents in binary format for further processing. - - :param artifact: Dictionary containing all the information in the OpenCTI artefact, potentially with an - ‘importFiles’ key and a list of files to be retrieved. - :return: List of the binary contents of the files associated with the artefact, returns an empty list `[]` - if no files are associated. - """ - self.helper.log_debug("Getting Artifact contents (bytes) from OpenCTI") - - artifact_files_contents = artifact.get("importFiles", []) - - files_contents = [] - if artifact_files_contents: - for artifact_file_content in artifact_files_contents: - file_name = artifact_file_content.get("name") - file_id = artifact_file_content.get("id") - file_url = self.octi_api_url + "/storage/get/" + file_id - file_content = self.helper.api.fetch_opencti_file(file_url, binary=True) - files_contents.append(file_content) - self.helper.log_debug( - f"Associated file found in Artifact with file_name :{file_name}" - ) - else: - self.helper.log_debug("No associated files found in Artifact") - return files_contents - - def _get_yara_indicators(self) -> list: - self.helper.log_debug("Getting all YARA Indicators in OpenCTI") - - data = {"pagination": {"hasNextPage": True, "endCursor": None}} - customAttributes = """ - id - name - standard_id - pattern - pattern_type - """ - while data["pagination"]["hasNextPage"]: - after = data["pagination"]["endCursor"] - data = self.helper.api.indicator.list( - first=1000, - after=after, - filters={ - "mode": "and", - "filters": [{"key": "pattern_type", "values": ["yara"]}], - "filterGroups": [], - }, - orderBy="created_at", - orderMode="asc", - withPagination=True, - customAttributes=customAttributes, - ) - return data["entities"] - - def _scan_artifact(self, artifact, yara_indicators) -> None: - self.helper.log_debug("Scanning Artifact contents with YARA") - - artifact_contents = self._get_artifact_contents(artifact) - - bundle_objects = [] - for artifact_content in artifact_contents: - for indicator in yara_indicators: - try: - rule_content = indicator["pattern"] - rule = yara.compile(source=rule_content) - except yara.SyntaxError: - self.helper.log_error( - f"Encountered YARA syntax error {indicator['name']}" - ) - continue - - results = rule.match(data=artifact_content, timeout=60) - if results: - relationship = Relationship( - id=StixCoreRelationship.generate_id( - "related-to", - artifact["standard_id"], - indicator["standard_id"], - ), - relationship_type="related-to", - object_marking_refs=[TLP_WHITE], - source_ref=artifact["standard_id"], - target_ref=indicator["standard_id"], - description="YARA rule matched for this Artifact", - ) - bundle_objects.append(relationship) - self.helper.log_debug( - f"Created Relationship from Artifact to YARA Indicator {indicator['name']}" - ) - - if any(bundle_objects): - bundle = Bundle(objects=bundle_objects).serialize() - self.helper.send_stix2_bundle(bundle) - - def _process_message(self, data: dict) -> str: - entity_id = data["entity_id"] - self.helper.log_info(f"Enriching {entity_id}") - artifact = data["enrichment_entity"] - - response = "Done" - yara_indicators = self._get_yara_indicators() - if any(yara_indicators): - rule_count = len(yara_indicators) - self.helper.log_debug(f"Scanning an Artifact with {rule_count} rules") - self._scan_artifact(artifact, yara_indicators) - else: - self.helper.log_debug("No YARA Indicators to match") - response = "No YARA Indicators to match" - - return response - - # Start the main loop - def start(self) -> None: - self.helper.log_info("YARA connector started") - self.helper.listen(message_callback=self._process_message) +import traceback +from connector import ConnectorSettings, YaraConnector +from pycti import OpenCTIConnectorHelper if __name__ == "__main__": + """ + Entry point of the script + + - traceback.print_exc(): This function prints the traceback of the exception to the standard error (stderr). + The traceback includes information about the point in the program where the exception occurred, + which is very useful for debugging purposes. + - exit(1): effective way to terminate a Python program when an error is encountered. + It signals to the operating system and any calling processes that the program did not complete successfully. + """ try: - connector = YaraConnector() + settings = ConnectorSettings() + helper = OpenCTIConnectorHelper( + config=settings.to_helper_config(), playbook_compatible=True + ) + + connector = YaraConnector(config=settings, helper=helper) connector.start() - except Exception as e: - print(e) - time.sleep(10) - sys.exit(0) + except Exception: + traceback.print_exc() + exit(1) diff --git a/internal-enrichment/yara/src/requirements.txt b/internal-enrichment/yara/src/requirements.txt index 690536791c4..1b5326c76d9 100644 --- a/internal-enrichment/yara/src/requirements.txt +++ b/internal-enrichment/yara/src/requirements.txt @@ -1,2 +1,4 @@ -pycti==7.260309.0 +pycti==7.260515.0 yara-python>=4.3.0 +pydantic >=2.8.2, <3 +connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk diff --git a/internal-enrichment/yara/tests/conftest.py b/internal-enrichment/yara/tests/conftest.py new file mode 100644 index 00000000000..5ee8fc0e226 --- /dev/null +++ b/internal-enrichment/yara/tests/conftest.py @@ -0,0 +1,4 @@ +import os +import sys + +sys.path.append(os.path.join(os.path.dirname(__file__), "..", "src")) diff --git a/internal-enrichment/anyrun-task/tests/test-requirements.txt b/internal-enrichment/yara/tests/test-requirements.txt similarity index 97% rename from internal-enrichment/anyrun-task/tests/test-requirements.txt rename to internal-enrichment/yara/tests/test-requirements.txt index bdef682113c..b3ab891433f 100644 --- a/internal-enrichment/anyrun-task/tests/test-requirements.txt +++ b/internal-enrichment/yara/tests/test-requirements.txt @@ -1,2 +1,3 @@ -r ../src/requirements.txt pytest==8.4.2 + diff --git a/internal-enrichment/anyrun-task/tests/test_main.py b/internal-enrichment/yara/tests/test_main.py similarity index 86% rename from internal-enrichment/anyrun-task/tests/test_main.py rename to internal-enrichment/yara/tests/test_main.py index ddea992ceb4..9067107de45 100644 --- a/internal-enrichment/anyrun-task/tests/test_main.py +++ b/internal-enrichment/yara/tests/test_main.py @@ -2,7 +2,7 @@ from unittest.mock import MagicMock import pytest -from anyrun_task import AnyRunTask, ConnectorSettings +from connector import ConnectorSettings, YaraConnector from pycti import OpenCTIConnectorHelper @@ -41,18 +41,6 @@ def _load_config_dict(cls, _, handler) -> dict[str, Any]: "log_level": "error", "auto": True, }, - "anyrun": { - "token": "SecretStr", - "max_tlp": "TLP:AMBER", - "url": "https://api.any.run", - "timer": 42, - "os": "windows", - "privacy": "bylink", - "automated_interactivity": True, - "ioc": True, - "mitre": True, - "processes": True, - }, } ) @@ -86,7 +74,7 @@ def test_opencti_connector_helper_is_instantiated(mock_opencti_connector_helper) assert helper.connect_name == "Test Connector" assert helper.connect_scope == "test,connector" assert helper.log_level == "ERROR" - assert helper.connect_auto + assert helper.connect_auto == True def test_connector_is_instantiated(mock_opencti_connector_helper): @@ -100,7 +88,7 @@ def test_connector_is_instantiated(mock_opencti_connector_helper): settings = StubConnectorSettings() helper = OpenCTIConnectorHelper(config=settings.to_helper_config()) - connector = AnyRunTask(config=settings, helper=helper) + connector = YaraConnector(config=settings, helper=helper) assert connector.config == settings assert connector.helper == helper diff --git a/internal-enrichment/yara/tests/test_yara_connector.py b/internal-enrichment/yara/tests/test_yara_connector.py new file mode 100644 index 00000000000..24542a27615 --- /dev/null +++ b/internal-enrichment/yara/tests/test_yara_connector.py @@ -0,0 +1,176 @@ +from typing import Any +from unittest.mock import MagicMock + +from connector import ConnectorSettings, YaraConnector + + +class StubConnectorSettings(ConnectorSettings): + @classmethod + def _load_config_dict(cls, _, handler) -> dict[str, Any]: + return handler( + { + "opencti": { + "url": "http://localhost", + "token": "test-token", + }, + "connector": { + "id": "connector-id", + "name": "YARA", + "scope": "Artifact", + "log_level": "error", + "auto": True, + }, + } + ) + + +def _make_connector(): + settings = StubConnectorSettings() + helper = MagicMock() + helper.connector_logger = MagicMock() + helper.connect_scope = "artifact" + helper.api = MagicMock() + connector = YaraConnector(config=settings, helper=helper) + return connector + + +class TestYaraConnectorInit: + """Tests for YaraConnector initialization.""" + + def test_init(self): + connector = _make_connector() + assert connector.helper is not None + assert connector.octi_api_url == "http://localhost" + + +class TestGetArtifactContents: + """Tests for _get_artifact_contents method.""" + + def test_no_import_files(self): + connector = _make_connector() + artifact = {"importFiles": []} + result = connector._get_artifact_contents(artifact) + assert result == [] + + def test_missing_import_files_key(self): + connector = _make_connector() + artifact = {} + result = connector._get_artifact_contents(artifact) + assert result == [] + + def test_with_files(self): + connector = _make_connector() + connector.helper.api.fetch_opencti_file = MagicMock(return_value=b"content") + artifact = {"importFiles": [{"name": "test.bin", "id": "file-123"}]} + result = connector._get_artifact_contents(artifact) + assert result == [b"content"] + + +class TestGetYaraIndicators: + """Tests for _get_yara_indicators pagination.""" + + def test_single_page(self): + connector = _make_connector() + connector.helper.api.indicator.list = MagicMock( + return_value={ + "pagination": {"hasNextPage": False, "endCursor": None}, + "entities": [ + { + "id": "1", + "name": "rule1", + "pattern": "rule test { condition: true }", + } + ], + } + ) + result = connector._get_yara_indicators() + assert len(result) == 1 + + def test_multiple_pages(self): + connector = _make_connector() + connector.helper.api.indicator.list = MagicMock( + side_effect=[ + { + "pagination": {"hasNextPage": True, "endCursor": "cursor1"}, + "entities": [{"id": "1"}], + }, + { + "pagination": {"hasNextPage": False, "endCursor": None}, + "entities": [{"id": "2"}], + }, + ] + ) + result = connector._get_yara_indicators() + assert len(result) == 2 + assert result[0]["id"] == "1" + assert result[1]["id"] == "2" + + +class TestScanArtifact: + """Tests for YARA scanning logic.""" + + def test_matching_rule_creates_relationship(self): + connector = _make_connector() + connector.helper.api.fetch_opencti_file = MagicMock( + return_value=b"This is test data" + ) + + artifact = { + "standard_id": "artifact--a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d", + "importFiles": [{"name": "test.bin", "id": "file-123"}], + } + indicators = [ + { + "name": "test_rule", + "standard_id": "indicator--b2c3d4e5-f6a7-4b8c-9d0e-1f2a3b4c5d6e", + "pattern": 'rule test_rule { strings: $a = "test data" condition: $a }', + "pattern_type": "yara", + "valid_from": "2025-01-01T00:00:00Z", + } + ] + result, errors = connector._scan_artifact(artifact, indicators) + # result contains 1 relationship + 1 indicator + assert len(result) == 2 + assert result[0]["relationship_type"] == "related-to" + assert result[0]["created_by_ref"] == connector.author["id"] + assert errors == [] + + def test_no_match_no_bundle(self): + connector = _make_connector() + connector.helper.api.fetch_opencti_file = MagicMock( + return_value=b"nothing interesting" + ) + + artifact = { + "standard_id": "artifact--a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d", + "importFiles": [{"name": "test.bin", "id": "file-123"}], + } + indicators = [ + { + "name": "test_rule", + "standard_id": "indicator--b2c3d4e5-f6a7-4b8c-9d0e-1f2a3b4c5d6e", + "pattern": 'rule test_rule { strings: $a = "VERYSECRETSTRING" condition: $a }', + } + ] + result, errors = connector._scan_artifact(artifact, indicators) + assert result == [] + assert errors == [] + + def test_syntax_error_skipped(self): + connector = _make_connector() + connector.helper.api.fetch_opencti_file = MagicMock(return_value=b"data") + + artifact = { + "standard_id": "artifact--a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d", + "importFiles": [{"name": "test.bin", "id": "file-123"}], + } + indicators = [ + { + "name": "bad_rule", + "standard_id": "indicator--b2c3d4e5-f6a7-4b8c-9d0e-1f2a3b4c5d6e", + "pattern": "this is not valid yara", + } + ] + objects, errors = connector._scan_artifact(artifact, indicators) + assert objects == [] + assert len(errors) == 1 diff --git a/internal-enrichment/yara/tests/tests_connector/test_settings.py b/internal-enrichment/yara/tests/tests_connector/test_settings.py new file mode 100644 index 00000000000..a40f86608f3 --- /dev/null +++ b/internal-enrichment/yara/tests/tests_connector/test_settings.py @@ -0,0 +1,128 @@ +from typing import Any + +import pytest +from connector import ConnectorSettings +from connectors_sdk import BaseConfigModel, ConfigValidationError + + +@pytest.mark.parametrize( + "settings_dict", + [ + pytest.param( + { + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + "connector": { + "id": "connector-id", + "name": "Test Connector", + "scope": "test, connector", + "log_level": "error", + "auto": True, + }, + }, + id="full_valid_settings_dict", + ), + pytest.param( + { + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + }, + id="minimal_valid_settings_dict", + ), + ], +) +def test_settings_should_accept_valid_input(settings_dict): + """ + Test that `ConnectorSettings` (implementation of `BaseConnectorSettings` from `connectors-sdk`) accepts valid input. + For the test purpose, `BaseConnectorSettings._load_config_dict` is overridden to return + a fake but valid dict (instead of the env/config vars parsed from `config.yml`, `.env` or env vars). + + :param settings_dict: The dict to use as `ConnectorSettings` input + """ + + # Given: Valid input + class FakeConnectorSettings(ConnectorSettings): + """ + Subclass of `ConnectorSettings` (implementation of `BaseConnectorSettings`) for testing purpose. + It overrides `BaseConnectorSettings._load_config_dict` to return a fake but valid config dict. + """ + + @classmethod + def _load_config_dict(cls, _, handler) -> dict[str, Any]: + return handler(settings_dict) + + # When: We create an ConnectorSettings instance with valid input data + settings = FakeConnectorSettings() + + # Then: The ConnectorSettings instance should be created successfully + assert isinstance(settings.opencti, BaseConfigModel) is True + assert isinstance(settings.connector, BaseConfigModel) is True + + +@pytest.mark.parametrize( + "settings_dict, field_name", + [ + pytest.param( + {}, + "settings", + id="empty_settings_dict", + ), + pytest.param( + { + "opencti": { + "url": "http://localhost:8080", + }, + "connector": { + "id": "connector-id", + "name": "Test Connector", + "scope": "test, connector", + "log_level": "error", + }, + }, + "opencti.token", + id="missing_opencti_token", + ), + pytest.param( + { + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + "connector": { + "id": 123456, + "name": "Test Connector", + "scope": "test, connector", + "log_level": "error", + }, + }, + "connector.id", + id="invalid_connector_id", + ), + ], +) +def test_settings_should_raise_when_invalid_input(settings_dict, field_name): + """ + Test that `ConnectorSettings` (implementation of `BaseConnectorSettings` from `connectors-sdk`) raises on invalid input. + For the test purpose, `BaseConnectorSettings._load_config_dict` is overridden to return + a fake and invalid dict (instead of the env/config vars parsed from `config.yml`, `.env` or env vars). + + :param settings_dict: The dict to use as `ConnectorSettings` input + """ + + class FakeConnectorSettings(ConnectorSettings): + """ + Subclass of `ConnectorSettings` (implementation of `BaseConnectorSettings`) for testing purpose. + It overrides `BaseConnectorSettings._load_config_dict` to return a fake but valid config dict. + """ + + @classmethod + def _load_config_dict(cls, _, handler) -> dict[str, Any]: + return handler(settings_dict) + + with pytest.raises(ConfigValidationError) as err: + FakeConnectorSettings() + assert str("Error validating configuration") in str(err) diff --git a/internal-export-file/export-file-csv/.build.env b/internal-export-file/export-file-csv/.build.env new file mode 100644 index 00000000000..dab4ba3dde4 --- /dev/null +++ b/internal-export-file/export-file-csv/.build.env @@ -0,0 +1 @@ +CONNECTOR_CMD="export-file-csv.py" diff --git a/internal-export-file/export-file-csv/src/requirements.txt b/internal-export-file/export-file-csv/src/requirements.txt index e1e0bd9718c..e3a19393203 100644 --- a/internal-export-file/export-file-csv/src/requirements.txt +++ b/internal-export-file/export-file-csv/src/requirements.txt @@ -1 +1 @@ -pycti==7.260309.0 +pycti==7.260515.0 diff --git a/internal-export-file/export-file-stix/.build.env b/internal-export-file/export-file-stix/.build.env new file mode 100644 index 00000000000..2058928923b --- /dev/null +++ b/internal-export-file/export-file-stix/.build.env @@ -0,0 +1 @@ +CONNECTOR_CMD="export-file-stix.py" diff --git a/internal-export-file/export-file-stix/src/requirements.txt b/internal-export-file/export-file-stix/src/requirements.txt index e9684a32073..f5b8181a0c7 100644 --- a/internal-export-file/export-file-stix/src/requirements.txt +++ b/internal-export-file/export-file-stix/src/requirements.txt @@ -1 +1 @@ -pycti==7.260309.0 \ No newline at end of file +pycti==7.260515.0 \ No newline at end of file diff --git a/internal-export-file/export-file-txt/.build.env b/internal-export-file/export-file-txt/.build.env new file mode 100644 index 00000000000..deb6ed1b637 --- /dev/null +++ b/internal-export-file/export-file-txt/.build.env @@ -0,0 +1 @@ +CONNECTOR_CMD="export-file-txt.py" diff --git a/internal-export-file/export-file-txt/src/requirements.txt b/internal-export-file/export-file-txt/src/requirements.txt index e1e0bd9718c..e3a19393203 100644 --- a/internal-export-file/export-file-txt/src/requirements.txt +++ b/internal-export-file/export-file-txt/src/requirements.txt @@ -1 +1 @@ -pycti==7.260309.0 +pycti==7.260515.0 diff --git a/internal-export-file/export-file-yara/src/requirements.txt b/internal-export-file/export-file-yara/src/requirements.txt index e9684a32073..f5b8181a0c7 100644 --- a/internal-export-file/export-file-yara/src/requirements.txt +++ b/internal-export-file/export-file-yara/src/requirements.txt @@ -1 +1 @@ -pycti==7.260309.0 \ No newline at end of file +pycti==7.260515.0 \ No newline at end of file diff --git a/internal-export-file/export-report-pdf/.build.env b/internal-export-file/export-report-pdf/.build.env new file mode 100644 index 00000000000..b7858e1f223 --- /dev/null +++ b/internal-export-file/export-report-pdf/.build.env @@ -0,0 +1,2 @@ +EXTRA_PACKAGES="pango cairo gdk-pixbuf2 libffi zlib libtiff libjpeg-turbo openjpeg2 freetype lcms2 libwebp harfbuzz fribidi libpng libxcb file-libs" + diff --git a/internal-export-file/export-report-pdf/src/requirements.txt b/internal-export-file/export-report-pdf/src/requirements.txt index 43750bb9bd2..e1e96a4330f 100644 --- a/internal-export-file/export-report-pdf/src/requirements.txt +++ b/internal-export-file/export-report-pdf/src/requirements.txt @@ -1,8 +1,8 @@ -pycti==7.260309.0 +pycti==7.260515.0 weasyprint==66.0 Jinja2==3.1.6 pygal==3.0.5 wheel==0.46.2 -CairoSVG==2.8.2 +CairoSVG==2.9.0 pygal_maps_world==1.0.2 cmarkgfm==2024.11.20 \ No newline at end of file diff --git a/internal-export-file/export-report-pdf/tests/test-requirements.txt b/internal-export-file/export-report-pdf/tests/test-requirements.txt index 2237a48d1eb..eed99a3fdb2 100644 --- a/internal-export-file/export-report-pdf/tests/test-requirements.txt +++ b/internal-export-file/export-report-pdf/tests/test-requirements.txt @@ -1,3 +1,3 @@ -r ../src/requirements.txt -pytest~=8.4.1 +pytest~=9.0.3 pytest-mock~=3.14.1 \ No newline at end of file diff --git a/internal-export-file/export-ttps-file-navigator/.build.env b/internal-export-file/export-ttps-file-navigator/.build.env new file mode 100644 index 00000000000..804c2a1f627 --- /dev/null +++ b/internal-export-file/export-ttps-file-navigator/.build.env @@ -0,0 +1 @@ +CONNECTOR_CMD="export-ttps-file-navigator.py" diff --git a/internal-export-file/export-ttps-file-navigator/src/requirements.txt b/internal-export-file/export-ttps-file-navigator/src/requirements.txt index e1e0bd9718c..e3a19393203 100644 --- a/internal-export-file/export-ttps-file-navigator/src/requirements.txt +++ b/internal-export-file/export-ttps-file-navigator/src/requirements.txt @@ -1 +1 @@ -pycti==7.260309.0 +pycti==7.260515.0 diff --git a/internal-import-file/import-document-ai/README.md b/internal-import-file/import-document-ai/README.md index 658fe609f3a..e0532d8762d 100644 --- a/internal-import-file/import-document-ai/README.md +++ b/internal-import-file/import-document-ai/README.md @@ -75,17 +75,19 @@ Below are the parameters you'll need to set for running the connector properly: | Connector Auto | `auto` | `CONNECTOR_AUTO` | false | No | Enable/disable automatic import of files matching the scope. | | Validate Before Import | `validate_before_import` | `CONNECTOR_VALIDATE_BEFORE_IMPORT` | false | No | If enabled, bundles are sent for validation before import. | | Log Level | `log_level` | `CONNECTOR_LOG_LEVEL` | info | No | Determines the verbosity of the logs. Options are `debug`, `info`, `warn`, or `error`. | -| Web Service URL | `web_service_url` | `CONNECTOR_WEB_SERVICE_URL` | https://importdoc.ariane.filigran.io | No | The URL of the Ariane extraction service running the AI model. | -| License Key PEM | `licence_key_pem` | `CONNECTOR_LICENCE_KEY_PEM` | / | Yes | The Enterprise Edition license certificate in PEM format (provided by Filigran). | ### Connector extra parameters environment variables Below are the parameters you'll need to set for the Import Document AI connector: -| Parameter | config.yml `import_document` | Docker environment variable | Default | Mandatory | Description | -|------------------------|------------------------------|-----------------------------------------|---------|-----------|--------------------------------------------------------------------------------------------| -| Create Indicator | `create_indicator` | `IMPORT_DOCUMENT_CREATE_INDICATOR` | false | No | If `true`, creates an Indicator for each extracted observable. | -| Include Relationships | `include_relationships` | `IMPORT_DOCUMENT_INCLUDE_RELATIONSHIPS` | true | No | If `false`, removes all ML-predicted relationships from the imported bundle. | +| Parameter | config.yml `import_document_ai` | Docker environment variable | Default | Mandatory | Description | +|------------------------|---------------------------------|--------------------------------------------|--------------------------------------|-----------|------------------------------------------------------------------------------------------| +| API Base URL | `api_base_url` | `IMPORT_DOCUMENT_AI_API_BASE_URL` | https://importdoc.ariane.filigran.io | No | The URL of the Ariane extraction service running the AI model. | +| API Key PEM | `api_key` | `IMPORT_DOCUMENT_AI_API_KEY` | / | Yes | The Enterprise Edition license certificate in PEM format (provided by Filigran). | +| Create Indicator | `create_indicator` | `IMPORT_DOCUMENT_AI_CREATE_INDICATOR` | false | No | If `true`, creates an Indicator for each extracted observable. | +| Include Relationships | `include_relationships` | `IMPORT_DOCUMENT_AI_INCLUDE_RELATIONSHIPS` | true | No | If `false`, removes all ML-predicted relationships from the imported bundle. | + +Legacy `connector.web_service_url`, `connector.licence_key_pem`, and `import_document.*` config keys are still accepted for backward compatibility, as are `CONNECTOR_WEB_SERVICE_URL`, `CONNECTOR_LICENCE_KEY_PEM`, `IMPORT_DOCUMENT_CREATE_INDICATOR`, and `IMPORT_DOCUMENT_INCLUDE_RELATIONSHIPS`. Deprecation warnings are emitted when those legacy names are used. ## Deployment diff --git a/internal-import-file/import-document-ai/dev/README.md b/internal-import-file/import-document-ai/dev/README.md index 4bcbedc9b99..fee8e8e2f2f 100644 --- a/internal-import-file/import-document-ai/dev/README.md +++ b/internal-import-file/import-document-ai/dev/README.md @@ -39,7 +39,8 @@ RABBITMQ_DEFAULT_USER=ChangeMe RABBITMQ_DEFAULT_PASS=ChangeMe SMTP_HOSTNAME=localhost ELASTIC_MEMORY_SIZE=2g -CONNECTOR_LICENCE_KEY_PEM=" +IMPORT_DOCUMENT_AI_API_BASE_URL=ChangeMe +IMPORT_DOCUMENT_AI_API_KEY=" -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- diff --git a/internal-import-file/import-document-ai/dev/dev-requirements.txt b/internal-import-file/import-document-ai/dev/dev-requirements.txt index 735858ae756..4c1410e0ca0 100644 --- a/internal-import-file/import-document-ai/dev/dev-requirements.txt +++ b/internal-import-file/import-document-ai/dev/dev-requirements.txt @@ -3,3 +3,4 @@ starlette>=0.46.0, <1.0.0 uvicorn>=0.34.0, <1.0.0 python-multipart>=0.0.20, <1.0.0 cryptography>=46.0.3, <46.1.0 +httpx>=0.28.1, <1.0.0 diff --git a/internal-import-file/import-document-ai/dev/docker-compose.yml b/internal-import-file/import-document-ai/dev/docker-compose.yml index 15667043f35..a69d58751c5 100644 --- a/internal-import-file/import-document-ai/dev/docker-compose.yml +++ b/internal-import-file/import-document-ai/dev/docker-compose.yml @@ -65,7 +65,7 @@ services: - dev-opencti opencti: - image: opencti/platform:7.260309.0 + image: opencti/platform:7.260515.0 environment: - NODE_OPTIONS=--max-old-space-size=8096 - APP__PORT=8080 @@ -103,7 +103,7 @@ services: restart: always worker: - image: opencti/worker:7.260309.0 + image: opencti/worker:7.260515.0 environment: - OPENCTI_URL=http://opencti:8080 - OPENCTI_TOKEN=${OPENCTI_ADMIN_TOKEN} @@ -140,9 +140,9 @@ services: - CONNECTOR_VALIDATE_BEFORE_IMPORT=true # Validate any bundle before import - CONNECTOR_SCOPE=application/pdf,text/plain,text/html,text/markdown - CONNECTOR_AUTO=false # Enable/disable auto-import of file - - CONNECTOR_WEB_SERVICE_URL=http://webservice:80 - CONNECTOR_LOG_LEVEL=debug - - CONNECTOR_LICENCE_KEY_PEM=${CONNECTOR_LICENCE_KEY_PEM} + - IMPORT_DOCUMENT_AI_API_BASE_URL=http://webservice:80 + - IMPORT_DOCUMENT_AI_API_KEY=${IMPORT_DOCUMENT_AI_API_KEY} - IMPORT_DOCUMENT_INCLUDE_RELATIONSHIPS=true depends_on: - opencti @@ -151,21 +151,21 @@ services: - dev-opencti restart: always - # is it really needed ? - connector-import-file-stix: - image: opencti/connector-import-file-stix:7.260309.0 - environment: - - OPENCTI_URL=http://opencti:8080 - - OPENCTI_TOKEN=${OPENCTI_ADMIN_TOKEN} - - CONNECTOR_ID=430a1606-f9d9-47f9-8f1d-939e7c1ab76d - - CONNECTOR_NAME=ImportFileStix - - CONNECTOR_VALIDATE_BEFORE_IMPORT=true # Validate any bundle before import - - CONNECTOR_SCOPE=application/json,application/xml - - CONNECTOR_AUTO=false # Enable/disable auto-import of file - - CONNECTOR_LOG_LEVEL=debug - restart: always - networks: - - dev-opencti + # # This is needed for workbench feature eventually + # connector-import-file-stix: + # image: opencti/connector-import-file-stix:6.8.4 + # environment: + # - OPENCTI_URL=http://opencti:8080 + # - OPENCTI_TOKEN=${OPENCTI_ADMIN_TOKEN} + # - CONNECTOR_ID=430a1606-f9d9-47f9-8f1d-939e7c1ab76d + # - CONNECTOR_NAME=ImportFileStix + # - CONNECTOR_VALIDATE_BEFORE_IMPORT=true # Validate any bundle before import + # - CONNECTOR_SCOPE=application/json,application/xml + # - CONNECTOR_AUTO=false # Enable/disable auto-import of file + # - CONNECTOR_LOG_LEVEL=debug + # restart: unless-stopped + # networks: + # - dev-opencti networks: @@ -178,4 +178,3 @@ volumes: redisdata4: amqpdata4: essnapshots: - diff --git a/internal-import-file/import-document-ai/dev/fake_rest.py b/internal-import-file/import-document-ai/dev/fake_rest.py index 633cc90f40d..ebd3de39f54 100644 --- a/internal-import-file/import-document-ai/dev/fake_rest.py +++ b/internal-import-file/import-document-ai/dev/fake_rest.py @@ -1,211 +1,179 @@ -"""Fake REST API to test the ImportDocAI connector.""" - -import base64 -import datetime -import json -import logging -from pathlib import Path -from typing import Awaitable, Callable - -from cryptography import x509 -from cryptography.hazmat.backends import default_backend -from cryptography.hazmat.primitives import hashes, serialization -from cryptography.hazmat.primitives.asymmetric import rsa -from cryptography.x509.oid import NameOID -from fastapi import FastAPI, Request, Response, UploadFile -from fastapi.responses import JSONResponse -from starlette.middleware.base import BaseHTTPMiddleware - -logger = logging.getLogger(__name__) - - -def generate_fake_certificate( - common_name: str, - validity_start: datetime.datetime | None, - validity_duration: datetime.timedelta | None, - base_64=True, -) -> bytes: - """Generate a fake certificate. - - This is a tools to generate a self-signed certificate for testing purposes. - - Args: - common_name (str): The common name for the certificate. - validity_start (datetime.datetime | None): The start date of the certificate's validity. If None, it defaults to the current time. - validity_duration (datetime.timedelta | None): The duration of the certificate's validity. If None, it defaults to 365 days. - base_64 (bool): Whether to return the certificate in base64 format. Defaults to True. - - Returns: - (bytes): The generated certificate in PEM format, optionally encoded in base64. - - Examples: - >>> with open(Path(__file__).parent / "certificate_outdated.pem", "wb") as f: - ... cert_bytes=generate_fake_certificate("test", datetime.datetime.now(datetime.timezone.utc)-datetime.timedelta(days=10), datetime.timedelta(days=5)) - ... f.write(cert_bytes) - >>> with open(Path(__file__).parent / "certificate_trial.pem", "wb") as f: - ... cert_bytes=generate_fake_certificate("trial", None, None) - ... f.write(cert_bytes) - >>> with open(Path(__file__).parent / "certificate_unauthorized.pem", "wb") as f: - ... cert_bytes=generate_fake_certificate("unauthorized", None, None) - ... f.write(cert_bytes) - >>> with open(Path(__file__).parent / "certificate_valid.pem", "wb") as f: - ... cert_bytes=generate_fake_certificate("test", None, None) - ... f.write(cert_bytes) - - """ - # Generate an RSA private key - private_key = rsa.generate_private_key(public_exponent=65537, key_size=2048) - - # Define the subject (and issuer, since it's self-signed) - subject = issuer = x509.Name( - [ - x509.NameAttribute(NameOID.COMMON_NAME, common_name), - ] - ) - if not validity_start: - validity_start = datetime.datetime.now(datetime.timezone.utc) - if not validity_duration: - validity_duration = datetime.timedelta(days=365) - # Create the certificate - certificate = ( - x509.CertificateBuilder() - .subject_name(subject) - .issuer_name(issuer) - .public_key(private_key.public_key()) - .serial_number(x509.random_serial_number()) - .not_valid_before(validity_start) - .not_valid_after(validity_start + validity_duration) - .sign(private_key, hashes.SHA256()) - ) - - pem_bytes = certificate.public_bytes(serialization.Encoding.PEM) - if base_64: # encode in base64 - pem_bytes = base64.b64encode(pem_bytes) - return pem_bytes - - -def _get_common_name(cert: x509.Certificate) -> str: - """Get the common name from the certificate. - - Args: - cert (x509.Certificate): The certificate to extract the common name from. - - Returns: - str: The common name of the certificate. - """ - return cert.subject.get_attributes_for_oid(NameOID.COMMON_NAME)[0].value - - -class V1AuthMiddleware(BaseHTTPMiddleware): - """Define Middleware to authenticate requests.""" - - async def dispatch( - self, request: Request, call_next: Callable[[Request], Awaitable[Response]] - ) -> Response | JSONResponse: - """Dispatch method for the middleware. - - This method checks for the presence of a certificate in the request headers and validates it. - If the certificate is missing or invalid, it returns a JSON response with an error message: - - 400 if the certificate is missing or invalid. - - 403 if the certificate indicates a trial or unauthorized access (based on its common_name property). - - Args: - request (Request): The incoming request. - call_next (Callable[[Request], Awaitable[Response]]): The next middleware or endpoint to call. - - Returns: - Response | JSONResponse: The response from the next middleware or endpoint, or a JSON response - with an error message if authentication fails. - """ - certificate_pem = request.headers.get("X-OpenCTI-Certificate") - - if not certificate_pem: - with open( - Path(__file__).parent / "responses" / "response_400_missing.json" - ) as f: - content = json.load(f) - return JSONResponse(status_code=400, content=content) - - invalid_flag = False - try: - logger.error(f"Certificate: {certificate_pem}") - cert = x509.load_pem_x509_certificate( - base64.decodebytes(certificate_pem.encode("utf-8")), default_backend() - ) - if cert.not_valid_after_utc < datetime.datetime.now(datetime.timezone.utc): - # generate_fake_certificate("Test", datetime.datetime.now(datetime.timezone.utc)-datetime.timedelta(days=10), datetime.timedelta(days=5)) - invalid_flag = True - else: - common_name = _get_common_name(cert) - if "trial" in common_name: - # generate_fake_certificate("trial") - with open( - Path(__file__).parent / "responses" / "response_403_trial.json" - ) as f: - content = json.load(f) - return JSONResponse(status_code=403, content=content) - if "unauthorized" in common_name: - # generate_fake_certificate("unauthorized") - with open( - Path(__file__).parent - / "responses" - / "response_403_unauthorized.json" - ) as f: - content = json.load(f) - return JSONResponse(status_code=403, content=content) - except Exception as e: - logger.error(e, stack_info=True, stacklevel=2) - invalid_flag = True - - if invalid_flag: - with open( - Path(__file__).parent / "responses" / "response_400_invalid.json" - ) as f: - content = json.load(f) - return JSONResponse(status_code=400, content=content) - - return await call_next(request) - - -app = FastAPI() -app.add_middleware(V1AuthMiddleware) - - -@app.post("/extract_entities", status_code=200, deprecated=True) -async def extract_entities(file: UploadFile): - """Fake endpoint to extract entities. - - Note : this is a legacy route that is goig to be deprecated in the future. - - Args: - file (UploadFile): The file to process. - - Returns: - JSONResponse: A response indicating the status of the operation. - """ - with open( - Path(__file__).parent / "responses" / "response_extract_entities_200.json" - ) as f: - content = json.load(f) - logger.warning(f"Received file: {file.filename}") - return JSONResponse(status_code=200, content=content) - - -@app.post("/extract_entities_relations", status_code=200) -async def extract_entities_relations(file: UploadFile): - """Fake endpoint to extract entities relations. - - Args: - file (UploadFile): The file to process. - - Returns: - JSONResponse: A response indicating the status of the operation. - """ - with open( - Path(__file__).parent - / "responses" - / "response_extract_entities_relations_200.json" - ) as f: - content = json.load(f) - logger.warning(f"Received file: {file.filename}") - return JSONResponse(status_code=200, content=content) +"""Fake REST API to test the ImportDocAI connector.""" + +import base64 +import datetime +import json +import logging +from pathlib import Path +from typing import Awaitable, Callable + +from cryptography import x509 +from cryptography.hazmat.backends import default_backend +from cryptography.hazmat.primitives import hashes, serialization +from cryptography.hazmat.primitives.asymmetric import rsa +from cryptography.x509.oid import NameOID +from fastapi import FastAPI, Request, Response, UploadFile +from fastapi.responses import JSONResponse +from starlette.middleware.base import BaseHTTPMiddleware + +logger = logging.getLogger(__name__) + +RESPONSES_DIR = Path(__file__).parent / "responses" + + +def generate_fake_certificate( + common_name: str, + validity_start: datetime.datetime | None, + validity_duration: datetime.timedelta | None, + base_64=True, +) -> bytes: + """Generate a fake certificate. + + This is a tools to generate a self-signed certificate for testing purposes. + + Args: + common_name (str): The common name for the certificate. + validity_start (datetime.datetime | None): The start date of the certificate's validity. If None, it defaults to the current time. + validity_duration (datetime.timedelta | None): The duration of the certificate's validity. If None, it defaults to 365 days. + base_64 (bool): Whether to return the certificate in base64 format. Defaults to True. + + Returns: + (bytes): The generated certificate in PEM format, optionally encoded in base64. + + Examples: + >>> with open(Path(__file__).parent / "certificate_outdated.pem", "wb") as f: + ... cert_bytes=generate_fake_certificate("test", datetime.datetime.now(datetime.timezone.utc)-datetime.timedelta(days=10), datetime.timedelta(days=5)) + ... f.write(cert_bytes) + >>> with open(Path(__file__).parent / "certificate_trial.pem", "wb") as f: + ... cert_bytes=generate_fake_certificate("trial", None, None) + ... f.write(cert_bytes) + >>> with open(Path(__file__).parent / "certificate_unauthorized.pem", "wb") as f: + ... cert_bytes=generate_fake_certificate("unauthorized", None, None) + ... f.write(cert_bytes) + >>> with open(Path(__file__).parent / "certificate_valid.pem", "wb") as f: + ... cert_bytes=generate_fake_certificate("test", None, None) + ... f.write(cert_bytes) + + """ + # Generate an RSA private key + private_key = rsa.generate_private_key(public_exponent=65537, key_size=2048) + + # Define the subject (and issuer, since it's self-signed) + subject = issuer = x509.Name( + [ + x509.NameAttribute(NameOID.COMMON_NAME, common_name), + ] + ) + if not validity_start: + validity_start = datetime.datetime.now(datetime.timezone.utc) + if not validity_duration: + validity_duration = datetime.timedelta(days=365) + # Create the certificate + certificate = ( + x509.CertificateBuilder() + .subject_name(subject) + .issuer_name(issuer) + .public_key(private_key.public_key()) + .serial_number(x509.random_serial_number()) + .not_valid_before(validity_start) + .not_valid_after(validity_start + validity_duration) + .sign(private_key, hashes.SHA256()) + ) + + pem_bytes = certificate.public_bytes(serialization.Encoding.PEM) + if base_64: # encode in base64 + pem_bytes = base64.b64encode(pem_bytes) + return pem_bytes + + +def _get_common_name(cert: x509.Certificate) -> str: + """Get the common name from the certificate. + + Args: + cert (x509.Certificate): The certificate to extract the common name from. + + Returns: + str: The common name of the certificate. + """ + return cert.subject.get_attributes_for_oid(NameOID.COMMON_NAME)[0].value + + +class V1AuthMiddleware(BaseHTTPMiddleware): + """Define Middleware to authenticate requests.""" + + async def dispatch( + self, request: Request, call_next: Callable[[Request], Awaitable[Response]] + ) -> Response | JSONResponse: + """Dispatch method for the middleware. + + This method checks for the presence of a certificate in the request headers and validates it. + If the certificate is missing or invalid, it returns a JSON response with an error message: + - 400 if the certificate is missing or invalid. + - 403 if the certificate indicates a trial or unauthorized access (based on its common_name property). + + Args: + request (Request): The incoming request. + call_next (Callable[[Request], Awaitable[Response]]): The next middleware or endpoint to call. + + Returns: + Response | JSONResponse: The response from the next middleware or endpoint, or a JSON response + with an error message if authentication fails. + """ + certificate_pem = request.headers.get("X-OpenCTI-Certificate") + + if not certificate_pem: + with open(RESPONSES_DIR / "response_400_missing.json") as f: + content = json.load(f) + return JSONResponse(status_code=400, content=content) + + invalid_flag = False + try: + logger.error(f"Certificate: {certificate_pem}") + cert = x509.load_pem_x509_certificate( + base64.decodebytes(certificate_pem.encode("utf-8")), default_backend() + ) + if cert.not_valid_after_utc < datetime.datetime.now(datetime.timezone.utc): + # generate_fake_certificate("Test", datetime.datetime.now(datetime.timezone.utc)-datetime.timedelta(days=10), datetime.timedelta(days=5)) + invalid_flag = True + else: + common_name = _get_common_name(cert) + if "trial" in common_name: + # generate_fake_certificate("trial") + with open(RESPONSES_DIR / "response_403_trial.json") as f: + content = json.load(f) + return JSONResponse(status_code=403, content=content) + if "unauthorized" in common_name: + # generate_fake_certificate("unauthorized") + with open(RESPONSES_DIR / "response_403_unauthorized.json") as f: + content = json.load(f) + return JSONResponse(status_code=403, content=content) + except Exception as e: + logger.error(e, stack_info=True, stacklevel=2) + invalid_flag = True + + if invalid_flag: + with open(RESPONSES_DIR / "response_400_invalid.json") as f: + content = json.load(f) + return JSONResponse(status_code=400, content=content) + + return await call_next(request) + + +app = FastAPI() +app.add_middleware(V1AuthMiddleware) + + +@app.post("/stix", status_code=200) +async def extract_stix(file: UploadFile): + """Fake endpoint to extract stix objects. + + Args: + file (UploadFile): The file to process. + + Returns: + JSONResponse: A response indicating the status of the operation. + """ + with open(RESPONSES_DIR / "response_stix_200.json") as f: + content = json.load(f) + logger.warning(f"Received file: {file.filename}") + return JSONResponse(status_code=200, content=content) diff --git a/internal-import-file/import-document-ai/dev/responses/response_extract_entities_200.json b/internal-import-file/import-document-ai/dev/responses/response_extract_entities_200.json deleted file mode 100644 index fb05683f83a..00000000000 --- a/internal-import-file/import-document-ai/dev/responses/response_extract_entities_200.json +++ /dev/null @@ -1,35 +0,0 @@ -[ - { - "type": "entity", - "category": "Intrusion-Set", - "original_start": 20799, - "original_end": 20809, - "range": [ - 20799, - 20809 - ], - "match": "StrongPity" - }, - { - "type": "entity", - "category": "Malware", - "original_start": 3316, - "original_end": 3332, - "range": [ - 3316, - 3332 - ], - "match": "Android backdoor" - }, - { - "type": "observable", - "category": "Domain-Name.value", - "original_start": 3451, - "original_end": 3461, - "range": [ - 3451, - 3461 - ], - "match": "shagle.com" - } -] \ No newline at end of file diff --git a/internal-import-file/import-document-ai/dev/responses/response_extract_entities_relations_200.json b/internal-import-file/import-document-ai/dev/responses/response_extract_entities_relations_200.json deleted file mode 100644 index 197487fea95..00000000000 --- a/internal-import-file/import-document-ai/dev/responses/response_extract_entities_relations_200.json +++ /dev/null @@ -1,231 +0,0 @@ -{ - "text": "Contact the admin at admin[at]filigran[dot]io if you detect unusual traffic from\n the IP 192[dot]168[dot]1[dot]100 or the IPv6 address\\n\n 2001:0db8:85a3:0000:0000:8a2e:0370:7334.\n The system has reported CVE-2021-34527 and a possible infection with TrickBot malware\\t.\n On Sep. 14, 2021, the security team discovered an unauthorized access attempt\n from\\t IP 192[dot]168[dot]1[dot]100. The attacker exploited CVE-2021-34527,\n also known as PrintNightmare,\n to gain access to the internal network. The threat actor, identified as \"Dr. Malware\",\n used phishing\\t emails to deliver the TrickBot malware to several endpoints.\n This might be attributed to attack-pattern T1218.005\n\n Analysts later confirmed that APT28 (also known as Fancy Bear), \\\n originating from Russia, has been actively targeting the energy sector across EMEA.", - "entities": [ - { - "id": "0372e221-efd4-4405-ab33-b8aa219a5ee4", - "label": "Individual", - "start_offset": 12, - "end_offset": 17 - }, - { - "id": "f8e71728-2dff-4b38-9056-1d7001b8dcbd", - "label": "Email-Addr.value", - "start_offset": 21, - "end_offset": 45 - }, - { - "id": "e809bf07-18f2-421e-bb2c-b2104d7d7951", - "label": "IPv6-Addr.value", - "start_offset": 152, - "end_offset": 191 - }, - { - "id": "ad788ee8-d6fb-48e4-8dea-1f853ec3a9f3", - "label": "Vulnerability.name", - "start_offset": 225, - "end_offset": 239 - }, - { - "id": "26c1abfa-576e-43f2-9d46-4edda901a483", - "label": "Intrusion-Set", - "start_offset": 579, - "end_offset": 582 - }, - { - "id": "31a11cc7-d2d6-4bf4-9a4d-897e49d5ef73", - "label": "Attack-Pattern.x_mitre_id", - "start_offset": 729, - "end_offset": 738 - }, - { - "id": "09f445cd-0d91-48cb-8872-f1eaef0b3c60", - "label": "Intrusion-Set", - "start_offset": 778, - "end_offset": 783 - }, - { - "id": "84217ed8-9ec4-44bf-a6b5-12fe2442c273", - "label": "Intrusion-Set", - "start_offset": 799, - "end_offset": 809 - }, - { - "id": "a92afcfb-1096-48ad-84fb-3b501e6f19bd", - "label": "Country", - "start_offset": 839, - "end_offset": 845 - }, - { - "id": "2af5a28e-bcac-4bdc-9ec9-a365a3ea0877", - "label": "Sector", - "start_offset": 879, - "end_offset": 885 - }, - { - "id": "24f0206a-3b9a-4189-a030-3e3ab4eb71f6", - "label": "Region", - "start_offset": 900, - "end_offset": 904 - } - ], - "relations": [ - { - "id": "15d839b4-1f45-4d25-a559-d6c8acf7e0ef", - "type": "originates-from", - "from_id": "09f445cd-0d91-48cb-8872-f1eaef0b3c60", - "to_id": "a92afcfb-1096-48ad-84fb-3b501e6f19bd" - } - ], - "metadata": { - "cleaned_text": "Contact the admin at admin@filigran.io if you detect unusual traffic from\n the IP 192.168.1.100 or the IPv6 address\\n\n 2001:0db8:85a3:0000:0000:8a2e:0370:7334.\n The system has reported CVE-2021-34527 and a possible infection with TrickBot malware\\t.\n On Sep. 14, 2021, the security team discovered an unauthorized access attempt\n from\\t IP 192.168.1.100. The attacker exploited CVE-2021-34527,\n also known as PrintNightmare,\n to gain access to the internal network. The threat actor, identified as \"Dr. Malware\",\n used phishing\\t emails to deliver the TrickBot malware to several endpoints.\n This might be attributed to attack-pattern T1218.005\n\n Analysts later confirmed that APT28 (also known as Fancy Bear), \\\n originating from Russia, has been actively targeting the energy sector across EMEA.", - "span_based_entities": [ - { - "id": "0372e221-efd4-4405-ab33-b8aa219a5ee4", - "text": "admin", - "label": "Individual", - "type": "entity", - "start_offset": 12, - "end_offset": 17, - "cleaned_start_offset": 12, - "cleaned_end_offset": 17, - "raw_label": "person" - }, - { - "id": "f8e71728-2dff-4b38-9056-1d7001b8dcbd", - "text": "admin@filigran.io", - "label": "Email-Addr.value", - "type": "observable", - "start_offset": 21, - "end_offset": 45, - "cleaned_start_offset": 21, - "cleaned_end_offset": 38, - "raw_label": null - }, - { - "id": "e809bf07-18f2-421e-bb2c-b2104d7d7951", - "text": "2001:0db8:85a3:0000:0000:8a2e:0370:7334", - "label": "IPv6-Addr.value", - "type": "observable", - "start_offset": 152, - "end_offset": 191, - "cleaned_start_offset": 133, - "cleaned_end_offset": 172, - "raw_label": null - }, - { - "id": "ad788ee8-d6fb-48e4-8dea-1f853ec3a9f3", - "text": "CVE-2021-34527", - "label": "Vulnerability.name", - "type": "entity", - "start_offset": 225, - "end_offset": 239, - "cleaned_start_offset": 206, - "cleaned_end_offset": 220, - "raw_label": null - }, - { - "id": "26c1abfa-576e-43f2-9d46-4edda901a483", - "text": "Dr.", - "label": "Intrusion-Set", - "type": "entity", - "start_offset": 579, - "end_offset": 582, - "cleaned_start_offset": 548, - "cleaned_end_offset": 551, - "raw_label": "threat actor" - }, - { - "id": "31a11cc7-d2d6-4bf4-9a4d-897e49d5ef73", - "text": "T1218.005", - "label": "Attack-Pattern.x_mitre_id", - "type": "entity", - "start_offset": 729, - "end_offset": 738, - "cleaned_start_offset": 698, - "cleaned_end_offset": 707, - "raw_label": null - }, - { - "id": "09f445cd-0d91-48cb-8872-f1eaef0b3c60", - "text": "APT28", - "label": "Intrusion-Set", - "type": "entity", - "start_offset": 778, - "end_offset": 783, - "cleaned_start_offset": 747, - "cleaned_end_offset": 752, - "raw_label": "ransomware group" - }, - { - "id": "84217ed8-9ec4-44bf-a6b5-12fe2442c273", - "text": "Fancy Bear", - "label": "Intrusion-Set", - "type": "entity", - "start_offset": 799, - "end_offset": 809, - "cleaned_start_offset": 768, - "cleaned_end_offset": 778, - "raw_label": "ransomware group" - }, - { - "id": "a92afcfb-1096-48ad-84fb-3b501e6f19bd", - "text": "Russia", - "label": "Country", - "type": "entity", - "start_offset": 839, - "end_offset": 845, - "cleaned_start_offset": 808, - "cleaned_end_offset": 814, - "raw_label": "country name" - }, - { - "id": "2af5a28e-bcac-4bdc-9ec9-a365a3ea0877", - "text": "energy", - "label": "Sector", - "type": "entity", - "start_offset": 879, - "end_offset": 885, - "cleaned_start_offset": 848, - "cleaned_end_offset": 854, - "raw_label": "sector" - }, - { - "id": "24f0206a-3b9a-4189-a030-3e3ab4eb71f6", - "text": "EMEA", - "label": "Region", - "type": "entity", - "start_offset": 900, - "end_offset": 904, - "cleaned_start_offset": 869, - "cleaned_end_offset": 873, - "raw_label": "region" - } - ], - "config": { - }, - "num_relationships": 1, - "relationship_types": { - "originates-from": { - "count": 1, - "source_labels": [ - "Intrusion-Set" - ], - "target_labels": [ - "Country" - ] - } - }, - "num_entities": 11, - "entity_types": [ - "Email-Addr.value", - "IPv6-Addr.value", - "Intrusion-Set", - "Country", - "Vulnerability.name", - "Region", - "Attack-Pattern.x_mitre_id", - "Individual", - "Sector" - ] - } -} diff --git a/internal-import-file/import-document-ai/dev/responses/response_stix_200.json b/internal-import-file/import-document-ai/dev/responses/response_stix_200.json new file mode 100644 index 00000000000..1aa9fd23b3b --- /dev/null +++ b/internal-import-file/import-document-ai/dev/responses/response_stix_200.json @@ -0,0 +1,137 @@ +{ + "type": "bundle", + "id": "bundle--076efd88-5877-484b-99a3-f6c2c38935df", + "objects": [ + { + "type": "location", + "spec_version": "2.1", + "id": "location--bd231405-2ce2-50d6-a272-19491751cfda", + "created": "2025-10-10T20:54:21.730108Z", + "modified": "2025-10-10T20:54:21.730108Z", + "name": "United States of America", + "country": "US" + }, + { + "type": "attack-pattern", + "spec_version": "2.1", + "id": "attack-pattern--c6c6e86f-2b48-5b4e-acea-2ad7793cef9b", + "created": "2025-10-10T20:54:21.730363Z", + "modified": "2025-10-10T20:54:21.730363Z", + "name": "T1234", + "x_mitre_id": "T1234" + }, + { + "type": "intrusion-set", + "spec_version": "2.1", + "id": "intrusion-set--e7ae39ae-389f-5507-a794-b81a570bf284", + "created": "2025-10-10T20:54:21.73085Z", + "modified": "2025-10-10T20:54:21.73085Z", + "name": "APT41" + }, + { + "type": "location", + "spec_version": "2.1", + "id": "location--1b9b5744-a11a-57e3-b58c-058ae58148bf", + "created": "2025-10-10T20:54:21.731083Z", + "modified": "2025-10-10T20:54:21.731083Z", + "name": "China", + "country": "CN" + }, + { + "type": "location", + "spec_version": "2.1", + "id": "location--a800e746-5c2e-5eb7-a337-915c598a2520", + "created": "2025-10-10T20:54:21.731297Z", + "modified": "2025-10-10T20:54:21.731297Z", + "name": "Asia", + "region": "Asia" + }, + { + "type": "mac-addr", + "spec_version": "2.1", + "id": "mac-addr--b8df4b62-1e4e-5ead-bd24-dddefc6d5e4e", + "value":"00:00:5e:00:53:af" + }, + { + "type": "channel", + "spec_version": "2.1", + "id": "channel--a1e712fd-cb05-5d3a-9d62-1a53ab90957e", + "created": "2025-10-10T20:54:21.731804Z", + "modified": "2025-10-10T20:54:21.731804Z", + "name": "Twitter", + "extensions": { + "extension-definition--be4ebfff-c203-4698-8853-4797fa138ec7": { + "type": "extension-definition", + "spec_version": "2.1", + "id": "extension-definition--be4ebfff-c203-4698-8853-4797fa138ec7", + "created_by_ref": "identity--32207a20-5ece-40d2-b7a7-c5c207a12244", + "created": "2025-09-10T00:00:00.000Z", + "modified": "2025-09-10T00:00:00.000Z", + "name": "Channel", + "description": "Extension for creating channel objects in STIX", + "schema": "{'description': 'A custom Channel object for STIX', 'properties': {'type': {'const': 'channel', 'default': 'channel', 'description': \"The type of this object, which MUST be the literal 'channel'\", 'title': 'Type', 'type': 'string'}, 'id': {'description': 'The unique identifier for this channel (channel--)', 'pattern': '^channel--[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$', 'title': 'Id', 'type': 'string'}, 'spec_version': {'const': '2.1', 'default': '2.1', 'description': 'The STIX specification version', 'title': 'Spec Version', 'type': 'string'}, 'external_references': {'anyOf': [{'items': {'additionalProperties': True, 'type': 'object'}, 'type': 'array'}, {'type': 'null'}], 'default': None, 'description': 'External references for the channel', 'title': 'External References'}, 'extensions': {'additionalProperties': True, 'description': 'Extension definitions', 'title': 'Extensions', 'type': 'object'}, 'name': {'description': 'The name of the channel', 'title': 'Name', 'type': 'string'}, 'description': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'A description of the channel', 'title': 'Description'}, 'aliases': {'anyOf': [{'items': {'type': 'string'}, 'type': 'array'}, {'type': 'null'}], 'default': None, 'description': 'Alternative names for this channel', 'title': 'Aliases'}, 'channel_types': {'anyOf': [{'items': {'type': 'string'}, 'type': 'array'}, {'type': 'null'}], 'description': 'Types of communication channels', 'title': 'Channel Types'}}, 'required': ['id', 'extensions', 'name'], 'title': 'channel', 'type': 'object'}", + "version": "1.0.0", + "extension_types": [ + "new-sdo" + ], + "extension_properties": [ + "name", + "description", + "aliases", + "channel_types" + ] + } + } + }, + { + "type": "relationship", + "spec_version": "2.1", + "id": "relationship--ed67b7e5-f659-4e86-8ac8-3b44c1568d57", + "created": "2025-10-10T20:54:21.732467Z", + "modified": "2025-10-10T20:54:21.732467Z", + "relationship_type": "originates-from", + "source_ref": "intrusion-set--e7ae39ae-389f-5507-a794-b81a570bf284", + "target_ref": "location--1b9b5744-a11a-57e3-b58c-058ae58148bf" + }, + { + "type": "relationship", + "spec_version": "2.1", + "id": "relationship--d20a15c4-706a-42c4-b306-fd90e16519d3", + "created": "2025-10-10T20:54:21.732728Z", + "modified": "2025-10-10T20:54:21.732728Z", + "relationship_type": "located-at", + "source_ref": "location--1b9b5744-a11a-57e3-b58c-058ae58148bf", + "target_ref": "location--a800e746-5c2e-5eb7-a337-915c598a2520" + }, + { + "type": "relationship", + "spec_version": "2.1", + "id": "relationship--9787764d-a3b3-4789-a444-84b649eeedff", + "created": "2025-10-10T20:54:21.732467Z", + "modified": "2025-10-10T20:54:21.732467Z", + "relationship_type": "targets", + "source_ref": "intrusion-set--e7ae39ae-389f-5507-a794-b81a570bf284", + "target_ref": "location--bd231405-2ce2-50d6-a272-19491751cfda" + }, + { + "type": "relationship", + "spec_version": "2.1", + "id": "relationship--9b0dbd8f-a5bf-4eda-8c24-4c2cfffbf410", + "created": "2025-10-10T20:54:21.732728Z", + "modified": "2025-10-10T20:54:21.732728Z", + "relationship_type": "uses", + "source_ref": "intrusion-set--e7ae39ae-389f-5507-a794-b81a570bf284", + "target_ref": "attack-pattern--c6c6e86f-2b48-5b4e-acea-2ad7793cef9b" + }, + { + "type": "relationship", + "spec_version": "2.1", + "id": "relationship--9b0dbd8f-a5bf-4eda-8c24-4c2cfffbf410", + "created": "2025-10-10T20:54:21.732728Z", + "modified": "2025-10-10T20:54:21.732728Z", + "relationship_type": "has_a_pattent_on", + "source_ref": "intrusion-set--e7ae39ae-389f-5507-a794-b81a570bf284", + "target_ref": "attack-pattern--c6c6e86f-2b48-5b4e-acea-2ad7793cef9b" + } + ] +} \ No newline at end of file diff --git a/internal-import-file/import-document-ai/docker-compose.yml b/internal-import-file/import-document-ai/docker-compose.yml index 302c2d066f9..c3a46ad1efb 100644 --- a/internal-import-file/import-document-ai/docker-compose.yml +++ b/internal-import-file/import-document-ai/docker-compose.yml @@ -8,11 +8,13 @@ services: - CONNECTOR_ID=ChangeMe - CONNECTOR_NAME=ImportDocumentAI - CONNECTOR_VALIDATE_BEFORE_IMPORT=true # Validate any bundle before import - - IMPORT_DOCUMENT_INCLUDE_RELATIONSHIPS=true - CONNECTOR_SCOPE=application/pdf,text/plain,text/html,text/markdown - CONNECTOR_AUTO=false # Enable/disable auto-import of file - CONNECTOR_LOG_LEVEL=error - - CONNECTOR_LICENCE_KEY_PEM = | + - IMPORT_DOCUMENT_AI_INCLUDE_RELATIONSHIPS=true + - IMPORT_DOCUMENT_AI_CREATE_INDICATOR=false + - IMPORT_DOCUMENT_AI_API_BASE_URL=ChangeMe + - IMPORT_DOCUMENT_AI_API_KEY=| -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- diff --git a/internal-import-file/import-document-ai/src/config.yml.sample b/internal-import-file/import-document-ai/src/config.yml.sample index b7341645783..434c41038d5 100644 --- a/internal-import-file/import-document-ai/src/config.yml.sample +++ b/internal-import-file/import-document-ai/src/config.yml.sample @@ -10,11 +10,13 @@ connector: scope: 'application/pdf,text/plain,text/html,text/markdown' auto: false # Enable/disable auto-import of file log_level: 'info' - licence_key_pem: | + +import_document_ai: + include_relationships: true + create_indicator: false + api_base_url: 'ChangeMe' + api_key: | -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- - -import_document: - include_relationships: 'true' \ No newline at end of file diff --git a/internal-import-file/import-document-ai/src/import_doc_ai/__init__.py b/internal-import-file/import-document-ai/src/import_doc_ai/__init__.py new file mode 100644 index 00000000000..f0487480218 --- /dev/null +++ b/internal-import-file/import-document-ai/src/import_doc_ai/__init__.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +"""OpenCTI ReportImporter connector module.""" + +from import_doc_ai.config_loader import ConfigConnector +from import_doc_ai.connector import Connector + +__all__ = ["Connector", "ConfigConnector"] diff --git a/internal-import-file/import-document-ai/src/import_doc_ai/client_api.py b/internal-import-file/import-document-ai/src/import_doc_ai/client_api.py new file mode 100644 index 00000000000..aa174b0c61b --- /dev/null +++ b/internal-import-file/import-document-ai/src/import_doc_ai/client_api.py @@ -0,0 +1,99 @@ +""" +See https://github.com/OpenCTI-Platform/connectors/blob/42e0ad002318224e88cac2b4796c0bc136a4aa75/templates/external-import/src/external_import_connector/client_api.py +""" + +from io import BytesIO + +import requests +import stix2 +import stix2.exceptions # Exceptions are not exposed in public api root + +from .config_loader import ConfigConnector +from .util import deduplicate_bundle_objects, filter_relationship_triplets + + +class ImportDocumentAIClient: + def __init__(self, helper, config: ConfigConnector): + """ + Initialize the client with necessary configurations + """ + self.helper = helper + self.config = config + + self._opencti_instance_id = self.helper.api.query(""" + query SettingsQuery { + settings { + id + } + } + """).get("data", {}).get("settings", {}).get("id", "") + + # Define headers in session and update when needed + headers = { + "X-OpenCTI-Certificate": self.config.licence_key_base64, + "X-OpenCTI-instance-id": self._opencti_instance_id, + } + self.session = requests.Session() + self.session.headers.update(headers) + + def _request_data( + self, endpoint: str, file_name: str, file_mime: str, file_data: BytesIO + ) -> requests.Response: + """ + Internal method to handle API requests + :return: Response + """ + try: + url = self.config.api_base_url + endpoint + response = self.session.post( + url=url, files={"file": (file_name, file_data, file_mime)} + ) + + self.helper.connector_logger.info( + "[API] HTTP Post Request to endpoint", {"url_path": url} + ) + + response.raise_for_status() + return response + + except requests.ConnectionError: + raise requests.ConnectionError( + "ImportDocumentAI webservice seems to be unreachable, " + "have you configured your connector properly ?" + ) + except requests.RequestException as err: + error_msg = "[API] Error while fetching data: " + self.helper.connector_logger.error( + error_msg, {"url_path": {url}, "error": {str(err)}} + ) + raise err + + def get_bundle( + self, + file_name: str, + file_mime: str, + file_data: BytesIO, + allowed_relationship_triplets: set[tuple[str, str, str]], + ) -> stix2.Bundle: + """ + Fetch the bundle from the API + :return: Bundle in JSON format + """ + response = self._request_data( + endpoint="/stix", + file_name=file_name, + file_mime=file_mime, + file_data=file_data, + ) + try: + bundle = stix2.Bundle(**response.json(), allow_custom=True) + # deduplicate objects based on their id + bundle = deduplicate_bundle_objects(bundle) + # filter relationships + bundle = filter_relationship_triplets(bundle, allowed_relationship_triplets) + return bundle + except stix2.exceptions.STIXError as e: + self.helper.connector_logger.error( + "[API] Error while parsing STIX2 bundle", {"error": str(e)} + ) + raise e diff --git a/internal-import-file/import-document-ai/src/import_doc_ai/config_loader.py b/internal-import-file/import-document-ai/src/import_doc_ai/config_loader.py new file mode 100644 index 00000000000..46341404006 --- /dev/null +++ b/internal-import-file/import-document-ai/src/import_doc_ai/config_loader.py @@ -0,0 +1,83 @@ +""" +See https://github.com/OpenCTI-Platform/connectors/blob/42e0ad002318224e88cac2b4796c0bc136a4aa75/templates/internal-import-file/src/internal_import_file_connector/config_loader.py +""" + +import base64 +import os +from pathlib import Path + +import yaml + +from .util import get_config_variable_legacy + + +class ConfigConnector: + def __init__(self): + """ + Initialize the connector with necessary configurations + """ + + # Load configuration file + self.load = self._load_config() + self._initialize_configurations() + + @staticmethod + def _load_config() -> dict: + """ + Load the configuration from the YAML file + :return: Configuration dictionary + """ + config_file_path = Path(__file__).parents[1].joinpath("config.yml") + config = ( + yaml.load(open(config_file_path), Loader=yaml.FullLoader) + if os.path.isfile(config_file_path) + else {} + ) + + return config + + def _initialize_configurations(self) -> None: + """ + Connector configuration variables + :return: None + """ + # Connector extra parameters + + self.api_base_url = get_config_variable_legacy( + ["IMPORT_DOCUMENT_AI_API_BASE_URL", "CONNECTOR_WEB_SERVICE_URL"], + [["import_document_ai", "api_base_url"], ["connector", "web_service_url"]], + self.load, + required=True, + ) + + self.api_key = get_config_variable_legacy( + ["IMPORT_DOCUMENT_AI_API_KEY", "CONNECTOR_LICENCE_KEY_PEM"], + [["import_document_ai", "api_key"], ["connector", "licence_key_pem"]], + self.load, + required=True, + ) + self.licence_key_base64 = base64.b64encode(self.api_key.encode()) + + # Read connector flags from config (create_indicator, web_service_url, etc.) + self.create_indicator = get_config_variable_legacy( + ["IMPORT_DOCUMENT_AI_CREATE_INDICATOR", "IMPORT_DOCUMENT_CREATE_INDICATOR"], + [ + ["import_document_ai", "create_indicator"], + ["import_document", "create_indicator"], + ], + self.load, + default=False, + ) + + self.include_relationships = get_config_variable_legacy( + [ + "IMPORT_DOCUMENT_AI_INCLUDE_RELATIONSHIPS", + "IMPORT_DOCUMENT_INCLUDE_RELATIONSHIPS", + ], + [ + ["import_document_ai", "include_relationships"], + ["import_document", "include_relationships"], + ], + self.load, + default=True, + ) diff --git a/internal-import-file/import-document-ai/src/import_doc_ai/connector.py b/internal-import-file/import-document-ai/src/import_doc_ai/connector.py new file mode 100644 index 00000000000..e98be8b72cb --- /dev/null +++ b/internal-import-file/import-document-ai/src/import_doc_ai/connector.py @@ -0,0 +1,179 @@ +""" +See : https://github.com/OpenCTI-Platform/connectors/blob/42e0ad002318224e88cac2b4796c0bc136a4aa75/templates/internal-import-file/src/internal_import_file_connector/connector.py +""" + +from pycti import OpenCTIConnectorHelper + +from .client_api import ImportDocumentAIClient +from .config_loader import ConfigConnector +from .util import ( + OpenCTIFileObject, + bulk_update_authors, + bulk_update_object_markings, + compute_bundle_stats, + convert_location_to_octi_location, + download_import_file, + extend_bundle, + fetch_octi_allowed_stix_relations_triplets, + fetch_octi_attack_pattern_by_mitre_id, + filter_bundle_entities_by_type, + filter_bundle_observables, + get_triggering_entity, + is_a_container, + is_an_observed_data_container, + make_report, + relate_to, + replace_in_bundle, + update_custom_properties, + update_object_refs, +) + + +class Connector: + """ + Specifications of the Internal Import File connector + + This class encapsulates the main actions, expected to be run by any internal import file connector. + This type of connector listen file upload in the platform. + After getting the file content, the connector will create a STIX bundle in order to be sent to ingest. + It basically uses the same functions and principle than the internal enrichment connector type. + """ + + def __init__(self, config: ConfigConnector, helper: OpenCTIConnectorHelper) -> None: + """ + Initialize the Connector with necessary configurations + """ + + self.config = config + self.helper = helper + + self.import_doc_ia_client = ImportDocumentAIClient(helper, config) + + if not self.config.include_relationships: + # for backward behavior due to previous connector capabilities + self.allowed_relationships_triplets = set() + else: + # ask allowed relationships to OCTI instance + self.allowed_relationships_triplets = ( + fetch_octi_allowed_stix_relations_triplets(self.helper) + ) + + def process_message(self, data: dict) -> str: + """ + Processing the import request + The data passed in the data parameter is a dictionary with the following structure as shown in + https://docs.opencti.io/latest/development/connectors/#additional-implementations + """ + + file: OpenCTIFileObject = download_import_file(self.helper, data) + triggering_entity = get_triggering_entity(self.helper, data) # might be None + # Fail Fast if needed + if self.helper.get_only_contextual() and triggering_entity is None: + return "Connector is only contextual and entity is not defined. Nothing was imported" + + ## Call Ariane Web service + ai_bundle = self.import_doc_ia_client.get_bundle( + file_name=file.name, + file_mime=file.mime_type, + file_data=file.buffered_data, + allowed_relationship_triplets=self.allowed_relationships_triplets, + ) + # Handle Attack pattern special case reunification if already present in OCTI platform + for ai_attack_pattern in filter_bundle_entities_by_type( + ai_bundle, {"attack-pattern"} + ).get("objects", []): + if "x_mitre_id" in ai_attack_pattern: + existing_attack_pattern = fetch_octi_attack_pattern_by_mitre_id( + self.helper, ai_attack_pattern["x_mitre_id"] + ) + if existing_attack_pattern: + ai_bundle = replace_in_bundle( + ai_bundle, ai_attack_pattern["id"], existing_attack_pattern + ) + + # Handle location: special case x_opencti_location_type + ai_locations_bundle = filter_bundle_entities_by_type(ai_bundle, {"location"}) + for ai_location in ai_locations_bundle.get("objects", []): + ai_bundle = replace_in_bundle( + ai_bundle, + ai_location["id"], + convert_location_to_octi_location(ai_location), + ) + + # Handle observables: indicator creation delegation to the platform if relevant + if self.config.create_indicator: + ai_observables_bundle = filter_bundle_observables(ai_bundle) + for ai_observable in ai_observables_bundle.get("objects", []): + updated_observable = update_custom_properties( + {"x_opencti_create_indicator": True}, ai_observable + ) + ai_bundle = replace_in_bundle( + ai_bundle, ai_observable["id"], new_object=updated_observable + ) + + # Enrich the triggering entity reference if relevant + # then the imported objects author and marking refs + if triggering_entity: + enrichment_objects_holder = [] + triggering_entity_stix = triggering_entity.get_stix(helper=self.helper) + if is_a_container(triggering_entity_stix): + # if the triggering entity is a container, update its object_refs + # to include all objects of the bundle + triggering_entity_stix = update_object_refs( + triggering_entity_stix, + [obj["id"] for obj in ai_bundle.get("objects", [])], + extend=True, + ) + enrichment_objects_holder.append(triggering_entity_stix) + + elif is_an_observed_data_container(triggering_entity_stix): + # if it is just an observed_data container + # we include only observable refs + triggering_entity_stix = update_object_refs( + triggering_entity_stix, + [ + obj["id"] + for obj in filter_bundle_observables(ai_bundle).get( + "objects", [] + ) + ], + extend=True, + ) + enrichment_objects_holder.append(triggering_entity_stix) + else: + # otherwise we create a related-to relationship between the + # triggering entity and all the indexed objects of the bundle + objects_ids = [ + obj["id"] + for obj in ai_bundle.get("objects", []) + if "id" in obj and obj["type"] != "relationship" + ] + enrichment_objects_holder.extend( + relate_to(objects_ids, [triggering_entity_stix["id"]]) + ) + + # Attach triggering entity author and marking_refs to imported objects + ai_bundle = extend_bundle(ai_bundle, enrichment_objects_holder) + ai_bundle = bulk_update_authors(triggering_entity.author_id, ai_bundle) + ai_bundle = bulk_update_object_markings( + triggering_entity.object_marking_refs, ai_bundle, extend=True + ) + + else: # Create a Report with the file + report = make_report(file, ai_bundle.get("objects", [])) + ai_bundle = extend_bundle(ai_bundle, [report]) + + ## send bundle to OpenCTI + # TODO sanitize entity with name <2 char + + self.helper.send_stix2_bundle( + bundle=ai_bundle.serialize(), + bypass_validation=data.get("bypass_validation", False), + file_name="import-document-ai-" + file.stem + ".json", + entity_id=triggering_entity.id if triggering_entity else None, + ) + + return str(compute_bundle_stats(ai_bundle)) + + def run(self) -> None: + self.helper.listen(message_callback=self.process_message) diff --git a/internal-import-file/import-document-ai/src/import_doc_ai/util.py b/internal-import-file/import-document-ai/src/import_doc_ai/util.py new file mode 100644 index 00000000000..3b46e77787e --- /dev/null +++ b/internal-import-file/import-document-ai/src/import_doc_ai/util.py @@ -0,0 +1,951 @@ +import base64 +import json +import uuid +import warnings +from collections import OrderedDict +from datetime import datetime, timezone +from io import BytesIO +from logging import getLogger +from pathlib import Path + +import pycti +import stix2 +import stix2.exceptions +import stix2.properties +from pycti import StixCoreRelationship, get_config_variable +from stix2.registry import STIX2_OBJ_MAPS + +logger = getLogger(__name__) + +# Config Helpers + + +def get_config_variable_legacy( + env_vars: list[str], config_paths: list[list[str]], config: dict, **kwargs +): + """Retrieve configuration variable from environment or config file. + + This uses helper function get_config_variable. + + Args: + env_vars (list[str]): List of environment variable names to check, + the first found will be used, only the first element in not + considered as legacy and will not trigger a warning message + config_paths (list[list[str]]): List of paths in the config file + config (dict): Configuration dictionary + default: Default value if not found + Returns: + The configuration value or default if not found + + Examples: + >>> config = { + ... "import_document": { + ... "create_indicator": True + ... } + ... } + >>> create_indicator = get_config_variable_legacy( + ... env_vars=["IMPORT_DOCUMENT_AI_CREATE_INDICATOR", "IMPORT_DOCUMENT_CREATE_INDICATOR"], + ... config_paths=[["import_document_ai", "create_indicator"], ["import_document", "create_indicator"]], + ... config=config + ... ) + """ + SENTINELLE_VALUE = uuid.uuid4() + + def get_config_variable_wrapper(env_var, yaml_path, config, **kwargs): + # filter kwargs if needed + kwargs_copy = kwargs.copy() + kwargs_copy.pop("default", None) + kwargs_copy.pop("required", None) + return get_config_variable( + env_var=env_var, + yaml_path=yaml_path, + config=config, + default=SENTINELLE_VALUE, + required=False, + **kwargs_copy, + ) + + # first iteration without warning (early out) + value = get_config_variable_wrapper( + env_var=env_vars[0], yaml_path=config_paths[0], config=config, **kwargs + ) + if value is not SENTINELLE_VALUE: + return value + + # other check with warning + for env_var, config_path in zip(env_vars[1:], config_paths[1:]): + value = get_config_variable_wrapper( + env_var=env_var, yaml_path=config_path, config=config, **kwargs + ) + if value is not SENTINELLE_VALUE: + msg = f"Configuration '{env_var}' is deprecated, please use '{env_vars[0]}' instead." + warnings.warn( + msg, + DeprecationWarning, + ) + logger.warning(msg) + return value + + # finaly last call with normal usage + return get_config_variable( + env_var=env_vars[0], yaml_path=config_paths[0], config=config, **kwargs + ) + + +# OCTI communication Helpers + + +class CustomReport(stix2.v21.Report): + """Custom Report class that makes object_refs truly optional. + + This class extends the standard STIX2 Report object to allow the + object_refs property to be optional. + + """ + + # Copy the parent class properties + _properties = OrderedDict(stix2.v21.Report._properties) + # Update properties definition to allow missing object_refs + _properties["object_refs"] = stix2.properties.ListProperty( + stix2.properties.ReferenceProperty( + valid_types=["SCO", "SDO", "SRO"], spec_version="2.1" + ), + required=False, + ) + + +# Alter stix2 lib registry to use CustomReport for parsing report objects +# This allows use to use stix2.parse without the error +# stix2.exceptions.MissingPropertiesError: +# No values for required properties for Report: (object_refs). +STIX2_OBJ_MAPS["2.1"]["objects"]["report"] = CustomReport + + +class OpenCTIFileObject: + """Represent a file object from OpenCTI.""" + + def __init__(self, path: str, buffered_data: BytesIO, mime_type: str, id: str): + """Initialize the OpenCTIFileObject. + Args: + path (str): The file path in the OpenCTI Instance. + buffered_data (BytesIO): The buffered data of the file. + mime_type (str): The MIME type of the file. + id (str): The unique identifier of the file. + """ + self.path = path + self.name = Path(path).name + self.stem = Path(path).stem + self.buffered_data = buffered_data + self.mime_type = mime_type + self.id = id + + def read(self) -> bytes: + """Read the content of the buffered data from the start. + + Returns: + (bytes): The content of the buffered data. + """ + self.buffered_data.seek(0) + return self.buffered_data.read() + + def to_custom_property(self) -> dict: + """Convert the file object to a octi custom property dictionary. + + Returns: + (dict): The custom property representation of the file object. + """ + custom_property = { + "name": self.name, + "data": base64.b64encode(self.read()), + "mime_type": self.mime_type, + } + if "import/global" in self.id: + custom_property["no_trigger_import"] = True + return custom_property + + +class OCTITriggeringEntity: + """Represent a triggering entity from OpenCTI.""" + + def __init__( + self, + id: str, + opencti_type: str, + object_marking_refs: list[str] | None = None, + author_id: str = None, + ): + """Initialize the TriggeringEntity. + Args: + id (str): The unique identifier of the entity. + type (str): The type of the entity. + """ + self.id = id + self.opencti_type = opencti_type + self.object_marking_refs = ( + list(object_marking_refs) if object_marking_refs is not None else [] + ) + self.author_id = author_id + + def get_stix(self, helper) -> stix2.v21._STIXBase21: + """Get the STIX object of the triggering entity. + Args: + helper (OpenCTIConnectorHelper): The connector helper to query OpenCTI. + + Returns: + (stix2.v21._STIXBase21): The STIX object of the entity. + """ + entity_stix = helper.api.stix2.get_stix_bundle_or_object_from_entity_id( + entity_type=self.opencti_type, entity_id=self.id, only_entity=True + ) + return stix2.parse(entity_stix, allow_custom=True) + + +# TODO put example of output in docstring +def fetch_octi_allowed_stix_relations_triplets( + helper, +) -> set[tuple[str, str, str]]: + """Fetch the allowed relations matrix from OpenCTI and return it. + + Args: + helper (OpenCTIConnectorHelper): The connector helper to query OpenCTI. + + Returns: + set[tuple[str, str, str]]: Returns a set of triplets (FROM_TYPE, REL_TYPE, TO_TYPE) representing allowed relationships. + """ + query = """ + query LoadRelationMapping { + schemaRelationsTypesMapping { + key + values + } + } + """ + + # handle non-stix cases: + aliases = { + "individual": "identity", + "organization": "identity", + "sector": "identity", + "city": "location", + "country": "location", + "region": "location", + "administrative-area": "location", + "system": "autonomous-system", + } + + data = helper.api.query(query)["data"]["schemaRelationsTypesMapping"] + # [ + # {'key': 'Attack-Pattern_Attack-Pattern', 'values': ['subtechnique-of', 'derived-from']} + # {'key': 'Attack-Pattern_Individual', 'values': ['targets']} + # ... + # ] + mapping: dict[tuple[str, str], set[str]] = {} + for entry in data: + from_type, to_type = [k.lower() for k in str(entry["key"]).split("_", 1)] + from_type = aliases.get(from_type, from_type) + to_type = aliases.get(to_type, to_type) + mapping[(from_type, to_type)] = {str(v).lower() for v in entry["values"]} + + # melt to triplets + return { + (from_type, rel_type, to_type) + for (from_type, to_type), rel_types in mapping.items() + for rel_type in rel_types + } + + +# TODO put example of output in docstring +def fetch_octi_attack_pattern_by_mitre_id(helper, mitre_id: str) -> dict | None: + """Fetch an existing Attack Pattern from OpenCTI by its MITRE ID or name. + + Args: + helper (OpenCTIConnectorHelper): The connector helper to query OpenCTI. + mitre_id (str): The MITRE ID of the Attack Pattern. + + Returns: + (dict | None): The Attack Pattern STIX object if found, else None. + """ + ttp_object = helper.api.attack_pattern.read( + filters={ + "mode": "or", + "filters": [ + {"key": "x_mitre_id", "values": [mitre_id]}, + {"key": "name", "values": [mitre_id]}, + ], + "filterGroups": [], + } + ) + # { + # 'id': '77e3ba97-af12-40f5-89b2-9d1a148f722c', + # 'standard_id': 'attack-pattern--3d451fb3-b187-53ed-9ccc-19d3730667d7', + # 'entity_type': 'Attack-Pattern', + # 'parent_types': ['Basic-Object', 'Stix-Object', 'Stix-Core-Object', 'Stix-Domain-Object'], + # 'spec_version': '2.1', + # 'created_at': '2025-10-11T00:43:24.241Z', + # 'updated_at': '2025-10-11T00:43:24.241Z', + # 'status': None, + # 'createdBy': None, + # 'objectMarking': [], + # 'objectLabel': [], + # 'externalReferences': [], + # 'revoked': False, + # 'confidence': 100, + # 'created': '2025-10-10T20:54:21.730Z', + # 'modified': '2025-10-10T20:54:21.730Z', + # 'name': 'T1234', + # 'description': None, + # 'aliases': None, + # 'x_mitre_platforms': None, + # 'x_mitre_permissions_required': None, + # 'x_mitre_detection': None, + # 'x_mitre_id': 'T1234', + # 'killChainPhases': [], + # 'createdById': None, + # 'objectMarkingIds': [], + # 'objectLabelIds': [], + # 'killChainPhasesIds': [], + # 'externalReferencesIds': [] + # } + if ttp_object: + stix_object = helper.api.stix2.get_stix_bundle_or_object_from_entity_id( + entity_type=ttp_object["entity_type"], + entity_id=ttp_object["id"], + only_entity=True, + ) + return stix2.parse(stix_object, allow_custom=True) + return None + + +def download_import_file(helper, data: dict) -> OpenCTIFileObject: + """Download the file from OpenCTI using the triggering message path. + + Args: + helper (OpenCTIConnectorHelper): The connector helper to query OpenCTI. + data (dict): Payload provided by OpenCTI when triggering the connector. + + Returns: + (OpenCTIFileObject): The downloaded file object. + """ + file_fetch = data["file_fetch"] + file_uri = helper.opencti_url + data["file_fetch"] + helper.connector_logger.info(f"Importing the file {file_uri}") + file_content = helper.api.fetch_opencti_file(file_uri, True) + buffer = BytesIO() + buffer.write(file_content) + buffer.seek(0) + return OpenCTIFileObject( + path=file_fetch, + buffered_data=buffer, + mime_type=data["file_mime"], + id=data["file_id"], + ) + + +def get_triggering_entity(helper, data: dict) -> OCTITriggeringEntity | None: + """Fetch the triggering entity if any. + + Args: + helper (OpenCTIConnectorHelper): The connector helper to query OpenCTI. + data (dict): Payload provided by OpenCTI when triggering the connector. + Returns: + The triggering entity if any, else None. + """ + triggering_entity_id = data.get("entity_id", None) + if triggering_entity_id is None: + return None + octi_response = ( + helper.api.stix_core_object.read(id=triggering_entity_id) + if triggering_entity_id is not None + else None + ) + return OCTITriggeringEntity( + id=octi_response["id"], + opencti_type=octi_response["entity_type"], + object_marking_refs=[ + x["standard_id"] for x in octi_response.get("objectMarking", []) + ], + author_id=( + octi_response.get("createdBy", {}).get("standard_id") + if octi_response.get("createdBy") + else None + ), + ) + + +# Bundle manipulation Helpers + + +def deduplicate_bundle_objects(bundle: stix2.Bundle) -> stix2.Bundle: + """Deduplicate objects in a STIX bundle based on their IDs. + + Args: + bundle (stix2.Bundle): The STIX bundle to deduplicate. + + Returns: + (stix2.Bundle): The deduplicated STIX bundle. + """ + # Deduplicate objects based on their ID + unique_objects = { + obj["id"]: obj for obj in bundle.get("objects", []) if obj["id"] + }.values() + return stix2.Bundle( + type=bundle["type"], objects=list(unique_objects), allow_custom=True + ) + + +def remove_from_object_refs( + bundle: stix2.Bundle, references: list[str] +) -> stix2.Bundle: + """Remove references to specific object IDs from all container objects in a STIX bundle. + + Args: + bundle (stix2.Bundle): The STIX bundle to process. + references (list[str]): The list of object IDs to remove from references. + + Returns: + (stix2.Bundle): The processed STIX bundle with references removed. + """ + updated_objects = [] + for obj in bundle.get("objects", []): + if "object_refs" in obj: + # as we cannot reassign stix object properties, + # we use dict representation not to alter other ones + object_dict = json.loads(obj.serialize()) + object_dict["object_refs"] = [ + ref for ref in obj["object_refs"] if ref not in references + ] + obj = stix2.parse(object_dict, allow_custom=True) + updated_objects.append(obj) + return stix2.Bundle(type=bundle["type"], objects=updated_objects, allow_custom=True) + + +def filter_bundle_entities_by_type( + bundle: stix2.Bundle, allowed_types: set[str] +) -> stix2.Bundle: + """Filter entities in a STIX bundle by their types. + + Note: This does not handle containers, only standalone entities. + + Args: + bundle (stix2.Bundle): The STIX bundle to filter. + allowed_types (set[str]): The set of allowed entity STIX types. + + Returns: + (stix2.Bundle): The filtered STIX bundle containing only entities of the allowed types. + + Examples: + >>> import stix2 + >>> ip = stix2.IPv4Address(value="192.0.2.1") + >>> attack_pattern = stix2.AttackPattern(name="Example Attack Pattern", custom_properties=dict(x_mitre_id="T1234")) + >>> malware = stix2.Malware(name="Example Malware", is_family=False) + >>> intrusion_set = stix2.IntrusionSet(name="Example Intrusion Set") + >>> relationship = stix2.Relationship( + ... source_ref=intrusion_set["id"], + ... target_ref=malware["id"], + ... relationship_type="uses", + ... ) + >>> bundle = stix2.Bundle( + ... objects=[ + ... ip, + ... attack_pattern, + ... malware, + ... intrusion_set, + ... relationship, + ... ], + ... allow_custom=True, + ... ) + >>> filtered_bundle = filter_bundle_entities_by_type(bundle, {"ipv4-addr", "attack-pattern"}) + """ + filtered_objects = [ + obj for obj in bundle.get("objects", []) if obj.get("type") in allowed_types + ] + return stix2.Bundle( + type=bundle["type"], objects=filtered_objects, allow_custom=True + ) + + +def filter_bundle_observables(bundle: stix2.Bundle) -> stix2.Bundle: + """Filter observables in a STIX bundle. + + Args: + bundle (stix2.Bundle): The STIX bundle to filter. + + Returns: + (stix2.Bundle): The filtered STIX bundle containing only observable objects. + + Examples: + >>> import stix2 + >>> ip = stix2.IPv4Address(value="192.0.2.1") + >>> intrusion_set = stix2.IntrusionSet(name="Example Intrusion Set") + >>> malware = stix2.Malware(name="Example Malware", is_family=False) + >>> relationship = stix2.Relationship( + ... source_ref=intrusion_set["id"], + ... target_ref=malware["id"], + ... relationship_type="uses", + ... ) + >>> filtered_bundle = filter_bundle_observables(bundle) + """ + filtered_objects = [ + obj + for obj in bundle.get("objects", []) + if isinstance(obj, stix2.v21._Observable) + ] + return stix2.Bundle( + type=bundle["type"], objects=filtered_objects, allow_custom=True + ) + + +def filter_relationship_triplets( + bundle: stix2.Bundle, allowed_types: set[tuple[str, str, str]] +) -> stix2.Bundle: + """Filter relationship triplets from a STIX bundle. + + Args: + bundle (stix2.Bundle): The STIX bundle to process. + allowed_types (set[tuple[str, str, str]]): The set of allowed relationship triplets to keep (source_type, relationship_type, target_type). + + Returns: + (stix2.Bundle): The processed STIX bundle without unwanted relationship triplets. + """ + # Remove relationships from the bundle if not in allowed relationship_types + relationship_ids_to_remove = [] + for obj in bundle.get("objects", []): + if obj.get("type") == "relationship": + source_type = obj.get("source_ref", "").split("--")[0] + target_type = obj.get("target_ref", "").split("--")[0] + triplet = (source_type, obj.get("relationship_type", ""), target_type) + if triplet not in allowed_types: + relationship_ids_to_remove.append(obj["id"]) + # Remove all references to relationships in container objects + bundle = remove_from_object_refs(bundle, references=relationship_ids_to_remove) + return stix2.Bundle( + type=bundle["type"], + objects=[ + obj + for obj in bundle.get("objects", []) + if not (obj.get("id", "") in relationship_ids_to_remove) + ], + allow_custom=True, + ) + + +def update_author( + author_id: str, stix_object: stix2.v21._STIXBase21 +) -> stix2.v21._STIXBase21: + """Attach an author (identity) to a STIX object. + + Args: + author_id (str): The ID of the author identity to attach. + stix_object (stix2.v21._STIXBase21): The STIX object to process. + + Returns: + (stix2.v21._STIXBase21): The processed STIX object with the author attached. + + Examples: + >>> import stix2 + >>> identity = stix2.Identity(name="Example Org", identity_class="organization") + >>> malware = stix2.Malware(name="Example Malware", is_family=False) + >>> malware_with_author = attach_author(identity["id"], malware) + >>> # observable case + >>> ip = stix2.IPv4Address(value="127.0.0.1") + >>> ip_with_author = attach_author(identity["id"], ip) + """ + object_dict = json.loads(stix_object.serialize()) + + try: + object_dict["created_by_ref"] = author_id + return stix2.parse(object_dict) + except stix2.exceptions.ExtraPropertiesError: + # for some stix object created by ref is not supported (ex: observable) + # we use x_opencti_created_by_ref instead + object_dict.pop("created_by_ref", None) + object_dict["x_opencti_created_by_ref"] = author_id + return stix2.parse(object_dict, allow_custom=True) + + +def update_object_marking_refs( + marking_ids: list[str], stix_object: stix2.v21._STIXBase21, extend: bool = True +) -> stix2.v21._STIXBase21: + """Attach object markings to a STIX object. + + Args: + marking_ids (list[str]): The list of marking definition IDs to attach. + stix_object (stix2.v21._STIXBase21): The STIX object to process. + extend (bool): Whether to extend the existing markings or replace them. + + Returns: + (stix2.v21._STIXBase21): The processed STIX object with the markings attached. + + Examples: + >>> import stix2 + >>> ip = stix2.IPv4Address(value="127.0.0.1") + >>> ip_with_marking = update_object_marking_refs([stix2.TLP_GREEN["id"]], ip) + """ + object_dict = json.loads(stix_object.serialize()) + if extend is False: + object_dict["object_marking_refs"] = marking_ids + return stix2.parse(object_dict, allow_custom=True) + existing_markings = set(object_dict.get("object_marking_refs", [])) + updated_markings = existing_markings.union(set(marking_ids)) + object_dict["object_marking_refs"] = list(updated_markings) + return stix2.parse(object_dict, allow_custom=True) + + +def update_custom_properties( + custom_properties: dict, stix_object: stix2.v21._STIXBase21, extend=True +) -> stix2.v21._STIXBase21: + """Attach custom properties to a STIX object. + Args: + custom_properties (dict): The custom properties to attach. + stix_object (stix2.v21._STIXBase21): The STIX object to process. + extend (bool): Whether to extend the existing custom properties or replace them. + Returns: + (stix2.v21._STIXBase21): The processed STIX object with the custom properties attached. + Examples: + >>> import stix2 + >>> ip = stix2.IPv4Address(value="127.0.0.1") + >>> ip_with_custom = update_custom_properties({"x_opencti_custom": "value"}, ip) + """ + object_dict = json.loads(stix_object.serialize()) + if extend is False: + object_dict["custom_properties"] = custom_properties + return stix2.parse(object_dict, allow_custom=True) + object_dict["custom_properties"] = { + **object_dict.get("custom_properties", {}), + **custom_properties, + } + return stix2.parse(object_dict, allow_custom=True) + + +def update_object_refs( + stix_object: stix2.v21._STIXBase21, object_refs: list[str], extend: bool = True +) -> stix2.Bundle: + """Update the object references of a STIX object. + + Args: + stix_object (stix2.v21._STIXBase21): The STIX object to process, it must be a container.. + object_refs (list[str]): The list of object reference IDs to update. + extend (bool): Whether to extend the new references or replace existing ones. + + Returns: + (stix2.Bundle): The processed STIX bundle with updated object references. + """ + if not (is_a_container(stix_object) or is_an_observed_data_container(stix_object)): + raise ValueError("The provided STIX object is not a container type.") + # otherwise it would create an objects_refs key on an unwanted object + + object_dict = json.loads(stix_object.serialize()) + if extend: + object_dict["object_refs"] = list( + set(set(object_refs)).union(set(object_dict.get("object_refs", []))) + ) + else: + object_dict["object_refs"] = object_refs + + return stix2.parse(object_dict, allow_custom=True) + + +def bulk_update_authors(author_id: str, bundle: stix2.Bundle) -> stix2.Bundle: + """Attach an author (identity) to all STIX objects in a bundle. + + Args: + author_id (str): The ID of the author identity to attach. + bundle (stix2.Bundle): The STIX bundle to process. + + Returns: + (stix2.Bundle): The processed STIX bundle with authors attached to each object. + + Examples: + >>> import stix2 + >>> identity = stix2.Identity(name="Example Org", identity_class="organization") + >>> malware = stix2.Malware(name="Example Malware", is_family=False) + >>> report = stix2.Report( + ... name="Example Report", + ... description="An example report.", + ... object_refs=[malware["id"]], + ... published="2024-10-01T12:00:00Z", + ... ) + >>> bundle = stix2.Bundle( + ... objects=[ + ... identity, + ... malware, + ... report, + ... ], + ... allow_custom=True, + ... ) + >>> bundle_with_authors = bulk_attach_author(identity["id"], bundle) + """ + updated_objects = [ + update_author(author_id, obj) for obj in bundle.get("objects", []) + ] + return stix2.Bundle(type=bundle["type"], objects=updated_objects, allow_custom=True) + + +def bulk_update_object_markings( + marking_ids: list[str], bundle: stix2.Bundle, extend=True +) -> stix2.Bundle: + """Attach object markings to all STIX objects in a bundle. + + Args: + marking_ids (list[str]): The list of marking definition IDs to attach. + bundle (stix2.Bundle): The STIX bundle to process. + extend (bool): Whether to extend the existing markings or replace them. + + Returns: + (stix2.Bundle): The processed STIX bundle with markings attached to each object. + + Examples: + >>> import stix2 + >>> ip = stix2.IPv4Address(value="127.0.0.1") + >>> bundle = stix2.Bundle(objects=[ip], allow_custom=True) + >>> updated_bundle = bulk_update_object_markings([stix2.TLP_GREEN["id"]], bundle) + """ + updated_objects = [ + update_object_marking_refs(marking_ids, obj, extend=extend) + for obj in bundle.get("objects", []) + ] + return stix2.Bundle(type=bundle["type"], objects=updated_objects, allow_custom=True) + + +def bulk_update_custom_properties( + custom_properties: dict, bundle: stix2.Bundle, extend=True +) -> stix2.Bundle: + """Attach custom properties to all STIX objects in a bundle. + + Args: + custom_properties (dict): The custom properties to attach. + bundle (stix2.Bundle): The STIX bundle to process. + extend (bool): Whether to extend the existing custom properties or replace them. + + Returns: + (stix2.Bundle): The processed STIX bundle with custom properties attached to each object. + + Examples: + >>> import stix2 + >>> ip = stix2.IPv4Address(value="127.0.0.1") + >>> bundle = stix2.Bundle(objects=[ip], allow_custom=True) + >>> updated_bundle = bulk_update_custom_properties({"x_opencti_custom": "value"}, bundle) + """ + updated_objects = [ + update_custom_properties(custom_properties, obj, extend=extend) + for obj in bundle.get("objects", []) + ] + return stix2.Bundle(type=bundle["type"], objects=updated_objects, allow_custom=True) + + +def replace_in_bundle( + bundle: stix2.Bundle, old_object_id: str, new_object: stix2.v21._STIXBase21 +) -> stix2.Bundle: + """Replace an object in a STIX bundle with a new object. + + Args: + bundle (stix2.Bundle): The STIX bundle to process. + old_object_id (str): The ID of the object to replace. + new_object (stix2.v21._STIXBase21): The new STIX object to replace the old one. + + Returns: + (stix2.Bundle): The processed STIX bundle with the object replaced. + """ + updated_objects = [ + new_object if obj["id"] == old_object_id else obj + for obj in bundle.get("objects", []) + ] + return stix2.Bundle(type=bundle["type"], objects=updated_objects, allow_custom=True) + + +def extend_bundle( + bundle: stix2.Bundle, additional_objects: list[stix2.v21._STIXBase21] +) -> stix2.Bundle: + """Extend a STIX bundle with additional objects. + + Args: + bundle (stix2.Bundle): The original STIX bundle. + additional_objects (list[stix2.v21._STIXBase21]): The list of additional STIX objects to add. + + Returns: + (stix2.Bundle): The extended STIX bundle. + """ + return stix2.Bundle( + type=bundle["type"], + objects=bundle.get("objects", []) + additional_objects, + allow_custom=True, + ) + + +def convert_location_to_octi_location( + stix_location: stix2.v21.Location, +) -> stix2.v21.Location: + """Convert a STIX location object to an OpenCTI-compatible location object. + + This add x_opencti_location_type property if missing. + Args: + stix_location (stix2.v21.Location): The STIX location object to convert. + + Returns: + (stix2.v21.Location): The converted OpenCTI-compatible location object. + """ + mapper = { + "country": "Country", + "region": "Region", + "city": "City", + "administrative_area": "Administrative-Area", + } + for stix_property in mapper.keys(): + if stix_location.get(stix_property): + octi_type = mapper[stix_property] + return update_custom_properties( + custom_properties={"x_opencti_location_type": octi_type}, + stix_object=stix_location, + extend=True, + ) + return stix_location + + +def make_report( + file: OpenCTIFileObject, stix_objects: list[stix2.v21._STIXBase21] +) -> CustomReport: + """Create a STIX report object. + + Args: + name (str): The name of the report. + description (str): The description of the report. + + Returns: + (stix2.v21.Report): The created STIX report object. + """ + nom = datetime.now(timezone.utc) + return CustomReport( + id=pycti.Report.generate_id(file.name, nom), + name="import-document-ai-" + file.name, + description="Automatic import", + published=nom, + report_types=["threat-report"], + object_refs=[obj["id"] for obj in stix_objects if "id" in obj], + allow_custom=True, + custom_properties={"x_opencti_files": [file.to_custom_property()]}, + ) + + +def relate_to( + stix_sources_ids: list[str], stix_targets_ids: list[str] +) -> list[stix2.v21.Relationship]: + """Create relationship related-to objects between source and target STIX objects. + + Args: + stix_sources_ids (list[str]): The list of source STIX object IDs. + stix_targets_ids (list[str]): The list of target STIX object IDs. + + Returns: + (list[stix2.v21.Relationship]): The list of created relationship objects. + """ + relationships = [] + for source_id in stix_sources_ids: + for target_id in stix_targets_ids: + if source_id != target_id: + relationships.append( + stix2.Relationship( + id=StixCoreRelationship.generate_id( + "related-to", source_id, target_id + ), + source_ref=source_id, + target_ref=target_id, + relationship_type="related-to", + ) + ) + return relationships + + +def compute_bundle_stats(bundle: stix2.Bundle) -> dict: + """Compute statistics about a STIX bundle. + + Args: + bundle (stix2.Bundle): The STIX bundle to analyze. + + Returns: + dict: A dictionary containing statistics about the bundle, including: + - observables: Count of observable objects in the bundle. + - entities: Count of entity objects in the bundle. + - relationships: Count of relationship objects in the bundle. + - reports: Count of report objects in the bundle. + - total_sent: Total number of objects sent for processing. + + Examples: + >>> import stix2 + >>> identity = stix2.Identity(name="Example Org", identity_class="organization") + >>> malware = stix2.Malware(name="Example Malware", is_family=False) + >>> relationship = stix2.Relationship( + ... source_ref=identity["id"], + ... target_ref=malware["id"], + ... relationship_type="uses", + ... ) + >>> ip = stix2.IPv4Address(value="127.0.0.1") + >>> report = stix2.Report( + ... name="Example Report", + ... description="An example report containing relationships.", + ... object_refs=[identity["id"], malware["id"], relationship["id"], ip["id"]], + ... published="2024-10-01T12:00:00Z", + ... ) + >>> bundle = stix2.Bundle( + ... objects=[ + ... identity, + ... malware, + ... relationship, + ... ip, + ... report, + ... ], + ... allow_custom=True, + ... ) + >>> stats = compute_bundle_stats(bundle) + + """ + stats = { + "observables": 0, + "entities": 0, + "relationships": 0, + "reports": 0, + "total_sent": len(bundle.get("objects", [])), + } + for obj in bundle.get("objects", []): + if isinstance(obj, stix2.Relationship): + stats["relationships"] += 1 + elif isinstance(obj, stix2.v21._DomainObject): + if obj.type == "report": + stats["reports"] += 1 + else: + stats["entities"] += 1 + + elif isinstance(obj, stix2.v21._Observable): + stats["observables"] += 1 + return stats + + +def is_a_container(obj: dict) -> bool: + """Check if a STIX object-like is a container type (report, note, opinion). + + Args: + obj (dict): The STIX object dict. + + Returns: + bool: True if the object is a container type, False otherwise. + """ + return str(obj.get("type", "")).lower() in { + "note", + "opinion", + "grouping", + "report", + "x-opencti-case-incident", + "x-opencti-case-rfi", + "x-opencti-case-rft", + } + + +def is_an_observed_data_container(obj: dict) -> bool: + """Check if a STIX object-like is an observed-data container type. + + Args: + obj (dict): The STIX object dict. + + Returns: + bool: True if the object is an observed-data container type, False otherwise. + """ + return str(obj.get("type", "")).lower() == "observed-data" diff --git a/internal-import-file/import-document-ai/src/main.py b/internal-import-file/import-document-ai/src/main.py index d29912ed61e..0626f4db073 100644 --- a/internal-import-file/import-document-ai/src/main.py +++ b/internal-import-file/import-document-ai/src/main.py @@ -3,12 +3,16 @@ import traceback -from reportimporter import ReportImporter +from import_doc_ai import ConfigConnector, Connector +from pycti import OpenCTIConnectorHelper if __name__ == "__main__": try: - connector = ReportImporter() - connector.start() + config = ConfigConnector() + helper = OpenCTIConnectorHelper(config=config.load) + + connector = Connector(config=config, helper=helper) + connector.run() except Exception: traceback.print_exc() exit(1) diff --git a/internal-import-file/import-document-ai/src/reportimporter/__init__.py b/internal-import-file/import-document-ai/src/reportimporter/__init__.py deleted file mode 100644 index 53589b22f39..00000000000 --- a/internal-import-file/import-document-ai/src/reportimporter/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -# -*- coding: utf-8 -*- -"""OpenCTI ReportImporter connector module.""" - -from reportimporter.core import ReportImporter - -__all__ = ["ReportImporter"] diff --git a/internal-import-file/import-document-ai/src/reportimporter/core.py b/internal-import-file/import-document-ai/src/reportimporter/core.py deleted file mode 100755 index f79642fa8b0..00000000000 --- a/internal-import-file/import-document-ai/src/reportimporter/core.py +++ /dev/null @@ -1,790 +0,0 @@ -import base64 -import os -from collections import OrderedDict -from datetime import datetime, timezone -from io import BytesIO -from pathlib import Path - -import requests -import stix2 -import yaml -from pycti import ( - OpenCTIConnectorHelper, - Report, - StixCoreRelationship, - get_config_variable, -) -from reportimporter.relations_allowed import ( - is_relation_allowed, - load_allowed_relations, - stix_lookup_type, -) -from reportimporter.util import ( - compute_bundle_stats, - create_stix_object, - remove_all_relationships, -) -from requests.exceptions import ConnectionError, HTTPError - -# --------------------------------------------------------------------------- -# Helper aliases (typing) - -UUID = str # Orion entity UUID -UuidToStix = dict[UUID, str] # quick lookup when building relations - - -class ReportImporter: - """Handles the import of a document into OpenCTI: - 1) Downloads the file from OpenCTI - 2) Calls an ML web service to extract entities/relationships - 3) Constructs a STIX bundle containing: - - Observables (e.g., IPv4, DomainName, etc.) - - Domain Entities (e.g., Malware, Individual, etc.) - - Predicted Relationships or context-based relationships - - A Report (if no context entity) or attaching to an existing entity - 4) Sends the final STIX bundle to OpenCTI for ingestion - """ - - def __init__(self) -> None: - # Instantiate the connector helper from config - base_path = os.path.dirname(os.path.abspath(__file__)) - config_file_path = base_path + "/../config.yml" - if os.path.isfile(config_file_path): - with open(config_file_path) as config_file: - config = yaml.load(config_file, Loader=yaml.FullLoader) - using_local_config = True - else: - config = {} - using_local_config = False - - self.helper = OpenCTIConnectorHelper(config) - - if using_local_config: - self.helper.connector_logger.error( - "Using local config file. Use Environment Variables only in production." - ) - - # Read connector flags from config (create_indicator, web_service_url, etc.) - self.create_indicator = get_config_variable( - "IMPORT_DOCUMENT_CREATE_INDICATOR", - ["import_document", "create_indicator"], - config, - default=False, - ) - self.web_service_url = get_config_variable( - "CONNECTOR_WEB_SERVICE_URL", - ["connector", "web_service_url"], - config, - default="https://importdoc.ariane.testing.filigran.io", - ) - license_key_pem = get_config_variable( - "CONNECTOR_LICENCE_KEY_PEM", ["connector", "licence_key_pem"], config - ) - self.licence_key_base64 = base64.b64encode(license_key_pem.encode()) - - self.include_relationships = get_config_variable( - "IMPORT_DOCUMENT_INCLUDE_RELATIONSHIPS", - ["import_document", "include_relationships"], - config, - default=True, - ) - - # Retrieve the OpenCTI instance ID (used as a header for the ML service) - # TODO make the connector more resilient to OpenCTI being down at startup, - # by wraping the initial helper.api.query() in a try/except with retries and logging - self.instance_id = self.helper.api.query(""" - query SettingsQuery { - settings { - id - } - } - """).get("data", {}).get("settings", {}).get("id", "") - - # Cache OpenCTI “allowed relationship” matrix - # Loading this mapping costs one GraphQL call at startup, - # and subsequent lookups are constant time in Python dict. - self.allowed_relations = load_allowed_relations(self.helper) - - @staticmethod - def _sanitise_name(raw_text: str | None) -> str | None: - """Return a clean name or None if it is too short ( < 2 chars ).""" - if not raw_text: - return None - cleaned = raw_text.strip().rstrip(",") - return cleaned if len(cleaned) >= 2 else None - - def _process_message(self, data: dict) -> str: - """Entry point when a new message arrives on the connector’s queue. - - Args: - data (dict): Payload from OpenCTI - - Returns: - str: A human-readable summary of what was imported or why it was skipped. - """ - self.helper.connector_logger.info("Processing new message") - self.file: dict | None = None - return self._process_import(data) - - def _process_import(self, data: dict) -> str: - """Main method to handle the import logic of a document file: - - Downloads the file - - Extracts entities and relationships via ML - - Constructs and sends a STIX bundle to OpenCTI - - Args: - data (dict): Payload provided by OpenCTI when triggering the connector. - Must include: - - 'file_id' (str): ID of the file to import. - - 'file_mime' (str): MIME type of the file. - - 'file_fetch' (str): Path used to download the file. - Optionally includes: - - 'entity_id' (str): ID of a contextual entity (e.g., Report, Case, Threat Actor). - If provided, the extracted entities/observables will be attached to this entity. - - 'bypass_validation' (bool): If True, skips validation before import. - - Raises: - ConnectionError: Raised when the ImportDocumentAI webservice is unreachable - HTTPError: Raised when the webservice responds with an HTTP error code. - - Returns: - str: Summary/log of the import action. - """ - # Step 1: Download the file (returns filename and a BytesIO buffer) - file_name, file_content_buffered = self._download_import_file(data) - entity_id = data.get("entity_id", None) - bypass_validation = data.get("bypass_validation", False) - # If an entity_id was provided, fetch that STIX object - entity = ( - self.helper.api.stix_core_object.read(id=entity_id) - if entity_id is not None - else None - ) - if self.helper.get_only_contextual() and entity is None: - return "Connector is only contextual and entity is not defined. Nothing was imported" - - # If the file ID contains "import/global", attach it as x_opencti_files in the bundle - if "import/global" in data["file_id"]: - file_data_encoded = base64.b64encode(file_content_buffered.read()) - self.file = { - "name": data["file_id"].replace("import/global/", ""), - "data": file_data_encoded, - "mime_type": data["file_mime"], - "no_trigger_import": True, - } - # Reset file offset - file_content_buffered.seek(0) - - # Step 2: Call our ML service to extract entities & relationships - try: - response = requests.post( - url=self.web_service_url + "/extract_entities_relations", - files={ - "file": (data["file_id"], file_content_buffered, data["file_mime"]) - }, - headers={ - "X-OpenCTI-Certificate": self.licence_key_base64, - "X-OpenCTI-instance-id": self.instance_id, - }, - ) - response.raise_for_status() - except ConnectionError: - raise ConnectionError( - "ImportDocumentAI webservice seems to be unreachable, have you configured your connector properly ?" - ) - except HTTPError as e: - raise HTTPError( - f"{response.status_code}, request failed with reason : {e}" - ) from e - parsed = response.json() - if not parsed: - return "No information extracted from report" - - # Early dedupe - parsed = self._dedupe_parsed(parsed) - - # Step 3: Parse and build STIX entities / observables, and map text to STIX id (for relationship linking) - observables, entities, uuid_to_stix, uuid_to_text = ( - self._process_parsing_results(parsed, entity) - ) - predicted_rels = parsed.get("relations", []) - - # Step 4: Build the STIX bundle (attach to context or wrap in a new report) + send bundle - counts = self._process_parsed_objects( - entity, - observables, - entities, - predicted_rels, - bypass_validation, - file_name, - uuid_to_stix, - uuid_to_text, - ) - - # Build an end‐user summary - if all( - counts[k] == 0 - for k in ( - "observables", - "entities", - "relationships", - "reports", - "total_sent", - ) - ): - return "No STIX objects sent — empty extraction or all filtered out." - - skipped = counts.get("skipped_rels", []) - summary_lines = [] - - if self.helper.get_validate_before_import() and not bypass_validation: - summary_lines.append( - f"Generated STIX bundle (awaiting validation) with: " - f"{counts['observables']} observables, " - f"{counts['entities']} entities, " - f"{counts['relationships']} relationships" - + (f", {counts['reports']} reports" if counts["reports"] else "") - ) - else: - summary_lines.append( - f"Sent STIX bundle with: " - f"{counts['observables']} observables, " - f"{counts['entities']} entities, " - f"{counts['relationships']} relationships" - + (f", {counts['reports']} reports" if counts["reports"] else "") - + f" (total sent = {counts['total_sent']})" - ) - if skipped: - summary_lines.append( - f", and {len(skipped)} unauthorized relationships were skipped." - ) - - return "\n".join(summary_lines) - - def start(self) -> None: - """Begin listening for messages on the queue. Each message will trigger `_process_message`.""" - self.helper.listen(self._process_message) - - def _download_import_file(self, data: dict) -> tuple[str, BytesIO]: - """Download the file from OpenCTI using the 'file_fetch' path. - - Args: - data (dict): Payload provided by OpenCTI when triggering the connector. - - Returns: - tuple[str, BytesIO]: The local filename and a buffer of its contents. - """ - file_fetch = data["file_fetch"] - file_uri = self.helper.opencti_url + file_fetch - - # Downloading and saving file to buffer - self.helper.connector_logger.info(f"Importing the file {file_uri}") - file_name = os.path.basename(file_fetch) - file_content = self.helper.api.fetch_opencti_file(file_uri, True) - - buffer = BytesIO() - buffer.write(file_content) - buffer.seek(0) - - return file_name, buffer - - def _dedupe_parsed(self, parsed: dict) -> dict: - """Deduplicate span entities by (label, text, type) and remap relation IDs. - - - First occurrence wins (case-insensitive, text trimmed). - - Rewrites relations' from_id/to_id to the kept ID. - - Preserves all other top-level and metadata fields. - - Args: - parsed (dict): Full JSON payload returned by the Import-Document-AI web service. - - Returns: - dict: A new payload with: - - `metadata.span_based_entities` deduplicated (first occurrence wins), - - `relations` endpoints (`from_id`/`to_id`) rewritten to canonical IDs, - - all other fields preserved unchanged. - """ - metadata = parsed.get("metadata", {}) or {} - span = parsed.get("metadata", {}).get("span_based_entities", []) - rels = parsed.get("relations", []) - - # case-insensitive, whitespace-trimmed key; first occurrence wins - buckets: "OrderedDict[tuple, dict]" = OrderedDict() - id_map: dict[str, str] = {} - - for item in span: - label = str(item.get("label", "")).strip() - text = str(item.get("text", "")).strip() - typ = item.get("type") - key = (label.lower(), text.lower(), typ) - if key not in buckets: - buckets[key] = { - "id": item["id"], - "label": item["label"], - "text": item["text"], - "type": item["type"], - } - # map every original id to the kept id - id_map[item["id"]] = buckets[key]["id"] - - new_rels = [] - for relation in rels: - new_rels.append( - { - **relation, - "from_id": id_map.get( - relation.get("from_id"), relation.get("from_id") - ), - "to_id": id_map.get(relation.get("to_id"), relation.get("to_id")), - } - ) - - if len(span) != len(buckets): - self.helper.connector_logger.debug( - f"Deduped span entities: kept {len(buckets)} of {len(span)}; " - f"remapped {len(new_rels)} relations." - ) - - new_parsed = dict(parsed) - new_metadata = dict(metadata) - new_metadata["span_based_entities"] = list(buckets.values()) - new_parsed["metadata"] = new_metadata - new_parsed["relations"] = new_rels - return new_parsed - - def _process_parsing_results( - self, parsed: dict, context_entity: dict | None - ) -> tuple[list[dict], list[dict], UuidToStix, dict[str, str]]: - """Convert Model output to STIX objects and build lookup tables. - - The function iterates over ``parsed["metadata"]["span_based_entities"]`` and - creates **one** STIX object (observable *or* domain entity) for each unique - couple *(surface_string, label)*. Deduplication is performed on a - lower-cased key, so the first occurrence wins — this guarantees that offsets - returned by the web-service still match the object kept in STIX. - - Besides returning the newly created objects, the function builds three - look-up maps used later when wiring relationships: - - * **uuid_to_stix** Mapping **Orion UUID → STIX ID**. - * **uuid_to_text** Mapping **Orion UUID → original surface string**. - - Args: - parsed (dict): Full JSON payload returned by the Import-Document-AI web-service. - context_entity (dict | None): Optional STIX object from OpenCTI used as import context - (e.g. an existing *Report* or *Incident*). - Markings / author are copied from it when present. - - Returns: - tuple[ list[dict], list[dict], dict[Key, StixID], dict[Key, StixObject], - UuidToStix, dict[str, str], ]: - Tuple with: - - * **observables** (list[dict]): New SCOs (IPv4, domain-name…). - * **entities** (list[dict]): New SDOs (Malware, Vulnerability…). - * **uuid_to_stix** (dict): Orion UUID ➜ STIX ID. - * **uuid_to_text** (dict): Orion UUID ➜ surface string. - """ - observables: list[dict] = [] - entities: list[dict] = [] - - # Collect markings and author from the context entity, if any - if context_entity is not None: - object_markings = [ - x["standard_id"] for x in context_entity.get("objectMarking", []) - ] - created_by = context_entity.get("createdBy") - author = created_by.get("standard_id") if created_by else None - else: - object_markings = [] - author = None - - # Iterate over entities/observables extracted by the ML model - span_entities = parsed["metadata"]["span_based_entities"] - uuid_to_stix: UuidToStix = {} - uuid_to_text: dict[str, str] = {} - - for match in span_entities: - category: str = match["label"] - txt: str | None = self._sanitise_name(match["text"]) - if not txt: - continue - - if match["type"] == "entity": - # ATT&CK patterns: read-first (OR on x_mitre_id/name); create only if not found - # If it's an MITRE TTP (Attack-Pattern.x_mitre_id) and already exists, fetch that instead - if category == "Attack-Pattern.x_mitre_id": - ttp_object = self.helper.api.attack_pattern.read( - filters={ - "mode": "or", - "filters": [ - {"key": "x_mitre_id", "values": [txt]}, - {"key": "name", "values": [txt]}, - ], - "filterGroups": [], - } - ) - if ttp_object: # Handles the case of an existing TTP - stix_object = self.helper.api.stix2.get_stix_bundle_or_object_from_entity_id( - entity_type=ttp_object["entity_type"], - entity_id=ttp_object["id"], - only_entity=True, - ) - else: - stix_object = create_stix_object( - category, - txt, - object_markings, - custom_properties={ - "created_by_ref": author, - }, - ) - else: - # Other SDOs: create directly; OpenCTI will merge on deterministic IDs - stix_object = create_stix_object( - category, - txt, - object_markings, - custom_properties={ - "created_by_ref": author, - }, - ) - - if stix_object: - entities.append(stix_object) - # store full object - uuid_to_stix[match["id"]] = stix_object["id"] - uuid_to_text[match["id"]] = txt - else: - self.helper.connector_logger.debug( - f"Unsupported entity category: {match}" - ) - - elif match["type"] == "observable": - # Create a STIX Cyber Observable (IPv4Address, DomainName, etc.) - stix_object = create_stix_object( - category, - txt, - object_markings, - custom_properties={ - "x_opencti_create_indicator": self.create_indicator, - "created_by_ref": author, - }, - ) - if stix_object: - observables.append(stix_object) - uuid_to_stix[match["id"]] = stix_object["id"] - uuid_to_text[match["id"]] = txt - else: - self.helper.connector_logger.debug( - f"Unsupported observable category: {match}" - ) - - else: - self.helper.connector_logger.debug( - f"Unsupported match type: {match.get('type')!r} for {match}" - ) - - return ( - observables, - entities, - uuid_to_stix, - uuid_to_text, - ) - - def _convert_id(self, type, standard_id): - if type == "Case-Incident": - return "x-opencti-" + standard_id - if type == "Case-Rfi": - return "x-opencti-" + standard_id - if type == "Case-Rft": - return "x-opencti-" + standard_id - if type == "Feedback": - return "x-opencti-" + standard_id - if type == "Task": - return "x-opencti-" + standard_id - if type == "Data-Component": - return "x-mitre-" + standard_id - if type == "Data-Source": - return "x-mitre-" + standard_id - return standard_id - - def _process_parsed_objects( - self, - entity: dict | None, - observables: list, - entities: list, - predicted_rels: list, - bypass_validation: bool, - file_name: str, - uuid_to_stix: UuidToStix, - uuid_to_text: dict[str, str], - ) -> dict: - """Create relationships, wrap in Report if needed, and push the bundle. - - Args: - entity (dict | None): Contextual STIX object coming from OpenCTI, or ``None`` when - the import should create a brand-new *Report*. - observables (list): STIX Cyber Observables (SCOs) created from the file. - entities (list): STIX Domain Objects (SDOs) created from the file. - predicted_rels (list): Raw relations predicted by Orion - (each item has ``from_id``, ``to_id`` and ``type``). - bypass_validation (bool): If *True*, the connector skips OpenCTI - GraphQL validation when sending the bundle. - file_name (str): Original file name (used for the generated Report bundle). - uuid_to_stix (UuidToStix): Map Orion UUID → STIX ID (used to resolve relations). - uuid_to_text (dict[str, str]): Map Orion UUID → surface string (for logging only). - - Raises: - ValueError: If the context *entity* cannot be fetched/exported. - - Returns: - dict: Counters of what was finally sent to OpenCTI, e.g.:: - - { - "observables": 17, - "entities": 9, - "relationships": 6, - "report": 1, # 0 if context entity was used - "total_sent": 33, - "skipped_rels": [ ... ] # list of 5-tuples logged & skipped - } - """ - # If no objects at all, return zeros - if len(observables) == 0 and len(entities) == 0: - return { - "observables": 0, - "entities": 0, - "relationships": 0, - "report": 0, - "total_sent": 0, - } - - ids: list[str] = [] - observables_ids: list[str] = [] - entities_ids: list[str] = [] - skipped_rels: set[tuple[str, str, str, str, str]] = set() - - for o in observables: - if o["id"] not in ids: - observables_ids.append(o["id"]) - ids.append(o["id"]) - for e in entities: - if e["id"] not in ids: - entities_ids.append(e["id"]) - ids.append(e["id"]) - - relationships: list[stix2.Relationship] = [] # accumulate all relationships - - # Build relationships defined by the connector's own rules - # 1. Add relationships that stem from the contextual “entity” - if entity is not None: - entity_stix_bundle = ( - self.helper.api.stix2.get_stix_bundle_or_object_from_entity_id( - entity_type=entity["entity_type"], entity_id=entity["id"] - ) - ) - if len(entity_stix_bundle["objects"]) == 0: - raise ValueError("Entity cannot be found or exported") - - entity_stix = [ - obj - for obj in entity_stix_bundle["objects"] - if obj["id"] - == self._convert_id(entity["entity_type"], entity["standard_id"]) - ][0] - - # Containers: put everything inside - if entity_stix["type"] in { - "report", - "grouping", - "x-opencti-case-incident", - "x-opencti-case-rfi", - "x-opencti-case-rft", - "note", - "opinion", - }: - entity_stix["object_refs"] = ( - entity_stix.get("object_refs", []) + observables_ids + entities_ids - ) - entity_stix["x_opencti_files"] = [self.file] if self.file else [] - - # Observed-data: only observables - elif entity_stix["type"] == "observed-data": - entity_stix["object_refs"] = ( - entity_stix.get("object_refs", []) + observables_ids - ) - - # Other entities: create “related-to” relationships - else: - for observable in observables: - relationships.append( - stix2.Relationship( - id=StixCoreRelationship.generate_id( - "related-to", observable["id"], entity_stix["id"] - ), - relationship_type="related-to", - source_ref=observable["id"], - target_ref=entity_stix["id"], - allow_custom=True, - ) - ) - - # Additional hard-coded logic (incident/threat-actor) unchanged - if entity_stix["type"] == "incident": - for eid in entities_ids: - if eid.startswith("intrusion-set"): - rel_type = "attributed-to" - elif eid.startswith("vulnerability"): - rel_type = "targets" - elif eid.startswith("attack-pattern"): - rel_type = "uses" - else: - rel_type = None - - if rel_type: - relationships.append( - stix2.Relationship( - id=StixCoreRelationship.generate_id( - rel_type, entity_stix["id"], eid - ), - relationship_type=rel_type, - source_ref=entity_stix["id"], - target_ref=eid, - allow_custom=True, - ) - ) - - if entity_stix["type"] == "threat-actor": - for entity_id in entities_ids: - if entity_id.startswith("vulnerability"): - rel_type = "targets" - elif entity_id.startswith("attack-pattern"): - rel_type = "uses" - else: - rel_type = None - - if rel_type: - relationships.append( - stix2.Relationship( - id=StixCoreRelationship.generate_id( - rel_type, entity_stix["id"], entity_id - ), - relationship_type=rel_type, - source_ref=entity_stix["id"], - target_ref=entity_id, - allow_custom=True, - ) - ) - - # Add entity back to observables for the bundle - observables.append(entity_stix) - - # Process predicted relationships (always) - # ------------------------------------------------------------ - # 2. Relationships predicted by the ML model - # Create relationships predicted by the ML model - for rel in predicted_rels: - - rel_type = rel.get("type") - - src_id = uuid_to_stix.get(rel.get("from_id")) - tgt_id = uuid_to_stix.get(rel.get("to_id")) - src_txt = uuid_to_text.get(rel.get("from_id"), "") - tgt_txt = uuid_to_text.get(rel.get("to_id"), "") - - if not src_id or not tgt_id or src_id == tgt_id or not rel_type: - self.helper.connector_logger.warning( - "Skipped relation (missing data): %s", rel - ) - continue - - from_type = stix_lookup_type( - next(o for o in observables + entities if o["id"] == src_id) - ) - to_type = stix_lookup_type( - next(o for o in observables + entities if o["id"] == tgt_id) - ) - - if is_relation_allowed( - self.allowed_relations, from_type, to_type, rel_type - ): - relationships.append( - stix2.Relationship( - id=StixCoreRelationship.generate_id(rel_type, src_id, tgt_id), - relationship_type=rel_type, - source_ref=src_id, - target_ref=tgt_id, - allow_custom=True, - ) - ) - else: - self.helper.connector_logger.warning( - f"Skipping incompatible relationship {rel_type} between " - f"{src_txt} ({src_id}) and {tgt_txt} ({tgt_id})" - ) - skipped_rels.add((src_txt, from_type, rel_type, tgt_txt, to_type)) - - # Final relationships deduplication - # Dedupe relationships before counting/report wrap - relationships = list({r.id: r for r in relationships}.values()) - relationship_ids: list[str] = [rel["id"] for rel in relationships] - - # wrap in a Report if no context - if entity is None: - # No context entity: wrap everything in a freshly created Report - now = datetime.now(timezone.utc) - report = stix2.Report( - id=Report.generate_id(file_name, now), - name="import-document-ai_" + file_name, - description="Automatic import", - published=now, - report_types=["threat-report"], - object_refs=observables_ids + entities_ids + relationship_ids, - allow_custom=True, - custom_properties={"x_opencti_files": [self.file] if self.file else []}, - ) - observables += [report] - - # Final bundle: observables, entities, relationships, report - bundle_objects = observables + entities + relationships - - # ------------------------------------------------------------ - # (3) Deduplicate objects and send bundle - # ------------------------------------------------------------ - # dedupe final objects by id - final_ids: list[str] = [] - final_objects: list[dict] = [] - for obj in bundle_objects: - # Keep only objects whose name field is OK - bad_name = ( - "name" in obj and isinstance(obj["name"], str) and len(obj["name"]) < 2 - ) - if bad_name: - self.helper.connector_logger.debug( - f"Skipping object with short name: {obj}" - ) - if obj["id"] in final_ids: - self.helper.connector_logger.debug( - f"Duplicate object skipped: {obj['id']}" - ) - if obj["id"] not in final_ids and not bad_name: - final_ids.append(obj["id"]) - final_objects.append(obj) - - bundle = stix2.Bundle(objects=final_objects, allow_custom=True) - - if not self.include_relationships: - bundle = remove_all_relationships(bundle) - - self.helper.send_stix2_bundle( - bundle=bundle.serialize(), - bypass_validation=bypass_validation, - file_name="import-document-ai-" + Path(file_name).stem + ".json", - entity_id=entity["id"] if entity else None, - ) - - return { - **compute_bundle_stats(bundle), - "skipped_rels": list(skipped_rels), - } diff --git a/internal-import-file/import-document-ai/src/reportimporter/relations_allowed.py b/internal-import-file/import-document-ai/src/reportimporter/relations_allowed.py deleted file mode 100644 index 76a36f8d0dd..00000000000 --- a/internal-import-file/import-document-ai/src/reportimporter/relations_allowed.py +++ /dev/null @@ -1,79 +0,0 @@ -"""Load and validate allowed STIX relationship types.""" - - -def load_allowed_relations( - helper, -) -> dict[tuple[str, str], set[str]]: - """Fetch the allowed relations matrix from OpenCTI and return it. - - Args: - helper (OpenCTIConnectorHelper): The connector helper to query OpenCTI. - - Returns: - dict: Returns a dict where each key is (FROM_TYPE, TO_TYPE) and - each value is a set of allowed relationship names (uppercased). - """ - query = """ - query LoadRelationMapping { - schemaRelationsTypesMapping { - key - values - } - } - """ - data = helper.api.query(query)["data"]["schemaRelationsTypesMapping"] - mapping: dict[tuple[str, str], set[str]] = {} - for entry in data: - # key comes as "FromType_ToType" - key = entry["key"].upper() - from_type, to_type = key.split("_", 1) - mapping[(from_type, to_type)] = {v.upper() for v in entry["values"]} - return mapping - - -def stix_lookup_type(obj: dict[str, object] | None) -> str: - """Given a STIX object dict from pycti, return the key used - in OpenCTI’s schemaRelationsTypesMapping. - - - For identity objects, prefer x_opencti_identity_type over identity_class. - - For location objects, use x_opencti_location_type. - - Otherwise, use the upper-cased STIX type. - - Args: - obj (dict[str, object] | None): STIX object dict or None - - Returns: - str: A normalized type name used for relationship validation. - """ - if not obj: - return "" - t = str(obj.get("type", "")).upper() - if t == "IDENTITY": - return str( - obj.get("x_opencti_identity_type") or obj.get("identity_class") or "" - ).upper() - if t == "LOCATION": - return str(obj.get("x_opencti_location_type", "")).upper() - return t - - -def is_relation_allowed( - allowed_relations: dict[tuple[str, str], set[str]], - from_type: str, - to_type: str, - rel_type: str, -) -> bool: - """Determines whether a given STIX relationship type is allowed between two object types. - - Args: - allowed_relations (dict[tuple[str, str], set[str]]): OCTI allowed relationship mappings. - from_type (str): The source object's normalized STIX/OpenCTI type. - to_type (str): The target object's normalized STIX/OpenCTI type. - rel_type (str): The STIX relationship type. - - Returns: - bool: True if the relationship is allowed, False otherwise. - """ - return rel_type.upper() in allowed_relations.get( - (from_type.upper(), to_type.upper()), set() - ) diff --git a/internal-import-file/import-document-ai/src/reportimporter/util.py b/internal-import-file/import-document-ai/src/reportimporter/util.py deleted file mode 100644 index e8014658398..00000000000 --- a/internal-import-file/import-document-ai/src/reportimporter/util.py +++ /dev/null @@ -1,336 +0,0 @@ -import json - -import stix2 -from pycti import ( - AttackPattern, - Channel, - Identity, - IntrusionSet, - Location, - Malware, - ThreatActorGroup, - Tool, - Vulnerability, -) -from pycti.utils.constants import CustomObjectChannel, IdentityTypes - - -def create_stix_object( - category: str, value: str, object_markings: list[str], custom_properties: dict -) -> dict | None: - """Create a STIX object based on the extracted entity's category and value. - - This function dispatches to a factory function defined in `stix_object_mapping`. - If `category` is not found, returns None. - - Args: - category (str): A string key indicating which STIX type to create. - value (str): The raw/textual value for that object (e.g. the malware name, - the individual’s name, an IPv4 string, etc.). Leading/trailing - whitespace and trailing commas will be trimmed. - object_markings (list[str]): List of OpenCTI marking-definition standard IDs to apply. - custom_properties (dict): Additional custom properties, usually containing keys such as - 'created_by_ref', 'x_opencti_create_indicator', etc. - - Returns: - dict | None: A newly created STIX2 object (for example, a `stix2.Malware` or - `stix2.Identity`). Returns None if the `category` is not supported. - """ - # Trim whitespace and any trailing commas from the raw value - value = value.strip().rstrip(",") - stix_create_func = stix_object_mapping.get(category) - # Return the corresponding STIX object or None if category is unsupported - if stix_create_func is not None: - return stix_create_func(value, object_markings, custom_properties) - return None - - -stix_object_mapping = { - "Autonomous-System.number": lambda value, object_markings, custom_properties: stix2.AutonomousSystem( - number=int(value), - object_markings=object_markings, - custom_properties=custom_properties, - allow_custom=True, - ), - "Domain-Name.value": lambda value, object_markings, custom_properties: stix2.DomainName( - value=value, - object_markings=object_markings, - custom_properties=custom_properties, - allow_custom=True, - ), - "Email-Addr.value": lambda value, object_markings, custom_properties: stix2.EmailAddress( - value=value, - object_markings=object_markings, - custom_properties=custom_properties, - allow_custom=True, - ), - "File.name": lambda value, object_markings, custom_properties: stix2.File( - name=value, - object_markings=object_markings, - custom_properties=custom_properties, - allow_custom=True, - ), - "IPv4-Addr.value": lambda value, object_markings, custom_properties: stix2.IPv4Address( - value=value, - object_markings=object_markings, - custom_properties=custom_properties, - allow_custom=True, - ), - "IPv6-Addr.value": lambda value, object_markings, custom_properties: stix2.IPv6Address( - value=value, - object_markings=object_markings, - custom_properties=custom_properties, - allow_custom=True, - ), - "Mac-Addr.value": lambda value, object_markings, custom_properties: stix2.MACAddress( - value=value, - object_markings=object_markings, - custom_properties=custom_properties, - allow_custom=True, - ), - "Windows-Registry-Key.key": lambda value, object_markings, custom_properties: stix2.WindowsRegistryKey( - key=value, - object_markings=object_markings, - custom_properties=custom_properties, - allow_custom=True, - ), - "Url.value": lambda value, object_markings, custom_properties: stix2.URL( - value=value, - object_markings=object_markings, - custom_properties=custom_properties, - allow_custom=True, - ), - "File.hashes.MD5": lambda value, object_markings, custom_properties: stix2.File( - hashes={"MD5": value}, - object_markings=object_markings, - custom_properties=custom_properties, - allow_custom=True, - ), - "File.hashes.SHA-1": lambda value, object_markings, custom_properties: stix2.File( - hashes={"SHA-1": value}, - object_markings=object_markings, - custom_properties=custom_properties, - allow_custom=True, - ), - "File.hashes.SHA-256": lambda value, object_markings, custom_properties: stix2.File( - hashes={"SHA-256": value}, - object_markings=object_markings, - custom_properties=custom_properties, - allow_custom=True, - ), - "Malware": lambda value, object_markings, custom_properties: stix2.Malware( - id=Malware.generate_id(value), - name=value, - is_family=False, - object_markings=object_markings, - custom_properties=custom_properties, - allow_custom=True, - ), - "Threat-Actor-Group": lambda value, object_markings, custom_properties: stix2.ThreatActor( - id=ThreatActorGroup.generate_id(value), - name=value, - object_markings=object_markings, - custom_properties=custom_properties, - allow_custom=True, - ), - "Attack-Pattern.x_mitre_id": lambda value, object_markings, custom_properties: stix2.AttackPattern( - id=AttackPattern.generate_id(name=value, x_mitre_id=value), - name=value, - object_markings=object_markings, - custom_properties=custom_properties, - allow_custom=True, - ), - "Vulnerability.name": lambda value, object_markings, custom_properties: stix2.Vulnerability( - id=Vulnerability.generate_id(value), - name=value, - object_markings=object_markings, - custom_properties=custom_properties, - allow_custom=True, - ), - "Country": lambda value, object_markings, custom_properties: stix2.Location( - id=Location.generate_id(value, "Country"), - name=value, - country="", - custom_properties={"x_opencti_location_type": "Country"} | custom_properties, - allow_custom=True, - object_markings=object_markings, - ), - "Region": lambda value, object_markings, custom_properties: stix2.Location( - id=Location.generate_id(value, "Region"), - name=value, - region="", - custom_properties={"x_opencti_location_type": "Region"} | custom_properties, - allow_custom=True, - object_markings=object_markings, - ), - "Intrusion-Set": lambda value, object_markings, custom_properties: stix2.IntrusionSet( - id=IntrusionSet.generate_id(value), - name=value, - object_markings=object_markings, - custom_properties=custom_properties, - allow_custom=True, - ), - "Sector": lambda value, object_markings, custom_properties: stix2.Identity( - id=Identity.generate_id(value, IdentityTypes.SECTOR.value), - name=value, - # STIX 2.1 allows for individual, group, organization, class, system, unknown - # “class” is used to represent a generic category (such as a sector) - identity_class="class", - object_markings=object_markings, - custom_properties={ - **custom_properties, - "x_opencti_identity_type": IdentityTypes.SECTOR.value, - }, - allow_custom=True, - ), - "Organization": lambda value, object_markings, custom_properties: stix2.Identity( - id=Identity.generate_id(value, IdentityTypes.ORGANIZATION.value), - name=value, - identity_class=IdentityTypes.ORGANIZATION.value.lower(), - object_markings=object_markings, - custom_properties=custom_properties, - allow_custom=True, - ), - "Individual": lambda value, object_markings, custom_properties: stix2.Identity( - id=Identity.generate_id(value, IdentityTypes.INDIVIDUAL.value), - name=value, - identity_class=IdentityTypes.INDIVIDUAL.value.lower(), - object_markings=object_markings, - custom_properties=custom_properties, - allow_custom=True, - ), - "Channel": lambda value, object_markings, custom_properties: CustomObjectChannel( - id=Channel.generate_id(name=value), # for deduplication - name=value, - object_markings=object_markings, - custom_properties=custom_properties, - allow_custom=True, - ), - "Tool": lambda value, object_markings, custom_properties: stix2.Tool( - id=Tool.generate_id(value), - name=value, - object_markings=object_markings, - custom_properties=custom_properties, - allow_custom=True, - ), -} - - -def remove_all_relationships(bundle: stix2.Bundle) -> stix2.Bundle: - """Remove all relationship objects from a STIX bundle. - - Args: - bundle (stix2.Bundle): The STIX bundle to process. - - Returns: - stix2.Bundle: The processed STIX bundle without relationship objects. - - Examples: - >>> import stix2 - >>> identity = stix2.Identity(name="Example Org", identity_class="organization") - >>> malware = stix2.Malware(name="Example Malware", is_family=False) - >>> relationship = stix2.Relationship( - ... source_ref=identity["id"], - ... target_ref=malware["id"], - ... relationship_type="uses", - ... ) - >>> report = stix2.Report( - ... name="Example Report", - ... description="An example report containing relationships.", - ... object_refs=[identity["id"], malware["id"], relationship["id"]], - ... published="2024-10-01T12:00:00Z", - ... ) - >>> bundle = stix2.Bundle( - ... objects=[ - ... identity, - ... malware, - ... relationship, - ... report, - ... ], - ... allow_custom=True, - ... ) - >>> filtered_bundle = remove_all_relationships(bundle) - """ - # remove relationships from the bundle - objects = [obj for obj in bundle["objects"] if obj.get("type") != "relationship"] - # remove all references to relationships in container objects - for i, obj in enumerate(objects): - if "object_refs" in obj: - # as we cannot reassign stix object properties, - # we use dict representation not to alter other properties - object_dict = json.loads(obj.serialize()) - object_dict["object_refs"] = [ - ref - for ref in obj["object_refs"] - if not ref.startswith("relationship--") - ] - obj = stix2.parse(object_dict, allow_custom=True) - objects[i] = obj - return stix2.Bundle( - objects=objects, - allow_custom=True, - ) - - -def compute_bundle_stats(bundle: stix2.Bundle) -> dict: - """Compute statistics about a STIX bundle. - - Args: - bundle (stix2.Bundle): The STIX bundle to analyze. - - Returns: - dict: A dictionary containing statistics about the bundle, including: - - observables: Count of observable objects in the bundle. - - entities: Count of entity objects in the bundle. - - relationships: Count of relationship objects in the bundle. - - reports: Count of report objects in the bundle. - - total_sent: Total number of objects sent for processing. - - Examples: - >>> import stix2 - >>> identity = stix2.Identity(name="Example Org", identity_class="organization") - >>> malware = stix2.Malware(name="Example Malware", is_family=False) - >>> relationship = stix2.Relationship( - ... source_ref=identity["id"], - ... target_ref=malware["id"], - ... relationship_type="uses", - ... ) - >>> ip = stix2.IPv4Address(value="127.0.0.1") - >>> report = stix2.Report( - ... name="Example Report", - ... description="An example report containing relationships.", - ... object_refs=[identity["id"], malware["id"], relationship["id"], ip["id"]], - ... published="2024-10-01T12:00:00Z", - ... ) - >>> bundle = stix2.Bundle( - ... objects=[ - ... identity, - ... malware, - ... relationship, - ... ip, - ... report, - ... ], - ... allow_custom=True, - ... ) - >>> stats = compute_bundle_stats(bundle) - - """ - stats = { - "observables": 0, - "entities": 0, - "relationships": 0, - "reports": 0, - "total_sent": len(bundle.objects), - } - for obj in bundle["objects"]: - if isinstance(obj, stix2.Relationship): - stats["relationships"] += 1 - elif isinstance(obj, stix2.v21._DomainObject): - if obj.type == "report": - stats["reports"] += 1 - else: - stats["entities"] += 1 - - elif isinstance(obj, stix2.v21._Observable): - stats["observables"] += 1 - return stats diff --git a/internal-import-file/import-document-ai/src/requirements.txt b/internal-import-file/import-document-ai/src/requirements.txt index 1be9fe16126..a274a2a277e 100644 --- a/internal-import-file/import-document-ai/src/requirements.txt +++ b/internal-import-file/import-document-ai/src/requirements.txt @@ -1,5 +1,5 @@ -pycti==7.260309.0 +pycti==7.260515.0 antlr4-python3-runtime -requests==2.32.5 +requests==2.33.0 stix2==3.0.1 PyYAML==6.0.3 \ No newline at end of file diff --git a/internal-import-file/import-document-ai/tests/test-requirements.txt b/internal-import-file/import-document-ai/tests/test-requirements.txt new file mode 100644 index 00000000000..5e7a09c1b56 --- /dev/null +++ b/internal-import-file/import-document-ai/tests/test-requirements.txt @@ -0,0 +1,5 @@ +# Main dependencies needs to be installed +-r ../src/requirements.txt +-r ../dev/dev-requirements.txt +pytest +pytest-cov diff --git a/internal-import-file/import-document-ai/tests/test_connector_smoke.py b/internal-import-file/import-document-ai/tests/test_connector_smoke.py new file mode 100644 index 00000000000..d621f32046b --- /dev/null +++ b/internal-import-file/import-document-ai/tests/test_connector_smoke.py @@ -0,0 +1,535 @@ +import asyncio +import json +import sys +from http import HTTPStatus +from io import BytesIO +from pathlib import Path +from unittest.mock import Mock +from urllib.parse import urlparse + +import pycti +import pytest +import requests +import stix2 +from fastapi.testclient import TestClient +from requests.structures import CaseInsensitiveDict + +sys.path.append(str((Path(__file__).resolve().parent.parent / "src"))) +sys.path.append(str((Path(__file__).resolve().parent.parent / "dev"))) + +from fake_rest import app, generate_fake_certificate +from import_doc_ai.connector import Connector +from import_doc_ai.util import OpenCTIFileObject + + +@pytest.fixture(name="fastapi_test_client") +def fixture_fastapi_test_client(): + test_client = TestClient(app) + yield test_client + test_client.close() + + +@pytest.fixture(name="mock_connector_helper") +def fixture_mock_connector_helper() -> Mock: + helper = Mock() + helper.api.query.return_value = { + "data": {"settings": {"id": "opencti-instance-id"}} + } + helper.get_only_contextual.return_value = False + helper.send_stix2_bundle = Mock() + helper.connector_logger.info = Mock() + helper.connector_logger.error = Mock() + helper.connector_logger.warning = Mock() + return helper + + +@pytest.fixture(name="mock_config") +def fixture_mock_config() -> Mock: + config = Mock() + config.api_base_url = "http://testserver" + config.create_indicator = False + config.include_relationships = False + config.licence_key_base64 = generate_fake_certificate( + common_name="test", + validity_start=None, + validity_duration=None, + ).decode("utf-8") + return config + + +@pytest.fixture(name="imported_file") +def fixture_imported_file() -> OpenCTIFileObject: + return OpenCTIFileObject( + path="reports/smoke-test.pdf", + buffered_data=BytesIO(b"%PDF-1.4 smoke test"), + mime_type="application/pdf", + id="import/global/smoke-test.pdf", + ) + + +def build_triggering_entity_mock( + triggering_entity_stix: stix2.v21._STIXBase21, + author_id: str | None = "identity--00000000-0000-4000-8000-000000000001", + object_marking_refs: list[str] | None = None, +) -> Mock: + triggering_entity = Mock() + triggering_entity.id = triggering_entity_stix["id"] + triggering_entity.author_id = author_id + triggering_entity.object_marking_refs = ( + object_marking_refs + if object_marking_refs is not None + else [stix2.TLP_GREEN["id"]] + ) + triggering_entity.get_stix = Mock(return_value=triggering_entity_stix) + return triggering_entity + + +def connect_import_document_ai_client_to_test_server( + connector: Connector, fastapi_test_client: TestClient +) -> None: + """Adapt the ImportDocumentAIClient to send requests to the FastAPI test client with a request lib adaptation layer.""" + + def to_header_bytes(value: str | bytes) -> bytes: + if isinstance(value, bytes): + return value + return value.encode("latin-1") + + def to_header_str(value: str | bytes) -> str: + if isinstance(value, bytes): + return value.decode("latin-1") + return value + + def dispatch_test_client_request_as_requests_response( + test_client: TestClient, request + ) -> requests.Response: + request_body = request.read() + response_start = {} + response_body_parts = [] + request_has_been_sent = False + + async def receive(): + nonlocal request_has_been_sent + if not request_has_been_sent: + request_has_been_sent = True + return { + "type": "http.request", + "body": request_body, + "more_body": False, + } + return {"type": "http.disconnect"} + + async def send(message): + if message["type"] == "http.response.start": + response_start["status"] = message["status"] + response_start["headers"] = message.get("headers", []) + elif message["type"] == "http.response.body": + response_body_parts.append(message.get("body", b"")) + + scope = { + "type": "http", + "asgi": {"version": "3.0", "spec_version": "2.3"}, + "http_version": "1.1", + "method": request.method, + "scheme": request.url.scheme, + "path": request.url.path, + "raw_path": to_header_bytes(request.url.raw_path), + "query_string": to_header_bytes(request.url.query), + "headers": [ + (to_header_bytes(key.lower()), to_header_bytes(value)) + for key, value in request.headers.multi_items() + ], + "client": ("testclient", 50000), + "server": ( + request.url.host or "testserver", + request.url.port or (443 if request.url.scheme == "https" else 80), + ), + "root_path": "", + "state": {}, + } + + asyncio.run(test_client.app(scope, receive, send)) + + response = requests.Response() + response.status_code = response_start["status"] + response.headers = CaseInsensitiveDict( + { + to_header_str(key): to_header_str(value) + for key, value in response_start["headers"] + } + ) + response._content = b"".join(response_body_parts) + response.url = str(request.url) + response.reason = HTTPStatus(response.status_code).phrase + response.request = requests.Request( + method=request.method, + url=str(request.url), + headers=dict(request.headers), + ).prepare() + response.encoding = requests.utils.get_encoding_from_headers(response.headers) + return response + + def post_through_fastapi_test_client(url: str, files: dict): + parsed_url = urlparse(url) + request = fastapi_test_client.build_request( + "POST", + parsed_url.path or url, + files=files, + headers=dict(connector.import_doc_ia_client.session.headers), + ) + return dispatch_test_client_request_as_requests_response( + test_client=fastapi_test_client, + request=request, + ) + + connector.import_doc_ia_client.session.post = post_through_fastapi_test_client + + +def build_connector_for_smoke_test( + monkeypatch: pytest.MonkeyPatch, + mock_connector_helper: Mock, + mock_config: Mock, + imported_file: OpenCTIFileObject, + triggering_entity: Mock | None = None, + fastapi_test_client: TestClient | None = None, +) -> Connector: + monkeypatch.setattr( + "import_doc_ai.connector.download_import_file", + Mock(return_value=imported_file), + ) + monkeypatch.setattr( + "import_doc_ai.connector.get_triggering_entity", + Mock(return_value=triggering_entity), + ) + monkeypatch.setattr( + "import_doc_ai.connector.fetch_octi_attack_pattern_by_mitre_id", + Mock(return_value=None), + ) + connector = Connector(config=mock_config, helper=mock_connector_helper) + if fastapi_test_client is not None: + connect_import_document_ai_client_to_test_server( + connector=connector, fastapi_test_client=fastapi_test_client + ) + return connector + + +def extract_sent_bundle(mock_connector_helper: Mock) -> dict: + return json.loads( + mock_connector_helper.send_stix2_bundle.call_args.kwargs["bundle"] + ) + + +def extract_observable_ids_from_bundle( + sent_bundle: dict, excluded_ids: set[str] | None = None +) -> set[str]: + excluded_ids = excluded_ids or set() + observable_ids = set() + for obj in sent_bundle["objects"]: + if obj.get("id") in excluded_ids: + continue + parsed_object = stix2.parse(obj, allow_custom=True) + if isinstance(parsed_object, stix2.v21._Observable): + observable_ids.add(obj["id"]) + return observable_ids + + +def test_process_message_with_dev_server_sends_filtered_bundle_with_report_attachment( + monkeypatch: pytest.MonkeyPatch, + fastapi_test_client: TestClient, + mock_connector_helper: Mock, + mock_config: Mock, + imported_file: OpenCTIFileObject, +) -> None: + # Given a connector wired to the dev FastAPI server and a downloaded import/global file + connector = build_connector_for_smoke_test( + monkeypatch=monkeypatch, + mock_connector_helper=mock_connector_helper, + mock_config=mock_config, + imported_file=imported_file, + triggering_entity=None, + fastapi_test_client=fastapi_test_client, + ) + + # When processing a message through the full connector flow + returned_stats = connector.process_message(data={}) + + # Then the connector sends a bundle enriched with a report attachment and without ML relationships + assert returned_stats == str( + { + "observables": 1, + "entities": 6, + "relationships": 0, + "reports": 1, + "total_sent": 8, + } + ) + mock_connector_helper.send_stix2_bundle.assert_called_once() + sent_bundle = extract_sent_bundle(mock_connector_helper) + sent_objects = sent_bundle["objects"] + sent_report = next(obj for obj in sent_objects if obj["type"] == "report") + sent_relationships = [obj for obj in sent_objects if obj["type"] == "relationship"] + + assert sent_relationships == [] + assert sent_report["name"] == "import-document-ai-smoke-test.pdf" + assert sent_report["x_opencti_files"][0]["name"] == "smoke-test.pdf" + assert sent_report["x_opencti_files"][0]["no_trigger_import"] is True + assert mock_connector_helper.send_stix2_bundle.call_args.kwargs["file_name"] == ( + "import-document-ai-smoke-test.json" + ) + assert mock_connector_helper.send_stix2_bundle.call_args.kwargs["entity_id"] is None + assert ( + mock_connector_helper.send_stix2_bundle.call_args.kwargs["bypass_validation"] + is False + ) + + +def test_process_message_with_invalid_certificate_raises_http_error( + monkeypatch: pytest.MonkeyPatch, + fastapi_test_client: TestClient, + mock_connector_helper: Mock, + mock_config: Mock, + imported_file: OpenCTIFileObject, +) -> None: + # Given a connector wired to the dev FastAPI server with an invalid certificate header + mock_config.licence_key_base64 = "not-a-valid-certificate" + connector = build_connector_for_smoke_test( + monkeypatch=monkeypatch, + mock_connector_helper=mock_connector_helper, + mock_config=mock_config, + imported_file=imported_file, + triggering_entity=None, + fastapi_test_client=fastapi_test_client, + ) + + # When processing a message through the full connector flow + # Then the dev server rejects the certificate and the connector propagates the HTTP error + with pytest.raises(requests.HTTPError): + connector.process_message(data={}) + + mock_connector_helper.send_stix2_bundle.assert_not_called() + mock_connector_helper.connector_logger.error.assert_called() + + +def test_process_message_with_container_triggering_entity_updates_object_refs( + monkeypatch: pytest.MonkeyPatch, + fastapi_test_client: TestClient, + mock_connector_helper: Mock, + mock_config: Mock, + imported_file: OpenCTIFileObject, +) -> None: + # Given a contextual import triggered from a report that already references one object + existing_identity = stix2.Identity( + id=pycti.Identity.generate_id( + "Existing Container Object", + "organization", + ), + name="Existing Container Object", + identity_class="organization", + ) + report_published = "2026-01-01T00:00:00Z" + triggering_entity_stix = stix2.Report( + id=pycti.Report.generate_id("Triggering Report", report_published), + name="Triggering Report", + description="Contextual smoke test report", + published=report_published, + report_types=["threat-report"], + object_refs=[existing_identity["id"]], + allow_custom=True, + ) + triggering_entity = build_triggering_entity_mock( + triggering_entity_stix=triggering_entity_stix + ) + connector = build_connector_for_smoke_test( + monkeypatch=monkeypatch, + mock_connector_helper=mock_connector_helper, + mock_config=mock_config, + imported_file=imported_file, + triggering_entity=triggering_entity, + fastapi_test_client=fastapi_test_client, + ) + + # When processing a message through the full connector flow + connector.process_message(data={}) + + # Then the triggering report keeps its existing refs and is extended with imported object ids + sent_bundle = extract_sent_bundle(mock_connector_helper) + sent_objects = sent_bundle["objects"] + sent_triggering_report = next( + obj for obj in sent_objects if obj["id"] == triggering_entity.id + ) + imported_object_ids = { + obj["id"] for obj in sent_objects if obj.get("id") != triggering_entity.id + } + + assert existing_identity["id"] in sent_triggering_report["object_refs"] + assert imported_object_ids.issubset(set(sent_triggering_report["object_refs"])) + assert mock_connector_helper.send_stix2_bundle.call_args.kwargs["entity_id"] == ( + triggering_entity.id + ) + + +def test_process_message_with_observed_data_triggering_entity_updates_only_observable_refs( + monkeypatch: pytest.MonkeyPatch, + fastapi_test_client: TestClient, + mock_connector_helper: Mock, + mock_config: Mock, + imported_file: OpenCTIFileObject, +) -> None: + # Given a contextual import triggered from observed-data that already references one observable + existing_observable = stix2.MACAddress(value="00:11:22:33:44:55") + observed_object_ids = [existing_observable["id"]] + triggering_entity_stix = stix2.ObservedData( + id=pycti.ObservedData.generate_id(observed_object_ids), + first_observed="2026-01-01T00:00:00Z", + last_observed="2026-01-01T00:00:00Z", + number_observed=1, + object_refs=observed_object_ids, + allow_custom=True, + ) + triggering_entity = build_triggering_entity_mock( + triggering_entity_stix=triggering_entity_stix + ) + connector = build_connector_for_smoke_test( + monkeypatch=monkeypatch, + mock_connector_helper=mock_connector_helper, + mock_config=mock_config, + imported_file=imported_file, + triggering_entity=triggering_entity, + fastapi_test_client=fastapi_test_client, + ) + + # When processing a message through the full connector flow + connector.process_message(data={}) + + # Then only observables are appended to the observed-data object_refs + sent_bundle = extract_sent_bundle(mock_connector_helper) + sent_objects = sent_bundle["objects"] + sent_triggering_observed_data = next( + obj for obj in sent_objects if obj["id"] == triggering_entity.id + ) + observable_ids = extract_observable_ids_from_bundle( + sent_bundle=sent_bundle, + excluded_ids={triggering_entity.id}, + ) + + assert observable_ids + assert set(sent_triggering_observed_data["object_refs"]) == ( + observable_ids | {existing_observable["id"]} + ) + assert mock_connector_helper.send_stix2_bundle.call_args.kwargs["entity_id"] == ( + triggering_entity.id + ) + + +def test_process_message_with_non_container_triggering_entity_creates_related_to_relationships( + monkeypatch: pytest.MonkeyPatch, + fastapi_test_client: TestClient, + mock_connector_helper: Mock, + mock_config: Mock, + imported_file: OpenCTIFileObject, +) -> None: + # Given a contextual import triggered from a non-container entity + triggering_entity_stix = stix2.Identity( + id=pycti.Identity.generate_id("Triggering Identity", "organization"), + name="Triggering Identity", + identity_class="organization", + ) + triggering_entity = build_triggering_entity_mock( + triggering_entity_stix=triggering_entity_stix + ) + connector = build_connector_for_smoke_test( + monkeypatch=monkeypatch, + mock_connector_helper=mock_connector_helper, + mock_config=mock_config, + imported_file=imported_file, + triggering_entity=triggering_entity, + fastapi_test_client=fastapi_test_client, + ) + + # When processing a message through the full connector flow + connector.process_message(data={}) + + # Then the connector creates one deterministic related-to relationship per imported object + sent_bundle = extract_sent_bundle(mock_connector_helper) + sent_objects = sent_bundle["objects"] + related_to_relationships = [ + obj + for obj in sent_objects + if obj["type"] == "relationship" and obj["relationship_type"] == "related-to" + ] + imported_non_relationship_ids = { + obj["id"] for obj in sent_objects if obj["type"] != "relationship" + } + + assert len(related_to_relationships) == len(imported_non_relationship_ids) + assert {obj["source_ref"] for obj in related_to_relationships} == ( + imported_non_relationship_ids + ) + assert {obj["target_ref"] for obj in related_to_relationships} == { + triggering_entity.id + } + assert mock_connector_helper.send_stix2_bundle.call_args.kwargs["entity_id"] == ( + triggering_entity.id + ) + + +def test_process_message_with_create_indicator_enabled_marks_observables_for_indicator_creation( + monkeypatch: pytest.MonkeyPatch, + fastapi_test_client: TestClient, + mock_connector_helper: Mock, + mock_config: Mock, + imported_file: OpenCTIFileObject, +) -> None: + # Given a connector configured to delegate indicator creation to the platform + mock_config.create_indicator = True + connector = build_connector_for_smoke_test( + monkeypatch=monkeypatch, + mock_connector_helper=mock_connector_helper, + mock_config=mock_config, + imported_file=imported_file, + triggering_entity=None, + fastapi_test_client=fastapi_test_client, + ) + + # When processing a message through the full connector flow + connector.process_message(data={}) + + # Then every observable sent in the bundle is marked for indicator creation + sent_bundle = extract_sent_bundle(mock_connector_helper) + observable_ids = extract_observable_ids_from_bundle(sent_bundle=sent_bundle) + observable_objects = [ + obj for obj in sent_bundle["objects"] if obj.get("id") in observable_ids + ] + + assert observable_objects + assert all( + obj.get("x_opencti_create_indicator") is True for obj in observable_objects + ) + + +def test_process_message_returns_early_when_connector_is_only_contextual_and_entity_is_missing( + monkeypatch: pytest.MonkeyPatch, + mock_connector_helper: Mock, + mock_config: Mock, + imported_file: OpenCTIFileObject, +) -> None: + # Given a connector configured as only contextual with no triggering entity available + mock_connector_helper.get_only_contextual.return_value = True + connector = build_connector_for_smoke_test( + monkeypatch=monkeypatch, + mock_connector_helper=mock_connector_helper, + mock_config=mock_config, + imported_file=imported_file, + triggering_entity=None, + ) + connector.import_doc_ia_client.get_bundle = Mock() + + # When processing a message through the full connector flow + returned_message = connector.process_message(data={}) + + # Then the connector exits before calling the AI service or sending any STIX bundle + assert ( + returned_message + == "Connector is only contextual and entity is not defined. Nothing was imported" + ) + connector.import_doc_ia_client.get_bundle.assert_not_called() + mock_connector_helper.send_stix2_bundle.assert_not_called() diff --git a/internal-import-file/import-document/src/requirements.txt b/internal-import-file/import-document/src/requirements.txt index 0dd20a83232..176fc539ef9 100644 --- a/internal-import-file/import-document/src/requirements.txt +++ b/internal-import-file/import-document/src/requirements.txt @@ -1,10 +1,10 @@ -pycti==7.260309.0 -urllib3==2.6.3 +pycti==7.260515.0 +urllib3==2.7.0 beautifulsoup4==4.14.2 pdfminer.six==20251107 stix==1.2.0.11 pydantic>=2.8.2,<3.0.0 ioc-finder==7.3.0 -dateparser==1.3.0 +dateparser==1.4.0 pyhumps==3.8.0 chardet==5.2.0 diff --git a/internal-import-file/import-file-misp/.build.env b/internal-import-file/import-file-misp/.build.env new file mode 100644 index 00000000000..d49ff33474b --- /dev/null +++ b/internal-import-file/import-file-misp/.build.env @@ -0,0 +1,2 @@ +CONNECTOR_CMD="import-file-misp.py" + diff --git a/internal-import-file/import-file-misp/src/requirements.txt b/internal-import-file/import-file-misp/src/requirements.txt index e9684a32073..f5b8181a0c7 100644 --- a/internal-import-file/import-file-misp/src/requirements.txt +++ b/internal-import-file/import-file-misp/src/requirements.txt @@ -1 +1 @@ -pycti==7.260309.0 \ No newline at end of file +pycti==7.260515.0 \ No newline at end of file diff --git a/internal-import-file/import-file-stix/.build.env b/internal-import-file/import-file-stix/.build.env new file mode 100644 index 00000000000..8897b3cf6a9 --- /dev/null +++ b/internal-import-file/import-file-stix/.build.env @@ -0,0 +1,2 @@ +CONNECTOR_CMD="import-file-stix.py" + diff --git a/internal-import-file/import-file-stix/src/requirements.txt b/internal-import-file/import-file-stix/src/requirements.txt index 1f9232cd0e1..cc26765f322 100644 --- a/internal-import-file/import-file-stix/src/requirements.txt +++ b/internal-import-file/import-file-stix/src/requirements.txt @@ -1,4 +1,4 @@ -pycti==7.260309.0 +pycti==7.260515.0 maec==4.1.0.17 stix2-elevator==4.1.7 typing-extensions==4.15.0 \ No newline at end of file diff --git a/internal-import-file/import-file-yara/.build.env b/internal-import-file/import-file-yara/.build.env new file mode 100644 index 00000000000..ad2d0b7a36e --- /dev/null +++ b/internal-import-file/import-file-yara/.build.env @@ -0,0 +1 @@ +CONNECTOR_CMD="import-file-yara.py" diff --git a/internal-import-file/import-file-yara/src/requirements.txt b/internal-import-file/import-file-yara/src/requirements.txt index 75fa82e993c..a3cf89c0e0e 100644 --- a/internal-import-file/import-file-yara/src/requirements.txt +++ b/internal-import-file/import-file-yara/src/requirements.txt @@ -1,3 +1,3 @@ -pycti==7.260309.0 +pycti==7.260515.0 typing-extensions==4.15.0 plyara==2.2.8 \ No newline at end of file diff --git a/internal-import-file/import-ttps-file-navigator/src/requirements.txt b/internal-import-file/import-ttps-file-navigator/src/requirements.txt index 0b29493f83e..f89a10dd1c8 100644 --- a/internal-import-file/import-ttps-file-navigator/src/requirements.txt +++ b/internal-import-file/import-ttps-file-navigator/src/requirements.txt @@ -1,2 +1,2 @@ -pycti==7.260309.0 +pycti==7.260515.0 typing-extensions==4.15.0 \ No newline at end of file diff --git a/manifest.json b/manifest.json index 9960e715852..1dee0eea366 100644 --- a/manifest.json +++ b/manifest.json @@ -407,12 +407,12 @@ { "title": "ANY.RUN Feed", "slug": "anyrun-feed", - "description": "Import TI feed from ANY.RUN Interactive Online Malware Sandbox", - "short_description": "Import TI feed from ANY.RUN Interactive Online Malware Sandbox", + "description": "ANY.RUN\u2019s TI Feeds is a continuously updated source of fresh network-based Indicators of Compromise (IOCs): IPs, domains, and URLs.", + "short_description": "The connector for Threat Intelligence Feeds provides OpenCTI users with simple, automated access to uniquely sourced and accurate indicators of compromise.", "logo": "data:image/png;base64,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", "use_cases": [ "Threat Intelligence", - "Sandbox" + "Commercial Threat Intel" ], "verified": true, "last_verified_date": null, @@ -424,7 +424,84 @@ "manager_supported": false, "container_version": "rolling", "container_image": "opencti/connector-anyrun-feed", - "container_type": "EXTERNAL_IMPORT" + "container_type": "EXTERNAL_IMPORT", + "config_schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://www.filigran.io/connectors/anyrun-feed_config.schema.json", + "type": "object", + "properties": { + "OPENCTI_URL": { + "description": "The base URL of the OpenCTI instance.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "OPENCTI_TOKEN": { + "description": "The API token to connect to OpenCTI.", + "type": "string" + }, + "CONNECTOR_NAME": { + "default": "ANY.RUN TI Feed", + "description": "The name of the connector.", + "type": "string" + }, + "CONNECTOR_SCOPE": { + "default": [ + "stix2" + ], + "description": "The scope of the connector.", + "items": { + "type": "string" + }, + "type": "array" + }, + "CONNECTOR_LOG_LEVEL": { + "default": "info", + "description": "The minimum level of logs to display.", + "enum": [ + "debug", + "info", + "warn", + "warning", + "error" + ], + "type": "string" + }, + "CONNECTOR_TYPE": { + "const": "EXTERNAL_IMPORT", + "default": "EXTERNAL_IMPORT", + "type": "string" + }, + "CONNECTOR_UPDATE_EXISTING_DATA": { + "default": false, + "description": "Whether to update data already ingested into the platform.", + "type": "boolean" + }, + "ANYRUN_API_KEY": { + "description": "ANY.RUN TI Feeds API key. See 'Generate your API key' section in the README file.", + "format": "password", + "type": "string", + "writeOnly": true + }, + "ANYRUN_FEED_FETCH_INTERVAL": { + "default": 120, + "type": "integer", + "description": "Specify feed fetch interval in minutes." + }, + "ANYRUN_FEED_FETCH_DEPTH": { + "default": 90, + "type": "integer", + "description": "Specify feed fetch depth in days." + } + }, + "required": [ + "OPENCTI_URL", + "OPENCTI_TOKEN", + "ANYRUN_API_KEY" + ], + "additionalProperties": true + } }, { "title": "Bambenek Consulting", @@ -519,17 +596,127 @@ "short_description": "Import Checkfirst articles into OpenCTI.", "logo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAV4AAAFeCAYAAADNK3caAAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw0AcxV9TRZGKgkVEOmSoThZEizhKFYtgobQVWnUwufQLmjQkKS6OgmvBwY/FqoOLs64OroIg+AHi7OCk6CIl/i8ptIjx4Lgf7+497t4BQqPCVLNrElA1y0jFY2I2tyr2vELAMAYRQlRipp5IL2bgOb7u4ePrXYRneZ/7c/QreZMBPpF4jumGRbxBPLNp6Zz3iYOsJCnE58QTBl2Q+JHrsstvnIsOCzwzaGRS88RBYrHYwXIHs5KhEkeJw4qqUb6QdVnhvMVZrdRY6578hYG8tpLmOs0Q4lhCAkmIkFFDGRVYiNCqkWIiRfsxD/+o40+SSyZXGYwcC6hCheT4wf/gd7dmYXrKTQrEgO4X2/4YA3p2gWbdtr+Pbbt5AvifgSut7a82gNlP0uttLXwEDGwDF9dtTd4DLneAkSddMiRH8tMUCgXg/Yy+KQcM3QJ9a25vrX2cPgAZ6mr5Bjg4BMaLlL3u8e7ezt7+PdPq7we/8HLGuURakQAAAAZiS0dEAAAAggDR6iaW0wAAAAlwSFlzAAAN1wAADdcBQiibeAAAAAd0SU1FB+gCGhMYEhxlI+wAABWdSURBVHja7d17sF1VfcDx3z4hMTyUNrnXTgWUArUtyWVCwQqOYEXri7E60+motOOMJQhehxkbEy0+UHxglYcCJk0wseNMHzrTmWqnUh4JKGVwkFckj1bbsaWWVjjJlUBBAuau/mFuGxRyzz6Pvc7e+/P9Dxg8l3X2/vi7K2ufEyFJkiRJGqM+vy296be/kZ665r70Nquh1rdxRzrSKvTWpp1p0cad6VArUR7dF29Js0duTun4LSnBt4/7dGc61LWXd806w/ofWnVH2n7tQzGzfnta4W2aH90bd8eur++OXRt3pCOsSO/oXv1Q/O2DKYqIiF0p4nPd+Cv4lgPkpt3xoGuv3JrduDseum6Ia1YMC91Nj8ayiIhfWxCzfzQZp1ywvNjqLXt2dK/fG8+NiDjrOfH42Uvil1YuK/7H6vSO7oFNFBHvmYxzLjyp+GsrNT+6rr3y6N6wN46IiHjVc+LxNwxhzQaG90B054Jvb+jO5QboH1349oeua688unMNA9+B4H0mdOFbDl03wODowrc/dF175dEdFr59w3swdOFbDl03wODowrc/dF175dEdBr59wdsLuvAth64bYHB04dsfIK69/tesX3xLX9Rl0G07vmXRdQMMji58+wPEtdf/mvWDb6kLux9024pvv+i2/QYYBrptx7dfQNp87Q26ZmXx7fniHgTdtuE7KLptvQGGiW5b8R0UkDZee8NaszL49nSBDwPdtuA7LHTbdgOMAt224TssQNp07Q17zXrFd96LfJjoNh3fYaPblhtglOi2Bd9hA9KGa29Ua9YLvp2q0Y2I+O6+6HyxG3c36fHi/W/i0NGNiLh5bxz29Zl4sImPeFaBbkSzHy8eFSBNvvZGuWZb9sZh182zZp2q0W0ivr2elXQD5EG3yfiOEpADr73rGnTtVbFm8+Fb5EC3SdsOVaDbxF/9qka3idsOVQBS9ldoa9bbmhU50a07vlWj2xR8c6LbFHyrBqQJ+I7Tmj1tq+GSu9PXqkZ3btvhS924a/32dGKd3sh79sQ/V43u3K9+N87Ef9f1M1Wf3BfLHsmIbkTEYyniqdk4tq7o3rA7ulUDMvcr9F2PxD9Bt9ya3fNI7Djw7z0N3qMWxzvOWBh7cyzMzn2x4Ivd2FanPd/lR8TbjutEyvHaN+yNI+r6maqrVhSXvm8iPnBYptdfHBGrJ+KSVSuKT9UVkBv3xuE5Xv+YTqSTjoh3QLfcmi3/mTX7ualj44605Ku74r/+8al4To4fsm7bDuu2pZd9oRu3fX82zwRX522HK7emiy7bFZc+XjG6aybiktUrio+a2soDMj0Zr5meKjZbs1Jr9urpqeLmg8ILX/g2FV/oQncc0P25rYa5Vi4rZt48ES/Ite1Qt6Nm01PF7edNxstzbTvU+bjPqhXFp9ZUsO0AXeiOC7rPOvGafOs5+db5T5xHOflCF7rjhO688MIXvnXHF7rQHTd0e4IXvvCtK77Qhe44otszvPCFb93whS50xxXdUvDCF751wRe60B1ndEvDC1/4jju+0IXuuKPbF7zwhe+44gtd6NYB3b7hhS98xw1f6EK3LugOBC984Tsu+EIXunVCd2B44Qvf3PhCF7p1Q3co8MIXvrnwhW5+QKxZRnjhC9+q8d2wOz553tL4GHShW8c1G+pND1/4VnYj7khH+BYE6NZ1zYoR3BDwLYnvtd247d/g2/iga83m6gz7B/WRkuWanipuf+dknPkrmT5SckvDvkEWINCtw5qNbMoy+ZaefF9+bTduNflCF7rNX7OR3uTwhS90oWvNKoYXvvCFLnStWQZ44Qtf6ELXmmWAF741xXdpTKw8sfgxRgFizWoKL3zhC13oWrMM8MIXvtCFrjWLPDczfOELXei2ec2KbIsOX/hCF7otXbMi6+LDF77QhW4L16zI/ibAF77QhW7L1qwYizcDvvCFLnRbtGbF2Lwp8IUvQKDbkjUrxurNgS98AXLQXtiJ9C7o1v7/qIqxe5PgC1+AQLfhvx0UY/lmwRe+AIFuQ9EdW3jhC1+AQLep6I41vPCFL0Cg20R0I0bw1T/DzNcIlWt6qrgt99cIbZ6JH27amRZBF7rQrenEa/Kt5+T7+sXxyO8siclzTyyerDO6N+yO7o1743DoQrdVE6/Jd7DJ99hMk+8/PBHPu2kmunWdfKELXROvyXegyXdDN279d5MvdKELXvjCF7rQbSu6tYQXvvCFLnTrjG5t4YUvfKEL3bqiW2t44Qtf6EK3rnbVGl74whe60K1jnah5jpqVa3qquO38zEfNNo/BUTPoQtfEa/Jt3eT7hsXxyKszTb7QhS544QvfCvHNje7xnUgrJ+P06aniDui2E93GwQtf+EIXuuCFL3zHBF/oQhe88IVvhfhCF7rghS98K8QXutAFL3zhWyG+0IUueOEL3wrxhS50x7lOtCAPWZRr/0MWr8z1kMV1Az5kAV3omnhNvnWefF+xoRu31GnyhS50wQtf+FaI78ad6dDrd0f3JuhCF7zwhe/o8YUudMELX/hWiC90oQte+MK3QnyhC9061okW57RDuaanim+ePxmvfFHG0w5bZuKhudMOY4DuLHSha+I1+VY2+a7vxi33Z5p8z14ce876xXjR9TPxQGZ0XwZd6IIXvlXi++q13bjxPzPhO1lEdFOe/3boQhe88G3t5Atd6IIXvvCFLnShC174whe60AUvfOELXegKvPCFL3ShC174whe60AWv4Ns+fKEL3VHWsQTz5wm3cu1/wu11R2d6wg260DXxmnxNvjWafKELXfDCF77QhS54Bd9m4gtd6IIXvvCFLnTBK/g2E1/oQhe88IUvdKHbghwnGzBHzco1d9TsqMxHzY7vxOw7nx+nQRe6Jl6Tb2sm37Xb0mvWduP6BzJMvid0Yva858dpFywv7oQudMELX9sOthegC17Btzn4Qhe64IUvfCvEF7rQBS984VshvtCFLnjhC98K8YUudMELX/hWiC90oTuuOcc74pzzLdewzvme4JwudE28MvlWN/madKELXsG3QnyhC13wCr4V4gtd6IJX8K0Q3xM6MXsudKELXsG3Gnx99gJ0wSv4VogvdKELXsG3QnyhC13wCr4VtXZbes3mH8VXX7skXgFd6IJX8BV0BV74whe60AWv4Atd6IJX8IUvdAVewRe60AWv4CvoCrzwhS90oQtewRe60BV44Qtf6Aq8gi90oSvwwhe+0BV4BV/oQhe8gi98oSvwCr7QhS54Bd9W4AtdgVfwha7AK/g2E1/oCryCL3QFXsG3mfhCV+AVfKEr8Aq+zcQXugKv4AtdgVfwbSa+0BV4BV/oCryCbzPxha7AK/hCV+AVfJuJL3QFXsEXugKv4NtMfKEr8Aq+0BV4Bd9m4gtdgVfwrRBf6Aq8gm+F+EJX4BV8K8QXugKv4FshvtAVeAXfCvGFrsAr+FaIL3QFXsG3QnyhK/AKvhXiC12BV/CtEF/oCryCb4X4QlfgFXwrxBe6Aq/gWyG+0BV4Bd8K8T2kE9+FrsAr+FbUixfE7DGHxBNb9sZh0BV4Bd+GB12BV/CFrsAr+EJXAq/gC12BV/CFrsArwRe6Aq/gC12BV2oNvtAVeAVf6Aq8UjPxha7AK/hCV+CVmokvdAVewRe6Aq/UTHyhK/AKvtBVC+pYAlXdymXFzO9OxHFLi7wX/nkTcQF0BV61Y+LdmQ7dPBPf3Z3y/QyzEfEXu+PP1m9Pp3hHVHW2GlQ5ujm/rudne/GCmD13Mn7rguXF3d4dgVfQha/AKzUPXfgKvIIufAVeqR3owlfgFXThK/BK7UAXvgKvoAtfgVdqB7rwFXgFXfgKvFI70IWvwCvowlfgFXTbgS58BV5BF76qcT4WUrVE95hOpNMWxpM5Xvt7+6KzqRvf9pGSAq9ag+4L939zxO9PxC+fuSiegK9sNQi6I0b3XQd8Xc/GHWnJ13bHA7c+GYttOwi8gu6I0f2/nwu+Aq+gWx268BV4Bd0M6MJX4BV0M6ALX4FX0M2ALnwFXkE3A7rwFXgF3QzowlfgFXQzoAtfgVfQzYAufAVeQTcDuvAVeAXdDOjCV+AVdDOgC1+BV9DNgC58BV5BNwO68BV4Bd2c6wBfgVfQha/AK+g2Gl34CryCLnzhC15Btx3owlfgFXThC1/wCrrtQBe+Aq+gC1/4glfQbQe68BV4BV34whe8gm470IWvwCvowhe+4BV024EufAVeQRe+8AWvoNsOdOEr8EIXuvCFL3gFXfjCV+CFLnThK/AKuvCFr8ALXejCV+AVdOELX/AKutCFr8ALXejCF77gFXQFX4EXutCFL3zBK+jCF74CL3ShC1+BF7rQhS98G1/HEkC3juh+/J705Q3b06/X5edduayYedPSOOrMRfFEjtf/3r7obOrGt9dvT6e448ALXeiW7gN3plsvn4m3bOrGjvXb00vgC19bDYLuiNFduyfOmPvrEzoxe+5knDE9Vdxu28G2g4lX0B0xuhER/zobnXXduG3ttvR6k6/JF7yC7ojRnesHs1Fc9VB8/Zpt6S3whS94Bd0RozvXgymKqx6KL199X3o7fOELXkF3xOjO1U0Rl3fjS5/7TroQvvAFr6A7YnTn2pMirtgVV1/5nfRe+MJ3XHOqAbpj2QfvTN/8/J44s99///CIWD0Ra1atKC6vzXXitIOJV9CtK7oREY9FxGd2xWVXbE0fNvmafE280IXuiNE9sEMjYs1EXPzeFcXHTb4mX/BCF7ojRhe+8AUvdKGbAV34whe80IVuBnThC1/wQhe6GdA9EN/VE/GR1SuKj8EXvuCFLnThC1/wCrrNQ3cu53zhmzPneKHbOnQj/v+c7+Vb08V1WTfnfE28gm5t0bXtYPIFL3ShC1/4glfQbQ+68IUveKELXfjCF7yCbjvQneuwiFjjtAN8wQtd6MIXvs3KcTLoQvdnejwiLtsVl125Nb2/Lj+zo2bghS50a4vugfh+Zlf8qXO+8LXVAF3oVpw/cLPtAF7oQjdDiyNiDXzhC17oQhe+8AUvdKF7ZtOvDfjCF7zQhS584Qte6LYQ3W98fk+8IsdrdyJiNtN/9/5zvn+yakXxafjCt9/rF7rQLd3Fd6Xrc6G7ICLetzTWnfvc2JHj9R+PiE87alYqR81MvNAdArpXPRyvzYXumqWx7qKTi3dHRKy6I23f9Ggss+1g8gUvdKFbAbpzwRe+4IUudEeH7vqLTi7e9Uz/HL7wBS90oVshuvCFL3ihC90M6MIXvuCFLnQzoAtf+IIXutDNgC584Qte6EI3A7rwhS94oQvdDOjCF77ghS50M6ALX/iCF7rQzYAufOELXuhCNwO68IUveKEL3Qzowhe+4IUudDOgC1/4ghe60M2ALnzhC17oQjdj8IUveKELXfjCtyX41hpe6EIXvvAFL3ShWzN0xwjfS1avKD4K33bgW0t4oQtd+MK3zvjWDl7oQhe+8K07vrWCF7rQhS98m4BvbeCFLnThC9+m4NuBLnSh+/Nd+dJi+crnxvYcr/1ERFy2Kz5y+dZUG3hXLitm3rQ0jjpzUTyR4/W/ty86m7rx7fXb0ykmXuhCt+a99460beOjsdzka/JtDbzQhS584dtEfMcWXuhCF77wbSq+YwkvdKELX/g2Gd+xgxe60IUvfJuO71jBC13owhe+bcB3bOCFLnThC9+24DsW8EIXuvCFb5vwzQ4vdKELX/i2Dd+s8EIXuvCFbxvxzfbIMHT7Q/dq6I5dV7y0mPJ4ce95vDjTxAvd/tFN0DX5mnxrP/lWDi90oQtf+LYd30rhhS504Qtf+FYIL3ShC1/4wrdCeKELXfjCF74Vwgtd6MIXvvCtEF7oQlfwhW+F8EIXuoIvfCuEF7rQFXzh++wN/ck16EK3itZuS2fXDV5PuJWryU+4DRVe6EK3ij56d/q7Dz0Yf/+hO9PNUbPgC9+hbjVAF7pVofu5H8Ub59bswiPjlk+8pDjLtoNthzptOwwFXuhCNwe6AV/41hTfgbcaoAvdnOhGRFyzJ15Z422HbbYd2rftMNDEC13o5ka3IZPvfRsfjSmTb3sm377hhS50xwld+MK3Tvj2BS90oTuO6MIXvnXBt/QeL3TL95G70nXQrQbdiFrv+Z5kz7f36rznWwpe6PaH7lUPx+uhWw26T8P3rrQFvvAdR3x73mqALnTrgu7Tth1+IW7+xKnFq2w72HYYp22HnuCFLnTriC584Tuu+M4LL3ShW2d04Tswvh9fvaK4GL7DxbeALnSbji584Ttu+BbQhW4b0IUvfMcJ3wK60G0LuvCF77jgW0AXum1CF77wHQd8O9CFbtVdem/amBPdiIhrHo6zPnlP+vO6wTsG53w/fPnW9LG6rNe4nvN9Grw/eDz+Jhe6x/0U3ZfXCd1129LL1uZFd10dv65nYlFc8puHxE9y/gwnLYh9E4vi0qhh+/HN9mHqX/lRfHDTzrSgbviesTD25sL33kfja88K7yWnFmf/weHxHzkm3fN+OuneXqcbYHqquH3N0vjswnyT7rvrCMc7lxU/eOtkHHdKJnxPWhD7/nAyfuP85cW/RE3L9ZGSE0XE2yfinHNPLPbVab1WLitm3jwRL8gx+Z6+MJ489Xlx8oF/7xn/cG36W+n+v3wsXmh7obc+fW+68rLd8cdP2V4o1bU70jFf7sb37/5JHALd/qpyz3eiiHjP8+OtF04VX6nrelW953v6wnjy9ybi6POWFd154a0K3yagWyW+Tfw24CrxbRq6VeLbBHSrxvfZ0D0ovKPGt0noVoFvk7+CvQp8m4puFfg2Cd2q8D0YuvPCOyp8m4juKPFtMrpV4Nt0dEeJbxPRHTW+86HbE7zDxrfJ6I4C3/3oXnvRycX50fBGgW9b0B0Fvk1Gd1T49oJuz/AOC982oDtMfNuE7ijwbRu6w8S3DegOG99e0S0F76D4tgndYeDbRnSHiW9b0R0Gvm1Cd1j4lkG3NLz94ttGdAfBt83oDgPftqM7CL5tRHdQfMui2xe8ZfFtM7r94AvdwfCFbv/4thndfvHtB92+4e0VX+iWwxe6g+EL3f7xhW55fPtFdyB458MXuuXwhe5g+EK3f3yhWx7fQdCN6OPr3Q9s3enFi57psx2g+8y9/+Ri1ZqlceVC6JZqvs92gO78Pdunmk0UEe+ZjHOg+/QO9qlmg6I7tKa/le4/cnNKR25OaermNLtuWzrLW3fQyfeKif3rtWRzSp+6N22wKr1Nvmd9Iz01d60duTmlM25JP9mwPf2q1el98p1bu+O3pHTNfeltVuXgk+8bb00/nluz130z7f3CjjQ5Nj/g9LfS/dAth+/RW6A7CL7Q7R/fE6BbGt+xQ3euDdvTcd4m61UBvseuvD390Pq59qrEd+OOtMRKSJIkSb30v52l2cVSSo16AAAAAElFTkSuQmCC", "use_cases": [], - "verified": false, - "last_verified_date": null, + "verified": true, + "last_verified_date": "2026-03-20", "playbook_supported": false, "max_confidence_level": 50, "support_version": ">= 6.3.0", "subscription_link": "", "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/external-import/checkfirst-import-connector", - "manager_supported": false, + "manager_supported": true, "container_version": "rolling", "container_image": "opencti/connector-checkfirst-import-connector", - "container_type": "EXTERNAL_IMPORT" + "container_type": "EXTERNAL_IMPORT", + "config_schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://www.filigran.io/connectors/checkfirst-import-connector_config.schema.json", + "type": "object", + "properties": { + "OPENCTI_URL": { + "description": "The base URL of the OpenCTI instance.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "OPENCTI_TOKEN": { + "description": "The API token to connect to OpenCTI.", + "type": "string" + }, + "CONNECTOR_NAME": { + "default": "Checkfirst Import Connector", + "description": "The name of the connector.", + "type": "string" + }, + "CONNECTOR_SCOPE": { + "default": [ + "checkfirst" + ], + "description": "The scope of the connector.", + "items": { + "type": "string" + }, + "type": "array" + }, + "CONNECTOR_LOG_LEVEL": { + "default": "error", + "description": "The minimum level of logs to display.", + "enum": [ + "debug", + "info", + "warn", + "warning", + "error" + ], + "type": "string" + }, + "CONNECTOR_TYPE": { + "const": "EXTERNAL_IMPORT", + "default": "EXTERNAL_IMPORT", + "type": "string" + }, + "CONNECTOR_DURATION_PERIOD": { + "default": "P7D", + "description": "The period of time to await between two runs of the connector.", + "format": "duration", + "type": "string" + }, + "CHECKFIRST_API_URL": { + "description": "Base URL for the API endpoint (e.g., https://api.example.com).", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "CHECKFIRST_API_ENDPOINT": { + "default": "/v1/articles", + "description": "API endpoint path (e.g., /v1/articles).", + "type": "string" + }, + "CHECKFIRST_API_KEY": { + "description": "API key for authentication (sent in Api-Key header).", + "format": "password", + "type": "string", + "writeOnly": true + }, + "CHECKFIRST_SINCE": { + "default": "P1Y", + "description": "Only ingest articles published on or after this date. Accepts ISO 8601 absolute dates (e.g., 2024-01-01T00:00:00Z) or durations relative to now (e.g., P365D, P1Y, P6M, P4W). Defaults to 1 year ago.", + "format": "date-time", + "type": "string" + }, + "CHECKFIRST_FORCE_REPROCESS": { + "default": false, + "description": "If true, ignore any saved connector state and start from page 1. Useful for debugging or re-importing all data.", + "type": "boolean" + }, + "CHECKFIRST_TLP_LEVEL": { + "description": "TLP marking level applied to created STIX entities.", + "enum": [ + "clear", + "white", + "green", + "amber", + "amber+strict", + "red" + ], + "type": "string", + "default": "clear" + }, + "CHECKFIRST_MAX_ROW_BYTES": { + "default": null, + "description": "Skip any API row larger than this approximate number of bytes.", + "type": "integer" + } + }, + "required": [ + "OPENCTI_URL", + "OPENCTI_TOKEN", + "CHECKFIRST_API_URL", + "CHECKFIRST_API_KEY" + ], + "additionalProperties": true + } }, { "title": "CISA Known Exploited Vulnerabilities (KEV)", @@ -616,6 +803,11 @@ "description": "Allows you to create or not create an infrastructure in OpenCTI.", "type": "boolean" }, + "CISA_KEV_FLAG_ONLY": { + "default": false, + "description": "When enabled, the connector only sets the x_opencti_cisa_kev flag on Vulnerability objects without creating additional entities (vendors, software, infrastructures) or relationships.", + "type": "boolean" + }, "CISA_TLP": { "default": "TLP:CLEAR", "description": "Traffic Light Protocol (TLP) level to apply on objects imported into OpenCTI. Possible values: TLP:CLEAR, TLP:GREEN, TLP:AMBER, TLP:AMBER+STRICT, TLP:RED.", @@ -1123,6 +1315,14 @@ "description": "Whether to automatically guess and create relationships in reports.", "type": "boolean" }, + "CROWDSTRIKE_REPORT_EXTRACT_IOCS": { + "default": [], + "description": "Comma-separated list of IOC types to extract from report text content via regex. Extracted IOCs are created as Observables (not Indicators) and linked to the report. Supported types: ipv4, ipv6, domain, url, md5, sha1, sha256. Leave empty to disable.", + "items": { + "type": "string" + }, + "type": "array" + }, "CROWDSTRIKE_INDICATOR_START_TIMESTAMP": { "description": "Unix timestamp from which to start importing indicators. Default is 30 days ago. BEWARE: 0 means ALL indicators!", "type": "integer" @@ -1141,6 +1341,36 @@ }, "type": "array" }, + "CROWDSTRIKE_INDICATOR_IP_MAX_AGE": { + "default": null, + "description": "ISO8601 Duration format starting with 'P' for Period (e.g., 'P90D' for 90 days). Covers both IPv4 and IPv6.", + "format": "duration", + "type": "string" + }, + "CROWDSTRIKE_INDICATOR_DOMAIN_MAX_AGE": { + "default": null, + "description": "ISO8601 Duration format starting with 'P' for Period (e.g., 'P365D' for 365 days).", + "format": "duration", + "type": "string" + }, + "CROWDSTRIKE_INDICATOR_URL_MAX_AGE": { + "default": null, + "description": "ISO8601 Duration format starting with 'P' for Period (e.g., 'P60D' for 60 days).", + "format": "duration", + "type": "string" + }, + "CROWDSTRIKE_INDICATOR_HASH_MAX_AGE": { + "default": null, + "description": "ISO8601 Duration format starting with 'P' for Period (e.g., 'P730D' for 730 days). Covers MD5, SHA1, and SHA256 hashes.", + "format": "duration", + "type": "string" + }, + "CROWDSTRIKE_INDICATOR_DEFAULT_MAX_AGE": { + "default": null, + "description": "ISO8601 Duration format starting with 'P' for Period (e.g., 'P30D' for 30 days). Default threshold for any other indicator type.", + "format": "duration", + "type": "string" + }, "CROWDSTRIKE_DEFAULT_X_OPENCTI_SCORE": { "default": 50, "description": "Default confidence score for entities without explicit score.", @@ -1203,6 +1433,11 @@ }, "type": "array" }, + "CROWDSTRIKE_INDICATOR_MAX_RECORDS_PER_RUN": { + "default": 20000, + "description": "Maximum number of indicators ingested in a single run of the connector. CrowdStrike can return up to ~1.5M IoCs for the last 30 days, which would overwhelm the OpenCTI ingestion pipeline; pagination stops when this cap is reached. Set to 0 (or a negative number) to disable the cap and fetch every available indicator.", + "type": "integer" + }, "CROWDSTRIKE_NO_FILE_TRIGGER_IMPORT": { "default": true, "description": "Whether to trigger import without file dependencies.", @@ -1212,6 +1447,11 @@ "description": "Unix timestamp from which to start importing vulnerabilities. Default is 30 days ago. BEWARE: 0 means ALL vulnerabilities!", "type": "integer" }, + "CROWDSTRIKE_VULNERABILITY_IMPORT_AFFECTED_PRODUCTS": { + "default": false, + "description": "Whether to import affected products from vulnerability data. When enabled, creates STIX Software observables and 'has' relationships linking each product to its parent vulnerability.", + "type": "boolean" + }, "CROWDSTRIKE_INTERVAL_SEC": { "default": null, "deprecated": true, @@ -1379,6 +1619,29 @@ "description": "Year in number. Required when pull_history is set to `True`. Minimum 2019 as CVSS V3.1 was released in June 2019, thus most CVE published before 2019 do not include the cvssMetricV31 object.", "exclusiveMinimum": 0, "type": "integer" + }, + "CVE_IMPORT_SOFTWARE": { + "default": false, + "description": "\u26a0\ufe0f WARNING: Enabling this option can lead to the ingestion of a VERY SIGNIFICANT volume of data into the platform. Each CVE may resolve to dozens of CPE matches, resulting in massive amounts of Software entities and relationships. Use with caution. If set to `True`, resolve CPEs associated with each CVE via the NVD CPE Match API and import them as Software objects with 'has' relationships to vulnerabilities.", + "type": "boolean" + }, + "CVE_CPE_HISTORY_INTERVAL": { + "default": "P120D", + "description": "When import_software is enabled, The interval specifies how far back in time to search for CPEs that were modified within that period. This helps limit the number of CPEs resolved and imported. Maximum interval is 120 days. \u26a0\ufe0f WARNING: Null value will disable the time filter and may result in importing a very large number of CPEs. Use with caution.", + "format": "duration", + "type": "string" + }, + "CVE_CPE_MAX_CONCURRENCY": { + "default": 10, + "description": "Maximum number of concurrent CPE resolution tasks when import_software is enabled.", + "exclusiveMinimum": 0, + "type": "integer" + }, + "CVE_CVE_MAX_CONCURRENCY": { + "default": 50, + "description": "Maximum number of concurrent CVE processing workers (bounds queued tasks and bundle sends).", + "exclusiveMinimum": 0, + "type": "integer" } }, "required": [ @@ -1389,6 +1652,50 @@ "additionalProperties": true } }, + { + "title": "CVEProject cvelistV5", + "slug": "cvelistv5", + "description": "Alternative CVE connector that fetches updates directly from the CVEProject/cvelistV5 GitHub repository instead of querying the NVD REST API. The connector keeps a local clone of the upstream repository, uses git history to detect modified records between runs, and converts each CVE v5.1 record into STIX 2.1 Vulnerability objects. Workarounds, solutions, configurations and exploits exposed by upstream are attached as STIX Note objects. When the affected products of a CVE expose CPEs or version ranges, Software and Identity (vendor) objects are also created so analysts can model the exposure of their fleet.", + "short_description": "Fetch CVE records straight from the CVEProject/cvelistV5 GitHub repository and import them as STIX 2.1 Vulnerability objects.", + "logo": "data:image/png;base64,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", + "use_cases": [ + "Vulnerability Management", + "Open Source Threat Intel" + ], + "verified": false, + "last_verified_date": null, + "playbook_supported": false, + "max_confidence_level": 80, + "support_version": ">=6.6.0", + "subscription_link": null, + "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/external-import/cvelistv5", + "manager_supported": false, + "container_version": "rolling", + "container_image": "opencti/connector-cvelistv5", + "container_type": "EXTERNAL_IMPORT" + }, + { + "title": "CybelAngel", + "slug": "cybelangel", + "description": "Imports CybelAngel claimed-attack threat intelligence into OpenCTI as STIX 2.1 objects. For every claimed attack, the connector creates Intrusion Sets for the threat actors, Locations for the targeted countries, Identity objects for the victim organizations and impacted industries, a Campaign per (threat actor, victim) pair, and the corresponding `targets` / `attributed-to` relationships. Authentication uses OAuth2 client credentials against the CybelAngel platform API.", + "short_description": "Imports CybelAngel claimed-attack threat intelligence as STIX 2.1 Campaigns / Intrusion Sets / victim Identities.", + "logo": "data:image/png;base64,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", + "use_cases": [ + "Threat Intelligence", + "Commercial Threat Intel" + ], + "verified": true, + "last_verified_date": null, + "playbook_supported": false, + "max_confidence_level": 50, + "support_version": ">=6.7.0", + "subscription_link": "https://cybelangel.com/contact-us/", + "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/external-import/cybelangel", + "manager_supported": false, + "container_version": "rolling", + "container_image": "opencti/connector-cybelangel", + "container_type": "EXTERNAL_IMPORT" + }, { "title": "Cyber Campaign Collection", "slug": "cyber-campaign-collection", @@ -1612,6 +1919,28 @@ "container_image": "opencti/connector-dogesec-ctibutler", "container_type": "EXTERNAL_IMPORT" }, + { + "title": "Cyber Threat Exchange by dogesec", + "slug": "dogesec-cyberthreatexchange", + "description": "The Cyber Threat Exchange is a platform designed to provide tailored cyber threat intelligence through a marketplace model, allowing organizations to access insights produced by specialist researchers and analysts. Rather than aggregating broad, undifferentiated feeds, it emphasizes structured intelligence and targeted subscriptions that help security teams monitor relevant risks, campaigns, and threat actors across areas such as ransomware, geopolitical developments, and industry-specific threats.\n\nBy enabling users to subscribe to curated intelligence sources, the platform aims to improve the signal-to-noise ratio in threat monitoring and support faster decision-making for cybersecurity, risk, and intelligence teams. Its approach centers on delivering actionable, research-driven intelligence that can be integrated into organizational workflows, helping teams stay informed on evolving cyber risks and better prioritize detection, response, and mitigation efforts.", + "short_description": "The Cyber Threat Exchange is an online marketplace for cyber threat intelligence that connects organizations with specialist researchers and curated intelligence feeds.", + "logo": "data:image/png;base64,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czpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOmU2ZjBhMjJiLTM1MjYtNGJhZi04YjJkLTY3OWJkZTA0ZmQ4MiIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoxMDQ5MTM4My1jYzI2LTQ5MTktYTg1Ni0xZTk2MDljZTZlOTkiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0NTA5NGU1MC02MTgwLTRlNGYtYjYwOC02YWYwZWMwMjk1MzYiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJNYWMgT1MiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzcxMjU5OTAyNzI2NjEwIgogICBHSU1QOlZlcnNpb249IjIuMTAuMjQiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6Yzc3ZmYzZTktNGRmMy00MDRhLWEyZDktMjlmZDUyYzVlYzg5IgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKE1hYyBPUykiCiAgICAgIHN0RXZ0OndoZW49IjIwMjYtMDItMTZUMTY6Mzg6MjIrMDA6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+jk3GhQAAAAZiS0dEABAAEgDsL731sAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAAd0SU1FB+oCEBAmFnr+A74AACAASURBVHja7L13mF1V2f5/r71PP9NLJpPeG52EhG5AqiIqSH0V0BeDkMwkgIAgJDuhN5PMJJS8+lMRkaIiShEFGQtIQg0lpJdJmcn0dvape6/fH4N+KSGZcs7Z65xzf67Ly+vSydnPfp611nOvZ68CEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghJCMRdAEh2UmBcXVJXItN1qQ+yZYoFcIOSqnlCdhFElpe7wBg90hoHULYPVJqIQ2yxQY2uuHa2GUsbaMXCaEAIIQoTOD2BZUiYZ0spTwRENMATAFQNsifbRbAegmsE5D/kG7XK+aPlzXQ24RQABBCnKKmyhtok2cC2qmAfRIgpqbnwfIjQPwNQvzVLJZ/RnVtlMEghAKAEJLqmf6S6unClpdI4OIkzPAHS4cE/qQBj4SM2pcBSEaIEAoAQkiSKLv7+vxw2LwSEJdL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", + "use_cases": [ + "Commercial Threat Intel", + "Open Source Threat Intel" + ], + "verified": false, + "last_verified_date": null, + "playbook_supported": false, + "max_confidence_level": 50, + "support_version": ">=6.8.0", + "subscription_link": "https://www.cyberthreatexchange.com/", + "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/external-import/dogesec-cyberthreatexchange", + "manager_supported": false, + "container_version": "rolling", + "container_image": "opencti/connector-dogesec-cyberthreatexchange", + "container_type": "EXTERNAL_IMPORT" + }, { "title": "Obstracts by dogesec", "slug": "dogesec-obstracts", @@ -1716,10 +2045,132 @@ "support_version": ">= 6.5.1", "subscription_link": "https://www.doppel.com", "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/external-import/doppel", - "manager_supported": false, + "manager_supported": true, "container_version": "rolling", "container_image": "opencti/connector-doppel", - "container_type": "EXTERNAL_IMPORT" + "container_type": "EXTERNAL_IMPORT", + "config_schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://www.filigran.io/connectors/doppel_config.schema.json", + "type": "object", + "properties": { + "OPENCTI_URL": { + "description": "The base URL of the OpenCTI instance.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "OPENCTI_TOKEN": { + "description": "The API token to connect to OpenCTI.", + "type": "string" + }, + "CONNECTOR_NAME": { + "default": "Doppel Threat Intelligence", + "description": "The name of the connector.", + "type": "string" + }, + "CONNECTOR_SCOPE": { + "default": [ + "doppel" + ], + "description": "The scope of the connector.", + "items": { + "type": "string" + }, + "type": "array" + }, + "CONNECTOR_LOG_LEVEL": { + "default": "error", + "description": "The minimum level of logs to display.", + "enum": [ + "debug", + "info", + "warn", + "warning", + "error" + ], + "type": "string" + }, + "CONNECTOR_TYPE": { + "const": "EXTERNAL_IMPORT", + "default": "EXTERNAL_IMPORT", + "type": "string" + }, + "CONNECTOR_DURATION_PERIOD": { + "default": "PT1H", + "description": "The period of time to await between two runs of the connector.", + "format": "duration", + "type": "string" + }, + "DOPPEL_API_BASE_URL": { + "default": "https://api.doppel.com/v1", + "description": "API base URL.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "DOPPEL_API_KEY": { + "description": "API key for authentication.", + "type": "string" + }, + "DOPPEL_USER_API_KEY": { + "default": null, + "description": "Used for user-specific identity", + "type": "string" + }, + "DOPPEL_ORGANIZATION_CODE": { + "default": null, + "description": "Identifies the specific organizational workspace for multi-tenant keys", + "type": "string" + }, + "DOPPEL_TLP_LEVEL": { + "default": "clear", + "description": "Default TLP level of the imported entities.", + "enum": [ + "clear", + "white", + "green", + "amber", + "amber+strict", + "red" + ], + "type": "string" + }, + "DOPPEL_ALERTS_ENDPOINT": { + "default": "/alerts", + "description": "Specifies the API resource path for alert ingestion", + "type": "string" + }, + "DOPPEL_HISTORICAL_POLLING_DAYS": { + "default": 30, + "description": "Determines the time-window for initial data fetching", + "type": "integer" + }, + "DOPPEL_MAX_RETRIES": { + "default": 3, + "description": "Configures automated error recovery from transient failures", + "type": "integer" + }, + "DOPPEL_RETRY_DELAY": { + "default": 30, + "description": "Controls the frequency of requests during error recovery", + "type": "integer" + }, + "DOPPEL_PAGE_SIZE": { + "default": 100, + "description": "Optimizes request volume and memory usage per fetch", + "type": "integer" + } + }, + "required": [ + "OPENCTI_URL", + "OPENCTI_TOKEN", + "DOPPEL_API_KEY" + ], + "additionalProperties": true + } }, { "title": "Dragos", @@ -1817,6 +2268,7 @@ "writeOnly": true }, "DRAGOS_IMPORT_START_DATE": { + "default": "P30D", "description": "Start date of first import (ISO format). Can be a relative or an absolute date.", "format": "date-time", "type": "string" @@ -2415,6 +2867,7 @@ "writeOnly": true }, "FLASHPOINT_IMPORT_START_DATE": { + "default": "P30D", "description": "The date from which to start importing data.", "format": "date-time", "type": "string" @@ -2628,6 +3081,148 @@ "container_image": "opencti/connector-google-drive", "container_type": "EXTERNAL_IMPORT" }, + { + "title": "Google Digital Threat Monitoring (DTM)", + "slug": "google-dtm", + "description": "Google Digital Threat Monitoring (DTM) is an external threat intelligence service that continuously monitors the open web, dark web, and other online sources to identify threats targeting your brand, domains, executives, and assets. By providing contextualized alerts and curated intelligence, DTM helps organizations detect and respond quickly to phishing, impersonation, data leakage, and other digital risks. \n\nThis connector integrates Google Digital Threat Monitoring (DTM) service with OpenCTI to bring external digital risk insights directly into your threat intelligence platform. \n\nThe connector periodically pulls alerts from the DTM API and ingests each alert into OpenCTI as an Incident. For every Incident, it stores the available context from DTM (threat category, severity, timestamps, sources, and descriptive details) and links all related technical artifacts\u2014indicators and observables like domains, URLs, IP addresses, accounts, and file hashes.\n\n By integrating DTM alerts as Incidents in OpenCTI and attaching their associated observables, the connector provides a structured, centralized view of external digital threats and makes it easier to correlate them with other intelligence feeds and internal security data.", + "short_description": "Google Digital Threat Monitoring (DTM) is an external threat intelligence service that continuously monitors the open web, dark web, and other online sources to identify threats targeting your brand, domains, executives, and assets. By providing contextualized alerts and curated intelligence, DTM helps organizations detect and respond quickly to phishing, impersonation, data leakage, and other digital risks.", + "logo": "data:image/png;base64,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", + "use_cases": [ + "Brand, Digital Risk & Underground Exposure", + "Third-Party & Supply Chain Oversight" + ], + "verified": true, + "last_verified_date": "2026-04-15", + "playbook_supported": false, + "max_confidence_level": 70, + "support_version": ">=6.9.10", + "subscription_link": "https://cloud.google.com/security/products/digital-threat-monitoring", + "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/external-import/google-dtm", + "manager_supported": true, + "container_version": "rolling", + "container_image": "opencti/connector-google-dtm", + "container_type": "EXTERNAL_IMPORT", + "config_schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://www.filigran.io/connectors/google-dtm_config.schema.json", + "type": "object", + "properties": { + "OPENCTI_URL": { + "description": "The base URL of the OpenCTI instance.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "OPENCTI_TOKEN": { + "description": "The API token to connect to OpenCTI.", + "type": "string" + }, + "CONNECTOR_NAME": { + "default": "Google DTM", + "description": "The name of the connector.", + "type": "string" + }, + "CONNECTOR_SCOPE": { + "default": [ + "google-dtm" + ], + "description": "The scope of the connector, e.g. 'google-dtm'.", + "items": { + "type": "string" + }, + "type": "array" + }, + "CONNECTOR_LOG_LEVEL": { + "default": "error", + "description": "The minimum level of logs to display.", + "enum": [ + "debug", + "info", + "warn", + "warning", + "error" + ], + "type": "string" + }, + "CONNECTOR_TYPE": { + "const": "EXTERNAL_IMPORT", + "default": "EXTERNAL_IMPORT", + "type": "string" + }, + "CONNECTOR_DURATION_PERIOD": { + "default": "PT1H", + "description": "The period of time to await between two runs of the connector in ISO 8601 format e.g., 'PT1H' for 1 hour.", + "format": "duration", + "type": "string" + }, + "GOOGLE_DTM_API_KEY": { + "description": "Google DTM API Key", + "format": "password", + "type": "string", + "writeOnly": true + }, + "GOOGLE_DTM_TLP": { + "description": "Default Traffic Light Protocol (TLP) marking for imported data.", + "enum": [ + "clear", + "white", + "green", + "amber", + "amber+strict", + "red" + ], + "type": "string", + "default": "amber+strict" + }, + "GOOGLE_DTM_IMPORT_START_DATE": { + "default": "P10D", + "description": "ISO 8601 duration string specifying how far back to import alerts (e.g., P1D for 1 day, P7D for 7 days)", + "format": "duration", + "type": "string" + }, + "GOOGLE_DTM_ALERT_TYPE": { + "default": [], + "description": "Comma-separated list of alert types to ingest. Leave blank to retrieve alerts of all types.", + "items": { + "enum": [ + "Compromised Credentials", + "Document", + "Domain Discovery", + "Email", + "Forum Post", + "Message", + "Paste", + "Shop Listing", + "Tweet", + "Web Content" + ], + "type": "string" + }, + "type": "array" + }, + "GOOGLE_DTM_ALERT_SEVERITY": { + "default": [], + "description": "Comma-separated list of alert severities to ingest. Leave blank to retrieve alerts of all severities.", + "items": { + "enum": [ + "high", + "medium", + "low" + ], + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "OPENCTI_URL", + "OPENCTI_TOKEN", + "GOOGLE_DTM_API_KEY" + ], + "additionalProperties": true + } + }, { "title": "Google Threat Intelligence (GTI)", "slug": "google-ti-feeds", @@ -2966,7 +3561,7 @@ "type": "array" }, "CONNECTOR_DURATION_PERIOD": { - "default": "P1D", + "default": "PT6H", "description": "The period of time to await between two runs of the connector.", "format": "duration", "type": "string" @@ -3008,16 +3603,6 @@ "description": "Max number of indicators to ingest.", "type": "integer" }, - "GREYNOISE_FEED_IMPORT_METADATA": { - "default": false, - "description": "Import metadata (cities, sightings, etc.). \u26a0\ufe0f Can generate a lot of data.", - "type": "boolean" - }, - "GREYNOISE_FEED_IMPORT_DESTINATION_SIGHTINGS": { - "default": false, - "description": "Import indicator's countries (from metadata) as a Sighting.", - "type": "boolean" - }, "GREYNOISE_FEED_INDICATOR_SCORE_MALICIOUS": { "default": 75, "description": "Default indicator score for malicious indicators.", @@ -4681,6 +5266,11 @@ "description": "Whether to verify SSL certificates for the feed URL.", "type": "boolean" }, + "MISP_FEED_HTTP_AUTHORIZATION_HEADER": { + "default": null, + "description": "Optional value of the HTTP `Authorization` header sent on every request to the feed URL (e.g. `Basic ` or `Bearer `).", + "type": "string" + }, "MISP_FEED_BUCKET_NAME": { "default": null, "description": "Bucket Name where the MISP's files are stored", @@ -5049,6 +5639,11 @@ }, "type": "array" }, + "MISP_THREAT_LEVEL_SCORE_MAPPING": { + "default": "1:90;2:60;3:30;4:50", + "description": "Mapping of MISP threat levels (1=High, 2=Medium, 3=Low, 4=Undefined) to OpenCTI scores. Format: ':;:'. Each score must be an integer between 0 and 100; level '4' must be defined and is also used as the fallback score for events with an unrecognized threat level.", + "type": "string" + }, "MISP_IMPORT_ONLY_PUBLISHED": { "default": false, "description": "Whether to only import published MISP events or not.", @@ -5084,10 +5679,20 @@ "description": "The max number of items per batch when splitting STIX bundles.", "type": "integer" }, + "MISP_BATCH_SIZE_LIMIT": { + "default": null, + "description": "Max size of batches (in human-readable file size, e.g., '10MB', '500KB', '1.5GB') when splitting STIX bundles. `None` means no limit.", + "type": "string" + }, "MISP_REQUEST_TIMEOUT": { "default": null, "description": "The timeout for the requests to the MISP API in seconds. None means no timeout.", "type": "number" + }, + "MISP_SEARCH_LIMIT": { + "default": 10, + "description": "Limit the number of results returned per page request to MISP server.", + "type": "integer" } }, "required": [ @@ -5143,12 +5748,12 @@ "CONNECTOR_SCOPE": { "default": [ "identity", - "attack - pattern", - "course - of - action", + "attack-pattern", + "course-of-action", "relationship", - "x - mitre - collection", - "x - mitre - matrix", - "x - mitre - tactic" + "x-mitre-collection", + "x-mitre-matrix", + "x-mitre-tactic" ], "description": "The scope of the connector.", "items": { @@ -5314,8 +5919,8 @@ { "title": "MokN", "slug": "mokn", - "description": "Ingests login attempts from MokN Bait and converts them to STIX 2.1 objects.", - "short_description": "MokN Bait external import connector.", + "description": "MokN provides intelligence on credential compromise attempts captured through deception-based authentication systems. By deploying bait login portals that mimic legitimate services, MokN records attacker login attempts and identifies when stolen credentials are used. This helps organizations detect potential account compromises early in the attack lifecycle.\n\nWhen attackers interact with bait systems, MokN captures contextual information such as the source IP address, targeted username/password, and authentication outcome. This allows security teams to distinguish between credential harvesting attempts and cases where attackers possess valid credentials that may enable unauthorized access.\n\nThe MokN connector retrieves login attempt events from the MokN Bait platform and converts them into STIX objects within OpenCTI. It processes attacker infrastructure, targeted accounts, and credential validation status to generate observables, indicators, sightings, and incidents, enabling analysts to correlate credential compromise activity with existing threat intelligence and investigations.", + "short_description": "The MokN connector retrieves login attempt events from the MokN Bait platform and converts them into STIX objects within OpenCTI. It processes attacker infrastructure, targeted accounts, and credential validation status to generate observables, indicators, sightings, and incidents, enabling analysts to correlate credential compromise activity with existing threat intelligence and investigations", "logo": "data:image/png;base64,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", "use_cases": [ "Threat Intel Feed", @@ -5428,47 +6033,158 @@ { "title": "Monty Security C2 Tracker", "slug": "montysecurity-c2-tracker", - "description": "Template description of the connector", - "short_description": "Template short description (summary) of the connector", + "description": "Imports the Monty Security C2-Tracker OSINT feed into OpenCTI by creating malware families, related IP observables, and indicates relationships.", + "short_description": "Ingests Monty Security C2-Tracker malware/IP intelligence into OpenCTI.", "logo": "data:image/png;base64,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", "use_cases": [], "verified": true, - "last_verified_date": null, + "last_verified_date": "2026-03-17", "playbook_supported": false, "max_confidence_level": 50, "support_version": ">=6.9.7", "subscription_link": null, "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/external-import/montysecurity-c2-tracker", - "manager_supported": false, + "manager_supported": true, "container_version": "rolling", "container_image": "opencti/connector-montysecurity-c2-tracker", - "container_type": "EXTERNAL_IMPORT" - }, - { - "title": "MWDB", - "slug": "mwdb", - "description": "MWDB is an opensource malware collector and databases. https://mwdb.readthedocs.io/en/latest/user-guide/1-Introduction-to-MWDB.html.\nThis connector ingests malware feeds in order to import Observables and Indicator related to malware and their configurations.\nThis connector was built using the TAXII2 connector for OpenCTI as a base.", - "short_description": "MWDB is an opensource malware collector and databases. https://mwdb.readthedocs.io/en/latest/user-guide/1-Introduction-to-MWDB.html.\nThis connector ingests malware feeds in order to import Observables and Indicator related to malware and their configurations.\nThis connector was built using the TAXII2 connector for OpenCTI as a base.", - "logo": "data:image/png;base64,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", - "use_cases": [ - "Open Source Threat Intel", - "Malware Analysis" - ], - "verified": false, - "last_verified_date": null, - "playbook_supported": false, - "max_confidence_level": 40, - "support_version": ">=6.8.0", - "subscription_link": "", - "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/external-import/mwdb", - "manager_supported": false, - "container_version": "rolling", - "container_image": "opencti/connector-mwdb", - "container_type": "EXTERNAL_IMPORT" - }, - { - "title": "NSFOCUS Threat Intelligence", - "slug": "nti", + "container_type": "EXTERNAL_IMPORT", + "config_schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://www.filigran.io/connectors/montysecurity-c2-tracker_config.schema.json", + "type": "object", + "properties": { + "OPENCTI_URL": { + "description": "The base URL of the OpenCTI instance.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "OPENCTI_TOKEN": { + "description": "The API token to connect to OpenCTI.", + "type": "string" + }, + "CONNECTOR_NAME": { + "default": "MontysecurityC2TrackerConnector", + "description": "The name of the connector.", + "type": "string" + }, + "CONNECTOR_SCOPE": { + "default": [ + "montysecurity-c2-tracker" + ], + "description": "The scope of the connector, e.g. 'flashpoint'.", + "items": { + "type": "string" + }, + "type": "array" + }, + "CONNECTOR_LOG_LEVEL": { + "default": "error", + "description": "The minimum level of logs to display.", + "enum": [ + "debug", + "info", + "warn", + "warning", + "error" + ], + "type": "string" + }, + "CONNECTOR_TYPE": { + "const": "EXTERNAL_IMPORT", + "default": "EXTERNAL_IMPORT", + "type": "string" + }, + "CONNECTOR_DURATION_PERIOD": { + "default": "P7D", + "description": "The period of time to await between two runs of the connector.", + "format": "duration", + "type": "string" + }, + "MONTYSECURITY_C2_TRACKER_TLP_LEVEL": { + "default": "clear", + "description": "Default TLP level of the imported entities.", + "enum": [ + "clear", + "white", + "green", + "amber", + "amber+strict", + "red" + ], + "type": "string" + }, + "MONTYSECURITY_C2_TRACKER_MALWARE_LIST_URL": { + "default": "https://github.com/montysecurity/C2-Tracker/tree/main/data", + "description": "The URL to the malware list page of the imported entities.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "MONTYSECURITY_C2_TRACKER_MALWARE_IPS_BASE_URL": { + "default": "https://raw.githubusercontent.com/montysecurity/C2-Tracker/main/data/", + "description": "The base URL used to fetch malware ips.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "OPENCTI_URL", + "OPENCTI_TOKEN" + ], + "additionalProperties": true + } + }, + { + "title": "MWDB", + "slug": "mwdb", + "description": "MWDB is an opensource malware collector and databases. https://mwdb.readthedocs.io/en/latest/user-guide/1-Introduction-to-MWDB.html.\nThis connector ingests malware feeds in order to import Observables and Indicator related to malware and their configurations.\nThis connector was built using the TAXII2 connector for OpenCTI as a base.", + "short_description": "MWDB is an opensource malware collector and databases. https://mwdb.readthedocs.io/en/latest/user-guide/1-Introduction-to-MWDB.html.\nThis connector ingests malware feeds in order to import Observables and Indicator related to malware and their configurations.\nThis connector was built using the TAXII2 connector for OpenCTI as a base.", + "logo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZAAAAGQCAYAAACAvzbMAAAy7UlEQVR4nOzdCXxV9Z0//M/3nHsTwiIEEFxYkhBEDUlwUoUkWFMXKupMR53Yxeo8z7+j0+lqp+s83bWdaadj7fbMtNV2Ola7YbdprRsqKiRATYUbooKQGyAgqwkoIds53//rXggmEJKbu/3OOffzfr1aEXLP+bxE8+H7+50lBKIAOaeqanxBjzWt3w5Ntxx3uljWdFVMU9FpotaxvwLTAIwDZOKxT+kEAHnHDzEFgAAIAzj+6zgCoPf4jzuO/7UXkCPHP38Eim4VHJTY/1QOqrgHxZWDaskBV90DthM6cMQ+fHBvJHIkq/9AiDJITAcgGos55UsL8yw9x3WdsxVWiVhuiUJKoLH/6XwIzjCdcRSxImoH0ApBq7rSKqKviurufoRadzSvjsYayXRIokSwQMh76uvt4s27S6FuBSytEFfKVFAKoAjAJNPxMuyIAm0C2abQFohudC1tLplcsGXVqlX9psMRDcYCIaOKFtVNsfToQnXtCyFuGSBVABYBmGA6m8f0ieIVtdAiKi8q3CZHQy07mle3mg5GuYsFQllTV1cXir7WXWEJakVRo7BqAZ1tOpevKV6FaIMo1riChmnhvr80NTX1mY5FuYEFQhlTVlY38Wjo6CLXtWtFdCmApcc3qSlz+gCJAO4aqKwO5/U+vaWp6YDpUBRMLBBKm9LS5fnOuNfeCrGvhuVeAZWFAGzTuXKcq8BLovKUQB7tzutetbupqct0KAoGFgilZG7FJcWWhq6CpVfCxdt9cBVUrusGsFpVVtpwVm5rXtdkOhD5FwuExqSoqG6cNal7KSxcqWpdCWiV6UyUkigET8DFSnu8+9jWdesOmw5E/sECoVHFSkPO6L4KkHoAf5sDl9Lmqth0shLAirwe67ebN6953XQg8jYWCA0rvp8xvmNZvDQU7+DSVM45USbjnfzftLSsesN0IPIeFgi9qb7eLtmyo1o1NmnIuwGcaToSecJRAE/GyqQLR37Nx7HQABYIYV5FzUIX7m2AvBfAVNN5yNMOieIXAvdebsATCyRHxfc1JvX8NQS3A7jSdB7yH1G86ELu73f13vaWxtdM56HsY4HkmNLK2jIXzi2qchunDUqTbgj+IK7+sLV57ZN8GGTuYIHkgJkVFRMKZPwtlsptCvyV6TwUXAq0ALjXCvf+pLWp6ZDpPJRZLJAAm1dRM0OBDyj0Qzj2DgyibHkD0B/Dtr4ZfaFhu+kwlBkskAAqWbR4vrryISC+TFVgOg/lNBfAnxTWV9sia9aaDkPpxQIJkJLKxUtVrU8DuJa/t+RBa6D4dvT8Wb/BihWO6TCUOn6T8bv6ert4y653A+4noFJpOg5RAl4CcPfUcO/9fPS8v7FA/MsqLq++EYK7ACwwHYYoCTug8tW50/J+zLct+hMLxH+kuGLJdYDcefzNfUR+1waVf4uef+6PuLTlLywQHykpX3KlivU1PgGXAuolAF+LRhofOL75Th7HAvGB45vjXwXwVtNZiLJgExR3RpsbH+JNid7GAvGwokU1i8TReyCoM52FyIBGCO6IbmxcbzoIDY8F4kHnnn/JtLw86wuAfJCvhKUcpxA8BEs+yRsSvYcF4iFVVVXhg315HxDgywAmm85D5CFdAvlG7wT9entj41HTYegYFohHlJQvuRKQb6vgQtNZiDysHcBno5HGn3J/xDwWiGGllbVlDvQeqF5lOguRjzzrCu7YvrHxBdNBchkLxJCiorpx1hm9n1HovwDIM52HyIdcCO4b35//cb5y1wwWiAHHL8u9F8D5prMQBUCbCt7ftrHxMdNBcg0LJItKqqoma1/4TkA+BMAynYcoUAQrbCv0wa0vPLffdJRcwUtEs6Sksvo6dUIPA1jG4ibKiDJV932FM+Z0du7byfe1ZwG/kWVY8cLFM2FZ3wBwi+ksRLlCgEfUln/ivSOZxQkkg4orl9wEsR4FsNh0FqIcMx+K902dMWdPx76dG0yHCSpOIBmwYEHtpN5x7n9AcbvpLES5ToHf9PU6t+96ef1B01mChgWSZsWV1ZcAeBCKUtNZiOiEPQr8v22RxkdNBwkSLmGlS329XWRP+ZQADwA403QcIhpiogA3F86cNfXc6ZOf2r9/P987kgacQNKg+KKauXD0pwAuNZ2FiEa1SRTvaW1ubDYdxO84gaSouLLmvXD0jxCcZzoLESVkBgR/XzhjzgFe7psaTiBJKi1dnu+M7/h3QD5iOgsRJUnkwZ5Qz+27m5q6TEfxIxZIEmZVVp8bVqwAUG06CxGlSHSj44Zu2NG8utV0FL/h4zTGqLii9tKw4nmWB1FAqFTacF4oKq/+W9NR/IZ7IGNQXF5zO0R/yZc9EQWMIF8E75x61qyCjr3tT/FdI4nhElYCysrqJnbZvfcB+k7TWYgowxQPO7Bv2dG8usN0FK9jgYxiXll1qWPjdwKUmc5CRFnzii3W9Vs3rmkxHcTLuAcygqKK2iWujTUsD6KcM99Rt3Fu+ZLlpoN4GfdATqOkouZGQH8PYIrpLERkRL6IvHPKWbP3de5t5/0iw2CBDKOoovqjAO7jq2aJcp4lwHWFM2dN7dzbzjcenoR7IIPV19vFm3d+B5APmI5CRB4jWKGH8m9ta1vVbTqKV7BAjotfaWX1/AKCa01nISJvUkFDXqj3HVuamg6YzuIFLBAApRWLZzkif4RKpeksROR5L7twrtkeWR81HcS0nC+QuRWXFFuwVwIoMZ2FiHxjryiuyvUn+ub0ZbxzFy65wIb9HMuDiMZopgqeOf4CuZyVswUyt7L6IsuSZxQ413QWIvKlQigen7ewusZ0EFNyskBKFtVcbClW8s2BRJSiya6Fx4sXLr7KdBATcq5AisqrL1NXnwQw1XQWIgqECbCsP+Ti03xz6kbCkvLaayD6v/HfcCKi9AmJ4MbCGbNf7tzX/qLpMNmSMwVSUrnkBkX8JVDjTGchokCyIbih8Kw50c69OyOmw2RDThRIcWXNMigeApBvOgsRBZoF4G+mzJyzpXPvzk2mw2Ra4O8DmVdRc7kLfZiTBxFlUR+gN0Yja/9gOkgmBbpAiipqlwjcJwBMNJ2FiHJOrwLvaIs0Pmo6SKYEtkCKy5ZWwnaejl+rTURkRhdgXR2NrHnOdJBMCGSBFFfULgDcZwDMNJ2FiHLeIXGtK1s3rXnedJB0C1yBzCurLnUtPAvB2aazEBEdIwdskbqgvSI3UAUSf6ourDUA5pjOQkQ0hOJVV5zaID3FNzB3oi9YUDsp/kh2lgcReZHgbAv2n+aULw3MvmwwCqS+3u7Nd3/G93kQkcedb4vzu9LS5YG4Jy0QBVK0edd3AVxnOgcRUQLe6o7v+EkQthB8fyd6SUX1vwD4jOkcRESJk4VTZ8yWjn3tq0wnSYWvC6S4vLoegv8MQpMTUY4RvHXKjFnbO/e1bzAdJVm+/cZbUrl4qar1BB9RQkQ+1gfXvTa6ad0TpoMkw5cFUrJo8Xx1rUYA00xnISJKUadju7U7Xljnu8fA+24TvaysbqLrWr9leRBRQEyxHet3RYvqppgOMlZ+KxDpsnp+JECZ6SBERGk0X9ye+/32PdlXm+jFFdWfhOAO0zmIiDJgQeGMOf2d+3Y+azpIonyzBzK3svZtlrqPAwiZzkJElCGuq3rd9ua1j5gOkghfFMi8hRfPdq1QE4AzTWchIsqwDtuVi7duathmOshoPL/eVlq6PN+1Qg+xPIgoRxQ6lv7mnKqq8aaDjMbzBeKM7/gugEtM5yAiyqKK/P78H5oOMRpPb6IXVSz5e4HcZToHEZEBFYUz5rzauW9nk+kgp+PZPZA55UtLbDgvQHCG6SxERIZ0qaKqrbnxZdNBhuPJJay6urqQLc4DLA8iynHjLcGDZWVleaaDDMeTS1gy6ewvQXCz6RxERB5wdr+dl9ext32l6SAn89wS1rxFS2pdV57xarkRERngWpCrtkUanjIdZDBPFUhJVdVk7ct7AUCx6SxERF4iwK6eXqdy18vrD5rOMsBTeyDaG/4ey4OI6FQKnBvOsz11aa9nlomKK2r+DoKvmM5BRORVAlwwdcacHR37dnriJVSeWMKafVHtOSHHbQHgu8cZExFl2evi2AtbW1bvMB3EE0tY4X73eywPIqKETILtfN90CHihQEoqam5UwfWmcxAR+YUCy0sqqt9tOofRJaySqqrJ6MtrUeBckzmIiPxHDti2feHWF57bbyqB0QlE+/LuZnkQESVDpztO/zdMJjA2gRSVV18mgqdNT0FERL4m8vboxobHjZzaxElnVVcXhLsQgaLUxPmJiAJk+3gnf2FLy6o3sn1iI0tYeV3yJZYHEVFazO2yu79k4sRZn0BKyqvLVfAXvtuciChtHLXkLW0bGrJ6g2HWJxC15G6WBxFRWtni6veyPRRktUDmVlZfD9WrsnlOIqIcUVtcUXNjNk+YtbYqKyvL67LP2ARgfrbOSUSUW2RnT7jn/N1NTV3ZOFvWJpAj1uSPsTyIfKJAYM2zYZ0fgkw2/sAKSpjOzu8L35Gts2VlAileuHgmLGszgMnZOB8RJc9eFEboqvw3dyoVcF/oQ98TPYBrOBwl4o1+21qw84U1uzN9oqz80UJF/o3lQeR99iV5CC3PH3qZiwDWX4UR/tsCDzw9jxIwMeS4/5qNE2V8AplbWX2RpXje9GNTiGhk8fK4Im/Er3E3O+j73VFOIt6nECyJbmxcn8mTZPxyWkvxbZaHP9m2jZK5c1A6rwhnnzUTZ0yaiLzwyN9g/GD3nj1Y37QBW7a2mo7iGYmUR4y1wI5PIiwRzxMF7gFQm9GTZPLgc8uXLLdE/pTJc1B6zZg+Dde+/QrUXVqDqspyjB9fYDpSxjy6chX+vzu/hs5Dh01HMSrR8hjMfbkffb/vZol4nFhyXeuGhoczdfyMTiCWiJHb62lsRASXVl+Cm2+6AZdfVgvbyo2B8eor6xAOh3DbRz5lOooxyZRHjHV+CGHhJOJ5rt4J4E/HLoVIv4xNIEXl1X8rgt9m6viUHm+//DJ85P3vwwULcvfRZDfechteiLSYjpF1yZbHYNwT8T5XcMP2jY0Z+V6cqT9qiljK6cPD5sw+Fz/5r3vwX/f8W06XR8z8eSWmI2RdOsoDg/ZEuMvpXaK4K1Pf6zNy0OLKJfVQqczEsSl1N/z1cvzpV/fjrTWLTUfxhHA4bDpCVqWrPAawRLxNgLKiipqbMnHs9P+W19fbUO59eJFtWfjSZ/4Z//GVzwd6c5xOL93lMYAl4m0CvbOuri7te95p/+0u3rLr3QAuSPdxKTW2beNbX/8ybn3335mOQobYl4QzUh4DYiWS964CwP9XegfR/O2v9bwn3QdNb4HEpw/9XFqPSSmLTR53f+XzuHbZFaajkCHHJo/8jJ9H5trIe2cBkM83VXvQl8vKytJa72ktkOLN7TcDWJDOY1Jq4uXx1S/gb65ZZjoKGZKpZavTkVk28m4axxLxnqIj1qS0TiHpnUBE/zmtx6OUsDwo2+UxgCXiTSLy8XTevpG2AimqqL6aV155B8uD7Asyu+cxmliJhOvHcU/EWxbOLV9ydboOlrYCEeDj6ToWpYblQTH2UvOXJ1uzbYRv4sa6l1jHppD0HCsdBykpry4HwB1aD2B5UIyEBTLNG8tHLBHPuWJuZfVF6ThQWgpEBZ/M9svc6VQsDxqg/QD6vPOfZKxEeHWWd1huevarUy6QWZXV5wJ4ZzrCUPJYHjSEKtwd/aZTDME9EQ8ReWdJ2dI5qR4m5QLJg3wE/FfCKJYHDaf/8V7oGxl5CGvSuJzlGWG1nQ+nepCUCmTBgtpJqnp7qiEoeSwPOh095KLvZ0c9WSJczvKEfyypqkrpVeMpFUhvnnsrgCmpHIOSx/Kg0ejB4yVyxFslwvtEPGGS9odvTeUAqS1hCd6X0ucpaSwPSlS8RH5xFHqUJUInUbktlY8nXSDFldWXAEjLpWA0NiwPGivd56L/F93Qbu+VCDfWjSovqliS9Hsdkp9AUmwuSg7Lg5Ll7nHQ/6D3JhHuiZglSP57eVIFUlZWNxFQXrqbZSwPSpUbm0R+5r0S4XKWUe8qXbz4jGQ+mFSBdFm97wYwKZnPUnJs28a3v34nyyMD+vr6TEfIKpYInWSC02W/K5kPJrmEpVy+yqJ4eXzty7hm2eWmowTS5le2mY6QdSwRGkr/IZlPjblAihcuroDg4mRORmM38DIolkdmrFz1HDZuetF0DCNYInSC4OJkno819gnEtnjjYJZw2SqzHn78SXzy818xHcMolggNsDD22zLG9LtTVlaW12WfsQdA4VhPRGPj9WWrjs5OrFy1Glu2RrFv/344rms6UsKcfgfb2rZja2ub6SieYc2wEHpPAaTAW9+wtd1B76+6gR5vFVxAdYx3Dp/V0tLSm+gHQmM5epc96e0sj8zzcnls2dqKe/7zPqx8+llflQaNbGAS8VqJDEwiLJGsKDwaOmMZgD8m+oGxLWEpbkomFSXOq+Xhui6+/f0f4Zr6W/HYk6tYHgHE5SxSd2y3ZyT8O1JUVDdOzujZAyClh2/R6Xm1PBzHwR2f+VJ8z4CCj8tZOe31vgmY2d7YeDSRL054AtHJPctZHpnj1autYpPGxz93F8sjh3ASyWmTQm/g7Yl+ccIFYqty+SpDvHqHebw8Pnsn/vdPj5uOQlnGEsldliS+jJXQ78I5VVXj8/vy9gKYmFIyOgXLg7yMy1k5qasLR2bsjUSOjPaFCU0g+b1517I80o/lQV7HSSQnjR+vE65J5AsTW8ISXn2VbiwP8guWSA5K8Hv+qP/kjy9f7Y+1UlqCEcuDfInLWTmlqyfce+bupqaukb5o1AlkXO+4OpZH+rA8yK84ieSU8ce/949o1AJRy12etkg5juVBfscSyR0KvXq0r0lkD2TUg9DoWB4UFCyRHCF67WhfMmKBlCxaPB+K0rSGykEsDwoalkhOKJlXVj3i9/8RC8R1bS5fpYjlQUHFEgk+1xp5BWrEArESWAOj02N5UNCxRIJNRUccIk77T/f4wxMP8gqs5LA8KJfwEt/AOto3AdNO93DF008gZ/Tw8t0ksTwo13ASCayCcJdcerpfPG2BCEYeXWh4LA/KVSyRYBrpct4R9kDEW88V94FYeXzzX7/I8qCcxRIJHlFccdpfG+4nixbVTRE3vv8xtjcW5rCB8vjr5VeZjjIEy4NM4J5IoLgS7p3a2tR06ORfGLYg1OmuZnkkjuVBNBQnkUCx3P68JcP+wrA/KVZtxiMFBMuDaHgskeAQF8N2wvBThioLJAEsD6KRsUSCQSXBAqmqqgpDcElWUvkYy4MoMSwR/xNgcbwbTnJKgXQ4+Yt4/8fIWB5EY8MS8b0JHT3jKk/+yVMKxHW5fDUSlgdRclgi/uZa7indcEqBCIZf6yKWB1GqWCL+JcPsgwxXINVZS+QjLA+i9GCJ+JMoak7+uSEFUnrRpWcqcG5WU/kAy4MovVgi/hPrhnkVNTMG/9yQAnH6ehdlPZXHsTyIMoMl4j8KLR/890MKRGwpz3oiD2N5EGUWS8RnVCsG/+1JeyAWC+Q4lgdRdrBE/MMFTj+BnNwuuYrlQZRdLBF/EJHhC6Suri6kwIVGUnkIy4PIDJaIL5Shvt4e+JsTBdJ66Oh5AMYZi+UBLA8is1ginldQvHl36cDfnCgQy7FzevmK5UHkDSwRj1P3RFecKBA5aXMkl7A8iLyFJeJpJ7pi0Ca6lhkKYxTLg8ibWCLeJMDCgR8Pvgprnpk45rA8iLyNJeI9amnJwI8HF8hcM3HMYHkQ+QNLxGNcKR74YbxAzquqmg5gktFQWcTyIPIXloiHCM6YU760EAMF0u/kF5vOlC0sDyJ/Yol4h0h/vDPiBaKOFpkOlA0sDyJ/Y4l4gw1rUIFAAz+BsDyIgoElYp4K4kPHsU10sQI9gbA8iIKFJWKavlkgFoK7hMXyIAomlohBLgYvYSGQS1gsD6JgY4mYIRhUIADmmI2TfiwPotzAEsk+lWP3DUpZWd3ELrvnddOB0onlQZR7rBkWQu8pgBR46xu2tjvo/VU30OOtgktVT7h3gtWV1zvNdJB0YnkQ5SZOItlV0GNNs6x+Z7rpIOnC8iDKbSyR7Om3Q9Mt17IDMYGwPIgILJGssV2dZomrvp9AWB5ENBhLJPNcC9MstdTXEwjLg4iGwxLJLHFluiVq+bZAWB5ENBKWSOZofAIRfy5hxcrjO/9+l/fKw3Hw0U9/geVB5BHxEvlFN7TboyUSMp0kOaI6zYr9n+kgyfjnD92O5Ve9zXSMIeKTx+fuwp8ef8p0FCIaxN3joP9Bb04i4WvGmY6RFIVMt1RlqukgY1VRdgHe/39uMR1jCE4eRN7m1eUsqywEq9g2HWPMBJhqQWS86SBjFZs+RLyzdhgvj898kZMHkcd5dTkrdFme6QjJKLAA9VXyWeecjUurLzEd4wQuWxH5ixeXs+RsG9Z0y3SMMdJ8C6L5pmOMxbIrLvPM9MFlKyJ/8uIkIvP9tYwlkDwLKr6aQM6fP890hDhOHkT+5rVJRKb7q0BcID82M/lqAjl75gzTETh5EAWElyYRa5I3VlYSJXKsQHw1gdghsy3NyYMoWLwyiai/+gNQ5PmuQEziHeZEweTVS3w9zn9LWCZ98nN3sTyIAipWIn0PdccX9ykhnEAS9WzDOvzu4cdMxyCiDNJ2B87L/aZj+IX/9kBMaVzfZDoCEWWB7nZMR/CLfL/duWLM0e5u0xGIKAvE9ttutjEaK5Be0yn8oHLhhaYjEFEWyBx/3Y9hUG+sQHpMp/CDa5ddgQsXzDcdg4gyyD4vBKuEBZKgHk4gCcrLC+N/vv8tzJ9XbDoKEWWAVWwj9I5x8cfMUkJYIGMxbWohfnbf91giRAETK4/w3xX49uVOhvRa6rMlLKff7BUSsRJ54IffQWlJkdEcRJQeVolHysN/Vw/3WOKzCWTPvv2mI+DM6dPw8x/9/5xEiHwuPnnc6IHyAKCH/HUHo/pxE/2lLVtNR4jjJELkb56ZPI7TPf66/8Ty4x7I408+A1VvPK+GkwiRP3lp8ohTwNnirwLRYwUiviqQ9t2vomHd86ZjnMBJhMhfvLhh7r7YD3R54w/GY9BrAXrEdIqxuuc/7/XMFILjk8iD936XJULkcV5btopzFP3P+erP8XECdFkKHDQdZKz+snETfvDfD5iOMQSXs4i8zXPLVsf1reyFdvhrAx3HlrAOWKLiuwKJufu7P8AjTzxtOsYQXM4i8iZPTh4A+v/cB/cvfaZjJEWAg5aK68sCcVwXH/nU5z33fg5OIkTe4tXJI1YezkpfXQQ7hKocjE0gB0wHSZZX3xDIO9aJvMGLG+YIQHkg/ihe94Cl4s8lrAEsESIaDssjs8SNTSCu4+sCAUuEiE7C8sg8S+Sg5dqWb5ewBmOJEBFYHlnjus4By+63fT+BDGCJEOU2lkf29NnWQat73NFATCADWCJEuYnlkV2hQ/kHrd1NTV0AfHc3+khYIkS5heWRda+3ta3qtmI/EsV202nSjSVClBtYHka04dgTeQFXtM10mkxgiRAFG8vDmDcLRESiptNkCkuEKJhYHiZpvDOsYz9GICeQASwRomBheZglOmgCASTQBQKWCFFgsDzMcyx5s0AsdQK7hDUYS4TI31ge3jCw7REvkO6+YG6iD4clQuRPLA8vyXtzAtn18vqDUBw2HSlbWCJE/sLy8JSOtg2rOvHmHkj87SA5M4WAJULkGywPzznRFScKRBTbjMUxhCVC5G0sD0860RXWoJ9sNpPFLJYIkTexPLxJoZsGfnyiQFQkJwsELBEiz2F5eJeKRAZ+/OYSlvRHjCXyAJYIkTewPLwt1P/mapUM+nmruKL6MIAJZmJ5g21ZuPurX8DfXLPMdJQhDr7WgZtv+zC2bG01HYUoY1gennckGmk8A4CLk/ZAXCheNJfLG7w8iTx473dxXmmJ6ShEGcHy8IVNA+WBkwokNo/k9DLWAJYIUXaxPPxCh3TEkALRHL0SazgsEaLsYHn4iAztiCEFYiN3r8QaDkuEKLNYHv6iIxVId2//xqwn8jiWCFFmsDz8p6/bPX2BxJ+JBezIeiqPY4kQpRfLw5d2HO+IE6yTv0KgDVmN5BMsEaL0YHn4kwJrTv65UwpEVU75IjqGJUKUGpaHf4kmUCCudeoX0ZtYIkTJYXn4m9qnDhenFMj282ZFALyetVQ+xBIhGhuWh88pDrfNP/eUq3TtU77wxRe1cObsywHwu9AIVBVPPP0siubMwoL580zHOWF8QQGWX/U2PLNmbfzxJ0SmsTwC4ZnOpx+7/+SfPGUCQXwjnfsgieAkQjQylkcw6Gm2NoYtEHUdFkiCWCJEw2N5BIc1zAY6TlcgeX2htbHvjRlPFRAsEaKhWB6B0h/usdYP9wun7oEAOHhwZ2/hzNnXAzgr49ECgnsiRMewPIJFgA1bX2z47nC/NuwEcow+mcFMgcRJhHIdyyN4FDhtF5y2QETxaMYSBRhLhHIVyyOYLMhpu+C0BVLgvv4sgDcylirAWCKUa1gegXVEuiaf9qKqYfdAYvbv3+8UzpxdDWBBxqIFGPdEKFewPALtkdaXnn7wdL84wh5I/H4QLmOlgJMIBR3LI9hUdMQOGLFAHPQ/kvZEOYYlQkHF8gg+1w2N+I3rtEtYMYf27uosnDn73QCmpz1ZDuFyFgUNyyMnvLy9ueErI33BiBMIjl0DzGWsNOAkQkHB8sgNKhh1BWrUAnETOAglhiVCfsfyyB2J7IGPWiA4lP8ML+dNH5YI+RXLI6e8oYfynh3ti0bcA4np7GzrnzJzdrkA5WmLluO4J0J+w/LILQo81LZ59a9G+7rRJ5BjRxv1QDQ2nETIL1geOUgloe/5CRVI6OiURwAcSjkUDcESIa9jeeQgxWG8nvdYIl866hJWzGuvbXUKZ86+EEBlyuFoCC5nkVexPHKU4Jdtm1c/lMiXJraEFTumcBkrUziJkNewPHKXWIktX2EsBVIY6o2NNK8lnYpGxBIhr2B55LTOgr5DTyT6xQktYcW8+uqr7pQZs84XkYuSjkYjii9nrXoOpcVFmD+v2HScE8YXFODat1+Olza/gh3tu0zHoQxieeQ2VfzslU1/+W2iX59wgcRMOWt2jwDvTSoZJSRWIo899YznSqRg3Di845plmHXO2di8dRsOHX7ddCRKM5YHwcK/dO5t35bol8tYjl1VVRV+rS9/N6B8NlaG2baNb3/ty7hm2eWmo5zCcRysb9oQ3/x/pbUNr+7Zi/7+ftOxEqYK7Nm3H319faajeAbLgwA5MDXcc05TU1PC/2GMqUBiSiqq71HgjjFnozHzcon4XVfXUfzXj3+K7//4p/FCzGUsD8KxMvhWa6TxY2P5zJiWsGImz5i9XQQfTKZ8aGziy1lPrvLcJb5BEA6HUXNJFSZNnIhn16w1HccYlged4Lr/2Llv196xfGTMBdK5r/3AlLNmLxNg9lg/S2Pn1Y31oKhceAEefvxJdHTm3n2yLA8apDHavPZfx/qhhC/jHcLVe5P6HCXFcRx89DNfxJ8ef8p0lMCxLAuLystMx8g6lgcNJoL7kvlcUgXSP1F+GRtGkvksJSdeIp/+gufuEwmCcePGmY6QVSwPOskb4W5rRTIfTKpA2hsbjyrk58l8lpLn1ZsNyT9YHnQyUTy4efOapK7LT24JK3ZS1/l+sp+l5LFEKFlWCcuDhqFWUstXSKVAopvWRQBpSvbzlDyWCI1VfPK4keVBp4i0blrzfLIfTrpAEH9kPDfTTWGJUKKs2TZCN45jedApBPKDVD6fUoH0hnp/CsiBVI5ByWOJ0Ghklo3wTQWQsLdu22J5eEJHgZN3fyoHSKlAdjc1dQFIqcEoNSwROh1rhoW8dxYAeaaTDMXy8AYFvt/SsuqNVI6RUoEcP8B3AHSnehxKHkuEhmNflc/yoNPpC8H9z1QPknKBbIs07APwYKrHodSwRGgIW2CdM+YHTWQUy8M7ROTBrZF17akeJ+UCOX6YbwBw03MsShZLhE4QTdt/3enA8vAW7be+lY7jpOVfsWhkzWaFPpqOY1FqWCIU1w/oXm/8mY7l4TmPRltWb0zHgdL2ZxQb1t3pOhalhiVCMX1P9xhfF2B5eI+opu17ddoKZFuk4SkB/pKu41FqWCKk2x30/b7bWImwPDwp0tq89sl0HSy9q6QKTiEewhIh9+V+IyXC8vAokW8cu4I3PdJaIK3nz/olgJfSeUxKDUuEsl0iLA/PemVuYd4v0nnA9E4gK1Y4KvrltB6TUhYvkc/dFX9xEuWmbJUIy8O7BPjiqlWr+tN5zLRf6Ne2ce2vIJqWHX5KH8dxcMenv4j7f/6Q6ShkSKZLhOXhXQq0tEYaf5nu42biSnF1IZxCPCg2iXzpa9/EJz53F7q6jpqOQwZkqkRYHt5mQb6YiXv1MnKr0faNjb+D4s+ZODal7jd/eATXvfP/QcO6pJ/iHCiu65iOkFXpLhGWh+c1t0YafpuJA2fqXlUVm1OIl7Xt2In33v4RfPATn8XmV7aZjmPUjvbdpiNkXbpKhOXhB/rZTD0pJKPPeC6uWNIIyJJMnoNSJyK4tPoS3HzTDbj8slrYloeegZFhm158Gde/97b4HlEuss4PIfyOcUn9UZLl4QfSFI00XJzOS3cHy+jT1grPPHcHRG7J5DkoPbbv3IU/ProSv/j17/Hqnr2xVsGZ06YiLy9sOlrGbNnaig9+4nPo6Ow0HcUYPeBCD7qwF4TG9MdJloc/qOD/dO5t35qp42f8LTPFFdUrAVyR6fNQ+tm2jZK5czCvZC7OOWsmJk2aiPy8fNOxUtbf349tbdvxyBNPobe3z3QcTxjLJMLy8I1nopHGukyeIOMFMueixRfajrURnnuhJhENlkiJsDx8w7XUvWRb87qmTJ4k4y8MOLRn1/6pM2efA+AtmT4XESVvtOUsloef6H2tzet+mOmzZGW3tNfBZwG8lo1zEVHy4ldnPXQU+sabe67ap3Ce7mV5+Mfr6jhfyMaJsvam/ZLyJR9TkW9m63xElAIBZJoFhAHd78bfL0K+8clopPE/snGirF2vWZjX9z0Am7N1PiJKgR5f0nqV5eEnCmyzu6Z8N1vny1qBNDU19YklH8/W+YiIco1AP7Z16yNZW2vM2hLWgOKK6kcAXJ3t8xIRBZkCT7VFGrN6y0TWbzl2bDc2hfDieyKi9Om3IR/N9kkzfhnvyQ7t2bW/cOacfABvzfa5iYiCSIGvRyONP8/2eY089MjumnyXKF40cW4iooB5pX8C7jJxYiMFsnXrIz0O5B8y9YRIIqIcoQL8U3tjo5EX/GR9CWvAoX0726fOnH0271AnIkqW3heNrP2OqbMbfW63VeB+GkC7yQxERD61x9HQp00GMFogW9etOyyWvN9kBiIiPxLIh3Y0r+4wmcH4m4NaNzQ8DMEK0zmIiHzkj62Rhl+bDmG8QOIc98N82CIRUUIO9Qk8sXLjiQKJblq3V0RvM52DiMjrRPWD7Rsbd5nOAZNXYZ2sY2/7S1NmzJorIheZzkJE5EmCFdHI2qw8qj0RnphABhyVrg8DssV0DiIi75Gdjmv/o+kUg3mqQPZGIkfElZv5rCwioiFcVb3F9FVXJ/PMEtaAjn07dxeeNTv2w7eZzkJE5AWiuCva3PgT0zlO5qkJZEB0Y+NXoVhlOgcRkQc8X5jX+xXTIYbjyQKJjWuW9t8aG0hMByEiMuiIiHNzU1OTJ5f1vVog2LbpzzsF+KDpHEREpij0g60b13v2wiLP7YEM1rG3fVPhWbOnA7jEdBYiomwSxQ+izWu/ajrHSDw7gQyYGur9ZwDPmc5BRJRF662jU7L+hsGxyvo70ZNRVHbxWZYdel6Bc01nISLKsINq6VvaNqxtMx1kNJ6fQGLaWv68x1GpB9BrOgsRUQY5EHmPH8oDXt8DGezQvp3tU2bOOSzActNZiIgy5NPRSONPTYdIlG8KJKZz7851hTNnFwNYZDoLEVE6ieB30UjjHaZzjIUvlrAG65uAfxLgL6ZzEBGl0WZrnPv38St3fcQXm+gnm1O+tMQWpxHADNNZiIhS9JqIU+3l+z1Ox3cTSMyO5tWt4lrXAjhiOgsRUQp6LUi9H8sDfi2QmNZNa54H9N3xqxaIiPxHIfIP2yINT5kOkixfbaKfrHNv+5bCs+bEppBlprMQEY2Nfj4aafye6RSp8HWB4NiVWY183AkR+YkqftzWvPYTpnOkyrdLWINFz5t1B4Dfm85BRDQqxaoJ7uF/Mh0jHXx5FdZwzqmqGp/fl/c0JxEi8ipRvOja+bVtG1Z1ms6SDoEpkJjZF9WeE3Lc1QCKTWchIhpKdopjLW1tWb3DdJJ0CVSBxJSULZ2jtvMsgLmmsxARHbffdfWy7ZvWvmQ6SDoFYg9ksFi7i+VeBWCP6SxERAA6XejVQSsPBLFAYlo3rHsFrvt2AK+ZzkJEOe2IZel12yNrA/n4pUAWSEx007qIQq8B8LrpLESUk46qpddt27B2jekgmRLYAolpi6xdZ1m6nI88IaIs6xVL6ts2rF1lOkgmBbpAYuLt77rXA+gxnYWIcoID0VtaNzQ8bDpIpgW+QHBsOesJVbyLbzQkogzrF8Wt0Y1rf2U6SDYE7jLekRRVVF8twG8AFJjOQkSB0yuQ97RGGn5tOki25FSBxBRX1F4Kdf8IwRmmsxBRYHQpcGNbpPFR00GyKecKJKZkYe1b1HJjv9HTTGchIt87IsA7WiONT5oOkm05WSAxpZW1ZY7rPgHB2aazEJFvdboq12xvbmg0HcSEnC0QHFvOWgC4KwHMMp2FiHxnHxx7WbRl9UbTQUzJiauwTicaWbMZtixVYJvpLETkI4pXbbEuz+XyQK4XSEz0hYbtGg5dCkiT6SxE5H0KtCAk1Vs3rmkxncU037+RMB0OvbrjjfyZhQ+GkVcOYIHpPETkWU/Cyr+6bcNze00H8YKcn0AG7I1EjkQXzLoeAl+/o5iIMkNEfjI13Ls8KC+DSoec3kQ/naKK6o8K8E0WLBEBUIHc2Rpp+JLpIF7DAjmNuZXV11uKBwCMN52FiIzphcj7ohsbHjAdxItYICMorqy+BIr/BTDTdBYiyroOtfSGoD9RNxUskFHMKV9aYovzWwAVprMQUda8rIrr25obXzYdxMt4FdYoDu3b0TGloPQnyOs/V0QuMp2HiDLuDxLuvTa6Yf0u00G8jhPIGBSX19wO0e8CyDOdhYjSzhHIV1ojDXcCcE2H8QMWyBjNW7Sk1nVkBZ+hRRQoByHynujGhsdNB/ETFkgSSi+69EzX6fulQt5mOgsRpewFF86N2yPro6aD+A33QJLw2p4dXZUXlD54uLs/H5ClpvMQUdJ+2jcB1+9sWrffdBA/4gSSoqKKmncJ9PsAJpvOQkQJe0NUPtLa3PDfpoP4GQskDUrKls5R27kfwGWmsxDRKBR/Fst5b+vG9VtMR/E7Fkj6WEUV1R8W4N95lRaRJ7mAfm+88/onW1paek2HCQIWSJqVLKq5WF08AOh5prMQ0Qk7VHFrW3PjM6aDBAk30dOsY8/O3RNLZv3I7tNJgCw2nYeI8FCfg+t2bOJd5enGCSSDiitq/g7QHwCYajoLUc5RHIbgw9FI4/2mowQVJ5AM6ty788XCM8/9H4jMBFBpOg9RzlA8LK59XXRTw7OmowQZJ5AsKSmvvUbF/S8Ac0xnIQqwvQA+xakjOziBZEnHvp2vjJ8184dhtUKAVPNlVURpJlgRDvdeu23D+kbTUXIFJxAD5i2srlHBvSq40HQWogBoheu+P7pp3ROmg+QaTiAGdOxr31kye+a9XU7oiAguBRAynYnIh/qP3dcxrn5LyxpeYWUAJxDDShYtnq9qfRWKetNZiPxCoE+rq3dEN62LmM6Sy1ggHlFSUX2FAt8CsNB0FiIP2wHg89wk9wZu5HpEa6TxyblT8y+Cyj8C4JNBiYY6IpAv6+H8BSwP7+AE4kGzyqqnhm39IiAf4P4I5TgF8IA6/Z9qa/nzHtNhaCgWiIfNq6hZ6ELvAXCl6SxEBjxnqfuxbc3rmkwHoeGxQHygpHLxUqjcyTcgUo6IQPGVaHPjCtNBaGQsEB8pKV9ypUL+FYKLTWchSjcFWkTx5Whz40PHl67I41ggPhQvErG+BmiV6SxEafASgK9FF8x6ECtWOKbDUOJYIP4lxRVLrgPkTgCLTIchSkIbVP4tev65P2Jx+BMLxP+sooqamwT4BCcS8olmhd5dNHXcg6tWreo3HYaSxwIJkJLKxUsV1keguIGPqSEPWgPo16ORtX/kHkcwsEACaF5Zdalr64cBuQ1Agek8lNP6IPgdgP+IbmxcbzoMpRcLJMDmVdTMUOADCv0QgGmm81BOeR3Q/xYndHdry+odpsNQZrBAcsDMiooJ43XizRCNTSRvMZ2HAq0Zovfa4/R/tq5bd9h0GMosFkiOmXPR4gtDrtyqKv/AqYTSpBuCP4irP2xtXrvSdBjKHhZIjioqqhsnk3r+GoLbAVzBfxdo7KQJih/m9crPN29e87rpNJR9/KZBmLtwyQViy22ieC+AM03nIU/rgOBB9Nv3RVtWbzQdhsxigdCb6uvtki07qlWlHpB3AZhhOhJ5QhcED0P1p+Od1x9raWnpNR2IvIEFQsMbUibWewCdbjoSZdVRAE8CWNGFI7/eG4kcMR2IvIcFQqMqLV2e74zvWAZIPRTvgOAM05koI7oBrIyVxngn/zctLaveMB2IvI0FQmNSV1cX2tFxdAkg16laVwL6V/z3yNdaIVgJFyvzeq1HuRlOY8H/8CklRWUXnyV2aBkE10GxDMBk05loREcBrFGVlW7I+cOOF9a9aDoQ+RcLhNKmrKwsr9uevNSFXg3I5YBW8pW8xjkQ3aSQpwTyqB7Ke7atbVW36VAUDCwQypiZFRUTJkjBRa5r14roUgA1AKaazhVwRwBsENHVqljT58ia9pbG10yHomBigVD21NfbxS++uhCWs1QFNQLUAphrOpafCbBLBQ2xsrBca82c6eENfEQ6ZQsLhIwqqaqajP5Qubr2hRC3DJAqAJUAJprO5jG9otiqgiZVaRFxX3TD4ee3Nz33qulglLtYIORFVunCmuI+WysEKBdFuQAlChTlwBLYIQBRBVotxSYVaRbpj7SeN3cb39pHXsMCIV+JTSzaXVCkllMMQZFAiwEpxrFyif1vkumMo+gSRZsCUViIAtImcKNO7Oc0FN3RvLrDdECiRLFAKFCKiurG9U/umRZ23GmuHZpmwTlT1JquotNEMU1Vp4nINAXCgBQe+5TmAxh/7MdyBqD28avHBsrojfiLkQD3+IQABY4K5PjVTNp57MVJchDqHlSRg+Ii/ldL3QOubR2w+/sOHs13D+5uauoy8g+GKAP+bwAAAP//9YqRfGeun80AAAAASUVORK5CYII=", + "use_cases": [ + "Open Source Threat Intel", + "Malware Analysis" + ], + "verified": false, + "last_verified_date": null, + "playbook_supported": false, + "max_confidence_level": 40, + "support_version": ">=6.8.0", + "subscription_link": "", + "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/external-import/mwdb", + "manager_supported": false, + "container_version": "rolling", + "container_image": "opencti/connector-mwdb", + "container_type": "EXTERNAL_IMPORT" + }, + { + "title": "NameShield", + "slug": "nameshield", + "description": "NameShield is registrar providing domain privacy and security services. This connector allows you to import your domain list from NameShield service into OpenCTI.", + "short_description": "NameShield connector to import your domain list from NameShield service.", + "logo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOEAAADhCAMAAAAJbSJIAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADDUExURel2eORmauQ9QOQAAOYID+YOFOIAAOQoLeYYHOYbH+UbH+YAAOVAReRfYudwceMjKeM+P+ZKTeVbX+VRVf////nv7vz///P09nN/jWx4i7C4wJmkrFxsfnqHk+zv8sfP1GJxgAwtTAAlRwAZQJGcpwAWPwAqSAAgQjpTaAAQOwAANhw7VoiSnxQxTxEvTgAjRipAWtPX2wAOPr7FzKett7bAx+Hl5jtOZgAeQ9zd4QAbRQAAOTpNZEpccTBGZEtbdQAAAHh5hrsAAABBdFJOU/////////////////////////////////////////////////////////////////////////////////////8AMFXsxwAAAAlwSFlzAAAOwwAADsMBx2+oZAAAABl0RVh0U29mdHdhcmUAUGFpbnQuTkVUIDUuMS4xMYoIFs4AAAC4ZVhJZklJKgAIAAAABQAaAQUAAQAAAEoAAAAbAQUAAQAAAFIAAAAoAQMAAQAAAAIAAAAxAQIAEQAAAFoAAABphwQAAQAAAGwAAAAAAAAAYAAAAAEAAABgAAAAAQAAAFBhaW50Lk5FVCA1LjEuMTEAAAMAAJAHAAQAAAAwMjMwAaADAAEAAAABAAAABaAEAAEAAACWAAAAAAAAAAIAAQACAAQAAABSOTgAAgAHAAQAAAAwMTAwAAAAAAY11HOyj3I7AAAQOUlEQVR4Xu2dCX+aytfH07CEYhvbhAeMu4hEq6jEjfSRXt//q/qfWVB20AEt/fhr740I6nw5Z84yYPpw+Nd1J6y+7oTV152w+roTVl93wurrTlh93Qmrr2sTPnyhD66m6xI+crwgPtGNK+mKhI8iL339Kn+VhNojfeoauhbhN5EDPE8Sz32jO0rXVQi/izUBjOeTLEuceJ0pWT7hsywKlCsknnu6wgku+yPqHJp88YIpyddKjzulEgJe0DljJPHiD3p4OSqP8CcOndkCS9bE7/RFJagkwheek7Ks5xMkkKdn+tKiVQbhC8cJucznF0zJOn19sSqc8EG4AI+onCxZMOFjLd/kS5Ik8kVPySIJf6RkhtyCKSkXOiULIyRVZyGSBE6i71qAiiGEsqwoPCKYkj/pe7OqAMIvcjC2SFyNg+l4RrKIFUSsF/oJTGImrIe8U6J1WJ3dquCtAnt1zkZYB+sFQaTTDCpiXsp8TaZvd6kYCONCpw/wcBDpk2yCUoBpSjIQijFVNUf3EXH0WTZJX5kiKwMhFwUMTZufCY3hmZKYOiwGwpjhB01YmBGZlnUYCJ/SZyFSQYS3moffooTh7iAUaC+U8Erf7iIxEL5G3DRCWMw8FJiKcQbC5+j4RbrLUzFeKjBV4gyEB56O4KQwYfSISySwDLJgQilYgBQD+JWnb3eZWAhrdAQ+8f5iuaB0+HcRfuVOc+ZFZG0vqGr0DS8TE2EcAe8VID/4ggAjdcR5KtqGMBdFsY4on4XqEybmAgn7VU4nlYSstbnbESZ3Rzj1R6u6GEncj+cvdS518f92kSaZUManPUey8NJL6oKAQI65UOUQkiSdXdFIR/OkvFeknj9PLIRyyolHtomW5mGdaqDnZIOHyohzxUKYNtFwrIkPtj75YkjGpL5cLIRpNsL9QNZalN86KYRsF1FZCKPtk08oPHzJKtt8lXrypJXYLtewEKYBkGiaEWtkXz2WXAGxNcBMhA+n6CBxtSCujJceMlKifJpiaXGZ7WoUC+Ep4fGP0EmErJArJQp0kSmtrOGZxlgMITnLPpMi4VSXlRJlgfsCEzo14bOVNGyEnmvRoB/MjzhQ5qjcBJ5PD0i+lHKJmAg9C9GQ+COIQ2INc4PhD0eXiInQy+h0DKG1Q7wAnhJB8upvsCG50BcuvLCbpubMXCJ553IVQohj6bdIRiNuSjcu100Jj0wSDxVamBCbNq08z6dbEmbUnTKKQKEccr5u6qVZ9sFjy2wwshReZj5TTIRZ2Q53BU90A0mGdlY+N3/ckvAxa45hI/rcVOK/ZqT3GLEtYrARZjbxocpNQNX4y5nrqIztIRthZrKTUUo8lTpkweXnebfaSIw32DIRvmR6XGAxwyuhz6tzJLb2kI0ws4cnXYdH5BHGXg1IFOtNQ0yED9lRAzmmdyLojPqe/Sq/GAMNG2GONV8cTWmskXl8YerMEoCxPSydkCxmeAUdz9eFc2scxpKGkTC7XiHdnUclwZ9zE/7fTkicjKVyuy1hjtZIQpEi12WoBDG2+OXbkLhp6qngOfhDH0d1W8I8UYMsZiTPPmzkw4OYZObbemmezJaxmHG8dpF0BGNrwUiY6761QOUW0QkgoZi7rQ1zLVHg6w5JR/ouSsQf4r8+dZHYCOt5CPGF3qQroL6KJb7KZW2eGAnzZQHsZwlLwz7C+CqX7fZZEBthaJU7QdgMj/GRxHdhKf504a6ZRWyEOe9cC1RuIZ0iTXzOZP5aCRthdguMhV0xFkAWjh18gsczf6eEjTDmJto4ySipxy5bkXSPJCe8FePVQ1bCvL0eSYnRWENKuh8iF/h9BAGxNsCshOEsLQl83OVcHE9i3BQDPqRWt75ge5kYCQN2kWVeej58EaPLhfi2pujqBY/TfXqDwlrSMBPScWB5Vxieo/6IjRVGIck8seQmujVhwEuPgT9awOCsFo6W+PisouHWhH6z+O6wi1bkeKABcGLxzBVw1taiSEJf1IvmyWhK5HGiy1w7/ZsI/VGvFjYNNrCvyKOpvpa5MHXrWOrv3QOZ67sYmovYJ0/Tlrh0dvfFeHMpqMBIExrMc/D7z8E7M0iq/xlzs7vEBzIq462XIFZCP0TYoZ79X6PF/D+9bZLqw+kDjkK/lOe7fKpwmNtDVsJgC0wj+xfueOJ9K9x4J82fSaneu83tFIyZ20NWwkA5Lcli/fnwXeJl7yvrIMlrffF6hYSvHRLDRMs7H46HyHhzKYiRMNwgHutS6WRHWlXLyImfuVpNIhngR7SZoD6ARa3NeHMpiJEw+UqZLHHHeUnmFZ57oEea6slxJ8mBb+FR/2f/vQqMhKlXEGXxmK7rNSkUasOpXhIEvwm9+3CYG2BWwtQGUZYl8YhVDxYnxygjgWPXOI6Tf4a+KUoyC3PCL5UQSRZjm3QZTCrwYq3GiU8JM4288+0JU7tXLIkXo9/jfa3VH19Tv95LKzxv8l6u8gkh5sQxZomWP5UgRBLSW4SH18e6yHE+HC8NBaLPRWIljNYl8UpYUHp9kvhaTYQkipzydMPzqze/b0/oL73TFLbhoyByNY6SncSRWuh089vtvTTp91qGFbYF1ABxNylCfgFnPRXsfLp35xErYcZ3JY4KR/2sLIMl1ZhrtgIIA/1DskJ3+saYLyqe9dIhVgGE0C3lMGOghM5xBz/0J8wFG1YRhPnM6Pt1gS/Z8UnmmZt7qmIIc5nxOOZ69vkQuIIGVhjh4fCUPWyJE2XI7DlCE1fgr6UtjPDwkGlGCC9QcGcGGTmjADpTxRGCGfMWOKmSCv4lpkUS5s//KRLY+6WgiiU8fMuTOFIkcQXk+KAKJmQ0I8+8wh1V4YSHx7zFeEQSx7zsFKPiCf2dwVkqLMcHVQbh4TX9t7HESmLvBONVCuEFs5E2hiWoJEIw4zlBtTQDgsoihAYpVwsIkiWO+fJLisojhGo832QsPMcHVSLh4SBlfxEP2kDWmw8zVCrh4TmzjxBKyPFBlUsI1XgtpZmAGXhqi8tS2YR4VS1JxSzEZKh8wsTfXS5dsNZ/ga5AmFDGlf9v6BBdhfDwLXJ5o8wcH9R1CKGMC3iqfMV/l+xahGDGE2PwenbJuhrh4SDQ2VhCH5+mKxIeXvBs5Jnv3D5P1ySE3ChItTL6+DRdl/DwUnqRFlEaoVKC/k+lDwoWHXKMrk2o/vOEZYkOOUZ3wqqIDjlGd8KqiA45Rjcj1BqNxluTbmCprXanSx+H1IOD+xrdwFI78JTv5XTIMbod4UDXhwbdwOqMzPdxAOOo5kTXfwXo1Sm8fEY3QHTIMbodoTW3FgHCX3PLmvToRlDNd9gVJFwOLL1qhBPLskY23QjqHyFsfSxG7fiSBwjn/wChspqtE2q6f4UwWVFCpVBCrasp2qplbLxAp9nrVmtFt/DeTauFY0S3abROU0ntrY21fbTL1tg5k8XY+EQbiFA3em39Y05zRHM2m3nIvcZ0NLHeVnTTT9h7m06c8XoJLy+McPxrtp6Oho4zxYPvzqaj30NnON3gvev/3+O9Q7erzkx4MOng52Ese3jWGe3pODf6YgDBZKAP+8CICOfLdxP+v1hu0f7GUH9f4tOh9Yc6BNa5OXLxHh+h2hiZ87k1WMD+4ghdfep8LPvuUJ8iu61/DYfjftvRh9hsa8dyJvv+H0dv7yYjt2+ZwxZ6XtkMddgcjxbOGm1+OsA30AeAhBIZIoS/A9i2dBcd0NGtwR49UFwInXSPhblOhH0HXgXvAgcUSTjQXeRZvd8OGrs6baIzrY3JwNaOuUdn2ngfOH0YhdomJ2K7MF00qG7b/EC2byxg1Lu+O3dMHY7HhAN93J/Czw/09pgQvfMMKAaDdhv4LBN/xpGwOQJAfdcfY/ziCBd98qDx3iYPsHrDIRrP2lniGanudeKenwsHDbjxTp5X1P/0MfzYD6wBGq62cfEPZMAxoNvgkA6qvzzCLXjuADmu2jYta4h8/EiITDdAz2zhxBRI6NAA0HLwGaXqjibYaX+j8YP6tAjTTJS3u2TYSD3HgfG6MNxpC88rNFZEiGOpCoNeID/2CMHtLQfPeBVhNOCBR2gP4VjyKYXGUterH4+E201z3ero+LRGCFVMaI/01aeN1ZsiQ6zBwayFuSehNIWwAc45h7q60ejswZouPOURNgF+iE9SsfkwTGiPf01AQ+sjhRAGM0RHoQMHQxR2UZAAH1t84ACZTIh809Kx0FTd+QiNhTV34NCSCXujhdXvzAxDTyecL4+ycMJYL0c4X+gmzRbJhHNIM/AHNAkTDtFblUu410mW2o7SCFdDfasdBaMEaT1jPIHxmxCwUrwUTdhVb4XU663QjLyul271BfrQLMKt44Q6IUIJycOaQzpJJmxBWjm+FuMEIw3OtmUS2guTfGw6ISQPf2pBJA1c6M30DMItTL+5iRC76z8W/DgRKlOUDsHl1R7y9pIIuyYeDzrX+EMTCCHoeyOw8SzcjPThwO27ECkRezKh0oGSZu6gQ50BMSYQkv4QBeT5wu3vnWIzfoBQ6evmrGc3XYd+aAIhFHsLd2P3mu13fMASmQbXW/MRDDuFUB1D1UlLMwc7wpFQaQNaCVXbxCP8QGPtLh0U5X5bJl46WU/GZIa1Pyjh+y9MqLadBYqGjrNH3tkDYnMwHwwW7yh3aKZp4lOiwoMRJnw3dVKXKm+Ojg41F4s2zp7NkUk+DHYNobQd6Dq8yimMsNOm1UmzjesyzXCXU2iC2m008lW7QwgNepjaJ8OCXf39dOl2vKjxabT3y71r4KFqb/0+foHahweIuQUPUAGDZHfc5XLfJiUQ+gw4htSA0D3tlvt+rwFHk9mCRYccozyEMdLICc0UNI8EnwoSB32UqeRD1Zg9dMgxupDwrxMdcoyuTxiwaWGiQ47RlQi3hrfI1GwqrZCLr8Muf/LCzxlZSAhq1VO6IUelQ47RdQg/d6tGR1FVCBwQdwAWPfIms/0L8mUXHmvoSfSfARFoixC2456hkuPQTqgTwAe2yupT6ffQ4xMmHXKMrkPofkKOUTq7Pytl1+2OlZXldpSNO8bB110bysrd2fbYXSn9t6W2Nf/rGu0xcG3RylDT3TWVzX5nd9vKVOmZhuJqvYWruN3NKV3QIcfoOoQmWKqvuGprpViK3VBmK7uhTo0OSg4rt/mmtNo9IN4omz/rnQ0cylsDZxx731Ito9NRLHDy1Uz5g+yr7RUNSo+Ovft7bDi1tTH8Vdqf2/+UdUvpb9fN7tTeIJd0jZmrbHu6trWtbathr9TuUlU+V1NgsrVmBx3XVQfgnEZz1YC3ULZwfFtVmuMy8+GZsnfggN2O0tfslmL0lIZm2Iqx64ANbKhrGmrDhefHM+g84EAVagj0E4qA3ZuGnlfhYEPp/YHKoKGhl2jjFlTo5M2x6JBjdB3CMqS1cUFPRYcco+oSdr1iEIsOOUbVJQyKDjlGd8KqiA45RnfCqogOOUZphP+G7oTV152w+roTVl93wurrTlh93Qmrrzth9XUnrL7uhNXXnbD6uhNWX3fC6utOWH3dCauvO2H1dSesug6H/wG1r71M9ZrUQgAAAABJRU5ErkJggg==", + "use_cases": [ + "Legitimate use case" + ], + "verified": true, + "last_verified_date": null, + "playbook_supported": false, + "max_confidence_level": 50, + "support_version": ">=6.9.0", + "subscription_link": null, + "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/external-import/nameshield", + "manager_supported": false, + "container_version": "rolling", + "container_image": "opencti/connector-nameshield", + "container_type": "EXTERNAL_IMPORT" + }, + { + "title": "NSFOCUS Threat Intelligence", + "slug": "nti", "description": "The OpenCTI NTI Connector can be used to import knowledge from NSFOCUS Threat Intelligence feed.", "short_description": "The OpenCTI NTI Connector can be used to import knowledge from NSFOCUS Threat Intelligence feed.", "logo": "data:image/png;base64,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", @@ -5506,6 +6222,25 @@ "container_image": "opencti/connector-opencsam", "container_type": "EXTERNAL_IMPORT" }, + { + "title": "OpenCTI Stream", + "slug": "opencti-stream", + "description": "Subscribe to an OpenCTI live stream and forward each create/update event as a single STIX 2.1 bundle. Supports three output modes via the standard connector helper settings: RabbitMQ queue (default, for in-platform fan-out and applicant impersonation), local directory and S3 bucket. Directory and S3 modes pair naturally with the `diode-import` connector to replicate data between OpenCTI instances or air-gapped environments. The originating user (`origin.user_id` of each stream event) is propagated as the bundle `applicant_id`, so it can be remapped on the target instance via `DIODE_IMPORT_APPLICANT_MAPPINGS`.", + "short_description": "Forward events from an OpenCTI live stream to a queue, directory or S3 bucket as STIX 2.1 bundles.", + "logo": "data:image/png;base64,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", + "use_cases": [], + "verified": true, + "last_verified_date": "2026-05-07", + "playbook_supported": false, + "max_confidence_level": 50, + "support_version": ">=6.8.12", + "subscription_link": null, + "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/external-import/opencti-stream", + "manager_supported": false, + "container_version": "rolling", + "container_image": "opencti/connector-opencti-stream", + "container_type": "EXTERNAL_IMPORT" + }, { "title": "OpenCTI Datasets", "slug": "opencti", @@ -5546,27 +6281,6 @@ "container_image": "opencti/connector-orange-cyberdefense-v3", "container_type": "EXTERNAL_IMPORT" }, - { - "title": "Orange Cyberdefense", - "slug": "orange-cyberdefense", - "description": "This connector allows to ingest into OpenCTI the Cyber Threat Intelligence provided by the CERT Orange CyberDefense.\nDepending on its configuration and your subscription level it will ingest Indicators, Reports, Vulnerabilities, Intrusion Set, Malwares, ...", - "short_description": "This connector allows to ingest into OpenCTI the Cyber Threat Intelligence provided by the CERT Orange Cyberdefense.", - "logo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAB9AAAAMaCAYAAADeBN24AAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAABb3JOVAHPoneaAACAAElEQVR42uz9W3Ac173ne/7WyqxCsQhQRYCkKZK2Yeti+Q5vb7dnH0eHoZiYOI/mfp8IgxP9Mra3RfVD98xDN615OjPRcSjfdnd0xAzpiPMu+uk8nHOCcPe2JcveNrwvtizR3rQFXkyBcIkEioXKzP+ah8ysKhSuvIBVJL8fBQTULWvlbVUx/+v/XxIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAWvj/AwaN+2CDjJq0AAAAtGVYSWZJSSoACAAAAAYAEgEDAAEAAAABAAAAGgEFAAEAAABWAAAAGwEFAAEAAABeAAAAKAEDAAEAAAACAAAAEwIDAAEAAAABAAAAaYcEAAEAAABmAAAAAAAAAEgAAAABAAAASAAAAAEAAAAGAACQBwAEAAAAMDIxMAGRBwAEAAAAAQIDAACgBwAEAAAAMDEwMAGgAwABAAAA//8AAAKgBAABAAAA0AcAAAOgBAABAAAAGgMAAAAAAABaFhEoAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDI1LTEwLTE3VDEwOjE4OjM0KzAwOjAwbbvE8AAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyNS0xMC0xN1QxMDoxODozNCswMDowMBzmfEwAAAAodEVYdGRhdGU6dGltZXN0YW1wADIwMjUtMTAtMTdUMTA6MTg6MzUrMDA6MDDthFYnAAAAFXRFWHRleGlmOkNvbG9yU3BhY2UANjU1MzUzewBuAAAAIHRFWHRleGlmOkNvbXBvbmVudHNDb25maWd1cmF0aW9uAC4uLmryoWQAAAATdEVYdGV4aWY6RXhpZk9mZnNldAAxMDJzQimnAAAAFXRFWHRleGlmOkV4aWZWZXJzaW9uADAyMTC4dlZ4AAAAGXRFWHRleGlmOkZsYXNoUGl4VmVyc2lvbgAwMTAwEtQorAAAABl0RVh0ZXhpZjpQaXhlbFhEaW1lbnNpb24AMjAwMNUrX2oAAAAYdEVYdGV4aWY6UGl4ZWxZRGltZW5zaW9uADc5NAkfovkAAAAXdEVYdGV4aWY6WUNiQ3JQb3NpdGlvbmluZwAxrA+AYwAAAABJRU5ErkJggg==", - "use_cases": [ - "Commercial Threat Intel" - ], - "verified": true, - "last_verified_date": null, - "playbook_supported": false, - "max_confidence_level": 55, - "support_version": ">=5.5.4", - "subscription_link": null, - "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/external-import/orange-cyberdefense", - "manager_supported": false, - "container_version": "rolling", - "container_image": "opencti/connector-orange-cyberdefense", - "container_type": "EXTERNAL_IMPORT" - }, { "title": "Pgl Yoyo", "slug": "pgl-yoyo", @@ -5857,76 +6571,45 @@ "support_version": ">= 6.5.1", "subscription_link": "https://www.proofpoint.com/us/resources/data-sheets/targeted-attack-protection", "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/external-import/proofpoint-tap", - "manager_supported": false, - "container_version": "rolling", - "container_image": "opencti/connector-proofpoint-tap", - "container_type": "EXTERNAL_IMPORT" - }, - { - "title": "Ransomware.live", - "slug": "ransomware-live", - "description": "Ransomware.live is a specialized threat intelligence service focused on monitoring and reporting ransomware activities and incidents. By providing real-time data on ransomware campaigns, including attack vectors and ransom demands, RansomwareLive aids organizations in understanding and defending against this pervasive threat.\n\nIntegrating Ransomware.live with OpenCTI allows for the modeling of various attacks and ransomware group claims, as well as their victims, enabling tracking and alerts. This enhances the threat intelligence platform's capabilities with timely and detailed insights into the latest ransomware threats.", - "short_description": "Ransomware.live is a threat intelligence service focused on ransomware activities, providing real-time insights into ransomware campaigns.", - "logo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABAAAAAQACAYAAAB/HSuDAADBYmNhQlgAAMFianVtYgAAAB5qdW1kYzJwYQARABCAAACqADibcQNjMnBhAAAANxNqdW1iAAAAR2p1bWRjMm1hABEAEIAAAKoAOJtxA3VybjpjMnBhOjU3ZWNhZGFjLWMyZmEtNDg4Zi05MWVjLTJkM2I2YjAzZTg1ZAAAAAHhanVtYgAAAClqdW1kYzJhcwARABCAAACqADibcQNjMnBhLmFzc2VydGlvbnMAAAABBWp1bWIAAAApanVtZGNib3IAEQAQgAAAqgA4m3EDYzJwYS5hY3Rpb25zLnYyAAAAANRjYm9yoWdhY3Rpb25zgqNmYWN0aW9ubGMycGEuY3JlYXRlZG1zb2Z0d2FyZUFnZW50v2RuYW1lZkdQVC00b/9xZGlnaXRhbFNvdXJjZVR5cGV4Rmh0dHA6Ly9jdi5pcHRjLm9yZy9uZXdzY29kZXMvZGlnaXRhbHNvdXJjZXR5cGUvdHJhaW5lZEFsZ29yaXRobWljTWVkaWGiZmFjdGlvbm5jMnBhLmNvbnZlcnRlZG1zb2Z0d2FyZUFnZW50v2RuYW1lak9wZW5BSSBBUEn/AAAAq2p1bWIAAAAoanVtZGNib3IAEQAQgAAAqgA4m3EDYzJwYS5oYXNoLmRhdGEAAAAAe2Nib3KlamV4Y2x1c2lvbnOBomVzdGFydBghZmxlbmd0aBk3RWRuYW1lbmp1bWJmIG1hbmlmZXN0Y2FsZ2ZzaGEyNTZkaGFzaFgg5OQo6E65wituxcmRjfhJthdXW/M/Xil4WwlVTIcGiR5jcGFkSAAAAAAAAAAAAAAB5mp1bWIAAAAnanVtZGMyY2wAEQAQgAAAqgA4m3EDYzJwYS5jbGFpbS52MgAAAAG3Y2JvcqZqaW5zdGFuY2VJRHgseG1wOmlpZDpiYjFkZTgyZS1iMjBjLTRlN2ItODQyYy0zMjJkNGMyNTg4ZDh0Y2xhaW1fZ2VuZXJhdG9yX2luZm+/ZG5hbWVnQ2hhdEdQVG9vcmcuY2FpLmMycGFfcnNmMC40OS41/2lzaWduYXR1cmV4TXNlbGYjanVtYmY9L2MycGEvdXJuOmMycGE6NTdlY2FkYWMtYzJmYS00ODhmLTkxZWMtMmQzYjZiMDNlODVkL2MycGEuc2lnbmF0dXJl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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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ofafegOUeLr3oFyDjdj0/U/40rC9miOS8ODzjPXHFMpQKst370FqJUlufegpRKctxnvQWolZ5/emVYhab3oKsRmb3oCw0T+9BViVJ/egVieO496CXElFx70C5RwuPegXKOFx70C5SRbj3pByki3PvQLlJRde9BPKKbn3oDlGm496B8o4XHvQLlJFn96AsOE/vQKwvn+9AWHCb3phYkWb3pCsSCX3oFYkWSgViRXoFYlVqCbEqmmIlWgRKtBI6gAoASgBRQAtAAQfSgBpFABigBCKQBTAKAFLBRlv070hAjq3AyD6HvRcLjqYC0AGKQBgnoCaAGkqOrKD6EgGi4xjSJ/e5/3T/hRcVyNiCMg8UFIryNigpIhaT3oKsQtN70FWIWm96B2Inn96B2IHn96CrELXHvQOxGbj3oHyifaPegOUPtPvQHKKLn3oDlA3XvQHKRNc+9A+UgkufemUokD3HvQPlKzz+9BViBpvegqxG03vQOxGZ/egdiFbj3oK5SRbj3oFykyXFAnEkFx70C5RwuPegXKPFxQLlHi596A5R4ufegXKSC596Bcov2n3oDlFFx70Byjxce9AuUkW496QuUeLj3oDlHif3oFykizUCsTJLQKxMklArEyPQTYnR6CWixGaCWWEoJLCUyWOkYjABI78cUjNsRZCvUkj0PNLYEywwwcVRQ2gAFAA7FYyR16D+VJiK2cHjr69/wA6RN2TxMWTnqDj600UmMlchyAeBjikJsWNyxw3X16UxpjjQMUCgCGRtzZ7DgUiGLEMyL7ZP9P60Ah7S4YgLkDjOadxt2GtK2MDA98c0guR73/vv/30aBXYjfN975v97mgLi84oEIORkDIouO1xjtgHnk0GkY2KksnNM1SKkktBaRXkm96CrFaSf3oKSIHnoKsQPP70D5SBrigqxE1xQOw37R70w5RPtPvQHKJ9p96A5RDc+9A+UY1z70BykT3HvQVykD3FA+Uhef3oKsRNP70DsRNP70DsM8+gdiATe9BVh6TUCsSrP70CsSCf3oFYcJ/egLDxP70CsPE/vQKw4T0BYeJ/egVh4noCwomoFYes3vQFiRZvegViRZvegViVZvegVidJfegmxYSSgVixG9IlosxtTIaLUZpEstxdqZDLcdBDLMYoIY1+XY++Py4/pUmb3FjGXX6//XoBblk1RY2gAFADZ/8AVj64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oAKACgAoAKAP/9kAAAXuanVtYgAAACxqdW1kY2JvcgARABCAAACqADibcQNjMnBhLmluZ3JlZGllbnQudjMAAAAFumNib3KobHJlbGF0aW9uc2hpcGtjb21wb25lbnRPZmhkYzp0aXRsZWlpbWFnZS5wbmdpZGM6Zm9ybWF0Y3BuZ3F2YWxpZGF0aW9uUmVzdWx0c6FuYWN0aXZlTWFuaWZlc3SjZ3N1Y2Nlc3OFo2Rjb2RleB1jbGFpbVNpZ25hdHVyZS5pbnNpZGVWYWxpZGl0eWN1cmx4TXNlbGYjanVtYmY9L2MycGEvdXJuOmMycGE6NTdlY2FkYWMtYzJmYS00ODhmLTkxZWMtMmQzYjZiMDNlODVkL2MycGEuc2lnbmF0dXJla2V4cGxhbmF0aW9udWNsYWltIHNpZ25hdHVyZSB2YWxpZKNkY29kZXgYY2xhaW1TaWduYXR1cmUudmFsaWRhdGVkY3VybHhNc2VsZiNqdW1iZj0vYzJwYS91cm46YzJwYTo1N2VjYWRhYy1jMmZhLTQ4OGYtOTFlYy0yZDNiNmIwM2U4NWQvYzJwYS5zaWduYXR1cmVrZXhwbGFuYXRpb251Y2xhaW0gc2lnbmF0dXJlIHZhbGlko2Rjb2RleBlhc3NlcnRpb24uaGFzaGVkVVJJLm1hdGNoY3VybHhec2VsZiNqdW1iZj0vYzJwYS91cm46YzJwYTo1N2VjYWRhYy1jMmZhLTQ4OGYtOTFlYy0yZDNiNmIwM2U4NWQvYzJwYS5hc3NlcnRpb25zL2MycGEuYWN0aW9ucy52MmtleHBsYW5hdGlvbng+aGFzaGVkIHVyaSBtYXRjaGVkOiBzZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLmFjdGlvbnMudjKjZGNvZGV4GWFzc2VydGlvbi5oYXNoZWRVUkkubWF0Y2hjdXJseF1zZWxmI2p1bWJmPS9jMnBhL3VybjpjMnBhOjU3ZWNhZGFjLWMyZmEtNDg4Zi05MWVjLTJkM2I2YjAzZTg1ZC9jMnBhLmFzc2VydGlvbnMvYzJwYS5oYXNoLmRhdGFrZXhwbGFuYXRpb254PWhhc2hlZCB1cmkgbWF0Y2hlZDogc2VsZiNqdW1iZj1jMnBhLmFzc2VydGlvbnMvYzJwYS5oYXNoLmRhdGGjZGNvZGV4GGFzc2VydGlvbi5kYXRhSGFzaC5tYXRjaGN1cmx4XXNlbGYjanVtYmY9L2MycGEvdXJuOmMycGE6NTdlY2FkYWMtYzJmYS00ODhmLTkxZWMtMmQzYjZiMDNlODVkL2MycGEuYXNzZXJ0aW9ucy9jMnBhLmhhc2guZGF0YWtleHBsYW5hdGlvbm9kYXRhIGhhc2ggdmFsaWRtaW5mb3JtYXRpb25hbIBnZmFpbHVyZYBqaW5zdGFuY2VJRHgseG1wOmlpZDpjMjM2YTljOC0yYTk5LTRmM2UtOWI0Zi00Y2U3YzYwMDRjMjBuYWN0aXZlTWFuaWZlc3SjY3VybHg+c2VsZiNqdW1iZj0vYzJwYS91cm46YzJwYTo1N2VjYWRhYy1jMmZhLTQ4OGYtOTFlYy0yZDNiNmIwM2U4NWRjYWxnZnNoYTI1NmRoYXNoWCBTcyxHnAaUMjImCR3puosTnxjqw68IwzXHmPwKUJJa125jbGFpbVNpZ25hdHVyZaNjdXJseE1zZWxmI2p1bWJmPS9jMnBhL3VybjpjMnBhOjU3ZWNhZGFjLWMyZmEtNDg4Zi05MWVjLTJkM2I2YjAzZTg1ZC9jMnBhLnNpZ25hdHVyZWNhbGdmc2hhMjU2ZGhhc2hYIPGQNh+PoL1P8JNF5vNRnaouSStkTYawtNSULYYqivKUaXRodW1ibmFpbKJjdXJseDlzZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLnRodW1ibmFpbC5pbmdyZWRpZW50LmpwZWdkaGFzaFggxSRdxvUV8uTXp+pqHolIs2rxRa5mG4YzpllKXKTArHYAAACtanVtYgAAAChqdW1kY2JvcgARABCAAACqADibcQNjMnBhLmhhc2guZGF0YQAAAAB9Y2JvcqVqZXhjbHVzaW9uc4GiZXN0YXJ0GCFmbGVuZ3RoGcFuZG5hbWVuanVtYmYgbWFuaWZlc3RjYWxnZnNoYTI1NmRoYXNoWCDk5CjoTrnCK27FyZGN+Em2F1db8z9eKXhbCVVMhwaJHmNwYWRKAAAAAAAAAAAAAAAAAlBqdW1iAAAAJ2p1bWRjMmNsABEAEIAAAKoAOJtxA2MycGEuY2xhaW0udjIAAAACIWNib3Kmamluc3RhbmNlSUR4LHhtcDppaWQ6MWE1M2JiM2ItMDBmNi00NjljLTk1NjMtYWEyZGY4MDAzOTM4dGNsYWltX2dlbmVyYXRvcl9pbmZvv2RuYW1lZ0NoYXRHUFRvb3JnLmNhaS5jMnBhX3JzZjAuNDkuNf9pc2lnbmF0dXJleE1zZWxmI2p1bWJmPS9jMnBhL3VybjpjMnBhOmM2MzQyNGE3LTQ2MjAtNDZhNi04ZWYyLTM0YTEzYzk1ZTRiMS9jMnBhLnNpZ25hdHVyZXJjcmVhdGVkX2Fzc2VydGlvbnODomN1cmx4OXNlbGYjanVtYmY9YzJwYS5hc3NlcnRpb25zL2MycGEudGh1bWJuYWlsLmluZ3JlZGllbnQuanBlZ2RoYXNoWCDFJF3G9RXy5Nen6moeiUizavFFrmYbhjOmWUpcpMCsdqJjdXJseC1zZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLmluZ3JlZGllbnQudjNkaGFzaFgg4QNR3XjT25G2KalibW0+hyYwRhXRtTtVMRD3De7YcLGiY3VybHgpc2VsZiNqdW1iZj1jMnBhLmFzc2VydGlvbnMvYzJwYS5oYXNoLmRhdGFkaGFzaFggUtwpC3cBV0MIDpS/ZVQkFct/qp/YU4q+eVPRKx02hdxoZGM6dGl0bGVpaW1hZ2UucG5nY2FsZ2ZzaGEyNTYAADL9anVtYgAAAChqdW1kYzJjcwARABCAAACqADibcQNjMnBhLnNpZ25hdHVyZQAAADLNY2JvctKEWQfBogEmGCGCWQM3MIIDMzCCAhugAwIBAgIUbq4oo+7FuOQqNvod5kEVrmIWGzswDQYJKoZIhvcNAQEMBQAwSjEaMBgGA1UEAwwRV2ViQ2xhaW1TaWduaW5nQ0ExDTALBgNVBAsMBExlbnMxEDAOBgNVBAoMB1RydWVwaWMxCzAJBgNVBAYTAlVTMB4XDTI1MDExMzIwMzY0NloXDTI2MDExMzIwMzY0NVowVjELMAkGA1UEBhMCVVMxDzANBgNVBAoMBk9wZW5BSTEQMA4GA1UECwwHQ2hhdEdQVDEkMCIGA1UEAwwbVHJ1ZXBpYyBMZW5zIENMSSBpbiBDaGF0R1BUMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEVh14xypQD33uBMgU9aukdnuL7dOjIz3VpkIz2UwpCUIxMAhLpTWV6JHjLvDamqOsAQruAtmJXwzVLbsuFpo3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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPZYQMnOr7lYhoCN7j9ihQfbaiLB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", - "use_cases": [ - "Open Source Threat Intel" - ], - "verified": true, - "last_verified_date": "2025-07-25", - "playbook_supported": false, - "max_confidence_level": 50, - "support_version": ">= 6.7.5", - "subscription_link": "https://www.ransomware.live", - "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/oob/connector_manager/external-import/ransomwarelive", "manager_supported": true, "container_version": "rolling", - "container_image": "opencti/connector-ransomwarelive", + "container_image": "opencti/connector-proofpoint-tap", "container_type": "EXTERNAL_IMPORT", "config_schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://www.filigran.io/connectors/ransomwarelive_config.schema.json", + "$id": "https://www.filigran.io/connectors/proofpoint-tap_config.schema.json", "type": "object", "properties": { "OPENCTI_URL": { - "description": "The OpenCTI platform URL.", + "description": "The base URL of the OpenCTI instance.", "format": "uri", "maxLength": 2083, "minLength": 1, "type": "string" }, "OPENCTI_TOKEN": { - "description": "The token of the user who represents the connector in the OpenCTI platform.", + "description": "The API token to connect to OpenCTI.", "type": "string" }, "CONNECTOR_NAME": { - "default": "Ransomware Connector", - "description": "Name of the connector.", + "default": "ProofPointTAP", + "description": "The name of the connector.", "type": "string" }, "CONNECTOR_SCOPE": { "default": [ - "identity", - "attack-pattern", - "course-of-action", - "intrusion-set", - "malware", - "tool", "report" ], - "description": "The scope or type of data the connector is importing, either a MIME type or Stix Object (for information only).", + "description": "The type of data the connector is importing, i.e. the type of Stix Objects (for information only).", "items": { "type": "string" }, + "minItems": 1, "type": "array" }, - "CONNECTOR_TYPE": { - "default": "EXTERNAL_IMPORT", - "description": "Should always be set to EXTERNAL_IMPORT for this connector.", - "type": "string" - }, "CONNECTOR_LOG_LEVEL": { "default": "error", - "description": "Determines the verbosity of the logs.", + "description": "The minimum level of logs to display.", "enum": [ "debug", "info", @@ -5936,73 +6619,344 @@ ], "type": "string" }, + "CONNECTOR_TYPE": { + "const": "EXTERNAL_IMPORT", + "default": "EXTERNAL_IMPORT", + "type": "string" + }, "CONNECTOR_DURATION_PERIOD": { - "default": "PT10M", - "description": "Duration between two scheduled runs of the connector (ISO 8601 format).", + "default": "PT12H", + "description": "The period of time to await between two runs of the connector.", "format": "duration", "type": "string" }, - "CONNECTOR_PULL_HISTORY": { - "default": false, - "description": "Whether to pull historic data. It is not recommended to set it to true as there will a large influx of data", - "type": "boolean" - }, - "CONNECTOR_HISTORY_START_YEAR": { - "default": 2023, - "description": "The year to start from", - "exclusiveMinimum": 0, - "type": "integer" - }, - "CONNECTOR_CREATE_THREAT_ACTOR": { - "default": false, - "description": "Whether to create a Threat Actor object", - "type": "boolean" - } - }, - "required": [ - "OPENCTI_URL", - "OPENCTI_TOKEN" - ], - "additionalProperties": true - } - }, - { - "title": "Recorded Future", - "slug": "recorded-future", - "description": "Recorded Future is a cybersecurity company that specializes in providing real-time threat intelligence to help organizations anticipate, identify, and mitigate cyber threats. By aggregating and analyzing data from diverse sources, Recorded Future can identify patterns, trends, and indicators of compromise (IoCs) that help organizations understand and mitigate cyber threats more effectively.\n\nThis connector imports Recorded Future Analyst Notes, the Risk Lists (IP, URL, Domain Name and Hash), Malware and Threat Actors from Threats Maps, converts to STIX2 and imports them into OpenCTI at regular intervals.\n\nHave a look at this connector and its extensive configuration to precisely select the data you need to import based on your use case.", - "short_description": "Recorded Future is a cybersecurity company that specializes in providing real-time threat intelligence to help organizations anticipate, identify, and mitigate cyber threats.", - "logo": "data:image/png;base64,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", - "use_cases": [ - "Commercial Threat Intel" - ], - "verified": true, - "last_verified_date": null, - "playbook_supported": false, - "max_confidence_level": 55, - "support_version": ">= 6.5.1", - "subscription_link": "https://www.recordedfuture.com/get-started", - "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/external-import/recorded-future", - "manager_supported": true, - "container_version": "rolling", - "container_image": "opencti/connector-recorded-future", - "container_type": "EXTERNAL_IMPORT", - "config_schema": { - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://www.filigran.io/connectors/recorded-future_config.schema.json", - "type": "object", - "properties": { - "OPENCTI_URL": { - "description": "The OpenCTI platform URL.", + "PROOFPOINT_TAP_API_BASE_URL": { + "default": "https://tap-api-v2.proofpoint.com/", + "description": "Proofpoint API base URL.", "format": "uri", "maxLength": 2083, "minLength": 1, "type": "string" }, - "OPENCTI_TOKEN": { - "description": "The token of the user who represents the connector in the OpenCTI platform.", - "type": "string" - }, - "CONNECTOR_NAME": { + "PROOFPOINT_TAP_API_PRINCIPAL_KEY": { + "description": "Proofpoint API principal key for authentication.", + "format": "password", + "type": "string", + "writeOnly": true + }, + "PROOFPOINT_TAP_API_SECRET_KEY": { + "description": "Proofpoint API secret key for authentication.", + "format": "password", + "type": "string", + "writeOnly": true + }, + "PROOFPOINT_TAP_API_TIMEOUT": { + "default": "PT30S", + "description": "Timeout duration for API requests.", + "format": "duration", + "type": "string" + }, + "PROOFPOINT_TAP_API_BACKOFF": { + "default": "PT5S", + "description": "Backoff duration for API requests.", + "format": "duration", + "type": "string" + }, + "PROOFPOINT_TAP_API_RETRIES": { + "default": 3, + "description": "Number of retries for API requests.", + "type": "integer" + }, + "PROOFPOINT_TAP_MARKING_DEFINITION": { + "default": "amber+strict", + "description": "Default TLP level of the imported entities.", + "enum": [ + "white", + "green", + "amber", + "amber+strict", + "red" + ], + "type": "string" + }, + "PROOFPOINT_TAP_EXPORT_CAMPAIGNS": { + "default": true, + "description": "Whether to export Proofpoint campaigns and import them into OpenCTI.", + "type": "boolean" + }, + "PROOFPOINT_TAP_EXPORT_EVENTS": { + "default": false, + "description": "Whether to export Proofpoint events and import them into OpenCTI.", + "type": "boolean" + }, + "PROOFPOINT_TAP_EVENTS_TYPE": { + "default": "issues", + "description": "The type of events to export (`PROOFPOINT_TAP_EXPORT_EVENTS` must be enabled).", + "enum": [ + "all", + "issues", + "messages_blocked", + "messages_delivered", + "clicks_blocked", + "clicks_permitted" + ], + "type": "string" + }, + "TAP_API_BASE_URL": { + "default": "https://tap-api-v2.proofpoint.com/", + "description": "Use PROOFPOINT_TAP_API_BASE_URL instead. (removal scheduled for 2026-08-27)", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string", + "deprecated": true + }, + "TAP_API_PRINCIPAL_KEY": { + "description": "Use PROOFPOINT_TAP_API_PRINCIPAL_KEY instead. (removal scheduled for 2026-08-27)", + "format": "password", + "type": "string", + "writeOnly": true, + "deprecated": true + }, + "TAP_API_SECRET_KEY": { + "description": "Use PROOFPOINT_TAP_API_SECRET_KEY instead. (removal scheduled for 2026-08-27)", + "format": "password", + "type": "string", + "writeOnly": true, + "deprecated": true + }, + "TAP_API_TIMEOUT": { + "default": "PT30S", + "description": "Use PROOFPOINT_TAP_API_TIMEOUT instead. (removal scheduled for 2026-08-27)", + "format": "duration", + "type": "string", + "deprecated": true + }, + "TAP_API_BACKOFF": { + "default": "PT5S", + "description": "Use PROOFPOINT_TAP_API_BACKOFF instead. (removal scheduled for 2026-08-27)", + "format": "duration", + "type": "string", + "deprecated": true + }, + "TAP_API_RETRIES": { + "default": 3, + "description": "Use PROOFPOINT_TAP_API_RETRIES instead. (removal scheduled for 2026-08-27)", + "type": "integer", + "deprecated": true + }, + "TAP_MARKING_DEFINITION": { + "default": "amber+strict", + "description": "Use PROOFPOINT_TAP_MARKING_DEFINITION instead. (removal scheduled for 2026-08-27)", + "enum": [ + "white", + "green", + "amber", + "amber+strict", + "red" + ], + "type": "string", + "deprecated": true + }, + "TAP_EXPORT_CAMPAIGNS": { + "default": true, + "description": "Use PROOFPOINT_TAP_EXPORT_CAMPAIGNS instead. (removal scheduled for 2026-08-27)", + "type": "boolean", + "deprecated": true + }, + "TAP_EXPORT_EVENTS": { + "default": false, + "description": "Use PROOFPOINT_TAP_EXPORT_EVENTS instead. (removal scheduled for 2026-08-27)", + "type": "boolean", + "deprecated": true + }, + "TAP_EVENTS_TYPE": { + "default": "issues", + "description": "Use PROOFPOINT_TAP_EVENTS_TYPE instead. (removal scheduled for 2026-08-27)", + "enum": [ + "all", + "issues", + "messages_blocked", + "messages_delivered", + "clicks_blocked", + "clicks_permitted" + ], + "type": "string", + "deprecated": true + } + }, + "required": [ + "OPENCTI_URL", + "OPENCTI_TOKEN", + "PROOFPOINT_TAP_API_PRINCIPAL_KEY", + "PROOFPOINT_TAP_API_SECRET_KEY" + ], + "additionalProperties": true + } + }, + { + "title": "RansomFeed", + "slug": "ransomfeed", + "description": "Imports public ransomware claims from the RansomFeed API (https://ransomfeed.it). Each claim is converted into STIX 2.1 objects describing the victim (Identity), the ransomware group (IntrusionSet), the targeted country (Location), the leak-site domain (Domain-Name) and an optional file-hash Indicator, all grouped under a Report. Bundles are pushed to OpenCTI through the standard RabbitMQ ingest queue.", + "short_description": "Imports ransomware claims from the RansomFeed API as STIX 2.1 Reports.", + "logo": "data:image/png;base64,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", + "use_cases": [ + "Threat Intelligence", + "Open Source Threat Intel" + ], + "verified": false, + "last_verified_date": null, + "playbook_supported": false, + "max_confidence_level": 70, + "support_version": ">=6.0.0", + "subscription_link": "https://ransomfeed.it", + "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/external-import/ransomfeed", + "manager_supported": false, + "container_version": "rolling", + "container_image": "opencti/connector-ransomfeed", + "container_type": "EXTERNAL_IMPORT" + }, + { + "title": "Ransomware.live", + "slug": "ransomware-live", + "description": "Ransomware.live is a specialized threat intelligence service focused on monitoring and reporting ransomware activities and incidents. By providing real-time data on ransomware campaigns, including attack vectors and ransom demands, RansomwareLive aids organizations in understanding and defending against this pervasive threat.\n\nIntegrating Ransomware.live with OpenCTI allows for the modeling of various attacks and ransomware group claims, as well as their victims, enabling tracking and alerts. This enhances the threat intelligence platform's capabilities with timely and detailed insights into the latest ransomware threats.", + "short_description": "Ransomware.live is a threat intelligence service focused on ransomware activities, providing real-time insights into ransomware campaigns.", + "logo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABAAAAAQACAYAAAB/HSuDAADBYmNhQlgAAMFianVtYgAAAB5qdW1kYzJwYQARABCAAACqADibcQNjMnBhAAAANxNqdW1iAAAAR2p1bWRjMm1hABEAEIAAAKoAOJtxA3VybjpjMnBhOjU3ZWNhZGFjLWMyZmEtNDg4Zi05MWVjLTJkM2I2YjAzZTg1ZAAAAAHhanVtYgAAAClqdW1kYzJhcwARABCAAACqADibcQNjMnBhLmFzc2VydGlvbnMAAAABBWp1bWIAAAApanVtZGNib3IAEQAQgAAAqgA4m3EDYzJwYS5hY3Rpb25zLnYyAAAAANRjYm9yoWdhY3Rpb25zgqNmYWN0aW9ubGMycGEuY3JlYXRlZG1zb2Z0d2FyZUFnZW50v2RuYW1lZkdQVC00b/9xZGlnaXRhbFNvdXJjZVR5cGV4Rmh0dHA6Ly9jdi5pcHRjLm9yZy9uZXdzY29kZXMvZGlnaXRhbHNvdXJjZXR5cGUvdHJhaW5lZEFsZ29yaXRobWljTWVkaWGiZmFjdGlvbm5jMnBhLmNvbnZlcnRlZG1zb2Z0d2FyZUFnZW50v2RuYW1lak9wZW5BSSBBUEn/AAAAq2p1bWIAAAAoanVtZGNib3IAEQAQgAAAqgA4m3EDYzJwYS5oYXNoLmRhdGEAAAAAe2Nib3KlamV4Y2x1c2lvbnOBomVzdGFydBghZmxlbmd0aBk3RWRuYW1lbmp1bWJmIG1hbmlmZXN0Y2FsZ2ZzaGEyNTZkaGFzaFgg5OQo6E65wituxcmRjfhJthdXW/M/Xil4WwlVTIcGiR5jcGFkSAAAAAAAAAAAAAAB5mp1bWIAAAAnanVtZGMyY2wAEQAQgAAAqgA4m3EDYzJwYS5jbGFpbS52MgAAAAG3Y2JvcqZqaW5zdGFuY2VJRHgseG1wOmlpZDpiYjFkZTgyZS1iMjBjLTRlN2ItODQyYy0zMjJkNGMyNTg4ZDh0Y2xhaW1fZ2VuZXJhdG9yX2luZm+/ZG5hbWVnQ2hhdEdQVG9vcmcuY2FpLmMycGFfcnNmMC40OS41/2lzaWduYXR1cmV4TXNlbGYjanVtYmY9L2MycGEvdXJuOmMycGE6NTdlY2FkYWMtYzJmYS00ODhmLTkxZWMtMmQzYjZiMDNlODVkL2MycGEuc2lnbmF0dXJlcmNyZWF0ZWRfYXNzZXJ0aW9uc4KiY3VybHgqc2VsZiNqdW1iZj1jMnBhLmFzc2VydGlvbnMvYzJwYS5hY3Rpb25zLnYyZGhhc2hYIMPkU8KwXWM8GJd2TgZdAivyknNwLULr3GDz9hUureGyomN1cmx4KXNlbGYjanVtYmY9YzJwYS5hc3NlcnRpb25zL2MycGEuaGFzaC5kYXRhZGhhc2hYIB8XxyGa8Qd5OdmlKrELxYtHQWnlBglQmPOhGNsWzJK/aGRjOnRpdGxlaWltYWdlLnBuZ2NhbGdmc2hhMjU2AAAy/Wp1bWIAAAAoanVtZGMyY3MAEQAQgAAAqgA4m3EDYzJwYS5zaWduYXR1cmUAAAAyzWNib3LShFkHwaIBJhghglkDNzCCAzMwggIboAMCAQICFG6uKKPuxbjkKjb6HeZBFa5iFhs7MA0GCSqGSIb3DQEBDAUAMEoxGjAYBgNVBAMMEVdlYkNsYWltU2lnbmluZ0NBMQ0wCwYDVQQLDARMZW5zMRAwDgYDVQQKDAdUcnVlcGljMQswCQYDVQQGEwJVUzAeFw0yNTAxMTMyMDM2NDZaFw0yNjAxMTMyMDM2NDVaMFYxCzAJBgNVBAYTAlVTMQ8wDQYDVQQKDAZPcGVuQUkxEDAOBgNVBAsMB0NoYXRHUFQxJDAiBgNVBAMMG1RydWVwaWMgTGVucyBDTEkgaW4gQ2hhdEdQVDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFYdeMcqUA997gTIFPWrpHZ7i+3ToyM91aZCM9lMKQlCMTAIS6U1leiR4y7w2pqjrAEK7gLZiV8M1S27LhaaN+ijgc8wgcwwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBRaH2tm05TnsEGDfZwMe13Fc0tLszBNBggrBgEFBQcBAQRBMD8wPQYIKwYBBQUHMAGGMWh0dHA6Ly92YS50cnVlcGljLmNvbS9lamJjYS9wdWJsaWN3ZWIvc3RhdHVzL29jc3AwHQYDVR0lBBYwFAYIKwYBBQUHAwQGCCsGAQUFBwMkMB0GA1UdDgQWBBTKXhMuLBs1om1iRU0zQwVi7JP4KjAOBgNVHQ8BAf8EBAMCB4AwDQYJKoZIhvcNAQEMBQADggEBAHloPns944Lh2V25uG67odcSRNCXFCn1B1Mt0/f6p9PyPeER6QLiRxrTkfNoXin96s18il7t60Yf8OZBSrncA2mqr8VaQ9lFywCvjfTcaq9Niy2MmwCfM9OD670t6VimNxeT76FeZ8QPQ6R2yVUgSQbfsRqNmrcXAhp9A3p8ZB+6UYag/p2BYr7cqYhJ7sDR/Ca1G40TyWtO4jBH3vSO1BH7FzworINIcUxZTGTyZMas6gOjr0u9avikKoNqk87mZYxdiSELNZVskThwcGUtpWW67sag0y7vrr2uPUYKvV8EFfQnmhDvmkSltkEIKf0viECSvC79FNRjd6loZw8YAcpZBH4wggR6MIICYqADAgECAhRp/JDEzIlQgjoeqF/Sgv8o1f2TkDANBgkqhkiG9w0BAQwFADA/MQ8wDQYDVQQDDAZSb290Q0ExDTALBgNVBAsMBExlbnMxEDAOBgNVBAoMB1RydWVwaWMxCzAJBgNVBAYTAlVTMB4XDTIxMTIwOTIwMzk0NloXDTI2MTIwODIwMzk0NVowSjEaMBgGA1UEAwwRV2ViQ2xhaW1TaWduaW5nQ0ExDTALBgNVBAsMBExlbnMxEDAOBgNVBAoMB1RydWVwaWMxCzAJBgNVBAYTAlVTMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwRYSw6dQwZjMzmv4jqTxxWr6cpaI2AUz+4rsgvJlgOdBnJrE4WAVxwToKGv1x9reCooi+sWno/YKKP4HYjsKywl5ZXkOWJqUPJYvL2LVFljMiqiXykiQAlnrCDbnry+lPft/k+93sb7oejj4FB5EF1Bo4flnqRdJ9b9Nyvv2vIGhn2RI4VgIelyrekH7hoY6AaHupnLeIKLdwqhRNZ2Ml6tydDL5E5ub+rtZ/dTYV0zIre+hcR+FbB/n2B3wvSrkNGaIvpkTsH2x32Ftzb5u1vPf6DMXUyr/A3WWo5rb5xYqkR0Yx0u2AxFU1vOZxnGLk75wUrkS5caFfWgYwQKybwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFFi68anyDedFBgqwKadalzDqJz0LMB0GA1UdDgQWBBRaH2tm05TnsEGDfZwMe13Fc0tLszAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQEMBQADggIBAHU4hnoXEULwV3wGsLt33TuNhcppxeRBWjOMIXqGcX9F7Yt8U9Cq5zG4cz93U2GgYZ+mToXq8/DIPduM55BXFbBffJE2Y5OpaFbpRcdPOycUipySawFdgisHR8vRBFY/q9RDGy40FurSU9CiDQrljZcXRA4Zu//ZYYYGwntNW1p/DnFZXzjV/3bhjt+dKTNAYuolo9omFVXJ5XxQMKE/SqG43ZF6S3wLqCTI1CvildOWAsyqAtUPtcbCsvfCQAAgs+LLPtHWycmtQothXay+Q+f3q1AHoY67gu2Tb0HqbKicjAcc9B+WxCXhXbzHDaWsAu25k61pKvjsKzY4az/CfoiJbRwQUJ53yyahR7TkG9k4Sr5Lg7Y9IrLdBD9ShaJvtBCJrztepeg5dPwGLm8jxSX7kjOrF7OmYBARc9+9Pou1IO05Lqh3BE5CxLwWtrgtQSJUnJ4eTMBcmhJ/Vd2EopxAmGiK5Wn/5LK7m5O5/0pLdV1zLO5EymbBYSdx7FCpI9MhUTaBjatWj6Z4CRvdVfJ0UzP5Fecwp0kTTLmoI7Kxqv6l1N/K1MU3tzyJ2D6zrs5Jb0xsyUh76/NRjt+M19N8ANBpmDKllDGWmMEm5yEJHRrnt1pwNuDVKRKfpMJvisVt47sJKf+CinhVrmGJKrt76Z/9UP+eXERitt2CJ+nRoWNwYWRZKrQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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ofafegOUeLr3oFyDjdj0/U/40rC9miOS8ODzjPXHFMpQKst370FqJUlufegpRKctxnvQWolZ5/emVYhab3oKsRmb3oCw0T+9BViVJ/egVieO496CXElFx70C5RwuPegXKOFx70C5SRbj3pByki3PvQLlJRde9BPKKbn3oDlGm496B8o4XHvQLlJFn96AsOE/vQKwvn+9AWHCb3phYkWb3pCsSCX3oFYkWSgViRXoFYlVqCbEqmmIlWgRKtBI6gAoASgBRQAtAAQfSgBpFABigBCKQBTAKAFLBRlv070hAjq3AyD6HvRcLjqYC0AGKQBgnoCaAGkqOrKD6EgGi4xjSJ/e5/3T/hRcVyNiCMg8UFIryNigpIhaT3oKsQtN70FWIWm96B2Inn96B2IHn96CrELXHvQOxGbj3oHyifaPegOUPtPvQHKKLn3oDlA3XvQHKRNc+9A+UgkufemUokD3HvQPlKzz+9BViBpvegqxG03vQOxGZ/egdiFbj3oK5SRbj3oFykyXFAnEkFx70C5RwuPegXKPFxQLlHi596A5R4ufegXKSC596Bcov2n3oDlFFx70Byjxce9AuUkW496QuUeLj3oDlHif3oFykizUCsTJLQKxMklArEyPQTYnR6CWixGaCWWEoJLCUyWOkYjABI78cUjNsRZCvUkj0PNLYEywwwcVRQ2gAFAA7FYyR16D+VJiK2cHjr69/wA6RN2TxMWTnqDj600UmMlchyAeBjikJsWNyxw3X16UxpjjQMUCgCGRtzZ7DgUiGLEMyL7ZP9P60Ah7S4YgLkDjOadxt2GtK2MDA98c0guR73/vv/30aBXYjfN975v97mgLi84oEIORkDIouO1xjtgHnk0GkY2KksnNM1SKkktBaRXkm96CrFaSf3oKSIHnoKsQPP70D5SBrigqxE1xQOw37R70w5RPtPvQHKJ9p96A5RDc+9A+UY1z70BykT3HvQVykD3FA+Uhef3oKsRNP70DsRNP70DsM8+gdiATe9BVh6TUCsSrP70CsSCf3oFYcJ/egLDxP70CsPE/vQKw4T0BYeJ/egVh4noCwomoFYes3vQFiRZvegViRZvegViVZvegVidJfegmxYSSgVixG9IlosxtTIaLUZpEstxdqZDLcdBDLMYoIY1+XY++Py4/pUmb3FjGXX6//XoBblk1RY2gAFADZ/8AVj64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oAKACgAoAKAP/9kAAAXuanVtYgAAACxqdW1kY2JvcgARABCAAACqADibcQNjMnBhLmluZ3JlZGllbnQudjMAAAAFumNib3KobHJlbGF0aW9uc2hpcGtjb21wb25lbnRPZmhkYzp0aXRsZWlpbWFnZS5wbmdpZGM6Zm9ybWF0Y3BuZ3F2YWxpZGF0aW9uUmVzdWx0c6FuYWN0aXZlTWFuaWZlc3SjZ3N1Y2Nlc3OFo2Rjb2RleB1jbGFpbVNpZ25hdHVyZS5pbnNpZGVWYWxpZGl0eWN1cmx4TXNlbGYjanVtYmY9L2MycGEvdXJuOmMycGE6NTdlY2FkYWMtYzJmYS00ODhmLTkxZWMtMmQzYjZiMDNlODVkL2MycGEuc2lnbmF0dXJla2V4cGxhbmF0aW9udWNsYWltIHNpZ25hdHVyZSB2YWxpZKNkY29kZXgYY2xhaW1TaWduYXR1cmUudmFsaWRhdGVkY3VybHhNc2VsZiNqdW1iZj0vYzJwYS91cm46YzJwYTo1N2VjYWRhYy1jMmZhLTQ4OGYtOTFlYy0yZDNiNmIwM2U4NWQvYzJwYS5zaWduYXR1cmVrZXhwbGFuYXRpb251Y2xhaW0gc2lnbmF0dXJlIHZhbGlko2Rjb2RleBlhc3NlcnRpb24uaGFzaGVkVVJJLm1hdGNoY3VybHhec2VsZiNqdW1iZj0vYzJwYS91cm46YzJwYTo1N2VjYWRhYy1jMmZhLTQ4OGYtOTFlYy0yZDNiNmIwM2U4NWQvYzJwYS5hc3NlcnRpb25zL2MycGEuYWN0aW9ucy52MmtleHBsYW5hdGlvbng+aGFzaGVkIHVyaSBtYXRjaGVkOiBzZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLmFjdGlvbnMudjKjZGNvZGV4GWFzc2VydGlvbi5oYXNoZWRVUkkubWF0Y2hjdXJseF1zZWxmI2p1bWJmPS9jMnBhL3VybjpjMnBhOjU3ZWNhZGFjLWMyZmEtNDg4Zi05MWVjLTJkM2I2YjAzZTg1ZC9jMnBhLmFzc2VydGlvbnMvYzJwYS5oYXNoLmRhdGFrZXhwbGFuYXRpb254PWhhc2hlZCB1cmkgbWF0Y2hlZDogc2VsZiNqdW1iZj1jMnBhLmFzc2VydGlvbnMvYzJwYS5oYXNoLmRhdGGjZGNvZGV4GGFzc2VydGlvbi5kYXRhSGFzaC5tYXRjaGN1cmx4XXNlbGYjanVtYmY9L2MycGEvdXJuOmMycGE6NTdlY2FkYWMtYzJmYS00ODhmLTkxZWMtMmQzYjZiMDNlODVkL2MycGEuYXNzZXJ0aW9ucy9jMnBhLmhhc2guZGF0YWtleHBsYW5hdGlvbm9kYXRhIGhhc2ggdmFsaWRtaW5mb3JtYXRpb25hbIBnZmFpbHVyZYBqaW5zdGFuY2VJRHgseG1wOmlpZDpjMjM2YTljOC0yYTk5LTRmM2UtOWI0Zi00Y2U3YzYwMDRjMjBuYWN0aXZlTWFuaWZlc3SjY3VybHg+c2VsZiNqdW1iZj0vYzJwYS91cm46YzJwYTo1N2VjYWRhYy1jMmZhLTQ4OGYtOTFlYy0yZDNiNmIwM2U4NWRjYWxnZnNoYTI1NmRoYXNoWCBTcyxHnAaUMjImCR3puosTnxjqw68IwzXHmPwKUJJa125jbGFpbVNpZ25hdHVyZaNjdXJseE1zZWxmI2p1bWJmPS9jMnBhL3VybjpjMnBhOjU3ZWNhZGFjLWMyZmEtNDg4Zi05MWVjLTJkM2I2YjAzZTg1ZC9jMnBhLnNpZ25hdHVyZWNhbGdmc2hhMjU2ZGhhc2hYIPGQNh+PoL1P8JNF5vNRnaouSStkTYawtNSULYYqivKUaXRodW1ibmFpbKJjdXJseDlzZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLnRodW1ibmFpbC5pbmdyZWRpZW50LmpwZWdkaGFzaFggxSRdxvUV8uTXp+pqHolIs2rxRa5mG4YzpllKXKTArHYAAACtanVtYgAAAChqdW1kY2JvcgARABCAAACqADibcQNjMnBhLmhhc2guZGF0YQAAAAB9Y2JvcqVqZXhjbHVzaW9uc4GiZXN0YXJ0GCFmbGVuZ3RoGcFuZG5hbWVuanVtYmYgbWFuaWZlc3RjYWxnZnNoYTI1NmRoYXNoWCDk5CjoTrnCK27FyZGN+Em2F1db8z9eKXhbCVVMhwaJHmNwYWRKAAAAAAAAAAAAAAAAAlBqdW1iAAAAJ2p1bWRjMmNsABEAEIAAAKoAOJtxA2MycGEuY2xhaW0udjIAAAACIWNib3Kmamluc3RhbmNlSUR4LHhtcDppaWQ6MWE1M2JiM2ItMDBmNi00NjljLTk1NjMtYWEyZGY4MDAzOTM4dGNsYWltX2dlbmVyYXRvcl9pbmZvv2RuYW1lZ0NoYXRHUFRvb3JnLmNhaS5jMnBhX3JzZjAuNDkuNf9pc2lnbmF0dXJleE1zZWxmI2p1bWJmPS9jMnBhL3VybjpjMnBhOmM2MzQyNGE3LTQ2MjAtNDZhNi04ZWYyLTM0YTEzYzk1ZTRiMS9jMnBhLnNpZ25hdHVyZXJjcmVhdGVkX2Fzc2VydGlvbnODomN1cmx4OXNlbGYjanVtYmY9YzJwYS5hc3NlcnRpb25zL2MycGEudGh1bWJuYWlsLmluZ3JlZGllbnQuanBlZ2RoYXNoWCDFJF3G9RXy5Nen6moeiUizavFFrmYbhjOmWUpcpMCsdqJjdXJseC1zZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLmluZ3JlZGllbnQudjNkaGFzaFgg4QNR3XjT25G2KalibW0+hyYwRhXRtTtVMRD3De7YcLGiY3VybHgpc2VsZiNqdW1iZj1jMnBhLmFzc2VydGlvbnMvYzJwYS5oYXNoLmRhdGFkaGFzaFggUtwpC3cBV0MIDpS/ZVQkFct/qp/YU4q+eVPRKx02hdxoZGM6dGl0bGVpaW1hZ2UucG5nY2FsZ2ZzaGEyNTYAADL9anVtYgAAAChqdW1kYzJjcwARABCAAACqADibcQNjMnBhLnNpZ25hdHVyZQAAADLNY2JvctKEWQfBogEmGCGCWQM3MIIDMzCCAhugAwIBAgIUbq4oo+7FuOQqNvod5kEVrmIWGzswDQYJKoZIhvcNAQEMBQAwSjEaMBgGA1UEAwwRV2ViQ2xhaW1TaWduaW5nQ0ExDTALBgNVBAsMBExlbnMxEDAOBgNVBAoMB1RydWVwaWMxCzAJBgNVBAYTAlVTMB4XDTI1MDExMzIwMzY0NloXDTI2MDExMzIwMzY0NVowVjELMAkGA1UEBhMCVVMxDzANBgNVBAoMBk9wZW5BSTEQMA4GA1UECwwHQ2hhdEdQVDEkMCIGA1UEAwwbVHJ1ZXBpYyBMZW5zIENMSSBpbiBDaGF0R1BUMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEVh14xypQD33uBMgU9aukdnuL7dOjIz3VpkIz2UwpCUIxMAhLpTWV6JHjLvDamqOsAQruAtmJXwzVLbsuFpo36KOBzzCBzDAMBgNVHRMBAf8EAjAAMB8GA1UdIwQYMBaAFFofa2bTlOewQYN9nAx7XcVzS0uzME0GCCsGAQUFBwEBBEEwPzA9BggrBgEFBQcwAYYxaHR0cDovL3ZhLnRydWVwaWMuY29tL2VqYmNhL3B1YmxpY3dlYi9zdGF0dXMvb2NzcDAdBgNVHSUEFjAUBggrBgEFBQcDBAYIKwYBBQUHAyQwHQYDVR0OBBYEFMpeEy4sGzWibWJFTTNDBWLsk/gqMA4GA1UdDwEB/wQEAwIHgDANBgkqhkiG9w0BAQwFAAOCAQEAeWg+ez3jguHZXbm4bruh1xJE0JcUKfUHUy3T9/qn0/I94RHpAuJHGtOR82heKf3qzXyKXu3rRh/w5kFKudwDaaqvxVpD2UXLAK+N9Nxqr02LLYybAJ8z04PrvS3pWKY3F5PvoV5nxA9DpHbJVSBJBt+xGo2atxcCGn0DenxkH7pRhqD+nYFivtypiEnuwNH8JrUbjRPJa07iMEfe9I7UEfsXPCisg0hxTFlMZPJkxqzqA6OvS71q+KQqg2qTzuZljF2JIQs1lWyROHBwZS2lZbruxqDTLu+uva49Rgq9XwQV9CeaEO+aRKW2QQgp/S+IQJK8Lv0U1GN3qWhnDxgBylkEfjCCBHowggJioAMCAQICFGn8kMTMiVCCOh6oX9KC/yjV/ZOQMA0GCSqGSIb3DQEBDAUAMD8xDzANBgNVBAMMBlJvb3RDQTENMAsGA1UECwwETGVuczEQMA4GA1UECgwHVHJ1ZXBpYzELMAkGA1UEBhMCVVMwHhcNMjExMjA5MjAzOTQ2WhcNMjYxMjA4MjAzOTQ1WjBKMRowGAYDVQQDDBFXZWJDbGFpbVNpZ25pbmdDQTENMAsGA1UECwwETGVuczEQMA4GA1UECgwHVHJ1ZXBpYzELMAkGA1UEBhMCVVMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDBFhLDp1DBmMzOa/iOpPHFavpylojYBTP7iuyC8mWA50GcmsThYBXHBOgoa/XH2t4KiiL6xaej9goo/gdiOwrLCXlleQ5YmpQ8li8vYtUWWMyKqJfKSJACWesINuevL6U9+3+T73exvuh6OPgUHkQXUGjh+WepF0n1v03K+/a8gaGfZEjhWAh6XKt6QfuGhjoBoe6mct4got3CqFE1nYyXq3J0MvkTm5v6u1n91NhXTMit76FxH4VsH+fYHfC9KuQ0Zoi+mROwfbHfYW3Nvm7W89/oMxdTKv8DdZajmtvnFiqRHRjHS7YDEVTW85nGcYuTvnBSuRLlxoV9aBjBArJvAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUWLrxqfIN50UGCrApp1qXMOonPQswHQYDVR0OBBYEFFofa2bTlOewQYN9nAx7XcVzS0uzMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQwFAAOCAgEAdTiGehcRQvBXfAawu3fdO42FymnF5EFaM4wheoZxf0Xti3xT0KrnMbhzP3dTYaBhn6ZOherz8Mg924znkFcVsF98kTZjk6loVulFx087JxSKnJJrAV2CKwdHy9EEVj+r1EMbLjQW6tJT0KINCuWNlxdEDhm7/9lhhgbCe01bWn8OcVlfONX/duGO350pM0Bi6iWj2iYVVcnlfFAwoT9KobjdkXpLfAuoJMjUK+KV05YCzKoC1Q+1xsKy98JAACCz4ss+0dbJya1Ci2FdrL5D5/erUAehjruC7ZNvQepsqJyMBxz0H5bEJeFdvMcNpawC7bmTrWkq+OwrNjhrP8J+iIltHBBQnnfLJqFHtOQb2ThKvkuDtj0ist0EP1KFom+0EImvO16l6Dl0/AYubyPFJfuSM6sXs6ZgEBFz370+i7Ug7TkuqHcETkLEvBa2uC1BIlScnh5MwFyaEn9V3YSinECYaIrlaf/ksrubk7n/Skt1XXMs7kTKZsFhJ3HsUKkj0yFRNoGNq1aPpngJG91V8nRTM/kV5zCnSRNMuagjsrGq/qXU38rUxTe3PInYPrOuzklvTGzJSHvr81GO34zX03wA0GmYMqWUMZaYwSbnIQkdGue3WnA24NUpEp+kwm+KxW3juwkp/4KKeFWuYYkqu3vpn/1Q/55cRGK23YIn6dGhY3BhZFkqtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPZYQMnOr7lYhoCN7j9ihQfbaiLB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", + "use_cases": [ + "Open Source Threat Intel" + ], + "verified": true, + "last_verified_date": "2025-07-25", + "playbook_supported": false, + "max_confidence_level": 50, + "support_version": ">= 6.7.5", + "subscription_link": "https://www.ransomware.live", + "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/external-import/ransomwarelive", + "manager_supported": true, + "container_version": "rolling", + "container_image": "opencti/connector-ransomwarelive", + "container_type": "EXTERNAL_IMPORT", + "config_schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://www.filigran.io/connectors/ransomwarelive_config.schema.json", + "type": "object", + "properties": { + "OPENCTI_URL": { + "description": "The OpenCTI platform URL.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "OPENCTI_TOKEN": { + "description": "The token of the user who represents the connector in the OpenCTI platform.", + "type": "string" + }, + "CONNECTOR_NAME": { + "default": "Ransomware Connector", + "description": "Name of the connector.", + "type": "string" + }, + "CONNECTOR_SCOPE": { + "default": [ + "identity", + "attack-pattern", + "course-of-action", + "intrusion-set", + "malware", + "tool", + "report" + ], + "description": "The scope or type of data the connector is importing, either a MIME type or Stix Object (for information only).", + "items": { + "type": "string" + }, + "type": "array" + }, + "CONNECTOR_TYPE": { + "default": "EXTERNAL_IMPORT", + "description": "Should always be set to EXTERNAL_IMPORT for this connector.", + "type": "string" + }, + "CONNECTOR_LOG_LEVEL": { + "default": "error", + "description": "Determines the verbosity of the logs.", + "enum": [ + "debug", + "info", + "warn", + "warning", + "error" + ], + "type": "string" + }, + "CONNECTOR_DURATION_PERIOD": { + "default": "PT10M", + "description": "Duration between two scheduled runs of the connector (ISO 8601 format).", + "format": "duration", + "type": "string" + }, + "CONNECTOR_PULL_HISTORY": { + "default": false, + "description": "Whether to pull historic data. It is not recommended to set it to true as there will a large influx of data", + "type": "boolean" + }, + "CONNECTOR_HISTORY_START_YEAR": { + "default": 2023, + "description": "The year to start from", + "exclusiveMinimum": 0, + "type": "integer" + }, + "CONNECTOR_CREATE_THREAT_ACTOR": { + "default": false, + "description": "Whether to create a Threat Actor object", + "type": "boolean" + } + }, + "required": [ + "OPENCTI_URL", + "OPENCTI_TOKEN" + ], + "additionalProperties": true + } + }, + { + "title": "Recorded Future", + "slug": "recorded-future", + "description": "Recorded Future is a cybersecurity company that specializes in providing real-time threat intelligence to help organizations anticipate, identify, and mitigate cyber threats. By aggregating and analyzing data from diverse sources, Recorded Future can identify patterns, trends, and indicators of compromise (IoCs) that help organizations understand and mitigate cyber threats more effectively.\n\nThis connector imports Recorded Future Analyst Notes, the Risk Lists (IP, URL, Domain Name and Hash), Malware and Threat Actors from Threats Maps, converts to STIX2 and imports them into OpenCTI at regular intervals.\n\nHave a look at this connector and its extensive configuration to precisely select the data you need to import based on your use case.", + "short_description": "Recorded Future is a cybersecurity company that specializes in providing real-time threat intelligence to help organizations anticipate, identify, and mitigate cyber threats.", + "logo": "data:image/png;base64,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", + "use_cases": [ + "Commercial Threat Intel" + ], + "verified": true, + "last_verified_date": null, + "playbook_supported": false, + "max_confidence_level": 55, + "support_version": ">= 6.5.1", + "subscription_link": "https://www.recordedfuture.com/get-started", + "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/external-import/recorded-future", + "manager_supported": true, + "container_version": "rolling", + "container_image": "opencti/connector-recorded-future", + "container_type": "EXTERNAL_IMPORT", + "config_schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://www.filigran.io/connectors/recorded-future_config.schema.json", + "type": "object", + "properties": { + "OPENCTI_URL": { + "description": "The OpenCTI platform URL.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "OPENCTI_TOKEN": { + "description": "The token of the user who represents the connector in the OpenCTI platform.", + "type": "string" + }, + "CONNECTOR_NAME": { "default": "Recorded Future", "description": "Name of the connector.", "type": "string" @@ -6121,7 +7075,7 @@ }, "RECORDED_FUTURE_TA_TO_INTRUSION_SET": { "default": false, - "description": "Whether to convert Threat Actor entities to Intrusion Set entities.", + "description": "Whether to map Threat Actor entities to Intrusion Set instead of Threat Actor.", "type": "boolean" }, "RECORDED_FUTURE_RISK_AS_SCORE": { @@ -6981,9 +7935,17 @@ }, "type": "array" }, - "SHADOWSERVER_INITIAL_LOOKBACK": { - "default": 30, - "description": "Number of days to look back for reports during the first run.", + "SHADOWSERVER_REPORT_NAMES": { + "default": [], + "description": "List of report names to retrieve. If empty, all report names will be retrieved.", + "items": { + "type": "string" + }, + "type": "array" + }, + "SHADOWSERVER_INITIAL_LOOKBACK": { + "default": 30, + "description": "Number of days to look back for reports during the first run.", "minimum": 0, "type": "integer" }, @@ -7337,17 +8299,162 @@ "Commercial Threat Intel", "Incident Response & Ticketing" ], - "verified": false, - "last_verified_date": null, + "verified": true, + "last_verified_date": "2026-04-30", "playbook_supported": false, "max_confidence_level": 50, "support_version": ">=6.8.12", "subscription_link": "https://sublime.security/", "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/external-import/sublime", - "manager_supported": false, + "manager_supported": true, "container_version": "rolling", "container_image": "opencti/connector-sublime", - "container_type": "EXTERNAL_IMPORT" + "container_type": "EXTERNAL_IMPORT", + "config_schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://www.filigran.io/connectors/sublime_config.schema.json", + "type": "object", + "properties": { + "OPENCTI_URL": { + "description": "The base URL of the OpenCTI instance.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "OPENCTI_TOKEN": { + "description": "The API token to connect to OpenCTI.", + "type": "string" + }, + "CONNECTOR_NAME": { + "default": "Sublime Security", + "description": "The name of the connector.", + "type": "string" + }, + "CONNECTOR_SCOPE": { + "default": [ + "sublime" + ], + "description": "The scope or type of data the connector is importing, either a MIME type or Stix Object (for information only).", + "items": { + "type": "string" + }, + "type": "array" + }, + "CONNECTOR_LOG_LEVEL": { + "default": "error", + "description": "The minimum level of logs to display.", + "enum": [ + "debug", + "info", + "warn", + "warning", + "error" + ], + "type": "string" + }, + "CONNECTOR_TYPE": { + "const": "EXTERNAL_IMPORT", + "default": "EXTERNAL_IMPORT", + "type": "string" + }, + "CONNECTOR_DURATION_PERIOD": { + "default": "PT3M", + "description": "The period of time to await between two runs of the connector.", + "format": "duration", + "type": "string" + }, + "SUBLIME_URL": { + "default": "https://platform.sublime.security", + "description": "Sublime platform URL for API connections.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "SUBLIME_TOKEN": { + "description": "Sublime Security API authentication token.", + "format": "password", + "type": "string", + "writeOnly": true + }, + "SUBLIME_INCIDENT_TYPE": { + "default": "phishing", + "description": "Label to apply to incident type.", + "type": "string" + }, + "SUBLIME_INCIDENT_PREFIX": { + "default": "Sublime Incident - ", + "description": "Prefix for incident object names.", + "type": "string" + }, + "SUBLIME_CASE_PREFIX": { + "default": "Case - ", + "description": "Prefix for case object names.", + "type": "string" + }, + "SUBLIME_AUTO_CREATE_CASES": { + "default": false, + "description": "Automatically create investigation cases.", + "type": "boolean" + }, + "SUBLIME_VERDICTS": { + "default": [ + "malicious" + ], + "description": "Comma-separated attack score verdicts to process.", + "items": { + "type": "string" + }, + "type": "array" + }, + "SUBLIME_SET_PRIORITY": { + "default": true, + "description": "Enable priority mapping from attack score.", + "type": "boolean" + }, + "SUBLIME_SET_SEVERITY": { + "default": true, + "description": "Enable severity mapping from attack score.", + "type": "boolean" + }, + "SUBLIME_FIRST_RUN_DURATION": { + "default": "PT8H", + "description": "ISO 8601 duration for initial data fetch on first run.", + "format": "duration", + "type": "string" + }, + "SUBLIME_FORCE_HISTORICAL": { + "default": false, + "description": "Force historical fetch ignoring existing state for correcting improper states.", + "type": "boolean" + }, + "SUBLIME_BATCH_SIZE": { + "default": 100, + "description": "Number of messages per processing batch.", + "type": "integer" + }, + "SUBLIME_TLP_LEVEL": { + "description": "TLP marking level applied to created STIX entities.", + "enum": [ + "clear", + "white", + "green", + "amber", + "amber+strict", + "red" + ], + "type": "string", + "default": "amber" + } + }, + "required": [ + "OPENCTI_URL", + "OPENCTI_TOKEN", + "SUBLIME_TOKEN" + ], + "additionalProperties": true + } }, { "title": "Tanium Incidents", @@ -7914,6 +9021,165 @@ "container_image": "opencti/connector-urlscan", "container_type": "EXTERNAL_IMPORT" }, + { + "title": "USTA", + "slug": "usta", + "description": "The USTA connector leverages the USTA Threat Stream API to import comprehensive cyber threat intelligence, including malicious URLs, phishing sites, malware hashes, compromised credentials, credit card fraud alerts, and Deep Sight tickets.", + "short_description": "Import malicious URLs, phishing sites, malware hashes, compromised credentials, credit card fraud alerts and Deep Sight tickets from USTA", + "logo": "data:image/png;base64,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", + "use_cases": [ + "Commercial Threat Intel" + ], + "verified": false, + "last_verified_date": null, + "playbook_supported": false, + "max_confidence_level": 100, + "support_version": ">=6.6.4", + "subscription_link": "mailto:integration@prodaft.com", + "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/external-import/usta", + "manager_supported": false, + "container_version": "rolling", + "container_image": "opencti/connector-usta", + "container_type": "EXTERNAL_IMPORT", + "config_schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://www.filigran.io/connectors/usta_config.schema.json", + "type": "object", + "properties": { + "OPENCTI_URL": { + "description": "The base URL of the OpenCTI instance.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "OPENCTI_TOKEN": { + "description": "The API token to connect to OpenCTI.", + "type": "string" + }, + "CONNECTOR_NAME": { + "default": "USTA", + "description": "The name of the connector.", + "type": "string" + }, + "CONNECTOR_SCOPE": { + "default": "indicator,observable,malware,identity,incident,user-account,report,threat-actor", + "description": "The scope of the connector.", + "type": "string" + }, + "CONNECTOR_LOG_LEVEL": { + "default": "error", + "description": "The minimum level of logs to display.", + "enum": [ + "debug", + "info", + "warn", + "warning", + "error" + ], + "type": "string" + }, + "CONNECTOR_TYPE": { + "const": "EXTERNAL_IMPORT", + "default": "EXTERNAL_IMPORT", + "type": "string" + }, + "CONNECTOR_DURATION_PERIOD": { + "default": "PT30M", + "description": "The period of time to await between two runs.", + "format": "duration", + "type": "string" + }, + "USTA_API_BASE_URL": { + "default": "https://usta.prodaft.com", + "description": "USTA API base URL.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "USTA_API_KEY": { + "description": "USTA API bearer token for authentication.", + "format": "password", + "type": "string" + }, + "USTA_IMPORT_START_DATE": { + "default": "P90D", + "description": "ISO 8601 duration string specifying how far back to import data (e.g., P90D for 90 days, P30D for 30 days). Only used on the very first run when no state exists.", + "format": "duration", + "type": "string" + }, + "USTA_PAGE_SIZE": { + "default": 100, + "description": "Number of records to fetch per API page.", + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + "USTA_IMPORT_MALICIOUS_URLS": { + "default": true, + "description": "Enable import of malicious URL indicators.", + "type": "boolean" + }, + "USTA_IMPORT_PHISHING_SITES": { + "default": true, + "description": "Enable import of phishing site indicators.", + "type": "boolean" + }, + "USTA_IMPORT_MALWARE_HASHES": { + "default": true, + "description": "Enable import of malware hash indicators.", + "type": "boolean" + }, + "USTA_IMPORT_COMPROMISED_CREDENTIALS": { + "default": true, + "description": "Enable import of compromised credentials tickets (Account Takeover Prevention).", + "type": "boolean" + }, + "USTA_IMPORT_CREDIT_CARDS": { + "default": true, + "description": "Enable import of compromised credit card tickets (Fraud Intelligence).", + "type": "boolean" + }, + "USTA_IMPORT_DEEP_SIGHT_TICKETS": { + "default": true, + "description": "Enable import of Deep Sight intelligence tickets (threat reports, leaks, APT activity).", + "type": "boolean" + }, + "USTA_STORE_CREDENTIAL_PASSWORD": { + "default": false, + "description": "When enabled, the raw password from Account Takeover Prevention records is stored in the STIX User-Account credential field. Disabled by default for security reasons.", + "type": "boolean" + }, + "USTA_TLP_LEVEL": { + "default": "red", + "description": "TLP marking level to apply to imported data.", + "enum": [ + "clear", + "white", + "green", + "amber", + "red" + ], + "type": "string" + }, + "USTA_CONFIDENCE_LEVEL": { + "default": 99, + "description": "Confidence level for created STIX objects (0-100).", + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "OPENCTI_URL", + "OPENCTI_TOKEN", + "USTA_API_KEY" + ], + "additionalProperties": true + }, + "config_documentation": "external-import/usta/__metadata__/CONNECTOR_CONFIG_DOC.md" + }, { "title": "Valhalla", "slug": "valhalla", @@ -8070,32 +9336,114 @@ { "title": "VX Vault", "slug": "vxvault", - "description": "Information coming soon", - "short_description": "Information coming soon", + "description": "VX Vault is a publicly available repository that continuously tracks URLs linked to potentially malicious payloads, serving as a valuable source of threat intelligence for cybersecurity teams. By aggregating known malware distribution URLs, VX Vault helps analysts stay ahead of active threats targeting organizations across the globe.\n\nThe VX Vault connector for OpenCTI periodically fetches the VX Vault URL list and imports each entry as a STIX 2.1 URL observable. When indicator creation is enabled, the connector also generates corresponding STIX indicators, further enriching the threat intelligence graph. By integrating VX Vault data into OpenCTI, security teams gain automated, up-to-date visibility into malware delivery infrastructure, supporting faster detection, investigation, and response workflows.", + "short_description": "VX Vault is a public repository tracking URLs associated with malicious payloads. This connector imports these URLs into OpenCTI as STIX 2.1 observables, enabling security teams to detect and monitor active malware distribution infrastructure.", "logo": "data:image/png;base64,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", "use_cases": [ "Open Source Threat Intel" ], - "verified": false, - "last_verified_date": null, + "verified": true, + "last_verified_date": "2026-04-09", "playbook_supported": false, "max_confidence_level": 50, "support_version": ">=5.5.0", "subscription_link": "http://vxvault.net", "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/external-import/vxvault", - "manager_supported": false, + "manager_supported": true, "container_version": "rolling", "container_image": "opencti/connector-vxvault", - "container_type": "EXTERNAL_IMPORT" - }, - { - "title": "Wiz", - "slug": "wiz", - "description": "This connector imports data made publicly available by Wiz exposed at https://threats.wiz.io/. The list of imported entities (with their relationships) :\n\nIncidents : A historical collection of past cloud security incidents and campaigns, offering insights into targeting patterns, initial access methods, and effective impact.\n\nActors : Profiles of threat actors involved in cloud security incidents, shedding light on their potential motivations and victimology, to aid in risk assessment and threat modeling. NB: These can be modeled as either Threat Actor or Intrusion Set objects, depending on the configuration variable. See threat_actor_as_intrusion_set in Configuration variables.\n\nTechniques : An overview of attack techniques used by threat actors in cloud security incidents, aligned with the MITRE ATT&CK matrix framework for additional context.\n\nTools : Details on software utilized by threat actors in their activities targeting cloud environments, ranging from penetration testing utilities to bespoke malware.\n\nTargeted Technologies : Analysis of frequently targeted software found in cloud environments, noting their prevalence and any related incidents and techniques.\n\nDefenses : A corpus of cloud security measures that can serve to mitigate risks and prevent or detect attack techniques. Each mechanism is mapped to the MITRE D3FEND matrix.", - "short_description": "This connector imports data made publicly available by Wiz exposed at https://threats.wiz.io/", - "logo": "data:image/png;base64,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", - "use_cases": [ - "Open Source Threat Intel" + "container_type": "EXTERNAL_IMPORT", + "config_schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://www.filigran.io/connectors/vxvault_config.schema.json", + "type": "object", + "properties": { + "OPENCTI_URL": { + "description": "The base URL of the OpenCTI instance.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "OPENCTI_TOKEN": { + "description": "The API token to connect to OpenCTI.", + "type": "string" + }, + "CONNECTOR_NAME": { + "default": "VX Vault URL list", + "description": "The name of the connector.", + "type": "string" + }, + "CONNECTOR_SCOPE": { + "default": [ + "vxvault" + ], + "description": "The scope of the connector.", + "items": { + "type": "string" + }, + "type": "array" + }, + "CONNECTOR_LOG_LEVEL": { + "default": "error", + "description": "The minimum level of logs to display.", + "enum": [ + "debug", + "info", + "warn", + "warning", + "error" + ], + "type": "string" + }, + "CONNECTOR_TYPE": { + "const": "EXTERNAL_IMPORT", + "default": "EXTERNAL_IMPORT", + "type": "string" + }, + "CONNECTOR_DURATION_PERIOD": { + "default": "P3D", + "description": "The period of time to await between two runs of the connector.", + "format": "duration", + "type": "string" + }, + "VXVAULT_URL": { + "default": "https://vxvault.net/URL_List.php", + "description": "The URL of the VXVault dataset to fetch.", + "type": "string" + }, + "VXVAULT_CREATE_INDICATORS": { + "default": true, + "description": "If true, create indicators from the imported URLs.", + "type": "boolean" + }, + "VXVAULT_INTERVAL": { + "default": null, + "deprecated": true, + "type": "integer", + "description": "Use CONNECTOR_DURATION_PERIOD instead." + }, + "VXVAULT_SSL_VERIFY": { + "default": false, + "description": "Whether to verify SSL certificates when fetching the dataset.", + "type": "boolean" + } + }, + "required": [ + "OPENCTI_URL", + "OPENCTI_TOKEN" + ], + "additionalProperties": true + } + }, + { + "title": "Wiz", + "slug": "wiz", + "description": "This connector imports data made publicly available by Wiz exposed at https://threats.wiz.io/. The list of imported entities (with their relationships) :\n\nIncidents : A historical collection of past cloud security incidents and campaigns, offering insights into targeting patterns, initial access methods, and effective impact.\n\nActors : Profiles of threat actors involved in cloud security incidents, shedding light on their potential motivations and victimology, to aid in risk assessment and threat modeling. NB: These can be modeled as either Threat Actor or Intrusion Set objects, depending on the configuration variable. See threat_actor_as_intrusion_set in Configuration variables.\n\nTechniques : An overview of attack techniques used by threat actors in cloud security incidents, aligned with the MITRE ATT&CK matrix framework for additional context.\n\nTools : Details on software utilized by threat actors in their activities targeting cloud environments, ranging from penetration testing utilities to bespoke malware.\n\nTargeted Technologies : Analysis of frequently targeted software found in cloud environments, noting their prevalence and any related incidents and techniques.\n\nDefenses : A corpus of cloud security measures that can serve to mitigate risks and prevent or detect attack techniques. Each mechanism is mapped to the MITRE D3FEND matrix.", + "short_description": "This connector imports data made publicly available by Wiz exposed at https://threats.wiz.io/", + "logo": "data:image/png;base64,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", + "use_cases": [ + "Open Source Threat Intel" ], "verified": true, "last_verified_date": "2025-04-09", @@ -8321,11 +9669,107 @@ "additionalProperties": true } }, + { + "title": "ANY.RUN TI Lookup", + "slug": "anyrun-lookup", + "description": "ANY.RUN\u2019s TI Lookup is a service that allows you to browse IOCs and related threat data to simplify and enrich cyberattack investigations.", + "short_description": "Analyze StixFile, Artifact, Domain-Name, Hostname, IPv4-Addr or Url in ANY.RUN TI Lookup", + "logo": "data:image/png;base64,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", + "use_cases": [ + "Enrichment & Analysis", + "Threat Intelligence", + "Commercial Threat Intel" + ], + "verified": true, + "last_verified_date": null, + "playbook_supported": false, + "max_confidence_level": 75, + "support_version": ">=6.0.0", + "subscription_link": null, + "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/internal-enrichment/anyrun-lookup", + "manager_supported": true, + "container_version": "rolling", + "container_image": "opencti/connector-anyrun-lookup", + "container_type": "INTERNAL_ENRICHMENT", + "config_schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://www.filigran.io/connectors/anyrun-lookup_config.schema.json", + "type": "object", + "properties": { + "OPENCTI_URL": { + "description": "The base URL of the OpenCTI instance.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "OPENCTI_TOKEN": { + "description": "The API token to connect to OpenCTI.", + "type": "string" + }, + "CONNECTOR_NAME": { + "default": "ANY.RUN task", + "description": "The name of the connector.", + "type": "string" + }, + "CONNECTOR_SCOPE": { + "default": [ + "Artifact", + "Url" + ], + "description": "The scope of the connector.", + "items": { + "type": "string" + }, + "type": "array" + }, + "CONNECTOR_LOG_LEVEL": { + "default": "error", + "description": "The minimum level of logs to display.", + "enum": [ + "debug", + "info", + "warn", + "warning", + "error" + ], + "type": "string" + }, + "CONNECTOR_TYPE": { + "const": "INTERNAL_ENRICHMENT", + "default": "INTERNAL_ENRICHMENT", + "type": "string" + }, + "CONNECTOR_AUTO": { + "default": false, + "description": "Whether the connector should run automatically when an entity is created or updated.", + "type": "boolean" + }, + "ANYRUN_API_KEY": { + "description": "ANY.RUN TI Lookup API-KEY. See 'Generate API KEY' section in the README file.", + "format": "password", + "type": "string", + "writeOnly": true + }, + "ANYRUN_LOOKUP_DEPTH": { + "default": 90, + "type": "integer", + "description": "Specify the number of days from the current date for which you want to lookup." + } + }, + "required": [ + "OPENCTI_URL", + "OPENCTI_TOKEN", + "ANYRUN_API_KEY" + ], + "additionalProperties": true + } + }, { "title": "ANY.RUN Task", "slug": "anyrun-task", - "description": "Analyze URL or Artifact in ANY.RUN Interactive Online Malware Sandbox", - "short_description": "Analyze Url or Artifact in ANY.RUN Interactive Online Malware Sandbox", + "description": "ANY.RUN's Interactive Sandbox is a cloud-based service that provides SOC teams with a simple way to analyze cyber threats, enabling rapid threat intelligence and deep analysis in a secure environment.", + "short_description": "Analyze Url or StixFile in ANY.RUN Interactive Sandbox", "logo": "data:image/png;base64,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", "use_cases": [ "Enrichment & Analysis", @@ -8335,7 +9779,7 @@ "verified": true, "last_verified_date": null, "playbook_supported": false, - "max_confidence_level": 75, + "max_confidence_level": 100, "support_version": ">=6.0.0", "subscription_link": null, "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/internal-enrichment/anyrun-task", @@ -8366,7 +9810,7 @@ }, "CONNECTOR_SCOPE": { "default": [ - "Artifact", + "StixFile", "Url" ], "description": "The scope of the connector.", @@ -8397,140 +9841,156 @@ "description": "Whether the connector should run automatically when an entity is created or updated.", "type": "boolean" }, - "ANYRUN_TOKEN": { - "description": "ANY.RUN API token for authentication.", + "ANYRUN_API_KEY": { + "description": "ANY.RUN Sandbox API-KEY. See 'Generate API KEY' section in the README file.", "format": "password", "type": "string", "writeOnly": true }, - "ANYRUN_MAX_TLP": { - "default": "TLP:AMBER", - "description": "Maximum TLP level for the connector.", + "ANYRUN_OPT_TIMEOUT": { + "default": null, + "type": "integer", + "description": "Select analysis completion time. Size range: 10-660 seconds." + }, + "ANYRUN_OPT_NETWORK_CONNECT": { + "default": true, + "description": "Enable network connection.", + "type": "boolean" + }, + "ANYRUN_OPT_NETWORK_FAKENET": { + "default": false, + "description": "Enable FakeNet feature.", + "type": "boolean" + }, + "ANYRUN_TOR": { + "default": false, + "description": "Enable TOR using.", + "type": "boolean" + }, + "ANYRUN_GEO": { + "default": "fastest", + "description": "TOR geolocation option. Example: US, AU", + "type": "string" + }, + "ANYRUN_MITM": { + "default": false, + "description": "Enable HTTPS MITM Proxy using.", + "type": "boolean" + }, + "ANYRUN_RESIDENTIAL_PROXY": { + "default": false, + "description": "Residential proxy using.", + "type": "boolean" + }, + "ANYRUN_RESIDENTIAL_PROXY_GEO": { + "default": "fastest", + "description": "Residential proxy geolocation option. Example: US, AU.", + "type": "string" + }, + "ANYRUN_PRIVACY_TYPE": { + "default": "bylink", + "description": "Privacy settings.", "enum": [ - "TLP:WHITE", - "TLP:CLEAR", - "TLP:GREEN", - "TLP:AMBER", - "TLP:AMBER+STRICT", - "TLP:RED" + "public", + "bylink", + "owner", + "team" ], "type": "string" }, - "ANYRUN_URL": { - "default": "https://api.any.run/", - "description": "Base URL for the ANY.RUN API.", - "format": "uri", - "maxLength": 2083, - "minLength": 1, - "type": "string" + "ANYRUN_OBJ_EXT_EXTENSION": { + "default": true, + "description": "Automatically change file extension to valid.", + "type": "boolean" }, - "ANYRUN_TASK_TIMER": { - "default": 60, - "description": "Sandbox execution time in seconds.", - "type": "integer" + "ANYRUN_ENV_LOCALE": { + "default": "en-US", + "description": "Operation system's language. Use locale identifier or country name (Ex: en-US or Brazil). Case-insensitive.", + "type": "string" }, - "ANYRUN_OS": { + "ANYRUN_OS_TYPE": { "default": "windows", - "description": "Operating system for sandbox environment.", + "description": "Operating system.", + "enum": [ + "windows", + "linux", + "android" + ], "type": "string" }, - "ANYRUN_BITNESS": { - "default": null, - "deprecated": true, - "type": "string", - "description": "Use ANYRUN_OS_BITNESS instead." + "ANYRUN_ENV_VERSION": { + "default": "10", + "description": "Windows environment version.", + "enum": [ + "7", + "10", + "11" + ], + "type": "string" }, - "ANYRUN_OS_BITNESS": { + "ANYRUN_ENV_BITNESS": { "default": "64", - "description": "Operating system bitness: `32` or `64`.", + "description": "Operating system bitness: 32 or 64 for Windows, 64 for Linux and Android.", "enum": [ "32", "64" ], "type": "string" }, - "ANYRUN_VERSION": { - "default": null, - "deprecated": true, - "type": "string", - "description": "Use ANYRUN_OS_VERSION instead." - }, - "ANYRUN_OS_VERSION": { - "default": "10", - "description": "Windows version: `7`, `8.1`, `10`, or `11`.", + "ANYRUN_ENV_TYPE": { + "default": "complete", + "description": "Windows environment type. You can select development env for OS Windows 10 x64. For all other cases, complete env is required.", "enum": [ - "7", - "8.1", - "10", - "11" + "complete", + "development" ], "type": "string" }, - "ANYRUN_LOCALE": { - "default": null, - "deprecated": true, - "type": "string", - "description": "Use ANYRUN_OS_LOCALE instead." + "ANYRUN_OBJ_EXT_STARTFOLDER": { + "default": "temp", + "description": "Start object from.", + "enum": [ + "desktop", + "home", + "downloads", + "appdata", + "temp", + "windows", + "root" + ], + "type": "string" }, - "ANYRUN_OS_LOCALE": { - "default": "en-US", - "description": "Operating system language locale.", + "ANYRUN_OBJ_EXT_CMD": { + "default": "", + "description": "Optional command-line arguments for the analyzed object. Use an empty string '' to apply the default behavior.", "type": "string" }, - "ANYRUN_BROWSER": { - "default": null, - "deprecated": true, - "type": "string", - "description": "Use ANYRUN_OS_BROWSER instead." + "ANYRUN_OBJ_FORCE_ELEVATION": { + "default": true, + "description": "Forces the file to execute with elevated privileges and an elevated token (for PE32, PE32+, PE64 files only).", + "type": "boolean" }, - "ANYRUN_OS_BROWSER": { + "ANYRUN_OBJ_EXT_BROWSER": { "default": "Google Chrome", - "description": "Browser for URL analysis: `Google Chrome`, `Mozilla Firefox`, `Opera`, `Internet Explorer`, `Microsoft Edge`.", + "description": "Browser name.", "enum": [ "Google Chrome", "Mozilla Firefox", - "Opera", "Internet Explorer", "Microsoft Edge" ], "type": "string" }, - "ANYRUN_PRIVACY": { - "default": "bylink", - "description": "Task privacy: `public`, `bylink`, `owner`, `team`.", - "enum": [ - "public", - "bylink", - "owner", - "team" - ], - "type": "string" - }, - "ANYRUN_AUTOMATED_INTERACTIVITY": { - "default": false, - "description": "Enable ML-based automated interactivity during analysis.", - "type": "boolean" - }, - "ANYRUN_IOC": { + "ANYRUN_RUN_AS_ROOT": { "default": true, - "description": "Import IOCs (domains, URLs, IPs) extracted during analysis.", - "type": "boolean" - }, - "ANYRUN_MITRE": { - "default": false, - "description": "Create relationships to MITRE ATT&CK techniques.", - "type": "boolean" - }, - "ANYRUN_PROCESSES": { - "default": false, - "description": "Import malicious process observables.", + "description": "Run file with superuser privileges.", "type": "boolean" } }, "required": [ "OPENCTI_URL", "OPENCTI_TOKEN", - "ANYRUN_TOKEN" + "ANYRUN_API_KEY" ], "additionalProperties": true } @@ -8655,37 +10115,139 @@ "description": "Whether the connector should run automatically when an entity is created or updated.", "type": "boolean" }, - "CENSYS_ENRICHMENT_MAX_TLP": { + "CENSYS_ENRICHMENT_MAX_TLP": { + "default": "TLP:AMBER", + "description": "The maximum TLP level allowed for enrichment.", + "enum": [ + "TLP:WHITE", + "TLP:CLEAR", + "TLP:GREEN", + "TLP:AMBER", + "TLP:AMBER+STRICT", + "TLP:RED" + ], + "type": "string" + }, + "CENSYS_ENRICHMENT_ORGANISATION_ID": { + "description": "Censys organisation ID.", + "format": "password", + "type": "string", + "writeOnly": true + }, + "CENSYS_ENRICHMENT_TOKEN": { + "description": "Censys API token.", + "format": "password", + "type": "string", + "writeOnly": true + } + }, + "required": [ + "OPENCTI_URL", + "OPENCTI_TOKEN", + "CENSYS_ENRICHMENT_ORGANISATION_ID", + "CENSYS_ENRICHMENT_TOKEN" + ], + "additionalProperties": true + } + }, + { + "title": "Criminal IP", + "slug": "criminal-ip", + "description": "Criminal IP is a cyber threat intelligence search engine that enriches IPv4 addresses with reputation scores, geolocation, autonomous system data, and vulnerability information. It also enriches domain names with phishing probability, resolved IPs, and associated server locations.", + "short_description": "Enriches IPv4 addresses and domain names with Criminal IP threat intelligence.", + "logo": "data:image/png;base64,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", + "use_cases": [ + "Enrichment & Analysis" + ], + "verified": true, + "last_verified_date": "2026-04-24", + "playbook_supported": true, + "max_confidence_level": 95, + "support_version": ">=6.8.13", + "subscription_link": "https://www.criminalip.io", + "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/internal-enrichment/criminal-ip", + "manager_supported": true, + "container_version": "rolling", + "container_image": "opencti/connector-criminal-ip", + "container_type": "INTERNAL_ENRICHMENT", + "config_schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://www.filigran.io/connectors/criminal-ip_config.schema.json", + "type": "object", + "properties": { + "OPENCTI_URL": { + "description": "The base URL of the OpenCTI instance.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "OPENCTI_TOKEN": { + "description": "The API token to connect to OpenCTI.", + "type": "string" + }, + "CONNECTOR_NAME": { + "default": "Criminal IP", + "description": "The name of the connector", + "type": "string" + }, + "CONNECTOR_SCOPE": { + "default": [ + "IPv4-Addr", + "Domain-Name" + ], + "description": "The scope of the connector.", + "items": { + "type": "string" + }, + "type": "array" + }, + "CONNECTOR_LOG_LEVEL": { + "default": "error", + "description": "The minimum level of logs to display.", + "enum": [ + "debug", + "info", + "warn", + "warning", + "error" + ], + "type": "string" + }, + "CONNECTOR_TYPE": { + "const": "INTERNAL_ENRICHMENT", + "default": "INTERNAL_ENRICHMENT", + "type": "string" + }, + "CONNECTOR_AUTO": { + "default": false, + "description": "Whether the connector should run automatically when an entity is created or updated.", + "type": "boolean" + }, + "CRIMINAL_IP_TOKEN": { + "description": "Criminal IP API key.", + "format": "password", + "type": "string", + "writeOnly": true + }, + "CRIMINAL_IP_MAX_TLP": { "default": "TLP:AMBER", - "description": "The maximum TLP level allowed for enrichment.", + "description": "Max TLP level of entities to enrich.", "enum": [ - "TLP:WHITE", "TLP:CLEAR", + "TLP:WHITE", "TLP:GREEN", "TLP:AMBER", "TLP:AMBER+STRICT", "TLP:RED" ], "type": "string" - }, - "CENSYS_ENRICHMENT_ORGANISATION_ID": { - "description": "Censys organisation ID.", - "format": "password", - "type": "string", - "writeOnly": true - }, - "CENSYS_ENRICHMENT_TOKEN": { - "description": "Censys API token.", - "format": "password", - "type": "string", - "writeOnly": true } }, "required": [ "OPENCTI_URL", "OPENCTI_TOKEN", - "CENSYS_ENRICHMENT_ORGANISATION_ID", - "CENSYS_ENRICHMENT_TOKEN" + "CRIMINAL_IP_TOKEN" ], "additionalProperties": true } @@ -8902,11 +10464,11 @@ } }, { - "title": "ESET ETI Report", + "title": "ESET Threat Intelligence Reports", "slug": "eset", - "description": "The OpenCTI ESET ETI Report Enrichment Connector can be used to import knowledge from the ESET ETI Report API.", - "short_description": "The OpenCTI ESET ETI Report Enrichment Connector can be used to import knowledge from the ESET ETI Report API.", - "logo": "data:image/png;base64,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", + "description": "The ESET Threat Intelligence Reports Connector enhances OpenCTI by automatically enriching ESET Threat Intelligence (ETI) report objects with high-value, analyst-ready data. Designed for teams that rely on ESET's advanced threat research, the connector seamlessly retrieves detailed PDF intelligence reports directly from the ESET portal and attaches them to corresponding ESET report entities inside OpenCTI.\n\nESET Threat Intelligence delivers deep insights into APT activity, eCrime and infostealer activity, malware behavior, and threat actor profiles, enabling security teams to understand adversary tactics and improve detection and response. The connector identifies ESET report objects containing external references to ETI and enriches them by downloading the associated PDF reports, ensuring analysts have direct access to the full intelligence package without leaving the OpenCTI interface.\n\nThis integration streamlines analysts' workflows by centralizing ESET content within OpenCTI, reducing portal switching, and improving data continuity across investigations. Once deployed, the connector runs reliably in background enrichment workflows, supporting automated, playbook-driven, or manual enrichment modes depending on operational needs.", + "short_description": "Enriches OpenCTI by automatically downloading and attaching detailed ESET threat reports to ESET report objects, giving analysts direct insight into APT groups, eCrime, infostealer activity, and malware intelligence.", + "logo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABaAAAAMgCAYAAADVwMUqAAAgAElEQVR4Xuzd329dxb3///dyggFBiANIoFQ0jlIJOBfYSOTc5CI2F5QjtbIDagUisZ0igXZuMH9BnL8Ac+OtIp3GdkBUrU7jqJU+7bkgjvTNFZVwuDgt0kExBxVRCYhDQIWQeH9nttnEBNt77b3Wmnm/13paivoja8285zHj7fi1Z89KhC8EEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBAoQSApokyYRQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEBACaBYBAggggAACCCCAAAIIIIAAAggggAACCCCAQCECBNCFsNIoAggggAACCCCAAAIIIIAAAggggAACCCCAAAE0awABBBBAAAEEEEAAAQQQQAABBBBAAAEEEECgEAEC6EJYaRQBBBBAAAEEEEAAAQQQQAABBBBAAAEEEECAAJo1gAACCCCAAAIIIIAAAggggAACCCCAAAIIIFCIAAF0Iaw0igACCCCAAAIIIIAAAggggAACCCCAAAIIIEAAzRpAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQKESAALoQVhpFAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQIIBmDSCAAAIIIIAAAggggAACCCCAAAIIIIAAAggUIkAAXQgrjSKAAAIIIIAAAggggAACCCCAAAIIIIAAAggQQLMGEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBAoRIIAuhJVGEUAAAQQQQAABBBBAAAEEEEAAAQQQQAABBAigWQMIIIAAAggggAACCCCAAAIIIIAAAggggAAChQgQQBfCSqMIIIAAAggggAACCCCAAAIIIIAAAggggAACBNCsAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAIFCBAigC2GlUQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAECaNYAAggggAACCCCAAAIIIIAAAggggAACCCCAQCECBNCFsNIoAggggAACCCCAAAIIIIAAAggggAACCCCAAAE0awABBBBAAAEEEEAAAQQQQAABBBBAAAEEEECgEAEC6EJYaRQBBBBAAAEEEEAAAQQQQAABBBBAAAEEEECAAJo1gAACCCCAAAIIIIAAAggggAACCCCAAAIIIFCIAAF0Iaw0igACCCCAAAIIIIAAAggg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gAABAgQIECBAgMDiBQSgF98EABAgQIAAAQIECBAgQIAAAQIECBAgQKCOgAB0HVepEiBAgAABAgQIECBAgAABAgQIECBAYPECAtCLbwIACBAgQIAAAQIECBAgQIAAAQIECBAgUEdAALqOq1QJECBAgAABAgQIECBAgAABAgQIECCweAEB6MU3AQAECBAgQIAAAQIECBAgQIAAAQIECBCoIyAAXcdVqgQIECBAgAABAgQIECBAgAABAgQIEFi8gAD04psAAAIECBAgQIAAAQIECBAgQIAAAQIECNQREICu4ypVAgQIECBAgAABAgQIECBAgAABAgQILF5AAHrxTQAAAQIECBAgQIAAAQIECBAgQIAAAQIE6ggIQNdxlSoBAgQIECBAgAABAgQIECBAgAABAgQWLyAAvfgmAIAAAQIECBAgQIAAAQIECBAgQIAAAQJ1BASg67hKlQABAgQIECBAgAABAgQIECBAgAABAosXEIBefBMAQIAAAQIECBAgQIAAAQIECBAgQIAAgToCAtB1XKVKgAABAgQIECBAgAABAgQIECBAgACBxQsIQC++CQAgQIAAAQIECBAgQIAAAQIECBAgQIBAHQEB6DquUiVAgAABAgQIECBAgAABAgQIECBAgMDiBQSgF98EABAgQIAAAQIECBAgQIAAAQIECBAgQKCOgAB0HVepEiBAgAABAgQIECBAgAABAgQIECBAYPECAtCLbwIACBAgQIAAAQIECBAgQIAAAQIECBAgUEdAALqOq1QJECBAgAABAgQIECBAgAABAgQIECCweAEB6MU3AQAECBAgQIAAAQIECBAgQIAAAQIECBCoIyAAXcdVqgQIECBAgAABAgQIECBAgAABAgQIEFi8gAD04psAAAIECBAgQIAAAQIECBAgQIAAAQIECNQREICu4ypVAgQIECBAgAABAgQIECBAgAABAgQILF5AAHrxTQAAAQIECBAgQIAAAQIECBAgQIAAAQIE6ggIQNdxlSoBAgQIECBAgAABAgQIECBAgAABAgQWLyAAvfgmAIAAAQIECBAgQIAAAQIECBAgQIAAAQJ1BASg67hKlQABAgQIECBAgAABAgQIECBAgAABAosXEIBefBMAQIAAAQIECBAgQIAAAQIECBAgQIAAgToCAtB1XKVKgAABAgQIECBAgAABAgQIECBAgACBxQsIQC++CQAgQIAAAQIECBAgQIAAAQIECBAgQIBAHQEB6DquUiVAgAABAgQIECBAgAABAgQIECBAgMDiBQSgF98EABAgQIAAAQIECBAgQIAAAQIECBAgQKCOgAB0HVepEiBAgAABAgQIECBAgAABAgQIECBAYPECAtCLbwIACBAgQIAAAQIECBAgQIAAAQIECBAgUEdAALqOq1QJECBAgAABAgQIECBAgAABAgQIECCweAEB6MU3AQAECBAgQIAAAQIECBAgQIAAAQIECBCoIyAAXcdVqgQIECBAgAABAgQIECBAgAABAgQIEFi8gAD04psAAAIECBAgQIAAAQIECBAgQIAAAQIECNQREICu4ypVAgQIECBAgAABAgQIECBAgAABAgQILF5AAHrxTQAAAQIECBAgQIAAAQIECBAgQIAAAQIE6ggIQNdxlSoBAgQIECBAgAABAgQIECBAgAABAgQWLyAAvfgmAIAAAQIECBAgQIAAAQIECBAgQIAAAQJ1BASg67hKlQABAgQIECBAgAABAgQIECBAgAABAosXEIBefBMAQIAAAQIECBAgQIAAAQIECBAgQIAAgToCAtB1XKVKgAABAgQIECBAgAABAgQIECBAgACBxQsIQC++CQAgQIAAAQIECBAgQIAAAQIECBAgQIBAHQEB6DquUiVAgAABAgQIECBAgAABAgQIECBAgMDiBQSgF98EABAgQIAAAQIECBAgQIAAAQIECBAgQKCOgAB0HVepEiBAgAABAgQIECBAgAABAgQIECBAYPECAtCLbwIACBAgQIAAAQIECBAgQIAAAQIECBAgUEdAALqOq1QJECBAgAABAgQIECBAgAABAgQIECCweAEB6MU3AQAECBAgQIAAAQIECBAgQIAAAQIECBCoIyAAXcdVqgQIECBAgAABAgQIECBAgAABAgQIEFi8gAD04psAAAIECBAgQIAAAQIECBAgQIAAAQIECNQREICu4ypVAgQIECBAgAABAgQIECBAgAABAgQILF5AAHrxTQAAAQIECBAgQIAAAQIECBAgQIAAAQIE6ggIQNdxlSoBAgQIECBAgAABAgQIECBAgAABAgQWLyAAvfgmAIAAAQIECBAgQIAAAQIECBAgQIAAAQJ1BASg67hKlQABAgQIECBAgAABAgQIECBAgAABAosXEIBefBMAQIAAAQIECBAgQIAAAQIECBAgQIAAgToCAtB1XKVKgAABAgQIECBAgAABAgQIECBAgACBxQsIQC++CQAgQIAAAQIECBAgQIAAAQIECBAgQIBAHQEB6DquUiVAgAABAgQIECBAgAABAgQIECBAgMDiBQSgF98EABAgQIAAAQIECBAgQIAAAQIECBAgQKCOgAB0HVepEiBAgAABAgQIECBAgAABAgQIECBAYPEC/w/fQb/fGgFVYwAAAABJRU5ErkJggg==", "use_cases": [ "Enrichment & Analysis" ], @@ -9804,11 +11366,13 @@ { "title": "ONYPHE", "slug": "onyphe", - "description": "The ONYPHE enrichment connector is designed to leverage the Ctiscan category of data to enrich observables, providing detailed Internet scan data\n and mapping for open ports, protocols, banners and relationships \u2014 including ASNs, organizations, certificates,\n DNS domains, technologies, ports, countries and analytical pivots such as Ja4s.\n In addition the Indicators can be enriched using the 'onyphe' pattern to run threat-hunting queries within the OpenCTI platform and import matching observables.", - "short_description": "ONYPHE connector enriches observables and indicators with Internet intelligence and mapping data.", + "description": "The ONYPHE enrichment connector supports two complementary use cases via separate data categories.\n\nFor threat intelligence (ctiscan), it enriches observables with detailed Internet scan data and mapping for open ports, protocols, banners and relationships \u2014 including ASNs, organizations, certificates, DNS domains, technologies, ports, countries and analytical pivots such as JA4S and HHHash.\n\nFor attack surface management (riskscan), it enriches IP addresses, hostnames and domains with exposure data: open services, risk tags (e.g. risk::opendatabase), CVE vulnerabilities and associated infrastructure.\n\nIn addition, Indicators can be enriched using the 'onyphe' pattern to run threat-hunting queries within the OpenCTI platform and import matching observables.\n\nMultiple instances of the connector can run side by side \u2014 one per category \u2014 each with independent scope, confidence and auto-enrichment settings.", + "short_description": "ONYPHE connector enriches observables and indicators with Internet intelligence for threat intelligence (ctiscan) and attack surface management (riskscan).", "logo": "data:image/png;base64,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", "use_cases": [ - "Commercial Internet scan data & mapping" + "Commercial Internet scan data & mapping", + "Attack Surface Management", + "Threat Hunting" ], "verified": false, "last_verified_date": null, @@ -10684,8 +12248,8 @@ { "title": "Team Cymru Scout Search", "slug": "team-cymru-scout-search", - "description": "Scout Search Connector provides real-time visibility of external threats using Team Cymru Scout API. This connector enriches Text observables via playbook queries to retrieve threat intelligence.", - "short_description": "Enriches Text observables using Team Cymru Scout Search API for playbook-based threat intelligence queries.", + "description": "Scout Search Connector provides real-time visibility of external threats using Team Cymru Scout API. This connector enriches Indicator observables via playbook queries to retrieve threat intelligence.", + "short_description": "Enriches Indicator observables using Team Cymru Scout Search API for playbook-based threat intelligence queries.", "logo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAEtWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIKICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgdGlmZjpJbWFnZUxlbmd0aD0iMjAwIgogICB0aWZmOkltYWdlV2lkdGg9IjIwMCIKICAgdGlmZjpSZXNvbHV0aW9uVW5pdD0iMiIKICAgdGlmZjpYUmVzb2x1dGlvbj0iNzIvMSIKICAgdGlmZjpZUmVzb2x1dGlvbj0iNzIvMSIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjIwMCIKICAgZXhpZjpQaXhlbFlEaW1lbnNpb249IjIwMCIKICAgZXhpZjpDb2xvclNwYWNlPSIxIgogICBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIgogICBwaG90b3Nob3A6SUNDUHJvZmlsZT0ic1JHQiBJRUM2MTk2Ni0yLjEiCiAgIHhtcDpNb2RpZnlEYXRlPSIyMDI1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", "use_cases": [ "Enrichment & Analysis" @@ -10724,7 +12288,7 @@ }, "CONNECTOR_SCOPE": { "default": [ - "Text" + "Indicator" ], "description": "The scope of the connector.", "items": { @@ -10774,6 +12338,16 @@ "default": 1, "description": "Search interval in days (default: 1)", "type": "integer" + }, + "PURE_SIGNAL_SCOUT_INDICATOR_PATTERN_TYPE": { + "default": "pure-signal-scout", + "description": "Pattern type for Scout indicators", + "type": "string" + }, + "PURE_SIGNAL_SCOUT_PATTERN_DESCRIPTION": { + "default": "Scout Search Query Pattern", + "description": "Description for the Scout pattern type", + "type": "string" } }, "required": [ @@ -11179,7 +12753,8 @@ "IPv4-Addr", "Domain-Name", "Url", - "Hostname" + "Hostname", + "Indicator" ], "description": "The scope or type of data the connector is importing, either a MIME type or Stix Object (for information only).", "items": { @@ -11367,17 +12942,90 @@ "use_cases": [ "Malware Analysis" ], - "verified": false, - "last_verified_date": null, + "verified": true, + "last_verified_date": "2026-04-09", "playbook_supported": false, "max_confidence_level": 50, "support_version": ">= 5.7.2", "subscription_link": "", "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/internal-enrichment/yara", - "manager_supported": false, + "manager_supported": true, "container_version": "rolling", "container_image": "opencti/connector-yara", - "container_type": "INTERNAL_ENRICHMENT" + "container_type": "INTERNAL_ENRICHMENT", + "config_schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://www.filigran.io/connectors/yara_config.schema.json", + "type": "object", + "properties": { + "OPENCTI_URL": { + "description": "The base URL of the OpenCTI instance.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "OPENCTI_TOKEN": { + "description": "The API token to connect to OpenCTI.", + "type": "string" + }, + "CONNECTOR_NAME": { + "default": "YARA", + "description": "The name of the connector.", + "type": "string" + }, + "CONNECTOR_SCOPE": { + "default": [ + "Artifact" + ], + "description": "The scope of the connector.", + "items": { + "type": "string" + }, + "type": "array" + }, + "CONNECTOR_LOG_LEVEL": { + "default": "error", + "description": "The minimum level of logs to display.", + "enum": [ + "debug", + "info", + "warn", + "warning", + "error" + ], + "type": "string" + }, + "CONNECTOR_TYPE": { + "const": "INTERNAL_ENRICHMENT", + "default": "INTERNAL_ENRICHMENT", + "type": "string" + }, + "CONNECTOR_AUTO": { + "default": false, + "description": "Whether the connector should run automatically when an entity is created or updated.", + "type": "boolean" + }, + "YARA_TLP_LEVEL": { + "description": "Default TLP marking to apply to created relationships when neither the artifact nor the indicator have markings.", + "enum": [ + "clear", + "white", + "green", + "amber", + "amber+strict", + "red" + ], + "type": "string", + "default": "clear" + } + }, + "required": [ + "OPENCTI_URL", + "OPENCTI_TOKEN" + ], + "additionalProperties": true + } }, { "title": "Export File Csv", @@ -11631,6 +13279,28 @@ "container_image": "opencti/connector-import-ttps-file-navigator", "container_type": "INTERNAL_IMPORT_FILE" }, + { + "title": "Akamai Stream Connector", + "slug": "akamai-stream", + "description": "The Akamai Stream connector synchronizes IPv4 STIX Indicators from OpenCTI to an Akamai Client List. It listens to the OpenCTI live stream and automatically adds or removes IP indicators in the configured Akamai Client List, enabling near real-time enforcement of threat intelligence data.", + "short_description": "Synchronizes OpenCTI IPv4 indicators with an Akamai Client List via stream.", + "logo": "data:image/png;base64,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", + "use_cases": [ + "Threat Intelligence Distribution", + "Network Protection" + ], + "verified": false, + "last_verified_date": null, + "playbook_supported": false, + "max_confidence_level": 80, + "support_version": ">= 6.7.0", + "subscription_link": "https://www.akamai.com/", + "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/stream/akamai", + "manager_supported": false, + "container_version": "rolling", + "container_image": "opencti/connector-akamai-stream", + "container_type": "STREAM" + }, { "title": "Backup Files", "slug": "backup-files", @@ -11781,6 +13451,35 @@ "description": "Enable Android and iOS platform support.", "type": "boolean" }, + "CROWDSTRIKE_ACTION_ON_IP": { + "default": "detect", + "description": "Action to apply on IP indicators pushed to CrowdStrike.", + "enum": [ + "no_action", + "detect" + ], + "type": "string" + }, + "CROWDSTRIKE_ACTION_ON_DOMAIN": { + "default": "detect", + "description": "Action to apply on domain indicators pushed to CrowdStrike.", + "enum": [ + "no_action", + "detect" + ], + "type": "string" + }, + "CROWDSTRIKE_ACTION_ON_HASH": { + "default": "detect", + "description": "Action to apply on hash indicators pushed to CrowdStrike.", + "enum": [ + "no_action", + "allow", + "detect", + "prevent" + ], + "type": "string" + }, "METRICS_ENABLE": { "default": false, "description": "Whether or not Prometheus metrics should be enabled.", @@ -11845,16 +13544,155 @@ "SIEM & Analytics" ], "verified": true, - "last_verified_date": null, + "last_verified_date": "2026-05-05", "playbook_supported": false, "max_confidence_level": 80, "support_version": ">= 6.4.0", "subscription_link": "https://cloud.google.com/chronicle/docs/overview", "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/stream/google-secops-siem", - "manager_supported": false, + "manager_supported": true, "container_version": "rolling", "container_image": "opencti/connector-google-secops-siem", - "container_type": "STREAM" + "container_type": "STREAM", + "config_schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://www.filigran.io/connectors/google-secops-siem_config.schema.json", + "type": "object", + "properties": { + "OPENCTI_URL": { + "description": "The base URL of the OpenCTI instance.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "OPENCTI_TOKEN": { + "description": "The API token to connect to OpenCTI.", + "type": "string" + }, + "CONNECTOR_NAME": { + "default": "GoogleSecOpsSIEM", + "description": "The name of the connector.", + "type": "string" + }, + "CONNECTOR_SCOPE": { + "default": [ + "google-secops-siem" + ], + "description": "The scope of the connector", + "items": { + "type": "string" + }, + "type": "array" + }, + "CONNECTOR_LOG_LEVEL": { + "default": "error", + "description": "The minimum level of logs to display.", + "enum": [ + "debug", + "info", + "warn", + "warning", + "error" + ], + "type": "string" + }, + "CONNECTOR_TYPE": { + "const": "STREAM", + "default": "STREAM", + "type": "string" + }, + "CONNECTOR_LIVE_STREAM_ID": { + "description": "ID of the live stream to connect to (created in the OpenCTI UI).", + "type": "string" + }, + "CONNECTOR_LIVE_STREAM_LISTEN_DELETE": { + "default": true, + "description": "Whether to listen for delete events on the live stream.", + "type": "boolean" + }, + "CONNECTOR_LIVE_STREAM_NO_DEPENDENCIES": { + "default": true, + "description": "Whether to ignore dependencies when processing events from the live stream.", + "type": "boolean" + }, + "SECOPS_SIEM_PROJECT_ID": { + "description": "Google Cloud project ID for the SecOps SIEM instance.", + "type": "string" + }, + "SECOPS_SIEM_PROJECT_INSTANCE": { + "description": "Google SecOps SIEM project instance identifier.", + "type": "string" + }, + "SECOPS_SIEM_PROJECT_REGION": { + "default": "us", + "description": "Google SecOps SIEM project region (e.g. 'us', 'eu', 'apac').", + "type": "string" + }, + "SECOPS_SIEM_PRIVATE_KEY_ID": { + "description": "Service account private key ID.", + "type": "string" + }, + "SECOPS_SIEM_PRIVATE_KEY": { + "description": "Service account private key (PEM format).", + "format": "password", + "type": "string", + "writeOnly": true + }, + "SECOPS_SIEM_CLIENT_EMAIL": { + "description": "Service account client email.", + "type": "string" + }, + "SECOPS_SIEM_CLIENT_ID": { + "description": "Service account client ID.", + "type": "string" + }, + "SECOPS_SIEM_AUTH_URI": { + "default": "https://accounts.google.com/o/oauth2/auth", + "description": "OAuth2 authorization URI.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "SECOPS_SIEM_TOKEN_URI": { + "default": "https://oauth2.googleapis.com/token", + "description": "OAuth2 token URI.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "SECOPS_SIEM_AUTH_PROVIDER_CERT": { + "default": "https://www.googleapis.com/oauth2/v1/certs", + "description": "Auth provider x509 certificate URL.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "SECOPS_SIEM_CLIENT_CERT_URL": { + "description": "Client x509 certificate URL.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "OPENCTI_URL", + "OPENCTI_TOKEN", + "CONNECTOR_LIVE_STREAM_ID", + "SECOPS_SIEM_PROJECT_ID", + "SECOPS_SIEM_PROJECT_INSTANCE", + "SECOPS_SIEM_PRIVATE_KEY_ID", + "SECOPS_SIEM_PRIVATE_KEY", + "SECOPS_SIEM_CLIENT_EMAIL", + "SECOPS_SIEM_CLIENT_ID", + "SECOPS_SIEM_CLIENT_CERT_URL" + ], + "additionalProperties": true + } }, { "title": "HarfangLab Intel", @@ -12241,7 +14079,6 @@ }, "MICROSOFT_SENTINEL_INTEL_RESOURCE_GROUP": { "default": "default", - "deprecated": true, "description": "The name of the resource group where the log analytics is", "type": "string" }, @@ -12272,6 +14109,41 @@ "default": "2025-03-01", "description": "API version of the Microsoft management interface", "type": "string" + }, + "MICROSOFT_SENTINEL_INTEL_QUERY_API_VERSION": { + "default": "2025-07-01-preview", + "description": "API version of the Microsoft Sentinel threat-intel /query endpoint", + "type": "string" + }, + "MICROSOFT_SENTINEL_INTEL_BATCH_MODE": { + "default": false, + "description": "Enable batch mode for bulk uploading STIX objects. When disabled (default), objects are sent individually in real-time.", + "type": "boolean" + }, + "MICROSOFT_SENTINEL_INTEL_BATCH_SIZE": { + "default": 100, + "description": "Maximum number of unique STIX objects to accumulate before flushing a batch. Only used when batch_mode is enabled. Maxed at 100 because the Sentinel Upload Indicators API rejects requests containing more than 100 STIX objects.", + "maximum": 100, + "minimum": 1, + "type": "integer" + }, + "MICROSOFT_SENTINEL_INTEL_BATCH_TIMEOUT": { + "default": 30, + "description": "Maximum time in seconds to wait before flushing a partial batch. Only used when batch_mode is enabled.", + "minimum": 1, + "type": "integer" + }, + "MICROSOFT_SENTINEL_INTEL_EVENT_TYPES": { + "default": [ + "create", + "update", + "delete" + ], + "description": "Comma-separated list of event types to process (create, update, delete). Defaults to all three; a single instance handles every event type. Restrict this only if you want to split the workload across dedicated instances.", + "items": { + "type": "string" + }, + "type": "array" } }, "required": [ @@ -12455,6 +14327,11 @@ "description": "Perform hard deletion of MISP events (permanent deletion without blocklisting). If False, deleted events are added to the blocklist to prevent re-importation. If True, events are permanently deleted and can be re-imported later.", "type": "boolean" }, + "MISP_DETECT_ROUND_TRIP": { + "default": false, + "description": "Enable round-trip detection. When True, the connector checks if a container has an external reference from MISP (source_name='misp' with a valid external_id). If so, it updates the existing MISP event instead of creating a duplicate.", + "type": "boolean" + }, "PROXY_HTTP": { "default": null, "description": "HTTP proxy URL (e.g., http://proxy:8080).", diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000000..25b69a330fe --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,29 @@ +# Repository-wide tooling configuration. +# +# Pinning ``src_paths`` here keeps ``isort`` output identical no matter +# whether the command is invoked from the repository root, from a +# connector subdirectory that does **not** ship its own +# ``[tool.isort]`` section, or via the pre-commit hook. Without this +# file ``isort`` resolves first-party imports relative to its current +# working directory, so the same file ends up with a different +# ordering depending on where the contributor (or CI) happens to run +# from. See OpenCTI-Platform/connectors#4798 for the original bug +# report. +# +# A handful of connectors ship their own ``pyproject.toml`` with a +# ``[tool.isort]`` section (``external-import/dragos``, +# ``external-import/proofpoint-tap``, +# ``external-import/tenable-security-center``). ``isort`` walks up the +# tree looking for the *closest* config and stops at the first +# ``[tool.isort]`` it finds, so when ``isort`` is run from inside one +# of those connector directories the connector-level section takes +# precedence over this file. Those connectors keep their existing +# self-contained config on purpose (separate ``black`` / ``ruff`` / +# ``mypy`` settings, source layouts that already produce the desired +# isort output); the repository-wide CI invocation +# ``isort --profile black --check .`` is always run from the repo +# root and therefore picks up this file. + +[tool.isort] +profile = "black" +src_paths = ["."] diff --git a/renovate.json b/renovate.json index b7bece974cf..33df020cb02 100644 --- a/renovate.json +++ b/renovate.json @@ -11,6 +11,7 @@ "filigran team" ], "prConcurrentLimit": 2, + "commitMessagePrefix": "[tool] chore(deps):", "packageRules": [ { "matchUpdateTypes": [ diff --git a/run_test.sh b/run_test.sh index 406ae24eba5..ededd4d8418 100644 --- a/run_test.sh +++ b/run_test.sh @@ -36,8 +36,8 @@ do project_has_changed=$(git diff "$base_commit" HEAD "$project/..") project_has_sdk_dependency=$(grep -rl "connectors-sdk" "$project/.." || true) - if [ "$CIRCLE_BRANCH" = "master" ]; then - echo "🔄 On master branch, running all tests for: " "$project" + if [ "$CIRCLE_BRANCH" = "${RELEASE_REF:-"master"}" ]; then + echo "🔄 On ${RELEASE_REF:-"master"} branch, running all tests for: " "$project" elif [ -n "$changes_outside_of_connectors_scope" ] ; then echo "🔄 Changes detected outside of connectors scope - running all tests for: " "$project" elif [ -n "$sdk_has_change" ] && [ -n "$project_has_sdk_dependency" ] ; then @@ -49,14 +49,14 @@ do continue fi - echo 'Running tests pipeline for project' "$project" + echo 'Running tests uv pipeline for project' "$project" # Per-connector outputs OUT_DIR="test_outputs/$(echo "$project" | tr '/ ' '__')" mkdir -p "$OUT_DIR" echo 'Creating isolated virtual environment' - python -m venv "$venv_name" + uv venv -p 3.12 "$venv_name" if [ -f "$venv_name/bin/activate" ]; then source "$venv_name/bin/activate" # Linux/MacOS elif [ -f "$venv_name/Scripts/activate" ]; then @@ -64,27 +64,43 @@ do fi echo 'Installing requirements' - python -m pip install -q -r "$requirements_file" + uv pip install -q -r "$requirements_file" - python -m pip freeze | grep "connectors-sdk\|pycti" || true + if uv pip show pytest-cov >/dev/null 2>&1; then + pytest_cov_installed_by_requirements="true" + echo 'pytest-cov is provided by test requirements' + else + pytest_cov_installed_by_requirements="false" + echo 'pytest-cov is not provided by test requirements' + fi if [ -n "$project_has_sdk_dependency" ] ; then echo 'Installing connectors-sdk local version' - python -m pip uninstall -y connectors-sdk - python -m pip install -q ./connectors-sdk + uv pip uninstall connectors-sdk + uv pip install -q ./connectors-sdk fi - python -m pip freeze | grep "connectors-sdk\|pycti" || true - echo 'Installing latest version of pycti' - python -m pip uninstall -y pycti - python -m pip install -q git+https://github.com/OpenCTI-Platform/opencti.git@master#subdirectory=client-python - python -m pip freeze | grep "connectors-sdk\|pycti" || true + uv pip uninstall pycti + REF="${CIRCLE_TAG:-${RELEASE_REF:-"master"}}" + uv pip install -q git+https://github.com/OpenCTI-Platform/opencti.git@"$REF"#subdirectory=client-python + uv pip freeze | grep "connectors-sdk\|pycti" || true - python -m pip check || exit 1 # exit if dependencies are broken + uv pip check || exit 1 # exit if dependencies are broken echo 'Running tests' - python -m pytest "$project" --junitxml="$OUT_DIR/junit.xml" -q -rA # exit non zero if no test run + if [ "$pytest_cov_installed_by_requirements" = "true" ]; then + echo 'Using project pytest configuration' + # --cov is not needed because already configured as addopts in pyproject.toml + # --cov-append is needed to merge coverage results from multiple test runs + python -m pytest "$project" --cov-append --cov-report=xml \ + --junitxml="$OUT_DIR/junit.xml" -q -rA # exit non zero if no test run + else + echo 'Installing pytest-cov and using explicit coverage arguments' + uv pip install -q pytest-cov + python -m pytest "$project" --cov --cov-append \ + --cov-report=xml --junitxml="$OUT_DIR/junit.xml" -q -rA # exit non zero if no test run + fi echo 'Removing virtual environment' deactivate diff --git a/shared/tools/ci/detect-base-branch.sh b/shared/tools/ci/detect-base-branch.sh new file mode 100755 index 00000000000..4fa30a8ab3d --- /dev/null +++ b/shared/tools/ci/detect-base-branch.sh @@ -0,0 +1,72 @@ +#!/usr/bin/env bash +set -euo pipefail + +remote="${1:-origin}" + +candidates=() +while IFS= read -r line; do + candidates+=("${line}") +done < <( + { + git for-each-ref --format='%(refname:short)' "refs/remotes/${remote}/master" + git for-each-ref --format='%(refname:short)' "refs/remotes/${remote}/release/6.9.x" + git for-each-ref --format='%(refname:short)' "refs/remotes/${remote}/lts/*" + } | sed "s#^${remote}/##" | awk 'NF' | sort -u +) + +if [[ "${#candidates[@]}" -eq 0 ]]; then + echo "No candidate branch found on remote '${remote}'" >&2 + exit 1 +fi + +head_sha="$(git rev-parse HEAD)" + +# 1) If HEAD is exactly at candidate branch tip, return it immediately. +for branch in "${candidates[@]}"; do + branch_sha="$(git rev-parse "${remote}/${branch}" 2>/dev/null || true)" + if [[ -n "${branch_sha}" && "${branch_sha}" == "${head_sha}" ]]; then + echo "${branch}" + exit 0 + fi +done + +# 2) Prefer direct ancestry: candidate tip is ancestor of HEAD with shortest distance. +best_branch="" +best_distance=999999999 +for branch in "${candidates[@]}"; do + ref="${remote}/${branch}" + if ! git merge-base --is-ancestor "${ref}" HEAD 2>/dev/null; then + continue + fi + distance="$(git rev-list --count "${ref}..HEAD")" + if (( distance < best_distance )); then + best_branch="${branch}" + best_distance="${distance}" + fi +done +if [[ -n "${best_branch}" ]]; then + echo "${best_branch}" + exit 0 +fi + +# 3) Fallback: pick branch with nearest merge-base to HEAD. +for branch in "${candidates[@]}"; do + ref="${remote}/${branch}" + merge_base="$(git merge-base HEAD "${ref}" 2>/dev/null || true)" + if [[ -z "${merge_base}" ]]; then + continue + fi + distance="$(git rev-list --count "${merge_base}..HEAD")" + if (( distance < best_distance )); then + best_branch="${branch}" + best_distance="${distance}" + fi +done + +if [[ -n "${best_branch}" ]]; then + echo "${best_branch}" + exit 0 +fi + +echo "No candidate branch found" >&2 +exit 1 diff --git a/shared/tools/composer/generate_connectors_config_schemas/generate_connector_config_json_schema.sh b/shared/tools/composer/generate_connectors_config_schemas/generate_connector_config_json_schema.sh index e6f34a934a3..6090954b317 100755 --- a/shared/tools/composer/generate_connectors_config_schemas/generate_connector_config_json_schema.sh +++ b/shared/tools/composer/generate_connectors_config_schemas/generate_connector_config_json_schema.sh @@ -85,7 +85,7 @@ activate_venv() { # Method to activate isolate venv # Create isolated virtual environment in connector path - python -m venv "$1/$VENV_NAME" + uv venv "$1/$VENV_NAME" # Activate virtual environment according to OS if [ -f "$1/$VENV_NAME/bin/activate" ]; then @@ -101,15 +101,15 @@ activate_venv() { requirements_file=$(find_requirements_txt .) if [ -n "$requirements_file" ]; then # -qq: Hides both informational and warning messages, showing only errors. - python -m pip install -qq -r "$requirements_file" + uv pip install -qq -r "$requirements_file" else # If no requirements.txt, try to install the connector as a package (assuming pyproject.toml exists) - python -m pip install . + uv pip install . fi # Ensure connectors-sdk is available for script generation echo "🔄 Installing connectors-sdk for schema generation..." - python -m pip install "connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk" + uv pip install "connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk" # Return to original working directory popd @@ -131,6 +131,14 @@ deactivate_venv() { rm -rf "$1" } +# Check if 'uv' command is installed, install if missing +if ! command -v uv &> /dev/null; then + echo "🔄 'uv' not found. Installing..." + curl -LsSf https://astral.sh/uv/install.sh | sh +else + echo "✅ 'uv' is already installed." +fi + # Main script echo -e "\033[36mGenerating config JSON schemas for a single connector...\033[0m" echo "" @@ -270,7 +278,7 @@ echo -e "\033[32mFound pydantic-settings and/or connectors-sdk in dependencies. echo -e "\033[36m> Generating configurations table...\033[0m" # Generate configurations table in __metadata/CONNECTOR_CONFIG_DOC.md - python -m pip install -q --disable-pip-version-check jsonschema_markdown + uv pip install -q jsonschema_markdown generator_config_doc_path=$(find . -name "generate_connector_config_doc.py.sample") if [ -n "$generator_config_doc_path" ]; then diff --git a/shared/tools/composer/generate_connectors_config_schemas/generate_connectors_config_json_schemas.sh b/shared/tools/composer/generate_connectors_config_schemas/generate_connectors_config_json_schemas.sh index 0e26816a46f..f65810f64c7 100644 --- a/shared/tools/composer/generate_connectors_config_schemas/generate_connectors_config_json_schemas.sh +++ b/shared/tools/composer/generate_connectors_config_schemas/generate_connectors_config_json_schemas.sh @@ -39,7 +39,7 @@ activate_venv() { # Method to activate isolate venv # Create isolated virtual environment in connector path - python -m venv "$1/$VENV_NAME" + uv venv "$1/$VENV_NAME" # Activate virtual environment according to OS if [ -f "$1/$VENV_NAME/bin/activate" ]; then @@ -55,15 +55,15 @@ activate_venv() { requirements_file=$(find_requirements_txt .) if [ -n "$requirements_file" ]; then # -qq: Hides both informational and warning messages, showing only errors. - python -m pip install -qq -r "$requirements_file" + uv pip install -qq -r "$requirements_file" else # If no requirements.txt, try to install the connector as a package (assuming pyproject.toml exists) - python -m pip install . + uv pip install . fi # Ensure connectors-sdk is available for script generation echo "🔄 Installing connectors-sdk for schema generation..." - python -m pip install "connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk" + uv pip install "connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@${RELEASE_REF:-master}#subdirectory=connectors-sdk" # Return to original working directory popd @@ -85,19 +85,31 @@ deactivate_venv() { rm -rf "$1" } +# Check if 'uv' command is installed, install if missing +if ! command -v uv &> /dev/null; then + echo "🔄 'uv' not found. Installing..." + curl -LsSf https://astral.sh/uv/install.sh | sh +else + echo "✅ 'uv' is already installed." +fi + # Find all parents directory of connector with __metadata__ directory connector_directories_path=$(find . -type d -name "$CONNECTOR_METADATA_DIRECTORY" | sed 's:/*'"$CONNECTOR_METADATA_DIRECTORY"'$::' | sort -u) +# CircleCI uses a shallow clone by default, so we need to fetch the full history to compare with the base branch +git fetch --unshallow || git fetch --depth=100 +git fetch origin "+refs/heads/*:refs/remotes/origin/*" + # Loop in each connector directory with infos and regenerate JSON schema if changed for connector_directory_path in $connector_directories_path do if [ -d "$connector_directory_path" ]; then # Only generate schema for directory that changed CIRCLE_BRANCH=${CIRCLE_BRANCH:-""} - if [ "$CIRCLE_BRANCH" = "master" ]; then + if [ "$CIRCLE_BRANCH" = "${RELEASE_REF:-master}" ]; then directory_has_changed=$(git diff HEAD~1 HEAD -- "$connector_directory_path") else - directory_has_changed=$(git diff $(git merge-base master HEAD) HEAD "$connector_directory_path") + directory_has_changed=$(git diff $(git merge-base origin/"${RELEASE_REF:-master}" HEAD) HEAD "$connector_directory_path") fi if [ -z "$directory_has_changed" ] ; then @@ -133,7 +145,7 @@ do rm "$connector_directory_path/generate_connector_config_json_schema_tmp.py" # Generate configurations table in __metadata/CONNECTOR_CONFIG_DOC.md - python -m pip install -q --disable-pip-version-check jsonschema_markdown + uv pip install -q jsonschema_markdown generator_config_doc_path=$(find . -name "generate_connector_config_doc.py.sample") cp "$generator_config_doc_path" "$connector_directory_path/generate_connector_config_doc_tmp.py" python "$connector_directory_path/generate_connector_config_doc_tmp.py" diff --git a/shared/tools/connector_linter/README.md b/shared/tools/connector_linter/README.md new file mode 100644 index 00000000000..c94f51b5b16 --- /dev/null +++ b/shared/tools/connector_linter/README.md @@ -0,0 +1,430 @@ +# OpenCTI Connector Verified Linter + +A flake8-style linter that validates whether an OpenCTI connector meets the **Verified** status criteria. Each check has a unique error code (e.g. `VC101`) and provides actionable suggestions for fixing violations. + +## Installation + +The linter is managed with [uv](https://docs.astral.sh/uv/) and lives in `shared/connector_linter/`. + +```bash +# From the connector_linter directory +cd shared/connector_linter + +# Install with uv (recommended) +uv sync + +# Or install with pip +pip install -e . +``` + +## Usage + +### Check a connector + +```bash +# Basic check (all rules) +connector-linter check ../../external-import/mandiant + +# Or run via uv +uv run connector-linter check ../../external-import/mandiant +``` + +### Output formats + +```bash +# Colored terminal output (default — paths relative to CLI argument) +connector-linter check ./connector --format text + +# Markdown output (for Notion / GitHub wikis / issue bodies) +connector-linter check ./connector --format markdown + +# JSON output (for CI pipelines — always uses absolute paths) +connector-linter check ./connector --format json + +# GitHub Actions annotations (paths relative to repo root) +connector-linter check ./connector --format github +``` + +### Rules documentation + +```bash +# Print rules reference as Markdown to stdout +connector-linter docs + +# Write to a file (for Notion import) +connector-linter docs -o rules.md +``` + +### Filtering checks + +```bash +# Check a single file (connector root is resolved automatically) +connector-linter check ./connector/src/main.py +connector-linter check ./connector/docker-compose.yml + +# Run only specific checks +connector-linter check ./connector --select VC101 --select VC102 + +# Run an entire category (prefix matching) +connector-linter check ./connector --select VC1xx # all configuration checks +connector-linter check ./connector --select VC3xx # all code checks +connector-linter check ./connector --select VC5xx # all deprecation checks + +# Ignore specific checks +connector-linter check ./connector --ignore VC306 --ignore VC307 + +# Show all checks including passed (default hides passed) +connector-linter check ./connector --verbose + +# Filter by severity level +connector-linter check ./connector --severity warning # show warnings and errors +connector-linter check ./connector --severity error # errors only + +# Use absolute paths in text output (JSON always uses absolute paths) +connector-linter check ./connector --abspath +``` + +### Project-level configuration (`pyproject.toml`) + +Configure the linter at project level via `[tool.connector-linter]` in `pyproject.toml`. The file is auto-discovered by walking up from the connector directory (like Ruff). + +```toml +[tool.connector-linter] +# Only run these checks/prefixes (same as --select) +select = ["VC1xx", "VC3xx"] + +# Skip these checks (same as --ignore, merged with CLI --ignore) +ignore = ["VC306", "VC307"] + +# Skip specific checks for files matching a glob pattern +[tool.connector-linter.per-file-ignores] +"tests/*.py" = ["VC309", "VC313"] +"src/main.py" = ["VC308"] +``` + +**Precedence rules** (inspired by Ruff): +- CLI `--select` overrides `select` from pyproject.toml +- CLI `--ignore` is merged with `ignore` from pyproject.toml (union of both) +- `per-file-ignores` applies after check execution and before inline `# noqa` +- Use `--config path/to/pyproject.toml` to specify an explicit config file + +### Inline suppression (`# noqa`) + +Suppress specific checks on individual lines using `# noqa` comments — same syntax as flake8: + +```python +# Suppress all checks on this line +self.helper.log_info(msg) # noqa + +# Suppress a specific check +self.helper.log_info(msg) # noqa: VC503 + +# Suppress multiple checks +confidence=80, # noqa: VC504, VC302 +``` + +Works in any file that uses `#` for comments (Python, YAML, Dockerfile, `.env`). + +To ignore all `# noqa` directives (useful for CI audits): + +```bash +connector-linter check ./connector --disable-noqa +``` + +### List all checks + +```bash +connector-linter list +``` + +## Exit codes + +| Exit code | Meaning | +|-----------|---------| +| `0` | All checks passed | +| `1` | One or more checks failed (ERROR severity) | + +WARNING-severity checks never cause a non-zero exit code. + +--- + +## Check Reference + +### VC1xx — Configuration + +Validates config files (`docker-compose.yml`, `.env.sample`, `config.yml.sample`). + +| Code | Severity | Name | Description | +|------|----------|------|-------------| +| VC101 | ERROR | `config-token-default` | `OPENCTI_TOKEN` must default to `ChangeMe` (exact case) | +| VC102 | ERROR | `config-url-default` | `OPENCTI_URL` must default to `http://localhost` (no port) | +| VC103 | ERROR | `config-variable-prefix` | Env vars must use `OPENCTI_`, `CONNECTOR_`, or `_` prefix | +| VC104 | ERROR | `config-file-samples` | Must have `config.yml.sample` + `docker-compose.yml` or `.env.sample`; `ChangeMe` for values without defaults; defaults must be commented | +| VC105 | ERROR | `no-absolute-import-date` | Import start dates must use ISO 8601 duration (`P30D`), not absolute dates (`2020-01-01`) | + +### VC2xx — Metadata + +Validates connector metadata (manifest, identity). + +| Code | Severity | Name | Description | +|------|----------|------|-------------| +| VC201 | ERROR | `manifest-verified-date` | `connector_manifest.json` must have `"verified": true` and a valid `"last_verified_date"` in YYYY-MM-DD format | +| VC202 | ERROR | `manifest-container-image` | `container_version` must be `"rolling"`, `container_image` must match `opencti/connector-` | + +### VC3xx — Code + +Validates Python source code patterns. Uses AST analysis for structural checks. + +| Code | Severity | Scope | Name | Description | +|------|----------|-------|------|-------------| +| VC301 | ERROR | Common | `author-defined` | Connector must define an author Identity (Organization) | +| VC302 | ERROR | Common | `author-referenced-on-entities` | Author must be referenced on STIX entities via `created_by_ref` | +| VC303 | ERROR | Common | `connector-type-hardcoded` | `CONNECTOR_TYPE` must be hardcoded in code, not read from env | +| VC304 | ERROR | Enrichment | `markings-checked` | TLP markings must be checked via `check_max_tlp` before processing | +| VC305 | ERROR | Common | `sdk-base-settings` | Connector must use `BaseConnectorSettings` from connectors-sdk | +| VC306 | WARNING | Common | `log-level-default-error` | Log level should default to `error` | +| VC307 | WARNING | Common | `except-logging-level` | Except blocks should use `error`/`warning` logging, not `debug`/`info` | +| VC308 | ERROR | Common | `main-traceback` | `main.py` must use `traceback` for error handling | +| VC309 | ERROR | Common | `absolute-imports-only` | No relative imports — use absolute imports only | +| VC310 | ERROR | Common | `external-references-not-default` | External references must not be added by default to all entities; only on Identity | +| VC311 | WARNING | Common | `tlp-markings-on-entities` | STIX entities should include TLP markings | +| VC312 | ERROR | Common | `cleanup-inconsistent-bundle` | `send_stix2_bundle()` must use `cleanup_inconsistent_bundle=True` | +| VC313 | ERROR | Common | `pycti-generate-id` | STIX SDO/SRO objects must use `pycti.XXX.generate_id()` for deterministic IDs | +| VC314 | ERROR | External Import | `auto-backpressure` | Must use `schedule_process()` or `schedule_iso()` for scheduling | +| VC315 | ERROR | External Import | `work-initiated` | Must call `initiate_work()` before processing | +| VC316 | ERROR | External Import | `work-closed` | Must close work with `to_processed()` after processing | +| VC317 | WARNING | External Import | `initiate-work-conditional` | `initiate_work` should only be called when data is available | +| VC318 | ERROR | Enrichment | `helper-listen` | Must use `self.helper.listen()` for message callback | +| VC319 | WARNING | Enrichment | `scope-fallback-bundle` | Must return original bundle when entity is not in scope | +| VC320 | ERROR | Enrichment | `tlp-access-control` | Must enforce TLP access control (extract → check → reject) | +| VC321 | ERROR | Enrichment | `playbook-compatible` | Must set `playbook_compatible=True` in helper constructor | +| VC322 | ERROR | Enrichment | `former-bundle-read` | Must read `data['stix_objects']` for playbook compatibility | +| VC323 | ERROR | Stream | `helper-listen-stream` | Must use `self.helper.listen_stream()` | +| VC324 | WARNING | Common | `relationship-start-stop-time` | Relationship should not set both `start_time` and `stop_time` (overloads Redis with time-bucketed duplicates) | + +### VC4xx — Docker + +Validates Dockerfile and docker-compose configuration. + +| Code | Severity | Name | Description | +|------|----------|------|-------------| +| VC401 | ERROR | `docker-compose-image` | Image must use `:latest` tag and name must match directory (`opencti/connector-:latest`) | +| VC402 | ERROR | `no-entrypoint-sh` | Dockerfile must not use `entrypoint.sh` — use direct `ENTRYPOINT ["python", ...]` | + +### VC5xx — Deprecation + +Detects deprecated patterns that must be removed for Verified status. + +| Code | Severity | Name | Description | +|------|----------|------|-------------| +| VC501 | ERROR | `no-legacy-interval` | Must use `CONNECTOR_DURATION_PERIOD` (ISO 8601), not `*_INTERVAL` variables or `schedule_unit()` | +| VC502 | ERROR | `no-deprecated-report-status` | Must not use `x_opencti_report_status` (deprecated, non-functional). `x_opencti_workflow_id` emits a WARNING | +| VC503 | ERROR | `no-deprecated-helper-logger` | Must use `helper.connector_logger.{level}()` instead of `helper.log_{level}()` | +| VC504 | ERROR | `no-deprecated-confidence` | Must not use `confidence` level (deprecated since OpenCTI 6.0 — managed by platform policies) | +| VC505 | WARNING | `no-direct-api-calls` | Should not use `helper.api.*` for direct GraphQL calls (except `api.work`, `api.vocabulary`, `api.label`, etc.) | +| VC506 | ERROR | `no-update-existing-data` | Must not use `UPDATE_EXISTING_DATA` (no longer in helper). Exception: `opencti` datasets connector | + +--- + +## Architecture + +``` +connector_linter/ +├── __init__.py # Version +├── __main__.py # Click CLI (check, list commands) +├── models.py # ConnectorContext, CheckFinding, CheckResult, Severity +├── registry.py # CheckRegistry — decorator-based registration +├── runner.py # Auto-discovers and executes checks +├── formatters.py # Output: text (ANSI), JSON, GitHub Actions +└── checks/ # All check modules, auto-discovered + ├── vc1xx_config/ # Configuration checks + │ ├── _helpers.py # Env var parsing, config file utilities + │ ├── vc101_*.py + │ └── ... + ├── vc2xx_metadata/ # Metadata checks + ├── vc3xx_code/ # Code structure checks + │ ├── _helpers.py # AST + regex helpers + │ ├── vc301_*.py + │ └── ... + ├── vc4xx_docker/ # Docker checks + └── vc5xx_deprecation/ # Deprecation checks +``` + +### Key concepts + +- **`ConnectorContext`** — Loaded once per connector. Contains the path, connector type (auto-detected from parent dir), manifest, file lists, and structural flags. +- **`CheckRegistry`** — Singleton registry. Checks register themselves via the `@CheckRegistry.register()` decorator. +- **`CheckFinding`** — Lightweight dataclass returned by check functions. Contains only check-specific data: `message`, `passed`, `file_path`, `line`, `suggestion`, and an optional `severity` override. +- **`CheckResult`** — Full result produced by the runner. The runner hydrates each `CheckFinding` with `code`, `name`, and `severity` from the `CheckDescriptor`, so checks never repeat those fields. +- **Auto-discovery** — `runner.py` uses `pkgutil.walk_packages()` to find all modules under `checks/`. Modules prefixed with `_` (like `_helpers.py`) are skipped. + +### Severity semantics + +| Severity | `passed=True` | `passed=False` | +|----------|--------------|----------------| +| ERROR | Check passes ✓ | Blocking failure ✗ (causes exit code 1) | +| WARNING | Non-blocking info | Non-blocking warning (never causes exit code 1) | + +--- + +## Adding a new check + +### 1. Choose the right category and code + +| Category | Prefix | For | +|----------|--------|-----| +| Configuration | `VC1xx` | Config files (env vars, YAML, settings) | +| Metadata | `VC2xx` | Manifest, connector identity | +| Code | `VC3xx` | Python source patterns (AST/regex) | +| Docker | `VC4xx` | Dockerfile, docker-compose | +| Deprecation | `VC5xx` | Deprecated patterns to remove | + +Pick the next number in the category (e.g., if the last is `VC324`, use `VC325`). + +### 2. Create the check file + +Create a new file in the appropriate package: + +```bash +# Example: new deprecation check +touch connector_linter/checks/vc5xx_deprecation/vc507_my_new_check.py +``` + +### 3. Write the check + +```python +"""VC507 — Short description of what this check validates. + +Longer explanation of why this matters, what the correct pattern is, +and any references to PRs/issues. + +Scope: Common | EXTERNAL_IMPORT | INTERNAL_ENRICHMENT | STREAM +""" + +from connector_linter.models import CheckFinding, ConnectorContext, Severity +from connector_linter.registry import CheckRegistry + + +@CheckRegistry.register( + code="VC507", + name="my-check-name", # kebab-case short name + description="One-line description", # shown in `list` output + severity=Severity.ERROR, # ERROR or WARNING +) +def check_my_new_check(ctx: ConnectorContext) -> list[CheckFinding]: + """Implement the check logic here.""" + + # Use ctx.path, ctx.connector_type, ctx.manifest, ctx.src_files, etc. + + # Scope to specific connector types if needed: + if ctx.connector_type and ctx.connector_type != "EXTERNAL_IMPORT": + return [] # skip — not applicable + + # Return PASS result + return [ + CheckFinding( + message="Everything looks good ✓", + passed=True, + ) + ] + + # Or return FAIL with suggestion + return [ + CheckFinding( + message="Problem description", + passed=False, + file_path=ctx.path / "src/connector.py", # Path object (relative joined with ctx.path) + line=42, + suggestion="How to fix this issue.", + ) + ] +``` + +### 4. Update the package `__init__.py` + +Add the new check to the docstring in the category's `__init__.py`: + +```python +"""VC5xx — Deprecation checks. +... +VC506 no-update-existing-data Must not use deprecated UPDATE_EXISTING_DATA +VC507 my-check-name One-line description +""" +``` + +### 5. Available helpers + +#### Configuration helpers (`vc1xx_config/_helpers.py`) + +```python +from connector_linter.checks.vc1xx_config._helpers import ( + extract_all_env_vars, # Returns list[EnvVar] from docker-compose + .env.sample + extract_env_vars_from_docker_compose, + extract_env_vars_from_env_sample, + derive_connector_prefixes, # dirname → ["ABUSE_SSL", "ABUSESSL"] + find_bad_changeme_values, # Finds wrong-case ChangeMe +) +``` + +#### Code helpers (`vc3xx_code/_helpers.py`) + +```python +from connector_linter.checks.vc3xx_code._helpers import ( + read_all_python_sources, # Returns dict[Path, source_code] + parse_sources, # Returns dict[Path, ast.Module] + find_pattern_locations, # Regex search across all sources → list[tuple[Path, int, str]] + find_imports, # Find import statements by module/name pattern → list[ImportInfo] + find_classes, # Find class definitions by base class → list[ClassInfo] + find_calls_in_stmts, # Find function/method calls (with receiver) → list[CallInfo] + find_field_defaults, # Find default values in class fields → list[FieldDefaultInfo] + find_except_blocks, # Find except blocks with their logging → list[ExceptBlockInfo] +) +``` + +### 6. Test your check + +```bash +# Run against a known connector +uv run connector-linter check ../../external-import/mandiant --select VC507 + +# Run against a connector that should fail +uv run connector-linter check ../../external-import/alienvault --select VC507 + +# Verify it shows up in the list +uv run connector-linter list | grep VC507 +``` + +### Tips + +- **Use AST over regex** when checking Python code structure (function calls, keyword arguments, class definitions). It's more reliable and won't match inside strings or comments. +- **Use regex** for simple text patterns in non-Python files (config, Dockerfile, YAML). +- **Scope checks** to specific connector types by checking `ctx.connector_type` early and returning `[]` if not applicable. +- **Multiple results** — a check can return multiple `CheckFinding` items (e.g., one per file where a violation was found). The runner enriches each with `code`/`name`/`severity` from the descriptor. +- **Cross-package imports** are fine — deprecation checks commonly use helpers from `vc1xx_config/_helpers.py` and `vc3xx_code/_helpers.py`. +- **`_`-prefixed modules** are ignored by auto-discovery — use this for helper modules. + +--- + +## Running the linter in CI + +### GitHub Actions + +```yaml +- name: Lint connector + run: | + cd shared/connector_linter + uv run connector-linter check ../../external-import/${{ matrix.connector }} --format github +``` + +The `--format github` output produces `::error` / `::warning` annotations that appear inline in PR diffs. + +### JSON output for scripting + +```bash +connector-linter check ./connector --format json | jq '.score_pct' +``` + +The JSON output includes: +- `results`: array of check results with `code`, `passed`, `message`, `severity`, `suggestion` +- `summary`: `total`, `passed`, `failed`, `errors`, `warnings` +- `score_pct`: percentage score (0–100) diff --git a/shared/tools/connector_linter/connector_linter/__init__.py b/shared/tools/connector_linter/connector_linter/__init__.py new file mode 100644 index 00000000000..40348272707 --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/__init__.py @@ -0,0 +1,10 @@ +"""OpenCTI Connector Verified Linter. + +A flake8/pylint-style linter that validates whether an OpenCTI connector +meets the "Verified" status criteria. + +Usage: + python -m connector_linter check path/to/connector +""" + +__version__ = "0.1.0" diff --git a/shared/tools/connector_linter/connector_linter/__main__.py b/shared/tools/connector_linter/connector_linter/__main__.py new file mode 100644 index 00000000000..e76fea9bfd3 --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/__main__.py @@ -0,0 +1,234 @@ +"""CLI entry point for the connector linter.""" + +import sys +from pathlib import Path + +import click +from connector_linter import __version__ +from connector_linter._doc_generator import generate_rules_markdown +from connector_linter.formatters import ( + format_github, + format_json, + format_markdown, + format_text, +) +from connector_linter.models import SEVERITY_COLOR, Severity +from connector_linter.registry import CheckRegistry +from connector_linter.runner import _import_checks_modules, run_checks + + +@click.group() +@click.version_option(version=__version__, prog_name="connector-linter") +def cli() -> None: + """OpenCTI Connector Verified Linter. + + Validates whether an OpenCTI connector meets the "Verified" status criteria. + Works like flake8/pylint with individual error codes per check. + """ + + +_CONNECTOR_ROOT_MARKERS = {"src", "__metadata__", "Dockerfile", "docker-compose.yml"} + + +def _resolve_connector_root(file_path: Path) -> Path | None: + """Walk up from *file_path* to find the connector root directory. + + A connector root is identified by the presence of at least one marker: + ``src/``, ``__metadata__/``, ``Dockerfile``, or ``docker-compose.yml``. + """ + candidate = file_path.resolve().parent + while candidate != candidate.parent: + if any((candidate / m).exists() for m in _CONNECTOR_ROOT_MARKERS): + return candidate + candidate = candidate.parent + return None + + +@cli.command() +@click.argument("connector_path", type=click.Path(exists=True)) +@click.option( + "--format", + "output_format", + type=click.Choice(["text", "json", "github", "markdown"]), + default="text", + help="Output format.", +) +@click.option( + "--select", + multiple=True, + help="Only run checks matching these codes/prefixes (e.g. VC101, VC1xx).", +) +@click.option( + "--ignore", + multiple=True, + help="Skip checks matching these codes/prefixes.", +) +@click.option( + "--severity", + type=click.Choice(["error", "warning", "info"]), + default=None, + help="Minimum severity to report.", +) +@click.option( + "--verbose", + "-v", + is_flag=True, + default=False, + help="Show all checks including passed (default hides passed).", +) +@click.option( + "--disable-noqa", + is_flag=True, + default=False, + help="Ignore all # noqa inline suppressions.", +) +@click.option( + "--abspath", + is_flag=True, + default=False, + help="Show absolute file paths in text output (JSON always uses absolute paths).", +) +@click.option( + "--config", + "config_path", + type=click.Path(exists=True, dir_okay=False), + default=None, + help="Path to pyproject.toml (auto-detected if not specified).", +) +def check( + connector_path: str, + output_format: str, + select: tuple[str, ...], + ignore: tuple[str, ...], + severity: str | None, + verbose: bool, + disable_noqa: bool, + abspath: bool, + config_path: str | None, +) -> None: + r"""Check a connector against Verified criteria. + + CONNECTOR_PATH can be a connector directory or a specific file within one. + When a file is given, the connector root is resolved automatically and only + findings for that file are shown. + + \b + Examples: + python -m connector_linter check ./external-import/myconnector + python -m connector_linter check ./external-import/myconnector/src/main.py + python -m connector_linter check ./external-import/myconnector --format json + python -m connector_linter check ./external-import/myconnector --select VC1xx + python -m connector_linter check ./external-import/myconnector --ignore VC101 + python -m connector_linter check ./external-import/myconnector -v + """ + path = Path(connector_path) + target_file: Path | None = None + + if path.is_file(): + target_file = path.resolve() + connector_root = _resolve_connector_root(path) + if connector_root is None: + click.echo( + f"Error: Could not determine connector root for {path}. " + "Ensure the file is inside a connector directory (with src/, " + "__metadata__/, Dockerfile, or docker-compose.yml).", + err=True, + ) + sys.exit(2) + path = connector_root + + results = run_checks( + connector_path=path, + select=list(select) if select else None, + ignore=list(ignore) if ignore else None, + disable_noqa=disable_noqa, + config_path=Path(config_path) if config_path else None, + ) + + # When a specific file was targeted, keep only findings for that file + if target_file is not None: + results = [ + r + for r in results + if r.file_path is not None and r.file_path.resolve() == target_file + ] + + # Filter by severity if requested + if severity: + min_sev = Severity(severity) + results = [r for r in results if r.severity.rank() >= min_sev.rank()] + + # Format output + if output_format == "text": + format_text(results, path, sys.stdout, verbose=verbose, abspath=abspath) + elif output_format == "markdown": + format_markdown(results, path, sys.stdout, verbose=verbose, abspath=abspath) + else: + formatter = {"json": format_json, "github": format_github}[output_format] + formatter(results, path, sys.stdout) + + # Exit code: 1 if any errors failed, 0 otherwise + has_errors = any(r.severity == Severity.ERROR for r in results) + sys.exit(1 if has_errors else 0) + + +@cli.command(name="list") +def list_checks() -> None: + """List all available checks.""" + _import_checks_modules() + checks = CheckRegistry.get_all() + + if not checks: + click.echo("No checks registered yet.") + return + + click.echo(f"{'Code':<8} {'Sev':<5} {'Name':<30} {'Scope':<28} Description") + click.echo(f"{'─' * 8} {'─' * 5} {'─' * 30} {'─' * 28} {'─' * 40}") + for code in sorted(checks.keys()): + desc = checks[code] + sev_color = SEVERITY_COLOR[desc.severity] + if desc.applicable_types: + scope = ",".join(sorted(t.label for t in desc.applicable_types)) + else: + scope = "All" + click.echo( + f"{code:<8} " + f"{click.style(desc.severity.symbol(), fg=sev_color):<14} " + f"{desc.name:<30} " + f"{scope:<28} {desc.description}", + ) + + +@cli.command() +@click.option( + "--output", + "-o", + type=click.Path(), + default=None, + help="Write output to a file instead of stdout.", +) +def docs(output: str | None) -> None: + """Generate Markdown documentation for all implemented rules. + + Extracts code, title, severity, scope, and docstring from each check + to produce a Markdown document suitable for import into Notion or wikis. + """ + _import_checks_modules() + checks = CheckRegistry.get_all() + + if not checks: + click.echo("No checks registered yet.", err=True) + return + + content = generate_rules_markdown(checks) + + if output: + out_path = Path(output) + out_path.write_text(content) + click.echo(f"Documentation written to {out_path}", err=True) + else: + click.echo(content) + + +if __name__ == "__main__": + cli() diff --git a/shared/tools/connector_linter/connector_linter/_doc_generator.py b/shared/tools/connector_linter/connector_linter/_doc_generator.py new file mode 100644 index 00000000000..c4286bf8763 --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/_doc_generator.py @@ -0,0 +1,110 @@ +"""Documentation generator for connector-linter rules. + +Extracts check metadata (code, severity, scope, description, docstring) +from the registry and renders a Markdown reference document suitable for +import into Notion, GitHub wikis, or any Markdown viewer. + +Separated from ``__main__.py`` to keep the CLI entry-point focused on +argument parsing and output routing. +""" + +import importlib +import pkgutil +from pathlib import Path + +import connector_linter.checks as _checks_pkg +from connector_linter.models import SEVERITY_EMOJI +from connector_linter.registry import CheckDescriptor + + +def load_category_titles() -> dict[str, str]: + """Build category title map from check sub-package docstrings. + + Reads the first docstring line of each ``vcxx_*`` sub-package so the + map is automatically up-to-date when new categories are added. + + Example output:: + + {"VC1": "VC1xx — Configuration checks.", + "VC2": "VC2xx — Metadata checks.", ...} + """ + titles: dict[str, str] = {} + pkg_path = Path(_checks_pkg.__file__).parent + for _finder, name, is_pkg in pkgutil.iter_modules([str(pkg_path)]): + if not is_pkg: + continue + prefix = name[:3].upper() # "vc1" → "VC1" + mod = importlib.import_module(f"connector_linter.checks.{name}") + first_line = (mod.__doc__ or "").strip().splitlines()[0] if mod.__doc__ else "" + if first_line: + titles[prefix] = first_line.rstrip(".") + return titles + + +def generate_rules_markdown(checks: dict[str, CheckDescriptor]) -> str: + """Render a Markdown reference document for all provided checks. + + Args: + checks: Mapping of code → CheckDescriptor (e.g. from CheckRegistry.get_all()). + + Returns: + A Markdown string ready to write to a file or stdout. + """ + # Group checks by category prefix ("VC1", "VC2", …) + categories: dict[str, list[str]] = {} + for code in sorted(checks.keys()): + prefix = code[:3] + categories.setdefault(prefix, []).append(code) + + category_titles = load_category_titles() + + lines: list[str] = [] + lines.append("# Connector Linter — Rules Reference\n") + lines.append(f"Total rules: **{len(checks)}**\n") + + # Summary table + lines.append("## Summary\n") + lines.append("| Code | Severity | Name | Scope |") + lines.append("|------|----------|------|-------|") + for code in sorted(checks.keys()): + desc = checks[code] + sev_icon = SEVERITY_EMOJI[desc.severity] + if desc.applicable_types: + scope = ", ".join(t.label for t in sorted(desc.applicable_types)) + else: + scope = "All" + lines.append( + f"| {code} | {sev_icon} {desc.severity.value.capitalize()} | {desc.name} | {scope} |" + ) + + lines.append("") + + # Detailed sections per category + for prefix in sorted(categories.keys()): + title = category_titles.get(prefix, f"{prefix}xx") + lines.append(f"## {title}\n") + + for code in categories[prefix]: + desc = checks[code] + sev_icon = SEVERITY_EMOJI[desc.severity] + lines.append(f"### {code} — {desc.name}\n") + lines.append( + f"- **Severity:** {sev_icon} {desc.severity.value.capitalize()}" + ) + + if desc.applicable_types: + scope = ", ".join(t.label for t in sorted(desc.applicable_types)) + else: + scope = "All connector types" + lines.append(f"- **Scope:** {scope}") + lines.append(f"- **Description:** {desc.description}\n") + + docstring = desc.module_doc + if docstring: + # Strip the first line (title, usually "VCxxx — ...") + doc_lines = docstring.strip().split("\n") + body = "\n".join(doc_lines[1:]).strip() + if body: + lines.append(f"{body}\n") + + return "\n".join(lines) diff --git a/shared/tools/connector_linter/connector_linter/checks/__init__.py b/shared/tools/connector_linter/connector_linter/checks/__init__.py new file mode 100644 index 00000000000..21567b876a8 --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/__init__.py @@ -0,0 +1 @@ +"""Checks package — all check modules are auto-discovered.""" diff --git a/shared/tools/connector_linter/connector_linter/checks/_helpers.py b/shared/tools/connector_linter/connector_linter/checks/_helpers.py new file mode 100644 index 00000000000..ccc1f3df1e1 --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/_helpers.py @@ -0,0 +1,48 @@ +import ast +from pathlib import Path + +from connector_linter.models import ConnectorContext + +# --------------------------------------------------------------------------- +# Source reading +# --------------------------------------------------------------------------- + + +def read_all_python_sources(ctx: ConnectorContext) -> dict[Path, str]: + """Read all Python source files from the connector's src/ directory.""" + sources: dict[Path, str] = {} + # Convention: all connector Python code lives under /src/ + src_dir = ctx.path / "src" + if not src_dir.exists(): + return sources + for py_file in src_dir.rglob("*.py"): + # Key by relative path (from connector root) for portable reporting + rel_path = py_file.relative_to(ctx.path) + try: + # errors="replace" avoids UnicodeDecodeError on malformed files + sources[rel_path] = py_file.read_text(encoding="utf-8", errors="replace") + except OSError: + # Skip unreadable files (permissions, broken symlinks, etc.) + continue + return sources + + +# --------------------------------------------------------------------------- +# AST helpers — structural analysis of Python source +# --------------------------------------------------------------------------- + + +def parse_sources(sources: dict[Path, str]) -> dict[Path, ast.Module]: + """Parse all source files into AST modules. + + Files that fail to parse (syntax errors) are silently skipped. + """ + trees: dict[Path, ast.Module] = {} + for file_path, content in sources.items(): + try: + trees[file_path] = ast.parse(content, filename=str(file_path)) + except SyntaxError: + # Silently skip files with syntax errors — they can't be analyzed + # structurally, but other checks (regex-based) may still find issues. + continue + return trees diff --git a/shared/tools/connector_linter/connector_linter/checks/vc1xx_config/__init__.py b/shared/tools/connector_linter/connector_linter/checks/vc1xx_config/__init__.py new file mode 100644 index 00000000000..a7f5e5d51aa --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc1xx_config/__init__.py @@ -0,0 +1,11 @@ +"""VC1xx — Configuration checks. + +Validates connector configuration files (docker-compose.yml, .env.sample, +config.yml.sample) for compliance with OpenCTI conventions. + +VC101 config-token-default OPENCTI_TOKEN must default to ChangeMe +VC102 config-url-default OPENCTI_URL must default to http://localhost +VC103 config-variable-prefix Env vars must use OPENCTI_, CONNECTOR_, or _ prefix +VC104 config-file-samples config.yml.sample + docker-compose/env must exist +VC105 no-absolute-import-date Import dates must use ISO duration, not absolute dates +""" diff --git a/shared/tools/connector_linter/connector_linter/checks/vc1xx_config/_helpers.py b/shared/tools/connector_linter/connector_linter/checks/vc1xx_config/_helpers.py new file mode 100644 index 00000000000..48ab9d2fe87 --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc1xx_config/_helpers.py @@ -0,0 +1,188 @@ +"""Helpers for configuration-file parsing. + +Extracts environment variables from ``docker-compose.yml`` and +``.env.sample`` files, including commented-out lines. Also locates +``config.yml.sample`` and scans for ``ChangeMe`` placeholder values. +""" + +import re +from dataclasses import dataclass +from pathlib import Path + +from connector_linter.models import ConnectorContext + + +@dataclass +class EnvVar: + """A parsed environment variable.""" + + name: str + value: str + line: int + file_path: Path + is_commented: bool + + +# --------------------------------------------------------------------------- +# Regex: docker-compose.yml environment lines +# +# Matches lines like: +# - OPENCTI_URL=http://localhost (uncommented) +# # - OPENCTI_URL=http://localhost (commented out) +# +# Capture groups: +# commented — leading "#" (present when the line is commented out) +# name — uppercase env var name (e.g. OPENCTI_TOKEN) +# value — everything after "=" up to an optional inline comment +# +# Trailing inline comments (# …) are stripped from the value. +# --------------------------------------------------------------------------- +_COMPOSE_ENV_RE = re.compile( + r"^(?P\s*#)?\s*-\s*(?P[A-Z][A-Z0-9_]*)=(?P[^#\n]*?)(?:\s*#.*)?\s*$", +) + +# --------------------------------------------------------------------------- +# Regex: .env.sample (dotenv-style) lines +# +# Matches lines like: +# OPENCTI_TOKEN=ChangeMe (uncommented) +# # OPENCTI_TOKEN=ChangeMe (commented out) +# +# Same capture groups as _COMPOSE_ENV_RE (commented, name, value). +# The difference is the absence of the YAML list marker "- ". +# --------------------------------------------------------------------------- +_DOTENV_RE = re.compile( + r"^(?P\s*#)?\s*(?P[A-Z][A-Z0-9_]*)=(?P[^#\n]*?)(?:\s*#.*)?\s*$", +) + + +def _parse_lines( + file_path: Path, + lines: list[str], + pattern: re.Pattern[str], +) -> list[EnvVar]: + """Extract EnvVar entries from raw lines. + + Iterates line-by-line, applying the given regex ``pattern`` to each line. + Both commented and uncommented matches are captured — the ``is_commented`` + flag lets callers decide which to keep or skip. + """ + results: list[EnvVar] = [] + for line_no, line in enumerate(lines, 1): + m = pattern.match(line) + if m: + results.append( + EnvVar( + name=m.group("name"), + value=m.group("value").strip(), + line=line_no, + file_path=file_path, + is_commented=bool(m.group("commented")), + ), + ) + return results + + +def extract_env_vars_from_docker_compose(ctx: ConnectorContext) -> list[EnvVar]: + """Extract environment variables from docker-compose.yml.""" + compose_path = ctx.path / "docker-compose.yml" + if not compose_path.is_file(): + return [] + with compose_path.open(encoding="utf-8") as f: + return _parse_lines(compose_path, f.readlines(), _COMPOSE_ENV_RE) + + +def extract_env_vars_from_env_sample(ctx: ConnectorContext) -> list[EnvVar]: + """Extract environment variables from .env.sample.""" + env_path = ctx.path / ".env.sample" + if not env_path.is_file(): + return [] + with env_path.open(encoding="utf-8") as f: + return _parse_lines(env_path, f.readlines(), _DOTENV_RE) + + +def extract_all_env_vars(ctx: ConnectorContext) -> list[EnvVar]: + """Extract env vars from docker-compose.yml and .env.sample.""" + return extract_env_vars_from_docker_compose(ctx) + extract_env_vars_from_env_sample( + ctx, + ) + + +def derive_connector_prefixes(ctx: ConnectorContext) -> str: + """Derive valid connector-specific prefixes from the directory name. + + Examples: + ``mandiant`` → ``"MANDIANT"`` + ``abuse-ssl`` → ``"ABUSE_SSL"`` + ``recorded-future`` → ``"RECORDED_FUTURE"`` + + """ + dirname = ctx.path.name + # Hyphen → underscore: "abuse-ssl" → "ABUSE_SSL" + return dirname.upper().replace("-", "_") + + +def has_docker_compose_env(ctx: ConnectorContext) -> bool: + """Return True if docker-compose.yml exists with environment variables.""" + return bool(extract_env_vars_from_docker_compose(ctx)) + + +def has_env_sample(ctx: ConnectorContext) -> bool: + """Return True if .env.sample exists.""" + return (ctx.path / ".env.sample").is_file() + + +@dataclass +class ChangeMeHit: + """A ChangeMe value found in a config file with wrong case.""" + + file_path: Path + line: int + raw_value: str + + +# --------------------------------------------------------------------------- +# Regex: case-insensitive "ChangeMe" placeholder detector +# +# Matches the word "ChangeMe" regardless of case (CHANGEME, changeme, etc.) +# appearing as a YAML value (after ":") or env value (after "="): +# OPENCTI_TOKEN=changeme → matches "changeme" +# token: 'CHANGEME' → matches "CHANGEME" +# +# Optional surrounding quotes (' or ") and trailing inline comments are +# tolerated but not captured. +# --------------------------------------------------------------------------- +_CHANGEME_LINE_RE = re.compile( + r"(?:^|[=:]\s*['\"]?)(?Pchange\s*me)['\"]?\s*(?:#.*)?$", + re.MULTILINE | re.IGNORECASE, +) + + +def find_bad_changeme_values(file_path: Path) -> list[ChangeMeHit]: + """Find ChangeMe values with wrong case in any config file. + + A "bad" value is any case variant of ChangeMe that is *not* the + canonical form ``ChangeMe`` (e.g. ``CHANGEME``, ``changeme``). + + Commented lines (starting with ``#``) are skipped because they are + inactive — fixing their case would be noise, and some commented lines + may intentionally use a different casing as documentation. + """ + if not file_path.is_file(): + return [] + with file_path.open(encoding="utf-8") as f: + lines = f.readlines() + + hits: list[ChangeMeHit] = [] + for line_no, line in enumerate(lines, 1): + # Skip fully commented lines — only active values matter for casing + stripped = line.lstrip() + if stripped.startswith("#"): + continue + m = _CHANGEME_LINE_RE.search(line) + if m: + raw = m.group("value").strip() + # Only flag if casing does not match the canonical "ChangeMe" + if raw != "ChangeMe": + hits.append(ChangeMeHit(file_path, line_no, raw)) + return hits diff --git a/shared/tools/connector_linter/connector_linter/checks/vc1xx_config/vc101_config_token.py b/shared/tools/connector_linter/connector_linter/checks/vc1xx_config/vc101_config_token.py new file mode 100644 index 00000000000..c0791881029 --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc1xx_config/vc101_config_token.py @@ -0,0 +1,130 @@ +"""VC101 — OPENCTI_TOKEN must default to ``ChangeMe``. + +Following the January 2026 alignment commit, all configuration files +must use exactly ``ChangeMe`` as the placeholder value for +``OPENCTI_TOKEN`` (not ``CHANGEME``, ``changeme``, or a real token). + +Environment-variable references like ``${OPENCTI_TOKEN}`` are acceptable. + +Scope: Common (all connector types). +""" + +from connector_linter.checks.vc1xx_config._helpers import extract_all_env_vars +from connector_linter.models import CheckFinding, ConnectorContext, Severity +from connector_linter.registry import CheckRegistry + +_VALID_PLACEHOLDER = "ChangeMe" + + +@CheckRegistry.register( + code="VC101", + name="config-token-default", + description="OPENCTI_TOKEN must default to ChangeMe", + severity=Severity.ERROR, +) +def check_config_token(ctx: ConnectorContext) -> list[CheckFinding]: + """Check OPENCTI_TOKEN placeholder value in configuration files.""" + # Step 1: Gather all env vars from docker-compose.yml and .env.sample + all_vars = extract_all_env_vars(ctx) + + if not all_vars: + return [ + CheckFinding( + message="No configuration file found (docker-compose.yml or .env.sample)", + severity=Severity.ERROR, + suggestion="Add a docker-compose.yml with environment variables.", + ), + ] + + # Step 2: Keep only uncommented OPENCTI_TOKEN entries. + # Commented-out lines are informational — only active values matter. + token_vars = [ + v for v in all_vars if v.name == "OPENCTI_TOKEN" and not v.is_commented + ] + + if not token_vars: + return [ + CheckFinding( + message="OPENCTI_TOKEN not found in configuration files", + severity=Severity.ERROR, + suggestion="Uncomment or add OPENCTI_TOKEN=ChangeMe to docker-compose.yml.", + ), + ] + + # Step 3: Validate each OPENCTI_TOKEN occurrence. + # + # Decision tree for each value: + # ${...} → PASS (env reference — delegated to runtime) + # ChangeMe → PASS (canonical placeholder, exact case) + # changeme/* → FAIL (wrong case — must match Jan 2026 alignment) + # (empty) → FAIL (must have a placeholder) + # anything → FAIL (likely a real token committed by mistake) + results: list[CheckFinding] = [] + for var in token_vars: + value = var.value + + # --------------------------------------------------------------------------- + # Environment variable reference — e.g. ${OPENCTI_TOKEN} + # + # docker-compose files often delegate to the host environment via + # ${VAR} syntax. This is perfectly fine — the actual secret is + # never stored in the repo. + # --------------------------------------------------------------------------- + if value.startswith("${") and value.endswith("}"): + results.append( + CheckFinding( + message=f"OPENCTI_TOKEN uses env reference ({value})", + severity=Severity.INFO, + file_path=var.file_path, + line=var.line, + ), + ) + continue + + if value == _VALID_PLACEHOLDER: + results.append( + CheckFinding( + message="OPENCTI_TOKEN=ChangeMe ✓", + severity=Severity.INFO, + file_path=var.file_path, + line=var.line, + ), + ) + elif value.lower() == "changeme": + # Case mismatch — the Jan 2026 alignment mandates exact "ChangeMe" + results.append( + CheckFinding( + message=f"OPENCTI_TOKEN={value} — wrong case", + severity=Severity.ERROR, + file_path=var.file_path, + line=var.line, + suggestion=f"Change from '{value}' to 'ChangeMe' (exact case).", + ), + ) + elif not value: + results.append( + CheckFinding( + message="OPENCTI_TOKEN has empty value", + severity=Severity.ERROR, + file_path=var.file_path, + line=var.line, + suggestion="Set OPENCTI_TOKEN=ChangeMe as the placeholder value.", + ), + ) + else: + # Non-standard value — could be a real token accidentally committed. + # Truncate to 20 chars to avoid leaking secrets in the output. + results.append( + CheckFinding( + message=f"OPENCTI_TOKEN has non-standard value: {value[:20]}{'...' if len(value) > 20 else ''}", + severity=Severity.ERROR, + file_path=var.file_path, + line=var.line, + suggestion=( + "Use 'ChangeMe' as the placeholder value. " + "Never commit real tokens." + ), + ), + ) + + return results diff --git a/shared/tools/connector_linter/connector_linter/checks/vc1xx_config/vc102_config_url.py b/shared/tools/connector_linter/connector_linter/checks/vc1xx_config/vc102_config_url.py new file mode 100644 index 00000000000..af513bcc724 --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc1xx_config/vc102_config_url.py @@ -0,0 +1,128 @@ +"""VC102 — OPENCTI_URL must default to ``http://localhost``. + +Following the January 2026 alignment commit, the default value for +``OPENCTI_URL`` must be ``http://localhost`` — no port, no path suffix, +and using ``localhost`` as the hostname (not ``opencti``). + +Environment-variable references like ``${OPENCTI_URL}`` are acceptable. + +Scope: Common (all connector types). +""" + +from urllib.parse import urlparse + +from connector_linter.checks.vc1xx_config._helpers import extract_all_env_vars +from connector_linter.models import CheckFinding, ConnectorContext, Severity +from connector_linter.registry import CheckRegistry + +# --------------------------------------------------------------------------- +# The canonical default URL: http://localhost +# +# Why exactly this value? +# - No port: the platform port varies per deployment; including one (e.g. +# :8080) couples the sample to a specific setup. +# - No path: trailing paths like /graphql are added by pycti internally. +# - "localhost": the sample is a local-dev starting point; Docker service +# names like "opencti" belong in overrides, not defaults. +# --------------------------------------------------------------------------- +_VALID_URL = "http://localhost" + + +@CheckRegistry.register( + code="VC102", + name="config-url-default", + description=f"OPENCTI_URL must default to {_VALID_URL}", + severity=Severity.ERROR, +) +def check_config_url(ctx: ConnectorContext) -> list[CheckFinding]: + """Check OPENCTI_URL default value in configuration files.""" + all_vars = extract_all_env_vars(ctx) + + if not all_vars: + return [ + CheckFinding( + message="No configuration file found (docker-compose.yml or .env.sample)", + severity=Severity.ERROR, + suggestion="Add a docker-compose.yml with environment variables.", + ), + ] + + url_vars = [v for v in all_vars if v.name == "OPENCTI_URL" and not v.is_commented] + + if not url_vars: + return [ + CheckFinding( + message="OPENCTI_URL not found in configuration files", + severity=Severity.ERROR, + suggestion=f"Add OPENCTI_URL={_VALID_URL} to docker-compose.yml.", + ), + ] + + results: list[CheckFinding] = [] + for var in url_vars: + value = var.value + + # Environment variable reference — acceptable + if value.startswith("${") and value.endswith("}"): + results.append( + CheckFinding( + message=f"OPENCTI_URL uses env reference ({value})", + file_path=var.file_path, + line=var.line, + severity=Severity.INFO, + ), + ) + continue + + # --------------------------------------------------------------------------- + # Validate the URL structure with urlparse. + # + # Each component is checked independently so we can give targeted + # feedback (e.g. "remove the port" vs. "use http"): + # scheme — must be "http" (not https, ftp, etc.) + # hostname — must be "localhost" (not "opencti" or an IP) + # port — must be absent (None) + # path — must be empty or "/" (no trailing path like /graphql) + # --------------------------------------------------------------------------- + parsed = urlparse(value) + is_valid = ( + parsed.scheme == "http" + and parsed.hostname == "localhost" + and (parsed.port is None) + and (parsed.path in ("", "/")) + ) + + if is_valid: + results.append( + CheckFinding( + message=f"OPENCTI_URL={_VALID_URL} ✓", + severity=Severity.INFO, + file_path=var.file_path, + line=var.line, + ), + ) + else: + # Build a targeted suggestion listing only the specific issues, + # so the developer knows exactly what to fix. + suggestion_parts = [] + if parsed.port is not None: + suggestion_parts.append("Remove the port number") + if parsed.hostname and parsed.hostname != "localhost": + suggestion_parts.append("Use 'localhost' as the hostname") + if parsed.scheme != "http": + suggestion_parts.append("Use 'http' as the scheme") + if parsed.path not in ("", "/"): + suggestion_parts.append("Remove the path suffix") + suggestion_parts.append(f"Set to {_VALID_URL}") + + results.append( + CheckFinding( + message=f"OPENCTI_URL={value} — expected {_VALID_URL}", + severity=Severity.ERROR, + file_path=var.file_path, + line=var.line, + suggestion=". ".join(suggestion_parts).capitalize() + ".", + ), + ) + + return results diff --git a/shared/tools/connector_linter/connector_linter/checks/vc1xx_config/vc103_config_variable_prefix.py b/shared/tools/connector_linter/connector_linter/checks/vc1xx_config/vc103_config_variable_prefix.py new file mode 100644 index 00000000000..aaf2230c571 --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc1xx_config/vc103_config_variable_prefix.py @@ -0,0 +1,100 @@ +"""VC103 — Configuration variables must use proper prefixes. + +Every environment variable in ``docker-compose.yml`` and ``.env.sample`` +must be prefixed with one of: + +- ``OPENCTI_`` — platform connection variables +- ``CONNECTOR_`` — pycti connector variables +- ``_`` — connector-specific variables + +The connector name prefix is derived from the directory name +(uppercased, hyphens converted to underscores or removed). + +Scope: Common (all connector types). +""" + +from pathlib import Path + +from connector_linter.checks.vc1xx_config._helpers import ( + derive_connector_prefixes, + extract_all_env_vars, +) +from connector_linter.models import CheckFinding, ConnectorContext, Severity +from connector_linter.registry import CheckRegistry + +# --------------------------------------------------------------------------- +# Standard env-var prefixes used by all connectors: +# OPENCTI_ — platform connection settings (URL, token) +# CONNECTOR_ — pycti framework settings (id, name, scope, log_level) +# +# Connector-specific variables use a prefix derived from the directory name +# (e.g. MANDIANT_, ABUSE_SSL_). See derive_connector_prefixes(). +# --------------------------------------------------------------------------- +_STANDARD_PREFIXES = ("OPENCTI_", "CONNECTOR_") + + +@CheckRegistry.register( + code="VC103", + name="config-variable-prefix", + description="Env vars must use OPENCTI_, CONNECTOR_, or _ prefix", + severity=Severity.WARNING, # this is a warning because it's a style issue, not a correctness issue +) +def check_config_variable_prefix(ctx: ConnectorContext) -> list[CheckFinding]: + """Check that all env vars use valid prefixes.""" + all_vars = extract_all_env_vars(ctx) + + if not all_vars: + return [ + CheckFinding( + message="No configuration file found (docker-compose.yml or .env.sample)", + severity=Severity.WARNING, + suggestion="Add a docker-compose.yml with environment variables.", + ), + ] + + # Build the full list of valid prefixes: + # ["OPENCTI_", "CONNECTOR_"] + ["MANDIANT_"] (or ["ABUSE_SSL_", "ABUSESSL_"]) + # An underscore is appended to each connector prefix so the match is + # strict — "MANDIANT" alone should not pass, only "MANDIANT_". + connector_prefixes = derive_connector_prefixes(ctx) + valid_prefixes = list(_STANDARD_PREFIXES) + [f"{connector_prefixes}_"] + + bad_vars: list[tuple[str, Path, int]] = [] # (name, path, line) + + # Check every env var against ALL valid prefixes. + # A var is valid if it starts with at least one of them. + for var in all_vars: + if any(var.name.startswith(prefix) for prefix in valid_prefixes): + continue + bad_vars.append((var.name, var.file_path, var.line)) + + if not bad_vars: + prefix_display = f"{connector_prefixes}_" + return [ + CheckFinding( + message=f"All env vars use valid prefixes (OPENCTI_, CONNECTOR_, {prefix_display})", + severity=Severity.INFO, + ), + ] + + results: list[CheckFinding] = [] + # Prefer the underscore form (e.g. ABUSE_SSL over ABUSESSL) as the + # canonical prefix for suggestions. The underscore variant is always + # the dirname with hyphens replaced by underscores. + canonical = ctx.path.name.upper().replace("-", "_") + for var_name, file_path, line in bad_vars: + results.append( + CheckFinding( + message=f"{var_name} has no valid connector prefix", + severity=Severity.WARNING, # this is technically a pass since the var is valid, just not styled correctly + file_path=file_path, + line=line, + suggestion=( + f"Prefix with {canonical}_ " + f"(e.g. {canonical}_{var_name}). " + f"Accepted prefixes: OPENCTI_, CONNECTOR_, {canonical}_." + ), + ), + ) + + return results diff --git a/shared/tools/connector_linter/connector_linter/checks/vc1xx_config/vc104_config_file_samples.py b/shared/tools/connector_linter/connector_linter/checks/vc1xx_config/vc104_config_file_samples.py new file mode 100644 index 00000000000..c50c37da705 --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc1xx_config/vc104_config_file_samples.py @@ -0,0 +1,322 @@ +"""VC104 — Configuration file samples must exist and follow conventions. + +A verified connector **must** provide: + +1. ``config.yml.sample`` (at root or under ``src/``). +2. **Either** ``.env.sample`` **or** ``docker-compose.yml`` with an + ``environment:`` section. +3. All placeholder values use exact ``ChangeMe`` case (not ``CHANGEME``). +4. Configuration is **not** hardcoded in a Python file. +5. Settings **with** defaults must be **commented** out. +6. Settings **without** defaults must use ``ChangeMe`` (uncommented). + +Scope: Common (all connector types). +""" + +import ast +import re +from pathlib import Path + +from connector_linter.checks.vc1xx_config._helpers import ( + extract_env_vars_from_docker_compose, + find_bad_changeme_values, + has_docker_compose_env, + has_env_sample, +) +from connector_linter.models import CheckFinding, ConnectorContext, Severity +from connector_linter.registry import CheckRegistry + +# --------------------------------------------------------------------------- +# Regex: config-like variable names that should NOT be hardcoded in Python. +# +# Matches uppercase identifiers ending with common config suffixes: +# URL, TOKEN, KEY, SECRET, PASSWORD, HOST, PORT, API, ENDPOINT, BASE_URL +# The optional trailing "s" handles plurals (e.g. ENDPOINTS). +# Case-insensitive so it also catches mixed-case Python names. +# +# Examples that match: API_KEY, BASE_URL, OPENCTI_TOKEN, MY_SECRETS +# --------------------------------------------------------------------------- +_CONFIG_NAME_RE = re.compile( + r"^[A-Z_]*(?:URL|TOKEN|KEY|SECRET|PASSWORD|HOST|PORT|API|ENDPOINT|BASE_URL)s?$", + re.IGNORECASE, +) + +# --------------------------------------------------------------------------- +# Variables that must ALWAYS remain uncommented in docker-compose.yml. +# +# OPENCTI_URL and OPENCTI_TOKEN are required for every connector to connect +# to the platform. Unlike optional settings (which should be commented out +# when they have sane defaults), these two must always be visible and active +# so the user immediately knows they need to set them. +# --------------------------------------------------------------------------- +_ALWAYS_UNCOMMENTED = {"OPENCTI_URL", "OPENCTI_TOKEN"} + + +def _find_hardcoded_python_config(ctx: ConnectorContext) -> list[tuple[Path, int, str]]: + """Detect module-level hardcoded config assignments in Python files. + + Returns (file_path, line, variable_name) for each suspicious assignment. + Excludes settings.py and files that import pydantic / os.environ. + """ + src_dir = ctx.path / "src" + if not src_dir.is_dir(): + return [] + + hits: list[tuple[Path, int, str]] = [] + + for py_file in src_dir.rglob("*.py"): + fname = py_file.name + # settings.py is the *expected* place for config-variable declarations + # (Pydantic settings classes). Skip it — it's not "hardcoded". + if fname == "settings.py": + continue + try: + source = py_file.read_text(encoding="utf-8") + except (OSError, UnicodeDecodeError): + continue + + # --------------------------------------------------------------------------- + # Skip files that already use a proper config-loading mechanism. + # + # If the file references BaseSettings, get_config_variable, os.environ, + # etc., the developer is loading config at runtime — not hardcoding it. + # Flagging these would produce false positives. + # --------------------------------------------------------------------------- + if any( + kw in source + for kw in ( + "BaseSettings", + "BaseConnectorSettings", + "get_config_variable", + "os.environ", + "os.getenv", + "pydantic_settings", + ) + ): + continue + + try: + tree = ast.parse(source, filename=str(py_file)) + except SyntaxError: + continue + + # Walk only top-level assignments (module scope) — nested assignments + # inside functions are less suspicious (they may be local defaults). + for node in ast.iter_child_nodes(tree): + if not isinstance(node, ast.Assign): + continue + for target in node.targets: + if not isinstance(target, ast.Name): + continue + name = target.id + if not _CONFIG_NAME_RE.match(name): + continue + # Only flag hardcoded string/number values (not function + # calls, attribute lookups, or other dynamic expressions). + if isinstance(node.value, ast.Constant) and isinstance( + node.value.value, + (str, int, float), + ): + rel = py_file.relative_to(ctx.path) + hits.append((rel, node.lineno, name)) + + return hits + + +def _check_config_yml_sample_exists(ctx: ConnectorContext) -> CheckFinding: + """Check that config.yml.sample exists at root""" + config_yml = ctx.path / "config.yml.sample" + if config_yml.is_file(): + rel = config_yml.relative_to(ctx.path) + return CheckFinding( + message=f"config.yml.sample found at {rel} (root)", + severity=Severity.INFO, + file_path=config_yml, + line=1, + ) + elif (ctx.path / "src/config.yml.sample").is_file(): + rel = Path("src/config.yml.sample") + return CheckFinding( + message=f"config.yml.sample found at {rel} (src/)", + severity=Severity.WARNING, + file_path=ctx.path / rel, + line=1, + suggestion="Move config.yml.sample to root directory for better " + "visibility and convention.", + ) + else: + return CheckFinding( + message="config.yml.sample not found", + severity=Severity.ERROR, + suggestion="Add a config.yml.sample at root.", + ) + + +def check_docker_compose_or_env_sample_exists(ctx: ConnectorContext) -> CheckFinding: + """Check that either docker-compose.yml (with env) or .env.sample exists.""" + has_compose = has_docker_compose_env(ctx) + has_env = has_env_sample(ctx) + + if has_compose or has_env: + source = "docker-compose.yml" if has_compose else ".env.sample" + return CheckFinding( + message=f"Environment config available via {source}", + severity=Severity.INFO, + ) + else: + return CheckFinding( + message="No docker-compose.yml (with env vars) or .env.sample found", + severity=Severity.ERROR, + suggestion=( + "Add a docker-compose.yml with an environment section " + "or an .env.sample file." + ), + ) + + +def check_change_me_consistency(ctx: ConnectorContext) -> list[CheckFinding]: + """Check that all placeholder values use exact ChangeMe case.""" + config_yml = ctx.path / "config.yml.sample" + files_to_check: list[Path] = [] + compose_path = ctx.path / "docker-compose.yml" + if compose_path.is_file(): + files_to_check.append(compose_path) + env_path = ctx.path / ".env.sample" + if env_path.is_file(): + files_to_check.append(env_path) + if config_yml.is_file(): + files_to_check.append(config_yml) + + bad_hits: list[tuple[Path, int, str]] = [] + for fpath in files_to_check: + bad_hits.extend( + (hit.file_path, hit.line, hit.raw_value) + for hit in find_bad_changeme_values(fpath) + ) + + if bad_hits: + results: list[CheckFinding] = [] + for fpath, line_no, raw_val in bad_hits: + results.append( + CheckFinding( + message=f"'{raw_val}' should be 'ChangeMe'", + severity=Severity.ERROR, + file_path=fpath, + line=line_no, + suggestion="Use exact 'ChangeMe' (not CHANGEME or changeme).", + ), + ) + return results + else: + return [ + CheckFinding( + message="All placeholder values use correct ChangeMe case", + severity=Severity.INFO, + ), + ] + + +def check_commented_convention(ctx: ConnectorContext) -> list[CheckFinding]: + """Check that settings with defaults are commented out, and without defaults use ChangeMe. + + Convention for docker-compose.yml environment sections: + - Variables WITH a default value (e.g. ``LOG_LEVEL=info``) should be + commented out. The user uncomments them only when they want to + override the built-in default. + - Variables WITHOUT a default (e.g. ``API_KEY=ChangeMe``) must be + uncommented so the user immediately sees they need to fill them in. + + OPENCTI_URL and OPENCTI_TOKEN are exempt — they are always uncommented + because every connector needs them regardless of defaults. + """ + compose_vars = extract_env_vars_from_docker_compose(ctx) + if not compose_vars: + return [] + + results: list[CheckFinding] = [] + for var in compose_vars: + is_changeme = var.value.lower() == "changeme" + is_env_ref = var.value.startswith("${") and var.value.endswith("}") + + if var.name in _ALWAYS_UNCOMMENTED: + continue + + # Setting is neither: + # - 'ChangeMe' + # - an environment reference + # - not commented out + # → it has a default value but is not following the convention of being commented out. + if not is_changeme and not is_env_ref and not var.is_commented: + rel = var.file_path.relative_to(ctx.path) + results.append( + CheckFinding( + message=( + f"{rel}:{var.line}: {var.name}={var.value} has a " + f"default — should be commented out" + ), + severity=Severity.WARNING, + file_path=var.file_path, + line=var.line, + suggestion=( + f"Comment out {var.name} since it has a default " + f"value. Users can uncomment to override." + ), + ), + ) + + return results + + +@CheckRegistry.register( + code="VC104", + name="config-file-samples", + description="Config samples (config.yml.sample + docker-compose/env) must exist", + severity=Severity.ERROR, +) +def check_config_file_samples(ctx: ConnectorContext) -> list[CheckFinding]: + """Validate configuration file samples exist and follow conventions.""" + results: list[CheckFinding] = [] + + # --- Sub-check A: config.yml.sample exists --- + # Every connector must ship a YAML config sample so users can run + # the connector outside Docker (e.g. direct Python invocation). + results.append(_check_config_yml_sample_exists(ctx)) + + # --- Sub-check B: docker-compose.yml or .env.sample exists --- + # At least one Docker-friendly config file must be present so + # users can deploy via docker-compose without extra steps. + results.append(check_docker_compose_or_env_sample_exists(ctx)) + + # --- Sub-check C: ChangeMe case consistency --- + # All placeholder values must use exact "ChangeMe" casing per the + # January 2026 alignment (not CHANGEME, changeme, etc.). + results.extend(check_change_me_consistency(ctx)) + + # --- Sub-check D: commented/uncommented convention (docker-compose.yml) --- + # Settings WITH defaults → must be commented out (user uncomments to override) + # Settings WITHOUT defaults → must use ChangeMe (uncommented, user fills in) + # This makes docker-compose samples self-documenting. + results.extend(check_commented_convention(ctx)) + + # --- Sub-check E: No hardcoded Python configuration --- + # Config values (URLs, tokens, keys) must come from env vars or settings + # classes, never from hardcoded constants in Python source files. + # Severity is WARNING because this is a best-practice + # recommendation, not a hard blocker. + hardcoded = _find_hardcoded_python_config(ctx) + if hardcoded: + for fpath, line_no, var_name in hardcoded: + results.append( + CheckFinding( + message=f"{var_name} appears hardcoded in Python", + severity=Severity.WARNING, + file_path=fpath, + line=line_no, + suggestion=( + "Move configuration to environment variables or " + "connectors-sdk settings, not hardcoded Python constants." + ), + ), + ) + + return results diff --git a/shared/tools/connector_linter/connector_linter/checks/vc1xx_config/vc105_no_absolute_date.py b/shared/tools/connector_linter/connector_linter/checks/vc1xx_config/vc105_no_absolute_date.py new file mode 100644 index 00000000000..ab5e8b4de40 --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc1xx_config/vc105_no_absolute_date.py @@ -0,0 +1,176 @@ +"""VC105 — Import start dates must use ISO duration, not absolute dates. + +When a connector supports configuring the historical import window +(``start_date``, ``import_start_date``, etc.), it must accept ISO 8601 +**duration** strings (e.g. ``P30D``, ``P6M``) rather than hardcoded +absolute dates like ``2020-05-01T00:00:00``. + +The connectors-sdk provides ``DatetimeFromIsoString`` which automatically +handles both absolute ISO dates and relative durations. + +Scope: Common (all connector types). +""" + +import ast +import re +from datetime import date, datetime + +from connector_linter.checks.vc1xx_config._helpers import extract_all_env_vars +from connector_linter.models import ( + CheckFinding, + ConnectorContext, + Severity, +) +from connector_linter.registry import CheckRegistry + +# --------------------------------------------------------------------------- +# Regex: env var names that indicate a start/import date setting. +# +# Matches substrings like START_DATE, START_TIMESTAMP, IMPORT_DATE, +# IMPORT_START inside variable names. Case-insensitive to catch both +# env var names (uppercase) and Python field names (snake_case). +# +# Examples that match: +# CONNECTOR_START_DATE, import_start_date, MY_IMPORT_DATE +# --------------------------------------------------------------------------- +_DATE_VAR_NAMES = re.compile( + r"(?:START_DATE|START_TIMESTAMP|IMPORT_DATE|IMPORT_START|SINCE)", + re.IGNORECASE, +) + + +def _is_absolute_iso_datetime(value: str) -> bool: + """Return True when value is an absolute ISO date/datetime string. + + Accepts quoted and unquoted values. Durations (e.g. P30D), env var + placeholders (e.g. ${START_DATE}), and invalid date strings return False. + """ + normalized = value.strip().strip("\"'") + if not normalized: + return False + + # Python's fromisoformat accepts +00:00 but not every trailing "Z" form. + normalized = normalized.replace("Z", "+00:00") + + for parser in (datetime.fromisoformat, date.fromisoformat): + try: + parser(normalized) + return True + except ValueError: + continue + return False + + +def _check_config_files(ctx: ConnectorContext) -> list[CheckFinding]: + """Check config files for absolute dates in start_date-like variables. + + Detection flow: + 1. Extract all env vars from docker-compose.yml / .env.sample. + 2. Skip commented-out lines (inactive config). + 3. Keep only variables whose name contains a date-like keyword. + 4. Flag any whose value looks like an absolute ISO date (20xx-…). + """ + results: list[CheckFinding] = [] + env_vars = extract_all_env_vars(ctx) + + for var in env_vars: + # Commented-out vars are informational — skip them + if var.is_commented: + continue + # Only inspect variables with date-related names + if not _DATE_VAR_NAMES.search(var.name): + continue + # Flag values that look like absolute dates (e.g. "2020-05-01") + if _is_absolute_iso_datetime(var.value): + rel = var.file_path.relative_to(ctx.path) + results.append( + CheckFinding( + message=( + f"{rel}:{var.line}: {var.name}={var.value} uses absolute date" + ), + severity=Severity.WARNING, + file_path=var.file_path, + line=var.line, + suggestion=( + "Use an ISO 8601 duration (e.g. P30D for 30 days ago) " + "instead of a fixed date. The SDK's DatetimeFromIsoString " + "type accepts both formats." + ), + ), + ) + + return results + + +def _check_code_defaults(ctx: ConnectorContext) -> list[CheckFinding]: + """Check Python code for hardcoded date defaults in Field() or assignments. + + Looks for AST patterns like: + Field(default="2020-05-01T00:00:00Z") + + where a keyword argument ``default`` is set to a string constant + matching an absolute date. This catches Pydantic settings fields + that should use ISO durations instead. + """ + sources = ctx.python_sources + if not sources: + return [] + + trees = ctx.python_trees + results: list[CheckFinding] = [] + + for file_path, tree in trees.items(): + for node in ast.walk(tree): + # Check Field(default="2020-...") or direct assignment + if ( + isinstance(node, ast.keyword) + and node.arg == "default" + and ( + isinstance(node.value, ast.Constant) + and isinstance(node.value.value, str) + and _is_absolute_iso_datetime(node.value.value) + ) + ): + # Walk up to find the field name context + results.append( + CheckFinding( + message=( + f'Field default="{node.value.value}" ' + f"is a hardcoded absolute date" + ), + severity=Severity.WARNING, + file_path=file_path, + line=node.value.lineno, + suggestion=( + 'Use an ISO duration default (e.g. "P30D") ' + "and type the field as DatetimeFromIsoString " + "from connectors-sdk." + ), + ), + ) + + return results + + +@CheckRegistry.register( + code="VC105", + name="no-absolute-import-date", + description="Import start dates should use ISO duration, not absolute dates", + severity=Severity.WARNING, +) +def check_no_absolute_import_date(ctx: ConnectorContext) -> list[CheckFinding]: + """Check that no absolute dates are used for import start configuration.""" + config_results = _check_config_files(ctx) + code_results = _check_code_defaults(ctx) + + all_results = config_results + code_results + + if not all_results: + return [ + CheckFinding( + message="No hardcoded absolute import dates found ✓", + severity=Severity.INFO, + ), + ] + + return all_results diff --git a/shared/tools/connector_linter/connector_linter/checks/vc2xx_metadata/__init__.py b/shared/tools/connector_linter/connector_linter/checks/vc2xx_metadata/__init__.py new file mode 100644 index 00000000000..07b13d51365 --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc2xx_metadata/__init__.py @@ -0,0 +1,8 @@ +"""VC2xx — Metadata checks. + +Validates connector metadata (manifest, connector identity) for +compliance with OpenCTI verified-connector conventions. + +VC201 manifest-verified-date Manifest must have verified=true and last_verified_date +VC202 manifest-container-image container_version must be rolling, container_image must match dirname +""" diff --git a/shared/tools/connector_linter/connector_linter/checks/vc2xx_metadata/vc201_manifest_verified.py b/shared/tools/connector_linter/connector_linter/checks/vc2xx_metadata/vc201_manifest_verified.py new file mode 100644 index 00000000000..f18ffefe8c4 --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc2xx_metadata/vc201_manifest_verified.py @@ -0,0 +1,120 @@ +"""VC201 — Connector manifest must declare verified status and date. + +A verified connector must have both fields in +``__metadata__/connector_manifest.json``: + +- ``"verified": true`` +- ``"last_verified_date": "YYYY-MM-DD"`` (non-null, valid ISO date) + +Scope: Common (all connector types). +""" + +from datetime import date + +from connector_linter.models import CheckFinding, ConnectorContext, Severity +from connector_linter.registry import CheckRegistry + + +@CheckRegistry.register( + code="VC201", + name="manifest-verified-date", + description="Manifest must have verified=true and a valid last_verified_date", + severity=Severity.ERROR, +) +def check_manifest_verified_date(ctx: ConnectorContext) -> list[CheckFinding]: + """Check verified flag and last_verified_date in manifest.""" + manifest_path = ctx.path / "__metadata__" / "connector_manifest.json" + + if not ctx.manifest: + return [ + CheckFinding( + message="No connector_manifest.json found in __metadata__/", + severity=Severity.ERROR, + file_path=manifest_path, + suggestion="Add __metadata__/connector_manifest.json with verified fields.", + ), + ] + + results: list[CheckFinding] = [] + + # --- Sub-check A: verified flag --- + # Three-way branch: + # True → PASS: connector is marked as verified + # False → FAIL: explicitly marked as not verified + # missing/None → FAIL: field is absent from the manifest + verified = ctx.manifest.get("verified") + if verified is True: + results.append( + CheckFinding( + message='"verified": true ✓', + severity=Severity.INFO, + file_path=manifest_path, + ), + ) + elif verified is False: + results.append( + CheckFinding( + message='"verified" is false', + severity=Severity.ERROR, + file_path=manifest_path, + suggestion='Set "verified": true in connector_manifest.json.', + ), + ) + else: + results.append( + CheckFinding( + message='"verified" field is missing from manifest', + severity=Severity.ERROR, + file_path=manifest_path, + suggestion='Add "verified": true to connector_manifest.json.', + ), + ) + + # --- Sub-check B: last_verified_date --- + # Must be a non-null string in YYYY-MM-DD format and a real ISO date. + # This records when the connector was last reviewed for verified + # compliance. + date_val = ctx.manifest.get("last_verified_date") + if date_val is None: + results.append( + CheckFinding( + message='"last_verified_date" is null or missing', + severity=Severity.ERROR, + file_path=manifest_path, + suggestion=( + 'Set "last_verified_date": "YYYY-MM-DD" ' + "(e.g. today's date) in connector_manifest.json." + ), + ), + ) + elif not isinstance(date_val, str): + results.append( + CheckFinding( + message=f'"last_verified_date": "{date_val}" — invalid format', + severity=Severity.ERROR, + file_path=manifest_path, + suggestion='Use YYYY-MM-DD format (e.g. "2025-08-18").', + ), + ) + else: + try: + date.fromisoformat(date_val) + except ValueError: + results.append( + CheckFinding( + message=f'"last_verified_date": "{date_val}" — invalid format', + severity=Severity.ERROR, + file_path=manifest_path, + suggestion='Use YYYY-MM-DD format (e.g. "2025-08-18").', + ), + ) + else: + results.append( + CheckFinding( + message=f'"last_verified_date": "{date_val}" ✓', + severity=Severity.INFO, + file_path=manifest_path, + ), + ) + + return results diff --git a/shared/tools/connector_linter/connector_linter/checks/vc2xx_metadata/vc202_container_image.py b/shared/tools/connector_linter/connector_linter/checks/vc2xx_metadata/vc202_container_image.py new file mode 100644 index 00000000000..b25bcc588ad --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc2xx_metadata/vc202_container_image.py @@ -0,0 +1,110 @@ +"""VC202 — Manifest container fields must be correct. + +In ``__metadata__/connector_manifest.json``: + +- ``container_version`` must be ``"rolling"`` (not a pinned version). +- ``container_image`` must be ``"opencti/connector-"`` where + ```` is the connector directory name. + +Scope: Common (all connector types). +""" + +from connector_linter.models import CheckFinding, ConnectorContext, Severity +from connector_linter.registry import CheckRegistry + + +@CheckRegistry.register( + code="VC202", + name="manifest-container-image", + description="Manifest container_version must be rolling, container_image must match dirname", + severity=Severity.ERROR, +) +def check_manifest_container_image(ctx: ConnectorContext) -> list[CheckFinding]: + """Check container_version and container_image in manifest.""" + if not ctx.manifest: + return [ + CheckFinding( + message="No connector_manifest.json found in __metadata__/", + severity=Severity.ERROR, + suggestion="Add __metadata__/connector_manifest.json.", + ), + ] + + results: list[CheckFinding] = [] + manifest_path = ctx.path / "__metadata__" / "connector_manifest.json" + + # --- Sub-check A: container_version must be "rolling" --- + # + # Docker Hub images for verified connectors are built automatically + # by CI on every release. The manifest must declare "rolling" (not a + # pinned version like "6.7.7") so the platform always pulls the latest + # compatible image without manual version bumps. + version = ctx.manifest.get("container_version") + if version == "rolling": + results.append( + CheckFinding( + message='"container_version": "rolling" ✓', + severity=Severity.INFO, + file_path=manifest_path, + ), + ) + elif version is None: + results.append( + CheckFinding( + message='"container_version" is missing from manifest', + severity=Severity.ERROR, + file_path=manifest_path, + suggestion='Add "container_version": "rolling" to connector_manifest.json.', + ), + ) + else: + results.append( + CheckFinding( + message=f'"container_version": "{version}" — must be "rolling"', + severity=Severity.ERROR, + file_path=manifest_path, + suggestion='Set "container_version": "rolling" in connector_manifest.json.', + ), + ) + + # --- Sub-check B: container_image must match opencti/connector- --- + # + # Convention: the Docker Hub image name is always derived from the + # connector's directory name: + # directory "mandiant" → image "opencti/connector-mandiant" + # directory "abuse-ssl" → image "opencti/connector-abuse-ssl" + # + # This ensures Docker Hub automation and the OpenCTI platform can + # resolve the correct image without per-connector configuration. + dirname = ctx.path.name + expected_image = f"opencti/connector-{dirname}" + image = ctx.manifest.get("container_image") + + if image == expected_image: + results.append( + CheckFinding( + message=f'"container_image": "{image}" ✓', + severity=Severity.INFO, + file_path=manifest_path, + ), + ) + elif image is None: + results.append( + CheckFinding( + message='"container_image" is missing from manifest', + severity=Severity.ERROR, + file_path=manifest_path, + suggestion=f'Add "container_image": "{expected_image}" to connector_manifest.json.', + ), + ) + else: + results.append( + CheckFinding( + message=f'"container_image": "{image}" — expected "{expected_image}"', + severity=Severity.ERROR, + file_path=manifest_path, + suggestion=f'Set "container_image": "{expected_image}" to match the directory name.', + ), + ) + + return results diff --git a/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/__init__.py b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/__init__.py new file mode 100644 index 00000000000..4811f8cdace --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/__init__.py @@ -0,0 +1,27 @@ +"""VC3xx — Code quality checks. + +VC301: Connector must define an author identity. +VC302: Author must be referenced on STIX entities (created_by_ref). +VC303: CONNECTOR_TYPE must be defined in application code, not read from env. +VC304: Ensure TLP markings are checked (check_max_tlp). +VC305: Connector must implement Base Settings from connectors-sdk. +VC306: Connector log level should default to 'error'. +VC307: Except blocks should use error/warning logging, not debug/info. +VC308: Main entry point must use traceback for error handling. +VC309: Connector must use only absolute imports, no relative imports. +VC310: External references must not be added by default to non-Identity objects. +VC311: Connector should use TLP markings on entities with appropriate level. +VC312: send_stix2_bundle must use cleanup_inconsistent_bundle=True. +VC313: STIX SDO/SRO objects must use pycti.XXX.generate_id() for deterministic IDs. +VC314: External-import connectors must use schedule_process or schedule_iso. +VC315: Connector must call initiate_work before processing. +VC316: Connector must close work with to_processed after processing. +VC317: initiate_work should only be called when data is available. +VC318: Internal-enrichment connectors must use helper.listen(). +VC319: Enrichment connector must return original bundle when not in scope. +VC320: Enrichment connector must enforce TLP access control. +VC321: Enrichment connector must be playbook-compatible. +VC322: Enrichment connector must read data['stix_objects'] (former bundle). +VC323: Stream connectors must use helper.listen_stream(). +VC324: Relationship should not set both start_time and stop_time. +""" diff --git a/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/_helpers.py b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/_helpers.py new file mode 100644 index 00000000000..bad6ee75e7a --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/_helpers.py @@ -0,0 +1,401 @@ +"""Shared helpers for VC3xx code quality checks.""" + +import ast +import re +from dataclasses import dataclass +from pathlib import Path + +# --------------------------------------------------------------------------- +# Regex helpers (for simple text-pattern checks) +# --------------------------------------------------------------------------- + + +def find_pattern_locations( + sources: dict[Path, str], + patterns: list[re.Pattern], +) -> list[tuple[Path, int, str]]: + """Find all occurrences of any pattern in sources. + + Returns list of (file_path, line_number, matched_line). + """ + hits: list[tuple[Path, int, str]] = [] + for file_path, content in sources.items(): + # Scan line-by-line so we can report exact line numbers + lines = content.splitlines() + for line_no, line in enumerate(lines, start=1): + for pattern in patterns: + if pattern.search(line): + hits.append((file_path, line_no, line.strip())) + # One match per line is enough — avoids duplicate reports + # when multiple patterns match the same line + break + return hits + + +# --------------------------------------------------------------------------- +# AST helpers — structural analysis of Python source +# --------------------------------------------------------------------------- + + +@dataclass +class ImportInfo: + """Represents a single imported name from a source file.""" + + module: str # The source module, e.g. "connectors_sdk" or "pydantic_settings" + name: str # The imported symbol, e.g. "BaseConnectorSettings" + alias: str | None # The 'as' alias if present, e.g. "BCS" for `import ... as BCS` + file_path: Path # Which file contains this import + line: int # Line number for reporting + + +def find_imports( + trees: dict[Path, ast.Module], + module_pattern: str | None = None, + name_pattern: str | None = None, +) -> list[ImportInfo]: + """Find imports matching optional module and/or name patterns. + + Args: + trees: Parsed AST modules keyed by file path. + module_pattern: Regex to match the module (e.g. r"connectors_sdk"). + name_pattern: Regex to match the imported name (e.g. r"BaseConnectorSettings"). + + Returns: + List of ImportInfo for matching imports. + + """ + results: list[ImportInfo] = [] + # Pre-compile patterns for efficient repeated matching + mod_re = re.compile(module_pattern) if module_pattern else None + name_re = re.compile(name_pattern) if name_pattern else None + + for file_path, tree in trees.items(): + for node in ast.walk(tree): + # --------------------------------------------------------------------------- + # Handle `from import ` (ImportFrom) + # + # module_pattern filters the source module (e.g. "connectors_sdk") + # name_pattern filters the imported symbol (e.g. "BaseConnectorSettings") + # --------------------------------------------------------------------------- + if isinstance(node, ast.ImportFrom) and node.module: + if mod_re and not mod_re.search(node.module): + continue + for alias in node.names: + if name_re and not name_re.search(alias.name): + continue + results.append( + ImportInfo( + module=node.module, + name=alias.name, + alias=alias.asname, + file_path=file_path, + line=node.lineno, + ), + ) + # --------------------------------------------------------------------------- + # Handle `import ` (Import) + # + # For bare imports, both module and name are the full module name + # (e.g. `import stix2` → module="stix2", name="stix2"). + # Both module_pattern and name_pattern are checked against this name. + # --------------------------------------------------------------------------- + elif isinstance(node, ast.Import): + for alias in node.names: + module_name = alias.name + if mod_re and not mod_re.search(module_name): + continue + if name_re and not name_re.search(module_name): + continue + results.append( + ImportInfo( + module=module_name, + name=module_name, + alias=alias.asname, + file_path=file_path, + line=node.lineno, + ), + ) + return results + + +@dataclass +class ClassInfo: + """Represents a class definition found in source.""" + + name: str + # Base class names are stored unqualified (just the final name): + # class Foo(mod.BaseSettings) → bases = ["BaseSettings"] + # class Foo(BaseSettings) → bases = ["BaseSettings"] + bases: list[str] + file_path: Path + line: int + + +def find_classes( + trees: dict[Path, ast.Module], + base_name: str | None = None, +) -> list[ClassInfo]: + """Find class definitions, optionally filtering by base class name. + + Args: + trees: Parsed AST modules keyed by file path. + base_name: If provided, only return classes inheriting from this name. + + """ + results: list[ClassInfo] = [] + for file_path, tree in trees.items(): + for node in ast.walk(tree): + if not isinstance(node, ast.ClassDef): + continue + bases: list[str] = [] + for base in node.bases: + # ast.Name → direct reference: class Foo(BaseSettings) + if isinstance(base, ast.Name): + bases.append(base.id) + # ast.Attribute → qualified reference: class Foo(mod.BaseSettings) + # We only keep the final attr name for matching simplicity + elif isinstance(base, ast.Attribute): + bases.append(base.attr) + if base_name and base_name not in bases: + continue + results.append( + ClassInfo( + name=node.name, + bases=bases, + file_path=file_path, + line=node.lineno, + ), + ) + return results + + +@dataclass +class ExceptBlockInfo: + """Represents an except handler block found in source.""" + + exception_types: list[str] # e.g. ["ValueError", "TypeError"] + # The body (list of statements) is stored so downstream checks can + # analyze what happens inside the except block (e.g. logging calls) + body: list[ast.stmt] + file_path: Path + line: int + + +def find_except_blocks( + trees: dict[Path, ast.Module], +) -> list[ExceptBlockInfo]: + """Find all except handler blocks across source files.""" + results: list[ExceptBlockInfo] = [] + for file_path, tree in trees.items(): + for node in ast.walk(tree): + if not isinstance(node, ast.ExceptHandler): + continue + + exc_types: list[str] = [] + if node.type is not None: + # Single exception: except ValueError: + if isinstance(node.type, ast.Name): + exc_types.append(node.type.id) + # Tuple of exceptions: except (ValueError, TypeError): + elif isinstance(node.type, ast.Tuple): + for elt in node.type.elts: + if isinstance(elt, ast.Name): + exc_types.append(elt.id) + + results.append( + ExceptBlockInfo( + exception_types=exc_types, + body=node.body, + file_path=file_path, + line=node.lineno, + ), + ) + return results + + +@dataclass +class CallInfo: + """Represents a function/method call found in source.""" + + func_name: str # The method/function name, e.g. "error" or "check_max_tlp" + # The receiver (object the method is called on), reconstructed as a dotted + # string, e.g. "self.helper.connector_logger" for + # self.helper.connector_logger.error(). None for bare function calls. + receiver: str | None + file_path: Path + line: int + + +def find_calls_in_stmts( + stmts: list[ast.stmt], + file_path: Path, + func_names: set[str] | None = None, +) -> list[CallInfo]: + """Find function/method calls within a list of AST statements. + + Operates on a list of statements (not the whole tree) to support + scoped analysis — e.g. searching only inside an except block body. + + Args: + stmts: AST statement nodes to search. + func_names: If provided, only return calls matching these function names. + file_path: File path for reporting. + + """ + results: list[CallInfo] = [] + for stmt in stmts: + for node in ast.walk(stmt): + if not isinstance(node, ast.Call): + continue + + func_name: str | None = None + receiver: str | None = None + + # Bare function call: print_exc() + if isinstance(node.func, ast.Name): + func_name = node.func.id + # Method call: self.logger.error() → func_name="error" + elif isinstance(node.func, ast.Attribute): + func_name = node.func.attr + receiver = _unparse_receiver(node.func.value) + + if func_name is None: + continue + if func_names and func_name not in func_names: + continue + + results.append( + CallInfo( + func_name=func_name, + receiver=receiver, + file_path=file_path, + line=node.lineno, + ), + ) + return results + + +def _unparse_receiver(node: ast.expr) -> str: + """Unparse the receiver of a method call (e.g. self.helper.connector_logger). + + Recursively walks the dotted attribute chain: + self.helper.connector_logger → Name("self") . Attr("helper") . Attr("connector_logger") + producing the string "self.helper.connector_logger". + """ + # Base case: simple name like "self" or "logger" + if isinstance(node, ast.Name): + return node.id + # Recursive case: dotted attribute access (a.b.c → recurse on a.b, append .c) + if isinstance(node, ast.Attribute): + parent = _unparse_receiver(node.value) + return f"{parent}.{node.attr}" + # Fallback for complex expressions (e.g. function calls as receivers) + return "" + + +@dataclass +class FieldDefaultInfo: + """Represents a class field with a default value.""" + + class_name: str # The class containing this field (e.g. "ConnectorSettings") + field_name: str # The field name (e.g. "log_level") + default_value: str | None # Lowercased string of the default (e.g. "error") + file_path: Path + line: int + + +def find_field_defaults( + trees: dict[Path, ast.Module], + field_name: str, + class_base: str | None = None, +) -> list[FieldDefaultInfo]: + """Find class field assignments with defaults, optionally filtered by base class. + + Detects patterns like: + log_level: str = "error" + log_level: str = Field(default="error") + log_level: LogLevelType = LogLevelType.ERROR + log_level: ... = Field(default=LogLevelType.ERROR) + """ + results: list[FieldDefaultInfo] = [] + for file_path, tree in trees.items(): + for node in ast.walk(tree): + if not isinstance(node, ast.ClassDef): + continue + # If class_base is specified, only match classes inheriting from it + if class_base: + base_names = [ + ( + b.id + if isinstance(b, ast.Name) + else b.attr if isinstance(b, ast.Attribute) else "" + ) + for b in node.bases + ] + if class_base not in base_names: + continue + + # Only look at annotated assignments in the class body (not nested) + for stmt in node.body: + if isinstance(stmt, ast.AnnAssign) and isinstance( + stmt.target, + ast.Name, + ): + if stmt.target.id != field_name: + continue + # Extract the default from the 4 recognized patterns: + # 1. field: str = "error" (Constant) + # 2. field: X = LogLevelType.ERROR (Attribute/enum) + # 3. field: str = Field(default="error") (Call with kwarg) + # 4. field: str = Field("error") (Call with positional) + default_val = _extract_default_value(stmt.value) + results.append( + FieldDefaultInfo( + class_name=node.name, + field_name=field_name, + default_value=default_val, + file_path=file_path, + line=stmt.lineno, + ), + ) + return results + + +def _extract_default_value(node: ast.expr | None) -> str | None: + """Extract the default value from a field assignment or Field() call. + + Handles each AST node type that can represent a default value: + - ast.Constant → direct string literal (e.g. "error") + - ast.Attribute → enum member access (e.g. LogLevelType.ERROR) + - ast.Call → Pydantic Field() with default= kwarg or positional arg + """ + if node is None: + return None + + # Pattern 1 — Direct constant: log_level = "error" + if isinstance(node, ast.Constant) and isinstance(node.value, str): + return node.value.lower() + + # Pattern 2 — Enum access: log_level = LogLevelType.ERROR → "error" + if isinstance(node, ast.Attribute): + return node.attr.lower() + + # Pattern 3 & 4 — Pydantic Field() call + if isinstance(node, ast.Call): + func_name = "" + if isinstance(node.func, ast.Name): + func_name = node.func.id + elif isinstance(node.func, ast.Attribute): + func_name = node.func.attr + + if func_name == "Field": + # Pattern 3: Field(default="error") — keyword argument + for kw in node.keywords: + if kw.arg == "default": + # Recurse: the default value itself may be a Constant or Attribute + return _extract_default_value(kw.value) + # Pattern 4: Field("error") — positional first argument + if node.args: + return _extract_default_value(node.args[0]) + + return None diff --git a/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc301_author_defined.py b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc301_author_defined.py new file mode 100644 index 00000000000..fc6ed0a2ae7 --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc301_author_defined.py @@ -0,0 +1,166 @@ +"""VC301 — Connector must define an author identity. + +Uses AST to detect author identity definitions by looking for constructor +calls (``Identity(...)``, ``OrganizationAuthor(...)``, ``stix2.Identity(...)``) +and API calls (``helper.api.identity.create(...)``). + +Import validation for bare ``Identity(...)`` calls is also AST-based: +the call is only counted when ``Identity`` is imported from ``stix2`` +or ``pycti`` (not some unrelated class). +""" + +import ast +from pathlib import Path + +from connector_linter.models import ( + CheckFinding, + ConnectorContext, + ConnectorType, + Severity, + no_python_sources_finding, +) +from connector_linter.registry import CheckRegistry + +# --------------------------------------------------------------------------- +# Author-definition patterns (AST-based) +# --------------------------------------------------------------------------- + +# Function/constructor names that unambiguously define an author +_UNAMBIGUOUS_AUTHOR_CALLS = {"OrganizationAuthor"} + +# Import modules that confirm bare Identity() comes from stix2/pycti +_IDENTITY_MODULES = {"stix2", "pycti"} + + +def _has_identity_import(trees: dict[Path, ast.Module]) -> bool: + """Check if any source file imports Identity from stix2 or pycti.""" + for tree in trees.values(): + for node in ast.walk(tree): + if isinstance(node, ast.ImportFrom) and node.module: + # from stix2[.xxx] import Identity / from pycti[.xxx] import Identity + mod_root = node.module.split(".")[0] + if mod_root in _IDENTITY_MODULES: + for alias in node.names: + if alias.name == "Identity": + return True + elif isinstance(node, ast.Import): + # import stix2 (Identity accessed as stix2.Identity) + for alias in node.names: + if alias.name.split(".")[0] in _IDENTITY_MODULES: + return True + return False + + +def _is_author_call(node: ast.Call, identity_imported: bool) -> bool: + """Determine if an ast.Call node represents an author definition. + + Recognized patterns: + 1. OrganizationAuthor(...) — connectors-sdk + 2. stix2.Identity(...) — qualified stix2 constructor + 3. Identity(...) — bare, only if imported from stix2/pycti + 4. *.api.identity.create(...) — legacy pycti API call + """ + func = node.func + + # Pattern 1 & 3: bare function call — OrganizationAuthor(...) or Identity(...) + if isinstance(func, ast.Name): + if func.id in _UNAMBIGUOUS_AUTHOR_CALLS: + return True + if func.id == "Identity" and identity_imported: + return True + + # Patterns 2 & 4: attribute-based calls + if isinstance(func, ast.Attribute): + # Pattern 2: stix2.Identity(...) + if func.attr == "Identity" and isinstance(func.value, ast.Name): + if func.value.id == "stix2": + return True + + # Pattern 4: *.api.identity.create(...) + if ( + func.attr == "create" + and isinstance(func.value, ast.Attribute) + and func.value.attr == "identity" + and isinstance(func.value.value, ast.Attribute) + and func.value.value.attr == "api" + ): + return True + + return False + + +def find_author_definitions( + sources: dict[Path, str], + trees: dict[Path, ast.Module], +) -> list[tuple[Path, int, str]]: + """Find author definition locations using AST analysis. + + Args: + sources: Raw Python source content keyed by relative path (used for + line-text extraction in findings). + trees: Pre-parsed AST modules (e.g. ``ctx.python_trees``). Passing + the cached property avoids redundant parsing across checks. + + Returns: + List of (file_path, line_number, matched_line_text). + """ + identity_imported = _has_identity_import(trees) + + hits: list[tuple[Path, int, str]] = [] + for file_path, tree in trees.items(): + content_lines = sources[file_path].splitlines() + for node in ast.walk(tree): + if isinstance(node, ast.Call) and _is_author_call(node, identity_imported): + line_text = ( + content_lines[node.lineno - 1].strip() + if node.lineno <= len(content_lines) + else "" + ) + hits.append((file_path, node.lineno, line_text)) + + return hits + + +@CheckRegistry.register( + code="VC301", + name="author-defined", + description="Connector must define an author identity", + severity=Severity.ERROR, + applicable_types={ + ConnectorType.INTERNAL_ENRICHMENT, + ConnectorType.EXTERNAL_IMPORT, + ConnectorType.INTERNAL_IMPORT_FILE, + }, +) +def check_author_defined(ctx: ConnectorContext) -> list[CheckFinding]: + """Check that the connector defines an author identity somewhere in its source.""" + sources = ctx.python_sources + + if not sources: + return [no_python_sources_finding()] + + hits = find_author_definitions(sources, ctx.python_trees) + + if hits: + file_path, line, _ = hits[0] + return [ + CheckFinding( + message="Author identity defined", + severity=Severity.INFO, + file_path=file_path, + line=line, + ), + ] + + return [ + CheckFinding( + message="No author identity definition found in connector source", + severity=Severity.ERROR, + suggestion=( + "Define an author using one of: " + "stix2.Identity(name=..., identity_class='organization'), " + "OrganizationAuthor(name=...), " + "or self.helper.api.identity.create(type='Organization', name=...)" + ), + ), + ] diff --git a/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc302_author_referenced.py b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc302_author_referenced.py new file mode 100644 index 00000000000..567b9c2f423 --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc302_author_referenced.py @@ -0,0 +1,117 @@ +"""VC302 — Author must be referenced on STIX entities (created_by_ref). + +Uses AST to detect ``author=`` as a keyword argument in function calls +(avoids false positives from variable assignments like ``author = "John"``). +Also detects ``created_by_ref=`` and ``x_opencti_created_by_ref`` via AST. +""" + +import ast +from pathlib import Path + +from connector_linter.checks.vc3xx_code.vc301_author_defined import ( + find_author_definitions, +) +from connector_linter.models import ( + CheckFinding, + ConnectorContext, + ConnectorType, + Severity, + no_python_sources_finding, +) +from connector_linter.registry import CheckRegistry + +# --------------------------------------------------------------------------- +# Keyword argument names that attach an author identity to STIX entities: +# +# created_by_ref — standard STIX 2.1 field (SDOs) +# author — connectors-sdk model parameter +# x_opencti_created_by_ref — OpenCTI custom property (used on observables/SCOs) +# --------------------------------------------------------------------------- +_AUTHOR_KWARGS = {"created_by_ref", "author", "x_opencti_created_by_ref"} + + +def _find_author_references( + trees: dict[Path, ast.Module], +) -> list[tuple[Path, int, str]]: + """Find keyword arguments that reference an author on STIX entities. + + Detects ``created_by_ref=``, ``author=``, and ``x_opencti_created_by_ref`` + as keyword arguments in function/constructor calls — not plain assignments. + """ + hits: list[tuple[Path, int, str]] = [] + for file_path, tree in trees.items(): + for node in ast.walk(tree): + # Only check Call nodes — we want keyword arguments in function/ + # constructor calls, not standalone assignments like `author = "John"` + if not isinstance(node, ast.Call): + continue + for kw in node.keywords: + if kw.arg in _AUTHOR_KWARGS: + # Use the keyword node's own lineno when available; + # fall back to the call node's lineno otherwise + hits.append( + ( + file_path, + getattr(kw, "lineno", node.lineno) or node.lineno, + kw.arg, + ), + ) + return hits + + +@CheckRegistry.register( + code="VC302", + name="author-referenced-on-entities", + description="Author must be referenced on STIX entities (created_by_ref)", + severity=Severity.ERROR, + applicable_types={ + ConnectorType.INTERNAL_ENRICHMENT, + ConnectorType.EXTERNAL_IMPORT, + ConnectorType.INTERNAL_IMPORT_FILE, + }, +) +def check_author_referenced(ctx: ConnectorContext) -> list[CheckFinding]: + """Check that created_by_ref or author= is used to attach author to entities.""" + sources = ctx.python_sources + + if not sources: + return [no_python_sources_finding()] + + # Dependency: an author must be defined first (VC301) before it can be referenced. + # If no author definition exists, we fail with a clear message pointing to VC301. + author_hits = find_author_definitions(sources, ctx.python_trees) + if not author_hits: + return [ + CheckFinding( + message="No author defined — cannot reference author on entities", + severity=Severity.ERROR, + suggestion="Define an author first (see VC301), then use created_by_ref= on STIX objects", + ), + ] + + # Author exists — now check if it's actually referenced on STIX entities (AST-based) + trees = ctx.python_trees + ref_hits = _find_author_references(trees) + + if ref_hits: + file_path, line, _kwarg = ref_hits[0] + return [ + CheckFinding( + message=f"Author referenced on entities ({len(ref_hits)} occurrence(s) found)", + severity=Severity.INFO, + file_path=file_path, + line=line, + ), + ] + + return [ + CheckFinding( + message="Author is defined but never referenced on STIX entities", + severity=Severity.ERROR, + suggestion=( + "Use created_by_ref=self.author.id on SDOs, " + "or x_opencti_created_by_ref in custom_properties for observables, " + "or author= parameter when using connectors-sdk models" + ), + ), + ] diff --git a/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc303_connector_type.py b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc303_connector_type.py new file mode 100644 index 00000000000..5f409d0461e --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc303_connector_type.py @@ -0,0 +1,394 @@ +"""VC303 — CONNECTOR_TYPE must be defined in application code, not read from env.""" + +import ast +from dataclasses import dataclass +from pathlib import Path +from typing import cast + +from connector_linter.models import ( + CheckFinding, + ConnectorContext, + ConnectorType, + Severity, + no_python_sources_finding, +) +from connector_linter.registry import CheckRegistry + +# --------------------------------------------------------------------------- +# Valid connector type strings — derived from ConnectorType enum so this set +# stays automatically in sync when new types are added. +# --------------------------------------------------------------------------- +_CONNECTOR_TYPES = frozenset(t.value for t in ConnectorType) + +# --------------------------------------------------------------------------- +# connectors-sdk base config classes — each one hardcodes a connector type, +# so inheriting from one is the preferred way to set the type. +# --------------------------------------------------------------------------- +_SDK_BASE_CONFIG_CLASSES = { + "BaseExternalImportConnectorConfig", + "BaseInternalEnrichmentConnectorConfig", + "BaseStreamConnectorConfig", + "BaseInternalExportFileConnectorConfig", + "BaseInternalImportFileConnectorConfig", +} + + +@dataclass +class _Hit: + file_path: Path + line: int + + +@CheckRegistry.register( + code="VC303", + name="connector-type-hardcoded", + description="CONNECTOR_TYPE must be defined in application code, not read from env", + severity=Severity.ERROR, +) +def check_connector_type_hardcoded(ctx: ConnectorContext) -> list[CheckFinding]: + """Check that the connector type is hardcoded in the application, not read from env.""" + sources = ctx.python_sources + + if not sources: + return [no_python_sources_finding()] + + trees = ctx.python_trees + if not trees: + return [ + CheckFinding( + message="No parseable Python source files found in src/", + severity=Severity.ERROR, + suggestion="Fix syntax errors in source files under src/", + ), + ] + + # --------------------------------------------------------------------------- + # 4-way detection: scan AST for each pattern in priority order. + # + # env_hit — ANTI-PATTERN: reading CONNECTOR_TYPE from env/config + # sdk_hit — PREFERRED: inheriting from SDK Base*ConnectorConfig + # hardcoded_hit — LEGACY OK: config["connector"]["type"] = "EXTERNAL_IMPORT" + # pydantic_hit — CUSTOM OK: type: Literal["EXTERNAL_IMPORT"] or Field(...) + # --------------------------------------------------------------------------- + env_hit: _Hit | None = None + sdk_hit: _Hit | None = None + hardcoded_hit: _Hit | None = None + pydantic_hit: _Hit | None = None + + for file_path, tree in trees.items(): + for node in ast.walk(tree): + # Anti-pattern: reading CONNECTOR_TYPE from environment + # (e.g. os.environ["CONNECTOR_TYPE"], get_config_variable(...)) + if env_hit is None and _reads_connector_type_from_env(node): + node = cast("ast.Call | ast.Subscript", node) + env_hit = _Hit(file_path=file_path, line=node.lineno) + + # Preferred: SDK base config class (inherits type automatically) + if ( + sdk_hit is None + and isinstance(node, ast.ClassDef) + and any( + _base_name(base) in _SDK_BASE_CONFIG_CLASSES for base in node.bases + ) + ): + sdk_hit = _Hit(file_path=file_path, line=node.lineno) + + # Legacy pycti-style: config["connector"]["type"] = "EXTERNAL_IMPORT" + # or dict literal: {"connector": {"type": "EXTERNAL_IMPORT"}} + if hardcoded_hit is None and isinstance(node, ast.Assign): + if any(_is_connector_type_target(t) for t in node.targets): + if _is_connector_type_value(node.value): + hardcoded_hit = _Hit(file_path=file_path, line=node.lineno) + + if hardcoded_hit is None and isinstance(node, ast.Dict): + hit_line = _find_type_in_connector_dict(node) + if hit_line is not None: + hardcoded_hit = _Hit(file_path=file_path, line=hit_line) + + # Custom Pydantic: type: Literal["EXTERNAL_IMPORT"] or Field(default=...) + if pydantic_hit is None and isinstance(node, ast.AnnAssign): + if isinstance(node.target, ast.Name) and node.target.id == "type": + if _is_literal_type_annotation( + node.annotation, + ) or _is_field_default( + node.value, + ): + pydantic_hit = _Hit(file_path=file_path, line=node.lineno) + + # --------------------------------------------------------------------------- + # Priority order for results: + # 1. env_hit → FAIL (anti-pattern, checked first because it overrides all) + # 2. sdk_hit → PASS (best practice) + # 3. hardcoded_hit → PASS (legacy but acceptable) + # 4. pydantic_hit → PASS (custom but acceptable) + # 5. nothing → FAIL + # --------------------------------------------------------------------------- + if env_hit: + file_path, line = env_hit.file_path, env_hit.line + return [ + CheckFinding( + message="CONNECTOR_TYPE is read from environment", + severity=Severity.ERROR, + file_path=file_path, + line=line, + suggestion=( + "Hardcode the connector type instead of reading from env. " + "Use connectors-sdk (e.g. BaseExternalImportConnectorConfig) " + 'or set config["connector"]["type"] = "EXTERNAL_IMPORT" directly' + ), + ), + ] + + # SDK-based approach (inherits from Base*ConnectorConfig) + if sdk_hit: + file_path, line = sdk_hit.file_path, sdk_hit.line + return [ + CheckFinding( + message="Connector type defined via connectors-sdk", + severity=Severity.INFO, + file_path=file_path, + line=line, + ), + ] + + # pycti-style hardcoded assignment + if hardcoded_hit: + file_path, line = hardcoded_hit.file_path, hardcoded_hit.line + return [ + CheckFinding( + message="Connector type hardcoded", + severity=Severity.WARNING, + suggestion="Consider using connectors-sdk base config classes to set the connector type via inheritance.", + file_path=file_path, + line=line, + ), + ] + + # Custom Pydantic Literal or Field default + if pydantic_hit: + file_path, line = pydantic_hit.file_path, pydantic_hit.line + return [ + CheckFinding( + message="Connector type hardcoded via Pydantic field", + severity=Severity.WARNING, + suggestion="Consider using connectors-sdk base config classes to set the connector type via inheritance.", + file_path=file_path, + line=line, + ), + ] + + # No type definition found at all + return [ + CheckFinding( + message="No CONNECTOR_TYPE definition found in application code", + severity=Severity.ERROR, + suggestion=( + "Hardcode the connector type in code. " + "Best: use connectors-sdk (e.g. BaseExternalImportConnectorConfig). " + 'Or: set config["connector"]["type"] = "EXTERNAL_IMPORT" in main.py' + ), + ), + ] + + +def _base_name(base: ast.expr) -> str: + """Extract the unqualified class name from a base class expression. + + Handles both direct references (Name) and qualified (Attribute): + BaseSettings → "BaseSettings" + connectors_sdk.BaseXxx → "BaseXxx" + """ + if isinstance(base, ast.Name): + return base.id + if isinstance(base, ast.Attribute): + return base.attr + return "" + + +def _constant_str(node: ast.expr | None) -> str | None: + """Extract a string constant from an AST node, or None if not a string literal.""" + if isinstance(node, ast.Constant) and isinstance(node.value, str): + return node.value + return None + + +def _subscript_key(node: ast.Subscript) -> str | None: + """Extract the string key from a subscript expression like d["key"].""" + slice_node = node.slice + if isinstance(slice_node, ast.Constant) and isinstance(slice_node.value, str): + return slice_node.value + return None + + +def _is_connector_type_target(node: ast.expr) -> bool: + """Check if node is the assignment target config["connector"]["type"]. + + Matches the nested subscript pattern: outer["type"] on inner["connector"]. + """ + if not isinstance(node, ast.Subscript): + return False + if _subscript_key(node) != "type": + return False + inner = node.value + return isinstance(inner, ast.Subscript) and _subscript_key(inner) == "connector" + + +def _is_connector_type_value(node: ast.expr) -> bool: + """Check if node is a string literal matching a valid connector type.""" + value = _constant_str(node) + return value in _CONNECTOR_TYPES if value else False + + +def _find_type_in_connector_dict(node: ast.Dict) -> int | None: + """Find ``"type": "EXTERNAL_IMPORT"`` inside a ``"connector"`` dict literal. + + Matches the pattern:: + + { + "connector": { + "type": "EXTERNAL_IMPORT", # ← returns this line + } + } + + Returns the line number of the ``"type"`` key, or None if not found. + """ + for key, value in zip(node.keys, node.values): + if _constant_str(key) == "connector" and isinstance(value, ast.Dict): + for inner_key, inner_value in zip(value.keys, value.values): + if _constant_str(inner_key) == "type" and _is_connector_type_value( + inner_value + ): + return getattr(inner_key, "lineno", node.lineno) + return None + + +def _is_literal_type_annotation(node: ast.expr) -> bool: + """Check if node is a Literal type annotation containing a valid connector type. + + Matches: + Literal["EXTERNAL_IMPORT"] → single-value Literal + Literal["EXTERNAL_IMPORT", ...] → multi-value Literal (tuple slice) + """ + if not isinstance(node, ast.Subscript): + return False + if not isinstance(node.value, ast.Name) or node.value.id != "Literal": + return False + + slice_node = node.slice + # Single-value Literal: Literal["EXTERNAL_IMPORT"] + if isinstance(slice_node, ast.Constant): + return ( + isinstance(slice_node.value, str) and slice_node.value in _CONNECTOR_TYPES + ) + # Multi-value Literal: Literal["EXTERNAL_IMPORT", "STREAM"] + if isinstance(slice_node, ast.Tuple): + for elt in slice_node.elts: + if isinstance(elt, ast.Constant) and isinstance(elt.value, str): + if elt.value in _CONNECTOR_TYPES: + return True + return False + + +def _is_field_default(node: ast.expr | None) -> bool: + """Check if node is a Pydantic Field() with a valid connector type as default. + + Matches: + Field(default="EXTERNAL_IMPORT") → keyword default + Field("EXTERNAL_IMPORT") → positional default + """ + if not isinstance(node, ast.Call): + return False + func_name = "" + if isinstance(node.func, ast.Name): + func_name = node.func.id + elif isinstance(node.func, ast.Attribute): + func_name = node.func.attr + if func_name != "Field": + return False + + # Check keyword: Field(default="EXTERNAL_IMPORT") + for kw in node.keywords: + if kw.arg == "default" and _is_connector_type_value(kw.value): + return True + # Check positional: Field("EXTERNAL_IMPORT") + return bool(node.args) and _is_connector_type_value(node.args[0]) + + +def _is_call_with_connector_type_arg(node: ast.Call, names: set[str]) -> bool: + """Check if a function call (by name) has "CONNECTOR_TYPE" as first argument. + + Matches both bare calls (``getenv(...)``) and qualified calls + (``self.helper.get_config_variable(...)``). + """ + func_name = "" + if isinstance(node.func, ast.Name): + func_name = node.func.id + elif isinstance(node.func, ast.Attribute): + func_name = node.func.attr + if func_name not in names or not node.args: + return False + return _constant_str(node.args[0]) == "CONNECTOR_TYPE" + + +def _reads_connector_type_from_env(node: ast.AST) -> bool: + """Detect if an AST node reads CONNECTOR_TYPE from the environment. + + Covers multiple patterns: + - os.environ["CONNECTOR_TYPE"] (Subscript on Attribute) + - environ["CONNECTOR_TYPE"] (Subscript on Name) + - get_config_variable("CONNECTOR_TYPE") (pycti helper) + - getenv("CONNECTOR_TYPE") (bare or os.getenv) + - os.environ.get("CONNECTOR_TYPE") (dict .get() method) + """ + # --- Subscript patterns: environ["CONNECTOR_TYPE"] --- + if isinstance(node, ast.Subscript): + key = _subscript_key(node) + if key != "CONNECTOR_TYPE": + return False + # os.environ["CONNECTOR_TYPE"] + if isinstance(node.value, ast.Attribute): + return ( + isinstance(node.value.value, ast.Name) + and node.value.value.id == "os" + and node.value.attr == "environ" + ) + # environ["CONNECTOR_TYPE"] + return isinstance(node.value, ast.Name) and node.value.id == "environ" + + # --- Call patterns: function calls that read from env --- + if isinstance(node, ast.Call): + # Bare function calls: get_config_variable("CONNECTOR_TYPE") + # or getenv("CONNECTOR_TYPE") (from os import getenv) + if isinstance(node.func, ast.Name) and _is_call_with_connector_type_arg( + node, {"get_config_variable", "getenv"} + ): + return True + # Qualified method calls: self.helper.get_config_variable("CONNECTOR_TYPE") + # (but NOT arbitrary .getenv — that's handled separately for os.getenv only) + if isinstance(node.func, ast.Attribute) and _is_call_with_connector_type_arg( + node, {"get_config_variable"} + ): + return True + if isinstance(node.func, ast.Attribute): + # os.getenv("CONNECTOR_TYPE") — verify receiver is `os` + if ( + node.func.attr == "getenv" + and isinstance(node.func.value, ast.Name) + and node.func.value.id == "os" + and node.args + ): + if _constant_str(node.args[0]) == "CONNECTOR_TYPE": + return True + # os.environ.get("CONNECTOR_TYPE") + if node.func.attr == "get" and node.args: + if _constant_str(node.args[0]) != "CONNECTOR_TYPE": + return False + receiver = node.func.value + if isinstance(receiver, ast.Attribute): + return ( + isinstance(receiver.value, ast.Name) + and receiver.value.id == "os" + and receiver.attr == "environ" + ) + return isinstance(receiver, ast.Name) and receiver.id == "environ" + return False diff --git a/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc304_markings_checked.py b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc304_markings_checked.py new file mode 100644 index 00000000000..5f52aed4832 --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc304_markings_checked.py @@ -0,0 +1,133 @@ +"""VC304 — Ensure TLP markings are checked before processing entities. + +Uses AST to detect ``check_max_tlp()`` calls (avoids false positives +from comments/docstrings mentioning check_max_tlp). + +Scope: INTERNAL_ENRICHMENT only — enrichment connectors receive external +entities and must verify TLP markings before processing them. Other +connector types produce their own entities and set TLP themselves. +""" + +import ast +from pathlib import Path + +from connector_linter.models import ( + CheckFinding, + ConnectorContext, + ConnectorType, + Severity, + no_python_sources_finding, +) +from connector_linter.registry import CheckRegistry + + +def _find_check_max_tlp_calls( + trees: dict[Path, ast.Module], +) -> list[tuple[Path, int]]: + """Find check_max_tlp() calls via AST. + + Matches two call patterns: + 1. self.helper.check_max_tlp(...) — Attribute node (method call) + 2. check_max_tlp(...) — Name node (bare function call) + """ + hits: list[tuple[Path, int]] = [] + for file_path, tree in trees.items(): + for node in ast.walk(tree): + if not isinstance(node, ast.Call): + continue + func = node.func + if (isinstance(func, ast.Attribute) and func.attr == "check_max_tlp") or ( + isinstance(func, ast.Name) and func.id == "check_max_tlp" + ): + hits.append((file_path, node.lineno)) + return hits + + +def _find_object_marking_access( + trees: dict[Path, ast.Module], +) -> list[tuple[Path, int]]: + """Find objectMarking accesses via AST (string constants or attributes). + + Checks two AST node types because "objectMarking" can appear as: + - Constant: entity["objectMarking"] (dict key string literal) + - Attribute: entity.objectMarking (attribute access) + """ + hits: list[tuple[Path, int]] = [] + for file_path, tree in trees.items(): + for node in ast.walk(tree): + if (isinstance(node, ast.Constant) and node.value == "objectMarking") or ( + isinstance(node, ast.Attribute) and node.attr == "objectMarking" + ): + hits.append((file_path, node.lineno)) + return hits + + +@CheckRegistry.register( + code="VC304", + name="markings-checked", + description="Ensure TLP markings are checked before processing entities", + severity=Severity.ERROR, + applicable_types={ConnectorType.INTERNAL_ENRICHMENT}, +) +def check_markings_checked(ctx: ConnectorContext) -> list[CheckFinding]: + """Check that the connector verifies TLP markings via check_max_tlp.""" + sources = ctx.python_sources + + if not sources: + return [no_python_sources_finding()] + + trees = ctx.python_trees + + # --------------------------------------------------------------------------- + # 3-tier detection: + # 1. check_max_tlp() call found → PASS (best: proper TLP validation) + # 2. objectMarking access found → FAIL (TLP extracted but not validated) + # 3. Nothing found → FAIL (no TLP handling at all) + # --------------------------------------------------------------------------- + + # Tier 1: check for check_max_tlp call (AST-based) + tlp_check_hits = _find_check_max_tlp_calls(trees) + + if tlp_check_hits: + file_path, line = tlp_check_hits[0] + return [ + CheckFinding( + message="check_max_tlp() found", + severity=Severity.INFO, + file_path=file_path, + line=line, + ), + ] + + # Tier 2: check_max_tlp not found — check if there's at least TLP extraction + extract_hits = _find_object_marking_access(trees) + + if extract_hits: + file_path, line = extract_hits[0] + return [ + CheckFinding( + message=( + f"TLP extraction found in {file_path}:{line} " + "but check_max_tlp is not called" + ), + severity=Severity.ERROR, + file_path=file_path, + line=line, + suggestion=( + "Add self.helper.check_max_tlp(self.tlp, self.config.max_tlp) " + "to validate TLP before processing the entity" + ), + ), + ] + + return [ + CheckFinding( + message="No TLP marking check found in connector source", + severity=Severity.ERROR, + suggestion=( + 'Implement TLP checking: extract TLP from opencti_entity["objectMarking"], ' + "then call self.helper.check_max_tlp(entity_tlp, max_tlp) " + "and reject processing if it returns False" + ), + ), + ] diff --git a/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc305_sdk_base_settings.py b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc305_sdk_base_settings.py new file mode 100644 index 00000000000..13370b4090a --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc305_sdk_base_settings.py @@ -0,0 +1,156 @@ +"""VC305 — Connector must implement Base Settings from connectors-sdk.""" + +import re + +from connector_linter.checks.vc3xx_code._helpers import ( + find_classes, + find_imports, + find_pattern_locations, +) +from connector_linter.models import ( + CheckFinding, + ConnectorContext, + Severity, + no_python_sources_finding, +) +from connector_linter.registry import CheckRegistry + +# --------------------------------------------------------------------------- +# Legacy anti-pattern: get_config_variable() from pycti. +# +# This is the old-style configuration loading that manually reads each env +# variable via pycti's get_config_variable(). Should be replaced with +# connectors-sdk's typed Pydantic settings. +# --------------------------------------------------------------------------- +_LEGACY_CONFIG_PATTERNS = [ + re.compile(r"""get_config_variable\s*\(""", re.MULTILINE), +] + + +@CheckRegistry.register( + code="VC305", + name="sdk-base-settings", + description="Connector must implement Base Settings from connectors-sdk", + severity=Severity.ERROR, +) +def check_sdk_base_settings(ctx: ConnectorContext) -> list[CheckFinding]: + """Check that the connector uses BaseConnectorSettings from connectors-sdk.""" + sources = ctx.python_sources + + if not sources: + return [no_python_sources_finding()] + + trees = ctx.python_trees + + # --------------------------------------------------------------------------- + # 4-tier detection (best → worst): + # + # 1. SDK import + class inheriting BaseConnectorSettings → PASS (best) + # 2. Legacy get_config_variable() calls → FAIL (worst, must migrate) + # 3. Custom pydantic_settings.BaseSettings → PASS with WARNING + # 4. Nothing found → FAIL + # + # Note: SDK import AND class are both required — importing without + # defining a subclass means the migration is incomplete. + # --------------------------------------------------------------------------- + + # Tier 1: check for connectors-sdk BaseConnectorSettings (import + class) + sdk_imports = find_imports( + trees, + module_pattern=r"^connectors_sdk", + name_pattern=r"^BaseConnectorSettings$", + ) + sdk_classes = find_classes(trees, base_name="BaseConnectorSettings") + + # Both import AND class must exist — import alone = incomplete migration + if sdk_imports and sdk_classes: + cls = sdk_classes[0] + return [ + CheckFinding( + message="BaseConnectorSettings implemented", + severity=Severity.INFO, + file_path=cls.file_path, + line=cls.line, + ), + ] + + # Tier 2: check for legacy get_config_variable (regex — AST not needed here) + legacy_hits = find_pattern_locations(sources, _LEGACY_CONFIG_PATTERNS) + if legacy_hits: + file_path, line, _ = legacy_hits[0] + return [ + CheckFinding( + message=( + f"Legacy get_config_variable() found in {file_path}:{line} " + f"({len(legacy_hits)} call(s) total)" + ), + severity=Severity.ERROR, + file_path=file_path, + line=line, + suggestion=( + "Replace get_config_variable() calls with connectors-sdk " + "BaseConnectorSettings. Create a settings.py with a class " + "inheriting BaseConnectorSettings and use typed Pydantic fields " + "for configuration (see connectors-sdk documentation)" + ), + ), + ] + + # Tier 3: check for custom pydantic_settings.BaseSettings (intermediate) + # This is acceptable but not ideal — connectors-sdk provides more features + pydantic_imports = find_imports( + trees, + module_pattern=r"^pydantic_settings$", + name_pattern=r"^BaseSettings$", + ) + if pydantic_imports: + pydantic_classes = find_classes(trees, base_name="BaseSettings") + if pydantic_classes: + cls = pydantic_classes[0] + return [ + CheckFinding( + message=( + f"Custom pydantic BaseSettings found in {cls.file_path}:{cls.line} " + "instead of connectors-sdk BaseConnectorSettings" + ), + severity=Severity.WARNING, + file_path=cls.file_path, + line=cls.line, + suggestion=( + "Consider migrating to connectors-sdk BaseConnectorSettings " + "which provides built-in config loading (env, YAML, .env), " + "deprecation management, and JSON schema generation" + ), + ), + ] + imp = pydantic_imports[0] + return [ + CheckFinding( + message=( + f"Custom pydantic BaseSettings imported in {imp.file_path}:{imp.line} " + "instead of connectors-sdk BaseConnectorSettings" + ), + severity=Severity.WARNING, + file_path=imp.file_path, + line=imp.line, + suggestion=( + "Consider migrating to connectors-sdk BaseConnectorSettings " + "which provides built-in config loading (env, YAML, .env), " + "deprecation management, and JSON schema generation" + ), + ), + ] + + # No settings pattern found at all + return [ + CheckFinding( + message="No settings implementation found in connector source", + severity=Severity.ERROR, + suggestion=( + "Create a settings.py file with a class inheriting from " + "connectors_sdk.BaseConnectorSettings. Use the appropriate " + "typed connector config (e.g. BaseExternalImportConnectorConfig) " + "and define connector-specific settings with BaseConfigModel" + ), + ), + ] diff --git a/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc306_log_level_default.py b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc306_log_level_default.py new file mode 100644 index 00000000000..bbd032a847c --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc306_log_level_default.py @@ -0,0 +1,112 @@ +"""VC306 — Connector log level should default to 'error'. + +Severity: WARNING — default log level is a best practice, not a hard +requirement. Connectors that default to debug/info produce excessive +logging in production but still function correctly. +""" + +from connector_linter.checks.vc3xx_code._helpers import ( + find_field_defaults, + find_imports, +) +from connector_linter.models import ( + CheckFinding, + ConnectorContext, + Severity, + no_python_sources_finding, +) +from connector_linter.registry import CheckRegistry + +# --------------------------------------------------------------------------- +# Accepted values for the "error" log level. +# Both "error" and "err" are valid — some logging frameworks use the short form. +# --------------------------------------------------------------------------- +_ERROR_VALUES = "error" + + +@CheckRegistry.register( + code="VC306", + name="log-level-default-error", + description="Connector log level should default to 'error'", + severity=Severity.WARNING, +) +def check_log_level_default(ctx: ConnectorContext) -> list[CheckFinding]: + """Check that the connector's default log level is 'error'.""" + sources = ctx.python_sources + + if not sources: + return [no_python_sources_finding()] + + trees = ctx.python_trees + + # --------------------------------------------------------------------------- + # 3 detection paths: + # + # 1. Explicit field default — log_level found in a class body with a default + # value. Check if the value is "error"/"err". + # 2. SDK base config — connector inherits from Base*ConnectorConfig which + # already defaults log_level to "error" (no override needed). + # 3. Nothing found — no log_level config at all (PASS with suggestion). + # --------------------------------------------------------------------------- + + # Path 1: look for explicit log_level field default in any class + field_defaults = find_field_defaults(trees, field_name="log_level") + + if field_defaults: + fd = field_defaults[0] + if fd.default_value and fd.default_value == _ERROR_VALUES: + return [ + CheckFinding( + message=f"Log level defaults to '{fd.default_value}'", + severity=Severity.INFO, + file_path=fd.file_path, + line=fd.line, + ), + ] + display_val = fd.default_value or "unknown" + return [ + CheckFinding( + message=( + f"Log level defaults to '{display_val}' in {fd.file_path}:{fd.line} " + "(should be 'error')" + ), + severity=Severity.WARNING, + file_path=fd.file_path, + line=fd.line, + suggestion=( + "Set the default log level to 'error'. " + "DEBUG logs are useful but should require explicit opt-in. " + "Use connectors-sdk BaseConnectorSettings which defaults to 'error'" + ), + ), + ] + + # Path 2: no explicit log_level override — check if using SDK base + # (inherits "error" as default, so no override is needed) + sdk_imports = find_imports( + trees, + module_pattern=r"^connectors_sdk", + name_pattern=r"^Base(ExternalImport|InternalEnrichment|Stream|InternalExportFile|InternalImportFile)ConnectorConfig$", + ) + if sdk_imports: + imp = sdk_imports[0] + return [ + CheckFinding( + message="Log level inherited from SDK (defaults to 'error')", + severity=Severity.INFO, + file_path=imp.file_path, + line=imp.line, + ), + ] + + # Path 3: no log_level configuration found at all + return [ + CheckFinding( + message="No log_level default configuration found", + severity=Severity.WARNING, + suggestion=( + "Use connectors-sdk BaseConnectorSettings which defaults log_level to 'error'. " + "If using custom config, set log_level default to 'error'" + ), + ), + ] diff --git a/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc307_except_logging.py b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc307_except_logging.py new file mode 100644 index 00000000000..86c0247b359 --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc307_except_logging.py @@ -0,0 +1,109 @@ +"""VC307 — Except blocks should use error/warning logging, not debug/info.""" + +from connector_linter.checks.vc3xx_code._helpers import ( + find_calls_in_stmts, + find_except_blocks, +) +from connector_linter.models import ( + CheckFinding, + ConnectorContext, + Severity, + no_python_sources_finding, +) +from connector_linter.registry import CheckRegistry + +# --------------------------------------------------------------------------- +# Logging level separation: +# +# LOW_LEVEL_METHODS — debug/info: informational, not appropriate as the +# ONLY log in an except block (errors should be loud) +# HIGH_LEVEL_METHODS — error/warning/critical/exception: appropriate for +# except blocks (signal something went wrong) +# +# Having debug/info as supplementary logs alongside error/warning is OK — +# only flag when debug/info is the ONLY logging in the except block. +# --------------------------------------------------------------------------- +_LOW_LEVEL_METHODS = {"debug", "info"} +_HIGH_LEVEL_METHODS = {"error", "warning", "warn", "critical", "exception"} + +# --------------------------------------------------------------------------- +# Exception types exempt from the rule: +# +# KeyboardInterrupt and SystemExit are used for graceful shutdown (CTRL+C, +# sys.exit). Logging them at debug/info is appropriate since they're expected +# control flow, not errors. +# --------------------------------------------------------------------------- +_EXEMPT_EXCEPTIONS = {"KeyboardInterrupt", "SystemExit"} + + +@CheckRegistry.register( + code="VC307", + name="except-logging-level", + description="Except blocks should use error/warning logging, not debug/info", + severity=Severity.WARNING, +) +def check_except_logging_level(ctx: ConnectorContext) -> list[CheckFinding]: + """Check that except blocks use error/warning level logging.""" + sources = ctx.python_sources + + if not sources: + return [no_python_sources_finding()] + + trees = ctx.python_trees + except_blocks = find_except_blocks(trees) + + issues: list[CheckFinding] = [] + + for block in except_blocks: + # Skip exempt exceptions (KeyboardInterrupt, SystemExit) + if block.exception_types and set(block.exception_types).issubset( + _EXEMPT_EXCEPTIONS, + ): + continue + + # Find all logging calls in the except body (scoped to this block only) + all_log_methods = _LOW_LEVEL_METHODS | _HIGH_LEVEL_METHODS + log_calls = find_calls_in_stmts( + block.body, + func_names=all_log_methods, + file_path=block.file_path, + ) + + if not log_calls: + # No logging at all in this except block — separate concern, + # not flagged by this check (could be a different rule) + continue + + has_high = any(c.func_name in _HIGH_LEVEL_METHODS for c in log_calls) + low_calls = [c for c in log_calls if c.func_name in _LOW_LEVEL_METHODS] + + # Only flag when debug/info is the ONLY log level used in the block. + # If error/warning is also present, the debug/info is supplementary and OK. + if low_calls and not has_high: + call = low_calls[0] + issues.append( + CheckFinding( + message=( + f"Except block at {block.file_path}:{block.line} uses " + f"only {call.func_name}() logging (line {call.line})" + ), + severity=Severity.WARNING, + file_path=block.file_path, + line=block.line, + suggestion=( + "Use logger.error() or logger.warning() in except blocks. " + "debug/info can be used as supplementary logs alongside " + "error/warning, but should not be the only log level" + ), + ), + ) + + if not issues: + return [ + CheckFinding( + message="All except blocks use appropriate logging levels", + severity=Severity.INFO, + ), + ] + + return issues diff --git a/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc308_main_traceback.py b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc308_main_traceback.py new file mode 100644 index 00000000000..831f0c17356 --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc308_main_traceback.py @@ -0,0 +1,219 @@ +"""VC308 — Use a traceback in the main entry point.""" + +import ast +from pathlib import Path + +from connector_linter.checks.vc3xx_code._helpers import ( + find_calls_in_stmts, +) +from connector_linter.models import ( + CheckFinding, + ConnectorContext, + Severity, + no_python_sources_finding, +) +from connector_linter.registry import CheckRegistry + + +def _check_main_structure( + source: str, + file_path: Path, +) -> tuple[bool, bool, bool, int | None]: + """Analyze the main.py structure. + + Returns a 4-value tuple: + has_traceback_import — `import traceback` or `from traceback import ...` found + has_main_guard — `if __name__ == "__main__":` guard found + has_try_traceback — try/except with traceback.print_exc() inside main guard + main_guard_line — line number of the main guard (for reporting) + """ + try: + tree = ast.parse(source, filename=str(file_path)) + except SyntaxError: + return False, False, False, None + + has_traceback_import = False + has_main_guard = False + has_try_traceback = False + main_guard_line: int | None = None + + for node in ast.walk(tree): + # Check for `import traceback` + if isinstance(node, ast.Import): + for alias in node.names: + if alias.name == "traceback": + has_traceback_import = True + + # Check for `from traceback import ...` + if isinstance(node, ast.ImportFrom) and node.module == "traceback": + has_traceback_import = True + + # Find `if __name__ == "__main__":` at module level + for node in tree.body: + if not isinstance(node, ast.If): + continue + if _is_main_guard(node): + has_main_guard = True + main_guard_line = node.lineno + # Check body for try/except with traceback.print_exc() + has_try_traceback = _has_try_with_traceback(node.body, file_path) + break + + return has_traceback_import, has_main_guard, has_try_traceback, main_guard_line + + +def _is_main_guard(node: ast.If) -> bool: + """Check if an If node is `if __name__ == "__main__":`. + + Handles both comparison orders: + __name__ == "__main__" (standard) + "__main__" == __name__ (reversed, less common but valid) + """ + test = node.test + if isinstance(test, ast.Compare) and len(test.ops) == 1: + if isinstance(test.ops[0], ast.Eq): + left = test.left + comparator = test.comparators[0] + # __name__ == "__main__" or "__main__" == __name__ + if ( + isinstance(left, ast.Name) + and left.id == "__name__" + and isinstance(comparator, ast.Constant) + and comparator.value == "__main__" + ): + return True + if ( + isinstance(left, ast.Constant) + and left.value == "__main__" + and isinstance(comparator, ast.Name) + and comparator.id == "__name__" + ): + return True + return False + + +def _has_try_with_traceback(stmts: list[ast.stmt], file_path: Path) -> bool: + """Check if statements contain a try/except with traceback.print_exc(). + + Uses a recursive search strategy to handle multiple code patterns: + 1. Direct try/except in the main guard body + 2. Try/except inside a function defined in the main guard + (e.g. some connectors wrap logic in a main() function) + 3. Fallback: ast.walk over all nested nodes to catch any other nesting + """ + for stmt in stmts: + # Pattern 1: direct try in the main guard body + if isinstance(stmt, ast.Try): + if _except_has_traceback(stmt.handlers, file_path): + return True + # Pattern 2: function def called from main guard (e.g. def main(): try: ...) + if isinstance(stmt, ast.FunctionDef): + for inner in stmt.body: + if isinstance(inner, ast.Try): + if _except_has_traceback(inner.handlers, file_path): + return True + # Pattern 3: walk all nested nodes as fallback + for node in ast.walk(stmt): + if isinstance(node, ast.Try): + if _except_has_traceback(node.handlers, file_path): + return True + return False + + +def _except_has_traceback(handlers: list[ast.ExceptHandler], file_path: Path) -> bool: + """Check if any except handler calls traceback.print_exc(). + + Verifies the receiver contains "traceback" to distinguish from unrelated + print_exc-like functions. Also accepts bare print_exc() calls (valid when + `from traceback import print_exc` is used). + """ + for handler in handlers: + calls = find_calls_in_stmts( + handler.body, + func_names={"print_exc"}, + file_path=file_path, + ) + for call in calls: + # Check receiver for "traceback" module (e.g. traceback.print_exc()) + if call.receiver and "traceback" in call.receiver: + return True + # Bare print_exc() — valid if `from traceback import print_exc` + if call.receiver is None: + return True + return False + + +@CheckRegistry.register( + code="VC308", + name="main-traceback", + description="Main entry point must use traceback for error handling", + severity=Severity.ERROR, +) +def check_main_traceback(ctx: ConnectorContext) -> list[CheckFinding]: + """Check that main.py uses if __name__ guard with try/except and traceback.""" + sources = ctx.python_sources + + if not sources: + return [no_python_sources_finding()] + + # Find main.py + main_file = None + main_content = None + for file_path, content in sources.items(): + if file_path.name == "main.py": + main_file = file_path + main_content = content + break + + if main_file is None or main_content is None: + return [ + CheckFinding( + message="No main.py found in src/", + severity=Severity.ERROR, + suggestion="Connector must have a main.py entry point under src/", + ), + ] + + has_import, has_guard, has_try_tb, guard_line = _check_main_structure( + main_content, + main_file, + ) + + # Accumulate all issues found — multiple problems may coexist + issues: list[str] = [] + if not has_import: + issues.append("missing `import traceback`") + if not has_guard: + issues.append('missing `if __name__ == "__main__":` guard') + if has_guard and not has_try_tb: + issues.append("missing `try/except` with `traceback.print_exc()` in main guard") + + if not issues: + return [ + CheckFinding( + message=f"Main entry point has proper error handling in {main_file}", + severity=Severity.INFO, + file_path=main_file, + line=guard_line, + ), + ] + + return [ + CheckFinding( + message=f"Main entry point issues in {main_file}: {'; '.join(issues)}", + severity=Severity.ERROR, + file_path=main_file, + line=guard_line or 1, + suggestion=( + "Use this pattern in main.py:\n" + " import traceback\n" + ' if __name__ == "__main__":\n' + " try:\n" + " connector = MyConnector()\n" + " connector.run()\n" + " except Exception:\n" + " traceback.print_exc()\n" + " exit(1)" + ), + ), + ] diff --git a/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc309_absolute_imports.py b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc309_absolute_imports.py new file mode 100644 index 00000000000..bee90052bc3 --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc309_absolute_imports.py @@ -0,0 +1,79 @@ +"""VC309 — Connector must use only absolute imports, no relative imports. + +Severity: ERROR — Docker containers run connectors as installed packages. +Relative imports (from . import X) break when the package structure doesn't +match the development layout, causing ImportError at container startup. +""" + +import ast +from typing import TYPE_CHECKING + +from connector_linter.models import ( + CheckFinding, + ConnectorContext, + Severity, + no_python_sources_finding, +) +from connector_linter.registry import CheckRegistry + +if TYPE_CHECKING: + from pathlib import Path + + +@CheckRegistry.register( + code="VC309", + name="absolute-imports-only", + description="Connector must use only absolute imports, no relative imports", + severity=Severity.ERROR, +) +def check_absolute_imports_only(ctx: ConnectorContext) -> list[CheckFinding]: + """Check that the connector uses only absolute imports (no relative from . / from ..).""" + sources = ctx.python_sources + + if not sources: + return [no_python_sources_finding()] + + trees = ctx.python_trees + + # --------------------------------------------------------------------------- + # Detect relative imports via AST. + # + # In Python's AST, ImportFrom nodes have a `level` field: + # level=0 → absolute import (from package import X) + # level=1 → relative import (from . import X) + # level=2 → parent relative (from .. import X) + # etc. + # --------------------------------------------------------------------------- + relative_imports: list[tuple[Path, int, str]] = [] + for file_path, tree in trees.items(): + for node in ast.walk(tree): + if isinstance(node, ast.ImportFrom) and node.level and node.level > 0: + # Reconstruct the import statement for display in findings + dots = "." * node.level + module = node.module or "" + names = ", ".join(alias.name for alias in node.names) + stmt = f"from {dots}{module} import {names}" + relative_imports.append((file_path, node.lineno, stmt)) + + if not relative_imports: + return [ + CheckFinding( + message="All imports are absolute", + severity=Severity.INFO, + ), + ] + + # Report all relative imports + results: list[CheckFinding] = [] + for file_path, line_no, stmt in relative_imports: + results.append( + CheckFinding( + message=f"Relative import: {stmt}", + severity=Severity.ERROR, + file_path=file_path, + line=line_no, + suggestion="Replace with an absolute import", + ), + ) + + return results diff --git a/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc310_external_references.py b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc310_external_references.py new file mode 100644 index 00000000000..369b18bc6c5 --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc310_external_references.py @@ -0,0 +1,191 @@ +"""VC310 — External references must not be added by default to all entities. + +Adding default external references to all entities can trigger enrichment +connectors and create unnecessary ingestion, potentially causing platform +timeouts. External references using ``self.external_reference(s)`` should +only appear on Identity (Organization) objects. Dynamic per-entity external +references created as local variables are not flagged by this check. +""" + +import ast +from pathlib import Path + +from connector_linter.models import ( + CheckFinding, + ConnectorContext, + Severity, + no_python_sources_finding, +) +from connector_linter.registry import CheckRegistry + +# --------------------------------------------------------------------------- +# Identity type names are EXEMPT from this check. +# +# External references on Identity/Organization objects are expected (they +# describe the connector author). Only non-Identity types are flagged. +# Matching is case-insensitive. +# --------------------------------------------------------------------------- +_IDENTITY_NAMES = {"identity", "organizationauthor"} + + +def _get_call_type_name(call_node: ast.Call) -> str | None: + """Extract the STIX type name from a Call node. + + Distinguishes two call patterns: + - ast.Attribute: stix2.Identity(...) → returns "Identity" (the attr) + - ast.Name: Identity(...) → returns "Identity" (the id) + Returns None for complex expressions (e.g. pycti.Identity.generate_id()). + """ + func = call_node.func + if isinstance(func, ast.Attribute): + # stix2.Identity(...) → attr = "Identity" + return func.attr + if isinstance(func, ast.Name): + # Identity(...) + return func.id + return None + + +def _references_self_ext_ref(node: ast.expr) -> bool: + """Check if an AST expression references self.external_reference(s). + + Detects the pattern where a connector stores its external reference as + an instance attribute and spreads it to all STIX objects. Handles: + - self.external_reference (singular) + - self.external_references (plural) + - [self.external_reference] (wrapped in a list literal) + - [self.external_references] + """ + if isinstance(node, ast.Attribute): + if ( + isinstance(node.value, ast.Name) + and node.value.id == "self" + and node.attr in ("external_reference", "external_references") + ): + return True + elif isinstance(node, ast.List): + return any(_references_self_ext_ref(elt) for elt in node.elts) + return False + + +def _check_custom_properties_dict(node: ast.expr) -> bool: + """Check if a custom_properties dict contains x_opencti_external_references + referencing self.external_reference(s). + + Detects the pattern where external references are smuggled through + custom_properties instead of the standard external_references kwarg: + custom_properties={"x_opencti_external_references": self.external_references} + """ + if not isinstance(node, ast.Dict): + return False + for key, value in zip(node.keys, node.values, strict=False): + if ( + key is not None + and isinstance(key, ast.Constant) + and key.value == "x_opencti_external_references" + and value is not None + and _references_self_ext_ref(value) + ): + return True + return False + + +def _is_identity_type(type_name: str) -> bool: + """Check if a STIX type name refers to an Identity object.""" + return type_name.lower() in _IDENTITY_NAMES + + +def _find_violations(tree: ast.Module, file_path: Path) -> list[tuple[Path, int, str]]: + """Find all calls where self.external_reference(s) is used on non-Identity objects. + + Detection flow: + 1. Walk all Call nodes in the AST + 2. Skip calls to Identity-type constructors (exempt) + 3. Check keyword arguments for: + a. external_references=self.external_reference(s) (direct kwarg) + b. custom_properties={...x_opencti_external_references: self.ext_ref...} + + Returns list of (file_path, line_no, description). + """ + violations: list[tuple[Path, int, str]] = [] + + for node in ast.walk(tree): + if not isinstance(node, ast.Call): + continue + + type_name = _get_call_type_name(node) + if type_name and _is_identity_type(type_name): + continue + + for kw in node.keywords: + if kw.arg == "external_references" and _references_self_ext_ref(kw.value): + context = f"on {type_name}()" if type_name else "in call" + violations.append( + ( + file_path, + kw.value.lineno, + f"Default external_references=self.external_reference(s) {context}", + ), + ) + + if kw.arg == "custom_properties" and _check_custom_properties_dict( + kw.value, + ): + context = f"on {type_name}()" if type_name else "in call" + violations.append( + ( + file_path, + kw.value.lineno, + f"Default x_opencti_external_references via self.external_reference(s) {context}", + ), + ) + + return violations + + +@CheckRegistry.register( + code="VC310", + name="external-references-not-default", + description=( + "External references must not be added by default to all entities; " + "only add on Identity (Organization)" + ), + severity=Severity.ERROR, +) +def check_external_references_not_default(ctx: ConnectorContext) -> list[CheckFinding]: + """Check that self.external_reference(s) is not spread to non-Identity STIX objects.""" + sources = ctx.python_sources + + if not sources: + return [no_python_sources_finding()] + + trees = ctx.python_trees + + all_violations: list[tuple[Path, int, str]] = [] + for file_path, tree in trees.items(): + all_violations.extend(_find_violations(tree, file_path)) + + if not all_violations: + return [ + CheckFinding( + message="No default external references spread to non-Identity objects", + severity=Severity.INFO, + ), + ] + + results: list[CheckFinding] = [] + for file_path, line_no, description in all_violations: + results.append( + CheckFinding( + message=f"{description}", + severity=Severity.ERROR, + file_path=file_path, + line=line_no, + suggestion=( + "Remove default external_references from non-Identity objects. " + "Only add them on Identity (Organization). See issue #4210." + ), + ), + ) + + return results diff --git a/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc311_tlp_markings.py b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc311_tlp_markings.py new file mode 100644 index 00000000000..2124dd46d2a --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc311_tlp_markings.py @@ -0,0 +1,234 @@ +"""VC311 — Connector should use TLP markings on entities. + +- Paid source (Commercial Threat Intel): should use TLP:AMBER or TLP:RED +- Free source (Open Source Threat Intel): should use TLP:CLEAR (or TLP:WHITE) + +The source type is inferred from ``connector_manifest.json`` ``use_cases`` +field, but it is not 100% reliable — hence this check is WARNING only. +""" + +import re +from pathlib import Path + +from connector_linter.checks.vc3xx_code._helpers import ( + find_pattern_locations, +) +from connector_linter.models import ( + CheckFinding, + ConnectorContext, + ConnectorType, + Severity, +) +from connector_linter.registry import CheckRegistry + +# --------------------------------------------------------------------------- +# Pattern list 1: General TLP usage patterns. +# +# Detects ANY TLP-related code — constants, marking definition refs, etc. +# Used for sub-check A (basic TLP usage detection). +# --------------------------------------------------------------------------- +_TLP_PATTERNS: list[re.Pattern[str]] = [ + re.compile(r"\bTLP_WHITE\b"), + re.compile(r"\bTLP_GREEN\b"), + re.compile(r"\bTLP_AMBER\b"), + re.compile(r"\bTLP_RED\b"), + re.compile(r"\bTLP_CLEAR\b"), + re.compile(r"\bTLPMarking\b"), + re.compile(r"\bobject_marking_refs\b"), + re.compile(r"\bTLP_MARKING_DEFINITION_MAPPING\b"), + re.compile(r"marking-definition--"), + re.compile(r"TLP:(?:WHITE|CLEAR|GREEN|AMBER|RED|AMBER\+STRICT)", re.IGNORECASE), +] + +# --------------------------------------------------------------------------- +# Pattern list 2: Paid/commercial TLP levels (TLP:AMBER, TLP:RED). +# +# These are the restrictive TLP levels appropriate for commercial threat +# intelligence sources (data that shouldn't be freely shared). +# --------------------------------------------------------------------------- +_PAID_TLP_PATTERNS: list[re.Pattern[str]] = [ + re.compile(r"\bTLP_AMBER\b"), + re.compile(r"\bTLP_RED\b"), + re.compile(r"TLP:AMBER", re.IGNORECASE), + re.compile(r"TLP:RED", re.IGNORECASE), + re.compile(r"AMBER\+STRICT", re.IGNORECASE), + re.compile(r"""['"]amber['"]""", re.IGNORECASE), + re.compile(r"""['"]red['"]""", re.IGNORECASE), + re.compile(r"""['"]amber\+strict['"]""", re.IGNORECASE), +] + +# --------------------------------------------------------------------------- +# Pattern list 3: Free/open-source TLP levels (TLP:CLEAR, TLP:WHITE). +# +# These are the permissive TLP levels appropriate for open-source threat +# intelligence sources (freely shareable data). +# --------------------------------------------------------------------------- +_FREE_TLP_PATTERNS: list[re.Pattern[str]] = [ + re.compile(r"\bTLP_WHITE\b"), + re.compile(r"\bTLP_CLEAR\b"), + re.compile(r"TLP:WHITE", re.IGNORECASE), + re.compile(r"TLP:CLEAR", re.IGNORECASE), + re.compile(r"""['"]white['"]""", re.IGNORECASE), + re.compile(r"""['"]clear['"]""", re.IGNORECASE), +] + + +def _has_tlp_usage(sources: dict[Path, str]) -> bool: + """Check if any TLP-related pattern exists in the source files. + + Uses an any-match approach: returns True as soon as any pattern matches + in any source file. Doesn't need to find all matches. + """ + for content in sources.values(): + for pattern in _TLP_PATTERNS: + if pattern.search(content): + return True + return False + + +def _detect_tlp_levels(sources: dict[Path, str]) -> tuple[bool, bool]: + """Detect which TLP levels are used in source files. + + Distinguishes paid (AMBER/RED) from free (CLEAR/WHITE) TLP levels + to determine if the level matches the connector's source type. + Both can be True if the connector uses multiple TLP levels. + + Returns (has_paid_level, has_free_level). + """ + has_paid = False + has_free = False + for content in sources.values(): + for pattern in _PAID_TLP_PATTERNS: + if pattern.search(content): + has_paid = True + for pattern in _FREE_TLP_PATTERNS: + if pattern.search(content): + has_free = True + return has_paid, has_free + + +def _get_source_type(ctx: ConnectorContext) -> str | None: + """Infer source type from connector_manifest.json use_cases. + + Uses a manifest-based heuristic: scans the use_cases list for keywords + like "commercial", "paid", "open source", "free". This is not 100% + reliable — connectors may not declare use_cases, or the wording may + not match. Returns None when undetermined. + + Returns "commercial", "open_source", or None if undetermined. + """ + manifest = ctx.manifest + if not manifest: + return None + + use_cases = manifest.get("use_cases", []) + if not isinstance(use_cases, list): + return None + + for uc in use_cases: + if not isinstance(uc, str): + continue + lower = uc.lower() + if "commercial" in lower or "paid" in lower: + return "commercial" + if "open source" in lower or "free" in lower: + return "open_source" + + return None + + +@CheckRegistry.register( + code="VC311", + name="tlp-markings-on-entities", + description="Connector should use TLP markings on entities with appropriate level", + severity=Severity.WARNING, + applicable_types={ + ConnectorType.INTERNAL_ENRICHMENT, + ConnectorType.EXTERNAL_IMPORT, + }, +) +def check_tlp_markings(ctx: ConnectorContext) -> list[CheckFinding]: + """Check that the connector uses TLP markings and that the level is appropriate.""" + sources = ctx.python_sources + + if not sources: + return [ + CheckFinding( + message="No Python source files found in src/", + severity=Severity.ERROR, + ), + ] + + results: list[CheckFinding] = [] + + # Sub-check A: Are TLP markings used at all? + if not _has_tlp_usage(sources): + results.append( + CheckFinding( + message="No TLP marking usage detected in source code", + severity=Severity.WARNING, + suggestion=( + "Use TLP markings on STIX entities via object_marking_refs. " + "Paid sources should use TLP:AMBER or TLP:RED, " + "free sources should use TLP:CLEAR." + ), + ), + ) + return results + + # TLP is used — report PASS for basic usage + results.append( + CheckFinding( + message="TLP markings are used on entities", + severity=Severity.INFO, + ), + ) + + # Sub-check B: Is the TLP level appropriate for the source type? + source_type = _get_source_type(ctx) + if source_type is None: + return results + + has_paid_level, has_free_level = _detect_tlp_levels(sources) + + if source_type == "commercial" and has_free_level and not has_paid_level: + locations = find_pattern_locations(sources, _FREE_TLP_PATTERNS) + first_loc = locations[0] if locations else None + + results.append( + CheckFinding( + message=( + "Commercial Threat Intel source uses TLP:CLEAR/WHITE " + "— expected TLP:AMBER or TLP:RED" + ), + severity=Severity.WARNING, + file_path=(first_loc[0]) if first_loc else None, + line=first_loc[1] if first_loc else None, + suggestion=( + "Paid/commercial sources should typically use TLP:AMBER " + "or TLP:RED markings, not TLP:CLEAR/WHITE." + ), + ), + ) + + elif source_type == "open_source" and has_paid_level and not has_free_level: + locations = find_pattern_locations(sources, _PAID_TLP_PATTERNS) + first_loc = locations[0] if locations else None + + results.append( + CheckFinding( + message=( + "Open Source Threat Intel source uses TLP:AMBER/RED " + "— expected TLP:CLEAR" + ), + severity=Severity.WARNING, + file_path=(first_loc[0]) if first_loc else None, + line=first_loc[1] if first_loc else None, + suggestion=( + "Open source/free sources should typically use TLP:CLEAR " + "(TLP:WHITE) markings, not TLP:AMBER/RED." + ), + ), + ) + + return results diff --git a/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc312_cleanup_bundle.py b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc312_cleanup_bundle.py new file mode 100644 index 00000000000..5eeb2ded29d --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc312_cleanup_bundle.py @@ -0,0 +1,115 @@ +"""VC312 — send_stix2_bundle must use cleanup_inconsistent_bundle=True. + +Since pycti >= 6.3.3, ``send_stix2_bundle`` accepts +``cleanup_inconsistent_bundle=True`` to avoid MISSING_REFERENCE_ERROR. +All connectors calling this method must pass this parameter. +""" + +import ast +from pathlib import Path + +from connector_linter.models import ( + CheckFinding, + ConnectorContext, + Severity, + no_python_sources_finding, +) +from connector_linter.registry import CheckRegistry + + +def _find_send_bundle_calls( + tree: ast.Module, + file_path: Path, +) -> list[tuple[Path, int, bool]]: + """Find all send_stix2_bundle calls and whether cleanup_inconsistent_bundle=True. + + Matches two call patterns: + 1. self.helper.send_stix2_bundle(...) — Attribute node (method call) + 2. send_stix2_bundle(...) — Name node (bare function call) + + For each call, checks if cleanup_inconsistent_bundle=True is passed as + a keyword argument. Only checks for the literal True value (not variables + or expressions). + + Returns list of (file_path, line_no, has_cleanup_true). + """ + results: list[tuple[Path, int, bool]] = [] + + for node in ast.walk(tree): + if not isinstance(node, ast.Call): + continue + + # Match *.send_stix2_bundle(...) or send_stix2_bundle(...) + func_name = None + if ( + isinstance(node.func, ast.Attribute) + and node.func.attr == "send_stix2_bundle" + ) or (isinstance(node.func, ast.Name) and node.func.id == "send_stix2_bundle"): + func_name = "send_stix2_bundle" + + if func_name is None: + continue + + has_cleanup_true = False + for kw in node.keywords: + if kw.arg == "cleanup_inconsistent_bundle": + if isinstance(kw.value, ast.Constant) and kw.value.value is True: + has_cleanup_true = True + + results.append((file_path, node.lineno, has_cleanup_true)) + + return results + + +@CheckRegistry.register( + code="VC312", + name="cleanup-inconsistent-bundle", + description="send_stix2_bundle must use cleanup_inconsistent_bundle=True", + severity=Severity.ERROR, +) +def check_cleanup_inconsistent_bundle(ctx: ConnectorContext) -> list[CheckFinding]: + """Check that all send_stix2_bundle calls pass cleanup_inconsistent_bundle=True.""" + sources = ctx.python_sources + + if not sources: + return [no_python_sources_finding()] + + trees = ctx.python_trees + + all_calls: list[tuple[Path, int, bool]] = [] + for file_path, tree in trees.items(): + all_calls.extend(_find_send_bundle_calls(tree, file_path)) + + # No send_stix2_bundle calls found → return empty (check doesn't apply). + # Returning [] instead of FAIL because not all connectors use send_stix2_bundle + # (e.g. stream connectors, or SDK-based connectors that handle bundles internally). + if not all_calls: + return [] + + results: list[CheckFinding] = [] + for file_path, line_no, has_cleanup_true in all_calls: + if has_cleanup_true: + results.append( + CheckFinding( + message="send_stix2_bundle uses cleanup_inconsistent_bundle=True", + severity=Severity.INFO, + file_path=file_path, + line=line_no, + ), + ) + else: + results.append( + CheckFinding( + message="send_stix2_bundle missing cleanup_inconsistent_bundle=True", + severity=Severity.ERROR, + file_path=file_path, + line=line_no, + suggestion=( + "Add cleanup_inconsistent_bundle=True to send_stix2_bundle() " + "to avoid MISSING_REFERENCE_ERROR. Also ensure author and " + "markings, and any related objects are included in the bundle." + ), + ), + ) + + return results diff --git a/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc313_pycti_generate_id.py b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc313_pycti_generate_id.py new file mode 100644 index 00000000000..d81a9b260ea --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc313_pycti_generate_id.py @@ -0,0 +1,203 @@ +"""VC313 — STIX objects must use pycti.XXX.generate_id() for deterministic IDs. + +When creating stix2 SDO/SRO objects, the ``id`` parameter must be explicitly +set using ``pycti.XXX.generate_id(...)`` to ensure deterministic deduplication +in OpenCTI. If the connectors-sdk is used, IDs are handled automatically. + +SCOs (observables like IPv4Address, DomainName) are exempt — stix2 generates +deterministic IDs for SCOs from their contributing properties (per STIX 2.1 +spec section 2.9), so no explicit id= is needed. +""" + +import ast +from pathlib import Path + +from connector_linter.checks.vc3xx_code._helpers import ( + find_imports, +) +from connector_linter.models import ( + CheckFinding, + ConnectorContext, + Severity, + no_python_sources_finding, +) +from connector_linter.registry import CheckRegistry + +# --------------------------------------------------------------------------- +# STIX Domain Objects (SDOs) — these represent higher-level threat intel +# concepts and REQUIRE explicit id= via pycti.XXX.generate_id() because +# stix2 would otherwise generate random UUIDs, breaking deduplication. +# --------------------------------------------------------------------------- +_STIX_SDO_TYPES = frozenset( + { + "AttackPattern", + "Campaign", + "CourseOfAction", + "Grouping", + "Identity", + "Indicator", + "Infrastructure", + "IntrusionSet", + "Location", + "Malware", + "MalwareAnalysis", + "Note", + "ObservedData", + "Opinion", + "Report", + "ThreatActor", + "Tool", + "Vulnerability", + }, +) + +# --------------------------------------------------------------------------- +# STIX Relationship Objects (SROs) — also require explicit id= for the +# same deduplication reason as SDOs. +# --------------------------------------------------------------------------- +_STIX_SRO_TYPES = frozenset({"Relationship", "Sighting"}) + +# Combined set for checking +_ALL_TYPES_NEEDING_ID = _STIX_SDO_TYPES | _STIX_SRO_TYPES + + +def _get_stix2_imported_names(trees: dict[Path, ast.Module]) -> dict[Path, set[str]]: + """Get a mapping of file_path → set of stix2 type names imported. + + Tracks per-file imports so we only flag bare Name calls (e.g. Identity(...)) + when that name was actually imported from stix2 in the same file. Handles + both `from stix2 import XXX` and `from stix2.v21 import XXX`. + + Alias handling: if `from stix2 import Identity as Id`, tracks "Id" + (the alias) as the name to match against Call nodes. + """ + result: dict[Path, set[str]] = {} + for file_path, tree in trees.items(): + names: set[str] = set() + for node in ast.walk(tree): + if ( + isinstance(node, ast.ImportFrom) + and node.module + and (node.module == "stix2" or node.module.startswith("stix2.")) + ): + for alias in node.names: + if alias.name in _ALL_TYPES_NEEDING_ID: + imported_name = alias.asname or alias.name + names.add(imported_name) + result[file_path] = names + return result + + +def _find_stix_calls_without_id( + tree: ast.Module, + file_path: Path, + imported_names: set[str], +) -> list[tuple[Path, int, str]]: + """Find stix2 constructor calls that lack an explicit id= parameter. + + Checks three call patterns: + 1. stix2.XXX(...) — qualified call (e.g. stix2.Identity(...)) + 2. stix2.v21.XXX(...) — fully-qualified call (e.g. stix2.v21.Identity(...)) + 3. XXX(...) — bare call (Name node), only matched if XXX was + imported from stix2 in this file (via imported_names) + + For each matching call, checks if id= is present as a keyword argument. + + Returns list of (file_path, line_no, type_name). + """ + violations: list[tuple[Path, int, str]] = [] + + for node in ast.walk(tree): + if not isinstance(node, ast.Call): + continue + + type_name = None + + # Pattern 1: stix2.XXX(...) or pycti.XXX(...) + if ( + isinstance(node.func, ast.Attribute) + and isinstance(node.func.value, ast.Name) + and node.func.value.id in ("stix2", "pycti") + and node.func.attr in _ALL_TYPES_NEEDING_ID + ): + type_name = node.func.attr + + # Pattern 2: stix2.v21.XXX(...) — fully-qualified constructor + elif ( + isinstance(node.func, ast.Attribute) + and node.func.attr in _ALL_TYPES_NEEDING_ID + and isinstance(node.func.value, ast.Attribute) + and node.func.value.attr == "v21" + and isinstance(node.func.value.value, ast.Name) + and node.func.value.value.id == "stix2" + ): + type_name = node.func.attr + + # Pattern 3: XXX(...) where XXX was imported from stix2 + elif isinstance(node.func, ast.Name) and node.func.id in imported_names: + type_name = node.func.id + + if type_name is None: + continue + + # Check if id= keyword argument is present + has_id = any(kw.arg == "id" for kw in node.keywords) + if not has_id: + violations.append((file_path, node.lineno, type_name)) + + return violations + + +@CheckRegistry.register( + code="VC313", + name="pycti-generate-id", + description="STIX SDO/SRO objects must use pycti.XXX.generate_id() for deterministic IDs", + severity=Severity.ERROR, +) +def check_pycti_generate_id(ctx: ConnectorContext) -> list[CheckFinding]: + """Check that stix2 SDO/SRO constructors include an explicit id= parameter.""" + sources = ctx.python_sources + + if not sources: + return [no_python_sources_finding()] + + trees = ctx.python_trees + + # Track which stix2 types are imported per file + imported_names_map = _get_stix2_imported_names(trees) + + all_violations: list[tuple[Path, int, str]] = [] + for file_path, tree in trees.items(): + imported_names = imported_names_map.get(file_path, set()) + all_violations.extend( + _find_stix_calls_without_id(tree, file_path, imported_names), + ) + + if not all_violations: + # Note whether connectors-sdk is in use (its models handle IDs + # automatically, but raw stix2.* calls are still scanned above) + sdk_imports = find_imports(trees, module_pattern=r"connectors_sdk") + detail = " (connectors-sdk handles IDs for SDK models)" if sdk_imports else "" + return [ + CheckFinding( + message=f"All STIX SDO/SRO objects use explicit id= parameter{detail}", + severity=Severity.INFO, + ), + ] + + results: list[CheckFinding] = [] + for file_path, line_no, type_name in all_violations: + results.append( + CheckFinding( + message=f"stix2.{type_name}() missing explicit id= parameter", + severity=Severity.ERROR, + file_path=file_path, + line=line_no, + suggestion=( + f"Use id=pycti.{type_name}.generate_id(...) for deterministic " + f"deduplication. See https://docs.opencti.io/latest/usage/deduplication" + ), + ), + ) + + return results diff --git a/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc314_auto_backpressure.py b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc314_auto_backpressure.py new file mode 100644 index 00000000000..5149fa6cdf0 --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc314_auto_backpressure.py @@ -0,0 +1,137 @@ +"""VC314 — External-import connectors must use schedule_process or schedule_iso. + +Uses AST to detect ``while True`` loops (avoids false positives from +comments like ``# migrated from while True``). + +``self.helper.schedule_process(message_callback=..., duration_period=...)`` +or ``self.helper.schedule_iso(message_callback=..., duration_period=...)`` +provide automatic scheduling with backpressure. Manual ``while True`` / +``time.sleep`` loops should be migrated. + +Scope: EXTERNAL_IMPORT only — other connector types are event-driven. +""" + +import ast +from pathlib import Path + +from connector_linter.models import ( + CheckFinding, + ConnectorContext, + ConnectorType, + Severity, + no_python_sources_finding, +) +from connector_linter.registry import CheckRegistry + + +def _find_schedule_calls( + trees: dict[Path, ast.Module], +) -> list[tuple[Path, int, str]]: + """Find schedule_process or schedule_iso calls via AST. + + These are the two valid scheduling methods from pycti: + - schedule_process: legacy scheduler with polling interval + - schedule_iso: ISO 8601 duration-based scheduler (preferred) + Both provide automatic backpressure management. + """ + hits: list[tuple[Path, int, str]] = [] + for file_path, tree in trees.items(): + for node in ast.walk(tree): + if not isinstance(node, ast.Call): + continue + func = node.func + if isinstance(func, ast.Attribute) and func.attr in ( + "schedule_process", + "schedule_iso", + ): + hits.append((file_path, node.lineno, func.attr)) + return hits + + +def _find_while_true_loops( + trees: dict[Path, ast.Module], +) -> list[tuple[Path, int]]: + """Find ``while True:`` loops via AST. + + The while True + time.sleep() pattern is an anti-pattern for connectors: + it doesn't respect platform backpressure, can cause duplicate processing, + and lacks proper state management. Should be replaced with schedule_iso. + """ + hits: list[tuple[Path, int]] = [] + for file_path, tree in trees.items(): + for node in ast.walk(tree): + if not isinstance(node, ast.While): + continue + if isinstance(node.test, ast.Constant) and node.test.value is True: + hits.append((file_path, node.lineno)) + return hits + + +@CheckRegistry.register( + code="VC314", + name="auto-backpressure", + description="External-import connectors must use schedule_process or schedule_iso", + severity=Severity.ERROR, + applicable_types={ConnectorType.EXTERNAL_IMPORT}, +) +def check_auto_backpressure(ctx: ConnectorContext) -> list[CheckFinding]: + """Check that external-import connectors use schedule_process/schedule_iso.""" + sources = ctx.python_sources + + if not sources: + return [no_python_sources_finding()] + + trees = ctx.python_trees + + # --------------------------------------------------------------------------- + # Detection priority: + # 1. schedule_process/schedule_iso found → PASS (proper scheduling) + # 2. while True loop found → FAIL with specific detail + # 3. Nothing found → FAIL with generic message + # --------------------------------------------------------------------------- + + # Check for either valid scheduling method (AST) + schedule_hits = _find_schedule_calls(trees) + + if schedule_hits: + first = schedule_hits[0] + return [ + CheckFinding( + message=f"Connector uses {first[2]} for scheduling", + severity=Severity.INFO, + file_path=first[0], + line=first[1], + ), + ] + + # No valid scheduling found — check for while True anti-pattern (AST) + results: list[CheckFinding] = [] + while_loops = _find_while_true_loops(trees) + for file_path, line_no in while_loops: + results.append( + CheckFinding( + message="Uses while True loop instead of scheduler", + severity=Severity.ERROR, + file_path=file_path, + line=line_no, + suggestion=( + "Replace manual while True / time.sleep loop with " + "self.helper.schedule_iso(message_callback=..., " + "duration_period=...) or schedule_process(). See PR #4227." + ), + ), + ) + + if not results: + results.append( + CheckFinding( + message="No schedule_process or schedule_iso call found", + severity=Severity.ERROR, + suggestion=( + "Use self.helper.schedule_iso(message_callback=self.process_message, " + "duration_period=self.config.connector.duration_period) for scheduling." + ), + ), + ) + + return results diff --git a/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc315_work_initiated.py b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc315_work_initiated.py new file mode 100644 index 00000000000..7d58d47e6de --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc315_work_initiated.py @@ -0,0 +1,79 @@ +"""VC315 — Connector must initiate work before processing. + +External-import connectors must call +``self.helper.api.work.initiate_work(self.helper.connect_id, friendly_name)`` +to properly track work lifecycle in the OpenCTI platform. + +Scope: EXTERNAL_IMPORT only. +""" + +import re + +from connector_linter.checks.vc3xx_code._helpers import ( + find_pattern_locations, +) +from connector_linter.models import ( + CheckFinding, + ConnectorContext, + ConnectorType, + Severity, + no_python_sources_finding, +) +from connector_linter.registry import CheckRegistry + +# --------------------------------------------------------------------------- +# Regex to detect .initiate_work( calls. +# +# Matches any method call ending in .initiate_work(, which is the pycti API +# for creating a new work tracking record. The leading dot ensures we match +# method calls (e.g. self.helper.api.work.initiate_work) and not unrelated +# functions that happen to contain "initiate_work" in their name. +# --------------------------------------------------------------------------- +_INITIATE_WORK = re.compile(r"\.initiate_work\s*\(") + + +# --------------------------------------------------------------------------- +# Applicable connector types. +# +# Only EXTERNAL_IMPORT connectors need to initiate work explicitly — +# other types have their work lifecycle managed by the platform or SDK. +# --------------------------------------------------------------------------- +@CheckRegistry.register( + code="VC315", + name="work-initiated", + description="Connector must call initiate_work before processing", + severity=Severity.ERROR, + applicable_types={ConnectorType.EXTERNAL_IMPORT}, +) +def check_work_initiated(ctx: ConnectorContext) -> list[CheckFinding]: + """Check that the connector calls initiate_work.""" + sources = ctx.python_sources + + if not sources: + return [no_python_sources_finding()] + + # Simple presence check: scan all source files for .initiate_work( calls + locations = find_pattern_locations(sources, [_INITIATE_WORK]) + + if locations: + first = locations[0] + return [ + CheckFinding( + message="Connector calls initiate_work to track work lifecycle", + severity=Severity.INFO, + file_path=first[0], + line=first[1], + ), + ] + + return [ + CheckFinding( + message="No initiate_work call found", + severity=Severity.ERROR, + suggestion=( + "Add self.helper.api.work.initiate_work(" + "self.helper.connect_id, friendly_name) " + "before processing to track work lifecycle." + ), + ), + ] diff --git a/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc316_work_closed.py b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc316_work_closed.py new file mode 100644 index 00000000000..77e23015296 --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc316_work_closed.py @@ -0,0 +1,118 @@ +"""VC316 — Connector must close work with to_processed after processing. + +Uses AST to verify: +- ``to_processed()`` is called somewhere. +- ``in_error=`` is used as a keyword argument specifically in a + ``to_processed()`` call (not just any ``in_error=`` assignment). + +Scope: EXTERNAL_IMPORT only — other connector types have their work +lifecycle managed by the platform or SDK. +""" + +import ast +from pathlib import Path + +from connector_linter.models import ( + CheckFinding, + ConnectorContext, + ConnectorType, + Severity, + no_python_sources_finding, +) +from connector_linter.registry import CheckRegistry + +# Only EXTERNAL_IMPORT connectors need to explicitly close work + + +def _find_to_processed_calls( + trees: dict[Path, ast.Module], +) -> list[tuple[Path, int, bool]]: + """Find to_processed() calls. Returns (file, line, has_in_error_kwarg). + + Matches the Attribute pattern only (e.g. self.helper.api.work.to_processed(...)) + since to_processed is always called as a method. Also detects whether the + in_error= keyword argument is used, which signals proper error handling + during work closure. + """ + hits: list[tuple[Path, int, bool]] = [] + for file_path, tree in trees.items(): + for node in ast.walk(tree): + if not isinstance(node, ast.Call): + continue + func = node.func + # Match *.to_processed(...) method calls + if isinstance(func, ast.Attribute) and func.attr == "to_processed": + # Check if in_error= keyword argument is present + has_in_error = any(kw.arg == "in_error" for kw in node.keywords) + hits.append((file_path, node.lineno, has_in_error)) + return hits + + +@CheckRegistry.register( + code="VC316", + name="work-closed", + description="Connector must close work with to_processed after processing", + severity=Severity.ERROR, + applicable_types={ConnectorType.EXTERNAL_IMPORT}, +) +def check_work_closed(ctx: ConnectorContext) -> list[CheckFinding]: + """Check that the connector calls to_processed to close work.""" + sources = ctx.python_sources + + if not sources: + return [no_python_sources_finding()] + + trees = ctx.python_trees + calls = _find_to_processed_calls(trees) + + # --------------------------------------------------------------------------- + # Two sub-checks: + # 1. to_processed exists (ERROR if missing) — work must be closed + # 2. in_error= is used (WARNING if missing) — proper error signaling + # --------------------------------------------------------------------------- + + if not calls: + return [ + CheckFinding( + message="No to_processed call found — work is never closed", + severity=Severity.ERROR, + suggestion=( + "Add self.helper.api.work.to_processed(work_id, message) " + "to close work after processing. Use in_error=True on " + "exception or interruption." + ), + ), + ] + + results: list[CheckFinding] = [] + first = calls[0] + + # Sub-check 1: to_processed exists → PASS + results.append( + CheckFinding( + message="Connector closes work with to_processed", + severity=Severity.INFO, + file_path=first[0], + line=first[1], + ), + ) + + # Sub-check 2: check if any to_processed call uses in_error= kwarg + # (WARNING severity — not blocking, but important for proper error reporting) + has_error_handling = any(has_in_error for _, _, has_in_error in calls) + if not has_error_handling: + results.append( + CheckFinding( + message="to_processed never uses in_error=True for error handling", + severity=Severity.WARNING, + file_path=ctx.path / first[0], + line=first[1], + suggestion=( + "On exception or CTRL+C, close work with " + "to_processed(work_id, message, in_error=True) " + "to properly signal errors to the platform." + ), + ), + ) + + return results diff --git a/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc317_initiate_work_conditional.py b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc317_initiate_work_conditional.py new file mode 100644 index 00000000000..76cb4197083 --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc317_initiate_work_conditional.py @@ -0,0 +1,151 @@ +"""VC317 — initiate_work should only be called when data is available. + +Creating jobs with zero bundles clutters the UI and confuses users. +``initiate_work`` should be guarded by a condition that verifies data +availability *before* creating the work. + +Scope: EXTERNAL_IMPORT, INTERNAL_ENRICHMENT +Severity: WARNING (heuristic — hard to prove statically) +""" + +import ast +from typing import TYPE_CHECKING + +from connector_linter.models import ( + CheckFinding, + ConnectorContext, + ConnectorType, + Severity, +) +from connector_linter.registry import CheckRegistry + +if TYPE_CHECKING: + from pathlib import Path + +# Only external-import and internal-enrichment connectors create "work" items. +# Stream connectors use a different event model and never call initiate_work. + + +# --------------------------------------------------------------------------- +# AST NodeVisitor: track initiate_work calls and whether they are guarded +# +# Uses a depth counter (_if_depth) to detect if the call site is nested +# inside at least one ``if`` block. The visitor increments the counter on +# entering an ``if`` and decrements it on exit, so any Call node found +# with _if_depth > 0 is considered "conditional". +# +# This is a heuristic — it cannot prove the condition actually checks data +# availability — but it catches the most common anti-pattern of calling +# initiate_work at the top level with no guard at all. +# --------------------------------------------------------------------------- +class _InitiateWorkVisitor(ast.NodeVisitor): + """Collect initiate_work calls and whether they are inside an ``if``.""" + + def __init__(self) -> None: + self.calls: list[tuple[int, bool]] = [] # (lineno, is_conditional) + # Depth counter: >0 means we are inside at least one ``if`` block + self._if_depth = 0 + + def visit_If(self, node: ast.If) -> None: + # Increment depth before visiting children, decrement after. + # This way any Call node encountered while depth > 0 is conditional. + self._if_depth += 1 + self.generic_visit(node) + self._if_depth -= 1 + + def visit_Call(self, node: ast.Call) -> None: + # Record every initiate_work call with its conditionality status + if self._is_initiate_work(node): + self.calls.append((node.lineno, self._if_depth > 0)) + self.generic_visit(node) + + @staticmethod + def _is_initiate_work(node: ast.Call) -> bool: + """Match ``*.initiate_work(...)``.""" + # --------------------------------------------------------------------------- + # AST pattern: *.initiate_work(...) + # + # Matches any method call where the attribute name is "initiate_work": + # self.helper.initiate_work(...) — typical usage + # helper.initiate_work(...) — also matched + # We only check the Attribute node, not the receiver, to stay flexible. + # --------------------------------------------------------------------------- + func = node.func + return bool(isinstance(func, ast.Attribute) and func.attr == "initiate_work") + + +@CheckRegistry.register( + code="VC317", + name="initiate-work-conditional", + description=( + "initiate_work should only be called when data is available " + "(never create empty jobs)" + ), + severity=Severity.WARNING, + applicable_types={ConnectorType.EXTERNAL_IMPORT, ConnectorType.INTERNAL_ENRICHMENT}, +) +def check_initiate_work_conditional(ctx: ConnectorContext) -> list[CheckFinding]: + """Warn if initiate_work is called unconditionally (outside any ``if``).""" + sources = ctx.python_sources + if not sources: + return [] + + trees = ctx.python_trees + if not trees: + return [] + + # Partition all initiate_work calls into unconditional (top-level) and + # conditional (inside at least one ``if`` block). + unconditional: list[tuple[Path, int]] = [] + conditional: list[tuple[Path, int]] = [] + + for filepath, tree in trees.items(): + visitor = _InitiateWorkVisitor() + visitor.visit(tree) + for lineno, is_cond in visitor.calls: + if is_cond: + conditional.append((filepath, lineno)) + else: + unconditional.append((filepath, lineno)) + + if not unconditional and not conditional: + # No initiate_work found anywhere — VC315 already flags that case, + # so we return an empty list to avoid duplicate findings. + return [] + + results: list[CheckFinding] = [] + + # Unconditional initiate_work is the anti-pattern: if no data was fetched, + # an empty work item clutters the OpenCTI jobs UI. We report it as + # passed=True with a WARNING because this is heuristic-based. + if unconditional: + first = unconditional[0] + results.append( + CheckFinding( + message=( + "initiate_work is called unconditionally — " + "may create empty jobs when no data is available" + ), + severity=Severity.WARNING, + file_path=first[0], + line=first[1], + suggestion=( + "Guard initiate_work with a condition that checks data " + "availability first. Only create a work when the bundle " + "will contain objects. Track " + "'last_run_end_datetime_with_ingested_data' in state." + ), + ), + ) + else: + first = conditional[0] + results.append( + CheckFinding( + message="initiate_work is guarded by a condition", + severity=Severity.INFO, + file_path=first[0], + line=first[1], + ), + ) + + return results diff --git a/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc318_helper_listen.py b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc318_helper_listen.py new file mode 100644 index 00000000000..481a3355adb --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc318_helper_listen.py @@ -0,0 +1,103 @@ +"""VC318 — Internal-enrichment connectors must use helper.listen(). + +Uses AST to verify the call is ``self.helper.listen()`` specifically, +avoiding false positives from other ``.listen()`` calls (e.g. sockets). + +Scope: INTERNAL_ENRICHMENT only. +""" + +import ast +from pathlib import Path + +from connector_linter.models import ( + CheckFinding, + ConnectorContext, + ConnectorType, + Severity, + no_python_sources_finding, +) +from connector_linter.registry import CheckRegistry + +# --------------------------------------------------------------------------- +# Scope: INTERNAL_ENRICHMENT only. +# +# Enrichment connectors are event-driven — they react to platform events +# (e.g. "enrich this indicator") by registering a callback via +# self.helper.listen(message_callback=self.process_message). +# +# This is distinct from VC323 which checks helper.listen_stream() for +# STREAM connectors. listen() and listen_stream() are different methods: +# - listen() → enrichment, receives entity-level events +# - listen_stream() → stream, receives the full event stream +# --------------------------------------------------------------------------- + + +def _find_helper_listen_calls( + trees: dict[Path, ast.Module], +) -> list[tuple[Path, int]]: + """Find ``*.helper.listen(...)`` calls using AST.""" + hits: list[tuple[Path, int]] = [] + for file_path, tree in trees.items(): + for node in ast.walk(tree): + if not isinstance(node, ast.Call): + continue + func = node.func + # First level: the called method must be .listen() + if not isinstance(func, ast.Attribute) or func.attr != "listen": + continue + # --------------------------------------------------------------------------- + # Second level: verify the receiver is "helper" to avoid false positives + # + # Two patterns are accepted: + # 1. self.helper.listen(...) — Attribute chain: receiver is + # an ast.Attribute with attr == "helper" + # 2. helper.listen(...) — bare name: receiver is + # an ast.Name with id == "helper" + # + # This prevents matching unrelated .listen() calls (e.g. sockets). + # --------------------------------------------------------------------------- + receiver = func.value + if (isinstance(receiver, ast.Attribute) and receiver.attr == "helper") or ( + isinstance(receiver, ast.Name) and receiver.id == "helper" + ): + hits.append((file_path, node.lineno)) + return hits + + +@CheckRegistry.register( + code="VC318", + name="helper-listen", + description="Internal-enrichment connectors must use helper.listen()", + severity=Severity.ERROR, + applicable_types={ConnectorType.INTERNAL_ENRICHMENT}, +) +def check_helper_listen(ctx: ConnectorContext) -> list[CheckFinding]: + """Check that the connector uses helper.listen().""" + sources = ctx.python_sources + if not sources: + return [no_python_sources_finding()] + + trees = ctx.python_trees + locations = _find_helper_listen_calls(trees) + + if not locations: + return [ + CheckFinding( + message="helper.listen() not found — enrichment connector is not event-driven", + severity=Severity.ERROR, + suggestion=( + "Add self.helper.listen(message_callback=self.process_message) " + "in the run method to listen for platform events." + ), + ), + ] + + first = locations[0] + return [ + CheckFinding( + message="Connector uses helper.listen() for event-driven processing", + severity=Severity.INFO, + file_path=first[0], + line=first[1], + ), + ] diff --git a/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc319_scope_fallback.py b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc319_scope_fallback.py new file mode 100644 index 00000000000..c51936d4eb6 --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc319_scope_fallback.py @@ -0,0 +1,126 @@ +"""VC319 — Enrichment connector must return original bundle when not in scope. + +When an enrichment connector is triggered by a playbook for an entity type +outside its scope, it **must** send the original bundle back unchanged so the +playbook can continue. Detection relies on the ``event_type`` field in data: +if absent, the trigger came from a playbook. + +Scope: INTERNAL_ENRICHMENT only. +Severity: WARNING (best practice, not yet universally adopted). +""" + +import re + +from connector_linter.checks.vc3xx_code._helpers import ( + find_pattern_locations, +) +from connector_linter.models import ( + CheckFinding, + ConnectorContext, + ConnectorType, + Severity, +) +from connector_linter.registry import CheckRegistry + +# --------------------------------------------------------------------------- +# Regex: detect access to the "event_type" key in source code. +# +# Matches string literals 'event_type' or "event_type". When an enrichment +# connector is triggered by a playbook, the data dict does NOT contain an +# event_type field. Checking for its presence lets the connector +# distinguish between "manual enrichment" (has event_type) and "playbook +# trigger" (no event_type). +# --------------------------------------------------------------------------- +_EVENT_TYPE_PATTERN = re.compile(r"""['"](event_type)['"]""") + +# --------------------------------------------------------------------------- +# Regex: detect access to data['stix_objects'] or data["stix_objects"]. +# +# The stix_objects field contains the original STIX bundle that was passed +# to the enrichment connector. Reading it is a prerequisite for returning +# the bundle unchanged when the entity is out of scope. +# --------------------------------------------------------------------------- +_STIX_OBJECTS_DATA = re.compile(r"""data\s*\[\s*['"]stix_objects['"]\s*\]""") + +# Only enrichment connectors receive playbook triggers with scope concerns + + +@CheckRegistry.register( + code="VC319", + name="scope-fallback-bundle", + description=( + "Enrichment connector must return original bundle when entity is " + "not in scope (playbook compatibility)" + ), + severity=Severity.WARNING, + applicable_types={ConnectorType.INTERNAL_ENRICHMENT}, +) +def check_scope_fallback(ctx: ConnectorContext) -> list[CheckFinding]: + """Warn if the connector does not handle out-of-scope playbook triggers. + + Severity is WARNING because this is a best practice that is not yet + universally adopted across the connector ecosystem. When an enrichment + connector receives a playbook trigger for an entity type it does not + handle (e.g. a "Domain Name" enricher gets an "IPv4"), it should send + the original bundle back unchanged so the playbook pipeline can continue. + """ + sources = ctx.python_sources + if not sources: + return [] + + # Detection flow: + # 1. First check stix_objects — reading it is required to be able to + # return the original bundle. If missing, we fail early. + # 2. Then check event_type — its absence in the data dict signals a + # playbook trigger vs. a manual enrichment request. + event_type_locs = find_pattern_locations(sources, [_EVENT_TYPE_PATTERN]) + stix_objects_locs = find_pattern_locations(sources, [_STIX_OBJECTS_DATA]) + + results: list[CheckFinding] = [] + + # If stix_objects is never read, the connector cannot return the original + # bundle — flag this first (more fundamental issue than missing event_type). + if not stix_objects_locs: + results.append( + CheckFinding( + message=( + "data['stix_objects'] is never read — original bundle " + "cannot be returned for out-of-scope playbook triggers" + ), + severity=Severity.WARNING, + suggestion=( + "Read data['stix_objects'] and send the original bundle " + "back unchanged when the entity is not in scope. " + "Check data.get('event_type') to detect playbook triggers." + ), + ), + ) + return results + + if not event_type_locs: + results.append( + CheckFinding( + message=( + "No event_type check found — out-of-scope playbook " + "triggers may not return the original bundle" + ), + severity=Severity.WARNING, + suggestion=( + "Use data.get('event_type') to detect playbook triggers. " + "When not in scope and no event_type, send back the " + "original stix_objects bundle unchanged." + ), + ), + ) + else: + first = event_type_locs[0] + results.append( + CheckFinding( + message="Connector handles event_type for playbook compatibility", + severity=Severity.INFO, + file_path=first[0], + line=first[1], + ), + ) + + return results diff --git a/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc320_tlp_access_control.py b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc320_tlp_access_control.py new file mode 100644 index 00000000000..be1494e8a15 --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc320_tlp_access_control.py @@ -0,0 +1,237 @@ +"""VC320 — Enrichment connector must enforce TLP access control. + +Before processing an entity, the connector must extract its TLP marking +from ``objectMarking``, validate it against the configured ``max_tlp``, +and reject processing if the TLP is too high. This prevents data +leakage — e.g. sending TLP:RED data on a TLP:CLEAR platform. + +Distinct from VC304 (which checks that ``check_max_tlp`` is called): +VC320 verifies the **complete access-control flow**: + 1. Extract TLP from ``objectMarking`` + 2. Call ``check_max_tlp`` + 3. Reject (raise) when invalid + +Scope: INTERNAL_ENRICHMENT only. +Severity: ERROR. +""" + +import ast +from typing import TYPE_CHECKING, cast + +from connector_linter.models import ( + CheckFinding, + ConnectorContext, + ConnectorType, + Severity, + no_python_sources_finding, +) +from connector_linter.registry import CheckRegistry + +if TYPE_CHECKING: + from pathlib import Path + +# Only enrichment connectors need TLP access control — they receive +# individual entities from the platform and must not leak sensitive data. + + +# --------------------------------------------------------------------------- +# Step 1 helper: detect objectMarking access +# +# The TLP marking is stored in the entity's "objectMarking" field. +# Two AST patterns are matched: +# - ast.Constant with value "objectMarking" → dict subscript access +# e.g. entity["objectMarking"] +# - ast.Attribute with attr "objectMarking" → attribute access +# e.g. entity.objectMarking +# --------------------------------------------------------------------------- +def _has_object_marking_access(tree: ast.Module) -> int | None: + """Check if objectMarking is accessed (subscript or attribute).""" + for node in ast.walk(tree): + if isinstance(node, ast.Constant) and node.value == "objectMarking": + return node.lineno + if isinstance(node, ast.Attribute) and node.attr == "objectMarking": + return node.lineno + return None + + +# --------------------------------------------------------------------------- +# Step 2 helper: detect check_max_tlp() call +# +# Two call patterns are matched: +# - self.helper.check_max_tlp(...) → Attribute node with attr "check_max_tlp" +# - check_max_tlp(...) → bare Name node (imported function) +# --------------------------------------------------------------------------- +def _has_check_max_tlp(tree: ast.Module) -> int | None: + """Check if check_max_tlp() is called.""" + for node in ast.walk(tree): + if not isinstance(node, ast.Call): + continue + func = node.func + if isinstance(func, ast.Attribute) and func.attr == "check_max_tlp": + return node.lineno + if isinstance(func, ast.Name) and func.id == "check_max_tlp": + return node.lineno + return None + + +# --------------------------------------------------------------------------- +# Step 3 helper: detect raise after TLP check +# +# Scoped to FunctionDef/AsyncFunctionDef to ensure the raise and the +# check_max_tlp call are in the same function (not unrelated code). +# We walk children of each function looking for BOTH a check_max_tlp call +# AND a raise statement. If the same function contains both, the connector +# is considered to reject invalid TLP. +# --------------------------------------------------------------------------- +def _has_raise_after_tlp_check(tree: ast.Module) -> int | None: + """Check for a raise statement that could reject invalid TLP. + + Looks for raise inside an if block that follows or contains check_max_tlp. + Also matches raise inside a function that contains check_max_tlp. + """ + for node in ast.walk(tree): + if not isinstance(node, (ast.FunctionDef, ast.AsyncFunctionDef)): + continue + has_tlp_check = False + has_raise = False + raise_line = None + for child in ast.walk(node): + if isinstance(child, ast.Call): + func = child.func + if ( + isinstance(func, ast.Attribute) and func.attr == "check_max_tlp" + ) or (isinstance(func, ast.Name) and func.id == "check_max_tlp"): + has_tlp_check = True + if isinstance(child, ast.Raise): + has_raise = True + raise_line = child.lineno + if has_tlp_check and has_raise: + return raise_line + return None + + +@CheckRegistry.register( + code="VC320", + name="tlp-access-control", + description=( + "Enrichment connector must enforce TLP access control: " + "extract objectMarking, check_max_tlp, reject if invalid" + ), + severity=Severity.ERROR, + applicable_types={ConnectorType.INTERNAL_ENRICHMENT}, +) +def check_tlp_access_control(ctx: ConnectorContext) -> list[CheckFinding]: + """Verify the complete TLP access-control flow.""" + sources = ctx.python_sources + if not sources: + return [no_python_sources_finding()] + + trees = ctx.python_trees + + # --------------------------------------------------------------------------- + # 3-step TLP access control verification: + # Step 1: Extract — objectMarking is accessed to get the entity's TLP + # Step 2: Validate — check_max_tlp() is called to compare against max + # Step 3: Reject — a raise statement prevents processing if TLP too high + # + # Distinct from VC304 which only checks that check_max_tlp is called. + # VC320 verifies the COMPLETE access-control flow end-to-end. + # --------------------------------------------------------------------------- + + # Step 1: objectMarking access + marking_line = None + marking_file: Path | None = None + for fp, tree in trees.items(): + line = _has_object_marking_access(tree) + if line is not None: + marking_line = line + marking_file = fp + break + + if marking_line is None: + return [ + CheckFinding( + message=( + "objectMarking is never accessed — TLP of incoming " + "entities is not extracted" + ), + severity=Severity.ERROR, + suggestion=( + "Extract TLP from opencti_entity['objectMarking'], " + "call self.helper.check_max_tlp(tlp, max_tlp), " + "and raise if the TLP exceeds the configured maximum. " + "This prevents leaking paid TLP:RED data on a TLP:CLEAR platform." + ), + ), + ] + # cast() is needed for mypy: marking_file is Path at this point + # (we returned [] above if None), but mypy can't infer that. + marking_file = cast("Path", marking_file) # for mypy + + # Step 2: check_max_tlp call + check_line = None + check_file = None + for fp, tree in trees.items(): + line = _has_check_max_tlp(tree) + if line is not None: + check_line = line + check_file = fp + break + + if check_line is None: + return [ + CheckFinding( + message=( + "objectMarking is read but check_max_tlp is never " + "called — TLP is not enforced" + ), + severity=Severity.ERROR, + file_path=marking_file, + line=marking_line, + suggestion=( + "After extracting TLP from objectMarking, call " + "self.helper.check_max_tlp(tlp, max_tlp) and raise " + "an error if the entity's TLP exceeds the maximum." + ), + ), + ] + + # cast() for mypy: same pattern as marking_file above + check_file = cast("Path", check_file) # for mypy + + # Step 3: reject (raise) when invalid + results: list[CheckFinding] = [] + reject_line = None + for fp, tree in trees.items(): + line = _has_raise_after_tlp_check(tree) + if line is not None: + reject_line = line + break + + if reject_line is None: + results.append( + CheckFinding( + message=( + "check_max_tlp is called but no raise found — " + "invalid TLP may not be rejected" + ), + severity=Severity.WARNING, + file_path=check_file, + line=check_line, + suggestion=( + "After check_max_tlp returns False, raise an error " + "to prevent processing entities with TLP exceeding max." + ), + ), + ) + else: + results.append( + CheckFinding( + message="TLP access control is enforced (objectMarking + check_max_tlp + reject)", + severity=Severity.INFO, + file_path=check_file, + line=check_line, + ), + ) + + return results diff --git a/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc321_playbook_compatible.py b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc321_playbook_compatible.py new file mode 100644 index 00000000000..40d0912f8c2 --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc321_playbook_compatible.py @@ -0,0 +1,168 @@ +"""VC321 — Enrichment connector must be playbook-compatible. + +Uses AST to verify ``playbook_compatible=True`` is a keyword argument +in a constructor call (avoids false positives from comments/docstrings). + +Sub-check A: ``playbook_compatible=True`` is set (ERROR). +Sub-check B: ``send_stix2_bundle`` is called (WARNING — bundle-based flow). + +Scope: INTERNAL_ENRICHMENT only. +""" + +import ast +from pathlib import Path + +from connector_linter.models import ( + CheckFinding, + ConnectorContext, + ConnectorType, + Severity, + no_python_sources_finding, +) +from connector_linter.registry import CheckRegistry + +# Only enrichment connectors participate in playbook automation. +# External-import connectors are scheduled, not triggered by playbooks. + + +# --------------------------------------------------------------------------- +# AST helper: find playbook_compatible= keyword argument +# +# Walks every Call node and inspects its keyword arguments. When a keyword +# named "playbook_compatible" is found, we check whether its value is the +# literal True (ast.Constant with value True). +# +# Returns tuples of (file, line, is_true) — is_true distinguishes between +# playbook_compatible=True (correct) and playbook_compatible=False or +# playbook_compatible=some_var (incorrect / ambiguous). +# --------------------------------------------------------------------------- +def _find_playbook_compatible_kwarg( + trees: dict[Path, ast.Module], +) -> list[tuple[Path, int, bool]]: + """Find playbook_compatible= keyword args. Returns (file, line, is_true).""" + hits: list[tuple[Path, int, bool]] = [] + for file_path, tree in trees.items(): + for node in ast.walk(tree): + if not isinstance(node, ast.Call): + continue + for kw in node.keywords: + if kw.arg == "playbook_compatible": + # Check if the value is literally True (ast.Constant) + is_true = ( + isinstance(kw.value, ast.Constant) and kw.value.value is True + ) + hits.append((file_path, node.lineno, is_true)) + return hits + + +# --------------------------------------------------------------------------- +# AST helper: find send_stix2_bundle() calls +# +# Playbook-compatible connectors must send bundles so the playbook pipeline +# can forward enriched data to the next step. This detects *.send_stix2_bundle() +# method calls (Attribute node with attr "send_stix2_bundle"). +# --------------------------------------------------------------------------- +def _find_send_bundle_calls( + trees: dict[Path, ast.Module], +) -> list[tuple[Path, int]]: + """Find send_stix2_bundle() calls via AST.""" + hits: list[tuple[Path, int]] = [] + for file_path, tree in trees.items(): + for node in ast.walk(tree): + if not isinstance(node, ast.Call): + continue + func = node.func + if isinstance(func, ast.Attribute) and func.attr == "send_stix2_bundle": + hits.append((file_path, node.lineno)) + return hits + + +@CheckRegistry.register( + code="VC321", + name="playbook-compatible", + description="Enrichment connector must be playbook-compatible", + severity=Severity.ERROR, + applicable_types={ConnectorType.INTERNAL_ENRICHMENT}, +) +def check_playbook_compatible(ctx: ConnectorContext) -> list[CheckFinding]: + """Verify playbook compatibility.""" + sources = ctx.python_sources + if not sources: + return [no_python_sources_finding()] + + trees = ctx.python_trees + results: list[CheckFinding] = [] + + # --------------------------------------------------------------------------- + # Sub-check A: playbook_compatible=True keyword argument + # + # Three outcomes: + # 1. Found with value True → PASS + # 2. Found with value != True (False, variable, etc.) → FAIL + # 3. Not found at all → FAIL (missing from OpenCTIConnectorHelper call) + # --------------------------------------------------------------------------- + pb_hits = _find_playbook_compatible_kwarg(trees) + + if pb_hits: + first = pb_hits[0] + if first[2]: # is_true + results.append( + CheckFinding( + message="playbook_compatible=True is set", + severity=Severity.INFO, + file_path=first[0], + line=first[1], + ), + ) + else: + results.append( + CheckFinding( + message=( + "playbook_compatible is set but not to True — " + "playbook automation will not work" + ), + severity=Severity.ERROR, + file_path=first[0], + line=first[1], + suggestion="Set playbook_compatible=True in OpenCTIConnectorHelper().", + ), + ) + else: + results.append( + CheckFinding( + message="playbook_compatible is not set in OpenCTIConnectorHelper()", + severity=Severity.ERROR, + suggestion=( + "Add playbook_compatible=True to your " + "OpenCTIConnectorHelper() call. Ensure the connector " + "sends a bundle back in all paths (success, not-in-scope, error)." + ), + ), + ) + + # --------------------------------------------------------------------------- + # Sub-check B: send_stix2_bundle() is called + # + # Severity is WARNING (not ERROR) because the bundle-based flow is the + # ideal pattern for playbook compatibility, but some connectors may use + # alternative methods. Missing send_stix2_bundle is a strong signal + # the connector won't forward enriched data through playbooks. + # --------------------------------------------------------------------------- + bundle_hits = _find_send_bundle_calls(trees) + if not bundle_hits: + results.append( + CheckFinding( + message=( + "send_stix2_bundle is never called — playbook cannot " + "forward the enriched bundle" + ), + severity=Severity.WARNING, + suggestion=( + "Use self.helper.send_stix2_bundle() to send enriched " + "data. The bundle must be sent in all paths: success, " + "not-in-scope (original bundle), and error (original bundle)." + ), + ), + ) + + return results diff --git a/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc322_former_bundle.py b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc322_former_bundle.py new file mode 100644 index 00000000000..c182c6cfb70 --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc322_former_bundle.py @@ -0,0 +1,90 @@ +"""VC322 — Enrichment connector must read the former bundle from data. + +For playbook compatibility the connector must read ``data["stix_objects"]`` +(the original bundle) early in ``process_message`` so it can be returned +in **every** code path: success, not-in-scope, and error. + +Scope: INTERNAL_ENRICHMENT only. +Severity: ERROR. +""" + +import re + +from connector_linter.checks.vc3xx_code._helpers import ( + find_pattern_locations, +) +from connector_linter.models import ( + CheckFinding, + ConnectorContext, + ConnectorType, + Severity, + no_python_sources_finding, +) +from connector_linter.registry import CheckRegistry + +# --------------------------------------------------------------------------- +# Regex: detect access to data['stix_objects'] or data["stix_objects"] +# +# Matches patterns like: +# data['stix_objects'] +# data["stix_objects"] +# data [ 'stix_objects' ] (with optional whitespace) +# +# The stix_objects field in the incoming data dict contains the original +# STIX bundle that the platform sent to the enrichment connector. +# Reading it early in process_message is essential so it can be returned +# unchanged in all 3 code paths: +# 1. Success — enriched objects appended to original bundle +# 2. Not-in-scope — original bundle returned as-is for playbook continuity +# 3. Error — original bundle returned so the playbook is not broken +# --------------------------------------------------------------------------- +_STIX_OBJECTS_DATA = re.compile(r"""data\s*\[\s*['"]stix_objects['"]\s*\]""") + +# Only enrichment connectors receive data['stix_objects'] from the platform. +# External-import connectors fetch data themselves and don't receive bundles. + + +@CheckRegistry.register( + code="VC322", + name="former-bundle-read", + description=( + "Enrichment connector must read data['stix_objects'] " + "(former bundle) for playbook compatibility" + ), + severity=Severity.ERROR, + applicable_types={ConnectorType.INTERNAL_ENRICHMENT}, +) +def check_former_bundle(ctx: ConnectorContext) -> list[CheckFinding]: + """Check that data['stix_objects'] is read.""" + sources = ctx.python_sources + if not sources: + return [no_python_sources_finding()] + + locations = find_pattern_locations(sources, [_STIX_OBJECTS_DATA]) + + if not locations: + return [ + CheckFinding( + message=( + "data['stix_objects'] is never read — the original " + "bundle cannot be returned on error or not-in-scope" + ), + severity=Severity.ERROR, + suggestion=( + "Read the former bundle with " + "stix_objects = data['stix_objects'] early in " + "process_message. Send it back unchanged on error " + "or when entity is not in scope (playbook compatibility)." + ), + ), + ] + + first = locations[0] + return [ + CheckFinding( + message="Former bundle is read from data['stix_objects']", + severity=Severity.INFO, + file_path=first[0], + line=first[1], + ), + ] diff --git a/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc323_helper_listen_stream.py b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc323_helper_listen_stream.py new file mode 100644 index 00000000000..d0d09cb0916 --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc323_helper_listen_stream.py @@ -0,0 +1,78 @@ +"""VC323 — Stream connectors must use helper.listen_stream(). + +Stream connectors receive live events from the platform via +``self.helper.listen_stream(message_callback=self.process_message)``. + +Scope: STREAM only. +""" + +import re + +from connector_linter.checks.vc3xx_code._helpers import ( + find_pattern_locations, +) +from connector_linter.models import ( + CheckFinding, + ConnectorContext, + ConnectorType, + Severity, + no_python_sources_finding, +) +from connector_linter.registry import CheckRegistry + +# --------------------------------------------------------------------------- +# Regex: detect .listen_stream( calls in source code +# +# Matches the method call pattern: +# .listen_stream( — with optional whitespace before the paren +# +# This is the stream-specific counterpart to VC318's helper.listen(): +# - VC318 checks helper.listen() → enrichment connectors (event-driven) +# - VC323 checks helper.listen_stream() → stream connectors (live event stream) +# +# Stream connectors receive the full event stream from the OpenCTI platform +# (create, update, delete events) via listen_stream, whereas enrichment +# connectors receive individual entity enrichment requests via listen. +# --------------------------------------------------------------------------- +_LISTEN_STREAM = re.compile(r"""\.listen_stream\s*\(""") + +# Only STREAM type connectors use listen_stream. +# Enrichment connectors use helper.listen() (checked by VC318). + + +@CheckRegistry.register( + code="VC323", + name="helper-listen-stream", + description="Stream connectors must use helper.listen_stream()", + severity=Severity.ERROR, + applicable_types={ConnectorType.STREAM}, +) +def check_helper_listen_stream(ctx: ConnectorContext) -> list[CheckFinding]: + """Check that the connector uses helper.listen_stream().""" + sources = ctx.python_sources + if not sources: + return [no_python_sources_finding()] + + locations = find_pattern_locations(sources, [_LISTEN_STREAM]) + + if not locations: + return [ + CheckFinding( + message="helper.listen_stream() not found — stream connector is not receiving events", + severity=Severity.ERROR, + suggestion=( + "Add self.helper.listen_stream(message_callback=self.process_message) " + "in the run method to receive live events from the platform." + ), + ), + ] + + first = locations[0] + return [ + CheckFinding( + message="Connector uses helper.listen_stream() for event processing", + severity=Severity.INFO, + file_path=first[0], + line=first[1], + ), + ] diff --git a/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc324_relationship_start_stop.py b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc324_relationship_start_stop.py new file mode 100644 index 00000000000..a154f21d370 --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc324_relationship_start_stop.py @@ -0,0 +1,203 @@ +"""VC324 — Relationship objects should not set both start_time and stop_time. + +When a STIX Relationship object includes both ``start_time`` and ``stop_time``, +OpenCTI's deduplication uses the time window as part of the relationship's +identity. This means that different time ranges between the same source and +target create **distinct** relationship objects rather than merging into one. + +Connectors that set wide or varying time spans can therefore produce many +duplicate-looking relationships in the platform, inflating the knowledge graph +and causing confusion during analysis. + +**Recommendation:** + +- If temporal context matters, use only ``start_time`` (omit ``stop_time``). +- If the relationship is not time-bound, omit both properties entirely. +- If you absolutely need both, ensure the time window is narrow and intentional. + +This check detects direct ``Relationship()`` / ``stix2.Relationship()`` / +``stix2.v21.Relationship()`` constructor calls that pass both ``start_time=`` +and ``stop_time=`` as keyword arguments. + +**Limitations:** + +- Does not detect ``start_time`` / ``stop_time`` set inside a + ``custom_properties`` dict. +- Does not resolve aliases (e.g. ``Rel = stix2.Relationship``). + +Severity: WARNING (the pattern is valid STIX 2.1 but can cause unintended +relationship duplication). +Scope: Common (all connector types). + +Reference: + STIX 2.1 §5.1 — Relationship Object + https://docs.oasis-open.org/cti/stix/v2.1/os/stix-v2.1-os.html#_2i4bto1y4jwa +""" + +import ast +from pathlib import Path + +from connector_linter.models import ( + CheckFinding, + ConnectorContext, + Severity, +) +from connector_linter.registry import CheckRegistry + +# --------------------------------------------------------------------------- +# Names that identify a Relationship constructor call. +# +# We check for: +# - Relationship(...) → bare name (imported from stix2) +# - stix2.Relationship(...) → qualified name +# - stix2.v21.Relationship(...) → fully-qualified name (less common) +# --------------------------------------------------------------------------- +_RELATIONSHIP_NAMES = {"Relationship"} + + +def _is_relationship_call(node: ast.Call) -> bool: + """Return True if ``node`` is a call to a Relationship constructor. + + Matches three patterns: + + 1. ``Relationship(...)`` — bare imported name + 2. ``stix2.Relationship(...)`` — module-qualified + 3. ``stix2.v21.Relationship(...)`` — fully-qualified (rare) + """ + func = node.func + + # Pattern 1: Relationship(...) + if isinstance(func, ast.Name) and func.id in _RELATIONSHIP_NAMES: + return True + + # Pattern 2: stix2.Relationship(...) + if ( + isinstance(func, ast.Attribute) + and func.attr in _RELATIONSHIP_NAMES + and isinstance(func.value, ast.Name) + and func.value.id == "stix2" + ): + return True + + # Pattern 3: stix2.v21.Relationship(...) + if ( + isinstance(func, ast.Attribute) + and func.attr in _RELATIONSHIP_NAMES + and isinstance(func.value, ast.Attribute) + and func.value.attr == "v21" + and isinstance(func.value.value, ast.Name) + and func.value.value.id == "stix2" + ): + return True + + return False + + +def _has_both_start_stop_kwargs(node: ast.Call) -> bool: + """Check if a Call node has both ``start_time=`` and ``stop_time=`` kwargs. + + This covers the most common pattern: + + Relationship( + ..., + start_time="2020-01-01T00:00:00Z", + stop_time="2024-01-01T00:00:00Z", + ) + """ + kwarg_names = {kw.arg for kw in node.keywords if kw.arg is not None} + return "start_time" in kwarg_names and "stop_time" in kwarg_names + + +def _find_relationship_with_start_stop( + trees: dict[Path, ast.Module], +) -> list[tuple[Path, int]]: + """Walk all ASTs to find Relationship() calls with both start_time and stop_time. + + Returns a list of (file_path, line_number) for each violation found. + """ + hits: list[tuple[Path, int]] = [] + + for file_path, tree in trees.items(): + for node in ast.walk(tree): + # We only care about function/constructor calls + if not isinstance(node, ast.Call): + continue + + # Skip calls that are not Relationship constructors + if not _is_relationship_call(node): + continue + + # Check if both start_time= and stop_time= are present + if _has_both_start_stop_kwargs(node): + hits.append((file_path, node.lineno)) + + return hits + + +# --------------------------------------------------------------------------- +# Registry entry +# --------------------------------------------------------------------------- + + +@CheckRegistry.register( + code="VC324", + name="relationship-start-stop-time", + description=( + "Relationship should not set both start_time and stop_time " + "(can overload Redis with time-bucketed duplicates)" + ), + severity=Severity.WARNING, +) +def check_relationship_start_stop_time(ctx: ConnectorContext) -> list[CheckFinding]: + """Warn when Relationship objects use both start_time and stop_time. + + Setting both properties causes OpenCTI to create a separate relationship + for each time bucket in the [start_time, stop_time] range. For long spans, + this can generate thousands of Redis entries and degrade platform performance. + """ + sources = ctx.python_sources + + if not sources: + return [ + CheckFinding( + message="No Python source files found in src/", + severity=Severity.ERROR, + ), + ] + + trees = ctx.python_trees + + # Find all Relationship() calls with both start_time and stop_time + hits = _find_relationship_with_start_stop(trees) + + if not hits: + return [ + CheckFinding( + message="No Relationship with both start_time and stop_time ✓", + severity=Severity.INFO, + ), + ] + + # Report each occurrence as a warning + results: list[CheckFinding] = [] + for file_path, line_no in hits: + results.append( + CheckFinding( + message=( + f"{file_path}:{line_no}: Relationship() sets both " + f"start_time and stop_time" + ), + severity=Severity.WARNING, # WARNING-level: advisory, not a blocker + file_path=file_path, + line=line_no, + suggestion=( + "Setting both start_time and stop_time on a Relationship " + "causes OpenCTI to create one object per time bucket in " + "that range — potentially thousands of Redis entries. " + "Use only start_time (omit stop_time) or remove both " + "if the relationship is not time-bound." + ), + ), + ) + + return results diff --git a/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc325_minimal_settings_tests.py b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc325_minimal_settings_tests.py new file mode 100644 index 00000000000..7076ec16f41 --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc3xx_code/vc325_minimal_settings_tests.py @@ -0,0 +1,247 @@ +"""VC325 — Connector must have minimal settings tests. + +Verified connectors must include at minimum a settings test that: + +1. Exercises ``ConnectorSettings`` with **valid** input (all required fields + present) and asserts the object is created successfully. +2. Exercises ``ConnectorSettings`` with **invalid** input (missing a required + field) and asserts ``ConfigValidationError`` is raised. + +This baseline matches the pattern established in the connector templates +(``templates//tests/tests_connector/test_settings.py``). + +Detection is AST-based: +- A settings test file is one whose name contains "settings" or that + contains an ``ImportFrom`` of ``ConnectorSettings``. +- Valid-input coverage is detected by finding an ``Assign`` or ``AnnAssign`` + whose right-hand side is a ``Call`` to a class whose name ends in + ``"Settings"`` — i.e., ``settings = FakeConnectorSettings()``. +- Error-input coverage is detected by finding a ``pytest.raises(...)`` call. + +Missing a settings test file is a WARNING (tests exist, just not for +settings). Missing valid-input or error-input coverage inside an existing +settings test is an ERROR. + +Scope: Common (all connector types). +""" + +import ast +from pathlib import Path + +from connector_linter.models import CheckFinding, ConnectorContext, Severity +from connector_linter.registry import CheckRegistry + + +def _read_test_files(ctx: ConnectorContext) -> dict[Path, str]: + """Read all ``test_*.py`` files from the connector's ``tests/`` directory.""" + sources: dict[Path, str] = {} + tests_dir = ctx.path / "tests" + if not tests_dir.exists(): + return sources + for py_file in tests_dir.rglob("test_*.py"): + rel_path = py_file.relative_to(ctx.path) + try: + sources[rel_path] = py_file.read_text(encoding="utf-8", errors="replace") + except OSError: + continue + return sources + + +def _parse_test_files(sources: dict[Path, str]) -> dict[Path, ast.Module]: + """Parse test source files into AST modules, skipping files with syntax errors.""" + trees: dict[Path, ast.Module] = {} + for file_path, content in sources.items(): + try: + trees[file_path] = ast.parse(content, filename=str(file_path)) + except SyntaxError: + continue + return trees + + +def _imports_connector_settings(tree: ast.Module) -> bool: + """Return ``True`` if the module imports ``ConnectorSettings``.""" + for node in ast.walk(tree): + if isinstance(node, ast.ImportFrom): + for alias in node.names: + if alias.name == "ConnectorSettings": + return True + return False + + +class _SettingsCallFinder(ast.NodeVisitor): + """Locate ``*Settings()`` or ``*Loader()`` calls that are **not** inside + a ``pytest.raises(...)`` block. + + Handles all forms observed in the connector codebase: + + * Direct assignment: ``settings = FakeConnectorSettings()`` + * Method chaining: ``config = ConnectorSettings().model_dump()`` + * Bare expression: ``ConnectorSettings()`` (mokn-style smoke test) + * Config-loader name: ``settings = FakeConfigLoader(**d)`` + """ + + def __init__(self) -> None: + self._inside_raises_depth: int = 0 + self.found: bool = False + + def visit_With(self, node: ast.With) -> None: + is_raises = any( + isinstance(item.context_expr, ast.Call) + and isinstance(item.context_expr.func, ast.Attribute) + and item.context_expr.func.attr == "raises" + and isinstance(item.context_expr.func.value, ast.Name) + and item.context_expr.func.value.id == "pytest" + for item in node.items + ) + if is_raises: + self._inside_raises_depth += 1 + self.generic_visit(node) + if is_raises: + self._inside_raises_depth -= 1 + + def visit_Call(self, node: ast.Call) -> None: + if ( + self._inside_raises_depth == 0 + and isinstance(node.func, ast.Name) + and (node.func.id.endswith("Settings") or node.func.id.endswith("Loader")) + ): + self.found = True + self.generic_visit(node) + + +def _has_settings_valid_call(tree: ast.Module) -> bool: + """Return ``True`` if the module calls a ``*Settings()`` or ``*Loader()`` + class outside of a ``pytest.raises(...)`` block.""" + finder = _SettingsCallFinder() + finder.visit(tree) + return finder.found + + +def _has_pytest_raises(tree: ast.Module) -> bool: + """Return ``True`` if the module calls ``pytest.raises(...)``.""" + for node in ast.walk(tree): + if ( + isinstance(node, ast.Call) + and isinstance(node.func, ast.Attribute) + and node.func.attr == "raises" + and isinstance(node.func.value, ast.Name) + and node.func.value.id == "pytest" + ): + return True + return False + + +@CheckRegistry.register( + code="VC325", + name="minimal-settings-tests", + description="Connector must have minimal settings tests covering valid and invalid inputs", + severity=Severity.ERROR, +) +def check_minimal_settings_tests(ctx: ConnectorContext) -> list[CheckFinding]: + """Check that the connector has minimal settings tests.""" + if not ctx.has_tests: + return [ + CheckFinding( + message="No tests/ directory found", + severity=Severity.ERROR, + suggestion=( + "Create a tests/ directory with at minimum a " + "tests_connector/test_settings.py that verifies ConnectorSettings " + "accepts valid input and raises ConfigValidationError for missing " + "required fields (see templates//tests/ for the expected pattern)" + ), + ) + ] + + test_sources = _read_test_files(ctx) + if not test_sources: + return [ + CheckFinding( + message="No test files (test_*.py) found in tests/", + severity=Severity.ERROR, + suggestion=( + "Add tests/tests_connector/test_settings.py that verifies " + "ConnectorSettings accepts valid input and raises " + "ConfigValidationError for missing required fields" + ), + ) + ] + + trees = _parse_test_files(test_sources) + + # A settings test file is identified by filename or by importing ConnectorSettings. + settings_test_trees = { + path: tree + for path, tree in trees.items() + if "settings" in path.name.lower() or _imports_connector_settings(tree) + } + + if not settings_test_trees: + return [ + CheckFinding( + message=( + "No settings test file found in tests/ " + "(expected a file named test_settings*.py or one that imports ConnectorSettings)" + ), + # Advisory: the connector has other tests, but settings are not covered yet. + severity=Severity.WARNING, + suggestion=( + "Create tests/tests_connector/test_settings.py that imports " + "ConnectorSettings and tests both valid input and " + "missing required fields (raises ConfigValidationError)" + ), + ) + ] + + has_valid_test = any( + _has_settings_valid_call(tree) for tree in settings_test_trees.values() + ) + has_error_test = any( + _has_pytest_raises(tree) for tree in settings_test_trees.values() + ) + + results: list[CheckFinding] = [] + settings_paths = ", ".join(str(p) for p in settings_test_trees) + + if not has_valid_test: + results.append( + CheckFinding( + message=( + f"Settings test(s) ({settings_paths}) do not cover valid input " + "(no *Settings() or *Loader() call found outside pytest.raises)" + ), + severity=Severity.ERROR, + suggestion=( + "Add a parametrized test that instantiates ConnectorSettings (or a " + "fake subclass) with a valid config dict and asserts the settings " + "object loads correctly " + "(see templates//tests/tests_connector/test_settings.py)" + ), + ) + ) + + if not has_error_test: + results.append( + CheckFinding( + message=( + f"Settings test(s) ({settings_paths}) do not cover missing required fields " + "(no pytest.raises(...) call found)" + ), + severity=Severity.WARNING, + suggestion=( + "Add a test using pytest.raises(ConfigValidationError) that verifies " + "required settings raise an error when missing " + "(see templates//tests/tests_connector/test_settings.py)" + ), + ) + ) + + if results: + return results + + return [ + CheckFinding( + message=f"Settings tests cover both valid and invalid inputs ✓ ({settings_paths})", + severity=Severity.INFO, + ) + ] diff --git a/shared/tools/connector_linter/connector_linter/checks/vc4xx_docker/__init__.py b/shared/tools/connector_linter/connector_linter/checks/vc4xx_docker/__init__.py new file mode 100644 index 00000000000..f78d0cd52f0 --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc4xx_docker/__init__.py @@ -0,0 +1,8 @@ +"""VC4xx — Docker checks. + +Validates Docker configuration (Dockerfile, docker-compose.yml) for +compliance with OpenCTI verified-connector conventions. + +VC401 docker-compose-image Image must use :latest tag and match directory name +VC402 no-entrypoint-sh Dockerfile must not use entrypoint.sh +""" diff --git a/shared/tools/connector_linter/connector_linter/checks/vc4xx_docker/vc401_docker_compose_image.py b/shared/tools/connector_linter/connector_linter/checks/vc4xx_docker/vc401_docker_compose_image.py new file mode 100644 index 00000000000..f4d8b638dcb --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc4xx_docker/vc401_docker_compose_image.py @@ -0,0 +1,149 @@ +"""VC401 — docker-compose.yml image must use ``latest`` tag and match directory name. + +The ``image:`` line in ``docker-compose.yml`` must follow the pattern:: + + image: opencti/connector-:latest + +Rules: + +1. Tag must be ``:latest`` (not a pinned version like ``6.7.7``). +2. Image name must be ``opencti/connector-`` where ```` + is the connector's directory name (for Docker Hub automation). + +Scope: Common (all connector types). +""" + +import re + +from connector_linter.models import CheckFinding, ConnectorContext, Severity +from connector_linter.registry import CheckRegistry + +# --------------------------------------------------------------------------- +# Regex: YAML image: line in docker-compose.yml +# +# Matches lines like: +# image: opencti/connector-mandiant:latest +# image: opencti/connector-abuse-ssl:6.7.7 +# +# Capture group "image" grabs everything after "image:" up to whitespace +# or an inline comment. Leading whitespace is tolerated (YAML indentation). +# +# NOTE: This is a simple regex, not a full YAML parser — it works because +# docker-compose files have a predictable structure for image: lines. +# --------------------------------------------------------------------------- +_IMAGE_RE = re.compile( + r"^\s*image:\s*(?P[^\s#]+)", + re.MULTILINE, +) + + +@CheckRegistry.register( + code="VC401", + name="docker-compose-image", + description="docker-compose.yml image must use :latest and match directory name", + severity=Severity.ERROR, +) +def check_docker_compose_image(ctx: ConnectorContext) -> list[CheckFinding]: + """Check docker-compose.yml image tag and naming.""" + compose_path = ctx.path / "docker-compose.yml" + if not compose_path.is_file(): + return [ + CheckFinding( + message="docker-compose.yml not found", + severity=Severity.ERROR, + suggestion="Add a docker-compose.yml file.", + ), + ] + + with compose_path.open(encoding="utf-8") as f: + content = f.read() + + m = _IMAGE_RE.search(content) + if not m: + return [ + CheckFinding( + message="No 'image:' line found in docker-compose.yml", + severity=Severity.ERROR, + suggestion="Add an 'image:' line (e.g. opencti/connector-:latest).", + ), + ] + + image_full = m.group("image").strip() + # Find line number + line_no = content[: m.start()].count("\n") + 1 + + results: list[CheckFinding] = [] + dirname = ctx.path.name + expected_image = f"opencti/connector-{dirname}" + expected_full = f"{expected_image}:latest" + + # --------------------------------------------------------------------------- + # Split the image string into name and tag. + # + # Use rsplit(":", 1) to split from the right — this correctly handles + # registry prefixes that contain colons (e.g. registry.io:5000/image:tag). + # If there is no ":", the image has no tag (tag = ""). + # + # NOTE: VC401 checks for ":latest" in docker-compose.yml, while VC202 + # checks for "rolling" in the manifest. These are different contexts: + # docker-compose.yml → users pull ":latest" from Docker Hub + # connector_manifest.json → CI uses "rolling" as a build policy marker + # --------------------------------------------------------------------------- + if ":" in image_full: + image_name, tag = image_full.rsplit(":", 1) + else: + image_name, tag = image_full, "" + + # --- Sub-check A: tag must be :latest --- + # Pinned tags (e.g. :6.7.7) prevent users from getting updates + # automatically. The sample should always use :latest. + if tag == "latest": + results.append( + CheckFinding( + message="Image uses :latest tag ✓", + severity=Severity.INFO, + file_path=compose_path, + line=line_no, + ), + ) + else: + results.append( + CheckFinding( + message=f"Image tag is :{tag or '(none)'} — must be :latest", + severity=Severity.ERROR, + file_path=compose_path, + line=line_no, + suggestion=f"Change to {expected_full} for stable deployment.", + ), + ) + + # --- Sub-check B: image name must match directory --- + # The image name must follow the convention opencti/connector- + # so Docker Hub automation and platform discovery work correctly. + if image_name == expected_image: + results.append( + CheckFinding( + message=f"Image name matches directory: {expected_image} ✓", + severity=Severity.INFO, + file_path=compose_path, + line=line_no, + ), + ) + else: + results.append( + CheckFinding( + message=( + f"Image name '{image_name}' does not match " + f"expected '{expected_image}'" + ), + severity=Severity.ERROR, + file_path=compose_path, + line=line_no, + suggestion=( + f"Use {expected_full} — image name must match the " + f"directory name for Docker Hub automation." + ), + ), + ) + + return results diff --git a/shared/tools/connector_linter/connector_linter/checks/vc4xx_docker/vc402_no_entrypoint_sh.py b/shared/tools/connector_linter/connector_linter/checks/vc4xx_docker/vc402_no_entrypoint_sh.py new file mode 100644 index 00000000000..195992bff95 --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc4xx_docker/vc402_no_entrypoint_sh.py @@ -0,0 +1,118 @@ +"""VC402 — Dockerfile must not use entrypoint.sh. + +Modern connectors should use a direct ``ENTRYPOINT`` command:: + + ENTRYPOINT ["python", "main.py"] + +The legacy ``entrypoint.sh`` wrapper (which just ``cd`` + ``python3 main.py``) +adds unnecessary indirection and an extra file to maintain. + +Scope: Common (all connector types). +""" + +import re + +from connector_linter.models import CheckFinding, ConnectorContext, Severity +from connector_linter.registry import CheckRegistry + +# --------------------------------------------------------------------------- +# Regex: references to entrypoint.sh anywhere in a Dockerfile line. +# +# Matches any line that mentions "entrypoint.sh" (case-insensitive). +# Used to detect the legacy pattern: +# COPY entrypoint.sh / +# ENTRYPOINT ["/entrypoint.sh"] +# --------------------------------------------------------------------------- +_ENTRYPOINT_SH_RE = re.compile(r"entrypoint\.sh", re.IGNORECASE) + +# --------------------------------------------------------------------------- +# Regex: direct Python ENTRYPOINT (the preferred modern pattern). +# +# Matches lines like: +# ENTRYPOINT ["python", "-m", "connector"] +# ENTRYPOINT ["python3", "main.py"] +# +# The key requirement is the JSON-exec form with "python" as the first +# argument. This avoids the unnecessary entrypoint.sh wrapper script. +# --------------------------------------------------------------------------- +_ENTRYPOINT_DIRECT_RE = re.compile(r'ENTRYPOINT\s+\[.*"python"', re.IGNORECASE) + + +@CheckRegistry.register( + code="VC402", + name="no-entrypoint-sh", + description="Dockerfile must not use entrypoint.sh — use direct ENTRYPOINT", + severity=Severity.ERROR, +) +def check_no_entrypoint_sh(ctx: ConnectorContext) -> list[CheckFinding]: + """Check that Dockerfile does not reference entrypoint.sh.""" + dockerfile_path = ctx.path / "Dockerfile" + if not dockerfile_path.is_file(): + return [ + CheckFinding( + message="No Dockerfile found", + severity=Severity.ERROR, + suggestion="Add a Dockerfile to the connector.", + ), + ] + + with dockerfile_path.open(encoding="utf-8") as f: + content = f.read() + + lines = content.splitlines() + + # --------------------------------------------------------------------------- + # Detection priority: + # 1. First, scan for entrypoint.sh references (the "bad" pattern). + # Commented-out lines (# COPY entrypoint.sh) are skipped — they are + # remnants of a migration and not active. + # 2. If no entrypoint.sh found, check for a direct Python ENTRYPOINT + # (the "good" pattern) and report it as passing. + # 3. Fallback: no entrypoint.sh AND no direct ENTRYPOINT — still PASS + # because the absence of entrypoint.sh is the primary goal. + # --------------------------------------------------------------------------- + sh_hits: list[tuple[int, str]] = [] + for i, line in enumerate(lines, 1): + # Skip commented Dockerfile lines — they don't affect the build + if _ENTRYPOINT_SH_RE.search(line) and not line.lstrip().startswith("#"): + sh_hits.append((i, line.strip())) + + if sh_hits: + first = sh_hits[0] + return [ + CheckFinding( + message=f"Dockerfile uses entrypoint.sh at line {first[0]}", + severity=Severity.ERROR, + file_path=dockerfile_path, + line=first[0], + suggestion=( + "Remove entrypoint.sh and use " + 'ENTRYPOINT ["python", "main.py"] ' + "or similar direct Python invocation." + ), + ), + ] + + # No entrypoint.sh found — check for the preferred direct ENTRYPOINT + if _ENTRYPOINT_DIRECT_RE.search(content): + for i, line in enumerate(lines, 1): + if _ENTRYPOINT_DIRECT_RE.search(line): + return [ + CheckFinding( + message="Dockerfile uses direct Python ENTRYPOINT ✓", + severity=Severity.INFO, + file_path=dockerfile_path, + line=i, + ), + ] + + # Fallback: no entrypoint.sh reference at all — this is fine. + # The connector might use CMD or some other mechanism; the key + # requirement is just the absence of the legacy entrypoint.sh wrapper. + return [ + CheckFinding( + message="No entrypoint.sh reference found ✓", + severity=Severity.INFO, + file_path=dockerfile_path, + ), + ] diff --git a/shared/tools/connector_linter/connector_linter/checks/vc5xx_deprecation/__init__.py b/shared/tools/connector_linter/connector_linter/checks/vc5xx_deprecation/__init__.py new file mode 100644 index 00000000000..efcd428e669 --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc5xx_deprecation/__init__.py @@ -0,0 +1,12 @@ +"""VC5xx — Deprecation checks. + +Detects usage of deprecated patterns, configuration variables, and APIs +that must be migrated for verified-connector status. + +VC501 no-legacy-interval Must use duration_period (ISO 8601), not interval +VC502 no-deprecated-report-status Must not use deprecated x_opencti_report_status +VC503 no-deprecated-helper-logger Must use connector_logger instead of helper.log_{level}() +VC504 no-deprecated-confidence Must not use deprecated confidence level (since 6.0) +VC505 no-direct-api-calls Connector should not use direct GraphQL API calls +VC506 no-update-existing-data Must not use deprecated UPDATE_EXISTING_DATA +""" diff --git a/shared/tools/connector_linter/connector_linter/checks/vc5xx_deprecation/_helpers.py b/shared/tools/connector_linter/connector_linter/checks/vc5xx_deprecation/_helpers.py new file mode 100644 index 00000000000..149461064c4 --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc5xx_deprecation/_helpers.py @@ -0,0 +1,21 @@ +"""Shared AST helpers for vc5xx deprecation checks.""" + +import ast + +# Known helper variable names across the connector codebase. +_HELPER_NAMES = frozenset({"helper", "_helper"}) + + +def is_helper_node(node: ast.expr) -> bool: + """Return True if *node* refers to a helper variable. + + Accepts: + - ``ast.Name(id="helper")`` / ``ast.Name(id="_helper")`` (bare name) + - ``ast.Attribute(attr="helper")`` / ``ast.Attribute(attr="_helper")`` + (qualified, e.g. ``self.helper``) + """ + if isinstance(node, ast.Name) and node.id in _HELPER_NAMES: + return True + if isinstance(node, ast.Attribute) and node.attr in _HELPER_NAMES: + return True + return False diff --git a/shared/tools/connector_linter/connector_linter/checks/vc5xx_deprecation/vc501_no_legacy_interval.py b/shared/tools/connector_linter/connector_linter/checks/vc5xx_deprecation/vc501_no_legacy_interval.py new file mode 100644 index 00000000000..eeadad2c411 --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc5xx_deprecation/vc501_no_legacy_interval.py @@ -0,0 +1,136 @@ +"""VC501 — Connectors must use ``duration_period`` (ISO 8601), not legacy interval. + +The legacy ``*_INTERVAL`` configuration pattern (minutes, hours, days as +plain integers) and ``schedule_unit()`` are deprecated. Connectors must +migrate to: + +- ``CONNECTOR_DURATION_PERIOD`` (ISO 8601 format, e.g. ``PT30M``, ``P7D``) +- ``self.helper.schedule_iso()`` or ``schedule_process()`` for scheduling + +The SDK's deprecation mechanism (``DeprecatedField``) should be used to +provide backwards compatibility during the migration window. + +Scope: EXTERNAL_IMPORT (scheduling is only relevant for importers). +""" + +import ast +import re + +from connector_linter.checks.vc1xx_config._helpers import extract_all_env_vars +from connector_linter.models import ( + CheckFinding, + ConnectorContext, + ConnectorType, + Severity, +) +from connector_linter.registry import CheckRegistry + +# --------------------------------------------------------------------------- +# Regex: detect legacy interval configuration variable names +# +# Two patterns are flagged: +# 1. *_INTERVAL$ — any env var ending in _INTERVAL +# e.g. CONNECTOR_INTERVAL, DOPPEL_INTERVAL, IMPORT_INTERVAL +# 2. ^CONNECTOR_RUN_EVERY$ — another legacy naming convention +# +# The modern replacement is CONNECTOR_DURATION_PERIOD using ISO 8601 +# duration format (e.g. PT30M = 30 minutes, PT2H = 2 hours, P7D = 7 days). +# The numeric interval approach (minutes/hours/days as plain integers) is +# error-prone and does not encode the time unit in the value itself. +# --------------------------------------------------------------------------- +_INTERVAL_VAR_RE = re.compile(r"_INTERVAL$|^CONNECTOR_RUN_EVERY$") + + +def _check_interval_config(ctx: ConnectorContext) -> list[CheckFinding]: + """Detect legacy _INTERVAL config variables. + + Scans all env vars extracted from docker-compose.yml and .env files + for variable names that match the legacy interval naming pattern. + """ + results: list[CheckFinding] = [] + env_vars = extract_all_env_vars(ctx) + + for var in env_vars: + if var.is_commented: + continue + if _INTERVAL_VAR_RE.search(var.name): + results.append( + CheckFinding( + message=(f"{var.name}={var.value} — legacy interval variable"), + severity=Severity.ERROR, + file_path=var.file_path, + line=var.line, + suggestion=( + "Replace with CONNECTOR_DURATION_PERIOD using ISO 8601 " + "format (e.g. PT30M, PT2H, P7D). Use SDK DeprecatedField " + "for backwards compatibility." + ), + ), + ) + + return results + + +def _check_schedule_unit(ctx: ConnectorContext) -> list[CheckFinding]: + """Detect schedule_unit() calls (deprecated). + + Uses AST analysis to find *.schedule_unit() method calls. The + schedule_unit() method was used with the legacy interval pattern + to convert numeric intervals with a unit (minutes, hours, days) + into seconds. It is replaced by schedule_iso() or schedule_process() + which work directly with ISO 8601 duration strings. + """ + sources = ctx.python_sources + if not sources: + return [] + + trees = ctx.python_trees + results: list[CheckFinding] = [] + + for file_path, tree in trees.items(): + for node in ast.walk(tree): + if not isinstance(node, ast.Call): + continue + func = node.func + if isinstance(func, ast.Attribute) and func.attr == "schedule_unit": + results.append( + CheckFinding( + message="uses deprecated schedule_unit()", + severity=Severity.ERROR, + file_path=file_path, + line=node.lineno, + suggestion=( + "Replace schedule_unit() with schedule_iso() or " + "schedule_process(). Use duration_period (ISO 8601) " + "instead of numeric intervals with time units." + ), + ), + ) + + return results + + +@CheckRegistry.register( + code="VC501", + name="no-legacy-interval", + description="Must use duration_period (ISO 8601), not legacy interval config", + severity=Severity.ERROR, + applicable_types={ConnectorType.EXTERNAL_IMPORT}, +) +def check_no_legacy_interval(ctx: ConnectorContext) -> list[CheckFinding]: + """Check for deprecated interval patterns.""" + # Two detection strategies: config files (env vars) and code (AST) + config_results = _check_interval_config(ctx) + code_results = _check_schedule_unit(ctx) + + all_results = config_results + code_results + + if not all_results: + return [ + CheckFinding( + message="No legacy interval patterns found ✓", + severity=Severity.INFO, + ), + ] + + return all_results diff --git a/shared/tools/connector_linter/connector_linter/checks/vc5xx_deprecation/vc502_no_report_status.py b/shared/tools/connector_linter/connector_linter/checks/vc5xx_deprecation/vc502_no_report_status.py new file mode 100644 index 00000000000..62a960f228e --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc5xx_deprecation/vc502_no_report_status.py @@ -0,0 +1,122 @@ +"""VC502 — No use of deprecated ``x_opencti_report_status``. + +The custom STIX property ``x_opencti_report_status`` is deprecated and +no longer functional. Connectors must not set it on any STIX object. + +Note: ``x_opencti_workflow_id`` *works* but is fragile because the UUID +is unique per installation; it is flagged as a WARNING. + +Reference: https://github.com/OpenCTI-Platform/connectors/issues/1830 +""" + +import ast +from pathlib import Path + +from connector_linter.models import ( + CheckFinding, + ConnectorContext, + Severity, +) +from connector_linter.registry import CheckRegistry + +# Fully deprecated — this property is non-functional in current OpenCTI. +# Using it has no effect; the platform ignores it entirely. +_DEPRECATED_PROP = "x_opencti_report_status" + +# Fragile but functional — x_opencti_workflow_id works but the UUID +# is unique per OpenCTI installation. A hardcoded UUID will break when +# the connector is deployed on a different platform instance. +_FRAGILE_PROP = "x_opencti_workflow_id" + + +def _scan_with_lines( + trees: dict[Path, ast.Module], + prop_name: str, +) -> list[tuple[Path, int]]: + """Return (file, line) pairs for all keyword-arg or string-literal uses. + + Two detection patterns (both via AST): + 1. ast.keyword with arg == prop_name + Catches: SomeObject(x_opencti_report_status=value) + 2. ast.Constant with value == prop_name + Catches: string literals like "x_opencti_report_status" used as + dict keys, get_config_variable args, etc. + """ + hits: list[tuple[Path, int]] = [] + for file_path, tree in trees.items(): + for node in ast.walk(tree): + if isinstance(node, ast.keyword) and node.arg == prop_name: + # ast.keyword may not have lineno in all Python versions, + # so we use getattr with a fallback to 0 for safety. + line = getattr(node, "lineno", 0) or 0 + hits.append((file_path, line)) + elif isinstance(node, ast.Constant) and node.value == prop_name: + hits.append((file_path, node.lineno)) + return hits + + +@CheckRegistry.register( + code="VC502", + name="no-deprecated-report-status", + description="Must not use deprecated x_opencti_report_status custom property", + severity=Severity.ERROR, +) +def check_no_deprecated_report_status(ctx: ConnectorContext) -> list[CheckFinding]: + """Detect usage of x_opencti_report_status (ERROR) and warn about + x_opencti_workflow_id (WARNING). + """ + sources = ctx.python_sources + if not sources: + return [ + CheckFinding( + message="No Python sources found — skipped", + severity=Severity.ERROR, + ), + ] + + trees = ctx.python_trees + results: list[CheckFinding] = [] + + # ERROR: x_opencti_report_status is fully deprecated and non-functional. + # Any usage is dead code that should be removed. + for file_path, line in _scan_with_lines(trees, _DEPRECATED_PROP): + results.append( + CheckFinding( + message="uses deprecated x_opencti_report_status", + severity=Severity.ERROR, + file_path=file_path, + line=line, + suggestion=( + "Remove x_opencti_report_status — it is deprecated and " + "non-functional. Use workflow status changes via the " + "platform UI or API instead." + ), + ), + ) + + # WARNING (not ERROR): x_opencti_workflow_id works but the UUID is + # install-specific. Hardcoding it makes the connector non-portable. + for file_path, line in _scan_with_lines(trees, _FRAGILE_PROP): + results.append( + CheckFinding( + message=("uses x_opencti_workflow_id — UUID is install-specific"), + severity=Severity.WARNING, + file_path=file_path, + line=line, + suggestion=( + "x_opencti_workflow_id works but the UUID is unique per " + "installation. Consider managing workflow status via the " + "platform instead of hardcoding in the connector." + ), + ), + ) + + if not results: + return [ + CheckFinding( + message="No deprecated report status properties found ✓", + severity=Severity.INFO, + ), + ] + + return results diff --git a/shared/tools/connector_linter/connector_linter/checks/vc5xx_deprecation/vc503_no_helper_logger.py b/shared/tools/connector_linter/connector_linter/checks/vc5xx_deprecation/vc503_no_helper_logger.py new file mode 100644 index 00000000000..55f2feac33c --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc5xx_deprecation/vc503_no_helper_logger.py @@ -0,0 +1,151 @@ +"""VC503 — No use of deprecated helper logger ``helper.log_{level}()``. + +The legacy logging methods on ``OpenCTIConnectorHelper``: + +- ``helper.log_debug()`` +- ``helper.log_info()`` +- ``helper.log_warning()`` / ``helper.log_warn()`` +- ``helper.log_error()`` + +are deprecated. Connectors must use the structured ``connector_logger`` +instead:: + + self.helper.connector_logger.debug("message", {"key": "value"}) + self.helper.connector_logger.info("message") + self.helper.connector_logger.warning("message") + self.helper.connector_logger.error("message", {"error": str(e)}) + +Matched patterns: + +- ``self.helper.log_*()`` — qualified attribute +- ``self._helper.log_*()`` — private helper attribute +- ``helper.log_*()`` — bare helper name (common in utility functions) + +Reference: https://github.com/OpenCTI-Platform/connectors/pull/3948 + +Scope: Common (all connector types). +""" + +import ast +from pathlib import Path + +from connector_linter.checks.vc5xx_deprecation._helpers import is_helper_node +from connector_linter.models import ( + CheckFinding, + ConnectorContext, + Severity, +) +from connector_linter.registry import CheckRegistry + +# --------------------------------------------------------------------------- +# Full list of deprecated helper logging methods. +# +# These methods were the original logging API on OpenCTIConnectorHelper: +# log_debug → replaced by connector_logger.debug() +# log_info → replaced by connector_logger.info() +# log_warning → replaced by connector_logger.warning() +# log_warn → alias for log_warning, also deprecated +# log_error → replaced by connector_logger.error() +# +# The new connector_logger supports structured metadata as a second arg: +# self.helper.connector_logger.info("msg", {"key": "value"}) +# --------------------------------------------------------------------------- +_DEPRECATED_LOG_METHODS = frozenset( + { + "log_debug", + "log_info", + "log_warning", + "log_warn", + "log_error", + }, +) + + +# --------------------------------------------------------------------------- +# AST detection: find deprecated helper.log_*() calls +# +# Matches three patterns (all ending in .log_*(...)): +# +# Pattern 1 — qualified attribute: +# X.helper.log_debug(...) (e.g. self.helper.log_info()) +# X._helper.log_info(...) (e.g. self._helper.log_error()) +# +# Pattern 2 — bare name: +# helper.log_debug(...) (e.g. helper.log_info()) +# _helper.log_info(...) (e.g. _helper.log_error()) +# +# The chain is: Call → Attribute(attr=log_*) → +# Only methods in _DEPRECATED_LOG_METHODS are flagged. +# --------------------------------------------------------------------------- +def _find_deprecated_log_calls( + trees: dict[Path, ast.Module], +) -> list[tuple[Path, int, str]]: + """Return (file, line, method_name) for deprecated helper.log_*() calls.""" + hits: list[tuple[Path, int, str]] = [] + for file_path, tree in trees.items(): + for node in ast.walk(tree): + if not isinstance(node, ast.Call): + continue + func = node.func + # Match: .log_debug(), .log_info(), etc. + if ( + isinstance(func, ast.Attribute) + and func.attr in _DEPRECATED_LOG_METHODS + and is_helper_node(func.value) + ): + hits.append((file_path, node.lineno, func.attr)) + return hits + + +@CheckRegistry.register( + code="VC503", + name="no-deprecated-helper-logger", + description="Must use connector_logger instead of deprecated helper.log_{level}()", + severity=Severity.ERROR, +) +def check_no_deprecated_helper_logger(ctx: ConnectorContext) -> list[CheckFinding]: + """Detect deprecated helper.log_*() calls.""" + sources = ctx.python_sources + if not sources: + return [ + CheckFinding( + message="No Python sources found — skipped", + severity=Severity.ERROR, + ), + ] + + trees = ctx.python_trees + hits = _find_deprecated_log_calls(trees) + + if not hits: + return [ + CheckFinding( + message="No deprecated helper.log_*() calls found ✓", + severity=Severity.INFO, + ), + ] + + results: list[CheckFinding] = [] + for file_path, line, method in hits: + # Map deprecated method name to the new connector_logger equivalent. + # Strip the "log_" prefix: log_debug → debug, log_info → info, etc. + # Special case: log_warn → "warning" (Python logging uses "warning", + # not "warn"). + level = method.replace("log_", "") + if level == "warn": + level = "warning" + results.append( + CheckFinding( + message=f"uses deprecated helper.{method}()", + severity=Severity.ERROR, + file_path=file_path, + line=line, + suggestion=( + f"Replace with self.helper.connector_logger.{level}(). " + f"The connector_logger supports structured metadata as " + f'a second argument: .{level}("message", {{"key": val}})' + ), + ), + ) + + return results diff --git a/shared/tools/connector_linter/connector_linter/checks/vc5xx_deprecation/vc504_no_confidence_level.py b/shared/tools/connector_linter/connector_linter/checks/vc5xx_deprecation/vc504_no_confidence_level.py new file mode 100644 index 00000000000..cc68ca59713 --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc5xx_deprecation/vc504_no_confidence_level.py @@ -0,0 +1,168 @@ +"""VC504 — No use of deprecated ``CONFIDENCE_LEVEL`` configuration. + +Since OpenCTI 6.0, the confidence level is managed via user/group +confidence policies on the platform. It must **not** be set: + +1. In configuration files (``CONNECTOR_CONFIDENCE_LEVEL``, ``*_CONFIDENCE*`` + env vars in docker-compose.yml / .env.sample) +2. In code via ``self.helper.connect_confidence_level`` +3. As ``confidence=`` keyword argument on STIX objects + +Passing ``confidence`` on STIX objects prevents the platform from managing +it correctly through confidence policies. + +References: +- https://github.com/OpenCTI-Platform/connectors/pull/3316 +- https://github.com/OpenCTI-Platform/connectors/issues/1816 +- https://docs.opencti.io/latest/usage/reliability-confidence/ + +Scope: Common (all connector types). + +""" + +import ast +import re + +from connector_linter.checks.vc1xx_config._helpers import extract_all_env_vars +from connector_linter.models import ( + CheckFinding, + ConnectorContext, + Severity, +) +from connector_linter.registry import CheckRegistry + +# --------------------------------------------------------------------------- +# Regex: targeted match for CONFIDENCE_LEVEL or CONFIDENCE_SCORE env var names +# +# Matches env vars whose name contains "CONFIDENCE_LEVEL" or +# "CONFIDENCE_SCORE" (case-insensitive), e.g.: +# CONNECTOR_CONFIDENCE_LEVEL +# CONNECTOR_CONFIDENCE_SCORE +# +# Deliberately excludes bare "CONFIDENCE" to avoid false positives on +# unrelated env vars (e.g. SELF_CONFIDENCE, CONFIDENCE_THRESHOLD). +# +# Since OpenCTI 6.0, the platform manages confidence via user/group +# confidence policies. Connectors must not set it because: +# 1. Config var is ignored by the new connector helper +# 2. Setting confidence= on STIX objects prevents the platform from +# applying its own confidence policies correctly +# --------------------------------------------------------------------------- +_CONFIDENCE_VAR_RE = re.compile(r"CONFIDENCE_(LEVEL|SCORE)", re.IGNORECASE) + + +def _check_config_vars(ctx: ConnectorContext) -> list[CheckFinding]: + """Detect CONFIDENCE-related env vars in config files. + + Scans all env vars from docker-compose.yml and .env files for names + containing "CONFIDENCE" (case-insensitive). + """ + results: list[CheckFinding] = [] + env_vars = extract_all_env_vars(ctx) + + for var in env_vars: + if var.is_commented: + continue + if _CONFIDENCE_VAR_RE.search(var.name): + results.append( + CheckFinding( + message=( + f"{var.name}={var.value} — confidence level in config is deprecated" + ), + severity=Severity.ERROR, + file_path=var.file_path, + line=var.line, + suggestion=( + "Remove confidence level from configuration. Since " + "OpenCTI 6.0, confidence is managed via user/group " + "confidence policies on the platform." + ), + ), + ) + + return results + + +def _check_code_usage(ctx: ConnectorContext) -> list[CheckFinding]: + """Detect connect_confidence_level and confidence= kwarg in code. + + Two detection patterns via AST: + 1. Attribute access: *.connect_confidence_level + Catches: self.helper.connect_confidence_level + 2. Keyword argument: confidence= + Catches: SomeSTIXObject(confidence=80) in STIX object constructors + """ + sources = ctx.python_sources + if not sources: + return [] + + trees = ctx.python_trees + results: list[CheckFinding] = [] + + for file_path, tree in trees.items(): + for node in ast.walk(tree): + # Pattern 1: *.connect_confidence_level attribute access + if ( + isinstance(node, ast.Attribute) + and node.attr == "connect_confidence_level" + ): + results.append( + CheckFinding( + message="uses deprecated connect_confidence_level", + severity=Severity.ERROR, + file_path=file_path, + line=node.lineno, + suggestion=( + "Remove connect_confidence_level usage. Confidence " + "is now managed by user/group policies on the " + "platform, not by the connector." + ), + ), + ) + + # Pattern 2: confidence= keyword arg in STIX object construction. + # ast.keyword may lack lineno in some Python versions — use + # getattr with fallback to 0 for safety. + if isinstance(node, ast.keyword) and node.arg == "confidence": + line = getattr(node, "lineno", 0) or 0 + results.append( + CheckFinding( + message=( + "sets confidence= on STIX object — deprecated since 6.0" + ), + severity=Severity.ERROR, + file_path=file_path, + line=line, + suggestion=( + "Remove the confidence= argument. Let the platform " + "manage confidence via user/group confidence " + "policies instead of setting it on STIX objects." + ), + ), + ) + + return results + + +@CheckRegistry.register( + code="VC504", + name="no-deprecated-confidence", + description="Must not use deprecated confidence level (removed since OpenCTI 6.0)", + severity=Severity.ERROR, +) +def check_no_deprecated_confidence(ctx: ConnectorContext) -> list[CheckFinding]: + """Detect deprecated confidence level patterns.""" + config_results = _check_config_vars(ctx) + code_results = _check_code_usage(ctx) + + all_results = config_results + code_results + + if not all_results: + return [ + CheckFinding( + message="No deprecated confidence level usage found ✓", + severity=Severity.INFO, + ), + ] + + return all_results diff --git a/shared/tools/connector_linter/connector_linter/checks/vc5xx_deprecation/vc505_no_direct_api.py b/shared/tools/connector_linter/connector_linter/checks/vc5xx_deprecation/vc505_no_direct_api.py new file mode 100644 index 00000000000..762f8a62cba --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc5xx_deprecation/vc505_no_direct_api.py @@ -0,0 +1,149 @@ +"""VC505 — No direct GraphQL API calls via ``helper.api.*``. + +Connectors should send STIX bundles to OpenCTI workers rather than +making direct GraphQL API calls (e.g. ``self.helper.api.campaign.read``). + +Matched patterns: + +- ``self.helper.api.`` — qualified attribute +- ``self._helper.api.`` — private helper attribute +- ``helper.api.`` — bare helper name (common in utility functions) + +**Allowed exceptions** (not flagged): + +- ``self.helper.api.work.*`` — required for work lifecycle management +- ``self.helper.api.vocabulary.*`` — needed for vocabulary management +- ``self.helper.api.label.*`` — needed for label/tag color management +- ``self.helper.api.marking_definition.*`` — needed for marking lookups +- ``self.helper.api.fetch_opencti_file`` — needed for file retrieval +- ``self.helper.api.stix2.*`` — STIX2 utility methods + +This check emits WARNINGs since some edge cases legitimately need +direct API access. + +Scope: Common (all connector types). +""" + +import ast +from pathlib import Path + +from connector_linter.checks.vc5xx_deprecation._helpers import is_helper_node +from connector_linter.models import ( + CheckFinding, + ConnectorContext, + Severity, + no_python_sources_finding, +) +from connector_linter.registry import CheckRegistry + +# --------------------------------------------------------------------------- +# API submodules that are allowed (not flagged) +# +# These submodules have legitimate use cases that cannot be replaced by +# sending STIX bundles: +# - work — work lifecycle management (initiate, close, report) +# - vocabulary — vocabulary/dropdown management, no STIX equivalent +# - label — label/tag color management, STIX labels lack colors +# - marking_definition — TLP marking lookups for access control +# - fetch_opencti_file — file retrieval, no bundle equivalent +# - stix2 — STIX2 utility methods (conversion helpers) +# +# The architectural principle: connectors should send STIX bundles to +# OpenCTI workers for ingestion rather than making direct GraphQL API +# calls. Direct API calls bypass the worker pipeline (deduplication, +# dependency resolution, etc.) and create tight coupling to the API schema. +# --------------------------------------------------------------------------- +_ALLOWED_API_SUBMODULES = frozenset( + { + "work", + "vocabulary", + "label", + "marking_definition", + "fetch_opencti_file", + "stix2", + }, +) + + +# --------------------------------------------------------------------------- +# AST detection: find direct helper.api.* attribute access +# +# Matches three patterns (all ending in .api.): +# +# Pattern 1 — qualified attribute: +# X.helper.api. (e.g. self.helper.api.campaign) +# X._helper.api. (e.g. self._helper.api.work) +# +# Pattern 2 — bare name: +# helper.api. (e.g. helper.api.work) +# _helper.api. (e.g. _helper.api.identity) +# +# Only submodules NOT in _ALLOWED_API_SUBMODULES are flagged. +# --------------------------------------------------------------------------- +def _find_direct_api_calls( + trees: dict[Path, ast.Module], +) -> list[tuple[Path, int, str]]: + """Return (file, line, submodule) for helper.api.* attribute access.""" + hits: list[tuple[Path, int, str]] = [] + for file_path, tree in trees.items(): + for node in ast.walk(tree): + if not isinstance(node, ast.Attribute): + continue + # Match: .api. + parent = node.value + if ( + isinstance(parent, ast.Attribute) + and parent.attr == "api" + and is_helper_node(parent.value) + ): + submodule = node.attr + if submodule not in _ALLOWED_API_SUBMODULES: + hits.append((file_path, node.lineno, submodule)) + return hits + + +@CheckRegistry.register( + code="VC505", + name="no-direct-api-calls", + description="Connector should not use direct GraphQL API calls (helper.api.*)", + severity=Severity.WARNING, +) +def check_no_direct_api_calls(ctx: ConnectorContext) -> list[CheckFinding]: + """Detect direct API calls via helper.api.* (WARNING). + + Severity is WARNING (not ERROR) because some edge cases legitimately + need direct API access — e.g. reading entity relationships that cannot + be expressed in a STIX bundle query. + """ + sources = ctx.python_sources + if not sources: + return [no_python_sources_finding()] + + trees = ctx.python_trees + hits = _find_direct_api_calls(trees) + + if not hits: + return [ + CheckFinding( + message="No direct API calls found ✓", + severity=Severity.INFO, + ), + ] + + results: list[CheckFinding] = [] + for file_path, line, submodule in hits: + results.append( + CheckFinding( + message=(f"direct API call helper.api.{submodule}"), + severity=Severity.WARNING, + file_path=file_path, + line=line, + suggestion=( + "Avoid direct GraphQL API calls. Send STIX bundles to " + "OpenCTI workers instead. helper.api.work is allowed " + "for work lifecycle management." + ), + ), + ) + + return results diff --git a/shared/tools/connector_linter/connector_linter/checks/vc5xx_deprecation/vc506_no_update_existing_data.py b/shared/tools/connector_linter/connector_linter/checks/vc5xx_deprecation/vc506_no_update_existing_data.py new file mode 100644 index 00000000000..8e2554af6bc --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/checks/vc5xx_deprecation/vc506_no_update_existing_data.py @@ -0,0 +1,168 @@ +"""VC506 — No use of deprecated ``UPDATE_EXISTING_DATA``. + +The ``update_existing_data`` setting no longer exists in the connector +helper and must be removed from configuration files and code. + +Detection: +1. Config: ``*UPDATE_EXISTING_DATA*`` env vars in docker-compose / .env +2. Code: ``update_existing_data`` attribute access and string literals + +**Exception**: The ``opencti`` datasets connector (external-import/opencti) +is explicitly exempt from this check. + +Reference: +- https://github.com/OpenCTI-Platform/connectors/commit/efb345a5 + +Scope: Common (all connector types). +""" + +import ast +import re + +from connector_linter.checks.vc1xx_config._helpers import extract_all_env_vars +from connector_linter.models import ( + CheckFinding, + ConnectorContext, + Severity, +) +from connector_linter.registry import CheckRegistry + +_UPDATE_VAR_RE = re.compile(r"UPDATE_EXISTING_DATA", re.IGNORECASE) + +# The opencti datasets connector (external-import/opencti) is explicitly +# exempt because it is a special-purpose connector that manages platform +# reference data and legitimately needs update_existing_data for its +# dataset seeding workflow. +_EXEMPT_DIRNAMES = {"opencti"} + + +def _is_exempt(ctx: ConnectorContext) -> bool: + dirname = ctx.path.name + return dirname in _EXEMPT_DIRNAMES + + +def _check_config_vars(ctx: ConnectorContext) -> list[CheckFinding]: + """Detect UPDATE_EXISTING_DATA in config files. + + Scans env vars from docker-compose.yml and .env files for variable + names containing UPDATE_EXISTING_DATA (case-insensitive). + """ + results: list[CheckFinding] = [] + env_vars = extract_all_env_vars(ctx) + + for var in env_vars: + if var.is_commented: + continue + if _UPDATE_VAR_RE.search(var.name): + results.append( + CheckFinding( + message=(f"{var.name}={var.value} — deprecated setting"), + severity=Severity.ERROR, + file_path=var.file_path, + line=var.line, + suggestion=( + "Remove UPDATE_EXISTING_DATA from configuration. " + "This setting no longer exists in the connector helper." + ), + ), + ) + + return results + + +def _check_code_usage(ctx: ConnectorContext) -> list[CheckFinding]: + """Detect update_existing_data usage in Python code. + + Two detection patterns via AST: + 1. Attribute access: ``*.update_existing_data`` + Catches: ``self.update_existing_data``, ``config.update_existing_data`` + 2. String literal containing ``"UPDATE_EXISTING_DATA"`` + Catches: ``get_config_variable("CONNECTOR_UPDATE_EXISTING_DATA")``, + ``os.environ["UPDATE_EXISTING_DATA"]``, etc. + + Limitations: + - Plain variable names (``ast.Name``) like ``update_existing_data = ...`` + are not detected. This is intentional to avoid false positives on + function parameters or local variables that happen to share the name. + + The setting no longer exists in the connector helper — it was removed + and any reference to it is dead code. + """ + sources = ctx.python_sources + if not sources: + return [] + + trees = ctx.python_trees + results: list[CheckFinding] = [] + + for file_path, tree in trees.items(): + for node in ast.walk(tree): + # Attribute access: self.update_existing_data, *.update_existing_data + if isinstance(node, ast.Attribute) and node.attr == "update_existing_data": + results.append( + CheckFinding( + message=("uses deprecated update_existing_data"), + severity=Severity.ERROR, + file_path=file_path, + line=node.lineno, + suggestion=( + "Remove update_existing_data — this setting no " + "longer exists in the connector helper." + ), + ), + ) + + # String literal: "UPDATE_EXISTING_DATA" / "update_existing_data" + # This includes docstrings — if a docstring mentions this setting, + # the docstring itself is outdated and should be updated. + if ( + isinstance(node, ast.Constant) + and isinstance(node.value, str) + and _UPDATE_VAR_RE.search(node.value) + ): + results.append( + CheckFinding( + message=(f'references deprecated "{node.value}"'), + severity=Severity.ERROR, + file_path=file_path, + line=node.lineno, + suggestion=( + "Remove UPDATE_EXISTING_DATA references — this " + "setting no longer exists in the connector helper." + ), + ), + ) + + return results + + +@CheckRegistry.register( + code="VC506", + name="no-update-existing-data", + description="Must not use deprecated UPDATE_EXISTING_DATA setting", + severity=Severity.ERROR, +) +def check_no_update_existing_data(ctx: ConnectorContext) -> list[CheckFinding]: + """Detect deprecated UPDATE_EXISTING_DATA patterns.""" + if _is_exempt(ctx): + return [ + CheckFinding( + message="Exempt — opencti datasets connector may use this ✓", + severity=Severity.INFO, + ), + ] + + config_results = _check_config_vars(ctx) + code_results = _check_code_usage(ctx) + + all_results = config_results + code_results + + if not all_results: + return [ + CheckFinding( + message="No deprecated UPDATE_EXISTING_DATA usage found ✓", + severity=Severity.INFO, + ), + ] + + return all_results diff --git a/shared/tools/connector_linter/connector_linter/config.py b/shared/tools/connector_linter/connector_linter/config.py new file mode 100644 index 00000000000..39ef1a1f1e1 --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/config.py @@ -0,0 +1,152 @@ +"""Project-level configuration via ``pyproject.toml``. + +Reads ``[tool.connector-linter]`` from the connector's ``pyproject.toml`` (or +a parent directory) and exposes it as a typed :class:`LinterConfig` object. + +Inspired by Ruff's configuration model:: + + [tool.connector-linter] + select = ["VC1xx", "VC3xx"] # only run these checks/prefixes + ignore = ["VC306", "VC307"] # skip these checks + per-file-ignores = {"tests/*.py" = ["VC309"]} + +CLI flags always take precedence over ``pyproject.toml`` values. +""" + +from __future__ import annotations + +import sys +from dataclasses import dataclass, field +from fnmatch import fnmatch +from pathlib import Path +from typing import Any + +if sys.version_info >= (3, 11): + import tomllib +else: + try: + import tomllib # type: ignore[import] + except ModuleNotFoundError: + import tomli as tomllib # type: ignore[import,no-redef] + + +@dataclass +class LinterConfig: + """Parsed project-level linter configuration.""" + + select: list[str] = field(default_factory=list) + ignore: list[str] = field(default_factory=list) + per_file_ignores: dict[str, list[str]] = field(default_factory=dict) + + @property + def is_empty(self) -> bool: + """Return True if no configuration was specified.""" + return not self.select and not self.ignore and not self.per_file_ignores + + +def _find_pyproject(start: Path) -> Path | None: + """Walk up from *start* looking for ``pyproject.toml``. + + Stops at the filesystem root. Returns ``None`` if not found. + """ + candidate = start.resolve() + while True: + pyproject = candidate / "pyproject.toml" + if pyproject.is_file(): + return pyproject + parent = candidate.parent + if parent == candidate: + break + candidate = parent + return None + + +def _parse_table(table: dict[str, Any]) -> LinterConfig: + """Parse a ``[tool.connector-linter]`` table into :class:`LinterConfig`.""" + select = table.get("select", []) + ignore = table.get("ignore", []) + raw_pfi = table.get("per-file-ignores", {}) + + if not isinstance(select, list): + select = [] + if not isinstance(ignore, list): + ignore = [] + if not isinstance(raw_pfi, dict): + raw_pfi = {} + + per_file_ignores: dict[str, list[str]] = {} + for pattern, codes in raw_pfi.items(): + if isinstance(codes, list): + per_file_ignores[pattern] = [str(c) for c in codes] + + return LinterConfig( + select=[str(s) for s in select], + ignore=[str(i) for i in ignore], + per_file_ignores=per_file_ignores, + ) + + +def load_config(connector_path: Path, config_path: Path | None = None) -> LinterConfig: + """Load linter configuration from ``pyproject.toml``. + + Args: + connector_path: Root directory of the connector being checked. + config_path: Explicit path to a ``pyproject.toml`` file. If ``None``, + searches upward from *connector_path*. + + Returns: + Parsed :class:`LinterConfig`. Returns an empty config if no file + is found or the ``[tool.connector-linter]`` section is missing. + """ + if config_path is not None: + pyproject = config_path.resolve() + if not pyproject.is_file(): + return LinterConfig() + else: + pyproject = _find_pyproject(connector_path) + + if pyproject is None: + return LinterConfig() + + try: + with open(pyproject, "rb") as f: + data = tomllib.load(f) + except (OSError, tomllib.TOMLDecodeError): + return LinterConfig() + + tool_table = data.get("tool", {}) + linter_table = tool_table.get("connector-linter", None) + if linter_table is None: + return LinterConfig() + + return _parse_table(linter_table) + + +def get_per_file_ignores( + config: LinterConfig, + file_path: Path, + connector_root: Path, +) -> set[str]: + """Return the set of check codes to ignore for a specific file. + + Glob patterns in ``per-file-ignores`` are matched against the file path + relative to the connector root. Both forward-slash and OS-native separators + are supported. + """ + if not config.per_file_ignores: + return set() + + try: + rel = file_path.relative_to(connector_root) + except ValueError: + rel = file_path + + rel_str = str(rel) + # Normalise to forward-slash for consistent glob matching + rel_posix = rel_str.replace("\\", "/") + + codes: set[str] = set() + for pattern, pattern_codes in config.per_file_ignores.items(): + if fnmatch(rel_posix, pattern) or fnmatch(rel_posix, f"**/{pattern}"): + codes.update(pattern_codes) + return codes diff --git a/shared/tools/connector_linter/connector_linter/formatters.py b/shared/tools/connector_linter/connector_linter/formatters.py new file mode 100644 index 00000000000..81f0ff53c18 --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/formatters.py @@ -0,0 +1,317 @@ +"""Output formatters for check results.""" + +import json +from pathlib import Path +from typing import TextIO + +from connector_linter.models import SEVERITY_COLOR, CheckResult, Severity + +_COLORS = { + "green": "\033[32m", + "red": "\033[31m", + "yellow": "\033[33m", + "cyan": "\033[36m", + "dim": "\033[2m", + "bold": "\033[1m", + "reset": "\033[0m", +} + + +def _use_color(stream: TextIO) -> bool: + return hasattr(stream, "isatty") and stream.isatty() + + +def _c(text: str, color: str, stream: TextIO) -> str: + if not _use_color(stream): + return text + return f"{_COLORS.get(color, '')}{text}{_COLORS['reset']}" + + +def _group_results( + results: list[CheckResult], +) -> tuple[list[CheckResult], list[CheckResult], list[CheckResult]]: + """Return (failed, advisory, passed_normal). + + - failed — ``passed=False``, any severity + - advisory — ``passed=True`` + ``WARNING`` (informational, connector still compliant) + - passed_normal — ``passed=True`` + non-WARNING + """ + failed = [r for r in results if r.severity == Severity.ERROR] + advisory = [r for r in results if r.severity == Severity.WARNING] + passed_normal = [r for r in results if r.severity == Severity.INFO] + return failed, advisory, passed_normal + + +def _repo_relative_path(connector_path: Path, file_path: Path | None) -> str: + """Resolve a file_path to be relative to the git repository root. + + GitHub Actions ``::error file=`` requires paths relative to the repo root. + Falls back to absolute if not inside a git repository. + """ + base = connector_path.resolve() + full = base / file_path if file_path else base + + # Walk up to find .git directory + candidate = full if full.is_dir() else full.parent + while candidate != candidate.parent: + if (candidate / ".git").exists(): + try: + return str(full.relative_to(candidate)) + except ValueError: + break + candidate = candidate.parent + + return str(full) + + +def _abs_path(connector_path: Path, file_path: Path | None) -> str: + """Resolve a relative file_path to absolute based on the connector root.""" + base = connector_path.resolve() + if file_path: + return str(base / file_path) + return str(base) + + +def _display_path(connector_path: Path, file_path: Path | None) -> str: + """Build a display path preserving the CLI-provided connector path. + + If *file_path* is absolute (as produced by most checks), strip the + resolved connector root so the result stays relative to the CLI argument. + """ + if not file_path: + return str(connector_path) + + if file_path.is_absolute(): + try: + rel = file_path.relative_to(connector_path.resolve()) + return str(connector_path / rel) + except ValueError: + return str(file_path) + return str(connector_path / file_path) + + +def _format_result_line( + result: CheckResult, + connector_path: Path, + stream: TextIO, + abspath: bool = False, +) -> str: + """Format a single result as a colored line.""" + if abspath: + display = _abs_path(connector_path, result.file_path) + else: + display = _display_path(connector_path, result.file_path) + line_part = f":{result.line}" if result.line else "" + location = f"{display}{line_part}" + + # Derive status label from both passed and severity: + # PASS = passed + ERROR/INFO severity (normal pass) + # WARN = WARNING severity (advisory, regardless of passed) + # FAIL = failed + ERROR severity + # INFO = passed + INFO severity … not used yet, kept as PASS + if result.severity == Severity.WARNING: + status = _c("WARN", "yellow", stream) + elif result.severity == Severity.INFO: + status = _c("PASS", "green", stream) + else: + status = _c("FAIL", "red", stream) + + code = _c(result.code, SEVERITY_COLOR[result.severity], stream) + return f" {location}: {code} [{status}] {result.message}" + + +def _write_score(results: list[CheckResult], stream: TextIO) -> None: + """Write the score summary line.""" + total = len(results) + if total == 0: + return + + passed = len([r for r in results if r.severity != Severity.ERROR]) + failed = total - passed + pct = (passed / total) * 100 + errors = len([r for r in results if r.severity == Severity.ERROR]) + warnings = len([r for r in results if r.severity == Severity.WARNING]) + + stream.write(f" {'─' * 60}\n") + + if pct == 100: + score_str = _c(f"Score: {passed}/{total} — {pct:.0f}%", "green", stream) + elif pct >= 50: + score_str = _c(f"Score: {passed}/{total} — {pct:.0f}%", "yellow", stream) + else: + score_str = _c(f"Score: {passed}/{total} — {pct:.0f}%", "red", stream) + + stream.write(f" {score_str}\n") + + detail_parts = [f"{total} checks run", f"{passed} passed", f"{failed} failed"] + if errors: + detail_parts.append(f"{errors} error(s)") + if warnings: + detail_parts.append(f"{warnings} warning(s)") + stream.write(f" {', '.join(detail_parts)}\n") + + if failed == 0: + stream.write(f" {_c('✅ Connector is compliant!', 'green', stream)}\n") + else: + stream.write(f" {_c('❌ Connector has issues to fix.', 'red', stream)}\n") + + +def format_text( + results: list[CheckResult], + connector_path: Path, + stream: TextIO, + verbose: bool = False, + abspath: bool = False, +) -> None: + """Format results as human-readable text with colors. + + Grouping rules (default mode, i.e. ``verbose=False``): + + - **failed** (“FAIL” / “WARN”) — all results with ``passed=False``, any severity. + Suggestions are shown below each failing line. + - **advisory** (“WARN”) — results with ``passed=True`` and + ``severity=WARNING``. These carry notes but do not fail the connector. + - **passed** (“PASS”) — only shown when ``verbose=True``. + """ + failed, advisory, passed_normal = _group_results(results) + + def _write_result(result: CheckResult) -> None: + stream.write( + f"{_format_result_line(result, connector_path, stream, abspath=abspath)}\n", + ) + if result.suggestion: + stream.write(f"{_c(f' \u21b3 {result.suggestion}', 'dim', stream)}\n") + + for result in failed: + _write_result(result) + + for result in advisory: + _write_result(result) + + if verbose: + for result in passed_normal: + _write_result(result) + + stream.write("\n") + _write_score(results, stream) + + +def format_json( + results: list[CheckResult], + connector_path: Path, + stream: TextIO, +) -> None: + """Format results as JSON.""" + total = len(results) + passed_count = len([r for r in results if r.severity != Severity.ERROR]) + + output = { + "connector": str(connector_path.resolve()), + "summary": { + "total": total, + "passed": passed_count, + "failed": total - passed_count, + "errors": len([r for r in results if r.severity == Severity.ERROR]), + "warnings": len([r for r in results if r.severity == Severity.WARNING]), + "score_pct": round((passed_count / total) * 100, 1) if total else 0, + }, + "results": [ + { + "code": r.code, + "name": r.name, + "message": r.message, + "severity": r.severity.value, + "file_path": _abs_path(connector_path, r.file_path), + "line": r.line, + "suggestion": r.suggestion, + } + for r in results + ], + } + json.dump(output, stream, indent=2) + stream.write("\n") + + +def format_markdown( + results: list[CheckResult], + connector_path: Path, + stream: TextIO, + verbose: bool = False, + abspath: bool = False, +) -> None: + """Format results as a Markdown document. + + Produces a self-contained Markdown report suitable for pasting into + Notion, GitHub issues, or any Markdown-capable viewer. + """ + connector_name = connector_path.resolve().name + stream.write(f"# Connector Linter Report — `{connector_name}`\n\n") + + total = len(results) + passed_count = len([r for r in results if r.severity != Severity.ERROR]) + failed_count = total - passed_count + errors = len([r for r in results if r.severity == Severity.ERROR]) + warnings = len([r for r in results if r.severity == Severity.WARNING]) + pct = (passed_count / total) * 100 if total else 0 + + stream.write(f"**Score: {passed_count}/{total} — {pct:.0f}%**\n\n") + summary_parts = [ + f"{total} checks run", + f"{passed_count} passed", + f"{failed_count} failed", + ] + if errors: + summary_parts.append(f"{errors} error(s)") + if warnings: + summary_parts.append(f"{warnings} warning(s)") + stream.write(f"{', '.join(summary_parts)}\n\n") + + failed, advisory, passed_normal = _group_results(results) + + def _md_path(r: CheckResult) -> str: + if abspath: + return _abs_path(connector_path, r.file_path) + return _display_path(connector_path, r.file_path) + + def _md_line(r: CheckResult, icon: str) -> str: + path = _md_path(r) + line_part = f":{r.line}" if r.line else "" + line = f"- {icon} **{r.code}** `{path}{line_part}` — {r.message}" + if r.suggestion: + line += f"\n - 💡 {r.suggestion}" + return line + + if failed: + stream.write("## ❌ Failed\n\n") + for r in failed: + stream.write(f"{_md_line(r, '❌')}\n") + stream.write("\n") + + if advisory: + stream.write("## ⚠️ Advisories\n\n") + for r in advisory: + stream.write(f"{_md_line(r, '⚠️')}\n") + stream.write("\n") + + if verbose and passed_normal: + stream.write("## ✅ Passed\n\n") + for r in passed_normal: + stream.write(f"{_md_line(r, '✅')}\n") + stream.write("\n") + + +def format_github( + results: list[CheckResult], + connector_path: Path, + stream: TextIO, +) -> None: + """Format results as GitHub Actions annotations.""" + for result in results: + if result.severity == Severity.INFO: + continue + level = "error" if result.severity == Severity.ERROR else "warning" + file_path = _repo_relative_path(connector_path, result.file_path) + line = result.line or 1 + stream.write( + f"::{level} file={file_path},line={line}::{result.code}: {result.message}\n", + ) diff --git a/shared/tools/connector_linter/connector_linter/models.py b/shared/tools/connector_linter/connector_linter/models.py new file mode 100644 index 00000000000..ab121224d7a --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/models.py @@ -0,0 +1,216 @@ +"""Data models for the connector linter.""" + +import ast +import json +from dataclasses import dataclass, field +from enum import StrEnum +from functools import cached_property +from pathlib import Path +from typing import Any + + +class ConnectorType(StrEnum): + """Known OpenCTI connector types.""" + + EXTERNAL_IMPORT = "EXTERNAL_IMPORT" + INTERNAL_ENRICHMENT = "INTERNAL_ENRICHMENT" + INTERNAL_EXPORT_FILE = "INTERNAL_EXPORT_FILE" + INTERNAL_IMPORT_FILE = "INTERNAL_IMPORT_FILE" + STREAM = "STREAM" + + @property + def label(self) -> str: + """Human-readable label derived from the value. + + Examples: EXTERNAL_IMPORT → 'External Import', STREAM → 'Stream'. + """ + return self.value.replace("_", " ").title() + + +class Severity(StrEnum): + """Severity levels for check results.""" + + ERROR = "error" + WARNING = "warning" + INFO = "info" + + def symbol(self) -> str: + """Get a short symbol for the severity level.""" + return {"error": "E", "warning": "W", "info": "I"}[self.value] + + def rank(self) -> int: + """Numeric rank for ordering (INFO=0, WARNING=1, ERROR=2).""" + return {"info": 0, "warning": 1, "error": 2}[self.value] + + +# Shared severity → display mappings. Keyed by Severity enum for direct lookup. +SEVERITY_EMOJI: dict["Severity", str] = { + Severity.ERROR: "🔴", + Severity.WARNING: "🟡", + Severity.INFO: "🔵", +} +SEVERITY_COLOR: dict["Severity", str] = { + Severity.ERROR: "red", + Severity.WARNING: "yellow", + Severity.INFO: "cyan", +} + + +@dataclass +class CheckFinding: + """A single finding produced by a check function. + + Contains only the check-specific data. The runner enriches each + finding with the ``code``, ``name`` and ``severity`` from the + :class:`CheckDescriptor` to produce a full :class:`CheckResult`. + """ + + message: str + severity: Severity # override descriptor default (rare) + file_path: Path | None = None + line: int | None = None + suggestion: str | None = None + + +@dataclass +class CheckResult: + """Result of a single check execution.""" + + code: str + name: str + message: str + severity: Severity + file_path: Path | None = None + line: int | None = None + suggestion: str | None = None + + +def no_python_sources_finding(suggestion: str | None = None) -> "CheckFinding": + """Standard finding for checks that require Python source files but find none.""" + return CheckFinding( + message="No Python source files found in src/", + severity=Severity.ERROR, + suggestion=suggestion or "Connector must have Python source files under src/", + ) + + +_DIR_TO_CONNECTOR_TYPE: dict[str, ConnectorType] = { + "external-import": ConnectorType.EXTERNAL_IMPORT, + "internal-enrichment": ConnectorType.INTERNAL_ENRICHMENT, + "internal-export-file": ConnectorType.INTERNAL_EXPORT_FILE, + "internal-import-file": ConnectorType.INTERNAL_IMPORT_FILE, + "stream": ConnectorType.STREAM, +} + + +@dataclass +class ConnectorContext: + """Contextual data about a connector, loaded once and shared across checks.""" + + path: Path + connector_type: ConnectorType | None = None + manifest: dict[str, Any] = field(default_factory=dict) + config_schema: dict[str, Any] = field(default_factory=dict) + has_tests: bool = False + has_dockerfile: bool = False + has_readme: bool = False + has_metadata_dir: bool = False + src_files: list[Path] = field(default_factory=list) + all_files: list[Path] = field(default_factory=list) + + @cached_property + def python_sources(self) -> dict[Path, str]: + """All Python source files under src/, keyed by path relative to connector root. + + Computed once and cached for the lifetime of this context. + Uses src_files populated at load time to avoid re-scanning the filesystem. + """ + sources: dict[Path, str] = {} + for rel_path in self.src_files: + abs_path = self.path / rel_path + try: + sources[rel_path] = abs_path.read_text( + encoding="utf-8", errors="replace" + ) + except OSError: + continue + return sources + + @cached_property + def python_trees(self) -> dict[Path, ast.Module]: + """Parsed AST modules for all Python source files. + + Computed once and cached for the lifetime of this context. + Files with syntax errors are silently skipped. + """ + trees: dict[Path, ast.Module] = {} + for file_path, content in self.python_sources.items(): + try: + trees[file_path] = ast.parse(content, filename=str(file_path)) + except SyntaxError: + continue + return trees + + @classmethod + def load(cls, connector_path: Path) -> "ConnectorContext": + """Load connector context from its directory.""" + ctx = cls(path=connector_path.resolve()) + + # Detect connector type from parent directory name + ctx.connector_type = _DIR_TO_CONNECTOR_TYPE.get(ctx.path.parent.name) + # Fallback only for template layout: templates/ + if ctx.connector_type is None and ctx.path.parent.name == "templates": + ctx.connector_type = _DIR_TO_CONNECTOR_TYPE.get(ctx.path.name) + + # Load manifest + manifest_path = ctx.path / "__metadata__" / "connector_manifest.json" + if manifest_path.exists(): + try: + with manifest_path.open() as f: + ctx.manifest = json.load(f) + except (json.JSONDecodeError, OSError): + pass # malformed or unreadable — checks that need it will report missing fields + + # Fallback: use container_type from manifest + if ctx.connector_type is None and ctx.manifest.get("container_type"): + try: + ctx.connector_type = ConnectorType(ctx.manifest["container_type"]) + except ValueError: + pass # unknown type string — leave as None + + if ctx.connector_type is None: + raise ValueError( + "Unable to determine connector type for " + f"'{ctx.path}'. Expected a connector directory nested under one " + "of: external-import, internal-enrichment, internal-export-file, " + "internal-import-file, stream, or templates/; " + "or provide '__metadata__/connector_manifest.json' with " + "'container_type'." + ) + + # Load config schema + schema_path = ctx.path / "__metadata__" / "connector_config_schema.json" + if schema_path.exists(): + try: + with schema_path.open() as f: + ctx.config_schema = json.load(f) + except (json.JSONDecodeError, OSError): + pass # malformed or unreadable — leave as empty dict + + # Detect structural elements + ctx.has_metadata_dir = (ctx.path / "__metadata__").is_dir() + ctx.has_tests = (ctx.path / "tests").is_dir() + ctx.has_dockerfile = (ctx.path / "Dockerfile").is_file() + ctx.has_readme = (ctx.path / "README.md").is_file() + + # Collect file lists + ctx.all_files = [ + p.relative_to(ctx.path) for p in ctx.path.rglob("*") if p.is_file() + ] + ctx.src_files = [ + p.relative_to(ctx.path) + for p in (ctx.path / "src").rglob("*.py") + if p.is_file() + ] + + return ctx diff --git a/shared/tools/connector_linter/connector_linter/noqa.py b/shared/tools/connector_linter/connector_linter/noqa.py new file mode 100644 index 00000000000..455266d217d --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/noqa.py @@ -0,0 +1,101 @@ +"""Inline suppression via ``# noqa`` comments. + +Supports the same syntax as flake8: + +- ``# noqa`` — suppress all checks on this line +- ``# noqa: VC101`` — suppress only VC101 +- ``# noqa: VC101, VC302`` — suppress multiple codes + +The noqa directive is matched case-insensitively and can appear anywhere +after a ``#`` on the line. Works in Python, YAML, Dockerfile, env files, +and any file that uses ``#`` for comments. +""" + +import re +from functools import lru_cache +from pathlib import Path + +from connector_linter.models import CheckResult + +# Matches: +_NOQA_RE = re.compile( + r"#\s*noqa\b(?:\s*:\s*(?P[A-Za-z0-9,\s]+))?", + re.IGNORECASE, +) + + +def _parse_noqa_codes(match: re.Match) -> set[str] | None: + """Parse codes from a noqa match. + + Returns ``None`` for a bare ``# noqa`` (suppresses everything), + or a set of uppercase codes for ``# noqa: VC101, VC302``. + """ + raw = match.group("codes") + if raw is None: + return None # bare noqa — suppress all + codes = {c.strip().upper() for c in raw.split(",") if c.strip()} + return codes or None + + +@lru_cache(maxsize=256) +def _read_file_lines(file_path: Path) -> tuple[str, ...]: + """Read and cache file lines (returns tuple for hashability).""" + try: + return tuple(file_path.read_text(encoding="utf-8").splitlines()) + except (OSError, UnicodeDecodeError): + return () + + +def get_noqa_directives(file_path: Path) -> dict[int, set[str] | None]: + """Parse all noqa directives from a file. + + Returns a dict mapping line numbers (1-based) to either: + - ``None`` → bare ``# noqa`` (suppress all codes) + - ``set[str]`` → specific codes to suppress + """ + lines = _read_file_lines(file_path) + directives: dict[int, set[str] | None] = {} + + for i, line in enumerate(lines, 1): + m = _NOQA_RE.search(line) + if m: + directives[i] = _parse_noqa_codes(m) + + return directives + + +def is_suppressed(result: CheckResult, file_path: Path, line: int) -> bool: + """Check if a result is suppressed by a noqa directive on its line.""" + directives = get_noqa_directives(file_path) + if line not in directives: + return False + codes = directives[line] + return codes is None or result.code.upper() in codes # None = bare noqa + + +def filter_noqa( + results: list[CheckResult], + connector_path: Path, +) -> list[CheckResult]: + """Filter results suppressed by noqa directives. + + Results without both ``file_path`` and ``line`` pass through unchanged. + Relative paths are resolved against *connector_path*. + """ + resolved_root = connector_path.resolve() + filtered: list[CheckResult] = [] + + for result in results: + if result.file_path and result.line: + # Resolve relative paths against the connector root so + # _read_file_lines always gets an absolute, unambiguous path. + abs_path = ( + result.file_path + if result.file_path.is_absolute() + else resolved_root / result.file_path + ) + if is_suppressed(result, abs_path, result.line): + continue + filtered.append(result) + + return filtered diff --git a/shared/tools/connector_linter/connector_linter/registry.py b/shared/tools/connector_linter/connector_linter/registry.py new file mode 100644 index 00000000000..5ba4314bb3b --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/registry.py @@ -0,0 +1,81 @@ +"""Check registry for the connector linter.""" + +import inspect +from collections.abc import Callable +from dataclasses import dataclass, field +from typing import ClassVar + +from connector_linter.models import ( + CheckFinding, + ConnectorContext, + ConnectorType, + Severity, +) + +CheckFunction = Callable[[ConnectorContext], list[CheckFinding]] + + +@dataclass +class CheckDescriptor: + """Metadata about a registered check.""" + + code: str + name: str + description: str + severity: Severity + func: CheckFunction + applicable_types: frozenset[ConnectorType] | None = field(default=None) + module_doc: str | None = field(default=None) + + +class CheckRegistry: + """Global registry of check functions. + + Usage:: + + @CheckRegistry.register(code="VC101", name="...", description="...", severity=Severity.ERROR) + def check_fn(ctx: ConnectorContext) -> list[CheckFinding]: + ... + + CheckRegistry.get_all() + CheckRegistry.get_by_prefix("VC1xx") + """ + + _checks: ClassVar[dict[str, CheckDescriptor]] = {} + + @classmethod + def register( + cls, + code: str, + name: str, + description: str, + severity: Severity = Severity.ERROR, + applicable_types: set[ConnectorType] | frozenset[ConnectorType] | None = None, + ) -> Callable[[CheckFunction], CheckFunction]: + def decorator(func: CheckFunction) -> CheckFunction: + module = inspect.getmodule(func) + cls._checks[code] = CheckDescriptor( + code=code, + name=name, + description=description, + severity=severity, + func=func, + applicable_types=( + frozenset(applicable_types) if applicable_types else None + ), + module_doc=module.__doc__ if module else None, + ) + return func + + return decorator + + @classmethod + def get_all(cls) -> dict[str, CheckDescriptor]: + return dict(cls._checks) + + @classmethod + def get_by_prefix(cls, prefix: str) -> dict[str, CheckDescriptor]: + clean = prefix.rstrip("x") + return { + code: desc for code, desc in cls._checks.items() if code.startswith(clean) + } diff --git a/shared/tools/connector_linter/connector_linter/runner.py b/shared/tools/connector_linter/connector_linter/runner.py new file mode 100644 index 00000000000..695b3ea224d --- /dev/null +++ b/shared/tools/connector_linter/connector_linter/runner.py @@ -0,0 +1,151 @@ +"""Runner: loads checks, executes them against a connector, collects results.""" + +import importlib +import pkgutil +from pathlib import Path + +from connector_linter import checks as checks_package +from connector_linter.config import get_per_file_ignores, load_config +from connector_linter.models import CheckResult, ConnectorContext, Severity +from connector_linter.noqa import filter_noqa +from connector_linter.registry import CheckRegistry + +_CHECKS_DISCOVERED = False + + +def _import_checks_modules() -> None: + """Auto-import all check modules from the checks/ package (recursively). + + Uses a module-level sentinel so the filesystem walk runs only once per + process, regardless of how many times run_checks() is called. + """ + global _CHECKS_DISCOVERED + if _CHECKS_DISCOVERED: + return + + package_path = Path(checks_package.__file__).parent + + for _finder, module_name, _is_pkg in pkgutil.walk_packages( + [str(package_path)], + prefix="connector_linter.checks.", + ): + if module_name.rsplit(".", 1)[-1].startswith("_"): + continue # skip private helpers like _helpers.py + importlib.import_module(module_name) + + _CHECKS_DISCOVERED = True + + +def _resolve_file_path(file_path: Path | None, root: Path) -> Path | None: + if file_path is None: + return None + return file_path if file_path.is_absolute() else root / file_path + + +def run_checks( + connector_path: Path, + select: list[str] | None = None, + ignore: list[str] | None = None, + disable_noqa: bool = False, + config_path: Path | None = None, +) -> list[CheckResult]: + """Run all registered checks against a connector. + + Args: + connector_path: Path to the connector directory. + select: If provided, only run checks matching these codes/prefixes. + Overrides ``select`` from pyproject.toml. + ignore: If provided, skip checks matching these codes/prefixes. + Merged with ``ignore`` from pyproject.toml (CLI wins on conflicts). + disable_noqa: If True, ignore all ``# noqa`` inline suppressions. + config_path: Explicit path to a ``pyproject.toml`` file. If ``None``, + searches upward from *connector_path*. + + Returns: + List of CheckResult objects. + """ + _import_checks_modules() + + # Load project-level config from pyproject.toml + config = load_config(connector_path, config_path=config_path) + + # Merge: CLI flags take precedence over pyproject.toml + effective_select = select if select else (config.select or None) + effective_ignore = list(set((ignore or []) + config.ignore)) + + ctx = ConnectorContext.load(connector_path) + all_checks = CheckRegistry.get_all() + + checks_to_run = all_checks + if effective_select: + filtered = {} + for pattern in effective_select: + if pattern in all_checks: + filtered[pattern] = all_checks[pattern] + else: + filtered.update(CheckRegistry.get_by_prefix(pattern)) + checks_to_run = filtered + + if effective_ignore: + ignore_codes = set() + for pattern in effective_ignore: + if pattern in checks_to_run: + ignore_codes.add(pattern) + else: + ignore_codes.update(CheckRegistry.get_by_prefix(pattern).keys()) + checks_to_run = { + code: desc + for code, desc in checks_to_run.items() + if code not in ignore_codes + } + + results: list[CheckResult] = [] + for code in sorted(checks_to_run.keys()): + descriptor = checks_to_run[code] + + if ( + descriptor.applicable_types is not None + and ctx.connector_type is not None + and ctx.connector_type not in descriptor.applicable_types + ): + continue + + try: + findings = descriptor.func(ctx) + results.extend( + CheckResult( + code=descriptor.code, + name=descriptor.name, + message=finding.message, + severity=finding.severity, + file_path=_resolve_file_path(finding.file_path, ctx.path), + line=finding.line, + suggestion=finding.suggestion, + ) + for finding in findings + ) + except Exception as e: + results.append( + CheckResult( + code=code, + name=descriptor.name, + message=f"Check raised {type(e).__name__}: {e}", + severity=Severity.ERROR, + ), + ) + + # Apply per-file-ignores from pyproject.toml + if config.per_file_ignores: + pfi_filtered: list[CheckResult] = [] + for result in results: + if result.file_path is not None: + pfi_codes = get_per_file_ignores(config, result.file_path, ctx.path) + if result.code in pfi_codes: + continue + pfi_filtered.append(result) + results = pfi_filtered + + if not disable_noqa: + results = filter_noqa(results, connector_path) + + return results diff --git a/shared/tools/connector_linter/pyproject.toml b/shared/tools/connector_linter/pyproject.toml new file mode 100644 index 00000000000..419eae8beee --- /dev/null +++ b/shared/tools/connector_linter/pyproject.toml @@ -0,0 +1,26 @@ +[project] +name = "connector-linter" +version = "0.1.0" +description = "OpenCTI Connector Verified Linter — validates connectors against Verified status criteria." +requires-python = ">=3.12" +dependencies = [ + "click>=8.0", +] + +[project.scripts] +connector-linter = "connector_linter.__main__:cli" + +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[tool.hatch.build.targets.wheel] +packages = ["connector_linter"] + +[dependency-groups] +dev = [ + "black>=26.3.1", + "isort>=8.0.1", + "pre-commit>=4.6.0", + "pytest>=8.0", +] diff --git a/shared/tools/connector_linter/tests/conftest.py b/shared/tools/connector_linter/tests/conftest.py new file mode 100644 index 00000000000..a56d5d1a6f0 --- /dev/null +++ b/shared/tools/connector_linter/tests/conftest.py @@ -0,0 +1,96 @@ +"""Shared fixtures for connector-linter tests.""" + +import json +from pathlib import Path + +import pytest +from connector_linter.models import CheckFinding, ConnectorContext, Severity +from connector_linter.registry import CheckRegistry +from connector_linter.runner import _import_checks_modules + + +@pytest.fixture() +def _clean_registry(): + """Save and restore the global registry around each test. + + Tests that register throwaway checks won't leak into other tests. + """ + _import_checks_modules() # ensure all real checks are loaded before saving + saved = dict(CheckRegistry._checks) + yield + CheckRegistry._checks.clear() + CheckRegistry._checks.update(saved) + + +@pytest.fixture() +def dummy_checks(_clean_registry): + """Register three dummy checks: VC901 (ERROR pass), VC902 (WARNING), VC903 (ERROR fail).""" + + @CheckRegistry.register( + code="VC901", + name="test-error-pass", + description="Dummy error check that always passes", + severity=Severity.ERROR, + ) + def _vc901(ctx: ConnectorContext) -> list[CheckFinding]: + return [CheckFinding(message="all good", severity=Severity.INFO)] + + @CheckRegistry.register( + code="VC902", + name="test-warning", + description="Dummy warning check", + severity=Severity.WARNING, + ) + def _vc902(ctx: ConnectorContext) -> list[CheckFinding]: + return [CheckFinding(message="watch out", severity=Severity.WARNING)] + + @CheckRegistry.register( + code="VC903", + name="test-error-fail", + description="Dummy error check that always fails", + severity=Severity.ERROR, + ) + def _vc903(ctx: ConnectorContext) -> list[CheckFinding]: + return [ + CheckFinding(message="broken", severity=Severity.ERROR, suggestion="fix it") + ] + + return ["VC901", "VC902", "VC903"] + + +@pytest.fixture() +def minimal_connector(tmp_path: Path) -> Path: + """Create a minimal connector directory that ConnectorContext.load() can parse.""" + connector_dir = tmp_path / "external-import" / "test-connector" + + meta_dir = connector_dir / "__metadata__" + meta_dir.mkdir(parents=True) + manifest = { + "verified": True, + "last_verified_date": "2026-04-01", + "container_version": "rolling", + "container_image": "opencti/connector-test-connector", + } + (meta_dir / "connector_manifest.json").write_text( + json.dumps(manifest), encoding="utf-8" + ) + + src_dir = connector_dir / "src" + src_dir.mkdir() + (src_dir / "main.py").write_text( + 'if __name__ == "__main__":\n pass\n', encoding="utf-8" + ) + + (connector_dir / "docker-compose.yml").write_text( + "services:\n connector:\n image: opencti/connector-test-connector:latest\n" + " environment:\n - OPENCTI_URL=http://localhost\n" + " - OPENCTI_TOKEN=ChangeMe\n", + encoding="utf-8", + ) + (connector_dir / "Dockerfile").write_text( + 'FROM python:3.12-alpine\nENTRYPOINT ["python", "main.py"]\n', + encoding="utf-8", + ) + (connector_dir / "README.md").write_text("# Test Connector\n", encoding="utf-8") + + return connector_dir diff --git a/shared/tools/connector_linter/tests/test-requirements.txt b/shared/tools/connector_linter/tests/test-requirements.txt new file mode 100644 index 00000000000..47c045f971c --- /dev/null +++ b/shared/tools/connector_linter/tests/test-requirements.txt @@ -0,0 +1,2 @@ +./shared/tools/connector_linter +pytest>=8.0 diff --git a/shared/tools/connector_linter/tests/tests_checks/__init__.py b/shared/tools/connector_linter/tests/tests_checks/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/shared/tools/connector_linter/tests/tests_checks/conftest.py b/shared/tools/connector_linter/tests/tests_checks/conftest.py new file mode 100644 index 00000000000..044a1260dfe --- /dev/null +++ b/shared/tools/connector_linter/tests/tests_checks/conftest.py @@ -0,0 +1,83 @@ +"""Shared fixtures for per-check unit tests. + +Each test in tests_checks/ focuses on a single check, exercising it with +hand-crafted Python source snippets rather than running the full suite. + +Core fixture: ``connector_src`` — a factory that builds a minimal connector +directory with the given Python source files and returns the connector path. +""" + +import json +from pathlib import Path +from typing import Callable + +import pytest + +# --------------------------------------------------------------------------- +# Connector type directories used by ConnectorContext.load() to detect type +# --------------------------------------------------------------------------- +_TYPE_DIRS: dict[str, str] = { + "EXTERNAL_IMPORT": "external-import", + "INTERNAL_ENRICHMENT": "internal-enrichment", + "STREAM": "stream", +} + + +@pytest.fixture() +def connector_src(tmp_path: Path) -> Callable: + """Factory fixture: build a minimal connector with custom Python source. + + Usage:: + + def test_something(connector_src): + path = connector_src("src/main.py", "x = stix2.Identity(name='test')") + results = run_checks(path, select=["VC313"]) + assert any(not r.passed for r in results) + + Args: + *src_files: Alternating (relative_path, content) pairs under src/. + connector_type: Optional connector type string (default: EXTERNAL_IMPORT). + + Returns: + The connector root Path. + """ + + def _make( + *src_files: tuple[str, str], + connector_type: str = "EXTERNAL_IMPORT", + ) -> Path: + type_dir = _TYPE_DIRS.get(connector_type, "external-import") + connector_dir = tmp_path / type_dir / "test-connector" + + # __metadata__ + meta_dir = connector_dir / "__metadata__" + meta_dir.mkdir(parents=True) + (meta_dir / "connector_manifest.json").write_text( + json.dumps( + { + "verified": True, + "last_verified_date": "2026-01-01", + "container_version": "rolling", + "container_image": "opencti/connector-test", + } + ), + encoding="utf-8", + ) + + # src/ + requested files + src_dir = connector_dir / "src" + src_dir.mkdir() + for rel_path, content in src_files: + dest = connector_dir / rel_path + dest.parent.mkdir(parents=True, exist_ok=True) + dest.write_text(content, encoding="utf-8") + + # Minimal Dockerfile so ConnectorContext sees the dir + (connector_dir / "Dockerfile").write_text( + 'FROM python:3.12-alpine\nENTRYPOINT ["python", "main.py"]\n', + encoding="utf-8", + ) + + return connector_dir + + return _make diff --git a/shared/tools/connector_linter/tests/tests_checks/test_vc105_no_absolute_date.py b/shared/tools/connector_linter/tests/tests_checks/test_vc105_no_absolute_date.py new file mode 100644 index 00000000000..98907ba1a36 --- /dev/null +++ b/shared/tools/connector_linter/tests/tests_checks/test_vc105_no_absolute_date.py @@ -0,0 +1,72 @@ +"""Tests for VC105 (no absolute import date).""" + +from connector_linter.models import Severity +from connector_linter.runner import run_checks + + +class TestVC105ConfigDetection: + def test_flags_absolute_date_in_docker_compose(self, minimal_connector): + compose = minimal_connector / "docker-compose.yml" + compose.write_text( + "services:\n" + " connector:\n" + " image: opencti/connector-test-connector:latest\n" + " environment:\n" + " - IMPORT_START_DATE=2020-05-01\n", + encoding="utf-8", + ) + + results = run_checks(minimal_connector, select=["VC105"]) + + assert len(results) == 1 + assert results[0].severity is Severity.WARNING + assert "IMPORT_START_DATE=2020-05-01 uses absolute date" in results[0].message + + def test_does_not_flag_iso_duration_in_docker_compose(self, minimal_connector): + compose = minimal_connector / "docker-compose.yml" + compose.write_text( + "services:\n" + " connector:\n" + " image: opencti/connector-test-connector:latest\n" + " environment:\n" + " - IMPORT_START_DATE=P30D\n", + encoding="utf-8", + ) + + results = run_checks(minimal_connector, select=["VC105"]) + + assert len(results) == 1 + assert results[0].severity is Severity.INFO + assert "No hardcoded absolute import dates found" in results[0].message + + +class TestVC105CodeDefaultDetection: + def test_flags_field_default_iso_datetime(self, minimal_connector): + source = minimal_connector / "src" / "settings.py" + source.write_text( + "from pydantic import Field\n\n" + "class Settings:\n" + ' import_start_date: str = Field(default="2020-05-01T00:00:00Z")\n', + encoding="utf-8", + ) + + results = run_checks(minimal_connector, select=["VC105"]) + + assert len(results) == 1 + assert results[0].severity is Severity.WARNING + assert 'Field default="2020-05-01T00:00:00Z"' in results[0].message + + def test_does_not_flag_field_default_iso_duration(self, minimal_connector): + source = minimal_connector / "src" / "settings.py" + source.write_text( + "from pydantic import Field\n\n" + "class Settings:\n" + ' import_start_date: str = Field(default="P30D")\n', + encoding="utf-8", + ) + + results = run_checks(minimal_connector, select=["VC105"]) + + assert len(results) == 1 + assert results[0].severity is Severity.INFO + assert "No hardcoded absolute import dates found" in results[0].message diff --git a/shared/tools/connector_linter/tests/tests_checks/test_vc301_author_defined.py b/shared/tools/connector_linter/tests/tests_checks/test_vc301_author_defined.py new file mode 100644 index 00000000000..9495553aceb --- /dev/null +++ b/shared/tools/connector_linter/tests/tests_checks/test_vc301_author_defined.py @@ -0,0 +1,81 @@ +"""Unit tests for VC301 — connector must define an author identity.""" + +from connector_linter.models import Severity +from connector_linter.runner import run_checks + +_STIX2_IDENTITY = """\ +import stix2 + +author = stix2.Identity( + name="ACME Corp", + identity_class="organization", +) +""" + +_ORGANIZATION_AUTHOR = """\ +from connectors_sdk.models.author import OrganizationAuthor + +author = OrganizationAuthor(name="ACME Corp") +""" + +_PYCTI_API = """\ +class Connector: + def __init__(self, helper): + self.author = helper.api.identity.create( + type="Organization", + name="ACME Corp", + ) +""" + +_IDENTITY_FROM_PYCTI = """\ +from pycti import Identity + +author = Identity(name="ACME Corp", identity_class="organization") +""" + +_NO_AUTHOR = """\ +def process(): + pass +""" + +_UNRELATED_IDENTITY = """\ +# Identity imported from a custom, unrelated module +from mymodule import Identity + +x = Identity(name="test") +""" + + +class TestVC301AuthorDefined: + """VC301 detects author identity definitions across all recognized patterns.""" + + def test_passes_stix2_identity(self, connector_src): + path = connector_src(("src/main.py", _STIX2_IDENTITY)) + results = run_checks(path, select=["VC301"]) + assert all(r.severity == Severity.INFO for r in results) + + def test_passes_organization_author(self, connector_src): + path = connector_src(("src/main.py", _ORGANIZATION_AUTHOR)) + results = run_checks(path, select=["VC301"]) + assert all(r.severity == Severity.INFO for r in results) + + def test_passes_pycti_api_create(self, connector_src): + path = connector_src(("src/main.py", _PYCTI_API)) + results = run_checks(path, select=["VC301"]) + assert all(r.severity == Severity.INFO for r in results) + + def test_passes_identity_from_pycti(self, connector_src): + path = connector_src(("src/main.py", _IDENTITY_FROM_PYCTI)) + results = run_checks(path, select=["VC301"]) + assert all(r.severity == Severity.INFO for r in results) + + def test_fails_no_author(self, connector_src): + path = connector_src(("src/main.py", _NO_AUTHOR)) + results = run_checks(path, select=["VC301"]) + assert any(r.severity == Severity.ERROR for r in results) + + def test_fails_unrelated_identity_import(self, connector_src): + """Identity() called but not imported from stix2/pycti — should fail.""" + path = connector_src(("src/main.py", _UNRELATED_IDENTITY)) + results = run_checks(path, select=["VC301"]) + assert any(r.severity == Severity.ERROR for r in results) diff --git a/shared/tools/connector_linter/tests/tests_checks/test_vc303_connector_type.py b/shared/tools/connector_linter/tests/tests_checks/test_vc303_connector_type.py new file mode 100644 index 00000000000..928afb0b15c --- /dev/null +++ b/shared/tools/connector_linter/tests/tests_checks/test_vc303_connector_type.py @@ -0,0 +1,79 @@ +"""Unit tests for VC303 — CONNECTOR_TYPE must be hardcoded, not read from env.""" + +from connector_linter.models import Severity +from connector_linter.runner import run_checks + +_SDK_BASED = """\ +from connectors_sdk.config import BaseExternalImportConnectorConfig + +class ConnectorConfig(BaseExternalImportConnectorConfig): + pass +""" + +_PYCTI_HARDCODED = """\ +config = { + "connector": { + "type": "EXTERNAL_IMPORT", + } +} +""" + +_ENV_READ_OS = """\ +import os +connector_type = os.environ["CONNECTOR_TYPE"] +""" + +_ENV_READ_GETENV = """\ +import os +connector_type = os.getenv("CONNECTOR_TYPE") +""" + +_ENV_READ_GET_CONFIG = """\ +connector_type = self.helper.get_config_variable("CONNECTOR_TYPE", ["connector", "type"]) +""" + +_PYDANTIC_LITERAL = """\ +from typing import Literal +from pydantic import Field + +class ConnectorSettings: + type: Literal["EXTERNAL_IMPORT"] = Field(default="EXTERNAL_IMPORT") +""" + + +class TestVC303ConnectorType: + """VC303 detects env reads and accepts hardcoded type definitions.""" + + def test_passes_sdk_base_config(self, connector_src): + path = connector_src(("src/main.py", _SDK_BASED)) + results = run_checks(path, select=["VC303"]) + assert all(r.severity == Severity.INFO for r in results) + + def test_passes_pycti_hardcoded_dict(self, connector_src): + path = connector_src(("src/main.py", _PYCTI_HARDCODED)) + results = run_checks(path, select=["VC303"]) + assert all(r.severity == Severity.WARNING for r in results) + + def test_passes_pydantic_literal(self, connector_src): + path = connector_src(("src/main.py", _PYDANTIC_LITERAL)) + results = run_checks(path, select=["VC303"]) + assert all(r.severity == Severity.WARNING for r in results) + + def test_flags_os_environ_read(self, connector_src): + path = connector_src(("src/main.py", _ENV_READ_OS)) + results = run_checks(path, select=["VC303"]) + failed = [r for r in results if r.severity == Severity.ERROR] + assert len(failed) == 1 + assert "environment" in failed[0].message.lower() + + def test_flags_os_getenv_read(self, connector_src): + path = connector_src(("src/main.py", _ENV_READ_GETENV)) + results = run_checks(path, select=["VC303"]) + failed = [r for r in results if r.severity == Severity.ERROR] + assert len(failed) == 1 + + def test_flags_get_config_variable(self, connector_src): + path = connector_src(("src/main.py", _ENV_READ_GET_CONFIG)) + results = run_checks(path, select=["VC303"]) + failed = [r for r in results if r.severity == Severity.ERROR] + assert len(failed) == 1 diff --git a/shared/tools/connector_linter/tests/tests_checks/test_vc305_sdk_base_settings.py b/shared/tools/connector_linter/tests/tests_checks/test_vc305_sdk_base_settings.py new file mode 100644 index 00000000000..57be89acb7f --- /dev/null +++ b/shared/tools/connector_linter/tests/tests_checks/test_vc305_sdk_base_settings.py @@ -0,0 +1,62 @@ +"""Unit tests for VC305 — connector must use connectors-sdk BaseConnectorSettings.""" + +from connector_linter.models import Severity +from connector_linter.runner import run_checks + +_SDK_SETTINGS = """\ +from connectors_sdk.models.octi import BaseConnectorSettings + +class ConnectorSettings(BaseConnectorSettings): + my_api_key: str +""" + +_CUSTOM_PYDANTIC_OK = """\ +from pydantic_settings import BaseSettings + +class ConnectorSettings(BaseSettings): + opencti_url: str + opencti_token: str + connector_id: str + connector_name: str + connector_type: str + connector_scope: str + connector_log_level: str +""" + +_LEGACY_DICT_OK = """\ +# Legacy pycti-style: config dict loaded from YAML +import yaml + +with open("config.yml") as f: + config = yaml.load(f, Loader=yaml.FullLoader) +""" + +_NO_SETTINGS = """\ +import os + +url = os.environ["OPENCTI_URL"] +token = os.environ["OPENCTI_TOKEN"] +""" + + +class TestVC305SdkBaseSettings: + """VC305 checks for connectors-sdk or equivalent settings pattern.""" + + def test_passes_sdk_base_settings(self, connector_src): + path = connector_src(("src/main.py", _SDK_SETTINGS)) + results = run_checks(path, select=["VC305"]) + assert all(r.severity == Severity.INFO for r in results) + + def test_passes_custom_pydantic(self, connector_src): + """Custom BaseSettings subclass is acceptable (with WARNING).""" + path = connector_src(("src/main.py", _CUSTOM_PYDANTIC_OK)) + results = run_checks(path, select=["VC305"]) + # Should pass — pydantic approach is acceptable + errors = [r for r in results if r.severity == Severity.ERROR] + assert len(errors) == 0 + + def test_fails_no_settings(self, connector_src): + """Bare os.environ usage without any settings class should fail.""" + path = connector_src(("src/main.py", _NO_SETTINGS)) + results = run_checks(path, select=["VC305"]) + assert any(r.severity == Severity.ERROR for r in results) diff --git a/shared/tools/connector_linter/tests/tests_checks/test_vc306_log_level_default.py b/shared/tools/connector_linter/tests/tests_checks/test_vc306_log_level_default.py new file mode 100644 index 00000000000..38a13a0d7b4 --- /dev/null +++ b/shared/tools/connector_linter/tests/tests_checks/test_vc306_log_level_default.py @@ -0,0 +1,82 @@ +"""Unit tests for VC306 — connector log level should default to 'error'.""" + +from connector_linter.models import Severity +from connector_linter.runner import run_checks + +_CORRECT_DEFAULT = """\ +from pydantic_settings import BaseSettings + +class ConnectorSettings(BaseSettings): + log_level: str = "error" +""" + +_WRONG_DEFAULT_DEBUG = """\ +from pydantic_settings import BaseSettings + +class ConnectorSettings(BaseSettings): + log_level: str = "debug" +""" + +_WRONG_DEFAULT_INFO = """\ +from pydantic_settings import BaseSettings + +class ConnectorSettings(BaseSettings): + log_level: str = "info" +""" + +_SDK_INHERITS_DEFAULT = """\ +from connectors_sdk.models.connector import BaseExternalImportConnectorConfig + +class ConnectorSettings(BaseExternalImportConnectorConfig): + my_api_key: str +""" + +_NO_LOG_LEVEL = """\ +class ConnectorSettings: + pass +""" + + +class TestVC306LogLevelDefault: + """VC306 flags log levels that are not 'error'.""" + + def test_passes_error_default(self, connector_src): + path = connector_src(("src/main.py", _CORRECT_DEFAULT)) + results = run_checks(path, select=["VC306"]) + assert all(r.severity == Severity.INFO for r in results) + + def test_fails_debug_default(self, connector_src): + """A debug default is flagged as advisory — WARNING, passed=True.""" + path = connector_src(("src/main.py", _WRONG_DEFAULT_DEBUG)) + results = run_checks(path, select=["VC306"]) + # WARNINGs are advisory (passed=True); detect by file_path presence + flagged = [ + r + for r in results + if r.severity == Severity.WARNING and r.file_path is not None + ] + assert len(flagged) >= 1 + + def test_fails_info_default(self, connector_src): + path = connector_src(("src/main.py", _WRONG_DEFAULT_INFO)) + results = run_checks(path, select=["VC306"]) + flagged = [ + r + for r in results + if r.severity == Severity.WARNING and r.file_path is not None + ] + assert len(flagged) >= 1 + + def test_passes_sdk_inherits_default(self, connector_src): + """SDK base configs already default to 'error' — should pass.""" + path = connector_src(("src/main.py", _SDK_INHERITS_DEFAULT)) + results = run_checks(path, select=["VC306"]) + assert all(r.severity == Severity.INFO for r in results) + + def test_advisory_when_no_log_level(self, connector_src): + """No log_level field found → advisory pass (can't verify).""" + path = connector_src(("src/main.py", _NO_LOG_LEVEL)) + results = run_checks(path, select=["VC306"]) + # No ERROR failures — just an advisory at most + errors = [r for r in results if r.severity == Severity.ERROR] + assert len(errors) == 0 diff --git a/shared/tools/connector_linter/tests/tests_checks/test_vc307_except_logging.py b/shared/tools/connector_linter/tests/tests_checks/test_vc307_except_logging.py new file mode 100644 index 00000000000..4669f5ab05c --- /dev/null +++ b/shared/tools/connector_linter/tests/tests_checks/test_vc307_except_logging.py @@ -0,0 +1,90 @@ +"""Unit tests for VC307 — except blocks should use error/warning logging.""" + +from connector_linter.models import Severity +from connector_linter.runner import run_checks + +_GOOD_EXCEPT = """\ +import logging +logger = logging.getLogger(__name__) + +try: + risky() +except Exception as e: + logger.error("Something failed: %s", e) +""" + +_BAD_EXCEPT_DEBUG_ONLY = """\ +import logging +logger = logging.getLogger(__name__) + +try: + risky() +except Exception as e: + logger.debug("Caught: %s", e) +""" + +_SUPPLEMENTARY_OK = """\ +import logging +logger = logging.getLogger(__name__) + +try: + risky() +except Exception as e: + logger.debug("Details: %s", e) + logger.error("Operation failed") +""" + +_KEYBOARD_INTERRUPT_EXEMPT = """\ +import logging +logger = logging.getLogger(__name__) + +try: + run() +except KeyboardInterrupt: + logger.info("Shutting down") +""" + +_NO_LOGGING_IN_EXCEPT = """\ +try: + risky() +except Exception as e: + pass +""" + + +class TestVC307ExceptLogging: + """VC307 warns when except blocks only use debug/info logging.""" + + def test_passes_with_error_logging(self, connector_src): + path = connector_src(("src/main.py", _GOOD_EXCEPT)) + results = run_checks(path, select=["VC307"]) + assert all(r.severity == Severity.INFO for r in results) + + def test_warns_debug_only(self, connector_src): + path = connector_src(("src/main.py", _BAD_EXCEPT_DEBUG_ONLY)) + results = run_checks(path, select=["VC307"]) + # WARNINGs stay passed=True (advisory); detect by file_path presence + flagged = [ + r + for r in results + if r.severity == Severity.WARNING and r.file_path is not None + ] + assert len(flagged) >= 1 + + def test_passes_when_debug_plus_error(self, connector_src): + """debug() alongside error() is fine — error takes care of alerting.""" + path = connector_src(("src/main.py", _SUPPLEMENTARY_OK)) + results = run_checks(path, select=["VC307"]) + assert all(r.severity == Severity.INFO for r in results) + + def test_keyboard_interrupt_exempt(self, connector_src): + """KeyboardInterrupt is expected control flow — info/debug is fine.""" + path = connector_src(("src/main.py", _KEYBOARD_INTERRUPT_EXEMPT)) + results = run_checks(path, select=["VC307"]) + assert all(r.severity == Severity.INFO for r in results) + + def test_no_logging_in_except_not_flagged(self, connector_src): + """VC307 only checks blocks that DO log — silent except is a different issue.""" + path = connector_src(("src/main.py", _NO_LOGGING_IN_EXCEPT)) + results = run_checks(path, select=["VC307"]) + assert all(r.severity == Severity.INFO for r in results) diff --git a/shared/tools/connector_linter/tests/tests_checks/test_vc309_absolute_imports.py b/shared/tools/connector_linter/tests/tests_checks/test_vc309_absolute_imports.py new file mode 100644 index 00000000000..070de5e0b4a --- /dev/null +++ b/shared/tools/connector_linter/tests/tests_checks/test_vc309_absolute_imports.py @@ -0,0 +1,51 @@ +"""Unit tests for VC309 — absolute imports only.""" + +from connector_linter.models import Severity +from connector_linter.runner import run_checks + + +class TestVC309AbsoluteImports: + """VC309 flags relative imports and passes on absolute ones.""" + + def test_passes_on_absolute_imports(self, connector_src): + path = connector_src( + ("src/main.py", "import os\nfrom pathlib import Path\n"), + ) + results = run_checks(path, select=["VC309"]) + assert all(r.severity == Severity.INFO for r in results) + + def test_flags_relative_import(self, connector_src): + path = connector_src( + ("src/main.py", "from . import utils\n"), + ) + results = run_checks(path, select=["VC309"]) + failed = [r for r in results if r.severity == Severity.ERROR] + assert len(failed) == 1 + assert "from . import utils" in failed[0].message + + def test_flags_parent_relative_import(self, connector_src): + path = connector_src( + ("src/main.py", "from ..base import Base\n"), + ) + results = run_checks(path, select=["VC309"]) + failed = [r for r in results if r.severity == Severity.ERROR] + assert len(failed) == 1 + assert "from ..base import Base" in failed[0].message + + def test_multiple_relative_imports_each_reported(self, connector_src): + path = connector_src( + ( + "src/main.py", + "from . import a\nfrom . import b\nfrom .. import c\n", + ), + ) + results = run_checks(path, select=["VC309"]) + failed = [r for r in results if r.severity == Severity.ERROR] + assert len(failed) == 3 + + def test_no_src_dir_is_not_a_failure(self, connector_src): + """If there are no Python sources at all, VC309 returns a finding.""" + path = connector_src() # no src files + results = run_checks(path, select=["VC309"]) + # Should get exactly one finding (no sources) — not a crash + assert len(results) == 1 diff --git a/shared/tools/connector_linter/tests/tests_checks/test_vc313_pycti_generate_id.py b/shared/tools/connector_linter/tests/tests_checks/test_vc313_pycti_generate_id.py new file mode 100644 index 00000000000..a8b1291e691 --- /dev/null +++ b/shared/tools/connector_linter/tests/tests_checks/test_vc313_pycti_generate_id.py @@ -0,0 +1,109 @@ +"""Unit tests for VC313 — STIX SDO/SRO must use pycti.XXX.generate_id().""" + +from connector_linter.models import Severity +from connector_linter.runner import run_checks + +_STIX_WITH_ID = """\ +import stix2 + +identity = stix2.Identity( + id=pycti.Identity.generate_id(name="Acme"), + name="Acme", + identity_class="organization", +) +""" + +_STIX_MISSING_ID = """\ +import stix2 + +identity = stix2.Identity( + name="Acme", + identity_class="organization", +) +""" + +_STIX_FROM_IMPORT_WITH_ID = """\ +from stix2 import Identity + +identity = Identity( + id=pycti.Identity.generate_id(name="Acme"), + name="Acme", + identity_class="organization", +) +""" + +_STIX_FROM_IMPORT_MISSING_ID = """\ +from stix2 import Identity + +identity = Identity( + name="Acme", + identity_class="organization", +) +""" + +_SCO_NO_ID_NEEDED = """\ +import stix2 + +# SCOs have deterministic IDs — no id= required +ip = stix2.IPv4Address(value="1.2.3.4") +domain = stix2.DomainName(value="example.com") +""" + +_SDK_CONNECTOR = """\ +from connectors_sdk.models import BaseExternalImportConnector + +class MyConnector(BaseExternalImportConnector): + pass +""" + + +class TestVC313PyctiGenerateId: + """VC313 flags stix2 SDO/SRO constructors without explicit id=.""" + + def test_passes_when_id_present_qualified(self, connector_src): + path = connector_src(("src/main.py", _STIX_WITH_ID)) + results = run_checks(path, select=["VC313"]) + assert all(r.severity == Severity.INFO for r in results) + + def test_flags_missing_id_qualified(self, connector_src): + path = connector_src(("src/main.py", _STIX_MISSING_ID)) + results = run_checks(path, select=["VC313"]) + failed = [r for r in results if r.severity == Severity.ERROR] + assert len(failed) == 1 + assert "Identity" in failed[0].message + + def test_passes_when_id_present_from_import(self, connector_src): + path = connector_src(("src/main.py", _STIX_FROM_IMPORT_WITH_ID)) + results = run_checks(path, select=["VC313"]) + assert all(r.severity == Severity.INFO for r in results) + + def test_flags_missing_id_from_import(self, connector_src): + path = connector_src(("src/main.py", _STIX_FROM_IMPORT_MISSING_ID)) + results = run_checks(path, select=["VC313"]) + failed = [r for r in results if r.severity == Severity.ERROR] + assert len(failed) == 1 + + def test_sco_exempt_no_flag(self, connector_src): + """SCOs (IPv4Address, DomainName…) are exempt — stix2 makes them deterministic.""" + path = connector_src(("src/main.py", _SCO_NO_ID_NEEDED)) + results = run_checks(path, select=["VC313"]) + assert all(r.severity == Severity.INFO for r in results) + + def test_multiple_violations_each_reported(self, connector_src): + src = """\ +import stix2 +a = stix2.Identity(name="A", identity_class="organization") +b = stix2.Malware(name="Evil", is_family=False) +""" + path = connector_src(("src/main.py", src)) + results = run_checks(path, select=["VC313"]) + failed = [r for r in results if r.severity == Severity.ERROR] + assert len(failed) == 2 + + def test_file_path_and_line_populated(self, connector_src): + path = connector_src(("src/main.py", _STIX_MISSING_ID)) + results = run_checks(path, select=["VC313"]) + failed = [r for r in results if r.severity == Severity.ERROR] + assert failed[0].file_path is not None + assert failed[0].line is not None + assert failed[0].line > 0 diff --git a/shared/tools/connector_linter/tests/tests_checks/test_vc315_work_initiated.py b/shared/tools/connector_linter/tests/tests_checks/test_vc315_work_initiated.py new file mode 100644 index 00000000000..155a51cb024 --- /dev/null +++ b/shared/tools/connector_linter/tests/tests_checks/test_vc315_work_initiated.py @@ -0,0 +1,65 @@ +"""Unit tests for VC315 — connector must call initiate_work before processing.""" + +from connector_linter.models import Severity +from connector_linter.runner import run_checks + +_WITH_INITIATE_WORK = """\ +class Connector: + def process(self, work_id): + work_id = self.helper.api.work.initiate_work( + self.helper.connect_id, "Processing" + ) + self._do_work() +""" + +_WITHOUT_INITIATE_WORK = """\ +class Connector: + def process(self): + self._do_work() + self.helper.api.work.to_processed(self.work_id, "Done") +""" + +_INITIATE_WORK_IN_HELPER = """\ +def run_import(helper): + wid = helper.api.work.initiate_work(helper.connect_id, "Import") + return wid +""" + + +class TestVC315WorkInitiated: + """VC315 applies to EXTERNAL_IMPORT connectors only.""" + + def test_passes_with_initiate_work(self, connector_src): + path = connector_src( + ("src/main.py", _WITH_INITIATE_WORK), + connector_type="EXTERNAL_IMPORT", + ) + results = run_checks(path, select=["VC315"]) + assert all(r.severity == Severity.INFO for r in results) + + def test_fails_without_initiate_work(self, connector_src): + path = connector_src( + ("src/main.py", _WITHOUT_INITIATE_WORK), + connector_type="EXTERNAL_IMPORT", + ) + results = run_checks(path, select=["VC315"]) + assert any(r.severity == Severity.ERROR for r in results) + + def test_passes_when_in_helper_function(self, connector_src): + """initiate_work in any function of any file is enough.""" + path = connector_src( + ("src/utils.py", _INITIATE_WORK_IN_HELPER), + connector_type="EXTERNAL_IMPORT", + ) + results = run_checks(path, select=["VC315"]) + assert all(r.severity == Severity.INFO for r in results) + + def test_skipped_for_stream_connector(self, connector_src): + """VC315 is EXTERNAL_IMPORT-only — stream connectors skip it.""" + path = connector_src( + ("src/main.py", _WITHOUT_INITIATE_WORK), + connector_type="STREAM", + ) + results = run_checks(path, select=["VC315"]) + # No findings at all (check is skipped for other types) + assert len(results) == 0 diff --git a/shared/tools/connector_linter/tests/tests_checks/test_vc316_work_closed.py b/shared/tools/connector_linter/tests/tests_checks/test_vc316_work_closed.py new file mode 100644 index 00000000000..25cdab9ff55 --- /dev/null +++ b/shared/tools/connector_linter/tests/tests_checks/test_vc316_work_closed.py @@ -0,0 +1,71 @@ +"""Unit tests for VC316 — connector must close work with to_processed.""" + +from connector_linter.models import Severity +from connector_linter.runner import run_checks + +_WITH_TO_PROCESSED_AND_ERROR = """\ +class Connector: + def process(self, work_id): + try: + self._do_work() + self.helper.api.work.to_processed(work_id, "Done") + except Exception as e: + self.helper.api.work.to_processed(work_id, str(e), in_error=True) +""" + +_WITH_TO_PROCESSED_NO_IN_ERROR = """\ +class Connector: + def process(self, work_id): + self._do_work() + self.helper.api.work.to_processed(work_id, "Done") +""" + +_WITHOUT_TO_PROCESSED = """\ +class Connector: + def process(self): + self._do_work() +""" + + +class TestVC316WorkClosed: + """VC316 checks that work is closed with to_processed (EXTERNAL_IMPORT only).""" + + def test_passes_with_to_processed_and_in_error(self, connector_src): + path = connector_src( + ("src/main.py", _WITH_TO_PROCESSED_AND_ERROR), + connector_type="EXTERNAL_IMPORT", + ) + results = run_checks(path, select=["VC316"]) + assert all(r.severity == Severity.INFO for r in results) + + def test_warns_missing_in_error_kwarg(self, connector_src): + """to_processed exists but without in_error= — advisory WARNING (passed=True).""" + path = connector_src( + ("src/main.py", _WITH_TO_PROCESSED_NO_IN_ERROR), + connector_type="EXTERNAL_IMPORT", + ) + results = run_checks(path, select=["VC316"]) + # WARNINGs are advisory: passed=True; detect by severity + suggestion + advisories = [ + r + for r in results + if r.severity == Severity.WARNING and r.suggestion is not None + ] + assert len(advisories) >= 1 + + def test_fails_without_to_processed(self, connector_src): + path = connector_src( + ("src/main.py", _WITHOUT_TO_PROCESSED), + connector_type="EXTERNAL_IMPORT", + ) + results = run_checks(path, select=["VC316"]) + assert any(r.severity == Severity.ERROR for r in results) + + def test_skipped_for_stream_connector(self, connector_src): + """VC316 only applies to EXTERNAL_IMPORT.""" + path = connector_src( + ("src/main.py", _WITHOUT_TO_PROCESSED), + connector_type="STREAM", + ) + results = run_checks(path, select=["VC316"]) + assert len(results) == 0 diff --git a/shared/tools/connector_linter/tests/tests_checks/test_vc318_helper_listen.py b/shared/tools/connector_linter/tests/tests_checks/test_vc318_helper_listen.py new file mode 100644 index 00000000000..69ce6fe63c2 --- /dev/null +++ b/shared/tools/connector_linter/tests/tests_checks/test_vc318_helper_listen.py @@ -0,0 +1,85 @@ +"""Unit tests for VC318 — enrichment connectors must use helper.listen().""" + +from connector_linter.models import Severity +from connector_linter.runner import run_checks + +_WITH_LISTEN = """\ +class MyConnector: + def run(self): + self.helper.listen(message_callback=self.process_message) +""" + +_WITHOUT_LISTEN = """\ +class MyConnector: + def run(self): + while True: + self.process() +""" + +_BARE_HELPER_LISTEN = """\ +def run(helper): + helper.listen(message_callback=process) +""" + + +class TestVC318HelperListen: + """VC318 is scoped to INTERNAL_ENRICHMENT only.""" + + def test_passes_when_listen_present(self, connector_src): + path = connector_src( + ("src/main.py", _WITH_LISTEN), + connector_type="INTERNAL_ENRICHMENT", + ) + results = run_checks(path, select=["VC318"]) + assert all(r.severity == Severity.INFO for r in results) + + def test_flags_when_listen_missing(self, connector_src): + path = connector_src( + ("src/main.py", _WITHOUT_LISTEN), + connector_type="INTERNAL_ENRICHMENT", + ) + results = run_checks(path, select=["VC318"]) + failed = [r for r in results if r.severity == Severity.ERROR] + assert len(failed) == 1 + + def test_skipped_for_external_import(self, connector_src): + """VC318 does not apply to EXTERNAL_IMPORT connectors.""" + path = connector_src( + ("src/main.py", _WITHOUT_LISTEN), + connector_type="EXTERNAL_IMPORT", + ) + results = run_checks(path, select=["VC318"]) + # Scoped check — should produce no results for wrong type + assert len(results) == 0 + + def test_skipped_for_stream(self, connector_src): + path = connector_src( + ("src/main.py", _WITHOUT_LISTEN), + connector_type="STREAM", + ) + results = run_checks(path, select=["VC318"]) + assert len(results) == 0 + + def test_bare_helper_listen_accepted(self, connector_src): + """helper.listen(...) without self. qualifier is also valid.""" + path = connector_src( + ("src/main.py", _BARE_HELPER_LISTEN), + connector_type="INTERNAL_ENRICHMENT", + ) + results = run_checks(path, select=["VC318"]) + assert all(r.severity == Severity.INFO for r in results) + + def test_unrelated_listen_not_matched(self, connector_src): + """socket.listen() or other .listen() calls must not trigger VC318.""" + src = """\ +import socket +s = socket.socket() +s.listen(5) +""" + path = connector_src( + ("src/main.py", src), + connector_type="INTERNAL_ENRICHMENT", + ) + results = run_checks(path, select=["VC318"]) + failed = [r for r in results if r.severity == Severity.ERROR] + assert len(failed) == 1 # no helper.listen → still flagged diff --git a/shared/tools/connector_linter/tests/tests_checks/test_vc325_minimal_settings_tests.py b/shared/tools/connector_linter/tests/tests_checks/test_vc325_minimal_settings_tests.py new file mode 100644 index 00000000000..e00a76f24f4 --- /dev/null +++ b/shared/tools/connector_linter/tests/tests_checks/test_vc325_minimal_settings_tests.py @@ -0,0 +1,257 @@ +"""Tests for VC325 (minimal settings tests).""" + +from connector_linter.models import Severity +from connector_linter.runner import run_checks + + +class TestVC325NoTestsDirectory: + def test_fails_when_no_tests_directory(self, minimal_connector): + results = run_checks(minimal_connector, select=["VC325"]) + + assert len(results) == 1 + assert results[0].severity is Severity.ERROR + assert "No tests/ directory found" in results[0].message + + def test_fails_when_tests_directory_is_empty(self, minimal_connector): + (minimal_connector / "tests").mkdir() + + results = run_checks(minimal_connector, select=["VC325"]) + + assert len(results) == 1 + assert results[0].severity is Severity.ERROR + assert "No test files (test_*.py) found in tests/" in results[0].message + + def test_fails_when_tests_directory_has_no_test_files(self, minimal_connector): + tests_dir = minimal_connector / "tests" + tests_dir.mkdir() + (tests_dir / "conftest.py").write_text("# no tests here\n", encoding="utf-8") + + results = run_checks(minimal_connector, select=["VC325"]) + + assert len(results) == 1 + assert results[0].severity is Severity.ERROR + assert "No test files (test_*.py) found in tests/" in results[0].message + + +class TestVC325NoSettingsTest: + def test_fails_when_no_settings_test_file(self, minimal_connector): + tests_dir = minimal_connector / "tests" + tests_dir.mkdir() + (tests_dir / "test_something_else.py").write_text( + "def test_dummy():\n pass\n", encoding="utf-8" + ) + + results = run_checks(minimal_connector, select=["VC325"]) + + assert len(results) == 1 + # Advisory: other tests exist, but settings coverage is missing → warn, not fail. + assert results[0].severity == Severity.WARNING + assert "No settings test file found" in results[0].message + + def test_detects_settings_test_by_filename(self, minimal_connector): + """A file named test_settings.py is recognised even without ConnectorSettings import.""" + tests_dir = minimal_connector / "tests" / "tests_connector" + tests_dir.mkdir(parents=True) + (tests_dir / "test_settings.py").write_text( + "from connector import ConnectorSettings\n" + "from connectors_sdk import ConfigValidationError\n\n" + "def test_valid():\n" + " class FakeSettings(ConnectorSettings):\n" + " pass\n" + " settings = FakeSettings()\n" + " assert settings is not None\n\n" + "def test_invalid():\n" + " import pytest\n" + " with pytest.raises(ConfigValidationError):\n" + " ConnectorSettings()\n", + encoding="utf-8", + ) + + results = run_checks(minimal_connector, select=["VC325"]) + + assert len(results) == 1 + assert results[0].severity is Severity.INFO + + def test_detects_settings_test_by_connector_settings_import( + self, minimal_connector + ): + """A file importing ConnectorSettings is recognised as a settings test.""" + tests_dir = minimal_connector / "tests" + tests_dir.mkdir() + (tests_dir / "test_config.py").write_text( + "from connector import ConnectorSettings\n" + "from connectors_sdk import ConfigValidationError\n\n" + "import pytest\n\n" + "def test_valid():\n" + " class FakeSettings(ConnectorSettings):\n" + " pass\n" + " s = FakeSettings()\n" + " assert s\n\n" + "def test_invalid():\n" + " with pytest.raises(ConfigValidationError):\n" + " ConnectorSettings()\n", + encoding="utf-8", + ) + + results = run_checks(minimal_connector, select=["VC325"]) + + assert len(results) == 1 + assert results[0].severity is Severity.INFO + + +class TestVC325IncompleteSettingsTest: + def _make_tests_dir(self, connector): + tests_dir = connector / "tests" / "tests_connector" + tests_dir.mkdir(parents=True) + return tests_dir + + def test_fails_when_missing_valid_input_test(self, minimal_connector): + tests_dir = self._make_tests_dir(minimal_connector) + (tests_dir / "test_settings.py").write_text( + "import pytest\n" + "from connector import ConnectorSettings\n" + "from connectors_sdk import ConfigValidationError\n\n" + "def test_invalid():\n" + " with pytest.raises(ConfigValidationError):\n" + " ConnectorSettings()\n", + encoding="utf-8", + ) + + results = run_checks(minimal_connector, select=["VC325"]) + + assert len(results) == 1 + assert results[0].severity == Severity.ERROR + assert "do not cover valid input" in results[0].message + + def test_fails_when_missing_error_input_test(self, minimal_connector): + tests_dir = self._make_tests_dir(minimal_connector) + (tests_dir / "test_settings.py").write_text( + "from connector import ConnectorSettings\n\n" + "def test_valid():\n" + " class FakeSettings(ConnectorSettings):\n" + " pass\n" + " s = FakeSettings()\n" + " assert s is not None\n", + encoding="utf-8", + ) + + results = run_checks(minimal_connector, select=["VC325"]) + + assert len(results) == 1 + assert results[0].severity == Severity.WARNING + assert "do not cover missing required fields" in results[0].message + + def test_fails_when_both_coverage_missing(self, minimal_connector): + tests_dir = self._make_tests_dir(minimal_connector) + (tests_dir / "test_settings.py").write_text( + "from connector import ConnectorSettings\n\n" + "def test_placeholder():\n" + " pass\n", + encoding="utf-8", + ) + + results = run_checks(minimal_connector, select=["VC325"]) + + assert len(results) == 2 + messages = " ".join(r.message for r in results) + assert "valid input" in messages + assert "missing required fields" in messages + # valid-input gap is an ERROR; error-input gap is advisory WARNING + valid_result = next(r for r in results if "valid input" in r.message) + error_result = next( + r for r in results if "missing required fields" in r.message + ) + assert valid_result.severity == Severity.ERROR + assert error_result.severity == Severity.WARNING + + +class TestVC325FullCompliance: + def test_passes_with_template_style_test(self, minimal_connector): + """Simulate the exact pattern from templates/external-import/tests/.""" + tests_dir = minimal_connector / "tests" / "tests_connector" + tests_dir.mkdir(parents=True) + (tests_dir / "test_settings.py").write_text( + "from typing import Any\n\n" + "import pytest\n" + "from connector import ConnectorSettings\n" + "from connectors_sdk import BaseConfigModel, ConfigValidationError\n\n\n" + "@pytest.mark.parametrize(\n" + ' "settings_dict",\n' + " [\n" + " pytest.param(\n" + " {\n" + ' "opencti": {"url": "http://localhost:8080", "token": "t"},\n' + ' "connector": {"id": "id", "scope": "x"},\n' + ' "myconn": {"api_key": "k"},\n' + " },\n" + ' id="full_valid",\n' + " ),\n" + " pytest.param(\n" + " {\n" + ' "opencti": {"url": "http://localhost:8080", "token": "t"},\n' + ' "connector": {"id": "id", "scope": "x"},\n' + ' "myconn": {},\n' + " },\n" + ' id="minimal_valid",\n' + " ),\n" + " ],\n" + ")\n" + "def test_settings_should_accept_valid_input(settings_dict):\n" + " class FakeConnectorSettings(ConnectorSettings):\n" + " @classmethod\n" + " def _load_config_dict(cls, _, handler) -> dict[str, Any]:\n" + " return handler(settings_dict)\n\n" + " settings = FakeConnectorSettings()\n" + " assert isinstance(settings.opencti, BaseConfigModel)\n\n\n" + "@pytest.mark.parametrize(\n" + ' "settings_dict, field_name",\n' + " [\n" + ' pytest.param({}, "settings", id="empty"),\n' + " ],\n" + ")\n" + "def test_settings_should_raise_when_invalid_input(settings_dict, field_name):\n" + " class FakeConnectorSettings(ConnectorSettings):\n" + " @classmethod\n" + " def _load_config_dict(cls, _, handler) -> dict[str, Any]:\n" + " return handler(settings_dict)\n\n" + " with pytest.raises(ConfigValidationError) as err:\n" + " FakeConnectorSettings()\n" + ' assert "Error validating configuration" in str(err)\n', + encoding="utf-8", + ) + + results = run_checks(minimal_connector, select=["VC325"]) + + assert len(results) == 1 + assert results[0].severity is Severity.INFO + assert "test_settings.py" in results[0].message + + def test_passes_when_coverage_split_across_multiple_test_files( + self, minimal_connector + ): + """Valid-input and error-input tests may live in separate files.""" + tests_dir = minimal_connector / "tests" + tests_dir.mkdir() + (tests_dir / "test_settings_valid.py").write_text( + "from connector import ConnectorSettings\n\n" + "def test_valid():\n" + " class FakeSettings(ConnectorSettings):\n" + " pass\n" + " s = FakeSettings()\n" + " assert s\n", + encoding="utf-8", + ) + (tests_dir / "test_settings_errors.py").write_text( + "import pytest\n" + "from connector import ConnectorSettings\n" + "from connectors_sdk import ConfigValidationError\n\n" + "def test_missing_required():\n" + " with pytest.raises(ConfigValidationError):\n" + " ConnectorSettings()\n", + encoding="utf-8", + ) + + results = run_checks(minimal_connector, select=["VC325"]) + + assert len(results) == 1 + assert results[0].severity is Severity.INFO diff --git a/shared/tools/connector_linter/tests/tests_checks/test_vc505_no_direct_api.py b/shared/tools/connector_linter/tests/tests_checks/test_vc505_no_direct_api.py new file mode 100644 index 00000000000..5608f47e3b6 --- /dev/null +++ b/shared/tools/connector_linter/tests/tests_checks/test_vc505_no_direct_api.py @@ -0,0 +1,82 @@ +"""Unit tests for VC505 — no direct GraphQL API calls via helper.api.*.""" + +from connector_linter.models import Severity +from connector_linter.runner import run_checks + +_CLEAN_BUNDLE_SEND = """\ +class Connector: + def process(self): + bundle = self._build_bundle() + self.helper.send_stix2_bundle(bundle) +""" + +_DIRECT_API_CAMPAIGN = """\ +class Connector: + def process(self): + result = self.helper.api.campaign.read(id="xxx") + return result +""" + +_DIRECT_API_MULTIPLE = """\ +class Connector: + def process(self): + r1 = self.helper.api.campaign.read(id="xxx") + r2 = self.helper.api.malware.create(name="test") +""" + +_ALLOWED_WORK_API = """\ +class Connector: + def process(self): + work_id = self.helper.api.work.initiate_work(self.helper.connect_id, "test") + self.helper.api.work.to_processed(work_id, "done") +""" + +_ALLOWED_VOCAB_API = """\ +class Connector: + def setup(self): + self.helper.api.vocabulary.list(filters=[]) + self.helper.api.marking_definition.read(id="xxx") +""" + + +class TestVC505NoDirectApi: + """VC505 warns on direct helper.api.* calls outside allowed submodules.""" + + def test_passes_bundle_send(self, connector_src): + path = connector_src(("src/main.py", _CLEAN_BUNDLE_SEND)) + results = run_checks(path, select=["VC505"]) + assert all(r.severity == Severity.INFO for r in results) + + def test_fails_direct_campaign_api(self, connector_src): + """helper.api.campaign is advisory — WARNING with passed=True.""" + path = connector_src(("src/main.py", _DIRECT_API_CAMPAIGN)) + results = run_checks(path, select=["VC505"]) + advisories = [ + r + for r in results + if r.severity == Severity.WARNING and r.file_path is not None + ] + assert len(advisories) >= 1 + + def test_fails_multiple_direct_calls(self, connector_src): + """Each direct API call produces a separate advisory finding.""" + path = connector_src(("src/main.py", _DIRECT_API_MULTIPLE)) + results = run_checks(path, select=["VC505"]) + advisories = [ + r + for r in results + if r.severity == Severity.WARNING and r.file_path is not None + ] + assert len(advisories) >= 2 + + def test_passes_work_api_allowed(self, connector_src): + """helper.api.work is whitelisted — should not be flagged.""" + path = connector_src(("src/main.py", _ALLOWED_WORK_API)) + results = run_checks(path, select=["VC505"]) + assert all(r.severity == Severity.INFO for r in results) + + def test_passes_vocab_marking_allowed(self, connector_src): + """vocabulary and marking_definition are whitelisted.""" + path = connector_src(("src/main.py", _ALLOWED_VOCAB_API)) + results = run_checks(path, select=["VC505"]) + assert all(r.severity == Severity.INFO for r in results) diff --git a/shared/tools/connector_linter/tests/tests_linter/__init__.py b/shared/tools/connector_linter/tests/tests_linter/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/shared/tools/connector_linter/tests/tests_linter/test_config.py b/shared/tools/connector_linter/tests/tests_linter/test_config.py new file mode 100644 index 00000000000..669a190639a --- /dev/null +++ b/shared/tools/connector_linter/tests/tests_linter/test_config.py @@ -0,0 +1,163 @@ +"""Tests for config.py: pyproject.toml configuration loading.""" + +import textwrap +from pathlib import Path + +from connector_linter.config import ( + LinterConfig, + _find_pyproject, + _parse_table, + get_per_file_ignores, + load_config, +) + + +class TestFindPyproject: + def test_finds_in_same_dir(self, tmp_path: Path): + (tmp_path / "pyproject.toml").write_text("[project]\n") + assert _find_pyproject(tmp_path) == tmp_path / "pyproject.toml" + + def test_finds_in_parent(self, tmp_path: Path): + (tmp_path / "pyproject.toml").write_text("[project]\n") + child = tmp_path / "sub" / "deep" + child.mkdir(parents=True) + assert _find_pyproject(child) == tmp_path / "pyproject.toml" + + def test_returns_none_when_missing(self, tmp_path: Path): + child = tmp_path / "sub" + child.mkdir() + # No pyproject.toml anywhere in tmp_path hierarchy + # (tmp_path itself is under /tmp which won't have one either) + result = _find_pyproject(child) + # Either None or finds one in a real parent — just test the method runs + assert result is None or result.name == "pyproject.toml" + + +class TestParseTable: + def test_empty_table(self): + cfg = _parse_table({}) + assert cfg.select == [] + assert cfg.ignore == [] + assert cfg.per_file_ignores == {} + assert cfg.is_empty + + def test_select_and_ignore(self): + cfg = _parse_table({"select": ["VC1xx", "VC3xx"], "ignore": ["VC306"]}) + assert cfg.select == ["VC1xx", "VC3xx"] + assert cfg.ignore == ["VC306"] + assert not cfg.is_empty + + def test_per_file_ignores(self): + cfg = _parse_table( + {"per-file-ignores": {"tests/*.py": ["VC309"], "src/main.py": ["VC308"]}} + ) + assert cfg.per_file_ignores == { + "tests/*.py": ["VC309"], + "src/main.py": ["VC308"], + } + + def test_invalid_types_fallback(self): + cfg = _parse_table( + {"select": "not-a-list", "ignore": 42, "per-file-ignores": "bad"} + ) + assert cfg.select == [] + assert cfg.ignore == [] + assert cfg.per_file_ignores == {} + + +class TestLoadConfig: + def _write_pyproject(self, path: Path, content: str) -> Path: + pyproject = path / "pyproject.toml" + pyproject.write_text(textwrap.dedent(content)) + return pyproject + + def test_loads_from_connector_dir(self, tmp_path: Path): + self._write_pyproject( + tmp_path, + """\ + [tool.connector-linter] + ignore = ["VC306", "VC307"] + """, + ) + cfg = load_config(tmp_path) + assert cfg.ignore == ["VC306", "VC307"] + + def test_no_linter_section(self, tmp_path: Path): + self._write_pyproject(tmp_path, "[tool.black]\nline-length = 88\n") + cfg = load_config(tmp_path) + assert cfg.is_empty + + def test_no_pyproject(self, tmp_path: Path): + cfg = load_config(tmp_path) + assert cfg.is_empty + + def test_explicit_config_path(self, tmp_path: Path): + custom = tmp_path / "custom" / "pyproject.toml" + custom.parent.mkdir() + custom.write_text( + '[tool.connector-linter]\nselect = ["VC101"]\n', encoding="utf-8" + ) + cfg = load_config(tmp_path, config_path=custom) + assert cfg.select == ["VC101"] + + def test_explicit_config_path_missing(self, tmp_path: Path): + cfg = load_config(tmp_path, config_path=tmp_path / "nope.toml") + assert cfg.is_empty + + def test_malformed_toml(self, tmp_path: Path): + (tmp_path / "pyproject.toml").write_text("not valid toml [[[") + cfg = load_config(tmp_path) + assert cfg.is_empty + + def test_full_config(self, tmp_path: Path): + self._write_pyproject( + tmp_path, + """\ + [tool.connector-linter] + select = ["VC1xx", "VC3xx"] + ignore = ["VC306"] + + [tool.connector-linter.per-file-ignores] + "tests/*.py" = ["VC309", "VC313"] + "src/main.py" = ["VC308"] + """, + ) + cfg = load_config(tmp_path) + assert cfg.select == ["VC1xx", "VC3xx"] + assert cfg.ignore == ["VC306"] + assert cfg.per_file_ignores["tests/*.py"] == ["VC309", "VC313"] + assert cfg.per_file_ignores["src/main.py"] == ["VC308"] + + +class TestGetPerFileIgnores: + def test_matching_glob(self, tmp_path: Path): + cfg = LinterConfig(per_file_ignores={"src/*.py": ["VC309"]}) + codes = get_per_file_ignores(cfg, tmp_path / "src" / "main.py", tmp_path) + assert codes == {"VC309"} + + def test_no_match(self, tmp_path: Path): + cfg = LinterConfig(per_file_ignores={"tests/*.py": ["VC309"]}) + codes = get_per_file_ignores(cfg, tmp_path / "src" / "main.py", tmp_path) + assert codes == set() + + def test_multiple_patterns(self, tmp_path: Path): + cfg = LinterConfig( + per_file_ignores={ + "src/*.py": ["VC309"], + "src/main.py": ["VC308"], + } + ) + codes = get_per_file_ignores(cfg, tmp_path / "src" / "main.py", tmp_path) + assert codes == {"VC308", "VC309"} + + def test_empty_config(self, tmp_path: Path): + cfg = LinterConfig() + codes = get_per_file_ignores(cfg, tmp_path / "src" / "main.py", tmp_path) + assert codes == set() + + def test_deep_glob(self, tmp_path: Path): + cfg = LinterConfig(per_file_ignores={"src/**/*.py": ["VC301"]}) + codes = get_per_file_ignores( + cfg, tmp_path / "src" / "connector" / "deep.py", tmp_path + ) + assert codes == {"VC301"} diff --git a/shared/tools/connector_linter/tests/tests_linter/test_exit_code.py b/shared/tools/connector_linter/tests/tests_linter/test_exit_code.py new file mode 100644 index 00000000000..d63dbcdbb11 --- /dev/null +++ b/shared/tools/connector_linter/tests/tests_linter/test_exit_code.py @@ -0,0 +1,43 @@ +"""Tests for exit-code semantics.""" + +from connector_linter.models import ( + CheckFinding, + CheckResult, + ConnectorContext, + Severity, +) +from connector_linter.registry import CheckRegistry +from connector_linter.runner import run_checks + + +def _has_errors(results: list[CheckResult]) -> bool: + """Replicate the exit-code logic from __main__.py.""" + return any(r.severity == Severity.ERROR for r in results) + + +class TestExitCode: + def test_all_pass_exit_0(self, dummy_checks, minimal_connector): + assert not _has_errors(run_checks(minimal_connector, select=["VC901", "VC902"])) + + def test_error_fail_exit_1(self, dummy_checks, minimal_connector): + assert _has_errors(run_checks(minimal_connector, select=["VC903"])) + + def test_warning_only_exit_0(self, _clean_registry, minimal_connector): + @CheckRegistry.register( + code="VC960", + name="test-warn-fail", + description="Warning that fails", + severity=Severity.WARNING, + ) + def _warn(ctx: ConnectorContext) -> list[CheckFinding]: + return [CheckFinding(message="not great", severity=Severity.WARNING)] + + assert not _has_errors(run_checks(minimal_connector, select=["VC960"])) + + def test_mixed_with_error_exit_1(self, dummy_checks, minimal_connector): + assert _has_errors( + run_checks(minimal_connector, select=["VC901", "VC902", "VC903"]) + ) + + def test_empty_results_exit_0(self, _clean_registry, minimal_connector): + assert not _has_errors(run_checks(minimal_connector, select=["VC000"])) diff --git a/shared/tools/connector_linter/tests/tests_linter/test_formatters.py b/shared/tools/connector_linter/tests/tests_linter/test_formatters.py new file mode 100644 index 00000000000..fff6bbb208a --- /dev/null +++ b/shared/tools/connector_linter/tests/tests_linter/test_formatters.py @@ -0,0 +1,228 @@ +"""Tests for formatters: text, JSON, and GitHub Actions output.""" + +import json +from io import StringIO +from pathlib import Path + +import pytest +from connector_linter.formatters import format_github, format_json, format_text +from connector_linter.models import CheckResult, Severity + + +def _make_result( + code: str = "VC901", + name: str = "test-check", + message: str = "everything ok", + severity: Severity = Severity.INFO, + file_path: Path | None = None, + line: int | None = None, + suggestion: str | None = None, +) -> CheckResult: + return CheckResult( + code=code, + name=name, + message=message, + severity=severity, + file_path=file_path, + line=line, + suggestion=suggestion, + ) + + +class TestFormatText: + """format_text: human-readable output.""" + + def test_failed_always_shown(self, tmp_path: Path): + results = [_make_result(severity=Severity.ERROR, message="broken")] + buf = StringIO() + format_text(results, tmp_path, buf) + output = buf.getvalue() + assert "VC901" in output + assert "FAIL" in output + assert "broken" in output + + def test_passed_shown_in_verbose(self, tmp_path: Path): + results = [_make_result(message="looks good")] + buf = StringIO() + format_text(results, tmp_path, buf, verbose=True) + output = buf.getvalue() + assert "PASS" in output + assert "looks good" in output + + def test_default_hides_passed(self, tmp_path: Path): + """Default mode suppresses passed checks with ERROR severity.""" + results = [_make_result(severity=Severity.INFO, message="ok")] + buf = StringIO() + format_text(results, tmp_path, buf) + output = buf.getvalue() + # The "ok" message should NOT appear in a result line (score summary is fine) + lines = [l for l in output.splitlines() if "VC901" in l] + assert len(lines) == 0 + + def test_default_shows_warnings(self, tmp_path: Path): + """Default mode still shows WARNING checks (they carry advisories).""" + results = [_make_result(severity=Severity.WARNING, message="advisory note")] + buf = StringIO() + format_text(results, tmp_path, buf) + output = buf.getvalue() + assert "advisory note" in output + assert "WARN" in output + + @pytest.mark.parametrize("severity", [Severity.WARNING, Severity.ERROR]) + def test_suggestion_displayed(self, tmp_path: Path, severity: Severity): + results = [ + _make_result(severity=severity, message="bad", suggestion="do this instead") + ] + buf = StringIO() + format_text(results, tmp_path, buf) + output = buf.getvalue() + assert "do this instead" in output + assert "↳" in output + + def test_score_line(self, tmp_path: Path): + results = [ + _make_result(message="ok1"), + _make_result(code="VC902", severity=Severity.ERROR, message="nope"), + ] + buf = StringIO() + format_text(results, tmp_path, buf) + output = buf.getvalue() + assert "Score: 1/2" in output + assert "50%" in output + + def test_abspath_mode(self, tmp_path: Path): + results = [ + _make_result( + file_path=Path("src/main.py"), + severity=Severity.ERROR, + message="issue", + ) + ] + buf = StringIO() + format_text(results, tmp_path, buf, abspath=True) + output = buf.getvalue() + # Should contain the resolved absolute path + assert str(tmp_path.resolve()) in output + + +class TestFormatJson: + """format_json: machine-readable JSON output.""" + + def test_valid_json(self, tmp_path: Path): + results = [ + _make_result(message="ok"), + _make_result(code="VC902", message="fail"), + ] + buf = StringIO() + format_json(results, tmp_path, buf) + data = json.loads(buf.getvalue()) + assert "connector" in data + assert "summary" in data + assert "results" in data + + def test_summary_counts(self, tmp_path: Path): + results = [ + _make_result(severity=Severity.INFO), + _make_result(code="VC902", severity=Severity.WARNING), + _make_result(code="VC903", severity=Severity.ERROR), + ] + buf = StringIO() + format_json(results, tmp_path, buf) + data = json.loads(buf.getvalue()) + assert data["summary"]["total"] == 3 + assert data["summary"]["failed"] == 1 + assert data["summary"]["errors"] == 1 # VC903 failed with ERROR severity + assert data["summary"]["warnings"] == 1 # VC902 failed with WARNING severity + + def test_result_fields(self, tmp_path: Path): + results = [ + _make_result( + code="VC901", + name="test-check", + message="found it", + severity=Severity.WARNING, + file_path=Path("src/main.py"), + line=42, + suggestion="try harder", + ) + ] + buf = StringIO() + format_json(results, tmp_path, buf) + data = json.loads(buf.getvalue()) + r = data["results"][0] + assert r["code"] == "VC901" + assert r["name"] == "test-check" + assert r["message"] == "found it" + assert r["severity"] == "warning" + assert r["line"] == 42 + assert r["suggestion"] == "try harder" + + def test_file_path_absolute(self, tmp_path: Path): + results = [_make_result(file_path=Path("src/main.py"), message="ok")] + buf = StringIO() + format_json(results, tmp_path, buf) + data = json.loads(buf.getvalue()) + fp = data["results"][0]["file_path"] + assert Path(fp).is_absolute() + + def test_score_pct(self, tmp_path: Path): + results = [ + _make_result(), + _make_result(code="VC902"), + ] + buf = StringIO() + format_json(results, tmp_path, buf) + data = json.loads(buf.getvalue()) + assert data["summary"]["score_pct"] == 100.0 + + +class TestFormatGithub: + """format_github: GitHub Actions annotations.""" + + def test_error_annotation(self, tmp_path: Path): + results = [ + _make_result( + severity=Severity.ERROR, + message="broken", + file_path=Path("src/main.py"), + line=10, + ) + ] + buf = StringIO() + format_github(results, tmp_path, buf) + output = buf.getvalue() + assert output.startswith("::error") + assert "line=10" in output + assert "VC901: broken" in output + + def test_warning_annotation(self, tmp_path: Path): + results = [ + _make_result( + severity=Severity.WARNING, + message="risky", + file_path=Path("src/main.py"), + ) + ] + buf = StringIO() + format_github(results, tmp_path, buf) + output = buf.getvalue() + assert output.startswith("::warning") + + def test_passed_checks_skipped(self, tmp_path: Path): + results = [_make_result(message="all good")] + buf = StringIO() + format_github(results, tmp_path, buf) + assert buf.getvalue() == "" + + def test_default_line_number(self, tmp_path: Path): + results = [ + _make_result( + message="no line", + severity=Severity.ERROR, + file_path=Path("src/main.py"), + line=None, + ) + ] + buf = StringIO() + format_github(results, tmp_path, buf) + assert "line=1" in buf.getvalue() diff --git a/shared/tools/connector_linter/tests/tests_linter/test_models.py b/shared/tools/connector_linter/tests/tests_linter/test_models.py new file mode 100644 index 00000000000..060dc4198d7 --- /dev/null +++ b/shared/tools/connector_linter/tests/tests_linter/test_models.py @@ -0,0 +1,26 @@ +"""Tests for ConnectorContext model loading.""" + +import pytest +from connector_linter.models import ConnectorContext + + +class TestConnectorTypeDetection: + """Connector type inference behavior.""" + + def test_detects_type_from_parent_directory(self, minimal_connector): + ctx = ConnectorContext.load(minimal_connector) + assert ctx.connector_type == "EXTERNAL_IMPORT" + + def test_detects_type_in_templates_layout(self, tmp_path): + connector_dir = tmp_path / "templates" / "external-import" + connector_dir.mkdir(parents=True) + + ctx = ConnectorContext.load(connector_dir) + assert ctx.connector_type == "EXTERNAL_IMPORT" + + def test_raises_for_unknown_layout_without_manifest_type(self, tmp_path): + connector_dir = tmp_path / "foo" / "bar" + connector_dir.mkdir(parents=True) + + with pytest.raises(ValueError, match="Unable to determine connector type"): + ConnectorContext.load(connector_dir) diff --git a/shared/tools/connector_linter/tests/tests_linter/test_noqa.py b/shared/tools/connector_linter/tests/tests_linter/test_noqa.py new file mode 100644 index 00000000000..1a9fff4c97b --- /dev/null +++ b/shared/tools/connector_linter/tests/tests_linter/test_noqa.py @@ -0,0 +1,147 @@ +"""Tests for noqa.py: parsing directives and suppression logic.""" + +from pathlib import Path + +from connector_linter.models import CheckResult, Severity +from connector_linter.noqa import ( + _NOQA_RE, + _parse_noqa_codes, + filter_noqa, + get_noqa_directives, + is_suppressed, +) + + +def _result( + code: str = "VC101", + file_path: Path | None = None, + line: int | None = None, +) -> CheckResult: + return CheckResult( + code=code, + name="test", + message="test", + severity=Severity.ERROR, + file_path=file_path, + line=line, + ) + + +class TestNoqaRegex: + """_NOQA_RE matches the expected patterns.""" + + def test_bare_noqa(self): + assert _NOQA_RE.search("x = 1 # noqa") + + def test_noqa_with_code(self): + m = _NOQA_RE.search("x = 1 # noqa: VC101") + assert m + assert m.group("codes").strip() == "VC101" + + def test_noqa_multiple_codes(self): + m = _NOQA_RE.search("x = 1 # noqa: VC101, VC302") + assert m + assert "VC101" in m.group("codes") + assert "VC302" in m.group("codes") + + def test_case_insensitive(self): + assert _NOQA_RE.search("x = 1 # NOQA") + assert _NOQA_RE.search("x = 1 # Noqa: VC101") + + def test_no_match(self): + assert not _NOQA_RE.search("x = 1 # normal comment") + + +class TestParseNoqaCodes: + def test_bare_returns_none(self): + m = _NOQA_RE.search("# noqa") + assert _parse_noqa_codes(m) is None + + def test_single_code(self): + m = _NOQA_RE.search("# noqa: VC101") + codes = _parse_noqa_codes(m) + assert codes == {"VC101"} + + def test_multiple_codes(self): + m = _NOQA_RE.search("# noqa: VC101, VC302, vc501") + codes = _parse_noqa_codes(m) + assert codes == {"VC101", "VC302", "VC501"} # uppercased + + +class TestGetNoqaDirectives: + def test_parse_file(self, tmp_path: Path): + f = tmp_path / "test.py" + f.write_text("line1\nline2 # noqa\nline3 # noqa: VC101\n") + directives = get_noqa_directives(f) + assert 1 not in directives + assert directives[2] is None # bare noqa + assert directives[3] == {"VC101"} + + +class TestIsSuppressed: + def test_bare_noqa_suppresses(self, tmp_path: Path): + f = tmp_path / "test.py" + f.write_text("x = 1 # noqa\n") + r = _result(code="VC999", file_path=f, line=1) + assert is_suppressed(r, f, 1) + + def test_matching_code_suppresses(self, tmp_path: Path): + f = tmp_path / "test.py" + f.write_text("x = 1 # noqa: VC101\n") + r = _result(code="VC101", file_path=f, line=1) + assert is_suppressed(r, f, 1) + + def test_wrong_code_no_suppress(self, tmp_path: Path): + f = tmp_path / "test.py" + f.write_text("x = 1 # noqa: VC999\n") + r = _result(code="VC101", file_path=f, line=1) + assert not is_suppressed(r, f, 1) + + def test_no_directive_no_suppress(self, tmp_path: Path): + f = tmp_path / "test.py" + f.write_text("x = 1\n") + r = _result(code="VC101", file_path=f, line=1) + assert not is_suppressed(r, f, 1) + + +class TestFilterNoqa: + def test_suppresses_matching(self, tmp_path: Path): + f = tmp_path / "test.py" + f.write_text("x = 1 # noqa: VC101\n") + results = [_result(code="VC101", file_path=f, line=1)] + filtered = filter_noqa(results, tmp_path) + assert len(filtered) == 0 + + def test_keeps_non_matching(self, tmp_path: Path): + f = tmp_path / "test.py" + f.write_text("x = 1 # noqa: VC999\n") + results = [_result(code="VC101", file_path=f, line=1)] + filtered = filter_noqa(results, tmp_path) + assert len(filtered) == 1 + + def test_no_location_passes_through(self, tmp_path: Path): + results = [_result(code="VC101", file_path=None, line=None)] + filtered = filter_noqa(results, tmp_path) + assert len(filtered) == 1 + + def test_mixed(self, tmp_path: Path): + f = tmp_path / "test.py" + f.write_text("line1 # noqa: VC101\nline2\n") + results = [ + _result(code="VC101", file_path=f, line=1), # suppressed + _result(code="VC101", file_path=f, line=2), # kept + _result(code="VC102", file_path=None, line=None), # kept (no location) + ] + filtered = filter_noqa(results, tmp_path) + assert len(filtered) == 2 + + def test_relative_path_resolved(self, tmp_path: Path): + """Relative file_path is resolved against connector_path.""" + sub = tmp_path / "src" + sub.mkdir() + f = sub / "main.py" + f.write_text("x = 1 # noqa: VC101\n") + # Check reports a relative path (common for checks) + results = [_result(code="VC101", file_path=Path("src/main.py"), line=1)] + filtered = filter_noqa(results, tmp_path) + assert len(filtered) == 0 diff --git a/shared/tools/connector_linter/tests/tests_linter/test_registry.py b/shared/tools/connector_linter/tests/tests_linter/test_registry.py new file mode 100644 index 00000000000..4a266d9ddc1 --- /dev/null +++ b/shared/tools/connector_linter/tests/tests_linter/test_registry.py @@ -0,0 +1,40 @@ +"""Tests for the CheckRegistry.""" + +from connector_linter.registry import CheckRegistry + + +class TestGetByPrefix: + def test_exact_code(self, dummy_checks): + assert list(CheckRegistry.get_by_prefix("VC901").keys()) == ["VC901"] + + def test_category_prefix(self, dummy_checks): + assert sorted(CheckRegistry.get_by_prefix("VC9").keys()) == [ + "VC901", + "VC902", + "VC903", + ] + + def test_xx_suffix_stripped(self, dummy_checks): + assert sorted(CheckRegistry.get_by_prefix("VC9xx").keys()) == [ + "VC901", + "VC902", + "VC903", + ] + + def test_no_match(self, dummy_checks): + assert CheckRegistry.get_by_prefix("VC0") == {} + + def test_partial_prefix(self, dummy_checks): + assert sorted(CheckRegistry.get_by_prefix("VC90").keys()) == [ + "VC901", + "VC902", + "VC903", + ] + + +class TestGetAll: + def test_returns_copy(self, dummy_checks): + a = CheckRegistry.get_all() + b = CheckRegistry.get_all() + assert a is not b + assert a.keys() == b.keys() diff --git a/shared/tools/connector_linter/tests/tests_linter/test_runner.py b/shared/tools/connector_linter/tests/tests_linter/test_runner.py new file mode 100644 index 00000000000..16b21259f32 --- /dev/null +++ b/shared/tools/connector_linter/tests/tests_linter/test_runner.py @@ -0,0 +1,286 @@ +"""Tests for run_checks: select/ignore, exception handling, noqa integration.""" + +from connector_linter.models import CheckFinding, ConnectorContext, Severity +from connector_linter.registry import CheckRegistry +from connector_linter.runner import run_checks + + +class TestSelectIgnore: + """--select and --ignore filter which checks are executed.""" + + def test_select_exact_code(self, dummy_checks, minimal_connector): + results = run_checks(minimal_connector, select=["VC901"]) + codes = {r.code for r in results} + assert codes == {"VC901"} + + def test_select_prefix(self, dummy_checks, minimal_connector): + results = run_checks(minimal_connector, select=["VC9xx"]) + codes = {r.code for r in results} + assert codes == {"VC901", "VC902", "VC903"} + + def test_ignore_exact_code(self, dummy_checks, minimal_connector): + results = run_checks(minimal_connector, select=["VC9xx"], ignore=["VC903"]) + codes = {r.code for r in results} + assert "VC903" not in codes + assert "VC901" in codes + + def test_ignore_prefix(self, dummy_checks, minimal_connector): + results = run_checks(minimal_connector, select=["VC9xx"], ignore=["VC90"]) + assert {r.code for r in results} == set() + + def test_select_and_ignore_combined(self, dummy_checks, minimal_connector): + results = run_checks( + minimal_connector, select=["VC901", "VC902", "VC903"], ignore=["VC902"] + ) + assert {r.code for r in results} == {"VC901", "VC903"} + + +class TestCheckExecution: + """Checks are executed and produce correct results.""" + + def test_severity_propagation(self, dummy_checks, minimal_connector): + results = run_checks(minimal_connector, select=["VC901", "VC902"]) + by_code = {r.code: r for r in results} + assert by_code["VC901"].severity == Severity.INFO + assert by_code["VC902"].severity == Severity.WARNING + + def test_suggestion_propagation(self, dummy_checks, minimal_connector): + results = run_checks(minimal_connector, select=["VC903"]) + assert results[0].suggestion == "fix it" + + def test_deterministic_order(self, dummy_checks, minimal_connector): + results = run_checks(minimal_connector, select=["VC9xx"]) + codes = [r.code for r in results] + assert codes == sorted(codes) + + +class TestExceptionHandling: + """Checks that raise exceptions produce a FAIL result, not a crash.""" + + def test_exception_yields_fail(self, _clean_registry, minimal_connector): + @CheckRegistry.register( + code="VC999", + name="test-boom", + description="Raises on purpose", + severity=Severity.ERROR, + ) + def _boom(ctx: ConnectorContext) -> list[CheckFinding]: + raise RuntimeError("kaboom") + + results = run_checks(minimal_connector, select=["VC999"]) + assert len(results) == 1 + assert results[0].severity == Severity.ERROR + assert "RuntimeError" in results[0].message + assert "kaboom" in results[0].message + + def test_exception_always_error_severity(self, _clean_registry, minimal_connector): + @CheckRegistry.register( + code="VC998", + name="test-warn-boom", + description="Warning check that crashes", + severity=Severity.WARNING, + ) + def _boom(ctx: ConnectorContext) -> list[CheckFinding]: + raise ValueError("oops") + + results = run_checks(minimal_connector, select=["VC998"]) + assert len(results) == 1 + assert results[0].severity == Severity.ERROR + + +class TestNoqaIntegration: + def test_noqa_suppresses_result(self, _clean_registry, minimal_connector): + (minimal_connector / "src" / "target.py").write_text( + "x = 1 # noqa: VC950\n", encoding="utf-8" + ) + + @CheckRegistry.register( + code="VC950", + name="test-noqa", + description="Check that can be noqa'd", + severity=Severity.ERROR, + ) + def _check(ctx: ConnectorContext) -> list[CheckFinding]: + return [ + CheckFinding( + message="flagged", + severity=Severity.ERROR, + file_path=ctx.path / "src" / "target.py", + line=1, + ) + ] + + results = run_checks(minimal_connector, select=["VC950"], disable_noqa=False) + assert len(results) == 0 + + def test_disable_noqa_keeps_result(self, _clean_registry, minimal_connector): + (minimal_connector / "src" / "target.py").write_text( + "x = 1 # noqa: VC950\n", encoding="utf-8" + ) + + @CheckRegistry.register( + code="VC950", + name="test-noqa-disabled", + description="Check with noqa disabled", + severity=Severity.ERROR, + ) + def _check(ctx: ConnectorContext) -> list[CheckFinding]: + return [ + CheckFinding( + message="flagged", + severity=Severity.ERROR, + file_path=ctx.path / "src" / "target.py", + line=1, + ) + ] + + results = run_checks(minimal_connector, select=["VC950"], disable_noqa=True) + assert len(results) == 1 + assert results[0].severity == Severity.ERROR + + def test_bare_noqa_suppresses_all(self, _clean_registry, minimal_connector): + (minimal_connector / "src" / "target.py").write_text( + "x = 1 # noqa\n", encoding="utf-8" + ) + + @CheckRegistry.register( + code="VC951", + name="test-bare-noqa", + description="Bare noqa suppresses everything", + severity=Severity.ERROR, + ) + def _check(ctx: ConnectorContext) -> list[CheckFinding]: + return [ + CheckFinding( + message="flagged", + severity=Severity.ERROR, + file_path=ctx.path / "src" / "target.py", + line=1, + ) + ] + + results = run_checks(minimal_connector, select=["VC951"], disable_noqa=False) + assert len(results) == 0 + + def test_noqa_wrong_code_no_suppress(self, _clean_registry, minimal_connector): + (minimal_connector / "src" / "target.py").write_text( + "x = 1 # noqa: VC999\n", encoding="utf-8" + ) + + @CheckRegistry.register( + code="VC952", + name="test-noqa-mismatch", + description="Noqa with different code does not suppress", + severity=Severity.ERROR, + ) + def _check(ctx: ConnectorContext) -> list[CheckFinding]: + return [ + CheckFinding( + message="flagged", + severity=Severity.ERROR, + file_path=ctx.path / "src" / "target.py", + line=1, + ) + ] + + results = run_checks(minimal_connector, select=["VC952"], disable_noqa=False) + assert len(results) == 1 + assert results[0].severity == Severity.ERROR + + +class TestPyprojectConfig: + """pyproject.toml [tool.connector-linter] integration.""" + + def test_ignore_from_pyproject(self, dummy_checks, minimal_connector): + (minimal_connector / "pyproject.toml").write_text( + '[tool.connector-linter]\nignore = ["VC903"]\n', encoding="utf-8" + ) + results = run_checks(minimal_connector, select=["VC9xx"]) + codes = {r.code for r in results} + assert "VC903" not in codes + assert "VC901" in codes + + def test_select_from_pyproject(self, dummy_checks, minimal_connector): + (minimal_connector / "pyproject.toml").write_text( + '[tool.connector-linter]\nselect = ["VC901"]\n', encoding="utf-8" + ) + results = run_checks(minimal_connector) + codes = {r.code for r in results} + assert codes == {"VC901"} + + def test_cli_select_overrides_pyproject(self, dummy_checks, minimal_connector): + (minimal_connector / "pyproject.toml").write_text( + '[tool.connector-linter]\nselect = ["VC901"]\n', encoding="utf-8" + ) + results = run_checks(minimal_connector, select=["VC902"]) + codes = {r.code for r in results} + assert codes == {"VC902"} + + def test_cli_ignore_merges_with_pyproject(self, dummy_checks, minimal_connector): + (minimal_connector / "pyproject.toml").write_text( + '[tool.connector-linter]\nignore = ["VC901"]\n', encoding="utf-8" + ) + results = run_checks(minimal_connector, select=["VC9xx"], ignore=["VC902"]) + codes = {r.code for r in results} + assert "VC901" not in codes + assert "VC902" not in codes + assert "VC903" in codes + + def test_per_file_ignores(self, _clean_registry, minimal_connector): + (minimal_connector / "src" / "target.py").write_text( + "x = 1\n", encoding="utf-8" + ) + (minimal_connector / "pyproject.toml").write_text( + '[tool.connector-linter.per-file-ignores]\n"src/target.py" = ["VC960"]\n', + encoding="utf-8", + ) + + @CheckRegistry.register( + code="VC960", + name="test-pfi", + description="Check for per-file-ignores test", + severity=Severity.ERROR, + ) + def _check(ctx: ConnectorContext) -> list[CheckFinding]: + return [ + CheckFinding( + message="flagged", + severity=Severity.ERROR, + file_path=ctx.path / "src" / "target.py", + line=1, + ) + ] + + results = run_checks(minimal_connector, select=["VC960"]) + assert len(results) == 0 + + def test_per_file_ignores_no_match(self, _clean_registry, minimal_connector): + (minimal_connector / "src" / "other.py").write_text("x = 1\n", encoding="utf-8") + (minimal_connector / "pyproject.toml").write_text( + '[tool.connector-linter.per-file-ignores]\n"src/target.py" = ["VC961"]\n', + encoding="utf-8", + ) + + @CheckRegistry.register( + code="VC961", + name="test-pfi-no-match", + description="Per-file-ignores miss test", + severity=Severity.ERROR, + ) + def _check(ctx: ConnectorContext) -> list[CheckFinding]: + return [ + CheckFinding( + message="flagged", + severity=Severity.ERROR, + file_path=ctx.path / "src" / "other.py", + line=1, + ) + ] + + results = run_checks(minimal_connector, select=["VC961"]) + assert len(results) == 1 + + def test_no_pyproject_runs_all(self, dummy_checks, minimal_connector): + results = run_checks(minimal_connector, select=["VC9xx"]) + codes = {r.code for r in results} + assert codes == {"VC901", "VC902", "VC903"} diff --git a/shared/tools/connector_linter/uv.lock b/shared/tools/connector_linter/uv.lock new file mode 100644 index 00000000000..e9f90a3a41a --- /dev/null +++ b/shared/tools/connector_linter/uv.lock @@ -0,0 +1,335 @@ +version = 1 +revision = 3 +requires-python = ">=3.12" + +[[package]] +name = "black" +version = "26.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "mypy-extensions" }, + { name = "packaging" }, + { name = "pathspec" }, + { name = "platformdirs" }, + { name = "pytokens" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e1/c5/61175d618685d42b005847464b8fb4743a67b1b8fdb75e50e5a96c31a27a/black-26.3.1.tar.gz", hash = "sha256:2c50f5063a9641c7eed7795014ba37b0f5fa227f3d408b968936e24bc0566b07", size = 666155, upload-time = "2026-03-12T03:36:03.593Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dc/f8/da5eae4fc75e78e6dceb60624e1b9662ab00d6b452996046dfa9b8a6025b/black-26.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b5e6f89631eb88a7302d416594a32faeee9fb8fb848290da9d0a5f2903519fc1", size = 1895920, upload-time = "2026-03-12T03:40:13.921Z" }, + { url = "https://files.pythonhosted.org/packages/2c/9f/04e6f26534da2e1629b2b48255c264cabf5eedc5141d04516d9d68a24111/black-26.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:41cd2012d35b47d589cb8a16faf8a32ef7a336f56356babd9fcf70939ad1897f", size = 1718499, upload-time = "2026-03-12T03:40:15.239Z" }, + { url = "https://files.pythonhosted.org/packages/04/91/a5935b2a63e31b331060c4a9fdb5a6c725840858c599032a6f3aac94055f/black-26.3.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f76ff19ec5297dd8e66eb64deda23631e642c9393ab592826fd4bdc97a4bce7", size = 1794994, upload-time = "2026-03-12T03:40:17.124Z" }, + { url = "https://files.pythonhosted.org/packages/e7/0a/86e462cdd311a3c2a8ece708d22aba17d0b2a0d5348ca34b40cdcbea512e/black-26.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:ddb113db38838eb9f043623ba274cfaf7d51d5b0c22ecb30afe58b1bb8322983", size = 1420867, upload-time = "2026-03-12T03:40:18.83Z" }, + { url = "https://files.pythonhosted.org/packages/5b/e5/22515a19cb7eaee3440325a6b0d95d2c0e88dd180cb011b12ae488e031d1/black-26.3.1-cp312-cp312-win_arm64.whl", hash = "sha256:dfdd51fc3e64ea4f35873d1b3fb25326773d55d2329ff8449139ebaad7357efb", size = 1230124, upload-time = "2026-03-12T03:40:20.425Z" }, + { url = "https://files.pythonhosted.org/packages/f5/77/5728052a3c0450c53d9bb3945c4c46b91baa62b2cafab6801411b6271e45/black-26.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:855822d90f884905362f602880ed8b5df1b7e3ee7d0db2502d4388a954cc8c54", size = 1895034, upload-time = "2026-03-12T03:40:21.813Z" }, + { url = "https://files.pythonhosted.org/packages/52/73/7cae55fdfdfbe9d19e9a8d25d145018965fe2079fa908101c3733b0c55a0/black-26.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8a33d657f3276328ce00e4d37fe70361e1ec7614da5d7b6e78de5426cb56332f", size = 1718503, upload-time = "2026-03-12T03:40:23.666Z" }, + { url = "https://files.pythonhosted.org/packages/e1/87/af89ad449e8254fdbc74654e6467e3c9381b61472cc532ee350d28cfdafb/black-26.3.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f1cd08e99d2f9317292a311dfe578fd2a24b15dbce97792f9c4d752275c1fa56", size = 1793557, upload-time = "2026-03-12T03:40:25.497Z" }, + { url = "https://files.pythonhosted.org/packages/43/10/d6c06a791d8124b843bf325ab4ac7d2f5b98731dff84d6064eafd687ded1/black-26.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:c7e72339f841b5a237ff14f7d3880ddd0fc7f98a1199e8c4327f9a4f478c1839", size = 1422766, upload-time = "2026-03-12T03:40:27.14Z" }, + { url = "https://files.pythonhosted.org/packages/59/4f/40a582c015f2d841ac24fed6390bd68f0fc896069ff3a886317959c9daf8/black-26.3.1-cp313-cp313-win_arm64.whl", hash = "sha256:afc622538b430aa4c8c853f7f63bc582b3b8030fd8c80b70fb5fa5b834e575c2", size = 1232140, upload-time = "2026-03-12T03:40:28.882Z" }, + { url = "https://files.pythonhosted.org/packages/d5/da/e36e27c9cebc1311b7579210df6f1c86e50f2d7143ae4fcf8a5017dc8809/black-26.3.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:2d6bfaf7fd0993b420bed691f20f9492d53ce9a2bcccea4b797d34e947318a78", size = 1889234, upload-time = "2026-03-12T03:40:30.964Z" }, + { url = "https://files.pythonhosted.org/packages/0e/7b/9871acf393f64a5fa33668c19350ca87177b181f44bb3d0c33b2d534f22c/black-26.3.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:f89f2ab047c76a9c03f78d0d66ca519e389519902fa27e7a91117ef7611c0568", size = 1720522, upload-time = "2026-03-12T03:40:32.346Z" }, + { url = "https://files.pythonhosted.org/packages/03/87/e766c7f2e90c07fb7586cc787c9ae6462b1eedab390191f2b7fc7f6170a9/black-26.3.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b07fc0dab849d24a80a29cfab8d8a19187d1c4685d8a5e6385a5ce323c1f015f", size = 1787824, upload-time = "2026-03-12T03:40:33.636Z" }, + { url = "https://files.pythonhosted.org/packages/ac/94/2424338fb2d1875e9e83eed4c8e9c67f6905ec25afd826a911aea2b02535/black-26.3.1-cp314-cp314-win_amd64.whl", hash = "sha256:0126ae5b7c09957da2bdbd91a9ba1207453feada9e9fe51992848658c6c8e01c", size = 1445855, upload-time = "2026-03-12T03:40:35.442Z" }, + { url = "https://files.pythonhosted.org/packages/86/43/0c3338bd928afb8ee7471f1a4eec3bdbe2245ccb4a646092a222e8669840/black-26.3.1-cp314-cp314-win_arm64.whl", hash = "sha256:92c0ec1f2cc149551a2b7b47efc32c866406b6891b0ee4625e95967c8f4acfb1", size = 1258109, upload-time = "2026-03-12T03:40:36.832Z" }, + { url = "https://files.pythonhosted.org/packages/8e/0d/52d98722666d6fc6c3dd4c76df339501d6efd40e0ff95e6186a7b7f0befd/black-26.3.1-py3-none-any.whl", hash = "sha256:2bd5aa94fc267d38bb21a70d7410a89f1a1d318841855f698746f8e7f51acd1b", size = 207542, upload-time = "2026-03-12T03:36:01.668Z" }, +] + +[[package]] +name = "cfgv" +version = "3.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4e/b5/721b8799b04bf9afe054a3899c6cf4e880fcf8563cc71c15610242490a0c/cfgv-3.5.0.tar.gz", hash = "sha256:d5b1034354820651caa73ede66a6294d6e95c1b00acc5e9b098e917404669132", size = 7334, upload-time = "2025-11-19T20:55:51.612Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl", hash = "sha256:a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0", size = 7445, upload-time = "2025-11-19T20:55:50.744Z" }, +] + +[[package]] +name = "click" +version = "8.3.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bb/63/f9e1ea081ce35720d8b92acde70daaedace594dc93b693c869e0d5910718/click-8.3.3.tar.gz", hash = "sha256:398329ad4837b2ff7cbe1dd166a4c0f8900c3ca3a218de04466f38f6497f18a2", size = 328061, upload-time = "2026-04-22T15:11:27.506Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ae/44/c1221527f6a71a01ec6fbad7fa78f1d50dfa02217385cf0fa3eec7087d59/click-8.3.3-py3-none-any.whl", hash = "sha256:a2bf429bb3033c89fa4936ffb35d5cb471e3719e1f3c8a7c3fff0b8314305613", size = 110502, upload-time = "2026-04-22T15:11:25.044Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "connector-linter" +version = "0.1.0" +source = { editable = "." } +dependencies = [ + { name = "click" }, +] + +[package.dev-dependencies] +dev = [ + { name = "black" }, + { name = "isort" }, + { name = "pre-commit" }, + { name = "pytest" }, +] + +[package.metadata] +requires-dist = [{ name = "click", specifier = ">=8.0" }] + +[package.metadata.requires-dev] +dev = [ + { name = "black", specifier = ">=26.3.1" }, + { name = "isort", specifier = ">=8.0.1" }, + { name = "pre-commit", specifier = ">=4.6.0" }, + { name = "pytest", specifier = ">=8.0" }, +] + +[[package]] +name = "distlib" +version = "0.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/96/8e/709914eb2b5749865801041647dc7f4e6d00b549cfe88b65ca192995f07c/distlib-0.4.0.tar.gz", hash = "sha256:feec40075be03a04501a973d81f633735b4b69f98b05450592310c0f401a4e0d", size = 614605, upload-time = "2025-07-17T16:52:00.465Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl", hash = "sha256:9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16", size = 469047, upload-time = "2025-07-17T16:51:58.613Z" }, +] + +[[package]] +name = "filelock" +version = "3.29.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b5/fe/997687a931ab51049acce6fa1f23e8f01216374ea81374ddee763c493db5/filelock-3.29.0.tar.gz", hash = "sha256:69974355e960702e789734cb4871f884ea6fe50bd8404051a3530bc07809cf90", size = 57571, upload-time = "2026-04-19T15:39:10.068Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/47/dd9a212ef6e343a6857485ffe25bba537304f1913bdbed446a23f7f592e1/filelock-3.29.0-py3-none-any.whl", hash = "sha256:96f5f6344709aa1572bbf631c640e4ebeeb519e08da902c39a001882f30ac258", size = 39812, upload-time = "2026-04-19T15:39:08.752Z" }, +] + +[[package]] +name = "identify" +version = "2.6.19" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/52/63/51723b5f116cc04b061cb6f5a561790abf249d25931d515cd375e063e0f4/identify-2.6.19.tar.gz", hash = "sha256:6be5020c38fcb07da56c53733538a3081ea5aa70d36a156f83044bfbf9173842", size = 99567, upload-time = "2026-04-17T18:39:50.265Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.py3-none-any.whl", hash = "sha256:20e6a87f786f768c092a721ad107fc9df0eb89347be9396cadf3f4abbd1fb78a", size = 99397, upload-time = "2026-04-17T18:39:49.221Z" }, +] + +[[package]] +name = "iniconfig" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, +] + +[[package]] +name = "isort" +version = "8.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ef/7c/ec4ab396d31b3b395e2e999c8f46dec78c5e29209fac49d1f4dace04041d/isort-8.0.1.tar.gz", hash = "sha256:171ac4ff559cdc060bcfff550bc8404a486fee0caab245679c2abe7cb253c78d", size = 769592, upload-time = "2026-02-28T10:08:20.685Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3e/95/c7c34aa53c16353c56d0b802fba48d5f5caa2cdee7958acbcb795c830416/isort-8.0.1-py3-none-any.whl", hash = "sha256:28b89bc70f751b559aeca209e6120393d43fbe2490de0559662be7a9787e3d75", size = 89733, upload-time = "2026-02-28T10:08:19.466Z" }, +] + +[[package]] +name = "mypy-extensions" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/6e/371856a3fb9d31ca8dac321cda606860fa4548858c0cc45d9d1d4ca2628b/mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558", size = 6343, upload-time = "2025-04-22T14:54:24.164Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963, upload-time = "2025-04-22T14:54:22.983Z" }, +] + +[[package]] +name = "nodeenv" +version = "1.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/24/bf/d1bda4f6168e0b2e9e5958945e01910052158313224ada5ce1fb2e1113b8/nodeenv-1.10.0.tar.gz", hash = "sha256:996c191ad80897d076bdfba80a41994c2b47c68e224c542b48feba42ba00f8bb", size = 55611, upload-time = "2025-12-20T14:08:54.006Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl", hash = "sha256:5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827", size = 23438, upload-time = "2025-12-20T14:08:52.782Z" }, +] + +[[package]] +name = "packaging" +version = "26.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/f1/e7a6dd94a8d4a5626c03e4e99c87f241ba9e350cd9e6d75123f992427270/packaging-26.2.tar.gz", hash = "sha256:ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661", size = 228134, upload-time = "2026-04-24T20:15:23.917Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e", size = 100195, upload-time = "2026-04-24T20:15:22.081Z" }, +] + +[[package]] +name = "pathspec" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/82/42f767fc1c1143d6fd36efb827202a2d997a375e160a71eb2888a925aac1/pathspec-1.1.1.tar.gz", hash = "sha256:17db5ecd524104a120e173814c90367a96a98d07c45b2e10c2f3919fff91bf5a", size = 135180, upload-time = "2026-04-27T01:46:08.907Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl", hash = "sha256:a00ce642f577bf7f473932318056212bc4f8bfdf53128c78bbd5af0b9b20b189", size = 57328, upload-time = "2026-04-27T01:46:07.06Z" }, +] + +[[package]] +name = "platformdirs" +version = "4.9.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9f/4a/0883b8e3802965322523f0b200ecf33d31f10991d0401162f4b23c698b42/platformdirs-4.9.6.tar.gz", hash = "sha256:3bfa75b0ad0db84096ae777218481852c0ebc6c727b3168c1b9e0118e458cf0a", size = 29400, upload-time = "2026-04-09T00:04:10.812Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/75/a6/a0a304dc33b49145b21f4808d763822111e67d1c3a32b524a1baf947b6e1/platformdirs-4.9.6-py3-none-any.whl", hash = "sha256:e61adb1d5e5cb3441b4b7710bea7e4c12250ca49439228cc1021c00dcfac0917", size = 21348, upload-time = "2026-04-09T00:04:09.463Z" }, +] + +[[package]] +name = "pluggy" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, +] + +[[package]] +name = "pre-commit" +version = "4.6.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cfgv" }, + { name = "identify" }, + { name = "nodeenv" }, + { name = "pyyaml" }, + { name = "virtualenv" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8e/22/2de9408ac81acbb8a7d05d4cc064a152ccf33b3d480ebe0cd292153db239/pre_commit-4.6.0.tar.gz", hash = "sha256:718d2208cef53fdc38206e40524a6d4d9576d103eb16f0fec11c875e7716e9d9", size = 198525, upload-time = "2026-04-21T20:31:41.613Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/80/6e/4b28b62ecb6aae56769c34a8ff1d661473ec1e9519e2d5f8b2c150086b26/pre_commit-4.6.0-py2.py3-none-any.whl", hash = "sha256:e2cf246f7299edcabcf15f9b0571fdce06058527f0a06535068a86d38089f29b", size = 226472, upload-time = "2026-04-21T20:31:40.092Z" }, +] + +[[package]] +name = "pygments" +version = "2.20.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991, upload-time = "2026-03-29T13:29:33.898Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z" }, +] + +[[package]] +name = "pytest" +version = "9.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7d/0d/549bd94f1a0a402dc8cf64563a117c0f3765662e2e668477624baeec44d5/pytest-9.0.3.tar.gz", hash = "sha256:b86ada508af81d19edeb213c681b1d48246c1a91d304c6c81a427674c17eb91c", size = 1572165, upload-time = "2026-04-07T17:16:18.027Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl", hash = "sha256:2c5efc453d45394fdd706ade797c0a81091eccd1d6e4bccfcd476e2b8e0ab5d9", size = 375249, upload-time = "2026-04-07T17:16:16.13Z" }, +] + +[[package]] +name = "python-discovery" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "filelock" }, + { name = "platformdirs" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/48/60/e88788207d81e46362cfbef0d4aaf4c0f49efc3c12d4c3fa3f542c34ebec/python_discovery-1.3.1.tar.gz", hash = "sha256:62f6db28064c9613e7ca76cb3f00c38c839a07c31c00dfe7ed0986493d2150a6", size = 68011, upload-time = "2026-05-12T20:53:36.336Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/6f/a05a317a66fee0aad270011461f1a63a453ed12471249f172f7d2e2bc7b4/python_discovery-1.3.1-py3-none-any.whl", hash = "sha256:ed188687ebb3b82c01a17cd5ac62fc94d9f6487a7f1a0f9dfe89753fec91039c", size = 33185, upload-time = "2026-05-12T20:53:34.969Z" }, +] + +[[package]] +name = "pytokens" +version = "0.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b6/34/b4e015b99031667a7b960f888889c5bd34ef585c85e1cb56a594b92836ac/pytokens-0.4.1.tar.gz", hash = "sha256:292052fe80923aae2260c073f822ceba21f3872ced9a68bb7953b348e561179a", size = 23015, upload-time = "2026-01-30T01:03:45.924Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/5d/e44573011401fb82e9d51e97f1290ceb377800fb4eed650b96f4753b499c/pytokens-0.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:140709331e846b728475786df8aeb27d24f48cbcf7bcd449f8de75cae7a45083", size = 160663, upload-time = "2026-01-30T01:03:06.473Z" }, + { url = "https://files.pythonhosted.org/packages/f0/e6/5bbc3019f8e6f21d09c41f8b8654536117e5e211a85d89212d59cbdab381/pytokens-0.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d6c4268598f762bc8e91f5dbf2ab2f61f7b95bdc07953b602db879b3c8c18e1", size = 255626, upload-time = "2026-01-30T01:03:08.177Z" }, + { url = "https://files.pythonhosted.org/packages/bf/3c/2d5297d82286f6f3d92770289fd439956b201c0a4fc7e72efb9b2293758e/pytokens-0.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:24afde1f53d95348b5a0eb19488661147285ca4dd7ed752bbc3e1c6242a304d1", size = 269779, upload-time = "2026-01-30T01:03:09.756Z" }, + { url = "https://files.pythonhosted.org/packages/20/01/7436e9ad693cebda0551203e0bf28f7669976c60ad07d6402098208476de/pytokens-0.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5ad948d085ed6c16413eb5fec6b3e02fa00dc29a2534f088d3302c47eb59adf9", size = 268076, upload-time = "2026-01-30T01:03:10.957Z" }, + { url = "https://files.pythonhosted.org/packages/2e/df/533c82a3c752ba13ae7ef238b7f8cdd272cf1475f03c63ac6cf3fcfb00b6/pytokens-0.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:3f901fe783e06e48e8cbdc82d631fca8f118333798193e026a50ce1b3757ea68", size = 103552, upload-time = "2026-01-30T01:03:12.066Z" }, + { url = "https://files.pythonhosted.org/packages/cb/dc/08b1a080372afda3cceb4f3c0a7ba2bde9d6a5241f1edb02a22a019ee147/pytokens-0.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8bdb9d0ce90cbf99c525e75a2fa415144fd570a1ba987380190e8b786bc6ef9b", size = 160720, upload-time = "2026-01-30T01:03:13.843Z" }, + { url = "https://files.pythonhosted.org/packages/64/0c/41ea22205da480837a700e395507e6a24425151dfb7ead73343d6e2d7ffe/pytokens-0.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5502408cab1cb18e128570f8d598981c68a50d0cbd7c61312a90507cd3a1276f", size = 254204, upload-time = "2026-01-30T01:03:14.886Z" }, + { url = "https://files.pythonhosted.org/packages/e0/d2/afe5c7f8607018beb99971489dbb846508f1b8f351fcefc225fcf4b2adc0/pytokens-0.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:29d1d8fb1030af4d231789959f21821ab6325e463f0503a61d204343c9b355d1", size = 268423, upload-time = "2026-01-30T01:03:15.936Z" }, + { url = "https://files.pythonhosted.org/packages/68/d4/00ffdbd370410c04e9591da9220a68dc1693ef7499173eb3e30d06e05ed1/pytokens-0.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:970b08dd6b86058b6dc07efe9e98414f5102974716232d10f32ff39701e841c4", size = 266859, upload-time = "2026-01-30T01:03:17.458Z" }, + { url = "https://files.pythonhosted.org/packages/a7/c9/c3161313b4ca0c601eeefabd3d3b576edaa9afdefd32da97210700e47652/pytokens-0.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:9bd7d7f544d362576be74f9d5901a22f317efc20046efe2034dced238cbbfe78", size = 103520, upload-time = "2026-01-30T01:03:18.652Z" }, + { url = "https://files.pythonhosted.org/packages/8f/a7/b470f672e6fc5fee0a01d9e75005a0e617e162381974213a945fcd274843/pytokens-0.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4a14d5f5fc78ce85e426aa159489e2d5961acf0e47575e08f35584009178e321", size = 160821, upload-time = "2026-01-30T01:03:19.684Z" }, + { url = "https://files.pythonhosted.org/packages/80/98/e83a36fe8d170c911f864bfded690d2542bfcfacb9c649d11a9e6eb9dc41/pytokens-0.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97f50fd18543be72da51dd505e2ed20d2228c74e0464e4262e4899797803d7fa", size = 254263, upload-time = "2026-01-30T01:03:20.834Z" }, + { url = "https://files.pythonhosted.org/packages/0f/95/70d7041273890f9f97a24234c00b746e8da86df462620194cef1d411ddeb/pytokens-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dc74c035f9bfca0255c1af77ddd2d6ae8419012805453e4b0e7513e17904545d", size = 268071, upload-time = "2026-01-30T01:03:21.888Z" }, + { url = "https://files.pythonhosted.org/packages/da/79/76e6d09ae19c99404656d7db9c35dfd20f2086f3eb6ecb496b5b31163bad/pytokens-0.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f66a6bbe741bd431f6d741e617e0f39ec7257ca1f89089593479347cc4d13324", size = 271716, upload-time = "2026-01-30T01:03:23.633Z" }, + { url = "https://files.pythonhosted.org/packages/79/37/482e55fa1602e0a7ff012661d8c946bafdc05e480ea5a32f4f7e336d4aa9/pytokens-0.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:b35d7e5ad269804f6697727702da3c517bb8a5228afa450ab0fa787732055fc9", size = 104539, upload-time = "2026-01-30T01:03:24.788Z" }, + { url = "https://files.pythonhosted.org/packages/30/e8/20e7db907c23f3d63b0be3b8a4fd1927f6da2395f5bcc7f72242bb963dfe/pytokens-0.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:8fcb9ba3709ff77e77f1c7022ff11d13553f3c30299a9fe246a166903e9091eb", size = 168474, upload-time = "2026-01-30T01:03:26.428Z" }, + { url = "https://files.pythonhosted.org/packages/d6/81/88a95ee9fafdd8f5f3452107748fd04c24930d500b9aba9738f3ade642cc/pytokens-0.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:79fc6b8699564e1f9b521582c35435f1bd32dd06822322ec44afdeba666d8cb3", size = 290473, upload-time = "2026-01-30T01:03:27.415Z" }, + { url = "https://files.pythonhosted.org/packages/cf/35/3aa899645e29b6375b4aed9f8d21df219e7c958c4c186b465e42ee0a06bf/pytokens-0.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d31b97b3de0f61571a124a00ffe9a81fb9939146c122c11060725bd5aea79975", size = 303485, upload-time = "2026-01-30T01:03:28.558Z" }, + { url = "https://files.pythonhosted.org/packages/52/a0/07907b6ff512674d9b201859f7d212298c44933633c946703a20c25e9d81/pytokens-0.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:967cf6e3fd4adf7de8fc73cd3043754ae79c36475c1c11d514fc72cf5490094a", size = 306698, upload-time = "2026-01-30T01:03:29.653Z" }, + { url = "https://files.pythonhosted.org/packages/39/2a/cbbf9250020a4a8dd53ba83a46c097b69e5eb49dd14e708f496f548c6612/pytokens-0.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:584c80c24b078eec1e227079d56dc22ff755e0ba8654d8383b2c549107528918", size = 116287, upload-time = "2026-01-30T01:03:30.912Z" }, + { url = "https://files.pythonhosted.org/packages/c6/78/397db326746f0a342855b81216ae1f0a32965deccfd7c830a2dbc66d2483/pytokens-0.4.1-py3-none-any.whl", hash = "sha256:26cef14744a8385f35d0e095dc8b3a7583f6c953c2e3d269c7f82484bf5ad2de", size = 13729, upload-time = "2026-01-30T01:03:45.029Z" }, +] + +[[package]] +name = "pyyaml" +version = "6.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063, upload-time = "2025-09-25T21:32:11.445Z" }, + { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973, upload-time = "2025-09-25T21:32:12.492Z" }, + { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116, upload-time = "2025-09-25T21:32:13.652Z" }, + { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011, upload-time = "2025-09-25T21:32:15.21Z" }, + { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870, upload-time = "2025-09-25T21:32:16.431Z" }, + { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089, upload-time = "2025-09-25T21:32:17.56Z" }, + { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181, upload-time = "2025-09-25T21:32:18.834Z" }, + { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658, upload-time = "2025-09-25T21:32:20.209Z" }, + { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003, upload-time = "2025-09-25T21:32:21.167Z" }, + { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" }, + { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669, upload-time = "2025-09-25T21:32:23.673Z" }, + { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" }, + { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" }, + { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159, upload-time = "2025-09-25T21:32:27.727Z" }, + { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" }, + { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" }, + { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427, upload-time = "2025-09-25T21:32:32.58Z" }, + { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090, upload-time = "2025-09-25T21:32:33.659Z" }, + { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246, upload-time = "2025-09-25T21:32:34.663Z" }, + { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" }, + { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" }, + { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" }, + { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" }, + { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" }, + { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" }, + { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" }, + { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" }, + { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" }, + { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" }, + { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" }, + { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" }, + { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" }, + { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" }, + { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, +] + +[[package]] +name = "virtualenv" +version = "21.3.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "distlib" }, + { name = "filelock" }, + { name = "platformdirs" }, + { name = "python-discovery" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/15/ba/1f6e8c957e4932be060dcdc482d339c12e0216351478add3645cdaa53c05/virtualenv-21.3.3.tar.gz", hash = "sha256:f5bda277e553b1c2b3c1a8debfc30496e1288cc93ce6b7b71b3280047e317328", size = 7613784, upload-time = "2026-05-13T18:01:30.19Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/34/a9dbe051de88a63eb7408ea66630bac38e72f7f6077d4be58737106860d9/virtualenv-21.3.3-py3-none-any.whl", hash = "sha256:7d5987d8369e098e41406efb780a3d4ca79280097293899e351a6407ee153ab3", size = 7594554, upload-time = "2026-05-13T18:01:27.815Z" }, +] diff --git a/stream/akamai/Dockerfile b/stream/akamai/Dockerfile new file mode 100644 index 00000000000..89642aa54c5 --- /dev/null +++ b/stream/akamai/Dockerfile @@ -0,0 +1,39 @@ +# Use lightweight Python Alpine image +FROM python:3.12-alpine + +# Connector type used by OpenCTI connector manager +ENV CONNECTOR_TYPE=STREAM + +# Prevent Python from creating .pyc files +ENV PYTHONDONTWRITEBYTECODE=1 + +# Disable stdout buffering (important for logs in Docker) +ENV PYTHONUNBUFFERED=1 + +# Set working directory inside container +WORKDIR /opt/opencti-connector-akamai + +# Install system dependencies required for cryptography and EdgeGrid + +RUN apk add --no-cache \ + build-base \ + libffi-dev \ + openssl-dev \ + ca-certificates \ + git + +# Copy Python dependencies first (better Docker layer caching) +COPY src/requirements.txt . + +# Install Python dependencies +RUN pip install --no-cache-dir -r requirements.txt + +# Copy full source code (including config.yml.sample) +COPY src/ . + +# Copy entrypoint script +COPY entrypoint.sh /entrypoint.sh +RUN chmod +x /entrypoint.sh + +# Container entrypoint +ENTRYPOINT ["/entrypoint.sh"] \ No newline at end of file diff --git a/stream/akamai/README.md b/stream/akamai/README.md new file mode 100644 index 00000000000..75f6089d010 --- /dev/null +++ b/stream/akamai/README.md @@ -0,0 +1,52 @@ +# OpenCTI Akamai Client List Stream Connector + +| Status | Date | Comment | +|--------|------|---------| +| Community | - | Initial IPv4 version | + +The Akamai connector synchronizes OpenCTI IPv4 indicators with Akamai Client Lists. + +## Introduction + +This STREAM connector listens to OpenCTI live stream and automatically updates an Akamai Client List based on IPv4 STIX Indicators. + +Supported object: + +- IPv4 indicators + +## Requirements + +- OpenCTI >= 6.x +- Akamai Client List API enabled +- EdgeGrid credentials +- Target Client List of type IP + +## Configuration variables + +### OpenCTI variables + +| Variable | Mandatory | Description | +|----------|-----------|-------------| +| OPENCTI_URL | Yes | OpenCTI platform URL | +| OPENCTI_TOKEN | Yes | OpenCTI API token | + +### Connector variables + +| Variable | Mandatory | Description | +|----------|-----------|-------------| +| CONNECTOR_ID | Yes | Unique UUID | +| CONNECTOR_TYPE | Yes | Must be STREAM | +| CONNECTOR_SCOPE | Yes | Must be indicator | +| CONNECTOR_LIVE_STREAM_ID | Yes | Live Stream ID | +| CONNECTOR_LIVE_STREAM_LISTEN_DELETE | Yes | Listen delete events | +| CONNECTOR_LIVE_STREAM_NO_DEPENDENCIES | Yes | No dependency filtering | +| AKAMAI_BASE_URL | Yes | Akamai API base URL | +| AKAMAI_CLIENT_TOKEN | Yes | EdgeGrid client token | +| AKAMAI_CLIENT_SECRET | Yes | EdgeGrid client secret | +| AKAMAI_ACCESS_TOKEN | Yes | EdgeGrid access token | +| AKAMAI_CLIENT_LIST_ID | Yes | Target Client List ID | + +## Deployment + +```bash +docker build -t opencti/connector-akamai-client-list:latest . diff --git a/stream/akamai/__metadata__/connector_manifest.json b/stream/akamai/__metadata__/connector_manifest.json new file mode 100644 index 00000000000..1e64b6f946e --- /dev/null +++ b/stream/akamai/__metadata__/connector_manifest.json @@ -0,0 +1,22 @@ +{ + "title": "Akamai Stream Connector", + "slug": "akamai-stream", + "description": "The Akamai Stream connector synchronizes IPv4 STIX Indicators from OpenCTI to an Akamai Client List. It listens to the OpenCTI live stream and automatically adds or removes IP indicators in the configured Akamai Client List, enabling near real-time enforcement of threat intelligence data.", + "short_description": "Synchronizes OpenCTI IPv4 indicators with an Akamai Client List via stream.", + "logo": "stream/akamai-stream/__metadata__/logo.png", + "use_cases": [ + "Threat Intelligence Distribution", + "Network Protection" + ], + "verified": false, + "last_verified_date": null, + "playbook_supported": false, + "max_confidence_level": 80, + "support_version": ">= 6.7.0", + "subscription_link": "https://www.akamai.com/", + "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/stream/akamai", + "manager_supported": false, + "container_version": "rolling", + "container_image": "opencti/connector-akamai-stream", + "container_type": "STREAM" +} \ No newline at end of file diff --git a/stream/akamai/__metadata__/logo.png b/stream/akamai/__metadata__/logo.png new file mode 100644 index 00000000000..030a104105b Binary files /dev/null and b/stream/akamai/__metadata__/logo.png differ diff --git a/stream/akamai/docker-compose.yml b/stream/akamai/docker-compose.yml new file mode 100644 index 00000000000..1786eb583fd --- /dev/null +++ b/stream/akamai/docker-compose.yml @@ -0,0 +1,27 @@ +version: '3' +services: + connector-akamai: + image: opencti/connector-akamai:latest + restart: always + environment: + + # --- OpenCTI --- + - OPENCTI_URL=http://opencti:8080 + - OPENCTI_TOKEN=ChangeMe + - CONNECTOR_ID=ChangeMe + - CONNECTOR_TYPE=STREAM + - CONNECTOR_NAME=AkamaiClientListConnector + - CONNECTOR_SCOPE=indicator + - CONNECTOR_LOG_LEVEL=info + - CONNECTOR_LIVE_STREAM_ID=live + - CONNECTOR_LIVE_STREAM_LISTEN_DELETE=true + - CONNECTOR_LIVE_STREAM_NO_DEPENDENCIES=true + + # --- Akamai EdgeGrid --- + - AKAMAI_BASE_URL=https://your-host.akamaiapis.net + - AKAMAI_CLIENT_TOKEN=ChangeMe + - AKAMAI_CLIENT_SECRET=ChangeMe + - AKAMAI_ACCESS_TOKEN=ChangeMe + + # --- Target Client List (IP type only) --- + - AKAMAI_CLIENT_LIST_ID=ChangeMe \ No newline at end of file diff --git a/stream/akamai/entrypoint.sh b/stream/akamai/entrypoint.sh new file mode 100644 index 00000000000..103448ac94c --- /dev/null +++ b/stream/akamai/entrypoint.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +# Display startup banner +echo "Starting OpenCTI Akamai Stream Connector (LOCAL TEST MODE)" + +# Launch main Python process +python main.py \ No newline at end of file diff --git a/stream/akamai/src/akamai_connector/__init__.py b/stream/akamai/src/akamai_connector/__init__.py new file mode 100644 index 00000000000..35fa0e1cba9 --- /dev/null +++ b/stream/akamai/src/akamai_connector/__init__.py @@ -0,0 +1,4 @@ +# Expose AkamaiConnector class +from .connector import AkamaiConnector + +__all__ = ["AkamaiConnector"] diff --git a/stream/akamai/src/akamai_connector/connector.py b/stream/akamai/src/akamai_connector/connector.py new file mode 100644 index 00000000000..e22556b30e1 --- /dev/null +++ b/stream/akamai/src/akamai_connector/connector.py @@ -0,0 +1,154 @@ +import ipaddress +import json +import re + +import requests +from akamai.edgegrid import EdgeGridAuth + + +def is_ip(value: str) -> bool: + """ + Validate whether a string is a valid IPv4 or IPv6 address. + """ + try: + ipaddress.ip_address(value) + return True + except ValueError: + return False + + +class AkamaiConnector: + """ + OpenCTI STREAM connector that synchronizes IPv4 indicators + with an Akamai Client List. + """ + + def __init__(self, config, helper): + self.helper = helper + self.config = config + + # Convert HttpUrl (pydantic) to string before string operations + self.base_url = str(self.config.akamai.base_url).rstrip("/") + + # Client list ID (single list) + self.client_list_id = self.config.akamai.client_list_id.strip() + + # Create HTTP session + self.session = requests.Session() + + # Apply EdgeGrid authentication using secrets from config + self.session.auth = EdgeGridAuth( + client_token=self.config.akamai.client_token.get_secret_value(), + client_secret=self.config.akamai.client_secret.get_secret_value(), + access_token=self.config.akamai.access_token.get_secret_value(), + ) + + # Enable SSL verification (production-ready) + self.session.verify = True + + # Default headers + self.session.headers.update( + { + "Content-Type": "application/json", + "Accept": "application/json", + } + ) + + self.helper.connector_logger.info( + f"Akamai connector initialized (base_url={self.base_url})" + ) + + def run(self): + """ + Start listening to OpenCTI live stream. + """ + self.helper.connector_logger.info("Listening for OpenCTI stream events...") + self.helper.listen_stream(self._process_message) + + def _extract_ip_from_pattern(self, pattern: str): + """ + Extract IP address from STIX pattern. + Example: [ipv4-addr:value = '1.2.3.4'] + """ + match = re.search(r"value\s*=\s*'([^']+)'", pattern) + if not match: + return None + + ip = match.group(1) + + if not is_ip(ip): + return None + + return ip + + def _process_message(self, msg): + """ + Handle OpenCTI stream message. + """ + try: + payload = msg.data + if isinstance(payload, str): + payload = json.loads(payload) + + data = payload.get("data") + + # Only process STIX indicators + if ( + not data + or data.get("type") != "indicator" + or data.get("pattern_type") != "stix" + ): + return + + pattern = data.get("pattern") + if not pattern: + return + + ip = self._extract_ip_from_pattern(pattern) + if not ip: + return + + if msg.event == "create": + self.helper.connector_logger.info(f"[CREATE] Adding IP: {ip}") + self._add_ip(ip) + + elif msg.event == "delete": + self.helper.connector_logger.info(f"[DELETE] Removing IP: {ip}") + self._remove_ip(ip) + + except Exception as e: + self.helper.connector_logger.error(f"Error processing message: {str(e)}") + + def _add_ip(self, ip): + """ + Add IP to Akamai Client List. + """ + url = f"{self.base_url}/client-list/v1/lists/{self.client_list_id}/items" + + payload = {"append": [{"value": ip}]} + + response = self.session.post(url, json=payload) + response.raise_for_status() + + self.helper.connector_logger.info("Add success") + + def _remove_ip(self, ip): + """ + Remove IP from Akamai Client List. + Ignore 400 if IP does not exist (idempotent behavior). + """ + url = f"{self.base_url}/client-list/v1/lists/{self.client_list_id}/items" + + payload = {"delete": [{"value": ip}]} + + response = self.session.post(url, json=payload) + + if response.status_code == 400: + self.helper.connector_logger.info( + f"IP {ip} not present in Akamai list. Ignoring." + ) + return + + response.raise_for_status() + + self.helper.connector_logger.info("Remove success") diff --git a/stream/akamai/src/akamai_connector/settings.py b/stream/akamai/src/akamai_connector/settings.py new file mode 100644 index 00000000000..d361d6f380b --- /dev/null +++ b/stream/akamai/src/akamai_connector/settings.py @@ -0,0 +1,60 @@ +from typing import Literal + +from connectors_sdk import ( + BaseConfigModel, + BaseConnectorSettings, + BaseStreamConnectorConfig, + ListFromString, +) +from pydantic import Field, HttpUrl, SecretStr + + +class StreamConnectorConfig(BaseStreamConnectorConfig): + """ + Configuration for STREAM connector behavior + """ + + name: str = Field( + default="Akamai Connector", + description="Connector name", + ) + + scope: ListFromString = Field( + default=["indicator"], + description="Connector scope", + ) + + log_level: Literal["debug", "info", "warn", "warning", "error"] = Field( + default="info", + description="Logging level", + ) + + live_stream_id: str = Field( + default="live", + description="Live stream ID", + ) + + +class AkamaiConfig(BaseConfigModel): + """ + Akamai configuration + """ + + base_url: HttpUrl = Field(description="External API base URL.") + client_token: SecretStr = Field(description="EdgeGrid client token.") + client_secret: SecretStr = Field(description="EdgeGrid client secret.") + access_token: SecretStr = Field(description="EdgeGrid access token.") + + # NOTE: + # This represents a single Akamai Client List ID (not a list of IPs). + # Kept as-is to stay aligned with Akamai API usage and avoid overcomplicating the connector. + client_list_id: str = Field(description="Target Client List ID") + + +class ConnectorSettings(BaseConnectorSettings): + """ + Global connector settings + """ + + connector: StreamConnectorConfig = Field(default_factory=StreamConnectorConfig) + akamai: AkamaiConfig = Field(default_factory=AkamaiConfig) diff --git a/stream/akamai/src/config.yml.sample b/stream/akamai/src/config.yml.sample new file mode 100644 index 00000000000..e2e6ed5f28e --- /dev/null +++ b/stream/akamai/src/config.yml.sample @@ -0,0 +1,20 @@ +opencti: + url: 'http://localhost' + token: 'ChangeMe' + +connector: + type: 'STREAM' + id: 'ChangeMe' + name: 'Akamai Connector' # optional (default: 'Akamai Connector') + # scope: 'akamai' + # log_level: 'error' # optional (default: 'error') + # live_stream_id: 'live' # optional, ID of the live stream created in the OpenCTI UI (default: 'live') + # live_stream_listen_delete: true # optional (default: true) + # live_stream_no_dependencies: true # optional (default: true) + +akamai: + base_url: 'ChangeMe' + client_token: 'ChangeMe' + client_secret: 'ChangeMe' + access_token: 'ChangeMe' + client_list_id: 'ChangeMe' \ No newline at end of file diff --git a/stream/akamai/src/main.py b/stream/akamai/src/main.py new file mode 100644 index 00000000000..85706e3b390 --- /dev/null +++ b/stream/akamai/src/main.py @@ -0,0 +1,26 @@ +import sys +import time +import traceback + +from akamai_connector.connector import AkamaiConnector +from akamai_connector.settings import ConnectorSettings +from pycti import OpenCTIConnectorHelper + +if __name__ == "__main__": + try: + # Load configuration using SDK + settings = ConnectorSettings() + + # Initialize OpenCTI helper with SDK config + helper = OpenCTIConnectorHelper(config=settings.to_helper_config()) + + # Initialize connector with settings object + # Using SDK-based configuration instead of manual environment parsing + connector = AkamaiConnector(config=settings, helper=helper) + + connector.run() + + except Exception: + traceback.print_exc() + time.sleep(10) + sys.exit(1) diff --git a/stream/akamai/src/requirements.txt b/stream/akamai/src/requirements.txt new file mode 100644 index 00000000000..13cd538cf45 --- /dev/null +++ b/stream/akamai/src/requirements.txt @@ -0,0 +1,4 @@ +pycti==7.260515.0 +requests>=2.31.0,<=2.33.0 +edgegrid-python>=2.0.0 +connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk diff --git a/stream/backup-files/src/requirements.txt b/stream/backup-files/src/requirements.txt index e1e0bd9718c..e3a19393203 100644 --- a/stream/backup-files/src/requirements.txt +++ b/stream/backup-files/src/requirements.txt @@ -1 +1 @@ -pycti==7.260309.0 +pycti==7.260515.0 diff --git a/stream/chronicle/src/requirements.txt b/stream/chronicle/src/requirements.txt index 736cb3dd876..8fb5d0777f9 100644 --- a/stream/chronicle/src/requirements.txt +++ b/stream/chronicle/src/requirements.txt @@ -1,7 +1,7 @@ -pycti==7.260309.0 +pycti==7.260515.0 google==3.0.0 -google-auth==2.48.0 +google-auth==2.50.0 google-api-core==2.30.0 -google-api-python-client==2.191.0 +google-api-python-client==2.196.0 google-auth-httplib2==0.3.0 googleapis-common-protos==1.72.0 diff --git a/stream/crowdstrike-endpoint-security/.build.env b/stream/crowdstrike-endpoint-security/.build.env new file mode 100644 index 00000000000..cdcc029ce2e --- /dev/null +++ b/stream/crowdstrike-endpoint-security/.build.env @@ -0,0 +1,2 @@ +EXTRA_PACKAGES="libxslt libxml2" + diff --git a/stream/crowdstrike-endpoint-security/__metadata__/CONNECTOR_CONFIG_DOC.md b/stream/crowdstrike-endpoint-security/__metadata__/CONNECTOR_CONFIG_DOC.md index 0a382b43e7f..3d4053d5218 100644 --- a/stream/crowdstrike-endpoint-security/__metadata__/CONNECTOR_CONFIG_DOC.md +++ b/stream/crowdstrike-endpoint-security/__metadata__/CONNECTOR_CONFIG_DOC.md @@ -20,6 +20,9 @@ Below is an exhaustive enumeration of all configurable parameters available, eac | CROWDSTRIKE_API_BASE_URL | `string` | | Format: [`uri`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | `"https://api.crowdstrike.com"` | Crowdstrike base url. | | CROWDSTRIKE_PERMANENT_DELETE | `boolean` | | boolean | `false` | Select whether or not to permanently delete data in Crowdstrike when data is deleted in OpenCTI. If set to `True`, `CONNECTOR_LIVE_STREAM_LISTEN_DELETE` must be set to `True`. | | CROWDSTRIKE_FALCON_FOR_MOBILE_ACTIVE | `boolean` | | boolean | `false` | Enable Android and iOS platform support. | +| CROWDSTRIKE_ACTION_ON_IP | `string` | | `no_action` `detect` | `"detect"` | Action to apply on IP indicators pushed to CrowdStrike. | +| CROWDSTRIKE_ACTION_ON_DOMAIN | `string` | | `no_action` `detect` | `"detect"` | Action to apply on domain indicators pushed to CrowdStrike. | +| CROWDSTRIKE_ACTION_ON_HASH | `string` | | `no_action` `allow` `detect` `prevent` | `"detect"` | Action to apply on hash indicators pushed to CrowdStrike. | | METRICS_ENABLE | `boolean` | | boolean | `false` | Whether or not Prometheus metrics should be enabled. | | METRICS_PORT | `integer` or `string` | | integer and/or string | `9113` | Port to use for metrics endpoint. | | METRICS_ADDR | `string` | | string | `"0.0.0.0"` | Bind IP address to use for metrics endpoint. | diff --git a/stream/crowdstrike-endpoint-security/__metadata__/connector_config_schema.json b/stream/crowdstrike-endpoint-security/__metadata__/connector_config_schema.json index a381274d7c8..5bf1d2db76e 100644 --- a/stream/crowdstrike-endpoint-security/__metadata__/connector_config_schema.json +++ b/stream/crowdstrike-endpoint-security/__metadata__/connector_config_schema.json @@ -88,6 +88,35 @@ "description": "Enable Android and iOS platform support.", "type": "boolean" }, + "CROWDSTRIKE_ACTION_ON_IP": { + "default": "detect", + "description": "Action to apply on IP indicators pushed to CrowdStrike.", + "enum": [ + "no_action", + "detect" + ], + "type": "string" + }, + "CROWDSTRIKE_ACTION_ON_DOMAIN": { + "default": "detect", + "description": "Action to apply on domain indicators pushed to CrowdStrike.", + "enum": [ + "no_action", + "detect" + ], + "type": "string" + }, + "CROWDSTRIKE_ACTION_ON_HASH": { + "default": "detect", + "description": "Action to apply on hash indicators pushed to CrowdStrike.", + "enum": [ + "no_action", + "allow", + "detect", + "prevent" + ], + "type": "string" + }, "METRICS_ENABLE": { "default": false, "description": "Whether or not Prometheus metrics should be enabled.", diff --git a/stream/crowdstrike-endpoint-security/docker-compose.yml b/stream/crowdstrike-endpoint-security/docker-compose.yml index 80e0b71ff77..ddc7bc9bf01 100644 --- a/stream/crowdstrike-endpoint-security/docker-compose.yml +++ b/stream/crowdstrike-endpoint-security/docker-compose.yml @@ -17,6 +17,9 @@ services: - CROWDSTRIKE_CLIENT_SECRET=ChangeMe # - CROWDSTRIKE_PERMANENT_DELETE=False # optional # - CROWDSTRIKE_FALCON_FOR_MOBILE_ACTIVE=False # optional + # - CROWDSTRIKE_ACTION_ON_IP=detect # optional (no_action, detect) + # - CROWDSTRIKE_ACTION_ON_DOMAIN=detect # optional (no_action, detect) + # - CROWDSTRIKE_ACTION_ON_HASH=detect # optional (no_action, allow, detect, prevent) # - METRICS_ENABLE=False # optional # - METRICS_PORT=9113 # optional # - METRICS_ADDR=0.0.0.0 # optional diff --git a/stream/crowdstrike-endpoint-security/src/config.yml.sample b/stream/crowdstrike-endpoint-security/src/config.yml.sample index 1ec9809af61..dcff59b66e3 100644 --- a/stream/crowdstrike-endpoint-security/src/config.yml.sample +++ b/stream/crowdstrike-endpoint-security/src/config.yml.sample @@ -18,6 +18,9 @@ crowdstrike: client_secret: 'ChangeMe' # permanent_delete: false # falcon_for_mobile_active: false +# action_on_ip: 'detect' # optional (no_action, detect) +# action_on_domain: 'detect' # optional (no_action, detect) +# action_on_hash: 'detect' # optional (no_action, allow, detect, prevent) # metrics: # enable: false # set to true to expose prometheus metrics diff --git a/stream/crowdstrike-endpoint-security/src/crowdstrike_connector/settings.py b/stream/crowdstrike-endpoint-security/src/crowdstrike_connector/settings.py index 5b2c780fd0f..139d263c13f 100644 --- a/stream/crowdstrike-endpoint-security/src/crowdstrike_connector/settings.py +++ b/stream/crowdstrike-endpoint-security/src/crowdstrike_connector/settings.py @@ -1,4 +1,5 @@ from ipaddress import IPv4Address +from typing import Literal from connectors_sdk import ( BaseConfigModel, @@ -52,6 +53,18 @@ class CrowdstrikeEndpointSecurityConfig(BaseConfigModel): description="Enable Android and iOS platform support.", default=False, ) + action_on_ip: Literal["no_action", "detect"] = Field( + description="Action to apply on IP indicators pushed to CrowdStrike.", + default="detect", + ) + action_on_domain: Literal["no_action", "detect"] = Field( + description="Action to apply on domain indicators pushed to CrowdStrike.", + default="detect", + ) + action_on_hash: Literal["no_action", "allow", "detect", "prevent"] = Field( + description="Action to apply on hash indicators pushed to CrowdStrike.", + default="detect", + ) class MetricsConfig(BaseConfigModel): diff --git a/stream/crowdstrike-endpoint-security/src/crowdstrike_services/client.py b/stream/crowdstrike-endpoint-security/src/crowdstrike_services/client.py index 4eb22f5d607..009e7a321ef 100644 --- a/stream/crowdstrike-endpoint-security/src/crowdstrike_services/client.py +++ b/stream/crowdstrike-endpoint-security/src/crowdstrike_services/client.py @@ -2,7 +2,11 @@ from falconpy import IOC as CrowdstrikeIOC -from .constants import observable_type_mapper, platform_mapper, severity_mapper +from .constants import ( + observable_type_mapper, + platform_mapper, + severity_mapper, +) if TYPE_CHECKING: from crowdstrike_connector.settings import CrowdstrikeEndpointSecurityConfig @@ -95,6 +99,21 @@ def _map_indicator_type(self, pattern: str) -> str | None: # If OpenCTI observable type is not in Crowdstrike return None + def _resolve_action(self, ioc_type: str) -> str: + """ + Resolve the CrowdStrike action for a given IOC type based on config. + Falls back to 'detect' for unknown IOC types not covered by the config. + """ + action_map = { + "ipv4": self.config.action_on_ip, + "ipv6": self.config.action_on_ip, + "domain": self.config.action_on_domain, + "sha256": self.config.action_on_hash, + "md5": self.config.action_on_hash, + } + action = action_map.get(ioc_type, "detect") + return action + def _map_severity(self, data: dict) -> str: """ Map OpenCTI indicator score to severity value from Crowdstrike @@ -184,6 +203,7 @@ def _generate_indicator_body( # IOC type is required, return None if no type if ioc_type is not None: + ioc_action = self._resolve_action(ioc_type) ioc_description = data.get("description", None) ioc_valid_until = data.get("valid_until", None) ioc_tags = data.get("labels", None) @@ -191,8 +211,8 @@ def _generate_indicator_body( ioc_platforms = self._map_platform(data) indicator = { - "action": "detect", # "Detect only" on Falcon web UI - "mobile_action": "detect", # "Detect only" on Falcon web UI + "action": ioc_action, + "mobile_action": ioc_action, "type": ioc_type, "value": ioc_value, "severity": ioc_severity, diff --git a/stream/crowdstrike-endpoint-security/src/requirements.txt b/stream/crowdstrike-endpoint-security/src/requirements.txt index 8082ca6e5d0..35761024f6b 100644 --- a/stream/crowdstrike-endpoint-security/src/requirements.txt +++ b/stream/crowdstrike-endpoint-security/src/requirements.txt @@ -1,5 +1,5 @@ -pycti==7.260309.0 -prometheus-client>=0.20.0,<=0.22.1 +pycti==7.260515.0 +prometheus-client>=0.20.0 crowdstrike-falconpy==1.6.0 pydantic >=2.8.2, <3 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk diff --git a/stream/crowdstrike-endpoint-security/tests/tests_connector/test_settings.py b/stream/crowdstrike-endpoint-security/tests/tests_connector/test_settings.py index 5e8c0d15258..fa7a89aef66 100644 --- a/stream/crowdstrike-endpoint-security/tests/tests_connector/test_settings.py +++ b/stream/crowdstrike-endpoint-security/tests/tests_connector/test_settings.py @@ -79,6 +79,25 @@ }, id="metrics_disabled_with_placeholder_addr_and_port_is_valid", ), + pytest.param( + { + "opencti": {"url": "http://localhost:8080", "token": "test-token"}, + "connector": { + "id": "connector-id", + "scope": "test, connector", + "log_level": "error", + "live_stream_id": "D5685291-70A3-47D2-AB3A-FEB0F7DA9257", + }, + "crowdstrike": { + "client_id": "test-client-id", + "client_secret": "test-client-secret", + "action_on_ip": "no_action", + "action_on_domain": "detect", + "action_on_hash": "prevent", + }, + }, + id="valid_action_settings", + ), ], ) def test_settings_should_accept_valid_input(settings_dict): @@ -211,6 +230,60 @@ def _load_config_dict(cls, _, handler) -> dict[str, Any]: "metrics.port", id="invalid_metrics_port_when_enabled", ), + pytest.param( + { + "opencti": {"url": "http://localhost:8080", "token": "test-token"}, + "connector": { + "id": "connector-id", + "scope": "test, connector", + "log_level": "error", + "live_stream_id": "D5685291-70A3-47D2-AB3A-FEB0F7DA9257", + }, + "crowdstrike": { + "client_id": "test-client-id", + "client_secret": "test-client-secret", + "action_on_ip": "prevent", + }, + }, + "crowdstrike.action_on_ip", + id="invalid_action_on_ip", + ), + pytest.param( + { + "opencti": {"url": "http://localhost:8080", "token": "test-token"}, + "connector": { + "id": "connector-id", + "scope": "test, connector", + "log_level": "error", + "live_stream_id": "D5685291-70A3-47D2-AB3A-FEB0F7DA9257", + }, + "crowdstrike": { + "client_id": "test-client-id", + "client_secret": "test-client-secret", + "action_on_domain": "prevent", + }, + }, + "crowdstrike.action_on_domain", + id="invalid_action_on_domain", + ), + pytest.param( + { + "opencti": {"url": "http://localhost:8080", "token": "test-token"}, + "connector": { + "id": "connector-id", + "scope": "test, connector", + "log_level": "error", + "live_stream_id": "D5685291-70A3-47D2-AB3A-FEB0F7DA9257", + }, + "crowdstrike": { + "client_id": "test-client-id", + "client_secret": "test-client-secret", + "action_on_hash": "invalid_action", + }, + }, + "crowdstrike.action_on_hash", + id="invalid_action_on_hash", + ), ], ) def test_settings_should_raise_when_invalid_input(settings_dict, field_name): diff --git a/stream/crowdstrike-endpoint-security/tests/tests_crowdstrike/common_fixtures.py b/stream/crowdstrike-endpoint-security/tests/tests_crowdstrike/common_fixtures.py index af38dbe2978..5c670b6d519 100644 --- a/stream/crowdstrike-endpoint-security/tests/tests_crowdstrike/common_fixtures.py +++ b/stream/crowdstrike-endpoint-security/tests/tests_crowdstrike/common_fixtures.py @@ -18,6 +18,9 @@ def setup_config(request): api_base_url="https://api.crowdstrike.com", client_id="test-client-id", client_secret=SecretStr("test-client-secret"), + action_on_ip="detect", + action_on_domain="detect", + action_on_hash="detect", ) request.cls.mock_client = CrowdstrikeClient( diff --git a/stream/crowdstrike-endpoint-security/tests/tests_crowdstrike/test_crowdstrike.py b/stream/crowdstrike-endpoint-security/tests/tests_crowdstrike/test_crowdstrike.py index 0485ebf5de3..16286e1a295 100644 --- a/stream/crowdstrike-endpoint-security/tests/tests_crowdstrike/test_crowdstrike.py +++ b/stream/crowdstrike-endpoint-security/tests/tests_crowdstrike/test_crowdstrike.py @@ -90,3 +90,66 @@ def test_incorrect_severity_mapping(self) -> None: indicator_severity = self.mock_client._map_severity(self.ioc_data) assert indicator_severity is None + + @pytest.mark.parametrize( + "ioc_type, config_attr, config_value, expected_action", + [ + ("ipv4", "action_on_ip", "detect", "detect"), + ("ipv4", "action_on_ip", "no_action", "no_action"), + ("ipv6", "action_on_ip", "detect", "detect"), + ("domain", "action_on_domain", "detect", "detect"), + ("domain", "action_on_domain", "no_action", "no_action"), + ("sha256", "action_on_hash", "detect", "detect"), + ("sha256", "action_on_hash", "prevent", "prevent"), + ("sha256", "action_on_hash", "allow", "allow"), + ("sha256", "action_on_hash", "no_action", "no_action"), + ("md5", "action_on_hash", "prevent", "prevent"), + ("unknown_type", "action_on_ip", "no_action", "detect"), + ], + ) + def test_resolve_action( + self, ioc_type: str, config_attr: str, config_value: str, expected_action: str + ) -> None: + """ + Check that _resolve_action returns the correct action based on config + """ + setattr(self.mock_config, config_attr, config_value) + action = self.mock_client._resolve_action(ioc_type) + assert action == expected_action + + def test_generate_indicator_body_uses_configured_action(self) -> None: + """ + Check that _generate_indicator_body sets the action from config + """ + self.mock_config.action_on_hash = "prevent" + self.mock_helper.get_attribute_in_extension.return_value = 50 + self.mock_helper.get_attribute_in_mitre_extension.return_value = None + + data = { + "pattern": "[file:hashes.'SHA-256' = 'abc123']", + "labels": ["test"], + } + body = self.mock_client._generate_indicator_body(data, "abc123") + + assert body is not None + indicator = body["indicators"][0] + assert indicator["action"] == "prevent" + assert indicator["mobile_action"] == "prevent" + + def test_generate_indicator_body_default_detect_for_ip(self) -> None: + """ + Check that _generate_indicator_body defaults to detect for IP + """ + self.mock_config.action_on_ip = "detect" + self.mock_helper.get_attribute_in_extension.return_value = 70 + self.mock_helper.get_attribute_in_mitre_extension.return_value = None + + data = { + "pattern": "[ipv4-addr:value = '1.2.3.4']", + } + body = self.mock_client._generate_indicator_body(data, "1.2.3.4") + + assert body is not None + indicator = body["indicators"][0] + assert indicator["action"] == "detect" + assert indicator["mobile_action"] == "detect" diff --git a/stream/elastic-security-intel/README.md b/stream/elastic-security-intel/README.md index edcf6502f93..4eb9646cf8e 100644 --- a/stream/elastic-security-intel/README.md +++ b/stream/elastic-security-intel/README.md @@ -68,17 +68,19 @@ There are a number of configuration options, which are set either in `docker-com ### Connector extra parameters environment variables -| Parameter | config.yml | Docker environment variable | Default | Mandatory | Description | -|--------------------------|---------------------------------|------------------------------------------|----------------------------------|-----------|-----------------------------------------------------------| -| Elastic URL | elastic_security.url | `ELASTIC_SECURITY_URL` | | Yes | Elasticsearch cluster URL. | -| Elastic API Key | elastic_security.api_key | `ELASTIC_SECURITY_API_KEY` | | Yes | API key for Elasticsearch (Base64 encoded id:api_key). | -| Kibana URL | elastic_security.kibana_url | `ELASTIC_SECURITY_KIBANA_URL` | | No | Kibana URL for SIEM rules (auto-detected from ES URL if not set). | -| OpenCTI External URL | elastic_security.opencti_external_url | `ELASTIC_SECURITY_OPENCTI_EXTERNAL_URL` | | No | Public URL for OpenCTI reference links in Elastic docs. | -| Verify SSL | elastic_security.verify_ssl | `ELASTIC_SECURITY_VERIFY_SSL` | true | No | Verify SSL certificates. | -| CA Certificate | elastic_security.ca_cert | `ELASTIC_SECURITY_CA_CERT` | | No | Path to CA certificate file. | -| Index Name | elastic_security.index_name | `ELASTIC_SECURITY_INDEX_NAME` | logs-ti_custom_opencti.indicator | No | Threat intelligence index name. | -| Indicator Expire Time | elastic_security.indicator_expire_time | `ELASTIC_SECURITY_INDICATOR_EXPIRE_TIME` | 90 | No | Days before indicators expire. | -| Batch Size | elastic_security.batch_size | `ELASTIC_SECURITY_BATCH_SIZE` | 100 | No | Batch size for bulk operations. | +| Parameter | config.yml | Docker environment variable | Default | Mandatory | Description | +|----------------------------|----------------------------------------|------------------------------------------|----------------------------------|-----------|-------------------------------------------------------------------| +| Elastic URL | elastic_security.url | `ELASTIC_SECURITY_URL` | | Yes | Elasticsearch cluster URL. | +| Elastic API Key | elastic_security.api_key | `ELASTIC_SECURITY_API_KEY` | | Yes | API key for Elasticsearch (Base64 encoded id:api_key). | +| Elastic client certificate | elastic_security.client_cert | `ELASTIC_SECURITY_CLIENT_CERT` | | No | Path to client certificate file (PEM format) | +| Elastic client key | elastic_security.client_key | `ELASTIC_SECURITY_CLIENT_KEY` | | No | Path to client key file (PEM format) | +| Kibana URL | elastic_security.kibana_url | `ELASTIC_SECURITY_KIBANA_URL` | | No | Kibana URL for SIEM rules (auto-detected from ES URL if not set). | +| OpenCTI External URL | elastic_security.opencti_external_url | `ELASTIC_SECURITY_OPENCTI_EXTERNAL_URL` | | No | Public URL for OpenCTI reference links in Elastic docs. | +| Verify SSL | elastic_security.verify_ssl | `ELASTIC_SECURITY_VERIFY_SSL` | true | No | Verify SSL certificates. | +| CA Certificate | elastic_security.ca_cert | `ELASTIC_SECURITY_CA_CERT` | | No | Path to CA certificate file. | +| Index Name | elastic_security.index_name | `ELASTIC_SECURITY_INDEX_NAME` | logs-ti_custom_opencti.indicator | No | Threat intelligence index name. | +| Indicator Expire Time | elastic_security.indicator_expire_time | `ELASTIC_SECURITY_INDICATOR_EXPIRE_TIME` | 90 | No | Days before indicators expire. | +| Batch Size | elastic_security.batch_size | `ELASTIC_SECURITY_BATCH_SIZE` | 100 | No | Batch size for bulk operations. | ## Deployment diff --git a/stream/elastic-security-intel/docker-compose.yml b/stream/elastic-security-intel/docker-compose.yml index 9bb79a2e597..1ff8c79ff76 100644 --- a/stream/elastic-security-intel/docker-compose.yml +++ b/stream/elastic-security-intel/docker-compose.yml @@ -10,6 +10,8 @@ services: - "CONNECTOR_NAME=Elastic Security Intel" - ELASTIC_SECURITY_URL=https://localhost:9200 - ELASTIC_SECURITY_API_KEY=ChangeMe + - ELASTIC_SECURITY_CLIENT_CERT= # Optional: Path to client certificate file (PEM format) + - ELASTIC_SECURITY_CLIENT_KEY= # Optional: Path to client key file (PEM format) - ELASTIC_SECURITY_VERIFY_SSL=true - ELASTIC_SECURITY_INDICATOR_EXPIRE_TIME=90 - ELASTIC_SECURITY_BATCH_SIZE=100 diff --git a/stream/elastic-security-intel/src/config.yml.sample b/stream/elastic-security-intel/src/config.yml.sample index f78a8a86628..35c30ad6859 100644 --- a/stream/elastic-security-intel/src/config.yml.sample +++ b/stream/elastic-security-intel/src/config.yml.sample @@ -15,6 +15,8 @@ elastic_security: kibana_url: '' # Optional: Kibana URL for SIEM rules (auto-detected from ES URL if not set) opencti_external_url: '' # Optional: Public URL for OpenCTI reference links in Elastic docs (NOT for API - uses opencti:url if empty) api_key: 'ChangeMe' # Elasticsearch API Key (Base64 encoded id:api_key) + client_cert: '' # Optional: Path to client certificate file (PEM format) + client_key: '' # Optional: Path to client key file (PEM format) verify_ssl: true # Verify SSL certificates index_name: 'logs-ti_custom_opencti.indicator' # Custom index with proper mappings indicator_expire_time: 90 # Days before indicators expire diff --git a/stream/elastic-security-intel/src/elastic_security_intel_connector/api_handler.py b/stream/elastic-security-intel/src/elastic_security_intel_connector/api_handler.py index afc76426686..bf12cb8e4a1 100644 --- a/stream/elastic-security-intel/src/elastic_security_intel_connector/api_handler.py +++ b/stream/elastic-security-intel/src/elastic_security_intel_connector/api_handler.py @@ -32,6 +32,11 @@ def __init__(self, helper: OpenCTIConnectorHelper, config): "Accept": "application/json", "kbn-xsrf": "true", # Required for Kibana API calls } + self.cert = ( + (config.elastic_client_cert, config.elastic_client_key) + if config.elastic_client_cert and config.elastic_client_key + else None + ) self.verify_ssl = config.elastic_verify_ssl self.ca_cert = config.elastic_ca_cert self.index_name = config.elastic_index_name @@ -197,6 +202,7 @@ def _create_siem_rule(self, indicator_data: dict) -> Optional[dict]: headers=self.headers, # Already includes kbn-xsrf header json=rule, verify=self._get_verify_config(), + cert=self.cert, timeout=30, ) @@ -262,6 +268,7 @@ def _update_siem_rule(self, indicator_data: dict, rule_id: str) -> Optional[dict headers=self.headers, json=rule_update, verify=self._get_verify_config(), + cert=self.cert, timeout=30, ) @@ -298,6 +305,7 @@ def _delete_siem_rule(self, rule_id: str) -> bool: headers=self.headers, params=params, verify=self._get_verify_config(), + cert=self.cert, timeout=30, ) @@ -332,6 +340,7 @@ def _find_siem_rule_by_opencti_id(self, opencti_id: str) -> Optional[str]: headers=self.headers, params=params, verify=self._get_verify_config(), + cert=self.cert, timeout=30, ) @@ -915,6 +924,7 @@ def create_indicator(self, observable_data: dict) -> Optional[dict]: headers=self.headers, json=ecs_doc, verify=self._get_verify_config(), + cert=self.cert, timeout=30, ) @@ -979,6 +989,7 @@ def bulk_create_indicators(self, observables_data: List[dict]) -> dict: headers={**self.headers, "Content-Type": "application/x-ndjson"}, data=bulk_data, verify=self._get_verify_config(), + cert=self.cert, timeout=60, # Longer timeout for bulk operations ) @@ -1059,6 +1070,7 @@ def update_indicator(self, observable_data: dict) -> Optional[dict]: headers=self.headers, json=delete_query, verify=self._get_verify_config(), + cert=self.cert, timeout=30, ) if delete_request.status_code == 200: @@ -1074,6 +1086,7 @@ def update_indicator(self, observable_data: dict) -> Optional[dict]: headers=self.headers, json=ecs_doc, verify=self._get_verify_config(), + cert=self.cert, timeout=30, ) @@ -1117,6 +1130,7 @@ def delete_indicator(self, observable_data: dict) -> bool: headers=self.headers, json=delete_query, verify=self._get_verify_config(), + cert=self.cert, timeout=30, ) @@ -1155,7 +1169,11 @@ def test_connection(self) -> bool: url = f"{self.elastic_url}/_cluster/health" response = requests.get( - url, headers=self.headers, verify=self._get_verify_config(), timeout=10 + url, + headers=self.headers, + verify=self._get_verify_config(), + cert=self.cert, + timeout=10, ) # Accept various success codes @@ -1430,7 +1448,10 @@ def setup_index_template(self) -> bool: # Check if template already exists check_url = f"{self.elastic_url}/_index_template/logs-ti_custom_opencti" check_response = requests.get( - check_url, headers=self.headers, verify=self._get_verify_config() + check_url, + headers=self.headers, + verify=self._get_verify_config(), + cert=self.cert, ) template_exists = check_response.status_code == 200 @@ -1442,6 +1463,7 @@ def setup_index_template(self) -> bool: headers=self.headers, json=index_template, verify=self._get_verify_config(), + cert=self.cert, ) if response.status_code in [200, 201]: diff --git a/stream/elastic-security-intel/src/elastic_security_intel_connector/config_variables.py b/stream/elastic-security-intel/src/elastic_security_intel_connector/config_variables.py index aa4dfc0d560..7f4851483f9 100644 --- a/stream/elastic-security-intel/src/elastic_security_intel_connector/config_variables.py +++ b/stream/elastic-security-intel/src/elastic_security_intel_connector/config_variables.py @@ -57,6 +57,18 @@ def _initialize_configurations(self) -> None: ["elastic_security", "api_key"], self.load, ) + self.elastic_client_cert = get_config_variable( + "ELASTIC_SECURITY_CLIENT_CERT", + ["elastic_security", "client_cert"], + self.load, + default=None, + ) + self.elastic_client_key = get_config_variable( + "ELASTIC_SECURITY_CLIENT_KEY", + ["elastic_security", "client_key"], + self.load, + default=None, + ) self.elastic_ca_cert = get_config_variable( "ELASTIC_SECURITY_CA_CERT", ["elastic_security", "ca_cert"], diff --git a/stream/elastic-security-intel/src/requirements.txt b/stream/elastic-security-intel/src/requirements.txt index e9684a32073..f5b8181a0c7 100644 --- a/stream/elastic-security-intel/src/requirements.txt +++ b/stream/elastic-security-intel/src/requirements.txt @@ -1 +1 @@ -pycti==7.260309.0 \ No newline at end of file +pycti==7.260515.0 \ No newline at end of file diff --git a/stream/google-secops-siem/.env.sample b/stream/google-secops-siem/.env.sample new file mode 100644 index 00000000000..7fd34118426 --- /dev/null +++ b/stream/google-secops-siem/.env.sample @@ -0,0 +1,21 @@ +OPENCTI_URL=http://localhost +OPENCTI_TOKEN=ChangeMe + +# CONNECTOR_ID=9257254e-b4ef-4592-ab11-6d37d4aa321f +# CONNECTOR_NAME=Google SecOps SIEM +# CONNECTOR_LOG_LEVEL=error +CONNECTOR_LIVE_STREAM_ID=ChangeMe +# CONNECTOR_LIVE_STREAM_LISTEN_DELETE=true +# CONNECTOR_LIVE_STREAM_NO_DEPENDENCIES=true + +# SECOPS_SIEM_PROJECT_REGION=us +SECOPS_SIEM_PROJECT_ID=ChangeMe +SECOPS_SIEM_PROJECT_INSTANCE=ChangeMe +SECOPS_SIEM_PRIVATE_KEY_ID=ChangeMe +SECOPS_SIEM_PRIVATE_KEY=ChangeMe +SECOPS_SIEM_CLIENT_EMAIL=ChangeMe +SECOPS_SIEM_CLIENT_ID=ChangeMe +# SECOPS_SIEM_AUTH_URI=https://accounts.google.com/o/oauth2/auth +# SECOPS_SIEM_TOKEN_URI=https://oauth2.googleapis.com/token +# SECOPS_SIEM_AUTH_PROVIDER_CERT=https://www.googleapis.com/oauth2/v1/certs +SECOPS_SIEM_CLIENT_CERT_URL=ChangeMe diff --git a/stream/google-secops-siem/Dockerfile b/stream/google-secops-siem/Dockerfile index e383e290349..82d493d3635 100644 --- a/stream/google-secops-siem/Dockerfile +++ b/stream/google-secops-siem/Dockerfile @@ -1,19 +1,14 @@ FROM python:3.12-alpine -ENV CONNECTOR_TYPE=STREAM -# Copy the connector -COPY src /opt/opencti-connector-google-secops-siem - -# Install Python modules -# hadolint ignore=DL3003 +WORKDIR /opt/opencti-connector-google-secops-siem RUN apk update && apk upgrade && \ apk --no-cache add git build-base libmagic libffi-dev libxml2-dev libxslt-dev -RUN cd /opt/opencti-connector-google-secops-siem && \ +RUN --mount=type=bind,source=src/requirements.txt,target=./requirements.txt,readonly \ pip3 install --no-cache-dir -r requirements.txt && \ apk del git build-base +COPY src . + # Expose and entrypoint -COPY entrypoint.sh / -RUN chmod +x /entrypoint.sh -ENTRYPOINT ["/entrypoint.sh"] +ENTRYPOINT ["python3", "main.py"] diff --git a/stream/google-secops-siem/README.md b/stream/google-secops-siem/README.md index c1ac254c3a9..6ebf7779169 100644 --- a/stream/google-secops-siem/README.md +++ b/stream/google-secops-siem/README.md @@ -1,9 +1,5 @@ # OpenCTI Google SecOps SIEM Connector -| Status | Date | Comment | -|--------|------|---------| -| Filigran Verified | - | - | - The Google SecOps SIEM connector streams OpenCTI STIX indicators to Google SecOps SIEM as UDM entities for threat detection and correlation. ## Table of Contents @@ -84,6 +80,18 @@ There are a number of configuration options, which are set either in `docker-com | Google Auth Provider Cert | secops_siem.auth_provider_cert | `SECOPS_SIEM_AUTH_PROVIDER_CERT` | | Yes | Service account `auth_provider_x509_cert_url` value. | | Google Client Cert URL | secops_siem.client_cert_url | `SECOPS_SIEM_CLIENT_CERT_URL` | | Yes | Service account `client_x509_cert_url` value. | +For `secops_siem.private_key` in `config.yml`, prefer YAML multiline format to preserve PEM newlines: + +```yaml +secops_siem: + private_key: |- + -----BEGIN PRIVATE KEY----- + ... + -----END PRIVATE KEY----- +``` + +The connector also normalizes escaped newlines (`\\n`) if the key is provided through environment variables or single-line values. + ## Deployment ### Docker Deployment diff --git a/stream/google-secops-siem/__metadata__/CONNECTOR_CONFIG_DOC.md b/stream/google-secops-siem/__metadata__/CONNECTOR_CONFIG_DOC.md new file mode 100644 index 00000000000..ca234155078 --- /dev/null +++ b/stream/google-secops-siem/__metadata__/CONNECTOR_CONFIG_DOC.md @@ -0,0 +1,28 @@ +# Connector Configurations + +Below is an exhaustive enumeration of all configurable parameters available, each accompanied by detailed explanations of their purposes, default behaviors, and usage guidelines to help you understand and utilize them effectively. + +### Type: `object` + +| Property | Type | Required | Possible values | Default | Description | +| -------- | ---- | -------- | --------------- | ------- | ----------- | +| OPENCTI_URL | `string` | ✅ | Format: [`uri`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | The base URL of the OpenCTI instance. | +| OPENCTI_TOKEN | `string` | ✅ | string | | The API token to connect to OpenCTI. | +| CONNECTOR_LIVE_STREAM_ID | `string` | ✅ | string | | ID of the live stream to connect to (created in the OpenCTI UI). | +| SECOPS_SIEM_PROJECT_ID | `string` | ✅ | string | | Google Cloud project ID for the SecOps SIEM instance. | +| SECOPS_SIEM_PROJECT_INSTANCE | `string` | ✅ | string | | Google SecOps SIEM project instance identifier. | +| SECOPS_SIEM_PRIVATE_KEY_ID | `string` | ✅ | string | | Service account private key ID. | +| SECOPS_SIEM_PRIVATE_KEY | `string` | ✅ | Format: [`password`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | Service account private key (PEM format). | +| SECOPS_SIEM_CLIENT_EMAIL | `string` | ✅ | string | | Service account client email. | +| SECOPS_SIEM_CLIENT_ID | `string` | ✅ | string | | Service account client ID. | +| SECOPS_SIEM_CLIENT_CERT_URL | `string` | ✅ | Format: [`uri`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | Client x509 certificate URL. | +| CONNECTOR_NAME | `string` | | string | `"GoogleSecOpsSIEM"` | The name of the connector. | +| CONNECTOR_SCOPE | `array` | | string | `["google-secops-siem"]` | The scope of the connector | +| CONNECTOR_LOG_LEVEL | `string` | | `debug` `info` `warn` `warning` `error` | `"error"` | The minimum level of logs to display. | +| CONNECTOR_TYPE | `const` | | `STREAM` | `"STREAM"` | | +| CONNECTOR_LIVE_STREAM_LISTEN_DELETE | `boolean` | | boolean | `true` | Whether to listen for delete events on the live stream. | +| CONNECTOR_LIVE_STREAM_NO_DEPENDENCIES | `boolean` | | boolean | `true` | Whether to ignore dependencies when processing events from the live stream. | +| SECOPS_SIEM_PROJECT_REGION | `string` | | string | `"us"` | Google SecOps SIEM project region (e.g. 'us', 'eu', 'apac'). | +| SECOPS_SIEM_AUTH_URI | `string` | | Format: [`uri`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | `"https://accounts.google.com/o/oauth2/auth"` | OAuth2 authorization URI. | +| SECOPS_SIEM_TOKEN_URI | `string` | | Format: [`uri`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | `"https://oauth2.googleapis.com/token"` | OAuth2 token URI. | +| SECOPS_SIEM_AUTH_PROVIDER_CERT | `string` | | Format: [`uri`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | `"https://www.googleapis.com/oauth2/v1/certs"` | Auth provider x509 certificate URL. | diff --git a/stream/google-secops-siem/__metadata__/connector_config_schema.json b/stream/google-secops-siem/__metadata__/connector_config_schema.json new file mode 100644 index 00000000000..2b86cbc86d1 --- /dev/null +++ b/stream/google-secops-siem/__metadata__/connector_config_schema.json @@ -0,0 +1,139 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://www.filigran.io/connectors/google-secops-siem_config.schema.json", + "type": "object", + "properties": { + "OPENCTI_URL": { + "description": "The base URL of the OpenCTI instance.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "OPENCTI_TOKEN": { + "description": "The API token to connect to OpenCTI.", + "type": "string" + }, + "CONNECTOR_NAME": { + "default": "GoogleSecOpsSIEM", + "description": "The name of the connector.", + "type": "string" + }, + "CONNECTOR_SCOPE": { + "default": [ + "google-secops-siem" + ], + "description": "The scope of the connector", + "items": { + "type": "string" + }, + "type": "array" + }, + "CONNECTOR_LOG_LEVEL": { + "default": "error", + "description": "The minimum level of logs to display.", + "enum": [ + "debug", + "info", + "warn", + "warning", + "error" + ], + "type": "string" + }, + "CONNECTOR_TYPE": { + "const": "STREAM", + "default": "STREAM", + "type": "string" + }, + "CONNECTOR_LIVE_STREAM_ID": { + "description": "ID of the live stream to connect to (created in the OpenCTI UI).", + "type": "string" + }, + "CONNECTOR_LIVE_STREAM_LISTEN_DELETE": { + "default": true, + "description": "Whether to listen for delete events on the live stream.", + "type": "boolean" + }, + "CONNECTOR_LIVE_STREAM_NO_DEPENDENCIES": { + "default": true, + "description": "Whether to ignore dependencies when processing events from the live stream.", + "type": "boolean" + }, + "SECOPS_SIEM_PROJECT_ID": { + "description": "Google Cloud project ID for the SecOps SIEM instance.", + "type": "string" + }, + "SECOPS_SIEM_PROJECT_INSTANCE": { + "description": "Google SecOps SIEM project instance identifier.", + "type": "string" + }, + "SECOPS_SIEM_PROJECT_REGION": { + "default": "us", + "description": "Google SecOps SIEM project region (e.g. 'us', 'eu', 'apac').", + "type": "string" + }, + "SECOPS_SIEM_PRIVATE_KEY_ID": { + "description": "Service account private key ID.", + "type": "string" + }, + "SECOPS_SIEM_PRIVATE_KEY": { + "description": "Service account private key (PEM format).", + "format": "password", + "type": "string", + "writeOnly": true + }, + "SECOPS_SIEM_CLIENT_EMAIL": { + "description": "Service account client email.", + "type": "string" + }, + "SECOPS_SIEM_CLIENT_ID": { + "description": "Service account client ID.", + "type": "string" + }, + "SECOPS_SIEM_AUTH_URI": { + "default": "https://accounts.google.com/o/oauth2/auth", + "description": "OAuth2 authorization URI.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "SECOPS_SIEM_TOKEN_URI": { + "default": "https://oauth2.googleapis.com/token", + "description": "OAuth2 token URI.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "SECOPS_SIEM_AUTH_PROVIDER_CERT": { + "default": "https://www.googleapis.com/oauth2/v1/certs", + "description": "Auth provider x509 certificate URL.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + "SECOPS_SIEM_CLIENT_CERT_URL": { + "description": "Client x509 certificate URL.", + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "OPENCTI_URL", + "OPENCTI_TOKEN", + "CONNECTOR_LIVE_STREAM_ID", + "SECOPS_SIEM_PROJECT_ID", + "SECOPS_SIEM_PROJECT_INSTANCE", + "SECOPS_SIEM_PRIVATE_KEY_ID", + "SECOPS_SIEM_PRIVATE_KEY", + "SECOPS_SIEM_CLIENT_EMAIL", + "SECOPS_SIEM_CLIENT_ID", + "SECOPS_SIEM_CLIENT_CERT_URL" + ], + "additionalProperties": true +} \ No newline at end of file diff --git a/stream/google-secops-siem/__metadata__/connector_manifest.json b/stream/google-secops-siem/__metadata__/connector_manifest.json index daa07bf5d11..aac237ff536 100644 --- a/stream/google-secops-siem/__metadata__/connector_manifest.json +++ b/stream/google-secops-siem/__metadata__/connector_manifest.json @@ -8,13 +8,13 @@ "SIEM & Analytics" ], "verified": true, - "last_verified_date": null, + "last_verified_date": "2026-05-05", "playbook_supported": false, "max_confidence_level": 80, "support_version": ">= 6.4.0", "subscription_link": "https://cloud.google.com/chronicle/docs/overview", "source_code": "https://github.com/OpenCTI-Platform/connectors/tree/master/stream/google-secops-siem", - "manager_supported": false, + "manager_supported": true, "container_version": "rolling", "container_image": "opencti/connector-google-secops-siem", "container_type": "STREAM" diff --git a/stream/google-secops-siem/config.yml.sample b/stream/google-secops-siem/config.yml.sample new file mode 100644 index 00000000000..d787b34e3b5 --- /dev/null +++ b/stream/google-secops-siem/config.yml.sample @@ -0,0 +1,25 @@ +opencti: + url: 'http://localhost' + token: 'ChangeMe' + +connector: +# id: '9257254e-b4ef-4592-ab11-6d37d4aa321f' +# name: 'Google SecOps SIEM' +# log_level: 'error' +# scope: 'google-secops-siem' + live_stream_id: 'ChangeMe' # ID of the live stream created in the OpenCTI UI +# live_stream_listen_delete: true +# live_stream_no_dependencies: true + +secops_siem: + # project_region: 'us' + project_id: 'ChangeMe' + project_instance: 'ChangeMe' + private_key_id: 'ChangeMe' + private_key: 'ChangeMe' + client_email: 'ChangeMe' + client_id: 'ChangeMe' + # auth_uri: 'https://accounts.google.com/o/oauth2/auth' + # token_uri: 'https://oauth2.googleapis.com/token' + # auth_provider_cert: 'https://www.googleapis.com/oauth2/v1/certs' + client_cert_url: 'ChangeMe' diff --git a/stream/google-secops-siem/docker-compose.yml b/stream/google-secops-siem/docker-compose.yml index e2a98c78276..ebbb65232d9 100644 --- a/stream/google-secops-siem/docker-compose.yml +++ b/stream/google-secops-siem/docker-compose.yml @@ -6,24 +6,24 @@ services: # Connector's generic execution parameters - OPENCTI_URL=http://localhost - OPENCTI_TOKEN=ChangeMe - # Connector's definition parameters REQUIRED - - CONNECTOR_ID=ChangeMe - - "CONNECTOR_NAME=Google SecOps SIEM" - - CONNECTOR_LOG_LEVEL=error - - CONNECTOR_LIVE_STREAM_ID=CHANGEME # ID of the live stream created in the OpenCTI UI - - CONNECTOR_LIVE_STREAM_LISTEN_DELETE=true - - CONNECTOR_LIVE_STREAM_NO_DEPENDENCIES=true + # Connector's definition parameters + # - CONNECTOR_ID=9257254e-b4ef-4592-ab11-6d37d4aa321f + # - CONNECTOR_NAME=Google SecOps SIEM + # - CONNECTOR_LOG_LEVEL=error + - CONNECTOR_LIVE_STREAM_ID=ChangeMe # ID of the live stream created in the OpenCTI UI + # - CONNECTOR_LIVE_STREAM_LISTEN_DELETE=true + # - CONNECTOR_LIVE_STREAM_NO_DEPENDENCIES=true # Connector's custom execution parameters - - SECOPS_SIEM_PROJECT_REGION=us + # - SECOPS_SIEM_PROJECT_REGION=us - SECOPS_SIEM_PROJECT_ID=ChangeMe - SECOPS_SIEM_PROJECT_INSTANCE=ChangeMe - SECOPS_SIEM_PRIVATE_KEY_ID=ChangeMe - SECOPS_SIEM_PRIVATE_KEY=ChangeMe - SECOPS_SIEM_CLIENT_EMAIL=ChangeMe - SECOPS_SIEM_CLIENT_ID=ChangeMe - - SECOPS_SIEM_AUTH_URI=ChangeMe - - SECOPS_SIEM_TOKEN_URI=ChangeMe - - SECOPS_SIEM_AUTH_PROVIDER_CERT=ChangeMe - - SECOPS_SIEM_ACLIENT_CERT_URL=ChangeMe + # - SECOPS_SIEM_AUTH_URI=https://accounts.google.com/o/oauth2/auth + # - SECOPS_SIEM_TOKEN_URI=https://oauth2.googleapis.com/token + # - SECOPS_SIEM_AUTH_PROVIDER_CERT=https://www.googleapis.com/oauth2/v1/certs + - SECOPS_SIEM_CLIENT_CERT_URL=ChangeMe restart: always diff --git a/stream/google-secops-siem/entrypoint.sh b/stream/google-secops-siem/entrypoint.sh deleted file mode 100644 index 39df60c51e8..00000000000 --- a/stream/google-secops-siem/entrypoint.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh - -# Go to the right directory -cd /opt/opencti-connector-google-secops-siem - -# Launch the worker -python3 main.py \ No newline at end of file diff --git a/stream/google-secops-siem/src/config.yml.sample b/stream/google-secops-siem/src/config.yml.sample deleted file mode 100644 index 7d6b376c257..00000000000 --- a/stream/google-secops-siem/src/config.yml.sample +++ /dev/null @@ -1,25 +0,0 @@ -opencti: - url: 'http://localhost' - token: 'ChangeMe' - -connector: - type: 'STREAM' - id: 'ChangeMe' - name: 'Google SecOps SIEM' - log_level: 'info' - live_stream_id: 'ChangeMe' # ID of the live stream created in the OpenCTI UI - live_stream_listen_delete: true - live_stream_no_dependencies: true - -secops_siem: - project_region: 'us' - project_id: 'ChangeMe' - project_instance: 'ChangeMe' - private_key_id: 'ChangeMe' - private_key: 'ChangeMe' - client_email: 'ChangeMe' - client_id: 'ChangeMe' - auth_uri: 'ChangeMe' - token_uri: 'ChangeMe' - auth_provider_cert: 'ChangeMe' - client_cert_url: 'ChangeMe' diff --git a/stream/google-secops-siem/src/main.py b/stream/google-secops-siem/src/main.py index 1b3bd99b695..166b12607b6 100644 --- a/stream/google-secops-siem/src/main.py +++ b/stream/google-secops-siem/src/main.py @@ -1,6 +1,7 @@ import traceback -from secops_siem_connector import SecOpsSIEMConnector +from pycti import OpenCTIConnectorHelper +from secops_siem_connector import ConnectorSettings, SecOpsSIEMConnector if __name__ == "__main__": """ @@ -13,7 +14,10 @@ It signals to the operating system and any calling processes that the program did not complete successfully. """ try: - connector = SecOpsSIEMConnector() + settings = ConnectorSettings() + helper = OpenCTIConnectorHelper(config=settings.to_helper_config()) + + connector = SecOpsSIEMConnector(config=settings, helper=helper) connector.run() except Exception: traceback.print_exc() diff --git a/stream/google-secops-siem/src/requirements.txt b/stream/google-secops-siem/src/requirements.txt index 249f073e97d..46e8d6a483a 100644 --- a/stream/google-secops-siem/src/requirements.txt +++ b/stream/google-secops-siem/src/requirements.txt @@ -1,2 +1,4 @@ -pycti==7.260309.0 -google-auth==2.48.0 +pycti==7.260515.0 +google-auth==2.50.0 +pydantic >=2.8.2, <3 +connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk diff --git a/stream/google-secops-siem/src/secops_siem_connector/__init__.py b/stream/google-secops-siem/src/secops_siem_connector/__init__.py index 65242957f85..91d927bbe19 100644 --- a/stream/google-secops-siem/src/secops_siem_connector/__init__.py +++ b/stream/google-secops-siem/src/secops_siem_connector/__init__.py @@ -1,3 +1,4 @@ -from .connector import SecOpsSIEMConnector +from secops_siem_connector.connector import SecOpsSIEMConnector +from secops_siem_connector.settings import ConnectorSettings -__all__ = ["SecOpsSIEMConnector"] +__all__ = ["ConnectorSettings", "SecOpsSIEMConnector"] diff --git a/stream/google-secops-siem/src/secops_siem_connector/connector.py b/stream/google-secops-siem/src/secops_siem_connector/connector.py index a96112fbc5d..12967034625 100644 --- a/stream/google-secops-siem/src/secops_siem_connector/connector.py +++ b/stream/google-secops-siem/src/secops_siem_connector/connector.py @@ -3,20 +3,21 @@ from json import JSONDecodeError from pycti import OpenCTIConnectorHelper -from secops_siem_services import ConfigConnector, CTIConverter, SecOpsEntitiesClient +from secops_siem_connector.settings import ConnectorSettings +from secops_siem_services import CTIConverter, SecOpsEntitiesClient class SecOpsSIEMConnector: - - def __init__(self): + def __init__( + self, config: ConnectorSettings, helper: OpenCTIConnectorHelper + ) -> None: """ Initialize the Connector with necessary configurations """ - - self.config = ConfigConnector() - self.helper = OpenCTIConnectorHelper(self.config.load) - self.converter = CTIConverter(self.helper, self.config) - self.api_client = SecOpsEntitiesClient(self.helper, self.config) + self.config = config + self.helper = helper + self.converter = CTIConverter(helper) + self.api_client = SecOpsEntitiesClient(helper, config.secops_siem) def check_stream_id(self) -> None: """ @@ -32,12 +33,12 @@ def check_stream_id(self) -> None: self.check_stream_id() # Ensures the stream ID is properly configured. """ if ( - not self.helper.connect_live_stream_id - or self.helper.connect_live_stream_id.lower() == "changeme" + not self.config.connector.live_stream_id + or self.config.connector.live_stream_id.lower() == "changeme" ): raise ValueError("Missing stream ID, please check your configurations.") - def handle_logger_info(self, data: dict, event_context: dict = None) -> None: + def handle_logger_info(self, data: dict, event_context: dict | None = None) -> None: """ Updates the connector logger with information about the current action being processed. @@ -72,7 +73,7 @@ def handle_logger_info(self, data: dict, event_context: dict = None) -> None: {"indicator_id": data["id"]}, ) - def validate_json(self, msg) -> dict | JSONDecodeError: + def validate_json(self, msg) -> dict: """ Validate the JSON data from the stream :param msg: Message event from stream @@ -146,7 +147,7 @@ def process_message(self, msg) -> None: data = parsed_msg["data"] # When an IOC is updated, get the context of the update event - event_context = parsed_msg["context"] if "context" in parsed_msg else None + event_context = parsed_msg.get("context") # Extract data and handle only entity type 'Indicator' from stream if data["type"] == "indicator" and data["pattern_type"] in ["stix"]: @@ -161,7 +162,7 @@ def process_message(self, msg) -> None: self._upsert_ioc_rule(data) # Handle update - if msg.event == "update": + elif msg.event == "update": self.handle_logger_info(data, event_context) self._upsert_ioc_rule(data) diff --git a/stream/google-secops-siem/src/secops_siem_connector/settings.py b/stream/google-secops-siem/src/secops_siem_connector/settings.py new file mode 100644 index 00000000000..8463cba0b5e --- /dev/null +++ b/stream/google-secops-siem/src/secops_siem_connector/settings.py @@ -0,0 +1,93 @@ +from connectors_sdk import ( + BaseConfigModel, + BaseConnectorSettings, + BaseStreamConnectorConfig, + ListFromString, +) +from pydantic import Field, HttpUrl, SecretStr, field_validator + + +class StreamConnectorConfig(BaseStreamConnectorConfig): + """ + Override the `BaseStreamConnectorConfig` to add parameters and/or defaults + to the configuration for connectors of type `STREAM`. + """ + + name: str = Field( + description="The name of the connector.", + default="GoogleSecOpsSIEM", + ) + id: str = Field( + description="A UUID v4 to identify the connector in OpenCTI.", + default="9257254e-b4ef-4592-ab11-6d37d4aa321f", + ) + scope: ListFromString = Field( + description="The scope of the connector", + default=["google-secops-siem"], + ) + live_stream_id: str = Field( + description="ID of the live stream to connect to (created in the OpenCTI UI).", + ) + + +class SecOpsSIEMConfig(BaseConfigModel): + """ + Define parameters and/or defaults for the configuration specific to the `SecOpsSIEMConnector`. + """ + + project_id: str = Field( + description="Google Cloud project ID for the SecOps SIEM instance.", + ) + project_instance: str = Field( + description="Google SecOps SIEM project instance identifier.", + ) + project_region: str = Field( + description="Google SecOps SIEM project region (e.g. 'us', 'eu', 'apac').", + default="us", + ) + private_key_id: str = Field( + description="Service account private key ID.", + ) + private_key: SecretStr = Field( + description="Service account private key (PEM format).", + ) + client_email: str = Field( + description="Service account client email.", + ) + client_id: str = Field( + description="Service account client ID.", + ) + auth_uri: HttpUrl = Field( + description="OAuth2 authorization URI.", + default=HttpUrl("https://accounts.google.com/o/oauth2/auth"), + ) + token_uri: HttpUrl = Field( + description="OAuth2 token URI.", + default=HttpUrl("https://oauth2.googleapis.com/token"), + ) + auth_provider_cert: HttpUrl = Field( + description="Auth provider x509 certificate URL.", + default=HttpUrl("https://www.googleapis.com/oauth2/v1/certs"), + ) + client_cert_url: HttpUrl = Field( + description="Client x509 certificate URL.", + ) + + @field_validator("private_key", mode="before") + @classmethod + def normalize_private_key(cls, value: SecretStr) -> SecretStr: + raw_value = ( + value.get_secret_value() if isinstance(value, SecretStr) else str(value) + ) + + normalized_value = raw_value.replace("\\r\\n", "\n").replace("\\n", "\n") + return SecretStr(normalized_value) + + +class ConnectorSettings(BaseConnectorSettings): + """ + Override `BaseConnectorSettings` to include `StreamConnectorConfig` and `SecOpsSIEMConfig`. + """ + + connector: StreamConnectorConfig = Field(default_factory=StreamConnectorConfig) + secops_siem: SecOpsSIEMConfig = Field(default_factory=SecOpsSIEMConfig) diff --git a/stream/google-secops-siem/src/secops_siem_services/__init__.py b/stream/google-secops-siem/src/secops_siem_services/__init__.py index d5a0aa68184..86ba1a94ba3 100644 --- a/stream/google-secops-siem/src/secops_siem_services/__init__.py +++ b/stream/google-secops-siem/src/secops_siem_services/__init__.py @@ -1,5 +1,4 @@ -from .api_client import SecOpsEntitiesClient -from .config_loader import ConfigConnector -from .cti_converter import CTIConverter +from secops_siem_services.api_client import SecOpsEntitiesClient +from secops_siem_services.cti_converter import CTIConverter -__all__ = ["SecOpsEntitiesClient", "ConfigConnector", "CTIConverter"] +__all__ = ["SecOpsEntitiesClient", "CTIConverter"] diff --git a/stream/google-secops-siem/src/secops_siem_services/api_client.py b/stream/google-secops-siem/src/secops_siem_services/api_client.py index c1bef8e7eea..996a0a95772 100644 --- a/stream/google-secops-siem/src/secops_siem_services/api_client.py +++ b/stream/google-secops-siem/src/secops_siem_services/api_client.py @@ -1,17 +1,22 @@ import time -from typing import Any, List, Optional +from typing import TYPE_CHECKING, Any, List, Optional from google.auth.transport import requests as ChronicleRequests from google.oauth2 import service_account from requests import Response from requests.exceptions import ConnectionError, HTTPError, Timeout +if TYPE_CHECKING: + from pycti import OpenCTIConnectorHelper + from secops_siem_connector.settings import SecOpsSIEMConfig + + SECOPS_SIEM_API_BASE_URL = "https://chronicle.googleapis.com" SCOPES = ["https://www.googleapis.com/auth/cloud-platform"] class SecOpsEntitiesClient: - def __init__(self, helper, config): + def __init__(self, helper: "OpenCTIConnectorHelper", config: "SecOpsSIEMConfig"): """ Init Chronicle API client. :param helper: Connector's helper from PyCTI @@ -24,12 +29,12 @@ def __init__(self, helper, config): self.chronicle_http_session = self.init_session() self.base_url_with_region = self.regionalized_url( - SECOPS_SIEM_API_BASE_URL, self.config.chronicle_project_region + SECOPS_SIEM_API_BASE_URL, self.config.project_region ) parent = ( - f"projects/{self.config.chronicle_project_id}/" - f"locations/{self.config.chronicle_project_region}/" - f"instances/{self.config.chronicle_project_instance}" + f"projects/{self.config.project_id}/" + f"locations/{self.config.project_region}/" + f"instances/{self.config.project_instance}" ) self.url = f"{self.base_url_with_region}/v1alpha/{parent}/entities:import" @@ -56,15 +61,15 @@ def init_session(self) -> ChronicleRequests.AuthorizedSession: """ service_account_info = { "type": "service_account", - "project_id": self.config.chronicle_project_id, - "private_key": self.config.chronicle_private_key, - "private_key_id": self.config.chronicle_private_key_id, - "client_email": self.config.chronicle_client_email, - "client_id": self.config.chronicle_client_id, - "auth_uri": self.config.chronicle_auth_uri, - "token_uri": self.config.chronicle_token_uri, - "auth_provider_x509_cert_url": self.config.chronicle_auth_provider_cert, - "client_x509_cert_url": self.config.chronicle_client_cert_url, + "project_id": self.config.project_id, + "private_key": self.config.private_key.get_secret_value(), + "private_key_id": self.config.private_key_id, + "client_email": self.config.client_email, + "client_id": self.config.client_id, + "auth_uri": self.config.auth_uri, + "token_uri": self.config.token_uri, + "auth_provider_x509_cert_url": self.config.auth_provider_cert, + "client_x509_cert_url": self.config.client_cert_url, } try: @@ -167,7 +172,6 @@ def _send_request( # Implement retry logic for attempt in range(total): - body = {"inline_source": {"entities": entities, "log_type": "OPENCTI"}} response = self.chronicle_http_session.request( method="POST", url=self.url, json=body @@ -221,16 +225,21 @@ def ingest(self, entities: list): Errors are logged using `self.helper.connector_logger` with appropriate log levels and error details. """ try: - response = self._send_request( entities=entities, retry_status_forcelist=[429] ) - if response.status_code == 200: + if response is not None and response.status_code == 200: # Google returns True for response.ok when the request is successful return response.ok else: - response.raise_for_status() + if response is not None: + response.raise_for_status() + else: + self.helper.connector_logger.error( + "[API] Request failed after retries with no response received." + ) + return None except HTTPError as err: self.helper.connector_logger.error( diff --git a/stream/google-secops-siem/src/secops_siem_services/config_loader.py b/stream/google-secops-siem/src/secops_siem_services/config_loader.py deleted file mode 100644 index 2c61d940dcf..00000000000 --- a/stream/google-secops-siem/src/secops_siem_services/config_loader.py +++ /dev/null @@ -1,113 +0,0 @@ -import os -from pathlib import Path - -import yaml -from pycti import get_config_variable - - -class ConfigConnector: - def __init__(self): - """ - Initialize the connector with necessary configurations - """ - - self.load = self._load_config() - self._initialize_configuration() - - @staticmethod - def _load_config() -> dict: - """ - Load the configuration from the YAML file - :return: Configuration dictionary - """ - config_file_path = Path(__file__).parents[1].joinpath("config.yml") - config = ( - yaml.load(open(config_file_path), Loader=yaml.FullLoader) - if os.path.isfile(config_file_path) - else {} - ) - - return config - - def _initialize_configuration(self) -> None: - """ - Connector configuration variables - """ - self.chronicle_project_id = get_config_variable( - "SECOPS_SIEM_PROJECT_ID", - ["secops_siem", "project_id"], - self.load, - False, - None, - True, - ) - self.chronicle_project_instance = get_config_variable( - "SECOPS_SIEM_PROJECT_INSTANCE", - ["secops_siem", "project_instance"], - self.load, - False, - True, - ) - self.chronicle_project_region = get_config_variable( - "SECOPS_SIEM_PROJECT_REGION", - ["secops_siem", "project_region"], - self.load, - False, - True, - ) - self.chronicle_private_key_id = get_config_variable( - "SECOPS_SIEM_PRIVATE_KEY_ID", - ["secops_siem", "private_key_id"], - self.load, - False, - True, - ) - self.chronicle_private_key = get_config_variable( - "SECOPS_SIEM_PRIVATE_KEY", - ["secops_siem", "private_key"], - self.load, - False, - True, - ) - self.chronicle_client_email = get_config_variable( - "SECOPS_SIEM_CLIENT_EMAIL", - ["secops_siem", "client_email"], - self.load, - False, - True, - ) - self.chronicle_client_id = get_config_variable( - "SECOPS_SIEM_CLIENT_ID", - ["secops_siem", "client_id"], - self.load, - False, - True, - ) - self.chronicle_auth_uri = get_config_variable( - "SECOPS_SIEM_AUTH_URI", - ["secops_siem", "auth_uri"], - self.load, - False, - True, - ) - self.chronicle_token_uri = get_config_variable( - "SECOPS_SIEM_TOKEN_URI", - ["secops_siem", "token_uri"], - self.load, - False, - True, - ) - self.chronicle_auth_provider_cert = get_config_variable( - "SECOPS_SIEM_AUTH_PROVIDER_CERT", - ["secops_siem", "auth_provider_cert"], - self.load, - False, - True, - ) - self.chronicle_client_cert_url = get_config_variable( - "SECOPS_SIEM_CLIENT_CERT_URL", - ["secops_siem", "client_cert_url"], - self.load, - False, - True, - ) diff --git a/stream/google-secops-siem/src/secops_siem_services/cti_converter.py b/stream/google-secops-siem/src/secops_siem_services/cti_converter.py index 1cb7f270856..86fa992b900 100644 --- a/stream/google-secops-siem/src/secops_siem_services/cti_converter.py +++ b/stream/google-secops-siem/src/secops_siem_services/cti_converter.py @@ -1,20 +1,23 @@ from datetime import datetime, timezone +from typing import TYPE_CHECKING +from urllib.parse import urljoin -from .utils import ENTITY_TYPE_MAPPER, HASH_TYPES_MAPPER +from secops_siem_services.utils import ENTITY_TYPE_MAPPER, HASH_TYPES_MAPPER + +if TYPE_CHECKING: + from pycti import OpenCTIConnectorHelper PRODUCT_NAME = "OPENCTI" VENDOR_NAME = "FILIGRAN" class CTIConverter: - - def __init__(self, helper, config): + def __init__(self, helper: "OpenCTIConnectorHelper"): """ Init CTI Converter. Convert OpenCTI entities into Chronicle UDM entities. - :param config: Connector's config + :param helper: OpenCTI connector helper """ - self.config = config self.helper = helper @staticmethod @@ -38,10 +41,9 @@ def extract_octi_ioc_url(self, data: dict) -> str | None: if x_opencti_ioc_id is None: return None - ioc_opencti_url = ( - self.helper.opencti_url - + "/dashboard/observations/indicators/" - + x_opencti_ioc_id + ioc_opencti_url = urljoin( + self.helper.opencti_url, + f"/dashboard/observations/indicators/{x_opencti_ioc_id}", ) return ioc_opencti_url @@ -92,11 +94,13 @@ def generate_entity_details(observable: dict, entity_metadata: dict) -> dict: :param entity_metadata: :return: """ - x_opencti_observable_type = observable.get("type").lower() + x_opencti_observable_type = observable.get("type", "").lower() entity = {} observable_type = ENTITY_TYPE_MAPPER.get(x_opencti_observable_type) + if observable_type is None: + return entity chronicle_entity_field = observable_type["chronicle_entity_field"] chronicle_entity_type = observable_type["chronicle_entity_type"] @@ -135,10 +139,8 @@ def create_udm_entities_from_indicator(self, indicator: dict) -> list: ) if parsed_observables: - # Iterate over the parsed observables for observable in parsed_observables: - entity_metadata = self.generate_entity_metadata(indicator) entity_details = self.generate_entity_details( observable, entity_metadata diff --git a/stream/google-secops-siem/tests/common_fixtures.py b/stream/google-secops-siem/tests/common_fixtures.py index e1859d926b1..13e213e667f 100644 --- a/stream/google-secops-siem/tests/common_fixtures.py +++ b/stream/google-secops-siem/tests/common_fixtures.py @@ -1,9 +1,9 @@ import json import os -from unittest.mock import MagicMock, Mock +from unittest.mock import MagicMock import pytest -from src.secops_siem_services import CTIConverter +from secops_siem_services import CTIConverter @pytest.fixture(scope="class") @@ -13,10 +13,7 @@ def setup_config(request): Create fake pycti OpenCTI helper """ request.cls.mock_helper = MagicMock() - request.cls.mock_config = Mock() - request.cls.CTIConverter = CTIConverter( - request.cls.mock_helper, request.cls.mock_config - ) + request.cls.CTIConverter = CTIConverter(request.cls.mock_helper) yield diff --git a/stream/google-secops-siem/tests/conftest.py b/stream/google-secops-siem/tests/conftest.py new file mode 100644 index 00000000000..5ee8fc0e226 --- /dev/null +++ b/stream/google-secops-siem/tests/conftest.py @@ -0,0 +1,4 @@ +import os +import sys + +sys.path.append(os.path.join(os.path.dirname(__file__), "..", "src")) diff --git a/stream/google-secops-siem/tests/test_main.py b/stream/google-secops-siem/tests/test_main.py new file mode 100644 index 00000000000..927d34f446c --- /dev/null +++ b/stream/google-secops-siem/tests/test_main.py @@ -0,0 +1,119 @@ +from typing import Any +from unittest.mock import MagicMock + +import pytest +from pycti import OpenCTIConnectorHelper +from secops_siem_connector import ConnectorSettings, SecOpsSIEMConnector + + +@pytest.fixture +def mock_opencti_connector_helper(monkeypatch): + """Mock all heavy dependencies of OpenCTIConnectorHelper, typically API calls to OpenCTI.""" + + module_import_path = "pycti.connector.opencti_connector_helper" + monkeypatch.setattr(f"{module_import_path}.killProgramHook", MagicMock()) + monkeypatch.setattr(f"{module_import_path}.sched.scheduler", MagicMock()) + monkeypatch.setattr(f"{module_import_path}.ConnectorInfo", MagicMock()) + monkeypatch.setattr(f"{module_import_path}.OpenCTIApiClient", MagicMock()) + monkeypatch.setattr(f"{module_import_path}.OpenCTIConnector", MagicMock()) + monkeypatch.setattr(f"{module_import_path}.OpenCTIMetricHandler", MagicMock()) + monkeypatch.setattr(f"{module_import_path}.PingAlive", MagicMock()) + + +class StubConnectorSettings(ConnectorSettings): + """ + Subclass of `ConnectorSettings` (implementation of `BaseConnectorSettings`) for testing purpose. + It overrides `BaseConnectorSettings._load_config_dict` to return a fake but valid config dict. + """ + + @classmethod + def _load_config_dict(cls, _, handler) -> dict[str, Any]: + return handler( + { + "opencti": { + "url": "http://localhost:8080", + "token": "test-token", + }, + "connector": { + "id": "connector-id", + "name": "Test Connector", + "scope": "google-secops-siem", + "log_level": "error", + "live_stream_id": "A2626721-31ED-441E-9C87-28AD1139D2AB", + "live_stream_listen_delete": True, + "live_stream_no_dependencies": True, + }, + "secops_siem": { + "project_id": "test-project-id", + "project_instance": "test-instance", + "project_region": "us", + "private_key_id": "test-key-id", + "private_key": "test-private-key", + "client_email": "test@project.iam.gserviceaccount.com", + "client_id": "123456789", + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://oauth2.googleapis.com/token", + "auth_provider_cert": "https://www.googleapis.com/oauth2/v1/certs", + "client_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/test", + }, + } + ) + + +def test_connector_settings_is_instantiated(): + """ + Test that the implementation of `BaseConnectorSettings` (from `connectors-sdk`) can be instantiated successfully: + - the implemented class MUST have a method `to_helper_config` (inherited from `BaseConnectorSettings`) + - the method `to_helper_config` MUST return a dict (as in base class) + """ + settings = StubConnectorSettings() + + assert isinstance(settings, ConnectorSettings) + assert isinstance(settings.to_helper_config(), dict) + + +def test_opencti_connector_helper_is_instantiated(mock_opencti_connector_helper): + """ + Test that `OpenCTIConnectorHelper` (from `pycti`) can be instantiated successfully: + - the value of `settings.to_helper_config` MUST be the expected dict for `OpenCTIConnectorHelper` + - the helper MUST be able to get its instance's attributes from the config dict + + :param mock_opencti_connector_helper: `OpenCTIConnectorHelper` is mocked during this test to avoid any external calls to OpenCTI API + """ + settings = StubConnectorSettings() + helper = OpenCTIConnectorHelper(config=settings.to_helper_config()) + + assert helper.opencti_url == "http://localhost:8080/" + assert helper.opencti_token == "test-token" + assert helper.connect_id == "connector-id" + assert helper.connect_name == "Test Connector" + assert helper.log_level == "ERROR" + assert helper.connect_live_stream_id == "A2626721-31ED-441E-9C87-28AD1139D2AB" + assert helper.connect_live_stream_listen_delete is True + assert helper.connect_live_stream_no_dependencies is True + + +def test_connector_is_instantiated(mock_opencti_connector_helper, monkeypatch): + """ + Test that the connector's main class can be instantiated successfully: + - the connector's main class MUST be able to access env/config vars through `self.config` + - the connector's main class MUST be able to access `pycti` API through `self.helper` + + :param mock_opencti_connector_helper: `OpenCTIConnectorHelper` is mocked during this test to avoid any external calls to OpenCTI API + """ + from secops_siem_services import api_client + + monkeypatch.setattr( + api_client.service_account.Credentials, + "from_service_account_info", + MagicMock(), + ) + monkeypatch.setattr(api_client, "ChronicleRequests", MagicMock()) + + settings = StubConnectorSettings() + helper = OpenCTIConnectorHelper(config=settings.to_helper_config()) + + connector = SecOpsSIEMConnector(config=settings, helper=helper) + + assert connector.config == settings + assert connector.helper == helper diff --git a/stream/google-secops-siem/tests/tests_connector/__init__.py b/stream/google-secops-siem/tests/tests_connector/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/stream/google-secops-siem/tests/tests_connector/test_settings.py b/stream/google-secops-siem/tests/tests_connector/test_settings.py new file mode 100644 index 00000000000..c951a67a4d7 --- /dev/null +++ b/stream/google-secops-siem/tests/tests_connector/test_settings.py @@ -0,0 +1,201 @@ +from typing import Any + +import pytest +from connectors_sdk import BaseConfigModel, ConfigValidationError +from secops_siem_connector import ConnectorSettings + + +@pytest.mark.parametrize( + "settings_dict", + [ + pytest.param( + { + "opencti": {"url": "http://localhost:8080", "token": "test-token"}, + "connector": { + "id": "connector-id", + "name": "Test Connector", + "scope": "google-secops-siem", + "log_level": "error", + "live_stream_id": "A2626721-31ED-441E-9C87-28AD1139D2AB", + "live_stream_listen_delete": True, + "live_stream_no_dependencies": True, + }, + "secops_siem": { + "project_id": "test-project-id", + "project_instance": "test-instance", + "project_region": "us", + "private_key_id": "test-key-id", + "private_key": "test-private-key", + "client_email": "test@project.iam.gserviceaccount.com", + "client_id": "123456789", + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://oauth2.googleapis.com/token", + "auth_provider_cert": "https://www.googleapis.com/oauth2/v1/certs", + "client_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/test", + }, + }, + id="full_valid_settings_dict", + ), + pytest.param( + { + "opencti": {"url": "http://localhost:8080", "token": "test-token"}, + "connector": { + "id": "connector-id", + "scope": "google-secops-siem", + "log_level": "error", + "live_stream_id": "D5685291-70A3-47D2-AB3A-FEB0F7DA9257", + }, + "secops_siem": { + "project_id": "test-project-id", + "project_instance": "test-instance", + "private_key_id": "test-key-id", + "private_key": "test-private-key", + "client_email": "test@project.iam.gserviceaccount.com", + "client_id": "123456789", + "client_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/test", + }, + }, + id="minimal_valid_settings_dict_uses_defaults", + ), + ], +) +def test_settings_should_accept_valid_input(settings_dict): + """ + Test that `ConnectorSettings` (implementation of `BaseConnectorSettings` from `connectors-sdk`) accepts valid input. + For the test purpose, `BaseConnectorSettings._load_config_dict` is overridden to return + a fake but valid dict (instead of the env/config vars parsed from `config.yml`, `.env` or env vars). + + :param settings_dict: The dict to use as `ConnectorSettings` input + """ + + class FakeConnectorSettings(ConnectorSettings): + @classmethod + def _load_config_dict(cls, _, handler) -> dict[str, Any]: + return handler(settings_dict) + + settings = FakeConnectorSettings() + assert isinstance(settings.opencti, BaseConfigModel) is True + assert isinstance(settings.connector, BaseConfigModel) is True + assert isinstance(settings.secops_siem, BaseConfigModel) is True + + +def test_settings_should_normalize_escaped_private_key_newlines(): + class FakeConnectorSettings(ConnectorSettings): + @classmethod + def _load_config_dict(cls, _, handler) -> dict[str, Any]: + return handler( + { + "opencti": {"url": "http://localhost:8080", "token": "test-token"}, + "connector": { + "id": "connector-id", + "scope": "google-secops-siem", + "log_level": "error", + "live_stream_id": "D5685291-70A3-47D2-AB3A-FEB0F7DA9257", + }, + "secops_siem": { + "project_id": "test-project-id", + "project_instance": "test-instance", + "private_key_id": "test-key-id", + "private_key": "-----BEGIN PRIVATE KEY-----\\nabc\\n-----END PRIVATE KEY-----\\n", + "client_email": "test@project.iam.gserviceaccount.com", + "client_id": "123456789", + "client_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/test", + }, + } + ) + + settings = FakeConnectorSettings() + private_key = settings.secops_siem.private_key.get_secret_value() + + assert "\\n" not in private_key + assert "\n" in private_key + + +@pytest.mark.parametrize( + "settings_dict, field_name", + [ + pytest.param({}, "settings", id="empty_settings_dict"), + pytest.param( + { + "opencti": {"url": "http://localhost:PORT", "token": "test-token"}, + "connector": { + "id": "connector-id", + "scope": "google-secops-siem", + "log_level": "error", + "live_stream_id": "A2626721-31ED-441E-9C87-28AD1139D2AB", + }, + "secops_siem": { + "project_id": "test-project-id", + "project_instance": "test-instance", + "private_key_id": "test-key-id", + "private_key": "test-private-key", + "client_email": "test@project.iam.gserviceaccount.com", + "client_id": "123456789", + "client_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/test", + }, + }, + "opencti.url", + id="invalid_opencti_url", + ), + pytest.param( + { + "opencti": {"url": "http://localhost:8080", "token": "test-token"}, + "connector": { + "id": "connector-id", + "scope": "google-secops-siem", + "log_level": "error", + "live_stream_id": "A2626721-31ED-441E-9C87-28AD1139D2AB", + }, + "secops_siem": { + "project_instance": "test-instance", + "private_key_id": "test-key-id", + "private_key": "test-private-key", + "client_email": "test@project.iam.gserviceaccount.com", + "client_id": "123456789", + "client_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/test", + }, + }, + "secops_siem.project_id", + id="missing_project_id", + ), + pytest.param( + { + "opencti": {"url": "http://localhost:8080", "token": "test-token"}, + "connector": { + "id": "connector-id", + "scope": "google-secops-siem", + "log_level": "error", + "live_stream_id": "A2626721-31ED-441E-9C87-28AD1139D2AB", + }, + "secops_siem": { + "project_id": "test-project-id", + "project_instance": "test-instance", + "private_key_id": "test-key-id", + "private_key": "test-private-key", + "client_email": "test@project.iam.gserviceaccount.com", + "client_id": "123456789", + }, + }, + "secops_siem.client_cert_url", + id="missing_client_cert_url", + ), + ], +) +def test_settings_should_raise_when_invalid_input(settings_dict, field_name): + """ + Test that `ConnectorSettings` (implementation of `BaseConnectorSettings` from `connectors-sdk`) raises on invalid input. + For the test purpose, `BaseConnectorSettings._load_config_dict` is overridden to return + a fake and invalid dict. + + :param settings_dict: The dict to use as `ConnectorSettings` input + """ + + class FakeConnectorSettings(ConnectorSettings): + @classmethod + def _load_config_dict(cls, _, handler) -> dict[str, Any]: + return handler(settings_dict) + + with pytest.raises( + ConfigValidationError, match=r".*Error validating configuration.*" + ): + FakeConnectorSettings() diff --git a/stream/harfanglab-intel/src/requirements.txt b/stream/harfanglab-intel/src/requirements.txt index 897c230c9ea..04ed3145a1c 100644 --- a/stream/harfanglab-intel/src/requirements.txt +++ b/stream/harfanglab-intel/src/requirements.txt @@ -1,4 +1,4 @@ -pycti==7.260309.0 +pycti==7.260515.0 stix-shifter==8.0.2 stix-shifter-utils==8.0.2 stix-shifter-modules-splunk==8.0.2 diff --git a/stream/infoblox-threat-defense/src/requirements.txt b/stream/infoblox-threat-defense/src/requirements.txt index e9684a32073..f5b8181a0c7 100644 --- a/stream/infoblox-threat-defense/src/requirements.txt +++ b/stream/infoblox-threat-defense/src/requirements.txt @@ -1 +1 @@ -pycti==7.260309.0 \ No newline at end of file +pycti==7.260515.0 \ No newline at end of file diff --git a/stream/jira/src/requirements.txt b/stream/jira/src/requirements.txt index e5877c6900f..9724950d5a3 100644 --- a/stream/jira/src/requirements.txt +++ b/stream/jira/src/requirements.txt @@ -1,2 +1,2 @@ -pycti==7.260309.0 +pycti==7.260515.0 jira==3.10.5 diff --git a/stream/logrhythm/src/requirements.txt b/stream/logrhythm/src/requirements.txt index e9684a32073..f5b8181a0c7 100644 --- a/stream/logrhythm/src/requirements.txt +++ b/stream/logrhythm/src/requirements.txt @@ -1 +1 @@ -pycti==7.260309.0 \ No newline at end of file +pycti==7.260515.0 \ No newline at end of file diff --git a/stream/microsoft-defender-intel-synchronizer/src/requirements.txt b/stream/microsoft-defender-intel-synchronizer/src/requirements.txt index e9684a32073..f5b8181a0c7 100644 --- a/stream/microsoft-defender-intel-synchronizer/src/requirements.txt +++ b/stream/microsoft-defender-intel-synchronizer/src/requirements.txt @@ -1 +1 @@ -pycti==7.260309.0 \ No newline at end of file +pycti==7.260515.0 \ No newline at end of file diff --git a/stream/microsoft-defender-intel/src/requirements.txt b/stream/microsoft-defender-intel/src/requirements.txt index c55331d2020..28ced3192ed 100644 --- a/stream/microsoft-defender-intel/src/requirements.txt +++ b/stream/microsoft-defender-intel/src/requirements.txt @@ -1,3 +1,3 @@ -pycti==7.260309.0 +pycti==7.260515.0 pydantic >=2.8.2, <3 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk diff --git a/stream/microsoft-defender-intel/tests/test-requirements.txt b/stream/microsoft-defender-intel/tests/test-requirements.txt index bdef682113c..d405632324b 100644 --- a/stream/microsoft-defender-intel/tests/test-requirements.txt +++ b/stream/microsoft-defender-intel/tests/test-requirements.txt @@ -1,2 +1,2 @@ -r ../src/requirements.txt -pytest==8.4.2 +pytest==9.0.3 diff --git a/stream/microsoft-graph-security-intel/src/requirements.txt b/stream/microsoft-graph-security-intel/src/requirements.txt index e9684a32073..f5b8181a0c7 100644 --- a/stream/microsoft-graph-security-intel/src/requirements.txt +++ b/stream/microsoft-graph-security-intel/src/requirements.txt @@ -1 +1 @@ -pycti==7.260309.0 \ No newline at end of file +pycti==7.260515.0 \ No newline at end of file diff --git a/stream/microsoft-sentinel-intel/README.md b/stream/microsoft-sentinel-intel/README.md index 023e8f711bb..a5173d34242 100644 --- a/stream/microsoft-sentinel-intel/README.md +++ b/stream/microsoft-sentinel-intel/README.md @@ -40,7 +40,7 @@ Key features: ### Requirements -- OpenCTI Platform >= 7.260309.0 +- OpenCTI Platform >= 7.260515.0 - Azure subscription with Microsoft Sentinel - Azure AD Application or Managed Identity with appropriate permissions @@ -60,45 +60,15 @@ For more information: - [Microsoft Connect Threat Intelligence](https://learn.microsoft.com/en-us/azure/sentinel/connect-threat-intelligence-upload-api) - [Microsoft Security Authorization](https://learn.microsoft.com/en-us/graph/security-authorization) -## Configuration variables - -There are a number of configuration options, which are set either in `docker-compose.yml` (for Docker) or in `config.yml` (for manual deployment). - -### OpenCTI environment variables - -| Parameter | config.yml | Docker environment variable | Mandatory | Description | -|---------------|------------|-----------------------------|-----------|------------------------------------------------------| -| OpenCTI URL | url | `OPENCTI_URL` | Yes | The URL of the OpenCTI platform. | -| OpenCTI Token | token | `OPENCTI_TOKEN` | Yes | The default admin token set in the OpenCTI platform. | - -### Base connector environment variables - -| Parameter | config.yml | Docker environment variable | Default | Mandatory | Description | -|--------------------------------|---------------------------|-----------------------------------------|----------------------------------|-----------|--------------------------------------------------------------------------------| -| Connector ID | id | `CONNECTOR_ID` | | Yes | A unique `UUIDv4` identifier for this connector instance. | -| Connector Name | name | `CONNECTOR_NAME` | Microsoft Sentinel Intel Master | No | Name of the connector. | -| Connector Scope | scope | `CONNECTOR_SCOPE` | sentinel | No | The scope of the connector. | -| Live Stream ID | live_stream_id | `CONNECTOR_LIVE_STREAM_ID` | | Yes | The Live Stream ID of the stream created in the OpenCTI interface. | -| Live Stream Listen Delete | live_stream_listen_delete | `CONNECTOR_LIVE_STREAM_LISTEN_DELETE` | true | No | Listen to delete events. | -| Live Stream No Dependencies | live_stream_no_dependencies| `CONNECTOR_LIVE_STREAM_NO_DEPENDENCIES`| true | No | Set to `true` unless synchronizing between OpenCTI platforms. | -| Log Level | log_level | `CONNECTOR_LOG_LEVEL` | error | No | Determines the verbosity of the logs. | - -### Connector extra parameters environment variables - -| Parameter | config.yml | Docker environment variable | Default | Mandatory | Description | -|------------------------|---------------------------------------------------|-----------------------------------------------------|----------------------------|-----------|------------------------------------------------------------| -| Tenant ID | microsoft_sentinel_intel.tenant_id | `MICROSOFT_SENTINEL_INTEL_TENANT_ID` | | Yes | Azure AD Tenant ID. | -| Client ID | microsoft_sentinel_intel.client_id | `MICROSOFT_SENTINEL_INTEL_CLIENT_ID` | | Yes | Azure AD Application Client ID. | -| Client Secret | microsoft_sentinel_intel.client_secret | `MICROSOFT_SENTINEL_INTEL_CLIENT_SECRET` | | Yes | Azure AD Application Client Secret. | -| Workspace ID | microsoft_sentinel_intel.workspace_id | `MICROSOFT_SENTINEL_INTEL_WORKSPACE_ID` | | Yes | Azure Log Analytics Workspace ID. | -| Workspace Name | microsoft_sentinel_intel.workspace_name | `MICROSOFT_SENTINEL_INTEL_WORKSPACE_NAME` | | Yes | Log Analytics Workspace name (for deletion). | -| Subscription ID | microsoft_sentinel_intel.subscription_id | `MICROSOFT_SENTINEL_INTEL_SUBSCRIPTION_ID` | | Yes | Azure Subscription ID (for deletion). | -| Resource Group | microsoft_sentinel_intel.resource_group | `MICROSOFT_SENTINEL_INTEL_RESOURCE_GROUP` | default | No | Resource group name for Log Analytics. | -| Source System | microsoft_sentinel_intel.source_system | `MICROSOFT_SENTINEL_INTEL_SOURCE_SYSTEM` | Opencti Stream Connector | No | Source system name displayed in Sentinel. | -| Delete Extensions | microsoft_sentinel_intel.delete_extensions | `MICROSOFT_SENTINEL_INTEL_DELETE_EXTENSIONS` | true | No | Delete extensions from STIX bundles. | -| Extra Labels | microsoft_sentinel_intel.extra_labels | `MICROSOFT_SENTINEL_INTEL_EXTRA_LABELS` | [] | No | Extra labels added to bundles (comma-separated). | -| Workspace API Version | microsoft_sentinel_intel.workspace_api_version | `MICROSOFT_SENTINEL_INTEL_WORKSPACE_API_VERSION` | 2024-02-01-preview | No | Log Analytics Workspace API version. | -| Management API Version | microsoft_sentinel_intel.management_api_version | `MICROSOFT_SENTINEL_INTEL_MANAGEMENT_API_VERSION` | 2025-03-01 | No | Microsoft Management API version. | +## Configuration + +Configuration parameters can be provided in either **`config.yml`** file, **`.env`** file or directly as **environment variables** (e.g. from **`docker-compose.yml`** for Docker deployments). + +Priority: **YAML > .env > environment > defaults**. + +### Configuration variables + +Find all the configuration variables available here: [Connector Configurations](./__metadata__/CONNECTOR_CONFIG_DOC.md) ## Deployment diff --git a/stream/microsoft-sentinel-intel/__metadata__/CONNECTOR_CONFIG_DOC.md b/stream/microsoft-sentinel-intel/__metadata__/CONNECTOR_CONFIG_DOC.md index 7fef37a3a0f..9c16d1c4cfb 100644 --- a/stream/microsoft-sentinel-intel/__metadata__/CONNECTOR_CONFIG_DOC.md +++ b/stream/microsoft-sentinel-intel/__metadata__/CONNECTOR_CONFIG_DOC.md @@ -4,26 +4,31 @@ Below is an exhaustive enumeration of all configurable parameters available, eac ### Type: `object` -| Property | Type | Required | Possible values | Deprecated | Default | Description | -| -------- | ---- | -------- | --------------- | ---------- | ------- | ----------- | -| OPENCTI_URL | `string` | ✅ | Format: [`uri`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | | The base URL of the OpenCTI instance. | -| OPENCTI_TOKEN | `string` | ✅ | string | | | The API token to connect to OpenCTI. | -| CONNECTOR_LIVE_STREAM_ID | `string` | ✅ | string | | | The ID of the live stream to connect to. | -| MICROSOFT_SENTINEL_INTEL_TENANT_ID | `string` | ✅ | string | | | Your Azure App Tenant ID, see the screenshot to help you find this information. | -| MICROSOFT_SENTINEL_INTEL_CLIENT_ID | `string` | ✅ | string | | | Your Azure App Client ID, see the screenshot to help you find this information. | -| MICROSOFT_SENTINEL_INTEL_CLIENT_SECRET | `string` | ✅ | Format: [`password`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | | Your Azure App Client secret, See the screenshot to help you find this information. | -| MICROSOFT_SENTINEL_INTEL_WORKSPACE_ID | `string` | ✅ | string | | | Your Azure Workspace ID | -| MICROSOFT_SENTINEL_INTEL_WORKSPACE_NAME | `string` | ✅ | string | | | The name of the log analytics workspace | -| MICROSOFT_SENTINEL_INTEL_SUBSCRIPTION_ID | `string` | ✅ | string | | | The subscription id where the Log Analytics is | -| CONNECTOR_NAME | `string` | | string | | `"MicrosoftSentinelIntel"` | The name of the connector. | -| CONNECTOR_SCOPE | `array` | | string | | `["sentinel"]` | The scope of the stream connector. | -| CONNECTOR_LOG_LEVEL | `string` | | `debug` `info` `warn` `warning` `error` | | `"error"` | The minimum level of logs to display. | -| CONNECTOR_TYPE | `const` | | `STREAM` | | `"STREAM"` | | -| CONNECTOR_LIVE_STREAM_LISTEN_DELETE | `boolean` | | boolean | | `true` | Whether to listen for delete events on the live stream. | -| CONNECTOR_LIVE_STREAM_NO_DEPENDENCIES | `boolean` | | boolean | | `true` | Whether to ignore dependencies when processing events from the live stream. | -| MICROSOFT_SENTINEL_INTEL_SOURCE_SYSTEM | `string` | | string | | `"Opencti Stream Connector"` | The name of the source system displayed in Microsoft Sentinel | -| MICROSOFT_SENTINEL_INTEL_DELETE_EXTENSIONS | `boolean` | | boolean | | `true` | Delete the extensions in the stix bundle sent to the SIEM | -| MICROSOFT_SENTINEL_INTEL_EXTRA_LABELS | `array` | | string | | `[]` | Extra labels added to the bundle sent. String separated by comma | -| MICROSOFT_SENTINEL_INTEL_WORKSPACE_API_VERSION | `string` | | string | | `"2024-02-01-preview"` | API version of the Microsoft log analytics workspace interface | -| MICROSOFT_SENTINEL_INTEL_MANAGEMENT_API_VERSION | `string` | | string | | `"2025-03-01"` | API version of the Microsoft management interface | -| MICROSOFT_SENTINEL_INTEL_RESOURCE_GROUP | `string` | | string | ⛔️ | `"default"` | The name of the resource group where the log analytics is | +| Property | Type | Required | Possible values | Default | Description | +| -------- | ---- | -------- | --------------- | ------- | ----------- | +| OPENCTI_URL | `string` | ✅ | Format: [`uri`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | The base URL of the OpenCTI instance. | +| OPENCTI_TOKEN | `string` | ✅ | string | | The API token to connect to OpenCTI. | +| CONNECTOR_LIVE_STREAM_ID | `string` | ✅ | string | | The ID of the live stream to connect to. | +| MICROSOFT_SENTINEL_INTEL_TENANT_ID | `string` | ✅ | string | | Your Azure App Tenant ID, see the screenshot to help you find this information. | +| MICROSOFT_SENTINEL_INTEL_CLIENT_ID | `string` | ✅ | string | | Your Azure App Client ID, see the screenshot to help you find this information. | +| MICROSOFT_SENTINEL_INTEL_CLIENT_SECRET | `string` | ✅ | Format: [`password`](https://json-schema.org/understanding-json-schema/reference/string#built-in-formats) | | Your Azure App Client secret, See the screenshot to help you find this information. | +| MICROSOFT_SENTINEL_INTEL_WORKSPACE_ID | `string` | ✅ | string | | Your Azure Workspace ID | +| MICROSOFT_SENTINEL_INTEL_WORKSPACE_NAME | `string` | ✅ | string | | The name of the log analytics workspace | +| MICROSOFT_SENTINEL_INTEL_SUBSCRIPTION_ID | `string` | ✅ | string | | The subscription id where the Log Analytics is | +| CONNECTOR_NAME | `string` | | string | `"MicrosoftSentinelIntel"` | The name of the connector. | +| CONNECTOR_SCOPE | `array` | | string | `["sentinel"]` | The scope of the stream connector. | +| CONNECTOR_LOG_LEVEL | `string` | | `debug` `info` `warn` `warning` `error` | `"error"` | The minimum level of logs to display. | +| CONNECTOR_TYPE | `const` | | `STREAM` | `"STREAM"` | | +| CONNECTOR_LIVE_STREAM_LISTEN_DELETE | `boolean` | | boolean | `true` | Whether to listen for delete events on the live stream. | +| CONNECTOR_LIVE_STREAM_NO_DEPENDENCIES | `boolean` | | boolean | `true` | Whether to ignore dependencies when processing events from the live stream. | +| MICROSOFT_SENTINEL_INTEL_RESOURCE_GROUP | `string` | | string | `"default"` | The name of the resource group where the log analytics is | +| MICROSOFT_SENTINEL_INTEL_SOURCE_SYSTEM | `string` | | string | `"Opencti Stream Connector"` | The name of the source system displayed in Microsoft Sentinel | +| MICROSOFT_SENTINEL_INTEL_DELETE_EXTENSIONS | `boolean` | | boolean | `true` | Delete the extensions in the stix bundle sent to the SIEM | +| MICROSOFT_SENTINEL_INTEL_EXTRA_LABELS | `array` | | string | `[]` | Extra labels added to the bundle sent. String separated by comma | +| MICROSOFT_SENTINEL_INTEL_WORKSPACE_API_VERSION | `string` | | string | `"2024-02-01-preview"` | API version of the Microsoft log analytics workspace interface | +| MICROSOFT_SENTINEL_INTEL_MANAGEMENT_API_VERSION | `string` | | string | `"2025-03-01"` | API version of the Microsoft management interface | +| MICROSOFT_SENTINEL_INTEL_QUERY_API_VERSION | `string` | | string | `"2025-07-01-preview"` | API version of the Microsoft Sentinel threat-intel /query endpoint | +| MICROSOFT_SENTINEL_INTEL_BATCH_MODE | `boolean` | | boolean | `false` | Enable batch mode for bulk uploading STIX objects. When disabled (default), objects are sent individually in real-time. | +| MICROSOFT_SENTINEL_INTEL_BATCH_SIZE | `integer` | | `1 <= x <= 100` | `100` | Maximum number of unique STIX objects to accumulate before flushing a batch. Only used when batch_mode is enabled. Maxed at 100 because the Sentinel Upload Indicators API rejects requests containing more than 100 STIX objects. | +| MICROSOFT_SENTINEL_INTEL_BATCH_TIMEOUT | `integer` | | `1 <= x ` | `30` | Maximum time in seconds to wait before flushing a partial batch. Only used when batch_mode is enabled. | +| MICROSOFT_SENTINEL_INTEL_EVENT_TYPES | `array` | | string | `["create", "update", "delete"]` | Comma-separated list of event types to process (create, update, delete). Defaults to all three; a single instance handles every event type. Restrict this only if you want to split the workload across dedicated instances. | diff --git a/stream/microsoft-sentinel-intel/__metadata__/connector_config_schema.json b/stream/microsoft-sentinel-intel/__metadata__/connector_config_schema.json index 6dca1e54887..dc689f5732d 100644 --- a/stream/microsoft-sentinel-intel/__metadata__/connector_config_schema.json +++ b/stream/microsoft-sentinel-intel/__metadata__/connector_config_schema.json @@ -88,7 +88,6 @@ }, "MICROSOFT_SENTINEL_INTEL_RESOURCE_GROUP": { "default": "default", - "deprecated": true, "description": "The name of the resource group where the log analytics is", "type": "string" }, @@ -119,6 +118,41 @@ "default": "2025-03-01", "description": "API version of the Microsoft management interface", "type": "string" + }, + "MICROSOFT_SENTINEL_INTEL_QUERY_API_VERSION": { + "default": "2025-07-01-preview", + "description": "API version of the Microsoft Sentinel threat-intel /query endpoint", + "type": "string" + }, + "MICROSOFT_SENTINEL_INTEL_BATCH_MODE": { + "default": false, + "description": "Enable batch mode for bulk uploading STIX objects. When disabled (default), objects are sent individually in real-time.", + "type": "boolean" + }, + "MICROSOFT_SENTINEL_INTEL_BATCH_SIZE": { + "default": 100, + "description": "Maximum number of unique STIX objects to accumulate before flushing a batch. Only used when batch_mode is enabled. Maxed at 100 because the Sentinel Upload Indicators API rejects requests containing more than 100 STIX objects.", + "maximum": 100, + "minimum": 1, + "type": "integer" + }, + "MICROSOFT_SENTINEL_INTEL_BATCH_TIMEOUT": { + "default": 30, + "description": "Maximum time in seconds to wait before flushing a partial batch. Only used when batch_mode is enabled.", + "minimum": 1, + "type": "integer" + }, + "MICROSOFT_SENTINEL_INTEL_EVENT_TYPES": { + "default": [ + "create", + "update", + "delete" + ], + "description": "Comma-separated list of event types to process (create, update, delete). Defaults to all three; a single instance handles every event type. Restrict this only if you want to split the workload across dedicated instances.", + "items": { + "type": "string" + }, + "type": "array" } }, "required": [ diff --git a/stream/microsoft-sentinel-intel/docker-compose.yml b/stream/microsoft-sentinel-intel/docker-compose.yml index 6a14c251eff..2048fd064bc 100644 --- a/stream/microsoft-sentinel-intel/docker-compose.yml +++ b/stream/microsoft-sentinel-intel/docker-compose.yml @@ -26,4 +26,8 @@ services: # - MICROSOFT_SENTINEL_INTEL_EXTRA_LABELS=label1,label2,... # - MICROSOFT_SENTINEL_INTEL_WORKSPACE_API_VERSION=2024-02-01-preview # - MICROSOFT_SENTINEL_INTEL_MANAGEMENT_API_VERSION=2025-03-01 +# - MICROSOFT_SENTINEL_INTEL_BATCH_MODE=false +# - MICROSOFT_SENTINEL_INTEL_BATCH_SIZE=100 +# - MICROSOFT_SENTINEL_INTEL_BATCH_TIMEOUT=30 +# - MICROSOFT_SENTINEL_INTEL_EVENT_TYPES=create,update,delete restart: always \ No newline at end of file diff --git a/stream/microsoft-sentinel-intel/src/config.yml.sample b/stream/microsoft-sentinel-intel/src/config.yml.sample index 3b9dea58476..2b23a520901 100644 --- a/stream/microsoft-sentinel-intel/src/config.yml.sample +++ b/stream/microsoft-sentinel-intel/src/config.yml.sample @@ -25,3 +25,7 @@ microsoft_sentinel_intel: # extra_labels: 'label1,label2' # workspace_api_version: '2024-02-01-preview' # management_api_version: '2025-03-01' +# batch_mode: false +# batch_size: 100 +# batch_timeout: 30 +# event_types: 'create,update,delete' diff --git a/stream/microsoft-sentinel-intel/src/microsoft_sentinel_intel/client.py b/stream/microsoft-sentinel-intel/src/microsoft_sentinel_intel/client.py index 5049def6a41..3d7b9bbfbbf 100644 --- a/stream/microsoft-sentinel-intel/src/microsoft_sentinel_intel/client.py +++ b/stream/microsoft-sentinel-intel/src/microsoft_sentinel_intel/client.py @@ -69,21 +69,43 @@ def upload_stix_objects( ), ) - def query_indicators(self, content: dict[str, Any]) -> HttpResponse: + def query_indicators(self, stix_id: str, source_system: str) -> HttpResponse: + content = { + "condition": { + "clauses": [ + { + "field": "id", + "operator": "Equals", + "values": [stix_id], + }, + { + "field": "source", + "operator": "Equals", + "values": [source_system], + }, + ], + "conditionConnective": "And", + "stixObjectType": "indicator", + }, + } return self._send_request( client=self.management_client, request=self.management_client.post( - url=f"{self.management_endpoint}/queryIndicators", + url=f"{self.management_endpoint}/query", params={ - "api-version": self.config.microsoft_sentinel_intel.management_api_version + "api-version": self.config.microsoft_sentinel_intel.query_api_version }, content=content, headers={"Content-Type": "application/json"}, ), ) - def delete_indicator_by_id(self, indicator_id: str) -> HttpResponse: - response = self.query_indicators(content={"keywords": indicator_id}) + def delete_indicator_by_id( + self, indicator_id: str, source_system: str + ) -> HttpResponse | None: + response = self.query_indicators( + stix_id=indicator_id, source_system=source_system + ) try: body = json.loads(response.body()) @@ -93,18 +115,77 @@ def delete_indicator_by_id(self, indicator_id: str) -> HttpResponse: metadata={"error": str(e)}, ) - if len(body["value"]) != 1: + indicators = body.get("value") + if indicators is None: raise ConnectorClientError( - message=f"[API] Expected exactly one indicator, found {len(body['value'])}", - metadata={"indicators": body["value"]}, + message="[API] Unexpected response format: missing 'value' key", + metadata={"response_body": str(body)}, + ) + if not indicators: + self.helper.connector_logger.warning( + message=f"[API] Indicator not found for source system '{source_system}', skipping deletion", + meta={ + "indicator_stix_id": indicator_id, + "source_system": source_system, + }, ) + return None - return self._send_request( - client=self.management_client, - request=self.management_client.delete( - url=f"{self.management_endpoint}/indicators/{body['value'][0]['name']}", - params={ - "api-version": self.config.microsoft_sentinel_intel.management_api_version + if len(indicators) > 1: + self.helper.connector_logger.warning( + message=f"[API] Found {len(indicators)} indicators matching the query, deleting all", + meta={ + "indicator_stix_id": indicator_id, + "count": len(indicators), }, - ), - ) + ) + + last_response = None + errors: list[ConnectorClientError] = [] + for indicator in indicators: + indicator_microsoft_id = indicator.get("id") + + if not isinstance(indicator_microsoft_id, str): + error_message = ( + "[API] Failed to retrieve indicator identifier for deletion" + ) + error = ConnectorClientError( + message=error_message, + metadata={ + "indicator_stix_id": indicator_id, + "indicator_microsoft_id": indicator_microsoft_id, + }, + ) + self.helper.connector_logger.error( + message=error_message, meta=error.metadata + ) + errors.append(error) + continue + + try: + last_response = self._send_request( + client=self.management_client, + request=self.management_client.delete( + # The 'id' field actually contains the endpoint of the indicator resource + url=indicator_microsoft_id, + params={ + "api-version": self.config.microsoft_sentinel_intel.query_api_version + }, + ), + ) + except ConnectorClientError as err: + self.helper.connector_logger.error( + message="[API] Failed to delete indicator", + meta={ + "indicator_stix_id": indicator_id, + "indicator_microsoft_id": indicator_microsoft_id, + }, + ) + errors.append(err) + + if errors: + raise ConnectorClientError( + message=f"[API] Failed to delete {len(errors)}/{len(indicators)} indicators", + metadata={"errors": [str(e) for e in errors]}, + ) + return last_response diff --git a/stream/microsoft-sentinel-intel/src/microsoft_sentinel_intel/connector.py b/stream/microsoft-sentinel-intel/src/microsoft_sentinel_intel/connector.py index eb1c1a33a02..0fd7b2fe80b 100644 --- a/stream/microsoft-sentinel-intel/src/microsoft_sentinel_intel/connector.py +++ b/stream/microsoft-sentinel-intel/src/microsoft_sentinel_intel/connector.py @@ -4,7 +4,11 @@ from filigran_sseclient.sseclient import Event from microsoft_sentinel_intel.client import ConnectorClient -from microsoft_sentinel_intel.errors import ConnectorError, ConnectorWarning +from microsoft_sentinel_intel.errors import ( + ConnectorClientError, + ConnectorError, + ConnectorWarning, +) from microsoft_sentinel_intel.settings import ConnectorSettings from microsoft_sentinel_intel.utils import is_stix_indicator from pycti import OpenCTIConnectorHelper @@ -23,52 +27,75 @@ def __init__( self.client = client def _prepare_stix_object(self, stix_object: dict) -> dict: + stix_object = dict(stix_object) if self.config.microsoft_sentinel_intel.delete_extensions: - del stix_object["extensions"] + stix_object.pop("extensions", None) if extra_labels := self.config.microsoft_sentinel_intel.extra_labels: stix_object["labels"] = list( set(stix_object.get("labels", []) + extra_labels) ) return stix_object - def _process_event(self, event_type: str, stix_object: dict) -> None: - """ - This method can handle any type of event with the same logic (_prepare_stix_object) + def _process_event(self, event_type: str, stix_object: dict) -> bool: + """Process a single STIX event by dispatching to the appropriate API call. + + The upload API (upload_stix_objects) handles Indicators, AttackPatterns, + Identity, ThreatActors, and Relationships. - The API used (upload_stix_objects) to upload the stix objects to Sentinel can handle - Indicators, AttackPatterns, Identity, ThreatActors and Relationships. + :param event_type: One of "create", "update", or "delete". + :param stix_object: STIX object data dict. + :return: True if the event was processed, False if filtered out by event_types config. + :raises ConnectorClientError: If the API call fails. + :raises ConnectorWarning: If event_type is unsupported. """ + if event_type not in self.config.microsoft_sentinel_intel.event_types: + self.helper.connector_logger.info( + message=f"[{event_type.upper()}] Event type filtered out, skipping" + ) + return False + match event_type: case "create" | "update": + prepared = self._prepare_stix_object(stix_object) self.client.upload_stix_objects( - stix_objects=[self._prepare_stix_object(stix_object)], + stix_objects=[prepared], source_system=self.config.microsoft_sentinel_intel.source_system, ) case "delete": - self.client.delete_indicator_by_id(stix_object["id"]) + self.client.delete_indicator_by_id( + stix_object["id"], + source_system=self.config.microsoft_sentinel_intel.source_system, + ) case _: raise ConnectorWarning( message=f"Unsupported event type: {event_type}, Skipping..." ) + return True def _handle_event(self, event: Event): try: - data = json.loads(event.data)["data"] + parsed = json.loads(event.data) except json.JSONDecodeError as err: raise ConnectorError( message="[ERROR] Data cannot be parsed to JSON", metadata={"message_data": event.data, "error": str(err)}, ) from err + + data = parsed.get("data") + if not data: + return + if is_stix_indicator(data): self.helper.connector_logger.info( message=f"[{event.event.upper()}] Processing message", meta={"data": data, "event": event.event}, ) - self._process_event(event_type=event.event, stix_object=data) - self.helper.connector_logger.info( - message=f"[{event.event.upper()}] Indicator processed", - meta={"opencti_id": data["id"]}, - ) + processed = self._process_event(event_type=event.event, stix_object=data) + if processed: + self.helper.connector_logger.info( + message=f"[{event.event.upper()}] Indicator processed", + meta={"opencti_id": data["id"]}, + ) else: self.helper.connector_logger.info( message=f"[{event.event.upper()}] Entity not supported" @@ -97,6 +124,92 @@ def process_message(self, message: Event) -> None: message=f"Unexpected error: {err}", meta={"error": str(err)} ) + def process_batch(self, batch_data: dict) -> None: + """ + Batch callback for SDK BatchCallbackWrapper. + Receives a dict with "events" (list of raw SSE messages) and processes them + as a single batch upload. + """ + try: + events = batch_data.get("events", []) + if not events: + return + + unique_objects: dict[str, tuple[str, dict]] = {} + for event in events: + try: + parsed = json.loads(event.data) + except json.JSONDecodeError as err: + self.helper.connector_logger.error( + message="[BATCH] Data cannot be parsed to JSON", + meta={"message_data": event.data, "error": str(err)}, + ) + continue + + data = parsed.get("data") + if not data: + continue + + if not is_stix_indicator(data): + continue + + if event.event not in self.config.microsoft_sentinel_intel.event_types: + continue + + unique_objects[data["id"]] = (event.event, data) + + if not unique_objects: + return + + objects_to_upload = [] + objects_to_delete = [] + for event_type, data in unique_objects.values(): + if event_type in ("create", "update"): + objects_to_upload.append(data) + elif event_type == "delete": + objects_to_delete.append(data) + + if objects_to_upload: + prepared_objects = [ + self._prepare_stix_object(obj) for obj in objects_to_upload + ] + self.helper.connector_logger.info( + message=f"[BATCH] Uploading {len(prepared_objects)} objects", + ) + self.client.upload_stix_objects( + stix_objects=prepared_objects, + source_system=self.config.microsoft_sentinel_intel.source_system, + ) + + for data in objects_to_delete: + try: + self.helper.connector_logger.info( + message="[BATCH] Deleting indicator", + meta={"opencti_id": data["id"]}, + ) + self.client.delete_indicator_by_id( + data["id"], + source_system=self.config.microsoft_sentinel_intel.source_system, + ) + except ConnectorClientError as err: + self.helper.connector_logger.error( + message=f"[BATCH] Failed to delete indicator {data['id']}", + meta=err.metadata, + ) + except (KeyboardInterrupt, SystemExit): + self.helper.connector_logger.info("Connector stopped by user.") + sys.exit(0) + except ConnectorWarning as err: + self.helper.connector_logger.warning(message=err.message) + except ConnectorError as err: + self.helper.connector_logger.error(message=err.message, meta=err.metadata) + except Exception as err: + traceback.print_exc() + self.helper.connector_logger.error( + message=f"[BATCH] Unexpected error: {err}", + meta={"error": str(err)}, + ) + def run(self) -> None: """ Run the main process in self.helper.listen() method @@ -104,4 +217,17 @@ def run(self) -> None: The connector have the capability to listen a live stream from the platform. The helper provide an easy way to listen to the events. """ - self.helper.listen_stream(message_callback=self.process_message) + if self.config.microsoft_sentinel_intel.batch_mode: + self.helper.connector_logger.info( + message=f"[BATCH] Batch mode enabled (batch_size={self.config.microsoft_sentinel_intel.batch_size}, batch_timeout={self.config.microsoft_sentinel_intel.batch_timeout}s, max_per_minute=100)", + ) + callback = self.helper.create_batch_callback( + batch_callback=self.process_batch, + batch_size=self.config.microsoft_sentinel_intel.batch_size, + batch_timeout=self.config.microsoft_sentinel_intel.batch_timeout, + # Azure Sentinel Upload Indicators API is limited to 100 requests/min + max_per_minute=100, + ) + self.helper.listen_stream(message_callback=callback) + else: + self.helper.listen_stream(message_callback=self.process_message) diff --git a/stream/microsoft-sentinel-intel/src/microsoft_sentinel_intel/settings.py b/stream/microsoft-sentinel-intel/src/microsoft_sentinel_intel/settings.py index 03fe8e4d4f5..5d5ce6ea721 100644 --- a/stream/microsoft-sentinel-intel/src/microsoft_sentinel_intel/settings.py +++ b/stream/microsoft-sentinel-intel/src/microsoft_sentinel_intel/settings.py @@ -52,7 +52,6 @@ class MicrosoftSentinelIntelConfig(BaseConfigModel): resource_group: str = Field( description="The name of the resource group where the log analytics is", default="default", - deprecated=True, ) source_system: str = Field( description="The name of the source system displayed in Microsoft Sentinel", @@ -70,10 +69,34 @@ class MicrosoftSentinelIntelConfig(BaseConfigModel): description="API version of the Microsoft log analytics workspace interface", default="2024-02-01-preview", ) + # TODO: remove management_api_version config var (not used anymore) management_api_version: str = Field( description="API version of the Microsoft management interface", default="2025-03-01", ) + query_api_version: str = Field( + description="API version of the Microsoft Sentinel threat-intel /query endpoint", + default="2025-07-01-preview", + ) + batch_mode: bool = Field( + description="Enable batch mode for bulk uploading STIX objects. When disabled (default), objects are sent individually in real-time.", + default=False, + ) + batch_size: int = Field( + description="Maximum number of unique STIX objects to accumulate before flushing a batch. Only used when batch_mode is enabled. Maxed at 100 because the Sentinel Upload Indicators API rejects requests containing more than 100 STIX objects.", + default=100, + ge=1, + le=100, + ) + batch_timeout: int = Field( + description="Maximum time in seconds to wait before flushing a partial batch. Only used when batch_mode is enabled.", + default=30, + ge=1, + ) + event_types: ListFromString = Field( + description="Comma-separated list of event types to process (create, update, delete). Defaults to all three; a single instance handles every event type. Restrict this only if you want to split the workload across dedicated instances.", + default=["create", "update", "delete"], + ) class ConnectorSettings(BaseConnectorSettings): diff --git a/stream/microsoft-sentinel-intel/src/microsoft_sentinel_intel/utils.py b/stream/microsoft-sentinel-intel/src/microsoft_sentinel_intel/utils.py index 0cf4adbc072..b4e35754aff 100644 --- a/stream/microsoft-sentinel-intel/src/microsoft_sentinel_intel/utils.py +++ b/stream/microsoft-sentinel-intel/src/microsoft_sentinel_intel/utils.py @@ -58,7 +58,9 @@ def is_stix_indicator(data: dict) -> bool: :param data: Data to check :return: True if data represents a STIX Indicator, False otherwise """ - return data["type"] == "indicator" and data["pattern_type"].startswith("stix") + return data.get("type") == "indicator" and data.get("pattern_type", "").startswith( + "stix" + ) def is_observable(data: dict) -> bool: diff --git a/stream/microsoft-sentinel-intel/src/requirements.txt b/stream/microsoft-sentinel-intel/src/requirements.txt index 3516e28b21b..8bb9a77f9d3 100644 --- a/stream/microsoft-sentinel-intel/src/requirements.txt +++ b/stream/microsoft-sentinel-intel/src/requirements.txt @@ -1,7 +1,7 @@ azure-identity~=1.25.0 azure-mgmt-securityinsight==1.0.0 filigran_sseclient~=1.0.2 -pycti==7.260309.0 +pycti==7.260515.0 pydantic~=2.11.5 pydantic-settings~=2.9.1 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk diff --git a/stream/microsoft-sentinel-intel/tests/microsoft_sentinel_intel/conftest.py b/stream/microsoft-sentinel-intel/tests/microsoft_sentinel_intel/conftest.py index f528f881352..e214a12278c 100644 --- a/stream/microsoft-sentinel-intel/tests/microsoft_sentinel_intel/conftest.py +++ b/stream/microsoft-sentinel-intel/tests/microsoft_sentinel_intel/conftest.py @@ -40,6 +40,10 @@ def fixture_microsoft_sentinel_intel_config_dict() -> dict[str, dict[str, str]]: "extra_labels": "label", "workspace_api_version": "2024-02-01-preview", "management_api_version": "2025-03-01", + "batch_mode": False, + "batch_size": 100, + "batch_timeout": 30, + "event_types": "create,update,delete", }, } @@ -59,3 +63,105 @@ def fixture_mock_microsoft_sentinel_intel_config( if sub_value is not None: environ[f"{key.upper()}_{sub_key.upper()}"] = str(sub_value) mocker.patch("os.environ", environ) + + +@pytest.fixture(name="microsoft_sentinel_intel_batch_config_dict") +def fixture_microsoft_sentinel_intel_batch_config_dict( + microsoft_sentinel_intel_config_dict: dict[str, dict[str, Any]], +) -> dict[str, dict[str, Any]]: + config = deepcopy(microsoft_sentinel_intel_config_dict) + config["microsoft_sentinel_intel"]["batch_mode"] = True + config["microsoft_sentinel_intel"]["batch_size"] = 3 + config["microsoft_sentinel_intel"]["batch_timeout"] = 2 + return config + + +@pytest.fixture(name="mock_microsoft_sentinel_intel_batch_config") +def fixture_mock_microsoft_sentinel_intel_batch_config( + mocker: MockerFixture, + microsoft_sentinel_intel_batch_config_dict: dict[str, dict[str, Any]], +) -> None: + ConnectorSettings.model_config["yaml_file"] = "" + ConnectorSettings.model_config["env_file"] = "" + + environ = deepcopy(os.environ) + for key, value in microsoft_sentinel_intel_batch_config_dict.items(): + for sub_key, sub_value in value.items(): + if sub_value is not None: + environ[f"{key.upper()}_{sub_key.upper()}"] = str(sub_value) + mocker.patch("os.environ", environ) + + +def _make_config_with_event_types( + base_config: dict[str, dict[str, Any]], + event_types: str, +) -> dict[str, dict[str, Any]]: + config = deepcopy(base_config) + config["microsoft_sentinel_intel"]["event_types"] = event_types + return config + + +def _mock_config_environ( + mocker: MockerFixture, + config_dict: dict[str, dict[str, Any]], +) -> None: + ConnectorSettings.model_config["yaml_file"] = "" + ConnectorSettings.model_config["env_file"] = "" + + environ = deepcopy(os.environ) + for key, value in config_dict.items(): + for sub_key, sub_value in value.items(): + if sub_value is not None: + environ[f"{key.upper()}_{sub_key.upper()}"] = str(sub_value) + mocker.patch("os.environ", environ) + + +@pytest.fixture(name="microsoft_sentinel_intel_create_update_only_config_dict") +def fixture_microsoft_sentinel_intel_create_update_only_config_dict( + microsoft_sentinel_intel_config_dict: dict[str, dict[str, Any]], +) -> dict[str, dict[str, Any]]: + return _make_config_with_event_types( + microsoft_sentinel_intel_config_dict, "create,update" + ) + + +@pytest.fixture(name="mock_microsoft_sentinel_intel_create_update_only_config") +def fixture_mock_microsoft_sentinel_intel_create_update_only_config( + mocker: MockerFixture, + microsoft_sentinel_intel_create_update_only_config_dict: dict[str, dict[str, Any]], +) -> None: + _mock_config_environ( + mocker, microsoft_sentinel_intel_create_update_only_config_dict + ) + + +@pytest.fixture(name="microsoft_sentinel_intel_delete_only_config_dict") +def fixture_microsoft_sentinel_intel_delete_only_config_dict( + microsoft_sentinel_intel_config_dict: dict[str, dict[str, Any]], +) -> dict[str, dict[str, Any]]: + return _make_config_with_event_types(microsoft_sentinel_intel_config_dict, "delete") + + +@pytest.fixture(name="mock_microsoft_sentinel_intel_delete_only_config") +def fixture_mock_microsoft_sentinel_intel_delete_only_config( + mocker: MockerFixture, + microsoft_sentinel_intel_delete_only_config_dict: dict[str, dict[str, Any]], +) -> None: + _mock_config_environ(mocker, microsoft_sentinel_intel_delete_only_config_dict) + + +@pytest.fixture(name="microsoft_sentinel_intel_batch_create_only_config_dict") +def fixture_microsoft_sentinel_intel_batch_create_only_config_dict( + microsoft_sentinel_intel_batch_config_dict: dict[str, dict[str, Any]], +) -> dict[str, dict[str, Any]]: + return _make_config_with_event_types( + microsoft_sentinel_intel_batch_config_dict, "create" + ) + + +@pytest.fixture(name="mock_microsoft_sentinel_intel_batch_create_only_config") +def fixture_mock_microsoft_sentinel_intel_batch_create_only_config( + mocker: MockerFixture, + microsoft_sentinel_intel_batch_create_only_config_dict: dict[str, dict[str, Any]], +) -> None: + _mock_config_environ(mocker, microsoft_sentinel_intel_batch_create_only_config_dict) diff --git a/stream/microsoft-sentinel-intel/tests/microsoft_sentinel_intel/test_config.py b/stream/microsoft-sentinel-intel/tests/microsoft_sentinel_intel/test_config.py index cd00d9a7da6..9a159fcb73a 100644 --- a/stream/microsoft-sentinel-intel/tests/microsoft_sentinel_intel/test_config.py +++ b/stream/microsoft-sentinel-intel/tests/microsoft_sentinel_intel/test_config.py @@ -16,12 +16,16 @@ def test_config() -> None: assert config["connector"]["live_stream_id"] == "live-stream-id" microsoft_sentinel_intel = config["microsoft_sentinel_intel"] - assert len(microsoft_sentinel_intel) == 12 + assert len(microsoft_sentinel_intel) == 17 + assert not microsoft_sentinel_intel["batch_mode"] + assert microsoft_sentinel_intel["batch_size"] == 100 + assert microsoft_sentinel_intel["batch_timeout"] == 30 assert microsoft_sentinel_intel["client_id"] == "ChangeMe" assert microsoft_sentinel_intel["client_secret"].get_secret_value() == "ChangeMe" - assert microsoft_sentinel_intel["delete_extensions"] == True + assert microsoft_sentinel_intel["delete_extensions"] assert microsoft_sentinel_intel["extra_labels"] == ["label"] assert microsoft_sentinel_intel["management_api_version"] == "2025-03-01" + assert microsoft_sentinel_intel["query_api_version"] == "2025-07-01-preview" assert microsoft_sentinel_intel["resource_group"] == "default" assert microsoft_sentinel_intel["source_system"] == "Opencti Stream Connector" assert microsoft_sentinel_intel["subscription_id"] == "ChangeMe" @@ -29,3 +33,4 @@ def test_config() -> None: assert microsoft_sentinel_intel["workspace_api_version"] == "2024-02-01-preview" assert microsoft_sentinel_intel["workspace_id"] == "ChangeMe" assert microsoft_sentinel_intel["workspace_name"] == "ChangeMe" + assert microsoft_sentinel_intel["event_types"] == ["create", "update", "delete"] diff --git a/stream/microsoft-sentinel-intel/tests/microsoft_sentinel_intel/test_connector.py b/stream/microsoft-sentinel-intel/tests/microsoft_sentinel_intel/test_connector.py index 6596b436189..2c8b1aa9480 100644 --- a/stream/microsoft-sentinel-intel/tests/microsoft_sentinel_intel/test_connector.py +++ b/stream/microsoft-sentinel-intel/tests/microsoft_sentinel_intel/test_connector.py @@ -9,6 +9,8 @@ from pytest_mock import MockerFixture from src.microsoft_sentinel_intel import Connector +BASE_API_URL = "https://management.azure.com/subscriptions/ChangeMe/resourceGroups/default/providers/Microsoft.OperationalInsights/workspaces/ChangeMe/providers/Microsoft.SecurityInsights/threatIntelligence/main" + @pytest.fixture(name="connector") def fixture_connector( @@ -20,6 +22,16 @@ def fixture_connector( return Connector(helper=helper, config=config, client=client) +@pytest.fixture(name="batch_connector") +def fixture_batch_connector( + mocked_api_client: MagicMock, mock_microsoft_sentinel_intel_batch_config +) -> Connector: + config = ConnectorSettings() + helper = OpenCTIConnectorHelper(config.to_helper_config()) + client = ConnectorClient(helper=helper, config=config) + return Connector(helper=helper, config=config, client=client) + + @pytest.fixture(name="event_data_indicator") def fixture_event_data_indicator() -> dict: return { @@ -86,7 +98,16 @@ def test_handle_event_delete( mocked_send_request.side_effect = [ Mock( status_code=200, - body=lambda: json.dumps({"value": [{"name": "SentinelId"}]}), + body=lambda: json.dumps( + { + "value": [ + { + "id": f"{BASE_API_URL}/SentinelId", + "name": "SentinelId", + } + ] + } + ), ), Mock(status_code=200), ] @@ -98,19 +119,818 @@ def test_handle_event_delete( # First call to query the indicator request = mocked_send_request.call_args_list[0].kwargs["request"] assert request.method == "POST" - assert ( - request.url == "https://management.azure.com" - "/subscriptions/ChangeMe/resourceGroups/default/providers/Microsoft.OperationalInsights/workspaces/ChangeMe" - "/providers/Microsoft.SecurityInsights/threatIntelligence/main" - "/queryIndicators?api-version=2025-03-01" - ) - assert json.loads(request.body) == {"keywords": event_data_indicator["id"]} + assert request.url == f"{BASE_API_URL}/query?api-version=2025-07-01-preview" + assert json.loads(request.body) == { + "condition": { + "clauses": [ + { + "field": "id", + "operator": "Equals", + "values": [event_data_indicator["id"]], + }, + { + "field": "source", + "operator": "Equals", + "values": ["Opencti Stream Connector"], + }, + ], + "conditionConnective": "And", + "stixObjectType": "indicator", + }, + } # Second call to delete the indicator request = mocked_send_request.call_args_list[1].kwargs["request"] assert request.method == "DELETE" - assert ( - request.url == "https://management.azure.com" - "/subscriptions/ChangeMe/resourceGroups/default/providers/Microsoft.OperationalInsights/workspaces/ChangeMe" - "/providers/Microsoft.SecurityInsights/threatIntelligence/main" - "/indicators/SentinelId?api-version=2025-03-01" + assert request.url == f"{BASE_API_URL}/SentinelId?api-version=2025-07-01-preview" + + +@pytest.mark.usefixtures("mock_microsoft_sentinel_intel_config") +def test_handle_event_delete_skips_when_not_found( + mocker: MockerFixture, connector: Connector, event_data_indicator: dict +) -> None: + """When queryIndicators returns 0 results, deletion is silently skipped.""" + mocked_send_request = mocker.patch( + "microsoft_sentinel_intel.client.PipelineClient.send_request" ) + mocked_send_request.side_effect = [ + Mock( + status_code=200, + body=lambda: json.dumps({"value": []}), + ), + ] + connector._handle_event( + Event(event="delete", data=json.dumps({"data": event_data_indicator})) + ) + # Only the query call is made; no delete request follows + assert mocked_send_request.call_count == 1 + + +@pytest.mark.usefixtures("mock_microsoft_sentinel_intel_config") +def test_handle_event_delete_uses_stixindicators_resource_id( + mocker: MockerFixture, connector: Connector, event_data_indicator: dict +) -> None: + """When /query returns stixindicators resources, delete by returned ARM id.""" + mocked_send_request = mocker.patch( + "microsoft_sentinel_intel.client.PipelineClient.send_request" + ) + mocked_send_request.side_effect = [ + Mock( + status_code=200, + body=lambda: json.dumps( + { + "value": [ + { + "id": f"{BASE_API_URL}/SentinelId1", + "name": "EncodedSource---indicator--SentinelId1", + } + ] + } + ), + ), + Mock(status_code=200), + ] + + connector._handle_event( + Event(event="delete", data=json.dumps({"data": event_data_indicator})) + ) + + assert mocked_send_request.call_count == 2 + request = mocked_send_request.call_args_list[1].kwargs["request"] + assert request.method == "DELETE" + assert request.url == f"{BASE_API_URL}/SentinelId1?api-version=2025-07-01-preview" + + +@pytest.mark.usefixtures("mock_microsoft_sentinel_intel_config") +def test_handle_event_delete_missing_value_key( + mocker: MockerFixture, connector: Connector, event_data_indicator: dict +) -> None: + """When queryIndicators response lacks 'value' key, raise ConnectorClientError.""" + from microsoft_sentinel_intel.errors import ConnectorClientError + + mocked_send_request = mocker.patch( + "microsoft_sentinel_intel.client.PipelineClient.send_request" + ) + mocked_send_request.side_effect = [ + Mock( + status_code=200, + body=lambda: json.dumps({"unexpected": "format"}), + ), + ] + with pytest.raises(ConnectorClientError) as exc_info: + connector._handle_event( + Event(event="delete", data=json.dumps({"data": event_data_indicator})) + ) + assert "missing 'value' key" in exc_info.value.message + + +@pytest.mark.usefixtures("mock_microsoft_sentinel_intel_config") +def test_handle_event_delete_multi_indicator_partial_failure( + mocker: MockerFixture, connector: Connector, event_data_indicator: dict +) -> None: + """When multiple indicators match and one delete fails, all are still attempted.""" + from azure.core.exceptions import HttpResponseError + from microsoft_sentinel_intel.errors import ConnectorClientError + + mocked_send_request = mocker.patch( + "microsoft_sentinel_intel.client.PipelineClient.send_request" + ) + mocked_send_request.side_effect = [ + # Query returns 2 indicators + Mock( + status_code=200, + body=lambda: json.dumps( + { + "value": [ + { + "id": f"{BASE_API_URL}/SentinelId1", + "name": "SentinelId1", + }, + { + "id": f"{BASE_API_URL}/SentinelId2", + "name": "SentinelId2", + }, + ] + } + ), + ), + # First delete fails + HttpResponseError(message="API error"), + # Second delete succeeds + Mock(status_code=200), + ] + with pytest.raises(ConnectorClientError) as exc_info: + connector._handle_event( + Event(event="delete", data=json.dumps({"data": event_data_indicator})) + ) + assert "Failed to delete 1/2 indicators" in exc_info.value.message + # All 3 API calls were attempted (query + 2 deletes) + assert mocked_send_request.call_count == 3 + + +@pytest.mark.usefixtures("mock_microsoft_sentinel_intel_config") +def test_handle_event_no_data(mocker: MockerFixture, connector: Connector) -> None: + """Connector should gracefully ignore events with no 'data' in its JSON payload.""" + mocked_send_request = mocker.patch( + "microsoft_sentinel_intel.client.PipelineClient.send_request" + ) + connector._handle_event( + Event(event="consumer_metrics", data=json.dumps({"metric": "value"})) + ) + assert mocked_send_request.call_count == 0 + + +# --- Batch mode tests --- + + +def _make_indicator_data(indicator_id: str, name: str = "1.1.1.1") -> dict: + return { + "id": indicator_id, + "spec_version": "2.1", + "type": "indicator", + "extensions": {}, + "created": "2025-06-06T09:37:59.399Z", + "modified": "2025-06-06T09:37:59.399Z", + "revoked": False, + "confidence": 100, + "lang": "en", + "name": name, + "description": name, + "pattern": f"[ipv4-addr:value = '{name}']", + "pattern_type": "stix", + "valid_from": "2025-06-06T09:37:59.368Z", + "valid_until": "2025-06-26T15:12:38.802Z", + } + + +def _make_batch_event( + event_type: str, indicator_id: str, name: str = "1.1.1.1" +) -> Event: + data = _make_indicator_data(indicator_id, name) + return Event(event=event_type, data=json.dumps({"data": data})) + + +def _make_batch_data(events: list[Event]) -> dict: + return {"events": events} + + +@pytest.mark.usefixtures("mock_microsoft_sentinel_intel_batch_config") +def test_process_batch_uploads_all( + mocker: MockerFixture, batch_connector: Connector +) -> None: + mocked_send_request = mocker.patch( + "microsoft_sentinel_intel.client.PipelineClient.send_request", + return_value=Mock(status_code=200), + ) + + batch_data = _make_batch_data( + [ + _make_batch_event("create", "indicator--1", "1.1.1.1"), + _make_batch_event("create", "indicator--2", "2.2.2.2"), + _make_batch_event("create", "indicator--3", "3.3.3.3"), + ] + ) + batch_connector.process_batch(batch_data) + + assert mocked_send_request.call_count == 1 + request = mocked_send_request.call_args.kwargs["request"] + body = json.loads(request.body) + assert len(body["stixobjects"]) == 3 + + +@pytest.mark.usefixtures("mock_microsoft_sentinel_intel_batch_config") +def test_process_batch_deduplicates( + mocker: MockerFixture, batch_connector: Connector +) -> None: + mocked_send_request = mocker.patch( + "microsoft_sentinel_intel.client.PipelineClient.send_request", + return_value=Mock(status_code=200), + ) + + batch_data = _make_batch_data( + [ + _make_batch_event("create", "indicator--1", "1.1.1.1"), + _make_batch_event("update", "indicator--1", "updated-name"), + _make_batch_event("create", "indicator--2", "2.2.2.2"), + ] + ) + batch_connector.process_batch(batch_data) + + assert mocked_send_request.call_count == 1 + request = mocked_send_request.call_args.kwargs["request"] + body = json.loads(request.body) + # Only 2 unique objects despite 3 events + assert len(body["stixobjects"]) == 2 + names = {obj["name"] for obj in body["stixobjects"]} + assert "updated-name" in names + assert "1.1.1.1" not in names + + +@pytest.mark.usefixtures("mock_microsoft_sentinel_intel_batch_config") +def test_process_batch_handles_delete_inline( + mocker: MockerFixture, batch_connector: Connector +) -> None: + """Delete events in batch mode should trigger individual query+delete API calls.""" + mocked_send_request = mocker.patch( + "microsoft_sentinel_intel.client.PipelineClient.send_request" + ) + mocked_send_request.side_effect = [ + Mock( + status_code=200, + body=lambda: json.dumps( + { + "value": [ + { + "id": "https://management.azure.com/.../SentinelId", + "name": "SentinelId", + } + ] + } + ), + ), + Mock(status_code=200), + ] + + batch_data = _make_batch_data( + [ + _make_batch_event("delete", "indicator--1", "1.1.1.1"), + ] + ) + batch_connector.process_batch(batch_data) + + assert mocked_send_request.call_count == 2 + # First call: query + request = mocked_send_request.call_args_list[0].kwargs["request"] + assert request.method == "POST" + assert json.loads(request.body) == { + "condition": { + "clauses": [ + { + "field": "id", + "operator": "Equals", + "values": ["indicator--1"], + }, + { + "field": "source", + "operator": "Equals", + "values": ["Opencti Stream Connector"], + }, + ], + "conditionConnective": "And", + "stixObjectType": "indicator", + }, + } + # Second call: delete + request = mocked_send_request.call_args_list[1].kwargs["request"] + assert request.method == "DELETE" + + +@pytest.mark.usefixtures("mock_microsoft_sentinel_intel_batch_config") +def test_process_batch_prepare_applied( + mocker: MockerFixture, batch_connector: Connector +) -> None: + mocked_send_request = mocker.patch( + "microsoft_sentinel_intel.client.PipelineClient.send_request", + return_value=Mock(status_code=200), + ) + + batch_data = _make_batch_data( + [ + _make_batch_event("create", "indicator--1", "1.1.1.1"), + _make_batch_event("create", "indicator--2", "2.2.2.2"), + _make_batch_event("create", "indicator--3", "3.3.3.3"), + ] + ) + batch_connector.process_batch(batch_data) + + request = mocked_send_request.call_args.kwargs["request"] + body = json.loads(request.body) + for obj in body["stixobjects"]: + assert "extensions" not in obj # delete_extensions is True + assert "label" in obj["labels"] # extra_labels applied + + +@pytest.mark.usefixtures("mock_microsoft_sentinel_intel_batch_config") +def test_process_batch_empty_events( + mocker: MockerFixture, batch_connector: Connector +) -> None: + mocked_send_request = mocker.patch( + "microsoft_sentinel_intel.client.PipelineClient.send_request", + return_value=Mock(status_code=200), + ) + + batch_connector.process_batch({"events": []}) + + assert mocked_send_request.call_count == 0 + + +@pytest.mark.usefixtures("mock_microsoft_sentinel_intel_batch_config") +def test_process_batch_skips_no_data_events( + mocker: MockerFixture, batch_connector: Connector +) -> None: + mocked_send_request = mocker.patch( + "microsoft_sentinel_intel.client.PipelineClient.send_request", + return_value=Mock(status_code=200), + ) + + batch_data = _make_batch_data( + [ + Event(event="consumer_metrics", data=json.dumps({"metric": "value"})), + ] + ) + batch_connector.process_batch(batch_data) + + assert mocked_send_request.call_count == 0 + + +@pytest.fixture(name="create_update_only_connector") +def fixture_create_update_only_connector( + mocked_api_client: MagicMock, + mock_microsoft_sentinel_intel_create_update_only_config, +) -> Connector: + config = ConnectorSettings() + helper = OpenCTIConnectorHelper(config.to_helper_config()) + client = ConnectorClient(helper=helper, config=config) + return Connector(helper=helper, config=config, client=client) + + +@pytest.fixture(name="delete_only_connector") +def fixture_delete_only_connector( + mocked_api_client: MagicMock, mock_microsoft_sentinel_intel_delete_only_config +) -> Connector: + config = ConnectorSettings() + helper = OpenCTIConnectorHelper(config.to_helper_config()) + client = ConnectorClient(helper=helper, config=config) + return Connector(helper=helper, config=config, client=client) + + +@pytest.fixture(name="batch_create_only_connector") +def fixture_batch_create_only_connector( + mocked_api_client: MagicMock, mock_microsoft_sentinel_intel_batch_create_only_config +) -> Connector: + config = ConnectorSettings() + helper = OpenCTIConnectorHelper(config.to_helper_config()) + client = ConnectorClient(helper=helper, config=config) + return Connector(helper=helper, config=config, client=client) + + +@pytest.mark.usefixtures("mock_microsoft_sentinel_intel_config") +def test_realtime_mode_unchanged( + mocker: MockerFixture, connector: Connector, event_data_indicator: dict +) -> None: + mocked_send_request = mocker.patch( + "microsoft_sentinel_intel.client.PipelineClient.send_request", + return_value=Mock(status_code=200), + ) + connector._handle_event( + Event(event="create", data=json.dumps({"data": event_data_indicator})) + ) + # In real-time mode, upload is called immediately for each event + assert mocked_send_request.call_count == 1 + + +# --- Event type filtering tests --- + + +@pytest.mark.usefixtures("mock_microsoft_sentinel_intel_create_update_only_config") +def test_event_types_filters_delete( + mocker: MockerFixture, + create_update_only_connector: Connector, + event_data_indicator: dict, +) -> None: + """Connector with event_types=create,update should ignore delete events.""" + mocked_send_request = mocker.patch( + "microsoft_sentinel_intel.client.PipelineClient.send_request", + return_value=Mock(status_code=200), + ) + create_update_only_connector._handle_event( + Event(event="delete", data=json.dumps({"data": event_data_indicator})) + ) + assert mocked_send_request.call_count == 0 + + +@pytest.mark.usefixtures("mock_microsoft_sentinel_intel_delete_only_config") +def test_event_types_filters_create_update( + mocker: MockerFixture, delete_only_connector: Connector, event_data_indicator: dict +) -> None: + """Connector with event_types=delete should ignore create/update events.""" + mocked_send_request = mocker.patch( + "microsoft_sentinel_intel.client.PipelineClient.send_request", + return_value=Mock(status_code=200), + ) + delete_only_connector._handle_event( + Event(event="create", data=json.dumps({"data": event_data_indicator})) + ) + delete_only_connector._handle_event( + Event(event="update", data=json.dumps({"data": event_data_indicator})) + ) + assert mocked_send_request.call_count == 0 + + +@pytest.mark.usefixtures("mock_microsoft_sentinel_intel_batch_create_only_config") +def test_process_batch_event_types_filter( + mocker: MockerFixture, batch_create_only_connector: Connector +) -> None: + """Batch connector with event_types=create should skip update events.""" + mocked_send_request = mocker.patch( + "microsoft_sentinel_intel.client.PipelineClient.send_request", + return_value=Mock(status_code=200), + ) + + batch_data = _make_batch_data( + [ + _make_batch_event("create", "indicator--1", "1.1.1.1"), + _make_batch_event("update", "indicator--2", "2.2.2.2"), + _make_batch_event("create", "indicator--3", "3.3.3.3"), + ] + ) + batch_create_only_connector.process_batch(batch_data) + + assert mocked_send_request.call_count == 1 + request = mocked_send_request.call_args.kwargs["request"] + body = json.loads(request.body) + assert len(body["stixobjects"]) == 2 + + +@pytest.mark.usefixtures("mock_microsoft_sentinel_intel_batch_config") +def test_process_batch_malformed_json( + mocker: MockerFixture, batch_connector: Connector +) -> None: + """Batch should skip malformed JSON events and process remaining valid ones.""" + mocked_send_request = mocker.patch( + "microsoft_sentinel_intel.client.PipelineClient.send_request", + return_value=Mock(status_code=200), + ) + + batch_data = _make_batch_data( + [ + Event(event="create", data="not valid json"), + _make_batch_event("create", "indicator--1", "1.1.1.1"), + ] + ) + batch_connector.process_batch(batch_data) + + assert mocked_send_request.call_count == 1 + request = mocked_send_request.call_args.kwargs["request"] + body = json.loads(request.body) + assert len(body["stixobjects"]) == 1 + + +@pytest.mark.usefixtures("mock_microsoft_sentinel_intel_batch_config") +def test_process_batch_non_indicator_stix_types( + mocker: MockerFixture, batch_connector: Connector +) -> None: + """Batch should skip non-indicator STIX objects.""" + mocked_send_request = mocker.patch( + "microsoft_sentinel_intel.client.PipelineClient.send_request", + return_value=Mock(status_code=200), + ) + + non_indicator = { + "id": "malware--uuid", + "type": "malware", + "name": "some-malware", + } + batch_data = _make_batch_data( + [ + Event(event="create", data=json.dumps({"data": non_indicator})), + _make_batch_event("create", "indicator--1", "1.1.1.1"), + ] + ) + batch_connector.process_batch(batch_data) + + assert mocked_send_request.call_count == 1 + request = mocked_send_request.call_args.kwargs["request"] + body = json.loads(request.body) + assert len(body["stixobjects"]) == 1 + + +@pytest.mark.usefixtures("mock_microsoft_sentinel_intel_batch_config") +def test_process_batch_delete_wins_over_create( + mocker: MockerFixture, batch_connector: Connector +) -> None: + """When same indicator has create then delete, only the delete flow runs.""" + mocked_send_request = mocker.patch( + "microsoft_sentinel_intel.client.PipelineClient.send_request" + ) + mocked_send_request.side_effect = [ + Mock( + status_code=200, + body=lambda: json.dumps( + { + "value": [ + { + "id": "https://management.azure.com/.../SentinelId", + "name": "SentinelId", + } + ] + } + ), + ), + Mock(status_code=200), + ] + + batch_data = _make_batch_data( + [ + _make_batch_event("create", "indicator--1", "1.1.1.1"), + _make_batch_event("delete", "indicator--1", "1.1.1.1"), + ] + ) + batch_connector.process_batch(batch_data) + + # Only query + delete calls, no upload + assert mocked_send_request.call_count == 2 + assert mocked_send_request.call_args_list[0].kwargs["request"].method == "POST" + assert mocked_send_request.call_args_list[1].kwargs["request"].method == "DELETE" + + +@pytest.mark.usefixtures("mock_microsoft_sentinel_intel_batch_config") +def test_process_batch_create_wins_over_delete( + mocker: MockerFixture, batch_connector: Connector +) -> None: + """When same indicator has delete then create, only the upload runs.""" + mocked_send_request = mocker.patch( + "microsoft_sentinel_intel.client.PipelineClient.send_request", + return_value=Mock(status_code=200), + ) + + batch_data = _make_batch_data( + [ + _make_batch_event("delete", "indicator--1", "1.1.1.1"), + _make_batch_event("create", "indicator--1", "1.1.1.1"), + ] + ) + batch_connector.process_batch(batch_data) + + # Only the upload call, no delete + assert mocked_send_request.call_count == 1 + request = mocked_send_request.call_args.kwargs["request"] + assert request.method == "POST" + body = json.loads(request.body) + assert len(body["stixobjects"]) == 1 + + +@pytest.mark.usefixtures("mock_microsoft_sentinel_intel_batch_config") +def test_process_batch_mixed_creates_and_deletes( + mocker: MockerFixture, batch_connector: Connector +) -> None: + """Batch with mixed create/delete: uploads creates, individually deletes.""" + mocked_send_request = mocker.patch( + "microsoft_sentinel_intel.client.PipelineClient.send_request" + ) + mocked_send_request.side_effect = [ + # Upload call for creates + Mock(status_code=200), + # Query call for delete + Mock( + status_code=200, + body=lambda: json.dumps( + { + "value": [ + { + "id": "https://management.azure.com/.../SentinelId", + "name": "SentinelId", + } + ] + } + ), + ), + # Delete call + Mock(status_code=200), + ] + + batch_data = _make_batch_data( + [ + _make_batch_event("create", "indicator--1", "1.1.1.1"), + _make_batch_event("create", "indicator--2", "2.2.2.2"), + _make_batch_event("delete", "indicator--1", "1.1.1.1"), + _make_batch_event("update", "indicator--3", "3.3.3.3"), + ] + ) + batch_connector.process_batch(batch_data) + + # 1 upload (indicator--2, indicator--3) + 1 query + 1 delete + assert mocked_send_request.call_count == 3 + # Upload call + upload_request = mocked_send_request.call_args_list[0].kwargs["request"] + body = json.loads(upload_request.body) + assert len(body["stixobjects"]) == 2 + uploaded_ids = {obj["id"] for obj in body["stixobjects"]} + assert uploaded_ids == {"indicator--2", "indicator--3"} + + +@pytest.mark.usefixtures("mock_microsoft_sentinel_intel_batch_config") +def test_process_batch_only_deletes( + mocker: MockerFixture, batch_connector: Connector +) -> None: + """Batch with only deletes: no upload call, only individual delete flows.""" + mocked_send_request = mocker.patch( + "microsoft_sentinel_intel.client.PipelineClient.send_request" + ) + mocked_send_request.side_effect = [ + # Delete 1: query + delete + Mock( + status_code=200, + body=lambda: json.dumps( + { + "value": [ + { + "id": "https://management.azure.com/.../SentinelId1", + "name": "SentinelId1", + } + ] + } + ), + ), + Mock(status_code=200), + # Delete 2: query + delete + Mock( + status_code=200, + body=lambda: json.dumps( + { + "value": [ + { + "id": "https://management.azure.com/.../SentinelId2", + "name": "SentinelId2", + } + ] + } + ), + ), + Mock(status_code=200), + ] + + batch_data = _make_batch_data( + [ + _make_batch_event("delete", "indicator--1", "1.1.1.1"), + _make_batch_event("delete", "indicator--2", "2.2.2.2"), + ] + ) + batch_connector.process_batch(batch_data) + + # 2 queries + 2 deletes = 4 total + assert mocked_send_request.call_count == 4 + + +@pytest.mark.usefixtures("mock_microsoft_sentinel_intel_batch_config") +def test_process_batch_delete_not_found( + mocker: MockerFixture, batch_connector: Connector +) -> None: + """When indicator not found in Sentinel, only the query call is made.""" + mocked_send_request = mocker.patch( + "microsoft_sentinel_intel.client.PipelineClient.send_request" + ) + mocked_send_request.side_effect = [ + Mock( + status_code=200, + body=lambda: json.dumps({"value": []}), + ), + ] + + batch_data = _make_batch_data( + [ + _make_batch_event("delete", "indicator--1", "1.1.1.1"), + ] + ) + batch_connector.process_batch(batch_data) + + assert mocked_send_request.call_count == 1 + + +@pytest.mark.usefixtures("mock_microsoft_sentinel_intel_batch_create_only_config") +def test_process_batch_delete_filtered_by_event_types( + mocker: MockerFixture, batch_create_only_connector: Connector +) -> None: + """Delete events are filtered out when event_types does not include 'delete'.""" + mocked_send_request = mocker.patch( + "microsoft_sentinel_intel.client.PipelineClient.send_request", + return_value=Mock(status_code=200), + ) + + batch_data = _make_batch_data( + [ + _make_batch_event("delete", "indicator--1", "1.1.1.1"), + ] + ) + batch_create_only_connector.process_batch(batch_data) + + assert mocked_send_request.call_count == 0 + + +@pytest.mark.usefixtures("mock_microsoft_sentinel_intel_batch_config") +def test_process_batch_delete_error_continues( + mocker: MockerFixture, batch_connector: Connector +) -> None: + """A failed delete should not abort remaining deletes.""" + from azure.core.exceptions import HttpResponseError + + mocked_send_request = mocker.patch( + "microsoft_sentinel_intel.client.PipelineClient.send_request" + ) + # HttpResponseError is raised by the Azure SDK; _send_request converts it + # to ConnectorClientError, which process_batch catches per-indicator. + mocked_send_request.side_effect = [ + # Delete 1: query succeeds, delete fails + Mock( + status_code=200, + body=lambda: json.dumps( + { + "value": [ + { + "id": "https://management.azure.com/.../SentinelId1", + "name": "SentinelId1", + } + ] + } + ), + ), + HttpResponseError(message="API error"), + # Delete 2: query + delete succeed + Mock( + status_code=200, + body=lambda: json.dumps( + { + "value": [ + { + "id": "https://management.azure.com/.../SentinelId2", + "name": "SentinelId2", + } + ] + } + ), + ), + Mock(status_code=200), + ] + + batch_data = _make_batch_data( + [ + _make_batch_event("delete", "indicator--1", "1.1.1.1"), + _make_batch_event("delete", "indicator--2", "2.2.2.2"), + ] + ) + batch_connector.process_batch(batch_data) + + # All 4 API calls were attempted (first delete failed but second still ran) + assert mocked_send_request.call_count == 4 + + +@pytest.mark.usefixtures("mock_microsoft_sentinel_intel_config") +def test_prepare_stix_object_missing_extensions( + connector: Connector, event_data_indicator: dict +) -> None: + """_prepare_stix_object should not raise if 'extensions' key is absent.""" + indicator_no_ext = { + k: v for k, v in event_data_indicator.items() if k != "extensions" + } + result = connector._prepare_stix_object(indicator_no_ext) + assert "extensions" not in result + + +@pytest.mark.usefixtures("mock_microsoft_sentinel_intel_config") +def test_prepare_stix_object_does_not_mutate_input( + connector: Connector, event_data_indicator: dict +) -> None: + """_prepare_stix_object should not modify the original dict.""" + original_keys = set(event_data_indicator.keys()) + connector._prepare_stix_object(event_data_indicator) + assert set(event_data_indicator.keys()) == original_keys + assert "extensions" in event_data_indicator diff --git a/stream/microsoft-sentinel-intel/tests/test-requirements.txt b/stream/microsoft-sentinel-intel/tests/test-requirements.txt index 9f81081e8a8..27617b91c57 100644 --- a/stream/microsoft-sentinel-intel/tests/test-requirements.txt +++ b/stream/microsoft-sentinel-intel/tests/test-requirements.txt @@ -1,3 +1,3 @@ -r ../src/requirements.txt -pytest==8.4.0 +pytest==9.0.3 pytest-mock==3.14.1 \ No newline at end of file diff --git a/stream/microsoft-sentinel-intel/tests/test_main.py b/stream/microsoft-sentinel-intel/tests/test_main.py index ec89eba5c64..c3841ba4001 100644 --- a/stream/microsoft-sentinel-intel/tests/test_main.py +++ b/stream/microsoft-sentinel-intel/tests/test_main.py @@ -92,8 +92,8 @@ def test_opencti_connector_helper_is_instantiated(mock_opencti_connector_helper) assert helper.connect_scope == "test,connector" assert helper.log_level == "ERROR" assert helper.connect_live_stream_id == "live" - assert helper.connect_live_stream_listen_delete == True - assert helper.connect_live_stream_no_dependencies == True + assert helper.connect_live_stream_listen_delete + assert helper.connect_live_stream_no_dependencies def test_connector_is_instantiated(mock_opencti_connector_helper): diff --git a/stream/misp-intel/__metadata__/CONNECTOR_CONFIG_DOC.md b/stream/misp-intel/__metadata__/CONNECTOR_CONFIG_DOC.md index f1643a80970..0ce90540332 100644 --- a/stream/misp-intel/__metadata__/CONNECTOR_CONFIG_DOC.md +++ b/stream/misp-intel/__metadata__/CONNECTOR_CONFIG_DOC.md @@ -29,6 +29,7 @@ Below is an exhaustive enumeration of all configurable parameters available, eac | MISP_TAG_OPENCTI | `boolean` | | boolean | `true` | Add OpenCTI-specific tags to MISP events. | | MISP_TAG_PREFIX | `string` | | string | `"opencti:"` | Prefix for OpenCTI tags in MISP. | | MISP_HARD_DELETE | `boolean` | | boolean | `true` | Perform hard deletion of MISP events (permanent deletion without blocklisting). If False, deleted events are added to the blocklist to prevent re-importation. If True, events are permanently deleted and can be re-imported later. | +| MISP_DETECT_ROUND_TRIP | `boolean` | | boolean | `false` | Enable round-trip detection. When True, the connector checks if a container has an external reference from MISP (source_name='misp' with a valid external_id). If so, it updates the existing MISP event instead of creating a duplicate. | | PROXY_HTTP | `string` | | string | `null` | HTTP proxy URL (e.g., http://proxy:8080). | | PROXY_HTTPS | `string` | | string | `null` | HTTPS proxy URL (e.g., http://proxy:8080). | | PROXY_NO_PROXY | `string` | | string | `"localhost,127.0.0.1"` | Comma-separated list of hosts to bypass proxy. | diff --git a/stream/misp-intel/__metadata__/connector_config_schema.json b/stream/misp-intel/__metadata__/connector_config_schema.json index 99c7dd504be..dc817db7e3d 100644 --- a/stream/misp-intel/__metadata__/connector_config_schema.json +++ b/stream/misp-intel/__metadata__/connector_config_schema.json @@ -145,6 +145,11 @@ "description": "Perform hard deletion of MISP events (permanent deletion without blocklisting). If False, deleted events are added to the blocklist to prevent re-importation. If True, events are permanently deleted and can be re-imported later.", "type": "boolean" }, + "MISP_DETECT_ROUND_TRIP": { + "default": false, + "description": "Enable round-trip detection. When True, the connector checks if a container has an external reference from MISP (source_name='misp' with a valid external_id). If so, it updates the existing MISP event instead of creating a duplicate.", + "type": "boolean" + }, "PROXY_HTTP": { "default": null, "description": "HTTP proxy URL (e.g., http://proxy:8080).", diff --git a/stream/misp-intel/docker-compose.yml b/stream/misp-intel/docker-compose.yml index ac6163c8ff9..535d76ed2b9 100644 --- a/stream/misp-intel/docker-compose.yml +++ b/stream/misp-intel/docker-compose.yml @@ -28,4 +28,5 @@ services: - MISP_PUBLISH_ALERT=false - MISP_TAG_OPENCTI=true - MISP_TAG_PREFIX=opencti: + - MISP_DETECT_ROUND_TRIP=false restart: always diff --git a/stream/misp-intel/src/config.yml.sample b/stream/misp-intel/src/config.yml.sample index 2f08d206cb3..252fbca8128 100644 --- a/stream/misp-intel/src/config.yml.sample +++ b/stream/misp-intel/src/config.yml.sample @@ -34,6 +34,9 @@ misp: tag_opencti: true # Add OpenCTI-specific tags to MISP events tag_prefix: 'opencti:' # Prefix for OpenCTI tags + # Round-trip configuration + detect_round_trip: false # Enable round-trip detection (update existing MISP events instead of creating duplicates) + # Optional proxy configuration proxy: http: '' # HTTP proxy URL (e.g., http://proxy:8080) diff --git a/stream/misp-intel/src/misp_intel_connector/connector.py b/stream/misp-intel/src/misp_intel_connector/connector.py index e44caa8539e..719ed04a396 100644 --- a/stream/misp-intel/src/misp_intel_connector/connector.py +++ b/stream/misp-intel/src/misp_intel_connector/connector.py @@ -147,6 +147,86 @@ def _resolve_container_references(self, container_data: Dict) -> Dict: ) return None + def _find_existing_misp_event_uuid(self, container: Dict) -> Optional[str]: + """ + Check if the container has an external reference from MISP with a valid external_id + that still exists in MISP. Used in MISP-to-MISP mode to detect round-trip events. + + Filters out refs whose event no longer exists in MISP. + Returns the first valid UUID found, or None if no valid match exists. + + :param container: Container STIX data + :return: MISP event UUID if at least one valid match found, None otherwise + """ + container_id = None + try: + if not container or "external_references" not in container: + return None + + container_id = self.helper.get_attribute_in_extension("id", container) + + misp_refs = [] + for ext_ref in container["external_references"]: + if ext_ref.get("source_name", "").lower() == "misp" and ext_ref.get( + "external_id" + ): + misp_refs.append(ext_ref["external_id"]) + + original_misp_refs = misp_refs.copy() + + for misp_ref in misp_refs.copy(): + # Check if the external_id still exists in MISP. + if not self.api.get_event_by_uuid(misp_ref): + misp_refs.remove(misp_ref) + + if not misp_refs: + if not original_misp_refs: + self.helper.connector_logger.info( + "[MISP-TO-MISP] No MISP external reference found for container", + {"container_id": container_id}, + ) + else: + self.helper.connector_logger.info( + "[MISP-TO-MISP] MISP external references found for " + "container, but none still exist in MISP", + { + "container_id": container_id, + "misp_refs_count": len(original_misp_refs), + "misp_refs": original_misp_refs, + }, + ) + return None + + if len(misp_refs) == 1: + self.helper.connector_logger.info( + "[MISP-TO-MISP] Found existing MISP external reference", + { + "container_id": container_id, + "misp_event_uuid": misp_refs[0], + }, + ) + + if len(misp_refs) > 1: + self.helper.connector_logger.warning( + "[MISP-TO-MISP] Multiple MISP external references found, " + "taking the first one", + { + "container_id": container_id, + "misp_event_uuid": misp_refs[0], + "misp_refs_count": len(misp_refs), + "misp_refs": misp_refs, + }, + ) + + return misp_refs[0] + + except Exception as e: + self.helper.connector_logger.warning( + f"[MISP-TO-MISP] Could not check external references: {str(e)}", + {"container_id": container_id}, + ) + return None + def _create_misp_event(self, container_data: Dict) -> Optional[Dict]: """ Create a MISP event from an OpenCTI container @@ -156,6 +236,33 @@ def _create_misp_event(self, container_data: Dict) -> Optional[Dict]: try: container_id = self.helper.get_attribute_in_extension("id", container_data) + # MISP-to-MISP round-trip detection: + # Check if this container already has a MISP external reference, + # meaning it was originally imported from MISP. If so, update + # the existing MISP event instead of creating a duplicate. + # _find_existing_misp_event_uuid already verifies the event exists in MISP. + if self.config.misp.detect_round_trip: + existing_uuid = self._find_existing_misp_event_uuid(container_data) + if existing_uuid: + self.helper.connector_logger.info( + "[MISP-TO-MISP] Updating existing MISP event " + "instead of creating a duplicate", + { + "misp_event_uuid": existing_uuid, + "opencti_id": container_id, + }, + ) + updated = self._update_misp_event(container_data, existing_uuid) + if not updated: + self.helper.connector_logger.error( + "[MISP-TO-MISP] Failed to update existing MISP event", + { + "misp_event_uuid": existing_uuid, + "opencti_id": container_id, + }, + ) + return None + # Resolve full container with references stix_bundle = self._resolve_container_references(container_data) if not stix_bundle: @@ -383,11 +490,22 @@ def _worker_process_queue(self) -> None: self._create_misp_event(container_data) elif event_type == "update": - # Use container_id directly as MISP UUID (since we set it during creation) - misp_event_uuid = container_id + # In MISP-to-MISP round-trip mode, prioritize the original + # MISP event UUID from external references over the OpenCTI + # container_id to avoid updating a duplicate event. + misp_event_uuid = None + existing_event = None + if self.config.misp.detect_round_trip: + alt_uuid = self._find_existing_misp_event_uuid(container_data) + if alt_uuid: + existing_event = True + misp_event_uuid = alt_uuid + + if not existing_event: + # Fallback: use container_id directly as MISP UUID + misp_event_uuid = container_id + existing_event = self.api.get_event_by_uuid(misp_event_uuid) - # Check if the event exists in MISP - existing_event = self.api.get_event_by_uuid(misp_event_uuid) if existing_event: self._update_misp_event(container_data, misp_event_uuid) else: diff --git a/stream/misp-intel/src/models/configs/misp_configs.py b/stream/misp-intel/src/models/configs/misp_configs.py index 85208626d9c..49ef06c04b1 100644 --- a/stream/misp-intel/src/models/configs/misp_configs.py +++ b/stream/misp-intel/src/models/configs/misp_configs.py @@ -92,6 +92,18 @@ class _ConfigLoaderMisp(ConfigBaseSettings): ), ) + # Round-trip configuration + detect_round_trip: bool = Field( + default=False, + alias="MISP_DETECT_ROUND_TRIP", + description=( + "Enable round-trip detection. " + "When True, the connector checks if a container has an external reference " + "from MISP (source_name='misp' with a valid external_id). If so, it updates " + "the existing MISP event instead of creating a duplicate." + ), + ) + @field_validator("url") def clean_url(cls, value: str) -> str: """Remove trailing slashes from the URL.""" diff --git a/stream/misp-intel/src/requirements.txt b/stream/misp-intel/src/requirements.txt index f5501f63dd8..28069666826 100644 --- a/stream/misp-intel/src/requirements.txt +++ b/stream/misp-intel/src/requirements.txt @@ -1,5 +1,5 @@ -pycti==7.260309.0 -urllib3==2.6.3 +pycti==7.260515.0 +urllib3==2.7.0 pydantic-settings==2.9.1 jsonschema==4.26.0 python-dateutil==2.9.0.post0 diff --git a/stream/misp-intel/tests/conftest.py b/stream/misp-intel/tests/conftest.py new file mode 100644 index 00000000000..5ee8fc0e226 --- /dev/null +++ b/stream/misp-intel/tests/conftest.py @@ -0,0 +1,4 @@ +import os +import sys + +sys.path.append(os.path.join(os.path.dirname(__file__), "..", "src")) diff --git a/stream/misp-intel/tests/test-requirements.txt b/stream/misp-intel/tests/test-requirements.txt new file mode 100644 index 00000000000..844222c60ca --- /dev/null +++ b/stream/misp-intel/tests/test-requirements.txt @@ -0,0 +1,3 @@ +-r ../src/requirements.txt +pytest==8.4.2 +pytest-mock==3.14.1 diff --git a/stream/misp-intel/tests/test_misp_to_misp.py b/stream/misp-intel/tests/test_misp_to_misp.py new file mode 100644 index 00000000000..0b5be76f5d9 --- /dev/null +++ b/stream/misp-intel/tests/test_misp_to_misp.py @@ -0,0 +1,460 @@ +""" +Tests for MISP-to-MISP round-trip handling (issue #6182). + +Tests the _find_existing_misp_event_uuid method and the create/update paths +when detect_round_trip mode is enabled. +""" + +from unittest.mock import MagicMock, patch + +import pytest +from misp_intel_connector.connector import MispIntelConnector + + +@pytest.fixture +def mock_config(): + """Create a mock config with detect_round_trip enabled.""" + config = MagicMock() + config.misp.url = "https://misp.example.com" + config.misp.detect_round_trip = True + config.misp.hard_delete = True + config.misp.distribution_level = 1 + config.misp.threat_level = 2 + config.misp.ssl_verify = True + config.misp.api_key.get_secret_value.return_value = "fake-key" + config.misp.publish_on_create = False + config.misp.publish_on_update = False + config.misp.publish_alert = False + config.misp.tag_opencti = True + config.misp.tag_prefix = "opencti:" + config.misp.owner_org = None + config.model_dump_pycti.return_value = { + "opencti": {"url": "http://localhost:8080", "token": "fake-token"}, + "connector": { + "id": "test-id", + "type": "STREAM", + "name": "MISP Intel", + "scope": "misp", + "confidence_level": 80, + "log_level": "info", + "live_stream_id": "test-stream-id", + "live_stream_listen_delete": True, + "live_stream_no_dependencies": False, + }, + } + return config + + +@pytest.fixture +def connector(mock_config): + """Create a MispIntelConnector with mocked dependencies.""" + with patch( + "misp_intel_connector.connector.OpenCTIConnectorHelper" + ) as mock_helper_cls, patch( + "misp_intel_connector.connector.MispApiHandler" + ) as mock_api_cls: + mock_helper = MagicMock() + mock_helper_cls.return_value = mock_helper + mock_api = MagicMock() + mock_api.test_connection.return_value = True + mock_api_cls.return_value = mock_api + + conn = MispIntelConnector(mock_config) + conn.helper = mock_helper + conn.api = mock_api + return conn + + +def _make_container_data(external_references=None, container_id="container-uuid-1"): + """Helper to build a fake STIX container dict.""" + data = { + "type": "report", + "id": f"report--{container_id}", + "extensions": { + "extension-definition--ea279b3e-5c71-4632-ac08-831c66a786ba": { + "id": container_id, + "type": "Report", + } + }, + } + if external_references is not None: + data["external_references"] = external_references + return data + + +# ────────────────────────────────────────────────────── +# Tests for _find_existing_misp_event_uuid +# ────────────────────────────────────────────────────── + + +class TestFindExistingMispEventUuid: + """Tests for the _find_existing_misp_event_uuid method.""" + + def test_returns_uuid_when_single_misp_ref(self, connector): + """When exactly one external_reference has source_name='misp', return its external_id.""" + container = _make_container_data( + external_references=[ + { + "source_name": "misp", + "external_id": "original-misp-uuid-123", + "url": "https://misp.example.com/events/view/42", + } + ] + ) + # The ref exists in MISP + connector.api.get_event_by_uuid.return_value = { + "id": "42", + "uuid": "original-misp-uuid-123", + } + result = connector._find_existing_misp_event_uuid(container) + assert result == "original-misp-uuid-123" + + def test_returns_uuid_case_insensitive(self, connector): + """source_name matching should be case-insensitive.""" + container = _make_container_data( + external_references=[ + {"source_name": "MISP", "external_id": "uuid-case-test"} + ] + ) + connector.api.get_event_by_uuid.return_value = { + "id": "1", + "uuid": "uuid-case-test", + } + result = connector._find_existing_misp_event_uuid(container) + assert result == "uuid-case-test" + + def test_returns_none_when_no_external_references(self, connector): + """When container has no external_references key, return None.""" + container = _make_container_data(external_references=None) + result = connector._find_existing_misp_event_uuid(container) + assert result is None + + def test_returns_none_when_empty_external_references(self, connector): + """When external_references is an empty list, return None.""" + container = _make_container_data(external_references=[]) + result = connector._find_existing_misp_event_uuid(container) + assert result is None + + def test_returns_none_when_no_misp_refs(self, connector): + """When external_references exist but none have source_name='misp', return None.""" + container = _make_container_data( + external_references=[ + {"source_name": "AlienVault", "external_id": "av-123"}, + {"source_name": "VirusTotal", "external_id": "vt-456"}, + ] + ) + result = connector._find_existing_misp_event_uuid(container) + assert result is None + + def test_returns_first_when_multiple_misp_refs(self, connector): + """When multiple MISP external references exist and both are in MISP, return the first one.""" + container = _make_container_data( + external_references=[ + {"source_name": "misp", "external_id": "misp-uuid-1"}, + {"source_name": "misp", "external_id": "misp-uuid-2"}, + ] + ) + # Both exist in MISP + connector.api.get_event_by_uuid.return_value = {"id": "1"} + result = connector._find_existing_misp_event_uuid(container) + assert result == "misp-uuid-1" + + def test_ignores_misp_ref_without_external_id(self, connector): + """MISP refs without external_id should be ignored.""" + container = _make_container_data( + external_references=[ + {"source_name": "misp", "external_id": ""}, + {"source_name": "misp"}, + ] + ) + result = connector._find_existing_misp_event_uuid(container) + assert result is None + + def test_filters_misp_ref_among_others(self, connector): + """Should correctly pick the MISP ref among non-MISP refs.""" + container = _make_container_data( + external_references=[ + {"source_name": "AlienVault", "external_id": "av-123"}, + {"source_name": "misp", "external_id": "the-misp-uuid"}, + {"source_name": "VirusTotal", "external_id": "vt-456"}, + ] + ) + connector.api.get_event_by_uuid.return_value = { + "id": "1", + "uuid": "the-misp-uuid", + } + result = connector._find_existing_misp_event_uuid(container) + assert result == "the-misp-uuid" + + def test_returns_none_on_empty_container(self, connector): + """When container is None or empty dict, return None.""" + assert connector._find_existing_misp_event_uuid(None) is None + assert connector._find_existing_misp_event_uuid({}) is None + + def test_filters_out_refs_not_found_in_misp(self, connector): + """MISP refs whose event no longer exists in MISP should be filtered out.""" + container = _make_container_data( + external_references=[ + {"source_name": "misp", "external_id": "deleted-uuid"}, + ] + ) + # Event does not exist in MISP + connector.api.get_event_by_uuid.return_value = None + result = connector._find_existing_misp_event_uuid(container) + assert result is None + connector.api.get_event_by_uuid.assert_called_once_with("deleted-uuid") + + def test_filters_deleted_keeps_existing(self, connector): + """When one MISP ref is deleted and another exists, return the existing one.""" + container = _make_container_data( + external_references=[ + {"source_name": "misp", "external_id": "deleted-uuid"}, + {"source_name": "misp", "external_id": "alive-uuid"}, + ] + ) + connector.api.get_event_by_uuid.side_effect = [ + None, # deleted-uuid not found + {"id": "42", "uuid": "alive-uuid"}, # alive-uuid exists + ] + result = connector._find_existing_misp_event_uuid(container) + assert result == "alive-uuid" + + def test_all_refs_deleted_returns_none(self, connector): + """When all MISP refs point to deleted events, return None.""" + container = _make_container_data( + external_references=[ + {"source_name": "misp", "external_id": "gone-1"}, + {"source_name": "misp", "external_id": "gone-2"}, + ] + ) + connector.api.get_event_by_uuid.return_value = None + result = connector._find_existing_misp_event_uuid(container) + assert result is None + assert connector.api.get_event_by_uuid.call_count == 2 + + +# ────────────────────────────────────────────────────── +# Tests for _create_misp_event with detect_round_trip +# ────────────────────────────────────────────────────── + + +class TestCreateMispEventRoundTrip: + """Tests for the detect_round_trip block in _create_misp_event.""" + + def test_updates_existing_event_instead_of_creating(self, connector): + """When detect_round_trip=True and a MISP ref exists, should update, not create.""" + container_data = _make_container_data( + external_references=[ + {"source_name": "misp", "external_id": "existing-misp-uuid"} + ], + container_id="opencti-container-id", + ) + connector.helper.get_attribute_in_extension.return_value = ( + "opencti-container-id" + ) + # get_event_by_uuid is called in _find_existing_misp_event_uuid + # to verify event exists in MISP (no redundant second call needed) + connector.api.get_event_by_uuid.return_value = { + "id": "42", + "uuid": "existing-misp-uuid", + } + connector._update_misp_event = MagicMock(return_value=True) + connector._resolve_container_references = MagicMock() + + connector._create_misp_event(container_data) + + # Should update the existing event + connector._update_misp_event.assert_called_once_with( + container_data, "existing-misp-uuid" + ) + # Should NOT resolve references or create a new event + connector._resolve_container_references.assert_not_called() + connector.api.create_event.assert_not_called() + + def test_creates_normally_when_detect_round_trip_disabled(self, connector): + """When detect_round_trip=False, should follow normal create path.""" + connector.config.misp.detect_round_trip = False + container_data = _make_container_data( + external_references=[ + {"source_name": "misp", "external_id": "existing-misp-uuid"} + ], + container_id="opencti-container-id", + ) + connector.helper.get_attribute_in_extension.return_value = ( + "opencti-container-id" + ) + connector._resolve_container_references = MagicMock( + return_value={"type": "bundle", "objects": []} + ) + + with patch( + "misp_intel_connector.connector.convert_stix_bundle_to_misp_event" + ) as mock_convert: + mock_convert.return_value = {"info": "test", "uuid": "opencti-container-id"} + connector.api.create_event.return_value = { + "id": "99", + "uuid": "opencti-container-id", + } + connector.helper.api.external_reference.create.return_value = { + "id": "ext-ref-id" + } + + result = connector._create_misp_event(container_data) + + # Should call the normal create path + connector._resolve_container_references.assert_called_once() + connector.api.create_event.assert_called_once() + assert result == {"id": "99", "uuid": "opencti-container-id"} + + def test_creates_normally_when_no_misp_ref(self, connector): + """When detect_round_trip=True but no MISP external ref, should create normally.""" + container_data = _make_container_data( + external_references=[], + container_id="opencti-container-id", + ) + connector.helper.get_attribute_in_extension.return_value = ( + "opencti-container-id" + ) + connector._resolve_container_references = MagicMock( + return_value={"type": "bundle", "objects": []} + ) + + with patch( + "misp_intel_connector.connector.convert_stix_bundle_to_misp_event" + ) as mock_convert: + mock_convert.return_value = {"info": "test", "uuid": "opencti-container-id"} + connector.api.create_event.return_value = { + "id": "99", + "uuid": "opencti-container-id", + } + connector.helper.api.external_reference.create.return_value = { + "id": "ext-ref-id" + } + + result = connector._create_misp_event(container_data) + + connector.api.create_event.assert_called_once() + assert result is not None + + def test_creates_when_misp_event_not_found(self, connector): + """When detect_round_trip=True and MISP ref exists but event not found in MISP, should create.""" + container_data = _make_container_data( + external_references=[ + {"source_name": "misp", "external_id": "deleted-misp-uuid"} + ], + container_id="opencti-container-id", + ) + connector.helper.get_attribute_in_extension.return_value = ( + "opencti-container-id" + ) + # Event not found in MISP + connector.api.get_event_by_uuid.return_value = None + connector._resolve_container_references = MagicMock( + return_value={"type": "bundle", "objects": []} + ) + + with patch( + "misp_intel_connector.connector.convert_stix_bundle_to_misp_event" + ) as mock_convert: + mock_convert.return_value = {"info": "test", "uuid": "opencti-container-id"} + connector.api.create_event.return_value = { + "id": "99", + "uuid": "opencti-container-id", + } + connector.helper.api.external_reference.create.return_value = { + "id": "ext-ref-id" + } + + connector._create_misp_event(container_data) + + # Should fall through to normal create + connector.api.create_event.assert_called_once() + + +# ────────────────────────────────────────────────────── +# Tests for _worker_process_queue update path with detect_round_trip +# ────────────────────────────────────────────────────── + + +class TestWorkerUpdateRoundTrip: + """Tests for the update path in _worker_process_queue with detect_round_trip.""" + + def _run_worker_once(self, connector): + """Run the worker, letting it process one item before stopping.""" + import threading + + processed = threading.Event() + original_task_done = connector.work_queue.task_done + + def task_done_and_stop(): + original_task_done() + connector.stop_worker.set() + processed.set() + + connector.work_queue.task_done = task_done_and_stop + connector._worker_process_queue() + assert processed.is_set(), "Worker did not process any item" + + def test_update_uses_external_ref_uuid_when_container_uuid_not_found( + self, connector + ): + """On update with detect_round_trip, should prioritize external ref UUID over container_id.""" + container_data = _make_container_data( + external_references=[ + {"source_name": "misp", "external_id": "original-misp-uuid"} + ], + container_id="opencti-id", + ) + connector.helper.get_attribute_in_extension.return_value = "opencti-id" + + # _find_existing_misp_event_uuid calls get_event_by_uuid + # to verify the ref exists in MISP + connector.api.get_event_by_uuid.return_value = { + "id": "42", + "uuid": "original-misp-uuid", + } + connector._update_misp_event = MagicMock(return_value=True) + + connector.work_queue.put_nowait(("update", container_data, "opencti-id")) + self._run_worker_once(connector) + + # Should have called _update_misp_event with the external ref UUID + connector._update_misp_event.assert_called_once_with( + container_data, "original-misp-uuid" + ) + + def test_update_uses_container_uuid_when_found(self, connector): + """On update, if no external ref and event found by container_id, should use it directly.""" + container_data = _make_container_data(container_id="opencti-id") + connector.helper.get_attribute_in_extension.return_value = "opencti-id" + + connector.api.get_event_by_uuid.return_value = { + "id": "42", + "uuid": "opencti-id", + } + connector._update_misp_event = MagicMock(return_value=True) + + connector.work_queue.put_nowait(("update", container_data, "opencti-id")) + self._run_worker_once(connector) + + # Should use the container_id directly + connector._update_misp_event.assert_called_once_with( + container_data, "opencti-id" + ) + + def test_update_falls_back_to_create_when_not_found_anywhere(self, connector): + """On update, if event not found by container_id or ext ref, should create.""" + container_data = _make_container_data( + external_references=[], container_id="opencti-id" + ) + connector.helper.get_attribute_in_extension.return_value = "opencti-id" + + connector.api.get_event_by_uuid.return_value = None + connector._create_misp_event = MagicMock() + connector._update_misp_event = MagicMock() + + connector.work_queue.put_nowait(("update", container_data, "opencti-id")) + self._run_worker_once(connector) + + connector._update_misp_event.assert_not_called() + connector._create_misp_event.assert_called_once_with(container_data) diff --git a/stream/pan-cortex-xsoar-intel/src/requirements.txt b/stream/pan-cortex-xsoar-intel/src/requirements.txt index e09ced32d6e..7d3f9ab0ae4 100644 --- a/stream/pan-cortex-xsoar-intel/src/requirements.txt +++ b/stream/pan-cortex-xsoar-intel/src/requirements.txt @@ -1,4 +1,4 @@ -pycti==7.260309.0 +pycti==7.260515.0 stix-shifter==8.0.2 stix-shifter-utils==8.0.2 stix-shifter-modules-splunk==8.0.2 diff --git a/stream/qradar/src/requirements.txt b/stream/qradar/src/requirements.txt index e09ced32d6e..7d3f9ab0ae4 100644 --- a/stream/qradar/src/requirements.txt +++ b/stream/qradar/src/requirements.txt @@ -1,4 +1,4 @@ -pycti==7.260309.0 +pycti==7.260515.0 stix-shifter==8.0.2 stix-shifter-utils==8.0.2 stix-shifter-modules-splunk==8.0.2 diff --git a/stream/sekoia-intel/docker-compose.yml b/stream/sekoia-intel/docker-compose.yml index 1e47e39d02b..bd71b38ff4f 100755 --- a/stream/sekoia-intel/docker-compose.yml +++ b/stream/sekoia-intel/docker-compose.yml @@ -1,7 +1,7 @@ version: '3' services: sekoia-intel: - image: opencti/connector-sekoia-intel:7.260309.0 + image: opencti/connector-sekoia-intel:7.260515.0 environment: # Connector's generic execution parameters - OPENCTI_URL=http://localhost diff --git a/stream/sekoia-intel/src/requirements.txt b/stream/sekoia-intel/src/requirements.txt index 793263cf349..8dd01bca25d 100755 --- a/stream/sekoia-intel/src/requirements.txt +++ b/stream/sekoia-intel/src/requirements.txt @@ -1,4 +1,4 @@ -pycti==7.260309.0 +pycti==7.260515.0 validators==0.35.0 stix-shifter==8.0.2 stix-shifter-utils==8.0.2 diff --git a/stream/sentinelone-intel/src/requirements.txt b/stream/sentinelone-intel/src/requirements.txt index 835f38c2785..d196bae6731 100644 --- a/stream/sentinelone-intel/src/requirements.txt +++ b/stream/sentinelone-intel/src/requirements.txt @@ -1,4 +1,4 @@ -pycti==7.260309.0 +pycti==7.260515.0 pyyaml==6.0.2 pydantic~=2.11.3 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk \ No newline at end of file diff --git a/stream/splunk-soar-push/src/requirements.txt b/stream/splunk-soar-push/src/requirements.txt index 6df1f2c91de..fe31369bbb5 100644 --- a/stream/splunk-soar-push/src/requirements.txt +++ b/stream/splunk-soar-push/src/requirements.txt @@ -1,10 +1,10 @@ -pycti==7.260309.0 -urllib3==2.6.3 +pycti==7.260515.0 +urllib3==2.7.0 pydantic-settings==2.9.1 jsonschema==4.26.0 python-dateutil==2.9.0.post0 tenacity==9.1.2 certifi==2025.11.12 -requests==2.32.5 +requests==2.33.0 PyYAML==6.0.3 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk diff --git a/stream/splunk/src/requirements.txt b/stream/splunk/src/requirements.txt index e09ced32d6e..7d3f9ab0ae4 100644 --- a/stream/splunk/src/requirements.txt +++ b/stream/splunk/src/requirements.txt @@ -1,4 +1,4 @@ -pycti==7.260309.0 +pycti==7.260515.0 stix-shifter==8.0.2 stix-shifter-utils==8.0.2 stix-shifter-modules-splunk==8.0.2 diff --git a/stream/stream-exporter/src/requirements.txt b/stream/stream-exporter/src/requirements.txt index bd120f35910..3d7f6bda588 100644 --- a/stream/stream-exporter/src/requirements.txt +++ b/stream/stream-exporter/src/requirements.txt @@ -1,2 +1,2 @@ minio==7.2.18 -pycti==7.260309.0 \ No newline at end of file +pycti==7.260515.0 \ No newline at end of file diff --git a/stream/sumologic-intel/src/requirements.txt b/stream/sumologic-intel/src/requirements.txt index 866fa35c937..0ed18e09f8e 100644 --- a/stream/sumologic-intel/src/requirements.txt +++ b/stream/sumologic-intel/src/requirements.txt @@ -1,2 +1,2 @@ -pycti==7.260309.0 +pycti==7.260515.0 pyyaml~=6.0.2 \ No newline at end of file diff --git a/stream/tanium-intel/src/requirements.txt b/stream/tanium-intel/src/requirements.txt index dcd9c9f691f..05615bdc09e 100644 --- a/stream/tanium-intel/src/requirements.txt +++ b/stream/tanium-intel/src/requirements.txt @@ -1,3 +1,3 @@ -pycti==7.260309.0 +pycti==7.260515.0 stix2-slider==4.0.1 maec==4.1.0.17 diff --git a/stream/taxii-post/README.md b/stream/taxii-post/README.md index aa137cf50d1..329cb3c1a91 100644 --- a/stream/taxii-post/README.md +++ b/stream/taxii-post/README.md @@ -72,6 +72,7 @@ There are a number of configuration options, which are set either in `docker-com |------------------|---------------------|-----------------------------|---------|-----------|------------------------------------------------------------| | TAXII URL | taxii.url | `TAXII_URL` | | Yes | URL of the TAXII server. | | SSL Verify | taxii.ssl_verify | `TAXII_SSL_VERIFY` | true | No | Verify SSL certificates. | +| API Root | taxii.api_root | `TAXII_API_ROOT` | root | No | TAXII API root (path segment between server URL and /collections/). | | Collection ID | taxii.collection_id | `TAXII_COLLECTION_ID` | | Yes | TAXII collection ID to POST to. | | Token | taxii.token | `TAXII_TOKEN` | | No | Bearer token (if set, Basic auth is ignored). | | Login | taxii.login | `TAXII_LOGIN` | | No | Username for Basic authentication. | @@ -104,6 +105,7 @@ Configure the connector in `docker-compose.yml`: - CONNECTOR_LIVE_STREAM_ID=ChangeMe - TAXII_URL=https://taxii.example.com - TAXII_SSL_VERIFY=true + - TAXII_API_ROOT=root - TAXII_COLLECTION_ID=ChangeMe - TAXII_TOKEN=ChangeMe - TAXII_VERSION=2.1 diff --git a/stream/taxii-post/docker-compose.yml b/stream/taxii-post/docker-compose.yml index 4dc3350d7c1..579469bfe23 100644 --- a/stream/taxii-post/docker-compose.yml +++ b/stream/taxii-post/docker-compose.yml @@ -15,6 +15,7 @@ services: - CONNECTOR_LOG_LEVEL=error - TAXII_URL=https://taxii.changeme.com # The URL of the TAXII Server - TAXII_SSL_VERIFY=true + - TAXII_API_ROOT=root # The TAXII API root (path segment between server URL and /collections/) - TAXII_COLLECTION_ID=ChangeMe # The collection ID - TAXII_TOKEN= # Token for bearer auth (if set, will ignore basic auth params) - TAXII_LOGIN= # Login for basic auth diff --git a/stream/taxii-post/src/config.yml.sample b/stream/taxii-post/src/config.yml.sample index 3a575223ec1..b5bfd1ff0b8 100644 --- a/stream/taxii-post/src/config.yml.sample +++ b/stream/taxii-post/src/config.yml.sample @@ -16,6 +16,7 @@ connector: taxii: url: 'https://taxii.changeme.com' # The URL of the TAXII Server ssl_verify: true + api_root: 'root' # The TAXII API root (path segment between server URL and /collections/) collection_id: 'ChangeMe' # The collection ID token: '' # Token for bearer auth (if set, will ignore basic auth params) login: 'ChangeMe' # Login for basic auth diff --git a/stream/taxii-post/src/main.py b/stream/taxii-post/src/main.py index d8f7b572cde..3d3b700e529 100644 --- a/stream/taxii-post/src/main.py +++ b/stream/taxii-post/src/main.py @@ -71,6 +71,9 @@ def __init__(self): self.taxii_stix_version = get_config_variable( "TAXII_STIX_VERSION", ["taxii", "stix_version"], config ) + self.taxii_api_root = get_config_variable( + "TAXII_API_ROOT", ["taxii", "api_root"], config, default="root" + ) def check_stream_id(self): """ @@ -90,7 +93,9 @@ def _process_message(self, msg): self.helper.log_info("Processing the object " + data["id"]) url = ( self.taxii_url - + "/root/collections/" + + "/" + + self.taxii_api_root + + "/collections/" + self.taxii_collection_id + "/objects/" ) diff --git a/stream/taxii-post/src/requirements.txt b/stream/taxii-post/src/requirements.txt index e1e0bd9718c..e3a19393203 100644 --- a/stream/taxii-post/src/requirements.txt +++ b/stream/taxii-post/src/requirements.txt @@ -1 +1 @@ -pycti==7.260309.0 +pycti==7.260515.0 diff --git a/stream/virustotal-livehunt-rules/src/requirements.txt b/stream/virustotal-livehunt-rules/src/requirements.txt index e1e0bd9718c..e3a19393203 100644 --- a/stream/virustotal-livehunt-rules/src/requirements.txt +++ b/stream/virustotal-livehunt-rules/src/requirements.txt @@ -1 +1 @@ -pycti==7.260309.0 +pycti==7.260515.0 diff --git a/stream/webhook/src/requirements.txt b/stream/webhook/src/requirements.txt index cfeece2521c..a51979cfe2e 100644 --- a/stream/webhook/src/requirements.txt +++ b/stream/webhook/src/requirements.txt @@ -1,2 +1,2 @@ -pycti==7.260309.0 +pycti==7.260515.0 stix-shifter==8.0.2 \ No newline at end of file diff --git a/stream/zscaler/src/requirements.txt b/stream/zscaler/src/requirements.txt index 83e63b03ae1..e10a98ec2aa 100644 --- a/stream/zscaler/src/requirements.txt +++ b/stream/zscaler/src/requirements.txt @@ -1,7 +1,7 @@ #all the dependencies -pycti==7.260309.0 -requests~=2.32.2 -python-dotenv==1.1.1 +pycti==7.260515.0 +requests~=2.33.0 +python-dotenv==1.2.2 pyyaml==6.0.3 validators==0.35.0 tenacity==9.1.2 \ No newline at end of file diff --git a/stream/zscaler/src/stream_connector/connector.py b/stream/zscaler/src/stream_connector/connector.py index fb927b2df79..a50f65600a3 100644 --- a/stream/zscaler/src/stream_connector/connector.py +++ b/stream/zscaler/src/stream_connector/connector.py @@ -47,9 +47,8 @@ def __init__( self.opencti_url, self.opencti_token, ssl_verify=self.ssl_verify ) - self.zscaler_token = None - self.zscaler_token_expiry = None - self.session_cookie = None # To store the JSESSIONID + self.zscaler_base_url = "https://zsapi.zscalertwo.net/api/v1" + self.session = requests.Session() self.rate_limit = 400 # Limit to 400 requests per hour self.retry_delay = 65 # Retry delay in seconds @@ -58,7 +57,7 @@ def authenticate_with_zscaler(self): """Authenticate with Zscaler and obtain a session token.""" self.helper.connector_logger.info("Authenticating with Zscaler...") - url = "https://zsapi.zscalertwo.net/api/v1/authenticatedSession" + url = f"{self.zscaler_base_url}/authenticatedSession" timestamp = str(int(time.time() * 1000)) obfuscated_api_key = obfuscate_api_key(self.api_key, timestamp) @@ -71,7 +70,7 @@ def authenticate_with_zscaler(self): headers = {"Content-Type": "application/json"} response = self.handle_rate_limit( - requests.post, url, json=payload, headers=headers + self.session.post, url, json=payload, headers=headers ) safe_payload = sanitize_payload(payload) @@ -79,30 +78,18 @@ def authenticate_with_zscaler(self): f"Payload sent (sanitized): {json.dumps(safe_payload, indent=4)}" ) - if response: + if response and response.status_code == 200: self.helper.connector_logger.debug( f"Raw response from Zscaler: {response.text}" ) - - if response and response.status_code == 200: # retrieve the JSESSIONID cookie - self.session_cookie = response.cookies.get("JSESSIONID") - - # if not found → try an authToken in the JSON (depending on the Zscaler tenant) - if not self.session_cookie: - try: - data = response.json() - self.session_cookie = data.get("authToken") - except Exception: - self.session_cookie = None - - if self.session_cookie: + if self.session.cookies.get("JSESSIONID"): self.helper.connector_logger.info( - f"Authenticated successfully with Zscaler. Token: {self.session_cookie[:10]}..." + "Authenticated successfully with Zscaler." ) else: self.helper.connector_logger.error( - "Authentication succeeded but no session token found in the response." + "Authentication succeeded but no JSESSIONID cookie found in the response." ) else: status_code = response.status_code if response else "No response" @@ -110,7 +97,6 @@ def authenticate_with_zscaler(self): self.helper.connector_logger.error( f"Failed to authenticate with Zscaler: {status_code} - {text}" ) - self.session_cookie = None def handle_rate_limit(self, request_func, *args, **kwargs): """Handle rate limits for the Zscaler API by applying a delay if the limit is reached.""" @@ -122,11 +108,24 @@ def handle_rate_limit(self, request_func, *args, **kwargs): response = request_func(*args, **kwargs) if response and response.status_code == 200: return response + if response and response.status_code == 429: retry_after = response.headers.get("Retry-After", retry_delay) msg = f"Rate limit exceeded. Retrying in {retry_after} seconds..." self.helper.connector_logger.warning(msg) time.sleep(int(retry_after)) + continue + + if response and response.status_code == 401: + msg = "Request failed with status 401 : SESSION_NOT_VALID. Re-authentication has started..." + self.helper.connector_logger.warning(msg) + self.authenticate_with_zscaler() + if not self.session.cookies.get("JSESSIONID"): + self.helper.connector_logger.error( + "Re-authentication failed, aborting retry." + ) + return None + continue else: msg = f"Request failed with status {response.status_code}: {response.text}" self.helper.connector_logger.error(msg) @@ -135,16 +134,6 @@ def handle_rate_limit(self, request_func, *args, **kwargs): self.helper.connector_logger.error("Max retries reached. Request failed.") return None - def get_zscaler_session_cookie(self): - """Retrieve or renew the Zscaler session by getting the JSESSIONID cookie.""" - - if self.session_cookie is None: - self.helper.connector_logger.warning( - "Zscaler session expired or missing. Re-authenticating..." - ) - self.authenticate_with_zscaler() - return self.session_cookie - def extract_domain(self, pattern): """Extract domain from the STIX pattern if it follows the format [domain-name:value = 'example.com']""" match = re.search(r"\[domain-name:value\s*=\s*'([^']+)'\]", pattern) @@ -160,19 +149,11 @@ def is_valid_domain(self, pattern): def get_domain_classification_in_zscaler(self, domain): """Retrieve the classification of a domain in Zscaler via the urlLookup API.""" - session_cookie = self.get_zscaler_session_cookie() - - headers = { - "Content-Type": "application/json", - "Cookie": f"JSESSIONID={session_cookie}", - } - lookup_url = "https://zsapi.zscalertwo.net/api/v1/urlLookup" + lookup_url = f"{self.zscaler_base_url}/urlLookup" payload = json.dumps([domain]) - response = self.handle_rate_limit( - requests.post, lookup_url, headers=headers, data=payload - ) + response = self.handle_rate_limit(self.session.post, lookup_url, data=payload) msg = f"=== Checking domain {domain} ===" self.helper.connector_logger.debug(msg) @@ -188,15 +169,9 @@ def get_domain_classification_in_zscaler(self, domain): def get_zscaler_blocked_domains(self): """Retrieve the list of blocked domains in the specified Zscaler blacklist.""" - session_cookie = self.get_zscaler_session_cookie() - headers = { - "Content-Type": "application/json", - "Cookie": f"JSESSIONID={session_cookie}", - } - # Dynamic URL for blacklisting - url = f"https://zsapi.zscalertwo.net/api/v1/urlCategories/{self.zscaler_blacklist_name}" - response = self.handle_rate_limit(requests.get, url, headers=headers) + url = f"{self.zscaler_base_url}/urlCategories/{self.zscaler_blacklist_name}" + response = self.handle_rate_limit(self.session.get, url) if response and response.status_code == 200: return response.json().get("urls", []) @@ -208,13 +183,8 @@ def get_zscaler_blocked_domains(self): return [] def get_current_configured_name(self): - session_cookie = self.get_zscaler_session_cookie() - headers = { - "Content-Type": "application/json", - "Cookie": f"JSESSIONID={session_cookie}", - } - url = f"https://zsapi.zscalertwo.net/api/v1/urlCategories/{self.zscaler_blacklist_name}" - response = self.handle_rate_limit(requests.get, url, headers=headers) + url = f"{self.zscaler_base_url}/urlCategories/{self.zscaler_blacklist_name}" + response = self.handle_rate_limit(self.session.get, url) if response and response.status_code == 200: return response.json().get("configuredName") return None @@ -243,18 +213,12 @@ def check_and_send_to_zscaler(self, data, event_type): def send_to_zscaler(self, domain, event_type): """Send creation or deletion events to Zscaler.""" - session_cookie = self.get_zscaler_session_cookie() - headers = { - "Content-Type": "application/json", - "Cookie": f"JSESSIONID={session_cookie}", - } - real_configured_name = self.get_current_configured_name() if event_type == "create": - base_url = f"https://zsapi.zscalertwo.net/api/v1/urlCategories/{self.zscaler_blacklist_name}?action=ADD_TO_LIST" + base_url = f"{self.zscaler_base_url}/urlCategories/{self.zscaler_blacklist_name}?action=ADD_TO_LIST" elif event_type == "delete": - base_url = f"https://zsapi.zscalertwo.net/api/v1/urlCategories/{self.zscaler_blacklist_name}?action=REMOVE_FROM_LIST" + base_url = f"{self.zscaler_base_url}/urlCategories/{self.zscaler_blacklist_name}?action=REMOVE_FROM_LIST" else: msg = "Unsupported event type." self.helper.connector_logger.error(msg) @@ -265,9 +229,7 @@ def send_to_zscaler(self, domain, event_type): "urls": [domain], } - response = self.handle_rate_limit( - requests.put, base_url, headers=headers, json=payload - ) + response = self.handle_rate_limit(self.session.put, base_url, json=payload) if response and response.status_code == 200: msg = f"Successfully sent {event_type} for {domain}." @@ -286,18 +248,12 @@ def send_to_zscaler(self, domain, event_type): def activate_zscaler_changes(self, max_retries=5, delay=30): """Activate configuration changes in Zscaler with retry/backoff handled by tenacity.""" - session_cookie = self.get_zscaler_session_cookie() - headers = { - "Content-Type": "application/json", - "Cookie": f"JSESSIONID={session_cookie}", - } - - status_url = "https://zsapi.zscalertwo.net/api/v1/status" - activate_url = "https://zsapi.zscalertwo.net/api/v1/status/activate" + status_url = f"{self.zscaler_base_url}/status" + activate_url = f"{self.zscaler_base_url}/status/activate" for attempt in range(1, max_retries + 1): # Check if already ACTIVE/PENDING/INPROGRESS - status_resp = requests.get(status_url, headers=headers) + status_resp = self.session.get(status_url) if status_resp and status_resp.status_code == 200: status = status_resp.json().get("status") if status in ("ACTIVE", "PENDING", "INPROGRESS"): @@ -307,7 +263,7 @@ def activate_zscaler_changes(self, max_retries=5, delay=30): return True # Try activation - resp = requests.post(activate_url, headers=headers) + resp = self.session.post(activate_url) if resp and resp.status_code == 200: self.helper.connector_logger.info("Zscaler configuration activated.") return True diff --git a/stream/zscaler/tests/conftest.py b/stream/zscaler/tests/conftest.py new file mode 100644 index 00000000000..2a9b312b77d --- /dev/null +++ b/stream/zscaler/tests/conftest.py @@ -0,0 +1,82 @@ +import os +import sys +from unittest.mock import Mock + +import pytest + +sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "../src"))) + +from pycti import OpenCTIConnectorHelper +from stream_connector import connector as zscaler + + +@pytest.fixture(autouse=True) +def mock_obfuscate(monkeypatch): + """Mock obfuscate_api_key to return a dummy string.""" + monkeypatch.setattr( + "stream_connector.utils.obfuscate_api_key", + lambda api_key, timestamp: "dummy-obfuscated", + ) + + +@pytest.fixture +def connector(helper_mock, mock_config, mock_session, mock_opencti_client): + """Provide a ZscalerConnector instance with mocked config, session and OpenCTI client""" + + zscaler_connector = zscaler.ZscalerConnector( + config_path=None, + helper=helper_mock, + opencti_url=mock_config.opencti.url, + opencti_token=mock_config.opencti.token, + ssl_verify=mock_config.ssl_verify, + zscaler_username=mock_config.zscaler.username, + zscaler_password=mock_config.zscaler.password, + zscaler_api_key=mock_config.zscaler.api_key, + zscaler_blacklist_name=mock_config.zscaler.blacklist_name, + ) + zscaler_connector.session = mock_session + return zscaler_connector + + +@pytest.fixture +def mock_config(): + """Simulate configuration values for ZscalerConnector""" + mock = Mock() + mock.opencti.url = "https://opencti.example.com" + mock.opencti.token = "dummy-token" + mock.ssl_verify = False + mock.zscaler.username = "user" + mock.zscaler.password = "pass" + mock.zscaler.api_key = "api-key" + mock.zscaler.blacklist_name = "blacklist" + return mock + + +@pytest.fixture +def mock_opencti_client(monkeypatch): + mock_client = Mock() + mock_client.health_check.return_value = True + + monkeypatch.setattr( + zscaler, "OpenCTIApiClient", lambda *args, **kwargs: mock_client + ) + + return mock_client + + +@pytest.fixture +def helper_mock(): + """Mock OpenCTIConnectorHelper with logger and listen_stream""" + helper = Mock(spec=OpenCTIConnectorHelper) + helper.connector_logger = Mock() + helper.listen_stream = Mock() + return helper + + +@pytest.fixture +def mock_session(monkeypatch): + """Patch requests.Session to avoid real HTTP calls""" + + mock_sess = Mock() + monkeypatch.setattr(zscaler.requests, "Session", lambda: mock_sess) + return mock_sess diff --git a/stream/zscaler/tests/constraints/reauthentication_fails.constraint.feature b/stream/zscaler/tests/constraints/reauthentication_fails.constraint.feature new file mode 100644 index 00000000000..e656ac1630d --- /dev/null +++ b/stream/zscaler/tests/constraints/reauthentication_fails.constraint.feature @@ -0,0 +1,6 @@ +Feature: Re-authentication failure + + Scenario: Re-authentication fails + Given a Zscaler connector with an expired session + When a request returns 401 and re-authentication fails + Then the connector should stop retrying and return None \ No newline at end of file diff --git a/stream/zscaler/tests/constraints/test_reauthentication_fails.py b/stream/zscaler/tests/constraints/test_reauthentication_fails.py new file mode 100644 index 00000000000..239e99f4ed2 --- /dev/null +++ b/stream/zscaler/tests/constraints/test_reauthentication_fails.py @@ -0,0 +1,56 @@ +from unittest.mock import Mock + +import pytest +from pytest_bdd import given, scenarios, then, when + +scenarios("./reauthentication_fails.constraint.feature") + + +@pytest.fixture(autouse=True) +def mock_obfuscate(monkeypatch): + monkeypatch.setattr( + "stream_connector.connector.obfuscate_api_key", + lambda api_key, timestamp: "dummy-obfuscated", + ) + + +@pytest.fixture(autouse=True) +def mock_authenticate(monkeypatch): + monkeypatch.setattr( + "stream_connector.connector.ZscalerConnector.authenticate_with_zscaler", + lambda self: None, + ) + + +@pytest.fixture +def expired_connector(connector, mock_session): + connector.session = mock_session + connector.session.cookies = {} + return connector + + +@given("a Zscaler connector with an expired session") +def step_given_expired_session(expired_connector): + return expired_connector + + +@when("a request returns 401 and re-authentication fails") +def step_request_401(expired_connector): + connector = expired_connector + + def fake_post(*args, **kwargs): + response = Mock() + response.status_code = 401 + response.text = "SESSION_NOT_VALID" + response.cookies = {} + return response + + connector.session.post.side_effect = fake_post + connector._last_response = connector.handle_rate_limit(connector.session.post) + return connector + + +@then("the connector should stop retrying and return None") +def step_stop_retry(expired_connector): + connector = expired_connector + assert connector._last_response is None diff --git a/stream/zscaler/tests/features/test_zscaler_session.py b/stream/zscaler/tests/features/test_zscaler_session.py new file mode 100644 index 00000000000..4c2de048e9c --- /dev/null +++ b/stream/zscaler/tests/features/test_zscaler_session.py @@ -0,0 +1,73 @@ +from unittest.mock import Mock + +from pytest_bdd import given, scenarios, then, when +from requests.cookies import RequestsCookieJar + +scenarios("./zscaler_session.feature") + + +@given("a valid authenticated Zscaler session") +def valid_session(connector): + cookie_jar = RequestsCookieJar() + cookie_jar.set("JSESSIONID", "initial-session") + + mock_response = Mock() + mock_response.status_code = 200 + mock_response.cookies = cookie_jar + + connector.session.post = Mock(return_value=mock_response) + connector.session.cookies = cookie_jar + + +# ---------------- +# Scenario: Request succeeds with a valid session +@when("a request is made to Zscaler") +def make_request(connector): + connector.handle_rate_limit(connector.session.post, "https://zsapi.example.com") + + +@then("the request should succeed without re-authentication") +def request_succeeds(connector): + jsessionid = connector.session.cookies.get("JSESSIONID") + assert jsessionid == "initial-session" + + +# ---------------- + + +# ---------------- +# Scenario: Request auto-reconnects on expired session +@when("the session expires and a request returns 401") +def session_expires(connector, monkeypatch): + + resp_401 = Mock() + resp_401.status_code = 401 + resp_401.text = "SESSION_EXPIRED" + resp_401.cookies = RequestsCookieJar() + + new_cookie = RequestsCookieJar() + new_cookie.set("JSESSIONID", "new-session") + + resp_200 = Mock() + resp_200.status_code = 200 + resp_200.cookies = new_cookie + + def fake_authenticate(self): + self.session.cookies = new_cookie + + monkeypatch.setattr( + "stream_connector.connector.ZscalerConnector.authenticate_with_zscaler", + fake_authenticate, + ) + + connector.session.post = Mock(side_effect=[resp_401, resp_200]) + connector._last_response = connector.handle_rate_limit(connector.session.post) + + +@then("the connector should re-authenticate and succeed") +def reauth_success(connector): + assert connector._last_response.status_code == 200 + assert connector.session.cookies.get("JSESSIONID") == "new-session" + + +# ---------------- diff --git a/stream/zscaler/tests/features/zscaler_session.feature b/stream/zscaler/tests/features/zscaler_session.feature new file mode 100644 index 00000000000..3aa59f8690c --- /dev/null +++ b/stream/zscaler/tests/features/zscaler_session.feature @@ -0,0 +1,11 @@ +Feature: Zscaler session handling + + Scenario: Request succeeds with a valid session + Given a valid authenticated Zscaler session + When a request is made to Zscaler + Then the request should succeed without re-authentication + + Scenario: Request auto-reconnects on expired session + Given a valid authenticated Zscaler session + When the session expires and a request returns 401 + Then the connector should re-authenticate and succeed \ No newline at end of file diff --git a/stream/zscaler/tests/test-requirements.txt b/stream/zscaler/tests/test-requirements.txt new file mode 100644 index 00000000000..32a7a24a0c0 --- /dev/null +++ b/stream/zscaler/tests/test-requirements.txt @@ -0,0 +1,6 @@ +-r ../src/requirements.txt +pytest>=7.0 +pytest-bdd>=6.0 +pytest-mock>=3.0 + +pytest-cov>=4.0 \ No newline at end of file diff --git a/templates/external-import/src/requirements.txt b/templates/external-import/src/requirements.txt index 30bfcd9cdc7..3fae2ea6d48 100644 --- a/templates/external-import/src/requirements.txt +++ b/templates/external-import/src/requirements.txt @@ -1,5 +1,5 @@ -pycti==7.260309.0 +pycti==7.260515.0 pydantic~= 2.11.3 -requests~=2.32.3 +requests~=2.33.0 validators==0.35.0 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk \ No newline at end of file diff --git a/templates/external-import/tests/test-requirements.txt b/templates/external-import/tests/test-requirements.txt index b46752671ca..386ed5a0a36 100644 --- a/templates/external-import/tests/test-requirements.txt +++ b/templates/external-import/tests/test-requirements.txt @@ -1,3 +1,3 @@ # Main dependencies needs to be installed -r ../src/requirements.txt -pytest==8.4.2 +pytest==9.0.3 diff --git a/templates/internal-enrichment/src/requirements.txt b/templates/internal-enrichment/src/requirements.txt index 30bfcd9cdc7..3fae2ea6d48 100644 --- a/templates/internal-enrichment/src/requirements.txt +++ b/templates/internal-enrichment/src/requirements.txt @@ -1,5 +1,5 @@ -pycti==7.260309.0 +pycti==7.260515.0 pydantic~= 2.11.3 -requests~=2.32.3 +requests~=2.33.0 validators==0.35.0 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk \ No newline at end of file diff --git a/templates/internal-enrichment/tests/test-requirements.txt b/templates/internal-enrichment/tests/test-requirements.txt index b46752671ca..386ed5a0a36 100644 --- a/templates/internal-enrichment/tests/test-requirements.txt +++ b/templates/internal-enrichment/tests/test-requirements.txt @@ -1,3 +1,3 @@ # Main dependencies needs to be installed -r ../src/requirements.txt -pytest==8.4.2 +pytest==9.0.3 diff --git a/templates/internal-export-file/src/requirements.txt b/templates/internal-export-file/src/requirements.txt index 5611c814a09..da45f2c73c6 100644 --- a/templates/internal-export-file/src/requirements.txt +++ b/templates/internal-export-file/src/requirements.txt @@ -1,3 +1,3 @@ -pycti==7.260309.0 +pycti==7.260515.0 pydantic~= 2.11.3 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk \ No newline at end of file diff --git a/templates/internal-export-file/tests/test-requirements.txt b/templates/internal-export-file/tests/test-requirements.txt index b46752671ca..386ed5a0a36 100644 --- a/templates/internal-export-file/tests/test-requirements.txt +++ b/templates/internal-export-file/tests/test-requirements.txt @@ -1,3 +1,3 @@ # Main dependencies needs to be installed -r ../src/requirements.txt -pytest==8.4.2 +pytest==9.0.3 diff --git a/templates/internal-import-file/src/requirements.txt b/templates/internal-import-file/src/requirements.txt index 5611c814a09..da45f2c73c6 100644 --- a/templates/internal-import-file/src/requirements.txt +++ b/templates/internal-import-file/src/requirements.txt @@ -1,3 +1,3 @@ -pycti==7.260309.0 +pycti==7.260515.0 pydantic~= 2.11.3 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk \ No newline at end of file diff --git a/templates/internal-import-file/tests/test-requirements.txt b/templates/internal-import-file/tests/test-requirements.txt index b46752671ca..386ed5a0a36 100644 --- a/templates/internal-import-file/tests/test-requirements.txt +++ b/templates/internal-import-file/tests/test-requirements.txt @@ -1,3 +1,3 @@ # Main dependencies needs to be installed -r ../src/requirements.txt -pytest==8.4.2 +pytest==9.0.3 diff --git a/templates/stream/src/requirements.txt b/templates/stream/src/requirements.txt index 91fea263360..9da3a3e1966 100644 --- a/templates/stream/src/requirements.txt +++ b/templates/stream/src/requirements.txt @@ -1,4 +1,4 @@ -pycti==7.260309.0 +pycti==7.260515.0 pydantic~= 2.11.3 -requests~=2.32.3 +requests~=2.33.0 connectors-sdk @ git+https://github.com/OpenCTI-Platform/connectors.git@master#subdirectory=connectors-sdk \ No newline at end of file diff --git a/templates/stream/tests/test-requirements.txt b/templates/stream/tests/test-requirements.txt index b46752671ca..386ed5a0a36 100644 --- a/templates/stream/tests/test-requirements.txt +++ b/templates/stream/tests/test-requirements.txt @@ -1,3 +1,3 @@ # Main dependencies needs to be installed -r ../src/requirements.txt -pytest==8.4.2 +pytest==9.0.3 diff --git a/tests/test-requirements.txt b/tests/test-requirements.txt index f18240ae2af..371ab15661b 100644 --- a/tests/test-requirements.txt +++ b/tests/test-requirements.txt @@ -1 +1 @@ -pytest~=8.4.2 \ No newline at end of file +pytest~=9.0.3 \ No newline at end of file